CI step names: "Prove" over a fixed sample (Refs #2161) - #2602
Merged
Conversation
The remaining strong-named steps, read against what their tools do:
Prove generated RTL == GF-T model 14 topologies from a LIST,
one seeded training run
Prove GF-T primitives bit-exact ... N = 600 pairs from 48 values
Prove the WHOLE trainer bit-exact STEPS = 80, seeded
Exhaustive, every arm, whole domain genuinely enumerates, and says
"wherever the space is small"
Three name a proof over a fixed sample. The fourth is the real thing,
and its own first line says exactly where the real thing stops.
The distinction was ALREADY in this repository -- in the tools, in
careful prose, by an author who plainly understood it. It had never
reached the step names, and the step name is what a green check shows.
I checked the sample for the failure I expected first: an unseeded
draw, which would make a "proof" take different inputs every run. It is
seeded -- random.seed(202), random.seed(101) -- and two consecutive
runs produce byte-identical output. That is a strength with a shadow
worth naming: the sample never moves, so a disagreement outside those
600 pairs cannot be found here however often CI runs.
Renamed to name the evidence, with DOES NOT CHECK blocks saying which
inputs are outside, and a WHAT THIS DOES NOT ESTABLISH section added to
verify_emit_bitexact.py, which had none: the topologies are a list not
a space, the run is fixed, and "synthesizes" is yosys reaching a cell
count -- not place-and-route, not timing, not silicon.
Two on the instrument:
* My first scope note was invisible to `tri claims` because I wrote
it in my own words. The fix was to use the repository's vocabulary,
not to widen the detector -- an established vocabulary is worth
more than any single statement made in it, and widening it once per
author ends in a regex that matches everything.
* `tri claims` reads workflows, so a limit stated in the TOOL is
invisible to it. verify_exhaustive.py has the most careful scope
statement in the tree and is reported as having none. Named in its
own docstring rather than papered over: a flag means "worth
reading", and reading means opening the tool.
Refs #2161
Contributor
|
📓 NotebookLM Notebook linked to this PR
This notebook contains session context, decisions, and artifacts for this work. |
Contributor
PR DashboardGenerated at: 2026-08-23 20:35:52 UTC
Summary
Seal Status
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The remaining strong-named steps, read against what their tools do:
N = 600pairs drawn from 48 valuesSTEPS = 80, seededThree name a proof over a fixed sample. The fourth is the real thing, and its own first line says exactly where the real thing stops.
The distinction was already in this repository — in the tools, in careful prose, by an author who plainly understood it. It had never reached the step names, and the step name is what a green check shows.
I checked for the wrong failure first
I expected an unseeded sample, which would make a "proof" draw different inputs every run. It is seeded (
random.seed(202),random.seed(101)) and two consecutive runs are byte-identical. That is a strength with a shadow worth naming: the sample never moves, so a disagreement outside those 600 pairs cannot be found here however often CI runs.Renamed to name the evidence, with
DOES NOT CHECKblocks, and a WHAT THIS DOES NOT ESTABLISH section added toverify_emit_bitexact.py, which had none: the topologies are a list not a space, the run is fixed, and "synthesizes" is yosys reaching a cell count — not place-and-route, not timing, not silicon.Two on the instrument
tri claimsbecause I wrote it in my own words. The fix was to use the repository's vocabulary, not to widen the detector — an established vocabulary is worth more than any single statement made in it, and widening it once per author ends in a regex that matches everything.tri claimsreads workflows, so a limit stated in the tool is invisible to it.verify_exhaustive.pyhas the most careful scope statement in the tree and is reported as having none. Named in the tool's own docstring rather than papered over: a flag means worth reading.§94 and §95.
Refs #2161