Skip to content

skills(pm-dispatch): clause-② is directional; false-rejection and error-code-face boundaries - #16501

Merged
os-zhuang merged 1 commit into
mainfrom
claude/issue-16229-clause2-criterion-batch
Sep 7, 2026
Merged

skills(pm-dispatch): clause-② is directional; false-rejection and error-code-face boundaries#16501
os-zhuang merged 1 commit into
mainfrom
claude/issue-16229-clause2-criterion-batch

Conversation

@claude

@claude claude Bot commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

Fixes #16229
Fixes #16404
Fixes #16349

Three director rulings on the Clause-② criterion, each answered by the maintainer with 「同意」, folded into one governed PR. Rules only, one rule per line, every file held at its pinned line count (SKILL.md 811 · contract-review.md 60 · lanes/spec.md 43 · lanes/engine.md 32), every new line under the 120-byte cap, no issue numbers in the corpus. This PR's own declaration is a no in prose: it changes protocol text, not a contract door; no rejection is removed, so no Contract-text: citation is owed by it.

维护者速读(草稿)

Ruling A — #16349, reading A (directional), decision batch #62

Old (SKILL.md, 派发 section):
- 强制条款②:凡改变契约接受/拒绝行为或扩大公开面的卡一律契约复审档。
New (line-neutral rewrite):
- 强制条款②:凡放宽接受集或扩大公开面的卡一律契约复审档;拉回已声明契约按常规档。

Old (SKILL.md, claim-shape section, two lines):
- \Clause-②: yes | no` 是条款②内容肢的强制申报,恒英文机器判据,恰这两种拼写。 - Clause-② 判据:本卡改变契约接受/拒绝行为或扩大公开面吗;`yes` 绑定入队闸门。New (one line — this is the fold):- `Clause-②: yes | no` 恰这两种拼写,恒英文机器判据;判据:本卡放宽接受集或扩大公开面吗。The two clauses dropped are restated where the gate is defined: 「声明肢 = 认领评论声明Clause-②: yes」 and 「双肢命中任一…⛔ 禁止入队」 / 「Clause-②: yes` 认领同笔在卡上挂标」 in 入队与落地.

