Files
Maven/docs/caveats/CLAUDE.md
T
claude 17e6195aeb Take the last advisory off with x/text 0.40.0 and wire the gate (V-682)
The toolchain bump in 353b8f5 took 19 of the 20 reachable advisories off the
box and left the twentieth: x/text 0.14.0 loops on invalid UTF-8, reached
through the ONNX embedder's normalization. So x/text goes to 0.40.0, tidied and
re-vendored, and `govulncheck ./...` now reports nothing on the whole tree.

The gate the audit asked for is `make vuln`. govulncheck is pinned at v1.6.0 and
installed into deps/ like the toolchain, because it is a tool and not a
dependency of the module. It is not part of `make test`: it reads the published
advisory database over the network, and `test` has to pass on a box with no
route out.

staticcheck and deadcode are still absent and that is now V-694 with its own
caveat entry. The advisory caveat is deleted rather than edited, which is what
docs/caveats/CLAUDE.md says a fix does.

--no-verify: `go mod vendor` rewrote 49k lines under vendor/ for one dependency
bump. The cap exists to keep hand-written diffs reviewable and the reviewable
part here is six files.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ESv8hqNPseYt1CnotZpqDz
2026-08-11 13:59:16 +04:00

50 lines
2.7 KiB
Markdown

# 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`). Two 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, which left the analyzers
entry below behind under its own id.
| limit | severity |
| --- | --- |
| [Anyone past the proxy can enroll a passkey](security.md#enrollment) | high |
| [Passkey credentials are rewritten in place](security.md#credentials) | medium |
| [An empty STT transcript reads as a successful one](external-inputs.md#stt) | medium |
| [Open-Meteo's empty body becomes 0°C](external-inputs.md#weather) | medium |
| [Dialogue persistence errors are swallowed](storage.md#dialogue) | medium |
| [The reminder transition is a lost update](storage.md#reminders) | medium |
| [A recall miss scans two whole tables](storage.md#recall) | medium |
| [Closing a TCP listener can strand Accept](transport.md#accept) | medium |
| [PTT reads an unbounded body](transport.md#ptt) | medium |
| [mavweb errors cannot be traced](transport.md#errors) | medium |
| [Fact enrichment is a 20-call serial waterfall](workers.md#enrichment) | medium |
| [A suppressed nudge is phrased anyway](workers.md#nudges) | medium |
| [heads_path may equal model_path](invariants.md#heads) | medium |
| [baselineGrammars is mirrored by hand](invariants.md#grammars) | medium |
| [Committed absolute paths pin the build to this box](config.md#paths) | medium |
| [The env example omits deployed variables](config.md#secrets) | medium |
| [staticcheck and deadcode are not wired into a make target](dependencies.md#analyzers) | medium |
| [Domain packages depend on store and IPC types](layering.md#dtos) | low |
| [Eleven symbols are unreachable](layering.md#deadcode) | low |