Skip to content

docs(agents): os-dev.md — the harness attribution reminder yields to this file - #19167

Merged
os-tesla merged 1 commit into
mainfrom
claude/issue-18698-os-dev-reminder-yields-to-contract
Sep 19, 2026
Merged

os-tesla merged 1 commit into
mainfrom
claude/issue-18698-os-dev-reminder-yields-to-contract

Conversation

@os-tesla

Copy link
Copy Markdown
Collaborator

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 because scripts/check-commit-card-trailers.mjs cites that sentence verbatim and its self-test holds the citation to the file. New :285 (120 B):

  • harness 归属提醒凭其优先级句让位本文件;harness 自写含模型名 trailer 只报,⛔ 不仿不改史。

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):

Commit message: an agent commit ends with the model-free trailer pair Claude-Session: https://claude.ai/code/session_ID and Co-authored-by: Claude (noreply at anthropic.com), and the pre-push hook refuses a model identifier in that pair; no model identifier lands in a PR title or body, a comment, a changeset, a doc or a code comment. Two exemptions: a harness-written Co-Authored-By trailer (REPORTING: not declared a deviation; landed history is not rewritten) and a verbatim maintainer ruling preserved as a quotation block.

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.md is 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 :283 reads :284 on today's main (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]

reading before (5d0ee8f) after (9612c8d)
lines 403 403
widest line 120 B 120 B
new clause 120 B at :285
diff +1 / −1, one file

