skills(pm-dispatch, AGENTS.md): finding admission threshold — three classes file, the rest rides the PR's acceptance notes - #16368
Conversation
…lasses file, the rest rides the PR's acceptance notes A card is filed for exactly three classes — a reproducible defect (repro or failing probe named), a violation of a declared contract (contract text cited), or a trap that leads an AI authoring metadata to write what the runtime refuses or silently drops. Everything else (observations, dead code, drift not yet exercised, polish, style, doc nits, naming) is listed under a `## 验收备注` section of the PR body and reported as `noted, not filed`; the seat reads it at ACCEPT and files only what is in fact one of the three. A filed finding outside the three classes is closed not planned in one stroke by the grading seat. Line-neutral on every pinned file (SKILL.md 811, core-rules.md 150, AGENTS.md 1058); every added line paid by a fold inside its own section. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019RfFHiRCSs3JXLK4cwcfox
|
ACCEPT — contract-tier review of PR #16368, head Implemented-by: Verified in a detached compare worktree at the PR head, not from the report:
One rider recorded, not owed here: Landing regime: governed ( Generated by Claude Code |
维护者速读事情:您今天下午的指示——「finding 准入门槛,两个仓库都需要,只有可复现缺陷、契约违背、会让 AI 写错元数据三类才立卡,其余写进 PR 验收评论」——的前一半落地:PM 派发协议(SKILL.md)、它的规则摘要(core-rules.md)与仓根 AGENTS.md 第 10 条。后一半(dev 契约 os-dev.md)在另一趟里,今天稍后到。 改了什么:三个文件各说一遍同一条规则。只有三类立卡,每张卡带自己的证据(复现或失败探针 / 契约原文 / 陷阱);其余观察、死代码、抛光、风格、文档小问题进 PR 正文的「验收备注」,复核席在验收时读,其中真属三类的由席位补立;三类之外已立的卡由定级席一笔关 not planned,不等批准。三个文件行数全部不变,每加一行都在同一节内折一行付账。 为什么值得:objectui 411 张开卡里 189 张是 finding,今天到 14 时已新立 83 张,几乎都是 dev 顺路记的观察。吞吐不是问题(今天合了 120 个 PR),入流是——而入流是舰队自己按旧规则制造的。objectui 没有自己的 finding 规则,读的就是这几份文件,一次落地覆盖两仓。 代价与兜底:三类之外的观察不再有卡片留痕,只留在 PR 正文。若 dev 把真缺陷判成观察,复核席验收时是第二道眼——这是规则有意留的兜底。纯协议文本,不动代码不动门禁,回滚一次 revert。 席位意见:建议合并。落地一周后在两块板上复测每日新 finding 数,目标降到 09-05/09-06 水平的一半以下。 Generated by Claude Code |
Refs #16351
The
SKILL.md+references/core-rules.md+AGENTS.mdhalf of the finding admission threshold. The.claude/agents/os-dev.mdhalf is held by another flight on that file and rides the flight that follows it, so this PR carriesRefs, not a closing keyword; the card stays open until that half lands.The rule landed — one rule, three registers
A card is filed for exactly three classes: (a) a reproducible defect (a repro or a failing probe named); (b) a violation of a declared contract (the contract text cited); (c) a trap that leads an AI authoring metadata to write what the runtime refuses or silently drops. Everything else — observations, dead code, drift not yet exercised, polish, style, doc nits, naming — is NOT a card: the dev lists it under a
## 验收备注section of its PR body and in the report'sout_of_scope_findingsasnoted, not filed: …; the seat reads it at ACCEPT and files a card itself only for an item that is in fact class (a)–(c). A filed finding outside the three classes is closed not planned in one stroke by the grading seat. Thefindinglabel keeps its meaning for what IS filed (待首次定级); a three-class card carries its evidence in the body, and the triage seat refuses one that carries none.改前 → 改后 — every touched line, with the fold that paid for it
Line numbers are on
origin/mainatb9a14dd64f, the base of this branch. All three files are line-neutral — SKILL.md 811 → 811 (widest table row 342 → 342), core-rules.md 150 → 150, AGENTS.md 1058 → 1058 — and every changed line is ≤120 bytes (LC_ALL=C awk). Rules-only register: no dates, quotations, issue numbers or model names were added.findingrow| \finding` | 观察类记录,恒 = 待首次定级;定级即离标;不占队列不进收件箱 |`| \finding` | 立卡三类内待首次定级,定级即离标;三类外关 not planned;不占队列不进收件箱 |`- \finding` = 观察类(死代码、未演练漂移、抛光;真实但今天没有用户撞上),待首次定级。`- \finding` = 三类内待定级:(a) 可复现缺陷(复现或失败探针);(b) 违背已声明契约(引契约文);then- (c) AI 写元数据会被运行时拒收或静默丢弃的陷阱;其余进 PR `## 验收备注`,⛔ 不立卡。`- 每批先过时前提检查再三选一:晋级 / 关闭 not planned(维护者可否决重开,PM 不等批准)/ hold。- 每批先验三类:三类外关 not planned(不等批准,维护者可否决重开);三类内无证据拒收。- 判级发生在发现分诊轮,不在立单时;车道座位可附证据/前提重验,⛔ 不定级不改标。- 三类内再过时前提检查,三选一:晋级 / 关闭 not planned / hold;判级只在此轮,不在立单时。- 唯一例外:skills 车道 finding 由该席自分诊,全仓轮跳过。- 车道席可附证据/前提重验,⛔ 不定级不改标;skills 车道 finding 由该席自分诊,全仓轮跳过。- 每张板恰好一个生产者。then- 鲜度节奏、清板三选一、pin 前置细则见 \references/seat-post-protocol.md`。`- 每张板恰好一个生产者;鲜度节奏、清板三选一、pin 前置见 \references/seat-post-protocol.md`。`- \out_of_scope_findings` 应已由 dev 立成无 assignee 的卡:查重先行、归挂判据、立在修复落地仓。`- \out_of_scope_findings` 只列三类立卡与 `noted, not filed`;立卡查重先行、归挂、立在修复仓。`- 范围外发现的标签按种分:观察类打 \finding`,具体缺陷不打标留分诊。`- 席位在 ACCEPT 读 PR \## 验收备注`,其中实属三类的由席位补立;三类外已立的卡关 not planned。`- 观察类记录打 \finding` 待首次定级;正文被截断的卡先发修复指令再跳过,不可派发。`- 立卡限三类:可复现缺陷、契约违背、元数据陷阱;截断卡先发修复指令再跳过,不可派发。- 报 needs_decision 时 open_questions 非空;范围外发现须已立卡,PM 核验并对读同轮报告。- needs_decision 必带 open_questions;范围外发现三类立卡、其余 noted not filed,核验对读同轮报告。10. **File issues for out-of-scope findings — don't silently expand scope or leave them buried.** When you hit a bug, gap, or unenforced capability that's unrelated to the current task, or too large to fix in scope, open a GitHub issue with a clear repro/decision and link it from your PR.10. **File an issue for a reproducible defect, a contract violation, or a metadata-authoring trap; note everything else in the PR's acceptance notes — never expand scope, never bury a defect.** A card names its evidence (repro, contract text or trap); the reviewer files a note that is one.Untouched by construction: the four-axis frame block (SKILL.md ~733–751), the 候选与批次 block (~430–460), the six lines the sibling flight changed (81 · 534 · 538 · 543 · 637 · 647),
CLAUDE.md, and thefindingdefinition at AGENTS.md ~973 (a registry-read rule, a different rule).Merge-tree proofs against both open heads on these files
Nearest hunks of those heads to this diff: PR #16271 edits the
priority:p0state-table row (three untouched rows below thefindingrow) and core-rules.md lines 8 and 36; PR #16339 edits SKILL.md 81/534/538/543/637/647 and core-rules.md 139–147. None of those lines is touched here. (The two heads conflict with each other in 候选与批次; that block is not touched by this PR.)Verification — at
ea4cd7c0e4, every exit captured before any pipe, verdict lines quoted from the gates' own outputnode scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstackon the three paths → 18 commands; the no-path derivation off the merge base (ea4cd7c0e4) is identical.--ranreconciliation:✓ dispatch-gates --ran: 18 derived famil(ies) accounted for — 18 run, 0 NOT-MEASURED.pnpm check:pm-skill-ratchetexit 0 —✓ check-skill-line-ratchet self-test: 155 cases pass.·SKILL.md is 811 lines (ceiling 811; headroom 0)·SKILL.md: widest table row is 342 bytes (pin 342; headroom 0)·core-rules.md is 150 lines (ceiling 150; headroom 0)·AGENTS.md is 1058 lines (ceiling 1058; headroom 0). Before, at the baseb9a14dd64f(wc -l): 811 / 150 / 1058, widest SKILL.md row 342.pnpm check:pm-skill-id-lint0 ·pnpm check:skill-frame-sync0 ·pnpm check:pm-governed-prose0 ·pnpm check:pm-governed-merges0 ·pnpm check:pm-half-states0 (✓ check-half-states self-test: 2535 cases pass.) ·pnpm check:nul-bytes0 ·check-closing-keyword-parity(+--self-test) 0 ·check-comment-mask-corpus0 ·check-governed-queue-guard --self-test0 ·check:agent-test-spelling0 ·check:watch-hint-literal0 ·check:refd-timer-probe0 ·check:required-contexts0 ·check:doc-authoring0 ·check:docs-audit-scope0 ·check:driver-memory-census0.pnpm --filter @objectstack/lint run check:doc-formula-expressions: first run exit 3PREREQUISITE NOT MET(unbuilt@objectstack/formula) — NOT MEASURED, not red; afterturbo run build --filter=@objectstack/formula --filter=@objectstack/lint(under the lock, exit 0) the re-run is exit 0 —✓ check:doc-formula-expressions (spec TSDoc, #6763): 9 @example(s) judged clean across 1297 packages/spec/src files.scripts/and.claude/hooks/→ 0 hits; positive control认领 >~24h→ 2 hits.node scripts/pm/check-governed-merges.mjs --teston the three paths → exit 3 (GOVERNED, all three named).pnpm lint(eslint . --no-inline-config) throughbash scripts/pm/os-verify-lock.sh(slotissue-16351, one acquisition, waited 0s, held 106s shared-box seconds) →lint exit=0.验收备注 (noted, not filed)
noted, not filed:references/dispatch-runbook.mdline 31 still reads 「范围外发现照旧单开」 in the sweep-batch context; under the rule landed here it reads as "filed per the admission threshold rather than folded into the sweep PR". A wording drift not yet exercised, outside this flight's declared file surface — not a card under this very rule.noted, not filed:the.claude/agents/os-dev.md范围 rule (「顺路撞见的无关缺陷立成新的无 assignee issue」 / 「观察类发现…打finding标签」) still states the old admission; it is the other half of the card, held by another flight on that file — not a finding, a known remaining half.维护者速读(草稿)
改了什么。 把「什么样的发现才立卡」的门槛写进 PM 派发协议(SKILL.md)、它的规则摘要(core-rules.md)和仓根 AGENTS.md 的第 10 条基本纪律:只有可复现缺陷、契约违背、会让 AI 写错元数据的陷阱三类才开卡;其余观察、死代码、抛光、风格、文档小问题写进 PR 正文的「验收备注」,由复核席在验收时读,其中真属三类的由席位补立;三类之外已立的卡由定级席一笔关 not planned。三个文件行数不变,每加一行都在同一节内折一行付账。
为什么改。 来源是您在席位对话里的指示:两个仓库都需要 finding 准入门槛,从源头减流。看板读数是 open 卡里近半是 finding、每日新立几十张,绝大多数是 dev 顺路记下的观察,定级为 p3 后长期积压;吞吐不是问题,入流是,而入流是舰队自己按旧规则制造的。objectui 没有自己的 finding 规则,读的就是这几份文件,所以一次落地覆盖两仓。
风险与代价(含回滚)。 代价是三类之外的观察不再有卡片留痕,只留在 PR 正文里;如果 dev 把一个真缺陷判成了观察,复核席在验收时是第二道眼,这是本规则有意留下的兜底。纯文本协议改动,不动代码、不动门禁、不放宽任何 ratchet;回滚就是 revert 本 PR。os-dev.md 那一半由另一趟落地,落地前 dev 侧读到的仍是旧规则,PM 侧已按新规则读报告,这段窗口里两侧不一致但不冲突(PM 只会多关、不会少收)。
席位意见。 (留空)
你要做的。 批准并合并本 PR;若认为三类的边界应放宽或收紧,回复要调整的那一类即可。
Labels
skip-changeset— nothing here is published from any package (.claude/**andAGENTS.mdonly).🤖 Generated with Claude Code
https://claude.ai/code/session_019RfFHiRCSs3JXLK4cwcfox
Generated by Claude Code