Repository navigation
Conversation
…iations
key_default_check.py matched module names in raw source. The header of
formal/tern_tc_layer_rtl_tb.v names fpga/portable/trinet_node_core.v
twice, and the check read both as instantiations without a key, so
receipt-keys has been red on every scheduled run on main since
2026-09-28. The real instantiation, line 42, passes .RECEIPT_KEY(128'h0).
Blank comments and string literals before matching, keeping newlines so
line numbers still point into the file. This also closes the reverse
hole: a key written only in a comment inside #( ... ) was accepted as
passed.
Mutants, run on a copy of main's tree in-process:
mutant old checker new checker
clean tree (must pass) rc 1, 2 RULE rc 0
tern_tc bench drops its key 3 RULE 1 RULE, :42
tern_tc key only in a comment 2 RULE, not 1 RULE, :42
at :42
v2 bench drops its key (workflow mutant) 3 RULE 1 RULE
non-null default (workflow mutant) 3 RULE 1 RULE 1
non-null default only in a comment (pass) rc 1 rc 0
module name in a $display string (pass) rc 1 rc 0
Add a guard step for the comment case. It looks up the bench's
instantiation line instead of hard-coding 42, and requires exactly one
RULE 2 there.
Closes #877
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
X Brain Health CheckScore: 100.0/100 X Brain is above merge threshold |
🧪 Brain Stress Test ResultsScore: not measured (no stress test prints a Score: line) X Stress test passed |
The new guard step reads and mutates formal/tern_tc_layer_rtl_tb.v, but the workflow's paths: lists did not name it, so the Workflow path gate (research/audit_workflow_paths.py) failed this PR with "BUILT BUT NOT WATCHED". Add it to both the push and pull_request lists. The comment sits on its own line: the gate's paths parser keeps a trailing "# ..." as part of the entry and then reports it as a dead path. Part of #877. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
e1b3d0a to
b40cbbf
Compare
Summary by t27-beesThe PR fixes a false positive in Worth a look
Read: 2 files, +50 -2, the whole diff. Head |
Closes #877. Part of #851.
What was red, and why
On
main,receipt-keysintrinet-portability.ymlhas failed on all 7 scheduled runs from 2026-09-28 to 2026-10-04. It reports two keyless instantiations oftrinet_node_coreinformal/tern_tc_layer_rtl_tb.v, at lines 7 and 18. Both lines are header comments that name the filefpga/portable/trinet_node_core.v. The real instantiation is at line 42, and it passes.RECEIPT_KEY(128'h0).conformance/key_default_check.pymatched module names in the raw source. This PR blanks comments and string literals before matching, keeping newlines so the reported line numbers are unchanged. The same change closes the reverse hole: a key written only in a comment inside#( … )used to count as passed.Measured
Every mutant ran on a copy of
main's tree (57de4a1f5, 4,166 input files), in-process, on both checkers.$display("trinet_node_core up")in the benchOld: 0 of 7 right. New: 7 of 7.
The new CI step covers the comment case. It finds the bench's instantiation line with grep rather than hard-coding 42. It checks that the mutation applied, then requires exactly one RULE 2, on that line.
The guard step mutates
formal/tern_tc_layer_rtl_tb.v, so that bench is now in bothpaths:lists (e1b3d0a). Without it the Workflow path gate failed this PR with "BUILT BUT NOT WATCHED". The bench is the one file the new step names, and nothing more is widened here.The new step's shell ran on Linux in this PR's own runs:
receipt-keyspassed, and step 7, "The guard must reject a key that is only in a comment", succeeded (job 111539931868, at 94bf141).Not in this PR
formal/**/*_tb.vandfpga/**/*.v, but the workflow lists two testbenches and three RTL locations. That is how TRI-NET: three boards, ten families, and four numbers that were wrong #355 brought this bench tomainwithout the gate running. Since 2026-09-04, 3 of 3 first-parent commits onmainthat changed checker inputs were outside the list. Widening to the full globs would also run theportabilityjob, which takes about 2 minutes (2m00s to 2m02s on four runs, 2026-10-04). I first wrote "25-minute", which is the job'stimeout-minutes, not its duration. ci: run nine workflows once per PR commit, on every path their push run watched #876 rewrites the sameon:block, so this waits for it; see receipt-keys gate red on main since 2026-09-28: header comments read as keyless instantiations #877, step 2. Adding the one bench above merges cleanly with ci: run nine workflows once per PR commit, on every path their push run watched #876, ci: give the 102 push workflows a dispatch-safe concurrency group #870 and ci: run the nine document gates on push to main only #867 (git merge-tree).# ...as part of apaths:entry and reports it as dead, so the new entry's comment sits on its own line. That error is loud, not silent, and no workflow onmainhas such a line. Not fixed here.🤖 Generated with Claude Code