Added, paid by that fold — the compensating control the ruling conditions A on (no card number in the corpus; the mechanical widening-tell gate is queued as #16448, not this PR):
- 机械放宽判别门禁落地前,入队前的席内契约复核是方向自述的补偿控制。

The mechanical boundary test the skill already states — 「机械边界测试:改动扩大接受集或公开面 ⇒ 人工;拉回已声明契约 ⇒ 代裁车道」 — is untouched; the criterion sentence now says the same thing, which is what the ruling asked for. The maintainer's ruling line 「条款②只指已发布契约面」 stays verbatim.

Ruling C — #16229, option C (false rejection), decision batch #55

Added to SKILL.md, directly under 「条款②只指已发布契约面」:
- 删已发布契约文本本就否定的误拒本身是 \no`;该 `no` 须引那段文本,缺引即读作缺申报。 - 引文不符 ⇒ 降为 `yes`;裁决守卫、安全拒绝、失败关闭是刻意拒绝非误拒,删之 `yes`。`
Paid by two folds in the same file:

  • deleted 「⛔ 永不把路径触发读作条款②的完整覆盖:它只盖路径肢,内容肢由声明行承载。」 — restates the adjacent 「双肢命中任一」 and 「声明肢…与路径无关」 lines;
  • deleted 「末行点名同包/同文件的前驱 PR 与在飞认领,及本卡 pin 断言的兄弟卡;无则 none。」 — restates the claim template's Serial constraints cleared: line verbatim.

Added to references/contract-review.md, beside its Clause-②: yes | no line — the claim-comment spelling:
- 删误拒的 \Clause-②: no` 附 `Contract-text:` 引已发布契约文本,双载体同载;缺引即缺申报。`
Paid by deleting 「未达档席 ⛔ 不凭自述复核,恒走本路径;子代理裁决按转录核验采信。」 — restated by the 降档保险丝 section (「⛔ 自述档位不是读数…」, 「改走转录核验的复核子代理…」, 「转录档位核验…」).

Ruling D — #16404, option D (the ledger is the published face), decision batch #62

Added to SKILL.md, in the same block:
- 错误码已发布面 = \ERROR_CODE_LEDGER`/`StandardErrorCode`:新码恒 `yes`,无门亦然,漏登即缺口。Paid by deleting 「档位以 dispatch-gates 常量CONTRACT_REVIEW_TIER为准,模型升级只改一行一个文件。」 in 入队与落地 — restates 「档位值单源在 dispatch-gates 常量」 in 派发;CONTRACT_REVIEW_TIER` is still named there.

The ruling's execution line pointed at contract-review.md; the sentence landed in SKILL.md because that is where the criterion lives (contract-review.md line 3 defers to SKILL.md for it and carries carrier discipline only) — one rule, one home. The ruling's third sentence (an unregistered code in dist is a protocol gap, not a per-card tier question) is compressed to 「漏登即缺口」 by the byte cap; the spec seat's ledger card carries the registration work.

The pair checker is left alone — and why

scripts/pm/check-clause2-carriers.mjs does read the declaration limb (readClause2Line / cardDeclaration, fixed spelling). The ruled one-liner — a Clause-②: no on a rejection-removing diff must carry Contract-text: — needs the predicate "this diff removes a rejection", and the checker has no honest way to measure it: its reader roster is listOpenPulls · readCard · readCardComments · readCarrierEvents · readHeadCommitDate (no files, no patch), and its docblock draws the path/diff limb as a deliberate boundary. A hunk-text heuristic (a deleted throw, a widened schema arm) misreads in both directions — a moved throw reads as a removal, a widened condition never reads at all — and inferring it from prose is the relaxation the file bans by name. The diff-measured predicate is exactly what the queued widening-tell gate builds; the Contract-text: co-read belongs beside it (noted below for the seat, not filed).

Two lane restatements of the criterion — bounded in-place fix, declared

A repo-wide grep for the directionless phrase (改变…接受/拒绝行为) outside SKILL.md hits exactly two operative lines, both lane restatements of the criterion — and SKILL.md's 「条款②判据即…references/lanes/spec.md 席内分派判据」 names one of them as a criterion source, so leaving it directionless would keep the ruled conflict alive in the very file the criterion points at:

Serial constraints

Verification (final commit 34a0a45135; every exit captured before any pipe)

  • node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack (no paths; derived from git: 4 committed paths vs merge base 4500bc5d7) ⇒ 16 families; all 16 run; --ran verdict: 「✓ dispatch-gates --ran: 16 derived famil(ies) accounted for — 16 run, 0 NOT-MEASURED.」
  • node scripts/pm/check-skill-line-ratchet.mjs --self-test ⇒ 「✓ check-skill-line-ratchet self-test: 157 cases pass.」; live run ⇒ 「.claude/skills/pm-dispatch/SKILL.md is 811 lines (ceiling 811; headroom 0)」, 「references/contract-review.md is 60 lines (ceiling 60; headroom 0)」, lanes/spec.md 43/43, lanes/engine.md 32/32; pnpm check:pm-skill-ratchet exit 0.
  • pnpm check:pm-skill-id-lint ⇒ 「14 cases pass」 + 「26 file(s) clean」; pnpm check:skill-frame-sync ⇒ 「2 copies of the decision frame are structurally isomorphic across 2 files」; node scripts/pm/check-clause2-carriers.mjs --self-test ⇒ 「190 cases pass」; pnpm check:nul-bytes ⇒ 「OK (scanned 8088 text file(s)…)」.
  • node scripts/pm/check-governed-merges.mjs --test on the four files ⇒ exit 3: 「governed-surface predicate: 4 of 4 path(s) hit the register … ⛔ GOVERNED — a human merge is the review record for this PR」.
  • The rest of the derived families (closing-keyword-parity + self-test, comment-mask-corpus, governed-queue-guard self-test, pm-governed-merges, pm-governed-prose, agent-test-spelling, doc-authoring, driver-memory-census, refd-timer-probe, watch-hint-literal) ⇒ exit 0 each. check:doc-formula-expressions first returned exit 3 (PREREQUISITE NOT MET — formula/lint not built; nothing measured), was re-run after turbo run build --filter=@objectstack/formula --filter=@objectstack/lint through the verify lock ⇒ exit 0.
  • Whole-repo pnpm lint through bash scripts/pm/os-verify-lock.sh (slot issue-16229, one acquisition) ⇒ 「VERDICT command-exit 0 · held the lock 105s · waited 96s」, no eslint findings.
  • Not applicable: ablation (text-only diff; no package resolves it), changeset (nothing published; skip-changeset applied via the additive labels endpoint with a comparison read-back).

验收备注 (noted, not filed — below the finding admission threshold)

Generated by Claude Code


Generated by Claude Code

…or-code-face boundaries

- SKILL.md: the criterion and the claim 判据 read 放宽接受集或扩大公开面;
  a narrowing lands at its ordinary tier; the false-rejection boundary (a
  `no` cites the published contract text; a deliberate refusal is never a
  false rejection); the error-code published face is the ledger/enum; the
  compensating control until the mechanical widening-tell gate lands.
  Four additions paid by four folds of restated lines (811 held).
- contract-review.md: the `Contract-text:` claim-comment spelling beside
  the declaration line, paid by one restated line (60 held).
- lanes/spec.md, lanes/engine.md: the lane restatements of the criterion
  take the same direction qualifier (line-neutral).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019RfFHiRCSs3JXLK4cwcfox
@github-actions github-actions Bot added size/s documentation Improvements or additions to documentation labels Sep 7, 2026
@claude claude Bot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Sep 7, 2026
@os-zhuang
os-zhuang marked this pull request as ready for review September 7, 2026 07:21
@os-zhuang
os-zhuang enabled auto-merge September 7, 2026 07:21
@os-zhuang
os-zhuang added this pull request to the merge queue Sep 7, 2026
Merged via the queue into main with commit 46e6265 Sep 7, 2026
31 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-16229-clause2-criterion-batch branch September 7, 2026 07:50
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/s skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

2 participants