Skip to content

chore(openspec): archive closeout follow-up (spec zh-TW, archive refs, projection) - #481

Merged
monkey1sai merged 2 commits into
mainfrom
chore/archive-closeout-followup
Aug 10, 2026
Merged

chore(openspec): archive closeout follow-up (spec zh-TW, archive refs, projection)#481
monkey1sai merged 2 commits into
mainfrom
chore/archive-closeout-followup

Conversation

@monkey1sai

Copy link
Copy Markdown
Owner

What

Archive closeout follow-up for introduce-executable-architecture-contracts, adopting the #480 review findings:

  • The canonical spec prose (openspec/specs/executable-architecture-contracts/spec.md) is now Traditional Chinese per openspec/AGENTS.md, preserving the parser-required English headings and SHALL protocol identifiers.
  • The archived ledger row's evidence_refs point at the dated archive directory, and subject_commit rebinds to the landed archive snapshot (chore(openspec): archive introduce-executable-architecture-contracts #480 squash c41e29d - sources unchanged since, the chore(openspec): rebind the Phase 4 ledger row to its landed squash commit #477 convention).
  • docs/plans/NOW.md drops the archived row from the current-scope projection (ledger-first rule). NOW.md is also the evidence file of isolated-branch-stack-browser-e2e, so that row re-reconciles to the commit carrying the change; post-merge it rebinds to this PR's squash per convention.
Item Result
Change lane B
Behavior contract changed no
Linked issue none - #480 review-finding closeout
Requirement source existing contract: openspec/AGENTS.md archive and projection rules
CODEOWNERS / owner review requested
GitNexus evidence not needed: spec prose, ledger data, projection row; no code symbol modified
Browser E2E evidence not user-facing
Agent workflow changed? no
Required checks expected CI / Agent Governance / PR Metadata Contract
Self-referential bootstrap no
Bootstrap ledger entry not applicable
Bootstrap reason not applicable

Validation

  • node scripts/tests/test-openspec-machine-truth.mjs - 24/24
  • npx openspec validate --all --strict - 71 passed, 0 failed
  • git diff --check - clean

🤖 Generated with Claude Code

https://claude.ai/code/session_015QTVFY89rS2xRwRB2TpFP6

monkey1sai and others added 2 commits August 10, 2026 11:08
…re-contracts

