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-quad or --disable-quad with the Micron N25Q128_3V (JEDEC 0x20ba18) 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 dead lists 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.
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-flashadvertises a flag its own bench refusescli/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):The subcommand's
--partdefaults toxc7a200tfgg676— the exact board the SSOT is about. Measured: 0 guards, warnings or mentions ofN25Q/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: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.rsdecodes JEDEC0x20as "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 deaddiagnoses a cause a merged PR removedgates.rsprinted, unconditionally, for every suppressed row:Measured on master:
brain-seal-refresh.yml's last step isUpload brain seals, and the onlygit pushleft 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 ingates.rsstill 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-dispatchshape 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.