Payment (line-neutral): the removed bullet is the former :285 「标题与散文用英文(见 AGENTS.md);引用的中文裁决保持原文不译,改写引文就是改写裁决。」 — a true duplicate that cited its own source. Its content survives verbatim in AGENTS.md § Communication: :25GitHub 产物一律使用英文:issue 与 PR 的标题、正文、评论。」 and :26–:27引用中文裁决时保持原文、不翻译,即使承载它的 issue/PR 正文通篇是英文——改写引文就是改写裁决。」; os-dev.md :19 already 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 over scripts/, .github/, .claude/skills/, package.json); the only pinned sentence in this list is :284, which is untouched (check-commit-card-trailers self-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: opus line 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 pipe

Gate list derived in the worktree with node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands (change set: .claude/agents/os-dev.md only, 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」.

command exit the gate's own verdict line
node scripts/check-closing-keyword-parity.mjs 0 check-closing-keyword-parity: OK (3 parsers agree on all 9 keywords and both measured separators; sweep found 5 file(s) carrying the grammar across 8991 tracked file(s), all registered).
node scripts/check-closing-keyword-parity.mjs --self-test 0 ✓ 40 assertions, 5 mutations of the shipped parsers each driven to red.
node scripts/check-comment-mask-corpus.mjs 0 ✓ comment-mask corpus sweep: 6894 files, 0 disagree, 0 unparseable.
node scripts/pm/check-governed-queue-guard.mjs --self-test 0 ✓ check-governed-queue-guard self-test: 261 cases pass.
node scripts/pm/check-harness-current.mjs --self-test 0 check-harness-current --self-test: all 26 cases passed.
pnpm --filter @objectstack/lint run check:doc-formula-expressions 0 ✓ 14 predicate(s) on a statically determinable field layer judged clean; 6 skipped as undeterminable. (First run refused with exit 3 PREREQUISITE NOT MET — @objectstack/formula and @objectstack/lint unbuilt in a fresh worktree; built both under the verify lock, VERDICT command-exit 0, then this reading.)
pnpm check:agent-model-declared 0 ✓ 1 agent definition(s) under .claude/agents/ all declare a model — os-dev.md → opus.
pnpm check:agent-test-spelling 0 ✓ 0 violations — 516 file(s) · 9159 bare -- token(s) · 13 separator(s) JUDGED.
pnpm check:commit-card-trailers 0 ✓ check-commit-card-trailers self-test: 81 cases pass (incl. 「every sentence inside the corner brackets is verbatim in the cited rules file」).
pnpm check:cross-package-test-inputs 0 OK: 29 package(s) read outside themselves, all declared.
pnpm check:doc-authoring 0 ✓ doc authoring guard: 402 files clean — no bare metadata literals (+ the three sibling verdict lines, all ✓).
pnpm check:driver-memory-census 0 check-driver-memory-census: OK — every declaration is ledgered, every ledger entry is live.
pnpm check:nul-bytes 0 check-nul-bytes: OK (scanned 8984 text file(s); no raw ASCII control bytes).
pnpm check:pm-governed-merges 0 ✓ check-governed-merges --self-test: 392 assertions.
pnpm check:pm-skill-id-lint 0 ✓ check-skill-id-lint: 27 file(s) clean (pattern /#[0-9]{3,}/g).
pnpm check:pm-skill-ratchet 0 ✓ .claude/agents/os-dev.md is 403 lines (ceiling 403; headroom 0). ✓ widest table row is 0 bytes (pin 0).
pnpm check:refd-timer-probe 0 OK: 6889 source file(s) swept; the probe is read in the approved module and nowhere else.
pnpm check:skill-frame-sync 0 ✓ the one declared copy of the decision frame is internally coherent; 74 markdown files scanned for undeclared copies.
pnpm check:watch-hint-literal 0 ✓ 71 declaration(s) across 4 rostered name(s), every one an array of quoted literals.
pnpm check:pm-settings-deny-roster (extra — the derivation flagged its roster as living under .claude) 0 ✓ 17 content-write tool(s) declared = enforced in .claude/settings.json.

Manual readings on the file: wc -l 403; awk widest 120 B; grep -naP for raw control bytes: no output (exit 1); grep -c of 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 lint is CI's run.

Acceptance notes

维护者速读(草稿)

  • 改了什么:.claude/agents/os-dev.md 的 Definition of done 列表,在 trailer 那一行之后新增一条(120 B):harness 的归属提醒按它自己的优先级句让位于本文件;harness 自己写入的含模型名 trailer 是 AGENTS.md 的例外——只报告,不仿写、不改历史。为守住 403 行上限,删掉了一条原文照抄 AGENTS.md「沟通」节的重复条目(GitHub 产物用英文;引用中文裁决不翻译),该内容在 AGENTS.md :25–:27 原样保留。
  • 为什么改:每一次派发,dev 都同时收到两份指令——仓库契约(model-free trailer)与 harness 注入的归属提醒(含模型名)。已有 dev 因此写不出 commit、只能升级上报。答案其实早就写在 AGENTS.md 里,也写在提醒自己的优先级句里;这一条把答案放到 dev 真正读的那一行旁边,省掉下一次升级。
  • 风险与代价(含回滚):零机制变化——不动 hook、不动 CI、不动 frontmatter;行数 403/403、最宽 120 B 不变,19 个派生门禁全绿。风险只在措辞:若你觉得「只报,⛔ 不仿不改史」过于压缩,可在同一行内换词(须 ≤ 120 B)。回滚 = revert 这一个 commit(1 行换 1 行)。
  • 席位意见:
  • 你要做的:无需你点击合并——本 PR 在 .claude/**(Tier S),由 skills 席位按合约档复核记录经队列落地。若对措辞有意见,在本 PR 留一句即可。

Generated by Claude Code

… 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>
@os-tesla os-tesla added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Sep 19, 2026 — with Claude
@github-actions github-actions Bot added size/xs documentation Improvements or additions to documentation labels Sep 19, 2026

Copy link
Copy Markdown
Collaborator Author

Contract review

Served-tier: CONTRACT_REVIEW_TIER
Head-sha: 9612c8df4aa77fec4c68fe7d0d4762967bed00a7

In-seat review by the domain:skills seat at the contract-review tier (served tier read at seating: get_sessionlast_served_model = session_context.model = the tier constant's model; marker 5738863635). Verified against GitHub and the fetched branch, ⛔ not against the report: diff origin/main9612c8d is exactly one file, .claude/agents/os-dev.md, +1 / −1; 403 lines before and after (ceiling 403), widest line 120 B before and after; the new line 「- harness 归属提醒凭其优先级句让位本文件;harness 自写含模型名 trailer 只报,⛔ 不仿不改史。」 sits right after the trailer line (:284, byte-identical), names no model and no card; the removed line 「- 标题与散文用英文(见 AGENTS.md);引用的中文裁决保持原文不译,改写引文就是改写裁决。」 has 0 hits outside this file on origin/main (control: the AGENTS.md :25 phrase 1 hit) and its content survives at AGENTS.md :25–:27, which os-dev.md :19 binds before the first edit. The one commit carries the model-free trailer pair. This is ruling A of 5725370956 executed line-neutral, as ordered.

① Derived judgments

  • Accept set: unchanged — the diff is a rule line in the dev definition; no schema, no export, no key, no gate threshold moves. Clause-②: no on the claim (5738904655) and on the PR body is correct.
  • Public surface: none — .claude/** ships in no package files[]; skip-changeset is the measured declaration.
  • Semantics: the clause restates AGENTS.md :440–:444 (the model-free pair; the harness-written trailer is an exemption to report, never to imitate or rewrite) and the harness reminder's own precedence sentence, which the dev read in its session before writing. Nothing new is declared; the declared answer is placed where the dev reads it.
  • Payment: a true duplicate, not a rule loss — verified as above. No re-wrap; ceiling unmoved.

② Semver level

None owed — no published package is touched; skip-changeset applied and read back.

③ Boundary flags

  • Dev flag 1 (the PR body quotes the frontmatter key model: with its tier keyword): judged a tier keyword, not a model identifier — the fleet's own gate coauthorModelIdentifier and the pre-push hook match claude-prefixed identifiers, and the same keyword is how dispatch-gates --tier, the claim template and the seat posts spell tiers. No body edit.
  • Dev flag 2 (out_of_scope_findings, class-(b) candidate: CI runs check-commit-card-trailers as --self-test only, the pre-push hook is the sole enforcing leg): already recorded on the card by the devx seat (5735110766); 0 model-bearing co-author lines in the last 400 main commits ⇒ an observation with no measured violation — noted, not filed (承接者:无); a rule change on that leg is the maintainer's call, not a card.
  • Gates: 19 derived families, 19 run, 0 NOT-MEASURED per the dev's --ran reconciliation; the seat re-ran none locally (no node_modules in the shared checkout — CI is the reading): Lint & Repo Gates in progress at this record's writing, read before any landing act.

Implemented-by: claude/issue-18698-os-dev-reminder-yields-to-contract
Reviewed-by: session_01W5y9kRg1YtYaMQYExVLRc2

VERDICT: PASS


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 size/xs skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

2 participants