ci: run only affected specs -- the selection rule as specs/ci/affected.t27 (Closes #6604) - #6605
Conversation
…d.t27 (Closes #6604) Item E of epic #6595. Given `git diff --name-status`, the union of the base and head `use` edges, and the head corpus, the spec returns the specs to run: a changed spec plus every spec that transitively `use`s it; anything outside specs/ (and any non-spec, non-prose file under specs/) means run everything; deleted and renamed specs select their importers; unreadable input fails closed. Same one-buffer input shape as specs/policy/own_language.t27. gen/c/ci/affected.c is `t27c gen-c` output (t27c lab, master 1f9b370). test-report on the lab: 13/13, FAIL 0; two mutations fail 6 and 3 tests. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
PR DashboardGenerated at: 2026-10-05 22:43:21 UTC
Summary
Seal Status
|
|
Merge train: skipped for now. After updating onto master 56814bf,
|
…nguage (Refs #6604) Both bodies were byte-for-byte copies of specs/policy/own_language.t27, so duplicate-bodies was red. The spec now says `use policy::own_language;` and calls own_language::has_prefix / own_language::is_letter_of; gen-c and gen-zig inline the imported definitions, so the generated C stays self-contained. gen/c/ci/affected.c regenerated with t27c gen-c. Lab: t27c test-report specs/ci/affected.t27 -> 13 tests, 13 pass, 0 FAIL. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
PR DashboardGenerated at: 2026-10-05 23:54:06 UTC
Summary
Seal Status
|
PR DashboardGenerated at: 2026-10-05 23:59:18 UTC
Summary
Seal Status
|
Closes #6604
Item E of epic #6595: the rule for which specs a change affects, in t27.
specs/ci/affected.t27-- input is one buffer, the same shape asspecs/policy/own_language.t27:git diff --name-statuslines, then--graphand oneimporter<TAB>importededge per line (the union of the base and head trees, so a deleted spec still has its importers), then--corpusand the head tree's spec paths.select_affected()writes the affected specs in corpus order and returns their count, orRUN_ALL.specs/-> run all; a changed.t27/.tri-> it plus every spec that transitivelyuses it; prose underspecs/-> nothing; any other file underspecs/-> run all; a deleted spec runs nothing itself but selects its importers; a rename seeds both paths; an unreadable line, a status letter other than A C D M R T, a quoted path, a missing marker, or a set/output that does not fit -> run all.gen/c/ci/affected.cist27c gen-coutput, untouched.Checks on the t27c lab (master 1f9b370, t27c built there, zig 0.16.0):
t27c test-report specs/ci/affected.t27: 13 tests, pass 13, FAIL 0, 1 invariant.closure()fails 6 tests; classifying an outside path as a seed fails 3.specs/base/types.t27-> 396,specs/numeric/gf16.t27-> 29,specs/math/constants.t27-> 274, a leaf port spec -> 1,bootstrap/src/compiler.rs-> RUN_ALL. Worst case 44 ms.Found on the way: t27c does not read
"\r"as a string escape (gen-zig emits a backslash and anr), so the CRLF test sets its bytes by number.Not in this PR (hand-written glue, owner decision): the CI wiring, a t27c command that prints the path-keyed
usegraph, and a way to handt27c suitea list of specs. Listed in #6604.🤖 Generated with Claude Code