docs(agents): os-dev.md — the harness attribution reminder yields to this file - #19167
Conversation
… file One clause in the Definition-of-done list, right after the trailer line: the harness attribution reminder yields to this file by its own precedence sentence, and a model-bearing trailer the harness itself writes is the AGENTS.md exemption — report it, never imitate it, never rewrite history. Line-neutral at 403/403, widest line 120 B. Paid by removing the bullet that restated AGENTS.md's Communication rules verbatim (English titles and prose; Chinese rulings quoted untranslated) — that content survives in AGENTS.md, which this file already binds on first read. Claude-Session: https://claude.ai/code/session_01W5y9kRg1YtYaMQYExVLRc2 Co-authored-by: Claude <noreply@anthropic.com>
Contract reviewServed-tier: In-seat review by the ① Derived judgments
② Semver levelNone owed — no published package is touched; ③ Boundary flags
Implemented-by: VERDICT: PASS Generated by Claude Code |
Fixes #18698
Clause-②: no
One clause in
.claude/agents/os-dev.md, a governed Tier S surface (.claude/**): landing is the skills seat's contract-tier review of record through the queue. This PR stops at draft.What changed
.claude/agents/os-dev.md, Definition-of-done list, right after the trailer line — today:284, kept byte-identical becausescripts/check-commit-card-trailers.mjscites that sentence verbatim and its self-test holds the citation to the file. New:285(120 B):It restates the governing text,
AGENTS.md:440–:444 (quoted with the two angle-bracket placeholders spelled out in words, because GitHub mutates body bytes):The precedence sentence the clause relies on is in the harness attribution reminder itself — read in this session, verbatim: 「the user's own instructions about these lines, such as a CLAUDE.md or memory rule, take precedence over this reminder」.
CLAUDE.md → AGENTS.mdis that instruction, so the reminder defers; the clause restates AGENTS.md, never the reminder.Ruling — director record on the card (batch #154 item 5, maintainer 「同意」 2026-09-18T04:56Z), operative part verbatim
Readings, not identifiers: the ruling's
:283reads:284on today'smain(the file moved when PR #19038 landed at 2026-09-18T23:52Z); the serial 「behind #18599, with #18699」 is discharged — both landed before this PR (PR #18725 and PR #18898). The landing route is the later Tier S ruling (the seat's contract-tier review of record through the queue), superseding the last bullet's human merge.Line budget — ratchet row
['.claude/agents/os-dev.md', 403]5d0ee8f)9612c8d):285Payment (line-neutral): the removed bullet is the former
:285「标题与散文用英文(见 AGENTS.md);引用的中文裁决保持原文不译,改写引文就是改写裁决。」 — a true duplicate that cited its own source. Its content survives verbatim inAGENTS.md§ Communication::25「GitHub 产物一律使用英文:issue 与 PR 的标题、正文、评论。」 and:26–:27「引用中文裁决时保持原文、不翻译,即使承载它的 issue/PR 正文通篇是英文——改写引文就是改写裁决。」; os-dev.md:19already binds AGENTS.md before the first edit. No re-wrap bought the line and no ceiling moved. Measured before choosing: zero gate scripts pin any phrase of the removed line (grep overscripts/,.github/,.claude/skills/,package.json); the only pinned sentence in this list is:284, which is untouched (check-commit-card-trailersself-test: 「✓ every sentence inside the corner brackets is verbatim in the cited rules file」).The clause names no model and no card. Frontmatter untouched (
model: opusline unchanged). The wording was measured down from the seat's 157 B suggestion; the three-verb prohibition without objects follows the file's own register (:303「⛔ 不挂不摘不等」).Verification — all at
9612c8d, every exit code captured before any pipeGate list derived in the worktree with
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands(change set:.claude/agents/os-dev.mdonly, 2 changed lines; 19 commands — identical to the dispatch's 19) and reconciled with--ran: 「✓ dispatch-gates --ran: 19 derived famil(ies) accounted for — 19 run, 0 NOT-MEASURED」.node scripts/check-closing-keyword-parity.mjsnode scripts/check-closing-keyword-parity.mjs --self-testnode scripts/check-comment-mask-corpus.mjsnode scripts/pm/check-governed-queue-guard.mjs --self-testnode scripts/pm/check-harness-current.mjs --self-testpnpm --filter @objectstack/lint run check:doc-formula-expressions@objectstack/formulaand@objectstack/lintunbuilt in a fresh worktree; built both under the verify lock,VERDICT command-exit 0, then this reading.)pnpm check:agent-model-declaredpnpm check:agent-test-spelling--token(s) · 13 separator(s) JUDGED.pnpm check:commit-card-trailerspnpm check:cross-package-test-inputspnpm check:doc-authoringpnpm check:driver-memory-censuspnpm check:nul-bytespnpm check:pm-governed-mergespnpm check:pm-skill-id-lintpnpm check:pm-skill-ratchetpnpm check:refd-timer-probepnpm check:skill-frame-syncpnpm check:watch-hint-literalpnpm check:pm-settings-deny-roster(extra — the derivation flagged its roster as living under.claude)Manual readings on the file:
wc -l403;awkwidest 120 B;grep -naPfor raw control bytes: no output (exit 1);grep -cof the removed line's text: 0. Pre-push hook on the push: 「✓ check:commit-card-trailers: 1 commit message(s) on this push carry no card relation and no model identifier in the trailer pair.」Package tests / typecheck: none owed — the diff touches no package (no ① closure, no ② suite); the two-package build above was a gate prerequisite only. Repo-wide
pnpm lintis CI's run.Acceptance notes
AGENTS.md:440, the commit carries the model-free pair and this body carries the session-URL footer; nothing was rewritten.check:doc-formula-expressionsexits 3 (PREREQUISITE NOT MET) in any fresh worktree until@objectstack/formulaand@objectstack/lintare built — the gate says so itself and names the fix; by design, not a defect. 承接者:无.check-commit-card-trailersas--self-testonly, so the pre-push hook is the only leg that refuses a model-bearing trailer; a session without.githooks/installed pushes one unrefused. Listed in the report'sout_of_scope_findingsas a class-(b) candidate with dedupe words for the triage seat; no card is opened here.AGENTS.md, everySKILL.md, the hook, CI. [finding] 新增的消融替换助手scripts/ablation-replace.mjs无人被指向 —— 指向其姊妹工具的两份指令文档里,一份是受管面 #18599 and [finding] os-dev.md tells a dev to hang labels the moment the PR opens, and twelve lines earlier reservesneeds:contract-reviewto the seat — on a card where that is the only label owed, the literal reading hangs the clause-② gate on the dev's own PR #18699 remain landed history; objectui#9441 is the ui lane's twin of the ruling.维护者速读(草稿)
.claude/agents/os-dev.md的 Definition of done 列表,在 trailer 那一行之后新增一条(120 B):harness 的归属提醒按它自己的优先级句让位于本文件;harness 自己写入的含模型名 trailer 是 AGENTS.md 的例外——只报告,不仿写、不改历史。为守住 403 行上限,删掉了一条原文照抄 AGENTS.md「沟通」节的重复条目(GitHub 产物用英文;引用中文裁决不翻译),该内容在 AGENTS.md :25–:27 原样保留。.claude/**(Tier S),由 skills 席位按合约档复核记录经队列落地。若对措辞有意见,在本 PR 留一句即可。Generated by Claude Code