From 7a233b9be96f82ce88535927e075794c30fc08bf Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 8 Sep 2026 03:03:08 +0000 Subject: [PATCH 1/3] docs(agents): stacked PR series are not a supported working form Record the maintainer's ruling (director seat, decision batch #66): a stacked series -- each PR branched off the one below -- is not a supported working form in this repository, and no gate rule or merge-policy change is made for it. A multi-card change uses a trunk branch and pays the two recorded workarounds. The paragraph is self-contained rather than a pointer: AGENTS.md is in check:pm-skill-id-lint's scan set (pattern /#[0-9]{3,}/), so the card number cannot be cited in the file. The three tooling blind spots are stated in one clause each so the rule is actionable without dereferencing history. Fold payment for the 1068/1068 line ratchet: the ADR-0087 marker block in the Post-Task Checklist listed 4 of the gate's 7 disposition categories -- a drifted copy of output the same paragraph already calls "the authority". Replaced by a pointer to the gate's own FIXIT, which prints the full set. Net 0 lines. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01P58euzUXCVJNwmhuPC9DXY --- AGENTS.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 22f11869af..662cc8009b 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -461,6 +461,13 @@ Even inside your own worktree, operate defensively: The issue number is what makes in-flight work *discoverable* — `git ls-remote --heads origin | grep issue-` is a one-command pre-check, and the Duplicate Fix Guard workflow warns on fix PRs whose branch names no declared issue. + + ⛔ **Off `main` is literal — a stacked series, each PR branched off the one below, is NOT a supported form.** + Nothing in the tooling represents it: heavy workflows trigger on `main` only, so a stacked head reports NONE of + §7's six required contexts; squash landing destroys the ancestry link, so every descendant rewinds behind what + landed and pays a rebuild lap per landing; and a breaking changeset's ADR-0087 disposition is base-relative, so a + stacked card's two bases demand contradictory markers. A multi-card change uses a **trunk branch**: correct the + trunk's disposition to `registered` before it merges, and pay the rebase laps. ⛔ No gate or merge-policy change. 3. **Never `git push --force` / `--force-with-lease`, and never push `main`.** A force-push can clobber a parallel agent's work; `main` is shared — land all via PR. 4. **Verify the current branch before every commit/push** @@ -1037,16 +1044,9 @@ registry? Add it to `OPEN_CAPABILITY_REGISTRIES` in the same PR that fixes it. schema is `.strict()`. The changeset is one of fourteen surfaces a retirement touches — follow the `spec-property-retirement` skill (`.claude/skills/`) rather than reconstructing the kit, and note the two routes imply **opposite** liveness-ledger dispositions. - **A breaking changeset must also state its ADR-0087 disposition, in writing.** Add exactly one marker to the - changeset body — `pnpm check:adr-0087-registration` enforces it, and the CI step is *Require an ADR-0087 - disposition on a declared-breaking changeset*: - ``` - - - - - ``` - The gate prints the argument when it fails — that output is the authority. + **A breaking changeset must also state its ADR-0087 disposition, in writing** — exactly one marker in the + changeset body, enforced by `pnpm check:adr-0087-registration` (CI step *Require an ADR-0087 disposition on a + declared-breaking changeset*). ⛔ The categories are NOT copied here — the gate prints the full set when it fails. 4. **A removal that breaks the pinned sibling checkout ships together with the sibling fix and the pin bump — or it does not ship.** The `Console Pin Gate` job builds objectui at the pinned `.objectui-sha` against **current** `main`, so a removal or rename the pinned sibling still imports turns `main` red for every PR in the repo the moment it From 82f0672902da51bfe3bfe7925d3c9ddb14e62e51 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 8 Sep 2026 03:29:27 +0000 Subject: [PATCH 2/3] docs(agents): drop the heavy-CI clause from the stacked-series paragraph Seat review: the ruling grades that cost as "a defect independent of stacking" and splits it out to its own devx card, so it is a defect being fixed -- not a price of an unsupported form. Stating it in AGENTS.md as an inherent property of stacking contradicts the ruling, and the clause goes false the moment that card lands, rotting in place like any other restated fact. The paragraph now carries only the two structural costs the ruling did assign here: squash landing destroys the ancestry link, so every descendant pays a rebuild lap per landing; and a breaking changeset's ADR-0087 disposition is base-relative, so a stacked card's two bases demand contradictory markers. No pointer to the split-out card: AGENTS.md is in check:pm-skill-id-lint's scan set, and any wording like "CI does not run on these yet" would itself go false when that card lands. AGENTS.md 1068 -> 1067; the ratchet is a cap, so a net decrease is legal and nothing was restored to pad it back. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01P58euzUXCVJNwmhuPC9DXY --- AGENTS.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 662cc8009b..d7547f26fb 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -462,12 +462,11 @@ Even inside your own worktree, operate defensively: origin | grep issue-` is a one-command pre-check, and the Duplicate Fix Guard workflow warns on fix PRs whose branch names no declared issue. - ⛔ **Off `main` is literal — a stacked series, each PR branched off the one below, is NOT a supported form.** - Nothing in the tooling represents it: heavy workflows trigger on `main` only, so a stacked head reports NONE of - §7's six required contexts; squash landing destroys the ancestry link, so every descendant rewinds behind what - landed and pays a rebuild lap per landing; and a breaking changeset's ADR-0087 disposition is base-relative, so a - stacked card's two bases demand contradictory markers. A multi-card change uses a **trunk branch**: correct the - trunk's disposition to `registered` before it merges, and pay the rebase laps. ⛔ No gate or merge-policy change. + ⛔ **Off `main` is literal — a stacked series, each PR branched off the one below, is NOT a supported form.** No + tooling represents it: squash landing destroys the ancestry link, so every descendant rewinds behind what landed and + pays a rebuild lap per landing; and a breaking changeset's ADR-0087 disposition is base-relative, so a stacked card's + two bases demand contradictory markers. A multi-card change uses a **trunk branch**: correct the trunk's disposition + to `registered` before it merges, and pay the rebase laps. ⛔ No gate rule and no merge-policy change is made for it. 3. **Never `git push --force` / `--force-with-lease`, and never push `main`.** A force-push can clobber a parallel agent's work; `main` is shared — land all via PR. 4. **Verify the current branch before every commit/push** From 1c56734885aa4613ae19ad4c147030822d76f609 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 8 Sep 2026 03:32:04 +0000 Subject: [PATCH 3/3] docs(agents): keep the stacked-series paragraph inside the 120-byte budget check:pm-skill-ratchet enforces a per-LINE byte budget alongside the per-file line ceiling, and the reflow left L469 at 121B. Rewrapped to five lines, each under 120B, with the closing boundary shortened to "No gate or merge-policy change is made for it" to fit without an orphan line. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01P58euzUXCVJNwmhuPC9DXY --- AGENTS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AGENTS.md b/AGENTS.md index d7547f26fb..1430f5d56a 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -466,7 +466,7 @@ Even inside your own worktree, operate defensively: tooling represents it: squash landing destroys the ancestry link, so every descendant rewinds behind what landed and pays a rebuild lap per landing; and a breaking changeset's ADR-0087 disposition is base-relative, so a stacked card's two bases demand contradictory markers. A multi-card change uses a **trunk branch**: correct the trunk's disposition - to `registered` before it merges, and pay the rebase laps. ⛔ No gate rule and no merge-policy change is made for it. + to `registered` before it merges, and pay the rebase laps. ⛔ No gate or merge-policy change is made for it. 3. **Never `git push --force` / `--force-with-lease`, and never push `main`.** A force-push can clobber a parallel agent's work; `main` is shared — land all via PR. 4. **Verify the current branch before every commit/push**