Adopts the #480 review findings: the canonical spec prose is now
Traditional Chinese per openspec/AGENTS.md (parser headings and SHALL
protocol identifiers preserved), the ledger row's evidence_refs point at
the dated archive directory, subject_commit rebinds to the landed
archive snapshot (#480 squash c41e29d - sources unchanged since), and
the NOW projection drops the archived row per the ledger-first rule.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015QTVFY89rS2xRwRB2TpFP6
… NOW.md evidence moved

docs/plans/NOW.md is that row's evidence file; dropping the archived
projection row changed it, so the row rebinds to the commit carrying
the change (post-merge it rebinds to the squash per the #477
convention).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015QTVFY89rS2xRwRB2TpFP6
Copilot AI balanced review requested due to automatic review settings August 10, 2026 03:11
@monkey1sai
monkey1sai enabled auto-merge (squash) August 10, 2026 03:11
@coderabbitai

coderabbitai Bot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

@monkey1sai, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 5 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 @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

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 configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 715113aa-be5e-412a-8608-165f6d63fd49

📥 Commits

Reviewing files that changed from the base of the PR and between c41e29d and 933430c.

📒 Files selected for processing (3)
  • docs/plans/NOW.md
  • openspec/lifecycle-ledger.json
  • openspec/specs/executable-architecture-contracts/spec.md

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@monkey1sai-blip monkey1sai-blip left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 933430c34a32230fe89069ce17e2505cf5f20aa0. This is the mechanism the GitHub App cannot satisfy: an App's approving review does not count toward required_approving_review_count.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 933430c34a

ℹ️ 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".

Comment thread openspec/lifecycle-ledger.json

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR is an archive-closeout follow-up for the introduce-executable-architecture-contracts OpenSpec change, adopting review findings from #480. It has no code impact — it updates spec prose, lifecycle-ledger data, and the current-scope projection so the machine-truth reconciliation stays consistent after the change was archived.

Changes:

  • Translates the canonical capability spec (openspec/specs/executable-architecture-contracts/spec.md) from placeholder/English into Traditional Chinese per openspec/AGENTS.md, preserving parser-required English headings (### Requirement:, #### Scenario:) and SHALL protocol identifiers, and replacing the TBD Purpose.
  • Repoints the archived ledger row's evidence_refs to the dated archive directory and rebinds its subject_commit to the #480 squash (c41e29d); also rebinds the isolated-branch-stack-browser-e2e row's subject_commit since NOW.md (one of its evidence files) changed.
  • Drops the now-archived row from docs/plans/NOW.md, which projects only scope: current (non-archived) ledger rows.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated no comments.

File Description
openspec/specs/executable-architecture-contracts/spec.md zh-TW translation of spec prose + real Purpose; English parser headings and SHALL identifiers preserved (verifier treats specs/ paths as non-owned, so no source-drift).
openspec/lifecycle-ledger.json Archived row evidence_refs moved to archive dir and subject_commit rebound to c41e29d; isolated-branch-stack-browser-e2e subject_commit rebound to 64cab2c (NOW.md evidence changed).
docs/plans/NOW.md Removes the archived change from the current-scope projection, matching currentLedger() which excludes archived rows.

💡 Add a code-review agent skill for context-aware, tailored reviews. Learn more in the docs.

@monkey1sai
monkey1sai disabled auto-merge August 10, 2026 03:23
@monkey1sai
monkey1sai enabled auto-merge (squash) August 10, 2026 03:23
@monkey1sai
monkey1sai merged commit 5e8d677 into main Aug 10, 2026
24 checks passed
@monkey1sai
monkey1sai deleted the chore/archive-closeout-followup branch August 10, 2026 03:29
monkey1sai added a commit that referenced this pull request Aug 10, 2026
 squash (#482)

The #477 convention's second half: the row bound its evidence-carrying
branch commit inside #481 so the pre-merge gate could verify it; the
squash landed, so the row now binds the permanently reachable trusted
snapshot.


Claude-Session: https://claude.ai/code/session_015QTVFY89rS2xRwRB2TpFP6

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
monkey1sai added a commit that referenced this pull request Aug 10, 2026
…achine truth (#485)

* fix(governance): gate the real repository against its own lifecycle machine truth

scripts/lib/openspec-machine-truth.mjs already owns a complete lifecycle
comparator, but its CLI needs a GitHub observation and a pinned openspec
binary, so CI could only ever exercise it against synthetic temporary
fixtures. The one assertion that touched the real tree was a hand-written
regex for a single change id, so drift between openspec/changes, the
machine ledger and the NOW projection was corrected by hand after landing
(#477, #481, #482) instead of being refused at PR time.

This adds the repository-local subset of that comparison as a gate that
needs no network, git or external binary, and wires it into the already
required agent-governance check. It compares the change directories and
their proposal markers, openspec/lifecycle-ledger.json, and the NOW
projection, reports disagreement rather than resolving it, and fails
closed on any input it cannot read as declared.

Proven on a real historical commit: run against main at c41e29d the gate
reports now_unexpected_change for introduce-executable-architecture-contracts,
drift that existed on main and was only fixed later by #481.

Claude-Session: cowork scheduled task ai-bim-geo

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>

* fix(governance): close the ship-gate survivors on the lifecycle parity gate

Codex tri-adversarial gate on PR #485 returned SHIP with five non-blocking
survivors. Four are closed here; the fifth is disclosed.

- L1-1: the current-change cap counted the mandatory archive namespace, so
  the filesystem observation could not represent the same 512-row boundary
  the NOW parser accepts. One raw slot is now reserved and the filtered set
  is bounded instead.
- SEC-001: path-derived values reached the text renderers verbatim, so a
  directory name carrying a newline or ESC byte could forge extra report
  lines. Values with control characters are now JSON-quoted; JSON output is
  unchanged.
- TG-001: the input_too_large budgets had no coverage. Added the accepted
  boundary and one past it for change directories, NOW rows, ledger rows and
  file bytes.
- TG-003: the non-regular proposal.md predicate was only reachable through a
  skippable symlink fixture. Added a portable directory-named-proposal.md
  case.

Not closed: SEC-002 (readdirSync materialises the full Dirent list before the
entry cap is applied). Rated low by the apex; incremental opendirSync
iteration is a larger refactor and is left as disclosed follow-up.

Claude-Session: cowork scheduled task ai-bim-geo

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>

* fix(governance): close the marker fail-open pair found by the second gate run

Second Codex tri-adversarial run on head 40d93c6 returned SHIP with four
survivors; the two medium ones were real fail-open defects in the marker
parser, which this gate promotes to merge-blocking authority.

- L1-1: the canonical marker regex had no trailing token boundary, so
  `> **Status: active123**` captured `active` and read as a clean active
  row. The status token must now end at `**`, whitespace or end of line;
  anything else is reported as an unreadable marker.
- L1-2: near-miss detection ran only when no canonical marker was found, so a
  proposal carrying two disagreeing declarations resolved silently to the
  canonical one. Every bolded status-like line in the prologue is now
  inventoried and an unconsumed one is reported even beside a canonical marker.
- L1-3: the raw namespace budget is now separate from the canonical change
  budget, so one stray entry beside a full change set stays a targeted
  `change_entry_not_a_directory` mismatch instead of a generic budget error.
- TG-1: added a control-character assertion for the text input-error path.

Verified against all 120 real proposals: the ten current ones are unchanged;
only one archived proposal reads `invalid` (`Status: closeout reconciled`),
and archived markers are outside this gate's scope.

Claude-Session: cowork scheduled task ai-bim-geo

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>

* fix(governance): correct the orphan-directory record and per-declaration marker counting

Both from PR #485 review threads.

- The `directory_without_ledger_row` record had its observations reversed: the
  directory is present in `openspec/changes` and absent from the ledger, so
  the record now names the directory as the observed value and `absent` as
  what the ledger was expected to carry.
- Status-like declarations are now counted per declaration rather than per
  line, so `> **Status: active** **Status: deferred**` on a single blockquote
  line is reported as an unreadable marker instead of resolving to `active`.

Claude-Session: cowork scheduled task ai-bim-geo

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
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.

3 participants