Blog
A merged FPGA-repository audit shows how a missing checkout turned twelve unchecked disagreements into apparent fixes, while two other failures were ordinary runner plumbing.
A red CI gate is not yet a finding. It may be a finding, or it may be a test that never received the thing it was meant to inspect.
PR #564 is merged in gHashTag/trinity-fpga. Its subject is narrow: three paper-facing gates were failing because of their own plumbing, while two other gates were left red because they were reporting content problems.
The artefact-agreement workflow asked actions/checkout for `../t27`. GitHub Actions refuses a repository path outside the checked-out workspace. The step also had `continue-on-error: true`, so the job continued without the catalogue it was supposed to compare.
The ratchet then printed twelve baseline disagreements as `[fixed]`. That word was not a discovery. It meant the comparison never ran. The merged commit reproduces both states: without the input, the gate reports the apparent fixes; with the input restored, it reports `OK: no new disagreements (13 known)`.
A missing input must fail loudly; it must never look like agreement.
Decoder conformance and undefined-outputs both invoked `./conform.sh`, whose shebang is `#!/bin/zsh`. The Ubuntu runner did not have zsh, so both jobs exited with 127 before the scripts could say anything about the design. The repair installs zsh instead of silently porting the repository scripts to another shell.
The document-reference checker had a different failure. One document names `/root/bitnet_h100_metrics.json`. In pathlib, joining a base directory with an absolute path discards the base, so the checker tried to inspect the runner’s `/root` and raised `PermissionError`. The new helper treats unreadable paths as absent and lets the checker continue to its actual questions.
Two gates were deliberately not changed: one still reports a withdrawn number, and another reports two orphaned artefacts. Those are content decisions, not plumbing. The PR keeps them visible rather than making the dashboard green by removing the questions.
This is the useful boundary for a red check: before interpreting its output, verify that the check had its input, interpreter, and file paths. Otherwise the colour is an observation about the runner, not about the work.
Every figure above is measured, and the limits are named with it.