Skip to content

feat(tests): fail smoke when a fork edits an upstream manifest key (#1923) - #1960

Merged
braboj merged 1 commit into
mainfrom
feat/manifest-ownership
Oct 17, 2026
Merged

braboj merged 1 commit into
mainfrom
feat/manifest-ownership

Conversation

@braboj

@braboj braboj commented Oct 17, 2026

Copy link
Copy Markdown
Collaborator

Closes #1923.

What

  • SYS-20 (tests/run_smoke.py, spec SAIT-SMK-SYS-20-001A, INDEX row) compares the manifest's upstream keys (core, base, backend, frontend) with a baseline. It names each entry added, removed or changed, with the fields that changed.
    • In a fork, SAIT_UPSTREAM_REF names a ref holding upstream's history. The baseline is the merge base of HEAD and that ref: the revision the fork last merged.
    • Upstream sets no ref, so the manifest is compared with itself and the check passes trivially, as the issue asks.
    • Planted pairs run every time, upstream included, so the failing path is exercised in CI. Five cases: a legal fork (a stack and a platform appended, plus a key of its own) owes no finding, and four edits owe one finding each (the core tier, a changed entry, an added entry, a removed entry).
  • The PLAYBOOK ("Run the test suite") says how a fork sets the ref. CLAUDE.md §5.2 lists SYS-20, and the CHANGELOG has an Unreleased "Added" line.

Decided here: no manifest fragments

The issue left per-directory manifest fragments as optional insurance. They are not added: the check enforces the rule, and fragments would change the manifest schema that the 3.x line freezes. If forks still hit merge conflicts in the manifest, fragments can arrive later as an additive schema change.

Verification

  • run_smoke.py 35/35. run_conformance.py 0 failed; its readings: release ordering has no other ready PR, no off-limits path is touched, and the test change is SYS-20 added. sync.py --check is clean.
  • Fork path on real history: SAIT_UPSTREAM_REF=fcb8585~1 flags exactly base: base-agents changed (description), the edit feat(templates): generate inline or hybrid, and inline a rule that breaks silently (#712) #1959 made. A ref sharing no history fails with the git error.
  • Control: making the comparison return nothing (confirmed landed) fails all four planted edits by their owed findings, while the legal fork still passes. Then reverted.

🤖 Generated with Claude Code

…1923)

SYS-20 compares core, base, backend and frontend with the revision a fork
last merged, the merge base of HEAD and SAIT_UPSTREAM_REF, and names each
entry added, removed or changed. Upstream sets no ref and compares the
manifest with itself; planted pairs exercise the failing path every run.
Per-directory manifest fragments are not added: the check enforces the
rule, and fragments would change the schema 3.x freezes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@braboj
braboj merged commit 52174d0 into main Oct 17, 2026
1 check passed
@braboj
braboj deleted the feat/manifest-ownership branch October 17, 2026 12:01
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.

Fail smoke when a fork edits an upstream manifest key

1 participant