Skip to content

docs(verification): what counts as a board, as tracked repo doctrine - #725

Merged
cryptskii merged 1 commit into
mainfrom
docs/verification-doctrine
Aug 25, 2026
Merged

docs(verification): what counts as a board, as tracked repo doctrine#725
cryptskii merged 1 commit into
mainfrom
docs/verification-doctrine

Conversation

@cryptskii

Copy link
Copy Markdown
Collaborator

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 and main went red. --lib neither compiles nor runs tests/*.rs, so no command that was run could have surfaced those failures.

CI was never the problem — 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 where fresh clones and CI can see it.

Contents

Each rule is a specific thing that went wrong, not a general aspiration:

  • The board is the exact CI command. --lib is disqualified by name, with the ~51 integration binaries it skips spelled out.
  • A board has two halves. make lint exists only at the repo root; running it elsewhere reports No 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 the R_econ work.)
  • 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 — passing tests routinely log the word FAILED in their own output.
  • Name crates and counts. And: a board that finished before your last edit does not describe the tree you are pushing. Re-run or discard it; "provably behaviour-free" is the argument that produces stale-green reports.
  • A capability removal owes a dependent sweep. A consequence written in prose is a test obligation, not a disclaimer. Fixtures are the usual dependents and 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.

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.md was deliberately not force-added. Its ignore entry sits in a standing "agent config stays local" group alongside AGENTS.md, .cursor/, .clinerules/ and skills/, and overriding it would turn a local agent file into repository policy by accident. The local copy remains for convenience; this file is authoritative.

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.
@cryptskii
cryptskii merged commit eb3a4f8 into main Aug 25, 2026
18 checks passed
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