Uh oh!
There was an error while loading. Please reload this page.
docs(agents): WIP-commit ordering rule + the shared turbo-cache carve-out - #12420
Merged
Conversation
Make the commit-ordering rule trigger on the STEP, not on waiting: push a WIP commit before a build, a full test run, a gate sweep or an ablation, because that is the moment the worktree stops being the only copy. The "commit before you wait" framing never fires for an agent that is not waiting — it is working — which is precisely the population that accumulates the largest uncommitted surface. Placed at the head of Build & Test, immediately under the command block that lists the minutes-long steps themselves, so the rule is read at the moment of use. Paid for in place against a zero-headroom ceiling (1158/1158), no raise: - Documentation Guardrails: the three named-example rows (concepts/, getting-started/, protocol/) deleted (-3). Surviving home: the generic `content/docs/<tree>/` row directly above them, which covers every tree except references/ and releases/ and whose own text called them "named examples, not the whole set" (that dangling sentence is dropped with them). - Skills: the governed-surface paragraph compressed 4 lines -> 2 (-2). Surviving home: Prime Directive #14, which carries every clause — human-merge only, never merge/queue/arm/flip-draft, the retired per-PR approval check, and the post-merge audit. Net 0 lines; check-skill-line-ratchet green at 1158/1158, widest table row unchanged at 1081 bytes (pin 1081). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JANH3y7qe3MD8aLaLXci8N
The worktree rules promise isolation, and agents read that promise as covering the build cache. It does not: turbo resolves the repo root through the git COMMON directory, so every linked worktree replays one `.turbo/cache` in the primary checkout — the same class of shared state as the stash stack already documented beside it. Carries the symptom and the remedy, because the two are otherwise unrecognisable: a typecheck failing on a package the diff never touched, which a plain rebuild does not repair because that rebuild is a cache HIT. The remedy is a forced rebuild of that package. Ablating a build tool is named as a sanctioned producer of poisoned entries — the discipline this repo requires of gate PRs is itself the producer — and `--force` is noted as writing the whole dependency closure, since the remedy has the wider blast radius. Paid for in place against a zero-headroom ceiling (1158/1158), no raise: - Prime Directive #11's stash tail compressed 3 lines -> 2 (-1), and its claim that the stash is "the one thing a worktree does not isolate" corrected — that sentence was already false against the Multi-agent section's own "the stash is one CASE" paragraph, and this change adds a second counter-example. Surviving home: the same Multi-agent paragraphs, which carry the hook name, OS_ALLOW_STASH=1 and the collision-free replacements in full. - The Multi-agent section opener compressed 6 lines -> 2 (-4). It restated Prime Directive #11 nearly clause for clause (the same worktree command, the same reset-under-you hazard, the same hook enforcement); what replaces it points at #11 and introduces the carve-outs that follow, which is the section's own subject. Net 0 lines; check-skill-line-ratchet green at 1158/1158, widest table row unchanged at 1081 bytes (pin 1081). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JANH3y7qe3MD8aLaLXci8N
This was referenced Aug 26, 2026
os-steve
marked this pull request as ready for review
August 26, 2026 02:25
Uh oh!
There was an error while loading. Please reload this page.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for freeto join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes#12024
Fixes#12077
Two AGENTS.md doctrine lines, folded into one compression-paid edit because both
land in the same zero-headroom file. One commit per member; each commit is
independently line-neutral, so the ratchet is green at every commit, not just at
the tip.
⛔ Governed surface — draft, human merge
AGENTS.mdis a governed surface (Prime Directive #14). This PR stays draft;it is never flipped ready, never queued, never auto-merged. Landing is the
maintainer's, by hand.
What each member adds
#12024 — the WIP-commit ordering rule, at the head of
Build & Test,immediately under the command block that lists the minutes-long steps:
The trigger is the step, not the waiting, exactly as graded. "Commit before
you wait" never fires for an agent that is not waiting — it is working — which is
the population that accumulates the largest uncommitted surface. Placement is
judged on the tree: an agent about to run a minutes-long step is reading that
command block, so the rule sits at the moment of use rather than in a
parallel-agents section (the loss is a restart, which reaches a solo agent too).
#12077 — the build-cache carve-out, beside the stash rule in the
isolation-promise section, after the paragraph enumerating what a worktree does
not isolate:
Symptom and remedy are both carried, since the two are otherwise unrecognisable
from the seat that hits them. Ablation is named as a sanctioned producer — the
reverse-verification discipline this repo requires of gate PRs is itself the
producer, not only accidents — and
--forceis noted as writing the wholeclosure, because the prescribed remedy has the wider blast radius.
The payment ledger — every cut, and its surviving home
AGENTS.mdwas 1158 lines against a ceiling of 1158, headroom ZERO. Everyadded line is paid by a same-file deletion. ⛔ No ceiling raise, and no re-wrap:
each cut removes content that survives somewhere named.
concepts/,getting-started/,protocol/)content/docs/row directly above them, which covers every tree exceptreferences/andreleases/. Its own text called the three "named examples, not the whole set" — that now-dangling sentence goes with them. Zero rules lost: the three rows carried no content the generic row did not.OS_ALLOW_STASH=1and the collision-free replacements in full — as the cut text itself said ("in Multi-agent discipline below").Total: +10 added, −10 cut, net 0. Ratchet green at 1158/1158.
One cut does double duty. Prime Directive #11 claimed the stash was "the one
thing a worktree does not isolate" — already false against the Multi-agent
section's own "the stash is one CASE" paragraph, and this PR adds a second
counter-example. It now reads "a worktree isolates neither the stash nor the build
cache", which is what #12077 is about: the isolation promise being read wider than
it holds.
#11910 — read first, per the dispatch, and not touched here
#11910 is the open ceiling-family decision and remains open; nothing here depends
on it. Its ruling authorized 961 → 969 for a different card; the ceiling has since
moved to 1158 through later raises. This PR raises nothing — compression paid for
both additions in full, so the escalation clause ("if compression cannot pay, this
converts to a ceiling decision alongside #11910") was not reached.
Verification — union re-run at the final commit
26e7c579Gate families derived from the actual diff, not recalled:
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack(no paths;the script takes its own change set from the merge base) named 8 families for the
one-path surface
AGENTS.md. All were run at the tip commit, pluscheck:nul-bytesfor the byte discipline. Verdict lines as the gates printed them:Exit codes were captured before any pipe (redirect first, then
tail), so theseare the gates' own verdicts and not a pipeline's status.
Two notes on what was measured:
check:required-contextsfirst returnedPREREQUISITE NOT MET(theyamldependency, absent in a fresh worktree). That is not a red gate and is not
recorded as one — nothing was measured.
pnpm installran, and the line above isfrom the real run afterwards.
confirmed by the id-lint verdict above, which scans
AGENTS.md.No changeset: the diff is docs-only and publishes nothing, so this PR carries
skip-changeset— the derivation's own changeset section applies only to a cardthat is not docs-only.
Generated by Claude Code