diff --git a/AGENTS.md b/AGENTS.md index 0e21b50236..de8b3103b4 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -323,15 +323,16 @@ localStorage / auth gotchas. readable by every seat — which is why it lives here, not only in a lane-specific skill file. **Release-adjacent work stays open to every seat.** The release board, `.objectui-sha` pin bumps, version reconciliation, writing changesets, compiling release notes when asked, and *verifying* release state (`npm view`, `git ls-remote --tags`) - are ordinary tasks. What is reserved is the **release act itself**: ⛔ running `changeset publish` / - `pnpm run release`, ⛔ pushing a version tag, ⛔ cutting a GitHub Release, ⛔ pushing a runtime image, ⛔ + are ordinary tasks. What is reserved is the **release act itself**: ⛔ running `changeset publish` / `pnpm run + release`, ⛔ pushing a version tag, ⛔ cutting a GitHub Release, ⛔ pushing a runtime image, ⛔ `workflow_dispatch`-ing `release.yml` or any other publish-capable workflow, ⛔ **approving a pending `release` environment deployment** (ADR-0125 — since 2026-08-20 that click IS the publish authorisation, and a deployment waiting for hours is the system working, not a state you clear), and ⛔ merging — or queueing, or arming auto-merge on — the **Version Packages** PR (`chore: version packages`). That PR is bot-authored and standing-open - by design: it is regenerated on every push to `main`, so "green, current, and nobody has objected" is its permanent - resting state, not a signal that it is due. When you find a publish nobody ordered — a tag or an npm version that - simply appeared — ⛔ do not "repair" it with a counter-publish: file it as an incident for the maintainer. + by design: it is regenerated six-hourly by `release.yml`'s `version-pr` job — never on a push to `main`; push + drives the publish lane — so "green, current, and nobody has objected" is its permanent resting state, not a + signal that it is due. When you find a publish nobody ordered — a tag or an npm version that simply appeared — + ⛔ do not "repair" it with a counter-publish: file it as an incident for the maintainer. **The precedent is that the mechanical channel fires with nobody deciding to use it.** The release workflow's `on: push` lane once shipped a full release candidate end to end — 69 packages to npm, tags, GitHub Releases, diff --git a/docs/adr/0125-release-approval-gate-replaces-the-typed-version.md b/docs/adr/0125-release-approval-gate-replaces-the-typed-version.md index 4a069bcb39..a47c75e7d4 100644 --- a/docs/adr/0125-release-approval-gate-replaces-the-typed-version.md +++ b/docs/adr/0125-release-approval-gate-replaces-the-typed-version.md @@ -1,6 +1,6 @@ # ADR-0125: The human act that authorises a release is the environment approval, not a typed version string -**Status**: Proposed (2026-08-20) — awaiting the maintainer's hand-merge, which is itself the acceptance act for a governed surface (Prime Directive #14). Implementation ships in the same PR: `.github/workflows/release.yml`. +**Status**: Accepted (2026-08-20) — accepted by the merge that landed it on `main` ([#10150](https://github.com/objectstack-ai/objectstack/pull/10150), commit `81d1fa11d`), which is itself the acceptance act for a governed surface (Prime Directive #14). Implementation shipped in the same PR: `.github/workflows/release.yml`. **Deciders**: ObjectStack Protocol Architects (maintainer ruling, 2026-08-20, on the back of the [#10146](https://github.com/objectstack-ai/objectstack/issues/10146) release failure) **Builds on**: the 2026-08-07 maintainer ruling recorded in **AGENTS.md Prime Directive #15** (「版本发布必须是人工的」) and its implementation in [#6170](https://github.com/objectstack-ai/objectstack/issues/6170) (the two-lane split of `release.yml`) **Supersedes**: nothing. It **re-implements** Prime Directive #15's requirement; the requirement itself is untouched and is quoted again below so no later reader has to reconstruct it. diff --git a/scripts/pm/check-skill-line-ratchet.mjs b/scripts/pm/check-skill-line-ratchet.mjs index e907e02738..781c416f6f 100644 --- a/scripts/pm/check-skill-line-ratchet.mjs +++ b/scripts/pm/check-skill-line-ratchet.mjs @@ -281,7 +281,15 @@ export const CEILINGS = new Map([ // 2026-08-20, verbatim and untranslated: 「A — 抬上限到 961 (Recommended)」 // (issue #10126, comment 5353111732). Headroom is 0 again by construction, and // the next author needing a line is back to compressing. - ['AGENTS.md', 1149], + // + // 1149 → 1150 (#11819): Prime Directive #15's warrant sentence described the + // Version Packages PR as regenerated "on every push to main" — false since the + // #11233 trigger split. The correct sentence (six-hourly schedule; push drives + // the publish lane) is longer, and the whole paragraph measures zero lossless + // rewrap headroom, so the correction costs one line. Maintainer ruling + // 2026-08-25, verbatim and untranslated, accepting the measured +1/D1 option: + // 「我看到了,你分析过了,接受你的建议」. Headroom is 0 again by construction. + ['AGENTS.md', 1150], // #9965: root CLAUDE.md is the other repo-root instruction file — same read // path (every seat session), same governance (Prime Directive #14). It is // structurally growth-prone in the way the ratchet is built for: it exists to