Skip to content

fix(tri): record two refusals where the tool looks - #3372

Merged
gHashTag merged 4 commits into
masterfrom
s2-advice
Sep 6, 2026
Merged

fix(tri): record two refusals where the tool looks#3372
gHashTag merged 4 commits into
masterfrom
s2-advice

Conversation

@gHashTag

@gHashTag gHashTag commented Sep 6, 2026

Copy link
Copy Markdown
Owner

Refs #3371

The remaining two instances of #3355's class, both repaired in the shape #3356 introduced: the refusal goes into the file the tool already reads.

1. tri fpga program-flash advertised a flag its own bench refuses

--enable-quad said "Needed for some boards/flash to boot from x4 SPI", with --part defaulting to xc7a200tfgg676 — the exact board fpga/HARDWARE_SSOT.md:323 refuses both quad flags for, as a measured result (W396, experiment E4): the Micron N25Q128_3V has no separate QE bit, so openFPGALoader aborts. Measured: zero guards, warnings or mentions of the part anywhere near the flag.

The runtime line was worse than the flag. All three internal callers hardcode --spi-buswidth 1, the SSOT-canonical no-quad path, and on it the command printed "ensure the flash QE bit and board straps match" — sending a reader to align a bit the SSOT records as not existing on this part, in the middle of the experiment the SSOT itself prescribes.

$ tri fpga program-flash <bit> --enable-quad
Error: refusing --enable-quad/--disable-quad on xc7a200tfgg676.
fpga/HARDWARE_SSOT.md:323 records this as a MEASURED result (W396, E4): …
The canonical write is x1, with verify and no quad flags.
If your bench is a different board or flash, pass --part.

quad_refused() is a predicate rather than an inline condition, so it can be tested without reaching the code that spawns openFPGALoader. A test that could spawn the programmer is a test that writes to a board when it regresses.

2. tri gates dead diagnosed a cause a merged PR removed

It printed, for every suppressed row, that "a workflow whose last step is forbidden by this repository's own ruleset fails every time it runs". 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 by #3324. The footnote had no surviving referent; three further assertions in gates.rs still stated the old cause. All four corrected.

# tri:cause-removed <reason> gives the classifier the fourth state the domain has. Live now:

4 more have never succeeded but fall under --min-runs 50:
      18  gHashTag/t27  Lean proofs
       8  gHashTag/t27  Brain Seal Refresh      cause removed: the `git push` step was removed in #3324…
       4  gHashTag/t27  Vivado Synth (Docker, GH-hosted)
       2  gHashTag/t27  Build Vivado Docker Image
Few runs is not few enough to be safe … 3 of the above say nothing about why

A bare marker with no reason is not a reason — asserted, because it would print "cause removed:" and explain nothing.

Mine, on the way

Two traps already in my notes and hit again: an insertion anchored on pub enum Bucket landed between the enum and its #[derive], and two edits keyed on the wrong indentation reported success while writing nothing.

814 crate tests pass. 0 fmt diffs in the two files touched — and cargo fmt was deliberately not run, because it reformats 67 pre-existing sites elsewhere.

The remaining two instances of #3355's class, both repaired in the shape #3356
introduced: the refusal goes into the file the tool already reads.

`tri fpga program-flash` advertised `--enable-quad` as "needed for some
boards/flash", with `--part` defaulting to `xc7a200tfgg676` -- the exact board
`fpga/HARDWARE_SSOT.md:323` refuses both quad flags for, as a MEASURED result
(W396, experiment E4): the Micron N25Q128_3V has no separate QE bit, so
openFPGALoader aborts. Measured: zero guards, warnings or mentions of the part
anywhere near the flag; the pass-through was bare.

The runtime line was worse than the flag. All three internal callers hardcode
`--spi-buswidth 1`, the SSOT-canonical no-quad path, and on it the command
printed "ensure the flash QE bit and board straps match" -- sending a reader to
align a bit the SSOT records as not existing on this part, in the middle of the
experiment the SSOT itself prescribes. Silent on x1 now.

`quad_refused()` is a predicate rather than an inline condition SO THAT it can
be tested without reaching the code that spawns `openFPGALoader`: a test that
could spawn the programmer is a test that writes to a board when it regresses.

`tri gates dead` printed, for every suppressed row, that "a workflow whose last
step is forbidden by this repository's own ruleset fails every time it runs".
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
by #3324. The footnote had no surviving referent, and three further assertions
in `gates.rs` still stated the old cause; all four corrected.

