Skip to content

docs: keep only the traps in CLAUDE.md#95

Merged
omartelo merged 1 commit into
mainfrom
docs/tighten-claude-md
Jul 25, 2026
Merged

docs: keep only the traps in CLAUDE.md#95
omartelo merged 1 commit into
mainfrom
docs/tighten-claude-md

Conversation

@omartelo

Copy link
Copy Markdown
Owner

CLAUDE.md is injected into every prompt, so anything in it that the code says better is a cost paid per session. This is a pass over the whole file with one question per line: what breaks if nobody knows this?

Out

  • Self-update and No AppImage — decision history. It lives in internal/appupdate and docs/chromium-shell.md, and nothing breaks by not knowing it.
  • Windows / macOS roadmap — code signing, winget, .dmg/Homebrew are issues, not ceilings. What breaks code stayed: cmd.exe as the shell, a GUI build with no console (so diagnostics only reach the log file), unsigned binaries.
  • Release fan-out, job by job — release.yml says it. One sentence now, keeping the trap: the version is injected into nfpm.yaml, never hand-edited there.
  • Terminal I/O transport — already in Stack. Only the fallback behaviour survives, which is the part that isn't obvious.
  • "Frontend in isolation" — duplicated the Local Gate line above it.
  • xterm / CodeMirror detail in the Stack bullet — frontend/CLAUDE.md covers it and loads whenever that directory is touched. The bullet points there now.

In

  • docs/hooks/ as a cross-repo contract. It declares itself contract-first, and the other side ships in omartelo/lich-plugin. Changing an endpoint or payload breaks a repo this one cannot see, and the handler gives no hint.
  • CHANGELOG entry in the same PR as the user-facing change. The release notes are read from [Unreleased], so an entry written later missed its release. The convention was already in the history, just not written down.
  • The criterion itself, in the Known Ceilings intro — a bullet earns its place by naming a trap the call site never shows. The next one written there has a bar to clear.

The api-types.ts rule stayed on the root on purpose: it breaks in the backend direction (touch a Go struct's JSON tags), and frontend/CLAUDE.md never loads on that path.

Test plan

Docs only — no code touched, so the gate has nothing to run. What was verified instead is that the file still matches the repo:

  • Every path cited in a surviving bullet exists (internal/terminal/cwd.go, internal/store, internal/singleton, frontend/src/lib/git/git-status-store.ts, frontend/src/lib/use-sortable-list.ts, internal/chromium, docs/hooks/).
  • Stack claims check out against the manifests: go 1.25.0, React 18, @xterm/xterm ^6, the four providers in internal/providers/providers.go, defaultListenPort = "47821" in main.go.
  • The gate commands the file documents actually run: pnpm check exit 0, pnpm test 43 files / 406 tests green.

Noted separately, not fixed here: biome.jsonc:24 still uses recommended, deprecated and removed in the next Biome major — it warns on every pnpm check.

Known Ceilings had drifted into decision history. The self-update bullet and the
No AppImage note describe mechanism that already lives in internal/appupdate and
docs/chromium-shell.md, and no work breaks by not knowing either — so they were
costing a prompt every session to say what the code says better. Both are gone.
The Windows and macOS bullets kept what breaks code (cmd.exe as the shell, a GUI
build with no console, unsigned binaries) and dropped the roadmap of what is
missing, which is issue material. The release fan-out narrative restated
release.yml job by job and became one sentence, keeping the one trap in it: the
version is injected into nfpm.yaml, never hand-edited there.

Two things were missing, and both do break work when unknown. docs/hooks is a
contract-first spec whose other side ships in omartelo/lich-plugin, so changing
an endpoint or a payload breaks a repo this one cannot see, and the handler
gives no hint of that. And a user-facing change needs its CHANGELOG
[Unreleased] entry in the same PR, because the release notes are read from
there and an entry written later missed its release.

The Stack bullet for the frontend was describing xterm and CodeMirror, which
frontend/CLAUDE.md already does whenever that directory is touched; it now
points there instead. The api-types.ts rule stayed on the root, deliberately:
it breaks in the backend direction, where the nested file never loads.

The section intro now states the criterion the bullets are held to, so the next
one written there has a bar to clear.
@omartelo
omartelo merged commit 79e9d46 into main Jul 25, 2026
3 checks passed
@omartelo
omartelo deleted the docs/tighten-claude-md branch July 25, 2026 22:18
@omartelo omartelo mentioned this pull request Jul 25, 2026
6 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant