Skip to content

feat(frontier): --only / --since walk only the affected specs - #10244

Merged
gHashTag merged 3 commits into
masterfrom
claude/10236-frontier-only-since
Oct 18, 2026
Merged

gHashTag merged 3 commits into
masterfrom
claude/10236-frontier-only-since

Conversation

@gHashTag

Copy link
Copy Markdown
Owner

Closes #10236

Epic #8095 (hot reload), ledger #8737. First step of the change-only inner loop.

What changes

  • t27c frontier --only <spec>... and --since <rev> walk the named specs (or the specs git diff --name-status <rev> names) plus every spec that imports them, directly or transitively. The selection is specs/ci/affected.t27 select_affected, the rule CI already uses; each spec in scope still gets seal_identity.t27 node_decision, and its closure is read in full.
  • A change affected.t27 cannot judge (a path outside specs/) walks the whole corpus and the output says so. --only and --since are refused together by clap.
  • A new line frontier: scope N of M specs is printed only when a flag is given. With neither flag the output is unchanged.
  • specs/verified/frontier_scope.t27 holds the two decisions around the selection (scope_wanted, scope_narrows; 4 tests, 1 invariant, negative control for the sentinel). It does not use ci::affected: a spec that imports it does not compile (t27c test-report: BLOCKED, use of undeclared identifier 'own_language'), because affected declares in_list, ext_dot, KINDS and PROSE_EXTS and imports policy::own_language, which declares the same four names differently, so the resolver leaves them unspliced. The Rust therefore calls affected's own generated code (bootstrap/gen/rust/ci/affected.rs, standalone), as CI's C stub does. Renaming affected's four helpers would let importers compile; that is a separate change to a CI-critical spec and is not made here.
  • Foreign lines: +12 / -13 across bootstrap/src/main.rs and bootstrap/src/service.rs (the stale four-line run_record doc comment above Frontier goes; total in run_frontier is inlined). bootstrap/src/test_report.rs is untouched.

Measured on the Railway lab (load average about 96, shared)

  • Neither flag: frontier --list differs from master only by the new spec itself (6 specs/verified/frontier_scope.t27, total 2227 -> 2228, missing 464 -> 465); every other line is identical.
  • frontier --only specs/verified/watch.t27: scope 1 of 2228, 0.18 s, against 0.75 s for the full warm walk.
  • frontier --only specs/verified/reuse.t27: scope 45 of 2228 (reuse plus its transitive importers); all 7 lines it listed are also in the full list.
  • frontier --since HEAD with a one-line edit of reuse.t27 in the working tree: the same 45 specs, 0.43 s.
  • --since HEAD~3 (touches bootstrap/src): whole corpus. --since nosuchrev: error, not an empty scope. --only with --since: clap refusal.
  • t27c test-report specs/verified/frontier_scope.t27: 4 of 4 pass, 0 vacuous.

🤖 Generated with Claude Code

@github-actions

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-10-18 05:31:58 UTC

Summary

Status Count
Total Open PRs 50
PRs with Failing Checks 48
PRs with All Checks Green 2
READY 0
FAILING 48
PENDING 0
NO CHECKS YET 0

These columns do not partition: 0 + 48 + 0 + 0 = 48, and there are 50 open PRs. A PR is being counted twice or not at all.

Seal Status

  • ⚠️ STALE -- sha256(compiler.rs)=0f8c66b9ed0e != manifest seal=87e5cbd3ad94.
    The committed NMSE numbers were certified against an older compiler.rs.
    Run scripts/reseal-check.sh locally for the two-step reseal command (advisory; not a merge gate).

gHashTag and others added 3 commits October 18, 2026 12:42
…10236)

`t27c frontier` decided every spec under specs/. Add `--only <spec>...` and
`--since <rev>`: the walk is the named specs (or the specs `git diff
--name-status <rev>` names) plus every spec that imports them, directly or
transitively. The selection is specs/ci/affected.t27 select_affected, the rule
CI already uses; the Rust gathers the diff, the `use` edges and the corpus and
hands them to affected's own generated code, as CI's C stub does. A change
affected.t27 cannot judge (a path outside specs/) walks the whole corpus and
says so. With neither flag the output is unchanged.

specs/verified/frontier_scope.t27 holds the two decisions around the
selection (scope_wanted, scope_narrows). It does not `use ci::affected`: a
spec that imports it does not compile, because affected declares in_list,
ext_dot, KINDS and PROSE_EXTS and imports policy::own_language, which declares
the same four names differently, so the resolver leaves them unspliced.

The stale four-line doc comment above the Frontier variant (the run_record
text, attached by a merge) goes, and `total` in run_frontier is inlined, so the
hand-written Rust loses more lines than it gains.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
… the tri hot doc (Refs #10236)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…0236)

The t27b ratchet names a spec the reference passes and the ledger does not
list as UNLISTED. frontier_scope.t27 passes under t27b, like its neighbours.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@gHashTag
gHashTag force-pushed the claude/10236-frontier-only-since branch from 2e3851d to 1857352 Compare October 18, 2026 05:43
@gHashTag
gHashTag enabled auto-merge (squash) October 18, 2026 05:43
@github-actions

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-10-18 05:49:54 UTC

Summary

Status Count
Total Open PRs 50
PRs with Failing Checks 47
PRs with All Checks Green 3
READY 0
FAILING 47
PENDING 0
NO CHECKS YET 0

These columns do not partition: 0 + 47 + 0 + 0 = 47, and there are 50 open PRs. A PR is being counted twice or not at all.

Seal Status

  • ⚠️ STALE -- sha256(compiler.rs)=0f8c66b9ed0e != manifest seal=87e5cbd3ad94.
    The committed NMSE numbers were certified against an older compiler.rs.
    Run scripts/reseal-check.sh locally for the two-step reseal command (advisory; not a merge gate).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

frontier: --only <spec>... and --since <rev> walk only the changed specs and their importers (#8095 hot reload, step 1)

1 participant