Skip to content

fix(ci): check out the submodule holding the design tri rtl check reads (Closes #2307) - #2308

Merged
gHashTag merged 1 commit into
masterfrom
fix/2307-checkout-submodules
Aug 20, 2026
Merged

fix(ci): check out the submodule holding the design tri rtl check reads (Closes #2307)#2308
gHashTag merged 1 commit into
masterfrom
fix/2307-checkout-submodules

Conversation

@gHashTag

Copy link
Copy Markdown
Owner

Closes #2307.

Third sequential cause in the cli-tri build job. #2303 fixed the yosys ordering, #2305 assigned dry_run_sweep_ok. With both landed the tests report 156 passed; 0 failed and the job reached a step that had never executed once in the workflow's history:

./target/debug/tri rtl check chips/phi --json
Error: No such file or directory (os error 2)
verdict lines: 0
##[error]tri rtl check emitted 0 verdicts; five checks should each emit one

chips/phi is a gitlink (mode 160000) to gHashTag/tt-trinity-phi. The checkout was a bare uses: actions/checkout@v4 with no with: block, so submodules took its default of false and the directory was empty on the runner. The binary was never broken; it had nothing to read.

The change

       - uses: actions/checkout@v4
+        with:
+          submodules: true

Plus the comment explaining it. Nothing else in the workflow is touched — +14/-0.

Why this was mechanical, and not a secrets decision

submodules: true under the default GITHUB_TOKEN only clones a public submodule; the token is scoped to this repository alone. A private submodule would have converted a failing step into a failing checkout, and would have needed a PAT or deploy key — a secrets call, not a mechanical one. All three are public:

submodule repo private size
chips/phi gHashTag/tt-trinity-phi false 941 KB
chips/euler gHashTag/tt-trinity-euler false 3,954 KB
chips/gamma gHashTag/tt-trinity-gamma false 5,365 KB

true pulls all three, ~10.2 MB, which does not move this job's cost. None of the three has a nested .gitmodules, so recursive would buy nothing and true is the minimal setting that works.

No other workflow in this repo checks out submodules, so there was no working configuration to copy — the setting is derived from the constraint rather than from precedent. (fpga-build.yml clones prjxray with --recursive, but that is a third-party clone in a run: block, not actions/checkout.)

Verification

Not compiled — the authoring machine had ~230 MB free, too little to check out the repo or run cargo. Verified through the GitHub contents API against the pinned gitlink f5456685c3593665153fe2765c85bb1f46ec14c2, not against main, since a checkout resolves the pin and an orphaned pin would fail the clone outright:

  • the pinned commit is reachable in tt-trinity-phi (dated 2026-05-18);
  • info.yaml is present (3,830 bytes) and sets top_module: "tt_um_trinity_nano", so top_from_info resolves;
  • it declares 49 source_files, src/ holds 51 .v files at that commit, and all 49 resolve — parsed with a transcription of declared_sources() rather than by eye.

So check 1 sources resolve passes rather than merely emitting a FAIL line, and the other four verdicts come from a single yosys pass already on PATH from #2303. This should produce five passing verdicts, not just five lines.

Because .github/workflows/cli-tri.yml is inside this workflow's own trigger paths, build runs on this PR — so the fix is observable here rather than only after merge.

Not in scope

The N < 5 assertion is byte-identical, verified by parsing both YAMLs and comparing the final step's run block. The step asserted five verdicts and got zero; that is the guard working. build was not added to the required contexts.

One thing this does not fix, deliberately: top_from_info in cli/tri/src/rtl.rs reads info.yaml with a plain ? while its sibling declared_sources wraps the identical failure in .with_context() naming the path. That asymmetry is why a missing submodule surfaced as an unattributed os error 2 and cost a diagnosis. It is a separate change from a CI checkout fix.

Third sequential cause in the cli-tri `build` job. #2303 fixed the yosys
ordering; #2305 assigned dry_run_sweep_ok. With both landed the tests
report 156 passed / 0 failed and the job reached a step that had never
executed once in the workflow's history:

  ./target/debug/tri rtl check chips/phi --json
  Error: No such file or directory (os error 2)
  verdict lines: 0

chips/phi is a gitlink (mode 160000) to gHashTag/tt-trinity-phi. The
job's checkout was a bare `uses: actions/checkout@v4` with no `with:`
block, so submodules took its default of false and the directory was
empty on the runner. The binary was never broken; it had nothing to
read. The error is unattributed because top_from_info reads info.yaml
with a plain `?` while its sibling declared_sources wraps the identical
failure in .with_context() naming the path.

submodules: true under the default GITHUB_TOKEN only works for a public
submodule -- the token is scoped to this repo, and a private one would
have converted a failing step into a failing checkout. All three chips/*
submodules are public (phi 941 KB, euler 3,954 KB, gamma 5,365 KB,
~10.2 MB total), and none has a nested .gitmodules, so `true` is the
minimal setting and `recursive` would buy nothing. No other workflow in
the repo checks out submodules, so the setting comes from the constraint
rather than from copied precedent.

Not compiled: the authoring machine had ~230 MB free, too little to
check out the repo or run cargo. Verified against the pinned gitlink
f5456685c3593665153fe2765c85bb1f46ec14c2 via the GitHub contents API --
the commit is reachable in tt-trinity-phi, info.yaml is present and sets
top_module "tt_um_trinity_nano", and all 49 declared source_files
resolve against the 51 .v files in src/ at that exact commit. So check 1
"sources resolve" passes rather than merely emitting a FAIL line, and
the remaining four come from one yosys pass already on PATH from #2303.

The N<5 assertion is byte-identical and every other step is unchanged;
build was not added to the required contexts.

Closes #2307
@gHashTag
gHashTag enabled auto-merge (squash) August 20, 2026 09:37
@github-actions

Copy link
Copy Markdown
Contributor

📓 NotebookLM Notebook linked to this PR

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

@github-actions

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-08-20 09:37:04 UTC

Summary

Status Count
Total Open PRs 20
PRs with Failing Checks 6
PRs with All Checks Green 14
READY 7
FAILING 6
PENDING 0

Seal Status

  • ⚠️ STALE -- sha256(compiler.rs)=cbbfac87dff3 != 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 merged commit 9068cf4 into master Aug 20, 2026
22 of 25 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.

cli-tri checks out no submodules, so tri rtl check reads an empty chips/phi and emits 0 verdicts

1 participant