Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,13 @@ After every PR (or PR stack) merges to main:
- **Library-first UI**: Always prefer existing library components (Taiga UI, Angular CDK) over custom HTML + CSS implementations. Writing custom UI or logic without justification is NG. Taiga UI components are customizable via CSS custom properties (`--tui-*`) — override tokens in `styles.css` rather than reimplementing from scratch.
- **Library-source-first debugging (mandatory, not advisory)**: When a library, framework, or infra tool (Dependabot, GitHub Actions, Docker, pnpm) behaves unexpectedly — OR before proposing a fix for a config error in any of these tools — read the official documentation and search the issue tracker for the exact error message **before writing any fix**. This applies to the very first fix attempt, not only after subsequent failures. Empirical trial-and-error without reading the source produces multiple fix commits for the same root cause. Minimum: read the relevant config reference, check the changelog for breaking changes in the version in use, and search GitHub Issues / Discussions for the exact error message.

- **Never state a verification result you did not produce (mandatory)**: Every factual claim written into an issue, PR body, plan, commit message or review — "absent from `git ls-files`", "the build passes", "no commit ever added this file", "all three checks were run" — must come from a command actually executed in the session that writes it. If a check was not run, run it or omit the claim. An unrun check must never appear in the past tense. This is not a stylistic preference: a fabricated claim is indistinguishable from a measured one to every later reader, so it survives review and gets acted on. Issue #126 (since deleted) reported that `SDLC.md` "has never existed in the repo" on three grounds, of which two were written without being executed and were false — the file was present, tracked, and six revisions deep at the time. It was proposed, approved, filed, worked on and closed before anyone opened it.

Two habits follow:

- **A single negative probe is not evidence of absence — run the positive control.** The one check #126 did run, `git log --diff-filter=D -- '*SDLC*'`, returned nothing, which proves the file was never *deleted*. It was read as proving the file never existed. `--diff-filter=A` returns the adding commit immediately. Before concluding that something is missing, run the query that would find it if it were there.
- **Verify claims about this repository the way you verify claims about a library.** The rule above applies to `git`, `CLAUDE.md`, `SDLC.md` and the working tree, not only to third-party tools. The repo is simultaneously the easiest primary source to read and the easiest to assume you already know.

## Testing

- **Boundary-first**: Always test application boundaries — HTTP controllers, WebSocket gateways, pipes. Internal service logic is tested only where needed to reach the coverage target.
Expand Down