Skip to content

Two more tools advise against a decision recorded where they cannot read it #3371

Description

@gHashTag

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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions