docs(verification): what counts as a board, as tracked repo doctrine - #725
Merged
Conversation
A security change was verified with `cargo test --lib`, reported as a green board, and merged on that report. 15 of 51 integration suites were broken and main went red. `--lib` neither compiles nor runs `tests/*.rs`, so no command that was run could have shown those failures. CI itself was already correct — ci.yml has run the full workspace command all along. What failed was LOCAL verification doctrine, and the only place it was written down was a gitignored, machine-local agent config. This puts it somewhere fresh clones and CI can see it. Rules, each one a specific thing that went wrong rather than an aspiration: - The board is the exact CI command; `--lib` is disqualified by name, with the ~51 integration binaries it skips called out. - A board has two halves. `make lint` exists ONLY at the repo root, and running it elsewhere reports a missing target — which is not a passing lint. Read the output, not the exit code. - Never `tail` a board: truncation discards the failure NAMES and forces a re-run for information the first run already produced. Grep for real failure lines, since passing tests log the word FAILED in their own output. - Name crates and counts. A board that finished before the last edit does not describe the tree being pushed; re-run or discard it rather than reasoning that the change was harmless. - A capability removal owes a dependent sweep — a consequence written in prose is a test obligation, and fixtures are exactly what `--lib` hides. - Enabling a previously-unenabled cargo feature is a build-graph change that can wake never-compiled, never-linted code. - Mutation-test every security gate, and read the result correctly: positive- control that the mutation edit actually landed, and treat a mutation that stays green as a finding about the gate OR the test, never as a pass. Force-added because `.github/instructions/` is ignored; every existing instruction doc there is tracked the same way. `CLAUDE.md` was deliberately NOT force-added — its ignore sits in a standing "agent config stays local" group, and overriding it would turn a local agent file into repository policy by accident.
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.
Docs only. One new file, no code.
Why
A security change was verified with
cargo test --lib, reported as a green board, and merged on that report. 15 of 51 integration suites were broken andmainwent red.--libneither compiles nor runstests/*.rs, so no command that was run could have surfaced those failures.CI was never the problem —
ci.ymlhas run the full workspace command all along. What failed was local verification doctrine, and the only place it was written down was a gitignored, machine-local agent config. This puts it where fresh clones and CI can see it.Contents
Each rule is a specific thing that went wrong, not a general aspiration:
--libis disqualified by name, with the ~51 integration binaries it skips spelled out.make lintexists only at the repo root; running it elsewhere reportsNo rule to make target 'lint', which is a missing target, not a passing lint. Read the output, not just the exit code. (This bit during theR_econwork.)taila board. Truncation discards the failure names and forces a re-run for information the first run already produced. Grep for real failure lines — passing tests routinely log the wordFAILEDin their own output.--libhides.Location
Force-added, because
.github/instructions/is itself ignored and every existing instruction doc there is tracked the same way — this follows the directory's established pattern.CLAUDE.mdwas deliberately not force-added. Its ignore entry sits in a standing "agent config stays local" group alongsideAGENTS.md,.cursor/,.clinerules/andskills/, and overriding it would turn a local agent file into repository policy by accident. The local copy remains for convenience; this file is authoritative.