The finding
coq/*.ml — checked-in OCaml extraction output from the Rocq development (ArmInstructions.ml, ArmSemantics.ml, ArmState.ml, Base.ml, …) — is referenced by no gate and no build:
$ grep -rn 'coq/.*\.ml' .github/workflows/ci.yml
(no matches)
Surfaced by #1079 (RQ-60-CFOBLIG), which added a BrIf constructor to wasm_instr. The snapshots are now stale with respect to the model they were extracted from. The lane flagged this rather than hand-editing them, which was the right call — hand-editing generated output is what the freshness work (#977) exists to prevent.
Why it is worth acting on rather than noting
This is the stale-artifact-nobody-checks class, and it has a specific failure mode: the files look authoritative. Anyone reading coq/ArmSemantics.ml to understand what the model extracts to gets an answer that was true at some past commit, with nothing indicating otherwise. That is worse than their absence — a missing file prompts a question, a stale one answers it wrongly.
The v0.59 freshness survey (#977) measured exactly this shape across the repo: exit status was checked at 58 of 58 compile-then-parse sites, freshness at only 7. The loud direction covered almost everywhere, the silent one almost nowhere. These files are a residue of the same class in a corner that survey did not reach.
Three dispositions, and I would take the first
- Delete them. Nothing builds from them, nothing tests them, nothing imports them. If the extraction is wanted, it is reproducible from the
.v sources on demand. This is v0.58's rule applied — an artifact nothing consumes is not evidence, it is weight. Cheapest, and removes the class rather than gating it.
- Regenerate and gate. A CI step re-runs extraction and
diffs against the committed snapshots, red on drift. Correct, but it buys a freshness guarantee for output no consumer currently reads — paying gate cost for zero present value.
- Mark them explicitly as a dated snapshot — a header naming the commit they were extracted at and stating they are illustrative, not current. Cheapest to write, weakest guarantee: the next reader still has to notice the header.
Option 1 unless someone names a consumer. If a consumer exists, that changes the answer to option 2 — please say so rather than letting them rot.
Verification note for whoever takes this
Do not confirm "nothing uses them" from a single grep. git grep for the basenames across all workflows, BUILD.bazel files, Makefiles and scripts, and check coq/_CoqProject and coq/BUILD.bazel for an extraction target that writes them. A grep is a hypothesis; the build files are the oracle.
Refs #1057
The finding
coq/*.ml— checked-in OCaml extraction output from the Rocq development (ArmInstructions.ml,ArmSemantics.ml,ArmState.ml,Base.ml, …) — is referenced by no gate and no build:Surfaced by #1079 (RQ-60-CFOBLIG), which added a
BrIfconstructor towasm_instr. The snapshots are now stale with respect to the model they were extracted from. The lane flagged this rather than hand-editing them, which was the right call — hand-editing generated output is what the freshness work (#977) exists to prevent.Why it is worth acting on rather than noting
This is the stale-artifact-nobody-checks class, and it has a specific failure mode: the files look authoritative. Anyone reading
coq/ArmSemantics.mlto understand what the model extracts to gets an answer that was true at some past commit, with nothing indicating otherwise. That is worse than their absence — a missing file prompts a question, a stale one answers it wrongly.The v0.59 freshness survey (#977) measured exactly this shape across the repo: exit status was checked at 58 of 58 compile-then-parse sites, freshness at only 7. The loud direction covered almost everywhere, the silent one almost nowhere. These files are a residue of the same class in a corner that survey did not reach.
Three dispositions, and I would take the first
.vsources on demand. This is v0.58's rule applied — an artifact nothing consumes is not evidence, it is weight. Cheapest, and removes the class rather than gating it.diffs against the committed snapshots, red on drift. Correct, but it buys a freshness guarantee for output no consumer currently reads — paying gate cost for zero present value.Option 1 unless someone names a consumer. If a consumer exists, that changes the answer to option 2 — please say so rather than letting them rot.
Verification note for whoever takes this
Do not confirm "nothing uses them" from a single grep.
git grepfor the basenames across all workflows,BUILD.bazelfiles,Makefiles and scripts, and checkcoq/_CoqProjectandcoq/BUILD.bazelfor an extraction target that writes them. A grep is a hypothesis; the build files are the oracle.Refs #1057