docs(handoff): capture the dogfood-2 workstream and the nine vacuous guards - #292
Merged
Conversation
…guards Six issues (#255-#260) from the second blind dogfood run, six PRs merged, all verified on `main` by re-running the original symptoms with controls. The durable content is not the fix list. It is the catalogue of NINE guards that could not fail — each green under `make ci`, all 12 PR checks, AND its own author's mutation matrix, and each hiding a different way. Found only by independent passes that rebuilt the mutants instead of reading the reported table. Also records, with the measurements: - instrument validation (a peak-RSS harness that reported 0 MB for everything; a lint control whose `typecheck` errors proved the parser ran and not the linters; `errcheck` being disabled, so a control built from an unchecked-error slip validates nothing) - that `go test`'s default vet subset includes `printf`, so an arity error surfaces as `build failed` and never as `--- FAIL` — hit twice for real, once producing what would have been scored a surviving mutant - that a DECLARED equivalent mutant is a claim needing its own discrimination table; one was wrong on four inputs - the operating traps: zsh word-splitting and history modifiers, a `cd` failure that let a `git merge` run in the base clone, a guard whose non-zero exit the caller ignored, `git rerere` replaying silently - how the AGENTS.md item-25 three-way collision resolved (25/26/27) - four open follow-ups (#283-#286) and two issues closed as DECISIONS - the residuals shipped deliberately, each with its measurement And the coverage gap that matters: both dogfood runs were un-credentialed, so `civitai generate` — the only irreversibly money-spending surface — is structurally unreachable by this method. Two clean runs say nothing about it.
#294 (9862c1e) merged after this doc was written and it implements #283, #284 and #285 — the three follow-ups this doc lists as open. Its body referenced the #260 umbrella rather than the three issue numbers, so GitHub never auto-closed them and they still read as open work. Verified against the merged binary rather than the diff. - State/DONE/follow-ups updated; the three are struck through with the evidence that closed them, and the doc says plainly they need closing on GitHub. - #291 added: a name over 40 chars silently truncates to a COLLIDING blockId. Found by an adversarial review of #267 and reproduced independently. Item 27's residual list says three classes; there are four. - Ranked next steps: item 1 is struck (done), and two facts that currently exist nowhere else are recorded — AGENTS.md is 201 bytes from its hard ceiling so the next item cannot be added without a deliberate eviction, and #267 shipped a breaking change under a `fix:` subject, which goreleaser's subject filter will keep out of the release notes unless someone adds it by hand at tag time. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…rence My previous commit wrote the literal token "item 28" while describing an item that could not be added because AGENTS.md is at its size ceiling. TestAgentsItemCrossReferencesResolve scans the repo for `item N` and requires each to resolve; AGENTS.md has items 1..27, so it correctly flagged it as dangling and reddened build-test on a docs-only PR. The guard is right and should not be loosened: it cannot distinguish a deliberate reference to a hypothetical item from the renumbering bug it exists to catch, and the renumbering bug is the expensive one. So the prose moves the number out of the `items?[\s-]+[0-9]+` shape instead — "a new item (which would have been the 28th)". Verified with a negative control rather than by re-reading the pattern: re-introducing "item 28" reddens the test with its own message, and the reworded text passes. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Handoff for the dogfood-2 workstream: issues #255–#260, six PRs merged (#262, #263, #265, #267, #268, #269) plus #287, all verified on
mainby re-running the original symptoms with controls rather than by a green suite.Follows the convention of
handoff-dogfood-154.md, which this one links back to.Why this is worth committing rather than leaving in a transcript
The fix list is the least valuable part. The durable content is the catalogue of nine guards that could not fail — every one green under
make ci, under all 12 PR checks, and under its own author's mutation matrix — each hiding a different way, from at.Skipthat fired on setup failure to a block labelledPOSITIVE CONTROLwhose condition wass == s.The instructive one is last: a ranking-stability test whose 2-element fixture sat under Go's n=13 insertion-sort threshold, so the unstable sort was stable by accident. Nothing in that test looks wrong — and the obvious fix ("use more than 13") also fails, because with one gap kind pdqsort short-circuits an all-equal partition. It needed two kinds across 30 gaps. Applied without re-running the mutant, that fix would have shipped a tenth vacuous guard believing it closed the ninth.
Also recorded, with measurements
typecheckerrors proved the parser ran, not the linters;errcheckbeing disabled in.golangci.yml, so a control built from an unchecked-error slip validates nothing.go test's vet subset includesprintf, so an arity error surfaces asbuild failedand never--- FAIL. Hit twice for real — once producing a result that would otherwise have been scored a surviving mutant, i.e. read as good news.npm cirefuses into a cleanvalidate.cdthat let agit mergerun in the base clone, a script guard whose non-zero exit the caller ignored, andgit rererereplaying a resolution silently.The coverage gap that matters
🔴 Both dogfood runs were deliberately un-credentialed, so
civitai generate— the CLI's only irreversibly money-spending surface, and the subject of items 12–22 — is structurally unreachable by this harness. Two clean dogfood runs say nothing about it. Written down so "we dogfooded it twice" is never read as coverage of the spend path.Docs-only.
make cigreen,golangci-lintv2.12.2 clean.