Repository navigation
docs(pm-dispatch): triage completes a self-labelled card's derivable filing-gate answers at first touch; lanes label pm:retriage; the spot-check covers queued cards - #24602
Conversation
…filing-gate answers at first touch; lanes label pm:retriage; the spot-check covers queued cards filing-gate.md: a card missing any of the three answers is completed by triage at first touch from the card and one search, the answers posted in its grading comment, and graded; only a card it cannot complete (none of the four categories, or a finding with no reach:) is closed not_planned, one line naming what is missing. Paid by deleting the not-a-card line for out-of-class / reach-less findings, whose content lives at the same file's L10-L11 and SKILL.md's report contract. execution-duties.md: a lane keeps "missing one => label pm:retriage" and a comment without the label does not count; compressed in place. triage-duties.md: the self-labelled spot-check reads cards created (not dispatched) in the window whose domain event shares the creation minute, and completes the three answers. Every file stays at its ratchet ceiling; every edited line <= 120 bytes. Claude-Session: https://claude.ai/code/session_014kWeosxNDsHDT6TuQHLmC1 Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014kWeosxNDsHDT6TuQHLmC1 Co-authored-by: Claude <noreply@anthropic.com>
Contract reviewServed-tier: Inputs: card #24589 body and both comments (the ① Derived judgments
② Semver levelNothing is published: no path under any package ③ Boundary flags
Implemented-by: VERDICT: PASS |
维护者速读(终稿)
席位核对ACCEPT · skills seat 2 ·
|
Fixes #24589
Clause-②: no
Every path in this diff is under
.claude/**(Tier S). It publishes nothing from any packagefiles[], so it carriesskip-changeset. It stays a draft and lands only by the owning seat after aCONTRACT_REVIEW_TIERPASS on the landing head.The ruling, verbatim
Filing gate ③, a task the maintainer directed, in the triage seat's chat (
session_01AavokzJ5DndAwitDXvKy4U, 2026-10-19). The maintainer asked 「这种卡你是不是不会处理,结果车道也不接」, then 「或者 skills 应该调整?」, and on the seat's three options answered 「B」.The four items of the card's "What to change (the ruling, B)" are implemented at the three sites they name. Item 4 holds by construction: no gate, script or
issue-create.mjsrefusal is added; the diff is three rule files.What changed
references/filing-gate.md: item 1 (old L27 is now L26 and L27; paid by deleting old L21)Triage: lands in …audit comment oftriage-duties.mdL67. 「并定级」 replaces the ruled-away 「不定级」.triage-duties.mdL61–L62 (「无则关」 and thetoolingthree-door close) still stand: a completed card is graded, and grading can still close it there.not_plannedis spelled bare, astriage-duties.mdL61 and L63 spell it.Payment: deleted old L21, 「⛔ 不是卡:三类外或无
reach:的finding,它们进 Acceptance notes 带carrier:。」 Both of its halves have a home elsewhere:finding限三类且带reach:」. The triage side is the new L27.SKILL.mdL112 (thefindingrow) has 「三类外关 not planned」.carrier:. SeeSKILL.mdL282 「out_of_scope_findings每条 … 或carrier:(承接者);皆无 ⇒ Acceptance notes。」,.claude/agents/os-dev.mdL52–L53 (carrier:defined: 「卡号或人,⛔ 非下个碰 X 的 PR」), andtriage-duties.mdL44 「其余进 PR## Acceptance notes,⛔ 不立卡」.references/execution-duties.mdL11: item 2, compressed in placepm:retriage」 is kept byte for byte, and 「⛔ 只评论不算」 is added. Appending the clause to the unchanged line measures 138 B, so the line is compressed in place and no other line pays:domain:*label, and 「合域表」 is the same test.filing-gate.md」 becomes 「立卡门」.SKILL.mdL172 uses that spelling for the same rule (「正文齐立卡门三件」), and it is the## 立卡门heading offiling-gate.md.pm:retriage.SKILL.mdL172 keeps 「正文齐」, which is right for its own population: untriaged self-labelled cards, where the body is the only place the answers can be.state-machine.mdL10 「交接即标签:只写交接评论而不同笔挂标 = 空交接,收件箱只认标签。」 anddispatch-runbook.mdL112.references/triage-duties.mdL17: item 3, rewritten in placedomain:*event shares the creation minute, whatever itspm:*state. That includespm:queue, which is exactly the population 「新派发」 left out.pm:queue)」 does not fit. It measures 139 B (136 B in its tightest position) against the 120 B cap, and this file has no line whose content is restated in full elsewhere to pay for a second line. The inclusion is therefore carried by 「新建」, not spelled out.filing-gate.mdL26–L27. 「者」 is dropped for bytes. 「逐张」 and 「⛔ 不凭 actor」 are unchanged.Line budget
references/filing-gate.mdreferences/execution-duties.mdreferences/triage-duties.mdNo
CEILINGSrow moves. No re-wrap is used as payment.lengthVerdict(scanLineLengths())fromscripts/pm/check-skill-line-ratchet.mjsreports "every line is within 120 bytes" for all three files.Acceptance, measured on head
a7111c84eThe three files agree:
filing-gate.mdL26–L27, reached fromtriage-duties.mdL17 (「补齐三件」).pm:retriage:execution-duties.mdL11 (「⛔ 只评论不算」).triage-duties.mdL17 (「窗内新建」).Gates (local subset, head
a7111c84e, after mergingorigin/main5a871e4e4)node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstackderives 19 commands, and every one exited 0:node scripts/check-closing-keyword-parity.mjsand its--self-testnode scripts/check-comment-mask-corpus.mjsnode scripts/pm/check-harness-current.mjs --self-testpnpm --filter @objectstack/lint run check:doc-formula-expressionspnpm check:agent-test-spelling, cross-package-test-inputs, doc-authoring, driver-memory-census, gitlink-declared, nul-bytes, pm-governed-merges, pm-half-states, pm-label-write, pm-skill-id-lint, pm-skill-ratchet, refd-timer-probe, skill-frame-sync, watch-hint-literal--ranreconciliation: 「19 derived, 19 run, 0 NOT-MEASURED, 0 UNRUN」. Notes:check:doc-formula-expressionsexited 3 (PREREQUISITE NOT MET: formula and lint were unbuilt). That run measured nothing. Both packages were then built under the verify lock, and the re-run exited 0.check:pm-half-statesinvocation is the self-test. The live run takes CI's--provenancevalue, so it is NOT MEASURED locally.check:pm-settings-deny-rosterandcheck:pm-governed-prosewere also run (both exit 0) because their rosters live under.claude..claude/**: no build closure, no package tests, no ablation.Acceptance notes
findingwith noreach:at first touch,not_planned.triage-duties.mdL50 says the opposite: 「缺reach:且非例外 ⇒ 定priority:p3,并入收口卡或清扫卡,⛔ 不单独派发、不因此关卡。」 Both texts cannot hold at once.open_questionswith options.SKILL.mdL112 (「三类外关 not planned」),SKILL.mdL284 (「门外已立卡关 not planned」) andtriage-duties.mdL79 (「三类内无证据拒收」) already lean the new line's way.carrier:token on the next line (now L21) is defined atSKILL.mdL282 andos-dev.mdL53. carrier: none, noted only.维护者速读(草稿)
改了什么:三份分诊/车道规则各改一处。① 立卡门:自贴标签的卡缺「类别/动手的读者/查重」三件时,分诊第一次碰到先自己补齐(从卡面和一次检索就能推出来的),写进定级评论并照常定级;只有补不齐的(四类都不是,或 finding 没有 reach:)才关单 not_planned,一句话说清缺什么。② 车道:发现自贴卡缺件必须挂
pm:retriage标签,只留评论不算。③ 分诊抽查:从「窗内新派发」放宽到「窗内新建」的自贴卡,已排队的也查,逐张核车道并补齐三件。为什么改:当天七张自贴卡缺件。车道按规则不接,但只留了评论没挂标,分诊的扫描又只看已派发的卡,结果卡悬空没人管。按旧条文分诊会把七张全关掉(含一张实测占 CPU 11.8% 的 p1),每张关了重立约四笔写入,还丢线程。改后是补齐定级,少关少重立。
风险与代价(含回滚):纯文本,只动
.claude/**,不发布,行数不变、无新门禁;回滚 = revert 本 PR 一个提交。代价一:为腾行删了立卡门里一条「三类外或无 reach: 的 finding 不是卡」,其内容在同文件第 10–11 行和 SKILL.md 报告契约里仍有。代价二:抽查行装不下「含pm:queue」字样,靠「新建」一词涵盖。待定一处:分诊职责第 50 行仍写「缺 reach: 定 p3、不因此关卡」,与这次裁决「finding 无 reach: 首触关」相反,需席位/维护者定夺,本 PR 未选边。席位意见:
你要做的:无。
Generated by Claude Code