Skip to content

skills(pm-dispatch, os-dev): five measured refinements to the finding admission threshold - #16557

Merged
os-zhuang merged 1 commit into
mainfrom
claude/issue-16551-finding-threshold-refinements
Sep 7, 2026
Merged

skills(pm-dispatch, os-dev): five measured refinements to the finding admission threshold#16557
os-zhuang merged 1 commit into
mainfrom
claude/issue-16551-finding-threshold-refinements

Conversation

@claude

@claude claude Bot commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

Fixes #16551

Five measured refinements to the finding admission threshold, on origin/main f48f3f1b21 (BASE), head 6e31ed35bb. Text-only diff: 16 insertions paid by 16 deletions of restated lines; every pinned file stays at its pin (SKILL.md 811 · os-dev.md 403 · core-rules.md 150 · dispatch-runbook.md 241); every new line is under the 120-byte cap; rules only, no issue numbers, no model identifiers, no narrative in the corpus. The three-class frame, the 「三类外关 not planned(不等批准…)」 line, 「定级即离标」, the native type lines and the English audit line are untouched.

Item 1 — read current state before every write (SKILL.md, 发现分诊轮 block)

New lines, after 「三类内再过时前提检查,三选一:…判级只在此轮,不在立单时。」:

- ⛔ 写入前对每张卡现读当前状态;任何列表快照读数一律作废。
- ⛔ 带 `pm:dispatched` / assignee / 任何 open 或 merged PR 引用的卡,一律不动。
- ⛔ `issue_write` 会替换标签集并清空未传字段:写入时必须回传 `assignees`。

