Skip to content

pm(contract-review): name ④'s rules face as the governed register, scenario per surface - #26651

Merged
objectstack-fleet[bot] merged 1 commit into
mainfrom
claude/project-thread-tzk48i
Oct 27, 2026
Merged

objectstack-fleet[bot] merged 1 commit into
mainfrom
claude/project-thread-tzk48i

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Requested by Steve · project thread
Part of #26527 (items 1 and 2; item 3, design judgment on the narrowing face, stays open for the maintainer's word and goes to the decision box after this PR)

Clause-②: no
Metadata-protocol: none

维护者速读

  • 改了什么:契约复审模板里 ④ 设计判断那段说明,把规则面写成「受管登记表」而不是三个面;模板说明和复审简报都按文件类型写明验收场景(技能、schema、ADR 各一句)。
  • 为什么改:PR pm-dispatch: a published schema, skill or ADR PR owes a full review — item ④ design judgment in the contract-review record, brief and rule #26514 的复审留下的两条 should-fix:规则面读起来像只有 spec、skills、ADR 三个面,简报只给 ADR 写了验收场景。
  • 风险与回滚:只改 scripts/pm/record-recognisers.mjs 打印的提示文字和它的自测,不碰任何读取逻辑;回滚即 revert 这一个提交。
  • 先看:scripts/pm/record-recognisers.mjs 的 --template ④ 说明段和 contractReviewBriefLines 的 ④ 段,再看两条新 pin。
  • 两分钟验证:node scripts/pm/record-recognisers.mjs --brief-template --face rules,④ 段应出现 skill / schema / ADR 三句场景。
  • 需要你做的:无,席位落地。

What changes

  • --template ④ note (contractReviewTemplateLines): the rules face now reads as "the published spec, and the governed register, which holds the skills and ADR surfaces the full-review order names among its rows" instead of "the published spec, skills and ADR surfaces". The governed register does not hold packages/spec (that is the schema face), so the card's suggested sentence was taken in the equivalent form the card allows, keeping the two faces apart.
  • Both the note and the reviewer brief (contractReviewBriefLines) now name the accepted scenario per surface: a skill file against the card's eval prompt and the spec it teaches on main; a schema file against the ruling or ADR it implements and its first consumer; an ADR against its first consumer and its execution plan.
  • The brief's docblock says the same.
  • Self-test: one new pin in the template battery (governed-register wording present, the three-surface wording absent, the skill and schema scenarios present) and one in the brief battery (the three per-surface scenarios). Battery floors 27 → 28 and 16 → 17, comment updated. No existing pin was edited; the pins on 'first consumer and its execution plan' and 'scenario it is accepted against' still hold unchanged.
  • .claude/skills/pm-dispatch/references/contract-review.md is NOT touched: its ④ line (L30) already names the schema and governed-rules-text faces with spec, skills and ADRs inside them, so it does not say "three surfaces". The diff touches no governed path.

Tests

  • node scripts/pm/record-recognisers.mjs --self-test: 217 cases pass, exit 0, at 84e6125b.
  • One-shot mutation of each new pin, trap-restored, restore checked byte-identical against the HEAD blob:
    • brief text back to "A skill file against the spec": exit 1, the new brief pin fails (1 of 217).
    • template text back to "the published spec, skills and ADR surfaces the": exit 1, the new template pin fails (1 of 217).
    • A first attempt at the brief leg anchored on text that occurs twice (source and pin), so the replace refused and nothing ran; it was re-anchored on the source line alone.

