Repository navigation
Two more tools advise against a decision recorded where they cannot read it #3371
Description
The remaining two instances of the class in #3355: a tool emits advice that a deliberate recorded decision contradicts, and the refusal lives where the tool cannot read it.
1. tri fpga program-flash advertises a flag its own bench refuses
cli/tri/src/fpga.rs:153 — --enable-quad: "Needed for some boards/flash to boot from x4 SPI."
fpga/HARDWARE_SSOT.md:323 — a measured result (W396, experiment E4):
Do not use
--enable-quador--disable-quadwith the Micron N25Q128_3V (JEDEC0x20ba18) on this board … the quad flags only attempt to toggle that non-existent bit and abort the command.
The subcommand's --part defaults to xc7a200tfgg676 — the exact board the SSOT is about. Measured: 0 guards, warnings or mentions of N25Q / 0x20ba18 / SSOT anywhere near the flag; the pass-through is bare.
The runtime line is worse than the flag. All three internal callers hardcode --spi-buswidth 1 — the SSOT-canonical no-quad path — and the command printed, on that path:
[program-flash] bitstream expects SPI x1; ensure the flash QE bit and board straps match
i.e. the guided experiment the SSOT itself prescribes told the reader to go align a QE bit the SSOT records as not existing on this part, where the one lever offered aborts the write.
The tool already holds the identity needed to refuse: fpga.rs decodes JEDEC 0x20 as "Micron (N25Q / MT25Q family)" and pins N25Q128 timing. Only the refusal was missing. And the same file honours the rule elsewhere — the boot-log decision tree lists causes A/B/C and correctly omits quad.
2. tri gates dead diagnoses a cause a merged PR removed
gates.rs printed, unconditionally, for every suppressed row:
Few runs is not few enough to be safe: a workflow whose last step is forbidden by this repository's own ruleset fails every time it runs, and runs rarely.
Measured on master: brain-seal-refresh.yml's last step is Upload brain seals, and the only git push left in the file is inside the comment explaining its removal — 95d93c684 (#3324). 1 occurrence, 1 of them a comment. The footnote has no surviving referent, and three more assertions in gates.rs still stated the old cause.
This is the closest structural twin of the already-fixed case: same tool, same file, sibling PR (#3324 to #3325), refusal recorded in a YAML comment.
Shape of the repair
Both take the # tri:no-dispatch shape from #3356 — record the refusal where the tool looks:
quad_refused(part, enable, disable)refuses both flags on the SSOT board, quoting the SSOT; the QE advice is silent on x1.# tri:cause-removed <reason>in a workflow;gates deadlists that row with its reason and scopes the blanket footnote to rows that explain nothing.
Found by the adversarial sweep for #3355 — 19 agents, 0 errors, 5 survivors.
Boundary
src/fpga.rs
Activity
gHashTag commentedon Sep 23, 2026
A boundary drafted from the paths this issue already names, so a bee can take it. Nothing is reserved until this is in the issue body - the Queen reads the body, not comments. Check the paths first: a wrong boundary reserves files the work does not own.
Boundary
src/fpga.rsgHashTag commentedon Oct 3, 2026
Done on master by 6484563 (merged in #3372). quad_refused() at cli/tri/src/fpga.rs:6852 refuses both quad flags on the SSOT part and cites fpga/HARDWARE_SSOT.md:323, and the 'ensure the flash QE bit' line only prints for widths other than x1 (fpga.rs:6930). For
tri gates dead, thetri:cause-removedmarker is at cli/tri/src/gates.rs:4083 and is recorded in .github/workflows/brain-seal-refresh.yml:50. (The boundary path src/fpga.rs never existed; the code lives at cli/tri/src/fpga.rs.)Triage for the review jam, #5776: this card was escalated because it states no acceptance criterion the Queen can read. Reopen if this is wrong.