Files
Maven/docs/caveats/CLAUDE.md
T
claude 240d53a96a Give the stage 0 grammar set one home (V-693)
buildRouter held the real set and baselineGrammars in eval_test.go restated it
by hand, in the daemon's order, with its own comment saying so. Three test files
score against the fixture and nothing compared the two lists. They had already
drifted: BareCaptureGrammar went into the daemon with V-557 and never into the
fixture, so every routing measurement since has scored a set nobody runs. That
is the failure CLAUDE.md warns about by name, and a diff test would have caught
it one grammar late.

The list moves to router.StageZeroGrammars in internal/router/stagezero.go, with
the ordering comments, which are the load-bearing part. buildRouter and the
fixture both call it. One list cannot drift from itself.

Measured before and after on the 96-case fixture: classifier+onnx 72/96, 75.0%
intent, 33.3% destination, identical either way, and the deterministic claim and
reach hash ratchets do not move. So the missing grammar cost no measurable
accuracy. That is the point rather than a reprieve: the fixture had been scoring
the wrong set for four days and nothing could say so.

The invariants caveat is deleted, both entries, since V-692 landed the other
guard in the previous commit. The reasoning for both now sits in docs/routing.md
beside the subsystem, which is where a fix's durable record belongs.

Unrelated and pre-existing: TestONNXPersonalBoundary fails on "я рассказывал
тебе про байкал?" (personal 0.9068, world 0.9413) at the merge base too.
2026-08-11 21:02:31 +04:00

2.8 KiB

docs/caveats/

One entry per known limit: something broken, deferred or unsafe that a session will otherwise walk into. An entry names what fails, who it costs, and the condition that makes it worth fixing.

Two things do not belong here. The evidence is a dated file under docs/evals/. The reasoning behind a subsystem is its living doc directly under docs/. A caveat is the pointer between them plus the trigger.

Rules for this directory

  • One file per area, one ## section per limit, each carrying its task id.
  • A caveat with no revisit trigger is a complaint. Give it one or delete it.
  • Closing a limit deletes its entry. It does not edit it to say "fixed", and it never edits the frozen measurement it came from. The durable record of a fix is the commit and the subsystem's living doc.
  • An entry whose task is closed but whose limit is still live is the failure mode to watch for. The id joins the two directions, so check both.

Index

Every entry below came from the 2026-08-10 deep audit (docs/evals/2026-08-10-repo-audit.md), except the last, which came from wiring the gate the audit asked for. Five of the twenty findings are fixed and have no entry. The unauthenticated mavgpud proxy was V-673. The 20 reachable advisories in the toolchain and x/text were V-682. The missing analyzers were V-694, and what they now report is the baseline entry under V-701. The two unguarded invariants were V-692 and V-693, and their guards are described in docs/routing.md.

limit severity
Anyone past the proxy can enroll a passkey high
Passkey credentials are rewritten in place medium
An empty STT transcript reads as a successful one medium
Open-Meteo's empty body becomes 0°C medium
Dialogue persistence errors are swallowed medium
The reminder transition is a lost update medium
A recall miss scans two whole tables medium
Closing a TCP listener can strand Accept medium
PTT reads an unbounded body medium
mavweb errors cannot be traced medium
Fact enrichment is a 20-call serial waterfall medium
A suppressed nudge is phrased anyway medium
Committed absolute paths pin the build to this box medium
The env example omits deployed variables medium
The analyzers pass against a baseline, not zero medium
Domain packages depend on store and IPC types low
Eleven symbols are unreachable low