`# tri:cause-removed <reason>` gives the classifier the fourth state the domain
has -- never green, cause diagnosed and removed, no run since. The row is listed
with its reason, and the blanket footnote is scoped to the rows that explain
nothing: 3 of 4 today. A bare marker with no reason is not a reason.

Two of my own traps on the way, both already in my notes and hit again: an
insertion anchored on `pub enum Bucket` landed between the enum and its
`#[derive]`, and two edits keyed on the wrong indentation reported success while
writing nothing. 814 crate tests pass; 0 fmt diffs in the two files touched, and
`cargo fmt` was NOT run, because it reformats 67 pre-existing sites elsewhere.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Sep 6, 2026

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-09-06 07:08:49 UTC

Summary

Status Count
Total Open PRs 16
PRs with Failing Checks 10
PRs with All Checks Green 6
READY 4
FAILING 10
PENDING 0
NO CHECKS YET 0

These columns do not partition: 4 + 10 + 0 + 0 = 14, and there are 16 open PRs. A PR is being counted twice or not at all.

Seal Status

  • ⚠️ STALE -- sha256(compiler.rs)=23f03e8a97d5 != manifest seal=87e5cbd3ad94.
    The committed NMSE numbers were certified against an older compiler.rs.
    Run scripts/reseal-check.sh locally for the two-step reseal command (advisory; not a merge gate).

@github-actions

github-actions Bot commented Sep 6, 2026

Copy link
Copy Markdown
Contributor

📓 NotebookLM Notebook linked to this PR

This notebook contains session context, decisions, and artifacts for this work.

@github-actions

github-actions Bot commented Sep 6, 2026

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-09-06 07:16:54 UTC

Summary

Status Count
Total Open PRs 15
PRs with Failing Checks 10
PRs with All Checks Green 5
READY 4
FAILING 10
PENDING 0
NO CHECKS YET 0

These columns do not partition: 4 + 10 + 0 + 0 = 14, and there are 15 open PRs. A PR is being counted twice or not at all.

Seal Status

  • ⚠️ STALE -- sha256(compiler.rs)=23f03e8a97d5 != manifest seal=87e5cbd3ad94.
    The committed NMSE numbers were certified against an older compiler.rs.
    Run scripts/reseal-check.sh locally for the two-step reseal command (advisory; not a merge gate).

@github-actions

github-actions Bot commented Sep 6, 2026

Copy link
Copy Markdown
Contributor

📓 NotebookLM Notebook linked to this PR

This notebook contains session context, decisions, and artifacts for this work.

@github-actions

github-actions Bot commented Sep 6, 2026

Copy link
Copy Markdown
Contributor

📓 NotebookLM Notebook linked to this PR

This notebook contains session context, decisions, and artifacts for this work.

@github-actions

github-actions Bot commented Sep 6, 2026

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-09-06 07:39:13 UTC

Summary

Status Count
Total Open PRs 15
PRs with Failing Checks 10
PRs with All Checks Green 5
READY 4
FAILING 10
PENDING 0
NO CHECKS YET 0

These columns do not partition: 4 + 10 + 0 + 0 = 14, and there are 15 open PRs. A PR is being counted twice or not at all.

Seal Status

  • ⚠️ STALE -- sha256(compiler.rs)=5b05ef6357a7 != manifest seal=87e5cbd3ad94.
    The committed NMSE numbers were certified against an older compiler.rs.
    Run scripts/reseal-check.sh locally for the two-step reseal command (advisory; not a merge gate).

@gHashTag
gHashTag enabled auto-merge September 6, 2026 08:02
@github-actions

github-actions Bot commented Sep 6, 2026

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-09-06 08:03:44 UTC

Summary

Status Count
Total Open PRs 16
PRs with Failing Checks 10
PRs with All Checks Green 6
READY 4
FAILING 10
PENDING 0
NO CHECKS YET 0

These columns do not partition: 4 + 10 + 0 + 0 = 14, and there are 16 open PRs. A PR is being counted twice or not at all.

Seal Status

  • ⚠️ STALE -- sha256(compiler.rs)=b1f4644c92c7 != manifest seal=87e5cbd3ad94.
    The committed NMSE numbers were certified against an older compiler.rs.
    Run scripts/reseal-check.sh locally for the two-step reseal command (advisory; not a merge gate).

@github-actions

github-actions Bot commented Sep 6, 2026

Copy link
Copy Markdown
Contributor

📓 NotebookLM Notebook linked to this PR

This notebook contains session context, decisions, and artifacts for this work.

@gHashTag
gHashTag merged commit de2ef19 into master Sep 6, 2026
35 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