chore(openspec): align ship-cycle merge contract with lifecycle ancestry (#451) - #504
Conversation
#451) spec.md 的 ship-cycle requirement 寫 squash-merge,但可執行的 .claude/workflows/ship-item.md 與 enforcing test scripts/tests/test-agent-governance-check.ps1 都要求 --merge --match-head-commit(non-squash merge commit,保留 lifecycle subject_commit ancestry)。spec 是過時的一方。 新增並 archive OpenSpec change align-ship-cycle-merge-ancestry: 把 openspec/specs/agent-operability-governance/spec.md 內兩處 squash-merge 措辭改為 merge(merge commit、non-squash、保留 ancestry),其餘措辭不變。不動 ship-item.md、不動 enforcing test、 不動既有 archive 內容。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ancestry (#451) 新增 archived change align-ship-cycle-merge-ancestry 的 lifecycle-ledger.json row(task_ledger 6/6、evidence_refs 指向 archive 內 proposal.md/tasks.md、 subject_commit=900b0ac62b4001b26d86b927baf20f0700ca03d0,即上一個 commit)。 欄位形狀比照既有 archived row。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Warning Review limit reached
Next review available in: 53 minutes You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (5)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 3c94d28854
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
Pull request overview
This PR resolves issue #451, which reported a contradiction between the canonical spec and the executable ship-cycle workflow. openspec/specs/agent-operability-governance/spec.md previously mandated squash-merge, while the executable .claude/workflows/ship-item.md and the enforcing test scripts/tests/test-agent-governance-check.ps1 require a non-squash --merge --match-head-commit to preserve the lifecycle subject_commit ancestry invariant. The change updates the stale spec wording to match the already-landed executable behavior, wrapped in a full OpenSpec change ceremony (proposal + tasks + spec delta) that was archived in the same turn, with a corresponding archived ledger row.
I verified the core claim against source: ship-item.md:19 and :125 both use --merge --match-head-commit, and test-agent-governance-check.ps1:875-876 assert --merge is present and --squash is absent — confirming the spec was indeed the stale party. A grep of the spec shows zero squash-merge residual after the change, and the new ledger row's fields (owner, task_ledger 6/6, evidence_refs, archive_debt) match existing archived-row conventions.
Changes:
- Reworded two occurrences of
squash-mergein the ship-cycle requirement and scenario tomerge(merge commit, non-squash, preserving lifecyclesubject_commitancestry). - Added the archived OpenSpec change (
proposal.md,tasks.md, spec delta) under2026-08-11-align-ship-cycle-merge-ancestry/. - Appended a matching archived row to
openspec/lifecycle-ledger.json.
Reviewed changes
Copilot reviewed 5 out of 5 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| openspec/specs/agent-operability-governance/spec.md | Aligns two squash-merge mentions to non-squash merge to match executable workflow/test |
| openspec/lifecycle-ledger.json | Adds the archived lifecycle row for the change with evidence refs and subject commit |
| openspec/changes/archive/2026-08-11-align-ship-cycle-merge-ancestry/proposal.md | Documents the rationale (spec drift vs. executable behavior) and scope |
| openspec/changes/archive/2026-08-11-align-ship-cycle-merge-ancestry/tasks.md | Records the 6/6 completed change tasks and validation commands |
| openspec/changes/archive/.../specs/agent-operability-governance/spec.md | MODIFIED requirement delta applied at archive time |
💡 Add a code-review agent skill for context-aware, tailored reviews. Learn more in the docs.
There was a problem hiding this comment.
Codex Tri-Adversarial Bot
Automated tri-adversarial ship-gate (L0 terra triage / L1 tier-routed lens fanout / L2 refute-by-default / L3 sol apex — Codex models).
Mapped event: COMMENT
Codex Tri-Adversarial ship-gate — PR #504
- Repo head:
chore/451-align-ship-merge-ancestry-v2@3c94d28 - Base:
main@4721923 - Files changed: 5
- Engine: four-model tri-adversarial gate on Codex — L0 triage
gpt-5.6-terra/low; L1 lens finders routedgpt-5.6-terra/low →gpt-5.6-luna/medium →gpt-5.5/xhigh (security floorgpt-5.5); L2 refute-by-defaultgpt-5.5/xhigh, top-tier findings refuted bygpt-5.6-sol/xhigh (every refutation cross-model); L3 apexgpt-5.6-sol/max. 誠實聲明:層級與 Claude 三層 gate 同構(terra≈haiku、luna≈sonnet、gpt-5.5≈opus、sol≈fable),但模型池是 Codex 的,非 Anthropic 的。
Verdict
SHIP
- 阻擋門檻 severity:
critical, high - mapped GitHub event:
COMMENT - ℹ️ 判定為 SHIP,但刻意不送 APPROVE:GitHub App 的 approving review 不計入
required_approving_review_count(2026-07-31 實測)。本報告是證據,approving 那一票請由真人帳號投。
Difficulty & routing
- overall:
high(source: terra-triage) - lens tiers: correctness→
gpt-5.5, security→gpt-5.5, simplification→gpt-5.6-luna, test-gap→gpt-5.5
Layer stats
- L1: raw=2 deduped=2 finder_failures=0
- L2: confirmed=0 refuted=2 unverified=0
- L3 final: 0
Killed (did not survive L2/L3)
S1[low] Avoid duplicated merge semantics in requirement and scenario — The finding is overstated as a simplification issue. In OpenSpec-style normative text, the requirement states the contract and the scenario restates the expected observable behavior for that scenario. The adjacent duplication is intentional traceability, not clear maintainability debt. The two phrasS2[low] Remove brittle line-number references from proposal rationale — The diff does add hard-coded line numbers, but they are in an archived OpenSpec proposal rationale, not in the active requirement or executable contract. The same paragraph already names the requirement, file paths, command shape (gh pr merge ... --merge --match-head-commit <preparedHead>), and th
Summary
沒有通過 L1/L2 的 survivor finding,因此本 gate 無需阻擋此 PR。S1 與 S2 維持 L2 的否決結果,不納入最終 findings。
Agent calls
- 8/8 ok, engine wall-clock 150.5s
VERDICT
SHIP
VERDICT: SHIP
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 9839d2b524
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
monkey1sai-blip
left a comment
There was a problem hiding this comment.
Approved by monkey1sai-blip (the reviewer account pinned by the repo's merge governance).
Submitted through scripts/blip_review.py — a scripted approval carrying the operator's authority, pinned to head 9839d2b524047d30d985066ecb51951ccdeaeda5. This is the mechanism the GitHub App cannot satisfy: an App's approving review does not count toward required_approving_review_count.
#512) Same pattern as #482/#501: the row's subject_commit pointed at the pre-squash branch commit (bccf251) which is not an ancestor of main after the #504 squash (881f6da); any PR CI running the machine-truth source observation against this ledger fails subject_not_ancestor. Rebound to the landed squash. Local gates: machine-truth 24/0, metrics 13/0. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Summary
openspec/specs/agent-operability-governance/spec.md的 ship-cycle 契約兩處squash-merge措辭與 executable workflow(.claude/workflows/ship-item.md用--merge --match-head-commit)及 enforcing test(test-agent-governance-check.ps1斷言含--merge禁--squash)矛盾;merge commit 是為保 lifecyclesubject_commitancestry,spec 是過時方。align-ship-cycle-merge-ancestry走完整儀式:proposal+tasks(6/6 全勾)+MODIFIED Requirement delta →npx openspec validate --strict→npx openspec archive(同輪 archive,落openspec/changes/archive/2026-08-11-align-ship-cycle-merge-ancestry/)→ ledger 新增 archived row。merge(merge commit、non-squash,保留 lifecycle subject_commit ancestry);其餘措辭(official gate 全綠、不 merge 真 P1/P2、不偽裝 CI、buffer cycle)逐字不變;grep squash-merge該 spec 零殘留。.claude/workflows/ship-item.md、scripts/tests/test-agent-governance-check.ps1、既有 archive 內容、docs/plans/NOW.md。AI Coding Governance
Machine values:
Change lane=F/B/G/S;Behavior contract changed=yes/no;Requirement source=issue/docs/plans/superpowers spec/existing contract/not applicable.Frontend Verification
User-facing changes must pass two independent producers: real frontend/runtime operability evidence and the pinned
docs/plans/design-system-reference.manifest.jsonfidelity gate. Scope is derived from changed paths plus the base/head manifest union; the PR body cannot select an easier screen.mixedandpartial_reference_missingpermit honest partial work but requireFull completion claimed = no. Semantic evidence is produced only by thedesign-semantic-visualCI Playwright job, never supplied as PR input;PR Metadata Contractvalidates the live PR metadata, while normal protected CI checks determine mergeability.Deploy Path Verification
Required for runtime / Docker / Kit / viewer / ports / env / conversion-service changes.
Self-Referential Bootstrap
Required when the PR changes the verification mechanism itself (deploy path / evidence harness / gate script). Rule:
docs/agents/self-referential-bootstrap.md. Open ledger debt inscripts/self-referential-bootstrap-ledger.jsonblocks further mechanism PRs until fixpoint closure.Validation
npx openspec validate align-ship-cycle-merge-ancestry --strict→ valid;npx openspec archive --yes→ exit 0(~ 1 modified)。node --test scripts/tests/test-openspec-machine-truth.mjs→ 24 pass/0 fail(含 ledger row subject rebind 至 rebased commit);test-ai-coding-metrics.mjs→ 13 pass/0 fail。pwsh scripts/tests/verify-openspec-lifecycle.ps1 -BaseRef origin/main→openspec lifecycle OK: non_deferred=5; deferred=5。pwsh scripts/tests/test-openspec-lifecycle-archive-diff.ps1→ PASS;test-openspec-ledger-reconciliation.ps1→ all assertions passed。pwsh scripts/tests/test-agent-governance-check.ps1→ 45 pass/0 fail。Known Risks
subject_commit會指向分支 commit(非 main ancestor);依 repo 慣例(fix(openspec): rebind hifi lifecycle to landed snapshot #501 同型)需 merge 後跟一個 rebind 小 PR 把 row 指向 landed squash。本 session 會在 merge 後補上。🤖 Generated with Claude Code