The third line carries a platform fact and is kept as the card wrote it. references/platform-readings.md (not in this flight's surface) already has the labels half at its line 195 — 「issue_writelabels 是整组替换不是追加:同一动作内重读现值合并再写。」 — and NO line for the other half (unpassed fields are cleared; assignees must be passed back). That half is the rider for the sixth readings increment.

Item 2 — the acceptance-notes fallback needs a named carrier

Card evidence: 6 of 6 closed cards had no carrier. One carrier per file; the card's spelling kept.

SKILL.md (seat half), after 「(c) AI 写元数据会被运行时拒收或静默丢弃的陷阱;其余进 PR ## 验收备注,⛔ 不立卡。」 and the three boundary lines of item 3:

- 判「进验收备注」前先问:哪一个 PR 会碰到这个文件?说得出具体 PR 或人 ⇒ 写进去。
- ⛔ 说不出(`.changeset/*`、无人在改的文档页、生成物、已扫完的批次)⇒ 兜底不成立。
- 仍然关,但关闭理由必须写明「承接者:无」。

os-dev.md (dev half), after 「它们进 PR ## 验收备注,报告 out_of_scope_findingsnoted, not filed: …,席位 ACCEPT 时读。」:

   - 写 `noted, not filed` 前先答哪一个 PR 或人会碰到这个文件;答不出就写明「承接者:无」。

SKILL.md line 779 (「席位在 ACCEPT 读 PR ## 验收备注…三类外已立的卡关 not planned。」) is unchanged: the close-reason rule beside the three classes is the one carrier in that file.

Item 3 — three criterion boundaries, one line each, in all three carriers

SKILL.md, directly after the (c) line:

- (a) 的分界是不完整 vs 错误,不是文档 vs 代码:示例照抄即失败是 (a),漏列成员不是。
- (c) 元数据 = 由写它的人以外的人存储并再作者化的键:React prop 不是,存储的视图配置是。
- 把作者引向运行时会兑现却让事情更糟的元数据的警告不在 (c) 内;记为边界,⛔ 不扩类。

os-dev.md, directly after its (c) line (dev register):

   - (a) 分错误与不完整,不分文档与代码:示例照抄即失败是 (a),漏列成员不是。
   - (c) 元数据 = 由写它的人以外的人存储并再作者化的键:React prop 不是,存储视图配置是。
   - 把作者引向运行时会兑现却让事情更糟的元数据的警告不在 (c) 内,记为边界不扩类。

core-rules.md, directly after 「立卡限三类:可复现缺陷、契约违背、元数据陷阱;…」 (summary register, one line for the three facts):

- 三类边界:缺陷问错不问缺、文档同判;元数据须他人再作者化;引向更糟的警告在类外。

The third-failure-mode fact is recorded as the boundary, not widened into class (c).

Item 4 — one irreversibility gate (SKILL.md, before the 「每批先验三类…」 line)

- 三类外不可逆或有硬时限(发版即固化、只被消费的文件、过窗不可补)⇒ 不关,报维护者。

Folded from the card's two-line spelling to one 120-byte line (「被消费而非编辑的文件」→「只被消费的文件」, 「窗口关闭后无法补做」→「过窗不可补」). It triggers on the thing's window only; no uncertainty trigger was added.

Item 5 — an acceptance metric that can fail (dispatch-runbook.md, 发现分诊轮细则 block)

- 阈值落地一周后随机抽 20 条 `noted, not filed`,由席位逐条重判,量出误记率并记档。

Placed in the runbook, not SKILL.md, because: (1) it is a parameterised seat procedure (a sample size and a delay), which SKILL.md's own routing sends to references (SKILL.md 「细则是本文其余各节与其它 references」; runbook 「本文只放细则增量:参数、模板、步骤与原文」); (2) SKILL.md's 发现分诊轮 line already points the reader to this exact block (「每批约定与积压告警见 references/dispatch-runbook.md」), so the procedure lands beside the batch conventions it belongs to; (3) SKILL.md already owes ten folds for items 1–4 and an eleventh would remove a principle line where the runbook fold removes a pure restatement. 「阈值」 was prefixed so the line is self-contained. Not in os-dev.md (seat procedure, not a dev rule).

The folds that paid — each folded line and where its content survives

SKILL.md (10 out, 10 in):

folded line content survives at
「PM 不写文件、不写代码;唯一例外及其全部条件见红线。」 红线 lines 1–2 (「⛔ PM 永不写代码、不写文件;唯一例外是…」「⛔ 该例外的 PR 不得自审自合…」)
「先认领后动工;assignee 不是你 ⇒ 已被认领,永不碰。」 红线 「⛔ 永不派发 assignee 是别人的卡」; 状态模型 row assignee 已设; 认领 section title 「认领(先认领后动工)」 and its 「跨账号 assignee 不是你 ⇒ 永不碰」
「与 AGENTS.md 冲突时,AGENTS.md 胜。」 优先级 「优先序:维护者裁决 > AGENTS.md > 红线 > …」
「执行座位 ⛔ 跳过本节动作,读到标签当既成事实。」 红线 「执行席只在本车道认领,永不改 domain:*」; 多仓协调 「执行座位信任标签,只在本车道认领;误标 ⛔ 不自行改…」
「其余座位 ⛔ 不代裁;置信门其余条件照旧。」 「代裁只由达档者产出,⛔ 永不凭自述」; 「置信门五条全立才可代裁:…⑤ 档位硬门达标」; 「档位未达 ⇒ 本 fire 代裁整体跳过」
「单轮数小时是可接受形态,⛔ 不是封顶总量的理由。」 「首触定级与三析取 sweep 每 fire 跑到清空:⛔ 无每轮总量预算,清得动就多清」
「阈值与跑到清空成对生效,⛔ 不可互相替代。」 「裸卡数 >15 ⇒ …每批 ≤5 张同族卡,照样跑到清空」 plus the line above
「读全仓代码定落点;跨仓按 contract-first 拆分。」 域车道 「域由分诊读代码判定,⛔ 绝不从 issue 标题的词汇猜域」; 多仓协调 规则 2 「跨仓 feature 永不是一次派发:父单 + 每仓一 sub-issue,spec/后端先行」
「分流只及 skills 车道自有 PR,其它车道 governed 面照旧。」 「skills 车道自有 PR 再按 diff 内容分流…」 (already scoped) and the governed-面 lines 「路径面一条命中 ⇒ ACCEPT 换终局四件套」
「推荐是输入,永不是放行,人工地板不变。」 「权重是推荐规则不是授权规则:50% 不把人工地板的事变成可派发的事」; 「⛔ 此序只排推荐:分歧块照旧升级」

os-dev.md (4 out, 4 in):

folded line content survives at
「⛔ 永不为等锁结束一轮。」 rule 7 head 「排队不是停摆,在轮内主动等」; 「等锁、门禁批或任何慢步骤一律在本轮内前台阻塞」; 干净收尾 4 「锁没排到、测试在跑、CI 未出结论都不是第三种」
「判据,写与读报告同一条:最后一句是意图而不是结果 ⇒ 该 dev 已停摆,不是已完成。」 干净收尾 4 「自检是机械的…终消息只能是报告 JSON 或 blocked 报告」「其它任何收尾文本按定义即停摆」 (the PM-side reading stays in SKILL.md 收集)
「⛔ 永不等 Check Changeset 转红再补。」 「本仓库:标签是真实机制,打标签是你的步骤、不是 CI 的,PR 一开出就打」
「永不单凭一次唤醒重做工作或开第二个 PR。」 「任何唤醒起手先重读真实状态…」; 干净收尾 3 「⛔ 永不靠重做工作来恢复」

core-rules.md (1 out, 1 in): 「needs-user-decision 是决定待做:⛔ 永不派发,除代裁通道外 ⛔ 永不代答。」 survives at its 红线 「⛔ 永不派发 assignee 属于别人的 issue,⛔ 永不派发带决策标签的 issue」 and 「⛔ 永不代维护者回答产品或架构问题,唯一例外是已裁的代裁车道」. core-rules stays a subset of SKILL.md: every remaining core-rules line still has a SKILL.md counterpart, and the new boundary line summarises SKILL.md's three new boundary lines.

dispatch-runbook.md (1 out, 1 in): 「修法是状态转换不是豁免评论;逐卡豁免评论机制已废弃,⛔ 不复活。」 survives at the block's own 「状态转换机制:定级出 hold ⇒ 同笔 findingpm:on-hold」 and SKILL.md 「⛔ 不设逐卡豁免评论;每 fire 定完全部未定级 finding」.

Serial record

Gate verdicts (all on head 6e31ed35bb, exits captured before any pipe)

  • node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack (no paths; change set from git off merge base f48f3f1b2): 17 families derived; every one run as printed; --ran: 「✓ dispatch-gates --ran: 17 derived famil(ies) accounted for — 17 run, 0 NOT-MEASURED.」
  • check:pm-skill-ratchet (self-test + live): 「✓ check-skill-line-ratchet self-test: 157 cases pass.」; live prints every pin at headroom 0, e.g. 「✓ check-skill-line-ratchet: .claude/skills/pm-dispatch/SKILL.md is 811 lines (ceiling 811; headroom 0).」 and 「declared cross-file moves: 1, total ceilings down 9 lines.」
  • check:pm-skill-id-lint: 「✓ check-skill-id-lint: 26 file(s) clean (pattern /#[0-9]{3,}/g).」
  • check:skill-frame-sync (self-test 13 cases): 「✓ check-skill-frame-sync: 2 copies of the decision frame are structurally isomorphic across 2 files」
  • check-clause2-carriers.mjs --self-test: 「✓ check-clause2-carriers self-test: 190 cases pass」; check-half-states.mjs --self-test: 「✓ check-half-states self-test: 2636 cases pass.」
  • check-governed-merges.mjs --test on the four paths: exit 3, 「One hit governs the whole PR — 「混合 diff 一条命中即整 PR 分叉」」, .claude/** ×4 listed — GOVERNED, as expected.
  • pnpm check:nul-bytes: 「check-nul-bytes: OK (scanned 8143 text file(s) … no raw ASCII control bytes).」
  • check:agent-model-declared, check:pm-governed-prose (「2 instruction surface(s) name all 5 registered governed surfaces」), check:pm-governed-merges self-test, check:agent-test-spelling, check:doc-authoring, check:driver-memory-census, check:refd-timer-probe, check:watch-hint-literal, check-closing-keyword-parity (+ self-test), check-comment-mask-corpus, check-governed-queue-guard --self-test: all exit 0 with their own ✓/OK lines.
  • pnpm --filter @objectstack/lint run check:doc-formula-expressions: first reading exit 3 「PREREQUISITE NOT MET — the workspace package @objectstack/formula is not built」; @objectstack/formula... then @objectstack/lint... built under the verify lock (VERDICT command-exit 0 both); second reading after the builds exit 0: 「✓ check:doc-formula-expressions self-test: 58 cases passed」「✓ check:doc-formula-expressions: 22 record-scoped formula example(s) across 434 files / 1371 TS blocks judged clean by @objectstack/formula.」
  • Whole-repo pnpm lint (eslint . --no-inline-config) through bash scripts/pm/os-verify-lock.sh with OS_VERIFY_LOCK_SLOT=issue-16551, one acquisition, lock free at --status: 「os-verify-lock: VERDICT command-exit 0 · held the lock 99s (1m39s) · waited 0s」 (shared-box seconds).
  • No ablation: text-only diff; the control is the anchors quoted before and after above.

skip-changeset: nothing here publishes from any package (.claude/** only).

维护者速读(草稿)

  • 改了什么:给「立卡三类」补三条边界、给「进验收备注」兜底加一个必须点名的承接者、分诊轮写入前先现读卡状态、三类外但不可逆的报您、验收指标换成能测出误记率的抽样;四个受管文件行数全部不变。
  • 为什么改:上一轮 6 张按旧规则关掉的卡,其实全被已合并的 PR 关过、其中一张 assignee 被抹;「进验收备注」的兜底在 6/6 例里都没有任何 PR 会去碰那个文件。
  • 风险与代价(含回滚):只改协议文本,不改代码与门禁;回滚 = revert 这一个 commit。风险是席位读不读得到——第 1 项只能是散文,不是保证。
  • 席位意见:(留空)
  • 你要做的:看一眼三条边界的措辞是否符合您的判断,然后人工合并;不需要其它动作。

🤖 Generated with Claude Code


Generated by Claude Code

… admission threshold

Read current state before every write (three lines in the finding-triage
block), a named carrier for the acceptance-notes fallback (seat half in
SKILL.md, dev half in os-dev.md), three criterion boundaries beside the three
classes in all three carriers, one irreversibility gate before the
close-not-planned line, and a falsifiable acceptance procedure in the runbook.
Every pinned file stays at its pin by folding restated lines.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019RfFHiRCSs3JXLK4cwcfox
@claude

claude Bot commented Sep 7, 2026

Copy link
Copy Markdown
Contributor Author

维护者速读


Generated by Claude Code

@os-zhuang
os-zhuang marked this pull request as ready for review September 7, 2026 10:08
@os-zhuang
os-zhuang enabled auto-merge September 7, 2026 10:08
@os-zhuang
os-zhuang added this pull request to the merge queue Sep 7, 2026
Merged via the queue into main with commit 409da78 Sep 7, 2026
35 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-16551-finding-threshold-refinements branch September 7, 2026 10:34
os-zhuang pushed a commit that referenced this pull request Sep 7, 2026
…spatch-depth-check

#16557 landed on main and removed 「PM 不写文件、不写代码;唯一例外及其全部条件见
红线。」 from 全体座位的不变量 — the second half of the fold this branch had just
used to pay for its fourth depth-hold line. Conflict resolved by taking main's
side: main's removal stands, no line #16557 landed is dropped, and the branch
pays the resulting +1 with one more same-topic fold inside the same file —
「经验教训散文不再入技能文本」 joins 「交接按收尾清单逐步走完,并 `list_triggers`
清点自设定时器」 on one line (120 bytes), both inside 收班与交接.

Ratchet after the resolution: SKILL.md 811/811 headroom 0, widest table row 342
(pin 342), core-rules.md 150/150. The four depth-hold rules and the
`priority:p0` state-table row are unchanged from what the PR states.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TezFG8ZMrNH6n5VTNpPpdH
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

2 participants