Skip to content

docs(agents): AGENTS.md + CLAUDE.md rules only — narratives, dates and quotations out; issue ownership written by role - #15856

Merged
os-zhuang merged 3 commits into
mainfrom
claude/issue-15379-agents-claude-rules-only
Sep 5, 2026
Merged

docs(agents): AGENTS.md + CLAUDE.md rules only — narratives, dates and quotations out; issue ownership written by role#15856
os-zhuang merged 3 commits into
mainfrom
claude/issue-15379-agents-claude-rules-only

Conversation

@claude

@claude claude Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

Fixes #15670, fixes #15125, fixes #14913, fixes #14509, fixes #15241, fixes #15357
Part of #15379
#15287 remains open until its rule is readable on main: the ownership paragraph in this PR is now its only carrier (PR #15290 was closed by the maintainer as superseded); its three criteria are rows 30a–30c of the inventory below.

Family member 5 of the rules-only rewrite (maintainer ruling recorded on #15379: 「各条规则的出处叙事、事故复盘 根本不重要啊,不需要写入skills啊」). AGENTS.md and CLAUDE.md keep every rule as one executable sentence in its own section and its own register; every incident retelling, provenance story, ruling date, verbatim quotation and "why we learned this" leaves. The ownership paragraph is rewritten by role under the 2026-09-05 ruling on issue ownership (「待你定 1(情形 C): agent 无法区分是你还是 PM 可以接受」 / 「待你定 2(情形 H 与配额): 暂时不区分」). Six cards fold in as one rule each. Ceilings move down only.

Governed surfaces (AGENTS.md, CLAUDE.md, scripts/pm/**) — draft PR, human merge; skip-changeset (nothing publishes). No model identifier appears in the diff, this body, the commit or the comments.

Census (before → after, measured on head 9a3a44190d)

reading AGENTS.md CLAUDE.md
lines 1161 → 1058 (ceiling 1162 → 1058) 36 → 41 (ceiling 86 → 41)
bytes 84947 → 75258 2095 → 2618
widest table row (bytes) 1081 (translations row) → 768 (same row, narrative out; pin 1081 → 768) 0 → 0
widest non-table line (bytes, LC_ALL=C awk) 365 — line 8, the untouched v5.0 rename blockquote (exempt shape); every prose line ≤ 120 bytes by the ratchet's own classifier: 0 offenders 97
lines carrying a date stamp 21 → 0 0 → 0
「」 ruling quotations 5 → 0 0 → 0
⚠️ / ⭐ markers 10 / 0 → 0 / 0 0
⛔ rules 39 → 47 (34 ⛔-bearing lines → 40; every original ⛔ re-stated, see row 20 for the one retired with its object) 4 → 6
#NNN issue citations 0 → 0 (check:pm-skill-id-lint green) 0 → 0
headings 20 → 20, byte-identical (## Communication · ## Build & Test · ### A test that reads outside its own package … · ### Running the dev server · ### Frontend (Studio UI) … · ## Prime Directives · ## Multi-agent working discipline · ## Monorepo Layout · ## Protocol Domains … · ## Kernel · ## Documentation Guardrails · ### Touched packages/spec? … · ## Context Routing … · ## Skills (skills/) · ## Patterns · ## Route & surface ownership · ## Degradation log levels … · ## Startup registry reads … · ## Post-Task Checklist · ## Edit Sizing) 4 ⛔ excerpts kept, same subjects

Byte-identical regions: the RECOGNISED_PATH_SPELLINGS mirror block (check-published-list-mirrors green), the Monorepo Layout / Protocol Domains / Kernel / Context Routing tables, the dev-server and spec-artifact tables, every code fence, the attribution-footer block, and the four-axes frame block appears in neither file (check:skill-frame-sync green, 2 declared copies).

Where each folded rule landed

card rule, as landed file:line
#15670 + #15287 (R1) the ownership paragraph by role — assignee = presence bit, Claim: = identity, both written by the owning session, a dispatched executor inherits and verifies, never writes the field, never yields; release is an explicit act; findings filed unassigned; the maintainer's own work is an accepted blind spot; no per-seat identities AGENTS.md:393-410; one-paragraph form CLAUDE.md:7-17
#15125 the model-free agent commit trailer pair (Claude-Session: session URL + the Co-authored-by: Claude noreply line); no model identifier in any content artefact; the harness-written co-author trailer is the one exemption AGENTS.md:440-444
#14913 the provenance sentence in the rules-only form (no dates, no quotations, no issue numbers; provenance lives in the landing PR) AGENTS.md:10-15; the second site, the check-skill-id-lint.mjs header sentence, at scripts/pm/check-skill-id-lint.mjs:18-19 (pattern, roots and verdicts untouched — self-test 14 cases pass, live 24 files clean). The card's third limb, references/rest-channel.md, is member 3's file (PR #15641) and is not touched here
#14509 an ADR lives in the repository whose code it governs; cloud records cited as cloud ADR-NNNN, ⛔ never bare; a cloud decision whose mechanism half governs open code gets a local ADR with a ## Provenance section; files never move, numbers never reassigned AGENTS.md:249-254, inside Prime Directive #13 (no new heading; the provenance line lives here, not in the file)
#15241 the PR-body footer rule as measured in this repository: the session-URL footer survives an edit and the platform appends a bare block — send an edited body with no footer, read it back, ⛔ never re-send a body that already carries the appended footer; the "normalises DOWN to bare" sentence and its date are gone, and the claim about which footer survives is stated once, with the repository named AGENTS.md:428-439
#15357 a reading you cite is a count plus the repository and commit it was taken against, or it is not a reading; "measured over the corpus" names examples/app-crm at its sha, never an application it is not; a moving ref is not an anchor, for a corpus exactly as for a git diff (the same line as #15647 section 2's second principle, written once) AGENTS.md:354-357, beside the BASE/moving-ref practices

Rule inventory — AGENTS.md (one row per rule paragraph; "operative content unchanged" unless the row says otherwise)

# section · lines now rule as it now reads (lead) what left
1 header · 1–8 file role, AGENTS.md wins, v5.0 rename nothing (byte-identical)
2 header · 10–15 rules only; no narrative, date, quotation or issue number; gate; provenance in the landing PR; script headers are the authority the 2026-08-12 ruling quote and "rulings keep their date and verbatim quote" — content changed on purpose: #14913
3 Communication · 19–31 Chinese in chat with the maintainer; English on GitHub; quoted Chinese rulings untranslated; repo artefacts keep their language; one rule per channel the 2026-08-08 quotation block and the "a merged rule was measured to fail" story
4 Build & Test · 35–42 the command block nothing
5 Build & Test · 44–49 pnpm lint is the only style authority; ⛔ never prettier --write; --check is no second opinion the 2026-09-01 measurement (--file-info, --find-config-path, prettier 3.8.1)
6 Build & Test · 51–52 ⛔ push a WIP commit before every step that takes minutes "lost 2,081 lines"
7 Build & Test · 54–60 type-check coverage/debt ratchets and their four invariants nothing
8 Build & Test · 62–80 the three tsconfig/@ts-expect-error/TS7006 principles "worth knowing before you fight them", one parenthetical aside
9 cross-package test inputs · 82–90 what the gate keeps equal, why a source scan sees only known spellings, seed forms the "on main, with every PR reporting green" and "a detector with no dependencies" rationale
10 cross-package test inputs · 92–110 the published spellings block nothing (byte-identical; mirror gate green)
11 cross-package test inputs · 112–120 mirror gate holds the block; extend detector + self-test + block in one edit, ⛔ never route around; the two unflagged shapes; judged on the shallowest point "an unseen read is the defect above…", the sibling-descent example
12 cross-package test inputs · 122–123 clocked windows measure behaviour, never loading nothing
13 dev server · 125–145 table, --fresh, the port/kill/script rules, the -- separator rule "(measured; …)", "(other agents/the user may be using it)"
14 Frontend · 147–168 backend-only, refresh workflow, ⛔ never hand-edit dist/cache, pin's second half, fast iteration the ⚠️ marker (now ⛔)
15 PD 1–9 · 172–210 unchanged nothing
16 PD 10 · 211–216 file findings; never advertise an undelivered capability; trim / implement / keep the claim as narrow as enforcement; a case label is not enforcement, check every call site incl. bulk the write-path-validator incident; gh issue create spelling (not every seat has gh)
17 PD 11 · 217–229 worktree-first, both hooks, override, precision-first Bash guard, stash/cache not isolated "(it still gets switched under you)"
18 PD 12 · 230–241 contract-first: fix at the producer, reject at publish, ⛔ never a lenient alias/?? in a consumer, internal contract, change the spec deliberately, ADR-0087 entry, stored rows replay the full chain the cfg.filter ?? cfg.filters history and the worked example; "do not" → ⛔
19 PD 13 · 242–248 an accepted ADR binds until superseded; grep the ADRs; leave the id in code; one anchor JSON per path, no index the "three ADRs reversed by a patch changeset" incident
19b PD 13 · 249–254 new — #14509 (see the fold table)
20 PD 14 · 255–288 ⛔ governed surfaces confirmed and merged by the maintainer; the five surfaces named; register + prose gate + print command; authoring open, landing reserved (four ⛔); file list not description; approval path; byte-exact regen clearance; ⛔ no agent approval; draft-back procedure; the barrier is the directive, ⛔ not a relaxation; prevention/detection mechanisms; violation handling; no exception the three verbatim rulings, the 2026-08-27/09-04 approver-set history and quotation, the 2026-09-01 date, the "drafted ADR merged twice" incident, the audit-header pointer. Retired with its object: "⛔ never edit the quotation above to satisfy a gate" — no quotation remains; the surfaces are now editable prose and the gate's own failure text still carries the prohibition
21 PD 15 · 290–310 ⛔ releases are the maintainer's; release-adjacent work open; every reserved act (seven ⛔); Version Packages PR facts; ⛔ no counter-publish; environment: release mechanism; merging that PR queues a deployment in the maintainer's name the 2026-08-07 quotation and 「这个要写入规范」, the "69 packages twice in one week" incident, the workflow_dispatch-barrier history, "since ADR-0125 (2026-08-20)"
22 Multi-agent · 313–316 intro nothing
23 Multi-agent · 318–334 ⛔ never bare git stash push/pop; shared stack; hook behaviour; replacements block "it has really happened, mid reverse-verification"
24 Multi-agent · 336–352 ⛔ the worktree isolates four ref namespaces only; shared refs/remotes/*; FETCH_HEAD per checkout, fails by absence; the four practices; ⛔ no hook backs the moving-ref half "(measured next door: three moves in ten minutes)", "measured on git 2.43", "exactly backwards"
24b Multi-agent · 354–357 new — #15357 (see the fold table)
25 Multi-agent · 359–362 ⛔ nor the build cache nothing
26 Multi-agent · 364–371 reverse verification: commit first; prove identity by hash "has cost changes repeatedly"
27 Multi-agent · 373–385 git checkout REF -- PATH stages; restore forms; ⛔ never trust git diff HEAD alone "(one real PR: 157 such deletions…)"
28 Multi-agent · 387–391 windowed history goes through git-history.mjs nothing
29 Multi-agent · 393–410 the ownership paragraph, by role — (a) shared identity, assignee = presence bit, Claim: = identity record with its first-line spelling; (b) the owning session writes both: a self-picking seat takes only an unassigned card, assigns and claims first; a PM dispatch sets both on the dev's behalf; (c) a dispatched executor inherits both records — the assignee (step 1) and the dispatch's Claim: naming its branch (step 2) — verifies the newest Claim: names its branch (mismatch ⇒ stop and report), posts NO second claim (the dispatch's Claim: is its identity; its own record is the report comment); ⛔ never writes the assignee, ⛔ never yields; (d) re-read the comments — the comments decide: a Claim: from another session or branch means taken, ⛔ never reassign; a bare assignee with no Claim: is a dispatch's step 1, not a foreign claim; (e) release is an explicit act — clear the assignee, post a Release: line; (f) findings filed unassigned, assign when you start; (g) the maintainer's own work carries no claim and is indistinguishable from a dispatch — accepted; no per-seat identities "two agents burn the same hours twice", "implemented twice in one morning", the gh issue edit spelling. Content changed on purpose: the by-role ruling. Agrees with pm-dispatch SKILL.md 认领 (assignee 字段归 PM; a Claim: from a session other than the PM's reads as a foreign claim) and os-dev.md rule 2 (assignee 归 PM; the PM's claim satisfies claim-first for the dev); quotes neither
30a #15287 criterion 1 "A dispatched executor inherits that assignee — the dispatch's step 1, already done"
30b #15287 criterion 2 satisfied at the owning-session level: "a PM dispatch sets the assignee (step 1) and posts the Claim: naming the dev's branch (step 2), both on the dev's behalf" — the executor "posts no second claim — the dispatch's Claim: is its identity and its own record is the report comment"
30c #15287 criterion 3 "the comments decide, not the field: a Claim: from another session or branch (other than the dispatch that sent you) means taken whatever the field says … a bare assignee with no Claim: under it is a dispatch's step 1, not a foreign claim — not taken for the executor it was dispatched to, and not free for a seat picking for itself"
31 Multi-agent · 412–418 state you did not set belongs to another actor; a rewritten body is evidence about the body only, ⛔ never extend it to the draft flag; read the timeline actor or ask the worked draft-flip failure
32 Multi-agent · 420–426 the attribution footer block nothing (byte-identical)
33 Multi-agent · 428–439 PR body and issue comment footer rules — #15241 form (see the fold table); comment rules unchanged the 2026-08-26 / 08-20 / 09-03 measurements and probe counts; "how a body comes back in a shape nobody typed"
33b Multi-agent · 440–444 new — #15125 (see the fold table)
34 Multi-agent · 446–452 GitHub mutates body bytes: spell poison tokens in words; read back; ⛔ don't "repair" a short API reading nothing
35 Multi-agent 1–6 · 454–474 unchanged nothing
36 Multi-agent 7 · 475–516 merge queue: arm only green + accepted; ⛔ two classes never enter; green = success; the six required contexts by name; re-arm awareness; stale red; gh pr merge unmeasured; fallback "supersedes the older blanket auto-merge ban", "by maintainer decision (2026-08-07, extended 2026-08-09)", "much longer than docs/adr/** and it grows fast"
37 Multi-agent 8 · 517–521 own temporary server, never stop someone else's nothing
38 Multi-agent 9 · 522–543 refresh build state after pulling main; the stale-artefact table; the prescription; check:dev-prereqs "which is why it is worth recognising in one step rather than re-diagnosing per gate"
39 Multi-agent 10 · 544–560 clean merge ≠ working merge; full suite before the PR; scoped re-checks "~15 minutes per lap while main lands a PR every few", "the guards exist largely because…"
40 Multi-agent 11 · 561–592 generated artifacts: merge driver, deferral, ⛔ never --no-verify, sharding, per-clone registration, excluded baselines "(maintainer ruling 2026-08-12)", "the old spelling"
41 Layout / Domains / Kernel · 595–655 tables nothing (byte-identical)
42 Documentation Guardrails · 657–664 the four rows; content/docs/releases/ RELEASE-OWNED (audit-scope gate green); translations regeneration rules releases row: "hottest conflict magnet (three PRs raced…)"; translations row: "a stale bundle entry always beat an edited source string…" (1081 → 768 bytes)
43 Touched packages/spec · 666–738 eight artifacts, one job, sequential; the gate table; the three commands; the five wrapper principles; declaration-parity reads two declarations, exits 1 without a manifest, manifest from the pin bump, ⛔ no skip, no workflow wiring; two ungated generators "one red build per artifact", "which is precisely what CI cannot do", "(dead blocks have shipped…)", "settled (maintainer ruling 2026-08-07)", ⚠️ markers
44 Context Routing · 741–764 table nothing (byte-identical — PR #15427's pending row would apply cleanly)
45 Skills · 767–779 filesystem is the catalog; internal entries; ⛔ both roots governed "(two such lists drifted stale as skills landed)"
46 Patterns · 781–806 Zod and Plugin patterns; no onInstall/onEnable/onDisable hooks "an older example … was retired for it"
47 Route & surface ownership · 808–878 the five rules; closed query-parameter set adopted incrementally, ⛔ never as one big batch; the three measurement rules (read points incl. helpers, both pins, open routes excluded by name, per-lane conversion); recognition before arity; verify on the provisioned composition "each paid for by a real bug", the retired-duplicate re-learning story, the 2026-08-12 quotation, "all of them measured rather than assumed", the localised-export 400 narrative (helper rule kept with extractLocale), "the failure mode the ruling rejected", "answered wrongly three times"
48 Degradation log levels · 880–957 the one question; functional → warn, durability → error (prefer failing to falling back, say what was lost); an error owes consequence + fix, once; do not over-apply; caller-propagation declared, not logged; both sets of teeth with their vocabularies and ledgers; narrow scan surface, widening is its own issue the founding suspended-run-store incident, "which is what made the founding incident's warn unreadable", the keystroke example, the 2026-08-06 「裁 3 —— 收窄先行」 quotation
49 Startup registry reads · 959–1004 the question; three parts; read-only probe legal; three cures; teeth the three-instance showcase cold-start incident
50 Post-Task Checklist · 1006–1054 seven steps incl. ⛔ governed exception, changeset rules, ADR-0087 marker, sibling pin, spec artifacts "Why it is asked of you at all:" lead
51 Edit Sizing · 1056–1058 ~20KB payloads nothing

CLAUDE.md

lines excerpt change
1–5, 19–41 intro, worktree-first, never stash, never edit releases, outro untouched — four ⛔ subjects kept, heading pointers unchanged
7–17 ⛔ Claim the issue before you write any code the one-paragraph form of the by-role rule (assignee = presence bit, Claim: = identity; self-picking seat assigns + claims first; PM dispatch sets the assignee and posts the Claim: for its dev, who inherits both, checks the newest Claim: names its branch, posts no second claim, ⛔ never writes the assignee or yields; comments decide, ⛔ never reassign; bare assignee = a dispatch's first step); still points at AGENTS.md → Multi-agent working discipline, paragraph Claim the issue BEFORE you write any code.

Scripts

Verification (head 13fc873b29 = my commit a52aceadb1 + origin/main 5a21d73af5 merged; exit codes captured by redirect, verdict lines quoted from the gates)

  • node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack (change set from the merge base, 4 paths) → 36 commands, every one run, exit 0; --ran reconcile: ✓ dispatch-gates --ran: 36 derived famil(ies) accounted for — 36 run, 0 NOT-MEASURED.
  • node scripts/pm/check-skill-line-ratchet.mjs --self-test155 cases pass; live → ✓ AGENTS.md is 1058 lines (ceiling 1058; headroom 0) · ✓ AGENTS.md: widest table row is 768 bytes (pin 768; headroom 0) · ✓ CLAUDE.md is 41 lines (ceiling 41; headroom 0) · ✓ CLAUDE.md: widest table row is 0 bytes (pin 0; headroom 0).
  • pnpm check:pm-governed-prose✓ 2 instruction surface(s) name all 5 registered governed surfaces (docs/adr/** · .claude/** · skills/** · AGENTS.md · CLAUDE.md) and claim no others.
  • pnpm check:required-contexts✓ 6 required context name(s) pinned across 2 workflow(s); 6 instruction surface(s) scanned (all six names kept verbatim in Multi-agent §7).
  • pnpm check:skill-frame-sync✓ 2 copies of the decision frame are structurally isomorphic across 2 files … 73 markdown files scanned for undeclared copies.
  • pnpm check:pm-skill-id-lint✓ 24 file(s) clean; node scripts/check-published-list-mirrors.mjs (+ --self-test, 37 cases) → exit 0; pnpm check:docs-audit-scope✓ release-owned pages are in scope and read-only; pnpm check:agent-test-spelling0 violations; pnpm check:nul-bytes → exit 0; pnpm check:pm-governed-merges → exit 0; pnpm check:watch-hint-literal, check:cli-command-ids, check:cross-package-test-inputs, check:entry-guard, check:parse-guard, check:pnpm-filter-targets, check:ratchet-remedy-authority, check:refd-timer-probe, check:bash32-floor, check:driver-memory-census, check:pm-dispatch-gates and the direct-node families → all exit 0.
  • All five .claude/hooks/*.selftest.sh → 0 failed (50 / 121 / 116 / 51 / 36 passed): no pinned spelling touched.
  • Whole-repo pnpm lint through scripts/pm/os-verify-lock.sh (slot issue-15379-m5) → VERDICT command-exit 0 · held the lock 69s.
  • Roster gates flagged beside the scripts/ paths, run for completeness: pm-label-desc-cap, console-injection, i18n-stale-fill, engine-double-contract exit 0; dts-closure and published-readme-exports print PREREQUISITE NOT MET (no dist/ in this worktree) — NOT MEASURED, not red; they read nothing this PR changes.
  • git merge-tree --write-tree --name-only origin/main HEAD before the push: clean. PR docs(agents): state the app-vs-platform boundary once, so it stops being re-derived #15427 (one Context Routing row + one CEILINGS row) has not landed; its hunks touch lines this PR leaves byte-identical, so it re-resolves trivially on top of this.

Generated by Claude Code

…d quotations out; ownership written by role

- every rule kept as one executable sentence in its section; incident retellings, provenance stories and
  date-stamped measurements leave (AGENTS.md 1161 -> 1058 lines, CLAUDE.md 36 -> 41)
- the claim paragraph rewritten by role: the assignee is a presence bit set by the owning session, the
  Claim: comment is the identity, a dispatched executor inherits the assignee, verifies the newest Claim:
  names its branch, posts its own, never writes the field and never yields; release is an explicit act
- folded one rule each: the model-free agent commit trailer pair; the provenance sentence in the rules-only
  form (and the id-lint header sentence beside it); an ADR lives where the code it governs lives, cloud
  records cited as cloud ADR-NNNN; the PR-body footer as measured (session-URL survives a PATCH, the
  platform appends); a reading is a count plus the repository and commit it was taken against
- ratchet re-pinned down-only: AGENTS.md 1162 -> 1058 (widest table row 1081 -> 768), CLAUDE.md 86 -> 41

Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019RfFHiRCSs3JXLK4cwcfox
@github-actions github-actions Bot added the size/l label Sep 5, 2026
@claude claude Bot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Sep 5, 2026
@github-actions github-actions Bot added the documentation Improvements or additions to documentation label Sep 5, 2026
…atch's claim is its identity

- the ownership paragraph's executor clause (AGENTS.md and the CLAUDE.md excerpt): the owning session performs
  both acts; a PM dispatch sets the assignee (step 1) and posts the Claim: naming the dev's branch (step 2), both
  on the dev's behalf; the executor inherits both records, verifies the newest Claim: names its branch, posts no
  second claim (its own record is the report comment), never writes the assignee, never yields
- line-neutral in both files (1058 / 41); every other rule unchanged

Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019RfFHiRCSs3JXLK4cwcfox

os-steve commented Sep 5, 2026

Copy link
Copy Markdown
Collaborator

ACCEPT — contract-tier in-seat review of PR #15856, head 9a3a44190 (skills seat, 2026-09-05T12:0xZ). Family member 5 of #15379.

Implemented-by: claude/issue-15379-agents-claude-rules-only (os-dev subagent)
Reviewed-by: session_019RfFHiRCSs3JXLK4cwcfox (skills seat)

Verified in a detached compare worktree at the PR head, three-dot against origin/main, not from the report: four files — AGENTS.md 1161 → 1058 lines with the widest table row 1081 → 768 bytes, CLAUDE.md 36 → 41, scripts/pm/check-skill-line-ratchet.mjs (only the two files' rows re-pinned, down-only, at the landed counts), scripts/pm/check-skill-id-lint.mjs (#14913's header sentence). Rules only, as the family's ruling requires: date-stamped sentences 21 → 0, ruling quotations 5 → 0, warning markers 10 → 0, ⛔ rules 39 → 47 with every original re-stated, the twenty headings byte-identical. The ownership paragraph (AGENTS.md 393–410, CLAUDE.md 9–17) is written by role under the maintainer's 2026-09-05 ruling: the assignee field a presence bit and the Claim: comment the identity; the owning session writes both — a self-picking seat assigns itself and claims before any other action, a PM dispatch sets the assignee and posts the claim for its dev; the dispatched executor inherits both, verifies the newest Claim: names its branch, posts no second claim (the dispatch's claim is its identity, its record is the report comment — the seat's correction on 9a3a44190, which is what os-dev.md line 35 and the SKILL.md line 81 reading already say), never writes the assignee and never yields; the comments decide, a bare assignee with no Claim: under it is a dispatch's step 1 and not a foreign claim; release is an explicit act; findings are filed unassigned; the maintainer's own work is an accepted blind spot and per-seat identities are not introduced. hotlong's three #15287 criteria are present as rules. Six folds, one rule each: #15125 (440–444), #14913 (10–15 plus the id-lint header), #14509 (249–254), #15241 (428–439, in the measured form), #15357 (354–357), #15670 (the paragraph). PR #15427's Context Routing row and its ratchet row are byte-identical here, and merge-tree against main is clean, so that PR re-resolves trivially whichever lands second. No model names, no dates; governed on both surfaces (check-governed-merges --test exit 3); the seat chose the ceiling model for this paragraph at its discretion.

Seat gate runs on this head in the compare worktree: skill-line-ratchet exit 0 at the re-pinned ceilings (1058 / 768, 41 / 0), governed-prose exit 0 (two instruction surfaces name all five governed surfaces), governed exit 3; frame-sync and required-contexts are NOT MEASURED locally (the compare worktree has no installed tree) — the evidence is the dev's runs (two frame copies, 73 files scanned; six required contexts pinned) and CI. The dev's evidence beyond that: 36 derived families all exit 0 and reconciled 36 of 36 on both heads, the five hook self-tests 0 failed (no pinned spelling touched), whole-repo lint through the lock, and CI on 9a3a44190: 33 check runs completed, 25 success, 8 skipped, none failing (seat's read at 12:02Z).

Open question ruled B: the seat rewrote the body's first line to Fixes #15670, fixes #15125, fixes #14913, fixes #14509, fixes #15241, fixes #15357 (read back; the rest of the body byte-identical up to the platform footer) so all six close on merge; Part of #15379 stays on line 2; #15287 is named as carried and stays open until the paragraph is readable on main, when the devx lane closes it. The dev's follow-up #15857 (os-dev.md still states the pre-#15241 footer reading) is graded by the seat and waits behind this PR.

Landing regime: governed surface ⇒ this PR stays a draft; reviewers os-zhuang and hotlong requested by the seat; the human merge is the review record; no seat flips it ready, enqueues it, or arms auto-merge.


Generated by Claude Code

os-steve commented Sep 5, 2026

Copy link
Copy Markdown
Collaborator

维护者速读(skills 席,2026-09-05T13:2xZ)

改了什么:把 AGENTS.md(所有 agent 的总规则)从 1161 行压到 1058 行、CLAUDE.md 只留规则——事故复盘、裁定日期、原话引用全部删掉,每条规则一句话,20 个标题字节不变。同时按你今天的裁定重写「issue 归谁」这一段:指派字段只表示「有人占着」,认领评论才是身份;PM 派发时替 dev 写好这两样;dev 不再自己发第二条认领;离手必须显式释放;你本人的卡与 PM 派的分不出来,已接受为盲区。顺手修掉六条散落的规则错误(提交 trailer、过期出处、ADR 登记规则、PR 页脚规则、「测过语料」要带仓 + commit、指派矛盾),并了结 hotlong 的 #15287(其 PR #15290 已按你指示关闭)。

为什么改:你 9-4 裁定「出处叙事、事故复盘根本不重要,不需要写入 skills」;今天三个开发席撞上「已指派 = 别人的」与「dev 永不写指派」的矛盾,浪费飞行。

风险与代价:这是 agent 的宪法,改动面大(+288 / −377),但 ⛔ 规则 39 → 47 无一丢失、五个 hook 自测无一红、所有门禁与 CI 绿;席位预读抓出并改掉了一处与 os-dev.md 冲突的句子。落地后 hotlong 的 #15427 要在其上重新解一次冲突(两处字节相同,已通知,属小事)。可回滚:一次 revert。

席位意见:建议合并。

你要做的:批准 + 入队(或让 os-zhuang 代做)。


Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation needs-user-decision size/l skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

3 participants