ci: a spec that parsed must not stop parsing - #4277
Merged
Merged
Conversation
`t27c spec-status` over the corpus: 68 NOPARSE on 2026-09-14, 68 on 09-16, 90 on 09-17. A spec that does not parse generates nothing, so the tests it carries stop running; #4272 repaired fourteen of them only by taking back the version the bee had written. Nothing caught them. The required checks are validate and check-linked-issue, and neither runs the compiler over a changed spec. This gate asks one question over the files a change touches: did a spec that parsed at the base stop parsing? Already-broken specs are not its business and a new file cannot regress. A compiler that cannot be run exits 2 - could not run, not a pass. Closes #4276 Gates: python3 tools/ci/check_specs_still_parse.py --self-test -> ok (7 shapes); against the real t27c, a branch that breaks specs/tri/sort/tim_sort.t27 exits 1 naming the parse error, an unrelated change exits 0, a missing compiler exits 2; python3 scripts/ci/check_pr_branch_filters.py exits 0. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Contributor
Contributor
|
📓 NotebookLM Notebook linked to this PR
This notebook contains session context, decisions, and artifacts for this work. |
`check_pr_branch_filters.py` keeps a ceiling on workflows in neither of its lists, and it moves down only. The population had crept back to 27 because `oracle-nightly.yml` landed in #4234 unclassified - exactly the slack the ceiling refuses - and this branch's `spec-parse-ratchet.yml` made 28. Three are classified here: the parse ratchet and `l1-traceability.yml` as merge-critical (a branch filter would hide either on a stacked pull request), `oracle-nightly.yml` as not (it measures the corpus nightly, it does not gate a merge). Population 25, ceiling follows to 25. Refs #4276 Gates: python3 scripts/ci/check_pr_branch_filters.py -> exit 0, 23 + 5 + 25 = 53; --self-test -> exit 0 ("one new unclassified workflow fails"). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Contributor
|
📓 NotebookLM Notebook linked to this PR
This notebook contains session context, decisions, and artifacts for this work. |
Contributor
PR DashboardGenerated at: 2026-09-19 15:01:11 UTC
Summary
Seal Status
|
This was referenced Sep 20, 2026
gHashTag
added a commit
that referenced
this pull request
Sep 20, 2026
… path (#4304) Three checks are red on master. Two are this loop's. CENSUS. tools/census/quiet.txt pinned `workflow files read 51`; the tree holds 57. The six added since the pin are #4277, #4279, #4281, #4283, #4291 and #4300, all merged by this loop, and cli-tri has been red since 2026-09-17. What moved, explicitly: quiet 51 -> 57 workflow files and 123 -> 135 "named a path but not quiet"; shell 51 -> 57 files, 72 -> 78 jobs, 249 -> 267 run-steps, 228 -> 246 steps the runner runs with `bash -eo pipefail`. The gates did not change; the population grew. HOME PATH. feed_defects.py carries a comment explaining that an absolute `/Users/<name>/t27/target/release/t27c` once went into 137 open issues -- and spells it out to say so, which is what the scan catches. It now reads `.../t27/target/release/t27c`, same meaning, no home directory. WORKTREES. That gate also failed in every worktree on a path no commit contains: it excludes the `.git` DIRECTORY, and a worktree's `.git` is a FILE holding `gitdir: /Users/...`. `--exclude=.git` joins `--exclude-dir=.git`. The reviewer measures in a detached worktree and every bee works in one. NOT FIXED HERE: `coverage` reports 544 stale seals and has no successful run in its last 60 on master, reaching back past 2026-09-18. Re-sealing 544 specs records what the compiler now produces -- a decision about the ledger, not a repair. Closes #4303 Co-authored-by: Claude <noreply@anthropic.com>
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.
Closes #4276
Adds
Spec Parse Ratchet: for every changed.t27, comparet27c spec-statusat the base with the head and fail when a file that parsed stops parsing. Already-broken specs (65 of them) are not its business; a new file cannot regress; a compiler that cannot run exits 2 rather than passing.Verified with the real compiler before landing: breaking
specs/tri/sort/tim_sort.t27exits 1 and namesExpected LBrace, got RParen (')') at line 28:14; an unrelated change exits 0; no compiler exits 2.--self-testcovers seven shapes including already-broken and repaired files.Measured motivation: NOPARSE went 68 (09-14) -> 90 (09-17) while the required checks (
validate,check-linked-issue) never run the compiler over a changed spec.This gate is worth making required — that is a ruleset change, separate from this PR.
🤖 Generated with Claude Code