Skip to content

agents(os-dev): measured PR-body footer reading and the dev-draft half of the maintainer brief - #15923

Merged
os-zhuang merged 1 commit into
mainfrom
claude/issue-15857-os-dev-footer-reading-and-brief-draft
Sep 5, 2026
Merged

agents(os-dev): measured PR-body footer reading and the dev-draft half of the maintainer brief#15923
os-zhuang merged 1 commit into
mainfrom
claude/issue-15857-os-dev-footer-reading-and-brief-draft

Conversation

@claude

@claude claude Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

Fixes #15857

One file, .claude/agents/os-dev.md (governed, .claude/**): two alignments in the dev contract, line-neutral at the 403-line ceiling.

What

  1. The PR-body footer reading, in its measured form (section 字节与 sanitizer 纪律). The falsified edit reading (a PATCH downgrades the session-URL footer to bare) is replaced by what AGENTS.md measures on main since PR docs(agents): AGENTS.md + CLAUDE.md rules only — narratives, dates and quotations out; issue ownership written by role #15856: on an edit the session-URL footer survives verbatim and the platform appends a bare footer block under whatever is sent, so an edited body goes out with no footer of its own and is read back; the bare form is for comments. The two-form spelling block stays as the reference; its bare-form annotation loses the PR 正文编辑后的落形 half. The durable-attribution line (耐久归属写进正文散文或评论,⛔ 不循环重贴页脚;完整读数住 AGENTS.md 同条) was already right and is kept verbatim.
  2. The dev-draft half of the maintainer brief (PR-body rules, between the language rule and the footer rule): a PR on a governed surface carries a ## 维护者速读(草稿) section, five fixed parts in Chinese from the business angle (改了什么/为什么改/风险与代价(含回滚)/席位意见/你要做的), 席位意见 left empty, which the seat finalizes as a comment at ACCEPT. The seat's half is PR pm-dispatch: a governed PR at ACCEPT gets needs-user-decision + a Chinese 「维护者速读」 brief (dev draft, seat final) #15908; the heading spelling matches it byte for byte (ASCII parens). The governed-surface list is pointed at AGENTS.md rather than copied, because this file is not a check-governed-prose region and an unpinned copy is the stale duplicate that gate exists to catch.

Paid for by folding two neighbouring pairs, content kept: the body/commit-message parsing pair (two facts about one source split, now one sentence; the squash line that carries the why stays) and the net-increase budget pair (the blocked gap report and 预算归 PM,抬它归维护者 in one line).

Readings

  • Lines: 403 → 403 (ceiling 403, headroom 0). Ratchet verdict, before and after: ✓ check-skill-line-ratchet: .claude/agents/os-dev.md is 403 lines (ceiling 403; headroom 0).
  • Byte widths (LC_ALL=C awk), every line written: 278 → 114 · 281 → 115 · 282 → 118 · 287 → 118 · 397 → 86 · 401 → 119. Widest written line: 119 bytes (line 401); the file's maximum stays 120.
  • The model-tier frontmatter line is untouched; no decision-frame block in the file; no issue numbers in the text (check-skill-id-lint clean); control-byte scan (grep -naP) 0 hits.
  • Governed: node scripts/pm/check-governed-merges.mjs --test .claude/agents/os-dev.md exit 3 (.claude/** ×1).

Gates

Run on 6e753860ac after the final commit; every exit code captured with redirect-first (cmd > log 2>&1; EXIT=$?), never through a pipe. Derived from the real changeset: node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack (16 families); reconciled: ✓ dispatch-gates --ran: 16 derived famil(ies) accounted for — 16 run, 0 NOT-MEASURED.

command exit 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
node scripts/check-closing-keyword-parity.mjs --self-test 0 ✓ check-closing-keyword-parity --self-test: 24 assertions, 5 mutations of the shipped parsers each driven to
node scripts/check-comment-mask-corpus.mjs 0 ✓ comment-mask corpus sweep [scripts/js-comment-mask.mjs]: 6012 files, 0 disagree, 0 unparseable, 59.5s (com
node scripts/pm/check-governed-queue-guard.mjs --self-test 0 ✓ check-governed-queue-guard self-test: 144 cases pass (register-driven verdicts, the queue/PR event split,
pnpm --filter @objectstack/lint run check:doc-formula-expressions 0 ✓ check:doc-formula-expressions: 22 record-scoped formula example(s) across 428 files / 1370 TS bloc
pnpm check:agent-model-declared 0 ✓ check-agent-model-declared: 1 agent definition(s) under .claude/agents/ all declare a model
pnpm check:agent-test-spelling 0 ✓ check-agent-test-spelling: 0 violations — 455 file(s) · 6739 bare -- token(s) · 1484 launcher-rooted
pnpm check:doc-authoring 0 ✓ doc authoring guard: sibling-package prose ids hold the baseline — 829 pinned site(s) across 231 file(s)
pnpm check:driver-memory-census 0 check-driver-memory-census: OK — every declaration is ledgered, every ledger entry is live, and every ruled
pnpm check:nul-bytes 0 check-nul-bytes: OK (scanned 7674 text file(s) -- 7674 tracked, 0 untracked-not-ignored; skipped 7 binary; no
pnpm check:pm-governed-merges 0 ✓ check-governed-merges --self-test: 274 assertions (the unified governed predicate + near misses, s
pnpm check:pm-skill-id-lint 0 ✓ check-skill-id-lint: 24 file(s) clean (pattern /#[0-9]{3,}/g).
pnpm check:pm-skill-ratchet 0 ✓ check-skill-line-ratchet: .claude/agents/os-dev.md is 403 lines (ceiling 403; headroom 0).
pnpm check:refd-timer-probe 0 ✓ check-refd-timer-probe self-test: 11 cases pass, negative controls included.
pnpm check:skill-frame-sync 0 ✓ check-skill-frame-sync: 2 copies of the decision frame are structurally isomorphic across 2 files
pnpm check:watch-hint-literal 0 ✓ check-watch-hint-literal: 61 declaration(s) across 4 rostered name(s) -- ROOT_DIR_WATCH_HINTS 39, ROOT_FIL

Named by the dispatch beyond the derivation: node scripts/pm/check-governed-prose.mjs exit 0 (✓ 2 instruction surfaces name all 5 registered governed surfaces); all five .claude/hooks/*.selftest.sh exit 0 (50 · 121 · 116 · 51 · 36 passed, 0 failed); whole-repo pnpm lint through bash scripts/pm/os-verify-lock.sh slot issue-15857: VERDICT command-exit 0 · held the lock 82s (shared-box seconds, not idle-box).

维护者速读(草稿)

改了什么:开发 agent 的行为契约文件(os-dev.md)改两处,总行数不变(403/403)。一是 PR 正文署名页脚在「编辑正文」时的行为说明,从一个已被实测推翻的说法改成 AGENTS.md 已落地的实测结论;二是新增一条规则:开发 agent 给受管面(ADR、agent 指令、技能包、AGENTS.md/CLAUDE.md)开 PR 时,正文自带一节中文「维护者速读(草稿)」,固定五段,席位意见留空,由复审席位定稿后贴成评论。

为什么改:前者是两份约束文件对同一事实说法相反,agent 会照错的那份做(编辑正文时重贴页脚,留下双页脚);后者落实你 2026-09-05 的指示——需要你审核的 PR,先由契约复审用中文从业务角度写好分析,你只需快速确认。草稿由最了解改动的 dev 起笔,席位对照 diff 校正后定稿,你只读评论。

风险与代价(含回滚):纯文字规则,无代码、无发布物、无数据迁移。代价是为腾出两行,把相邻的两对规则各并成一句(内容保留,措辞收紧)。回滚 = revert 这一个 commit,无残留。风险:折并后的两句若被后来的 agent 读偏,补一行即可;本卡不改任何门禁。

席位意见:(留空,席位定稿)

你要做的:确认后由你手合(受管面,AI 席位不合并、不入队);不同意折并措辞的话,指出哪一句,下一轮改。

Out of scope

Nothing filed from this run; the report on #15857 carries the empty list.


Generated by Claude Code

…f of the maintainer brief

The dev contract carried the falsified edit reading of the attribution
footer (a PATCH downgrades the session-URL form to bare). It now says what
AGENTS.md measures: on an edit the session-URL footer survives verbatim and
the platform appends a bare block under whatever is sent, so an edited body
goes out with no footer of its own and is read back; the bare form is for
comments. The two-form spelling block stays as the reference.

The PR-body rules gain the dev's half of the maintainer brief: a PR on a
governed surface carries a `## 维护者速读(草稿)` section (five fixed parts,
Chinese, business angle, 席位意见 left empty) which the seat finalizes as a
comment. Line-neutral at the 403-line ceiling: paid by folding two pairs of
neighbouring rules (body/commit-message parsing; the net-increase budget).

Claude-Session: https://claude.ai/code/session_019RfFHiRCSs3JXLK4cwcfox
Co-authored-by: Claude <noreply@anthropic.com>
@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 size/s documentation Improvements or additions to documentation labels Sep 5, 2026

os-steve commented Sep 5, 2026

Copy link
Copy Markdown
Collaborator

ACCEPT — lands #15857 as ruled. Governed (.claude/**, predicate exit 3), so this PR stays draft at the governed terminal: both approvers requested; needs-user-decision goes on the PR with the final 「维护者速读」 posted beneath this verdict.

What the seat verified, at head 6e753860ac, in its own compare worktree

  • Diff is one file, +6/−6, line-neutral at 403/403 (ratchet exit 0, the os-dev.md ceiling line green). Two folds pay for the two additions and the seat read both for lost content: the body/commit-message pair keeps "parsed separately", "declare once in the body" and "no card trailer on commits"; the budget pair keeps the blocked gap report, the no-self-expansion ban and 预算归 PM,抬它归维护者.
  • The footer reading now states what AGENTS.md measures since PR docs(agents): AGENTS.md + CLAUDE.md rules only — narratives, dates and quotations out; issue ownership written by role #15856: the session-URL footer survives an edit verbatim, the platform appends a bare block beneath whatever is sent, so an edited body is sent without a footer and read back; the bare form is for comments. The two-form spelling block stays; the bare-form annotation drops the falsified half; the 耐久归属 line is verbatim as before.
  • The dev-draft rule spells the heading ## 维护者速读(草稿) byte-identically to PR pm-dispatch: a governed PR at ACCEPT gets needs-user-decision + a Chinese 「维护者速读」 brief (dev draft, seat final) #15908's, lists the five parts, leaves 席位意见 to the seat, and points the governed-surface list at AGENTS.md rather than copying it.
  • Seat's own runs on the head: check-skill-id-lint 24 files clean; check-governed-merges --test exit 3; no decision-frame fingerprint and no issue number in the file; the model: frontmatter line untouched (no hunk near it); all five .claude/hooks/*.selftest.sh green (50 · 121 · 116 · 51 · 36 passed, 0 failed); widest line 120 bytes is pre-existing.
  • CI, seat's read 15:0xZ: 29 check runs, 17 success, 12 skipped, none failing, none pending.
  • Body line 1 is Fixes #15857; skip-changeset present; the body practises the rule with its own 草稿 section.

Open question answered: A. The governed-surface list stays a pointer to AGENTS.md; an inline copy here would be exactly the unpinned duplicate check-governed-prose exists to catch, and a 120-byte line cannot carry both the list and the rule.

Implemented-by: os-dev executor, flight #15857, branch claude/issue-15857-os-dev-footer-reading-and-brief-draft
Reviewed-by: pm-dispatch skills seat, https://claude.ai/code/session_019RfFHiRCSs3JXLK4cwcfox


Generated by Claude Code

@claude
claude Bot requested review from hotlong and os-zhuang September 5, 2026 15:01

os-steve commented Sep 5, 2026

Copy link
Copy Markdown
Collaborator

维护者速读

改了什么:开发 agent 的行为契约(.claude/agents/os-dev.md)改两处,总行数不变(403/403)。一是 PR 正文署名页脚在「编辑正文」时的说明,从一个已被实测推翻的说法(编辑会把 session 形降回裸形)改成 AGENTS.md 已落地的实测结论(编辑后 session 形原样存活,平台在其下追加裸形块;所以编辑正文时不带页脚发送)。二是新增一条规则:开发 agent 给受管面(ADR、agent 指令、技能包、AGENTS.md/CLAUDE.md)开 PR 时,正文自带一节中文「维护者速读(草稿)」,固定五段,席位意见留空,由复审席位校正后贴成评论。受管面清单不在此复制,指向 AGENTS.md。

为什么改:前者是两份约束文件对同一事实说法相反,agent 会照错的那份做,编辑正文时重贴页脚留下双页脚。后者是你今天指示的 dev 一半:PM 手册的一半在 PR #15908,这条让 dev 从开 PR 起就把业务角度的草稿写好,席位只做校正,不从零写。本 PR 与 #15908 的正文已按此规则各带一份草稿。

风险与代价(含回滚):纯文字规则,不碰代码、发布物或数据。代价是为腾两行,把相邻两对规则各并成一句,席位逐句核过内容未丢(commit 与正文分开解析、卡片关系只声明一次、commit 不带 trailer;预算装不下就报 blocked、不自扩、预算归 PM 抬它归维护者)。五个 hooks 自测、行数棘轮、编号 lint、16 个派生门禁与全仓 lint 全绿。回滚 = revert 这一个 commit。

席位意见:建议批准。四轴:业务——两处都对应实测事实,不是推测;长远——受管面清单单源在 AGENTS.md,此处只指向(dev 提的 A/B,席位答 A);防 AI 错——契约与实测一致,agent 不再制造双页脚,草稿由最懂改动的 dev 起笔、席位兜底;创业阶段——不加一行、不扩公开面。

你要做的:批准并入队,或人工直合。一字:是/否。


Generated by Claude Code

@os-zhuang
os-zhuang marked this pull request as ready for review September 5, 2026 15:23
@os-zhuang
os-zhuang enabled auto-merge September 5, 2026 15:23
@os-zhuang
os-zhuang added this pull request to the merge queue Sep 5, 2026
Merged via the queue into main with commit 14f80bc Sep 5, 2026
35 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-15857-os-dev-footer-reading-and-brief-draft branch September 5, 2026 16:01
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/s skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

3 participants