Acceptance notes

  • Other rules-face rows (AGENTS.md, .github/workflows/**, .claude/agents/**, hooks) keep only the generic "the scenario it is accepted against"; the card names scenarios for skill, schema and ADR files only.

Verification

All at head 84e6125b (after the last commit), in this worktree.

dispatch-gates --commands: 31 derived, 31 run, 0 NOT-MEASURED, 0 UNRUN (DERIVED zero)
node scripts/check-closing-keyword-parity.mjs :: exit 0
node scripts/check-closing-keyword-parity.mjs --self-test :: exit 0
node scripts/check-comment-mask-corpus.mjs :: exit 0
node scripts/check-declaration-mirrors.mjs :: exit 0
node scripts/check-declaration-mirrors.mjs --self-test :: exit 0
node scripts/check-self-test-wired.mjs :: exit 0
node scripts/check-self-test-wired.mjs --self-test :: exit 0
node scripts/check-self-test-workflow-commands.mjs :: exit 0
node scripts/check-self-test-workflow-commands.mjs --self-test :: exit 0
node scripts/check-whole-set-label-write.mjs :: exit 0
node scripts/check-whole-set-label-write.mjs --self-test :: exit 0
node scripts/ci/plan-test-core-shards.mjs --self-test :: exit 0
node scripts/pm/bare-root-worklist.mjs --self-test :: exit 0
pnpm check:agent-test-spelling :: exit 0
pnpm check:bash32-floor :: exit 0
pnpm check:ci-filter-parity :: exit 0
pnpm check:cli-command-ids :: exit 0
pnpm check:cross-package-test-inputs :: exit 0
pnpm check:driver-memory-census :: exit 0
pnpm check:entry-guard :: exit 0
pnpm check:gitlink-declared :: exit 0
pnpm check:nul-bytes :: exit 0
pnpm check:parse-guard :: exit 0
pnpm check:pm-record-recognisers :: exit 0
pnpm check:pnpm-filter-targets :: exit 0
pnpm check:pnpm-flag-spellings :: exit 0
pnpm check:ratchet-remedy-authority :: exit 0
pnpm check:refd-timer-probe :: exit 0
pnpm check:scripts-symbol-anchors :: exit 0
pnpm check:watch-hint-literal :: exit 0
pnpm check:pm-skill-ratchet :: exit 0
pnpm check:pm-dispatch-gates :: exit 0

pnpm check:pm-skill-ratchet is outside this diff's derivation (no .claude/** path) and was run because the card's acceptance names it. pnpm check:pm-dispatch-gates: fast tier, 1935 cases pass, 479.4 s.

CI families (lint, type check, tests) are the PR's check-runs; not re-run locally.

Human Minimum

  • 1. Schemas start as Zod; packages/spec holds no runtime logic. (not touched)
  • 2. Every name I added uses the casing for its kind. (no new names)
  • 3. No formatter ran; pnpm lint passes. (no formatter ran; pnpm lint is CI's run, see check-runs)
  • 4. One issue, one branch off an up-to-date main, one pull request.
  • 5. A change that publishes carries a changeset, and both declaration lines are filled in here and in the changeset. (publishes nothing: scripts/pm/** only, skip-changeset)
  • 6. packages/spec touched: its generated artifacts are regenerated and committed. (not touched)
  • 7. No hand edits to content/docs/references/, packages/*/CHANGELOG.md or content/docs/releases/.
  • 8. Title, body and comments are in English. (the 维护者速读 block is the repo's required Chinese summary)
  • The Before Submitting list in CONTRIBUTING.md is done. (the local subset per the dispatch contract; the full suite is CI's)

Generated by Claude Code

…enario per surface

The --template ④ note read the rules face as three surfaces (published
spec, skills, ADRs); it now names the published spec and the governed
register, which holds the skills and ADR surfaces among its rows. The
note and the reviewer brief name the accepted scenario per surface: a
skill file against the card's eval prompt and the spec it teaches, a
schema file against the ruling or ADR it implements and its first
consumer, an ADR against its first consumer and its execution plan.
One new self-test pin each; battery floors 27 -> 28 and 16 -> 17.

Claude-Session: https://claude.ai/code/session_01ADHkmSpW72m8tVh1b1rPxQ
Co-authored-by: Claude <noreply@anthropic.com>
@objectstack-fleet objectstack-fleet Bot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Oct 27, 2026
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

席位核对

ACCEPT · domain:skills#1 · session_01ADHkmSrRBdu9MdC6fc33Uu · head 84e6125b · 2026-10-27T11:48Z

  1. 形态 — one file, scripts/pm/record-recognisers.mjs (+22/−12): the --template ④ note and the brief ④ text, two new self-test pins, the two battery floors raised by one each (27 → 28, 16 → 17). check-governed-merges --pr 26651: NOT governed. contract-review.md untouched (its ④ line never said "three surfaces").
  2. 前提实测 — seat read the diff: the note now names the governed register instead of three surfaces, and both the note and the brief give each surface its accepted scenario (skill → the card's eval prompt and the spec it teaches; schema → the ruling or ADR and its first consumer; ADR → first consumer and execution plan). The new pin also refuses the old three-surface phrase.
  3. 门禁 check-runs — head 84e6125b: 26 success, 17 skipped, 0 failing.
  4. 接受的偏差 — wording: 「the published spec, and the governed register, which holds the skills and ADR surfaces」 rather than the card's 「the governed register, which holds the published spec …」 — the dev's reading is correct (the spec is the schema face, not a register row); accepted.
  5. 范围外去向 — item 3 (④ on the narrowing face) stays on pm-dispatch(contract-review): item ④ names the rules face as three surfaces and the brief names the accepted scenario for an ADR only — reword to the governed register, add per-surface scenarios, decide ④ on the narrowing face #26527 for the maintainer; the seat moves the card to the decision box after this lands. Skills-docs: none.
  6. 落地条款 — not governed: ready + auto-merge through the queue by this seat; Part of #26527 keeps the card open.

Generated by Claude Code

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

Labels

size/s skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants