Repository navigation
docs(north-star,pm-dispatch): the p2/p3 dispatch gate reads the lane's own queue, not the whole product repo - #20009
Conversation
…s own queue, not the whole product repo Maintainer ruling, verbatim: 「当前车道队列中如果已经没有 p0 p1,就应该可以派其他卡。这应该提交一个 skills 卡。」 - docs/NORTH-STAR.md 「优先级」 item 3: the P0/P1 reading moves from 产品仓 to 本车道队列 and the bar from 任何车道 to 该车道; the unlock-chain clause is unchanged byte for byte. - references/execution-duties.md: the take-card precondition reads the same lane-scoped queue (rewritten in place, 183 lines kept, 111 bytes). - references/triage-duties.md: the triage-side close predicate that mirrors item 3 reads the queue of the lane the card is routed into (rewritten in place, 120 lines kept, 87 bytes). Claude-Session: https://claude.ai/code/session_01A22sUB3mUWs6M36VgfijBq Co-authored-by: Claude <noreply@anthropic.com>
…ity-gate Claude-Session: https://claude.ai/code/session_01A22sUB3mUWs6M36VgfijBq Co-authored-by: Claude <noreply@anthropic.com>
维护者速读(终稿)席位( 改了什么:三句话,各自原地改写、不加行。① 北极星「优先级」第 3 条前半句:「产品仓还有开放的 P0/P1 时,任何车道不派 p2/p3 的工具卡、契约卫生卡」→「本车道队列还有开放的 P0/P1 时,该车道不派……」;后半句「解锁产品 P0/P1 的仪器卡沿链继承其优先级」一字不动。② 执行席取卡前置( 为什么改:您的原话「当前车道队列中如果已经没有 p0 p1,就应该可以派其他卡。这应该提交一个 skills 卡。」原文按整个产品仓读 P0/P1,产品仓几乎总有开着的 P0/P1,于是自己队列里一张 P0/P1 都没有的车道(触发本卡的是 objectui 的 spec 席)只能干等。第三句是 dev 全文搜索多找出来的读者:不改它,分诊在首次接触时就会把您刚放开派发的那批 p2/p3 工具卡关掉,裁决落空。 风险与代价(含回滚):只改三句文字;门禁、脚本、工作流、放行规则都没动,没有任何东西发布。风险在两个词的边界——「本车道」与「队列」——规则文本只镜像您的原话,边界由您一句话定(见下)。定下之前各席按下面的推荐读法执行;三处读法一致,不会出现一个席派、另一个席关的分叉。回滚 = revert 本 PR(一个 commit,squash 后);只撤分诊那一句也是一行。 席位意见:建议批准并合并。 三句改写忠于原话,继承句未动,dev 的全文搜索把第三个读者也找齐了(本席原以为只有两处,被证伪——这正是要它搜的原因)。两个开放点本席与 dev 的推荐一致:(①)「本车道」= 派发席所在仓里带同一 你要做的:批准并合并本 PR。 若对 ①②③ 任一读法另有意见,回一句即可,席位按您的字改;不回即按上面的推荐读法执行。 Generated by Claude Code |
Fixes #19980
Clause-②: no
North-Star 「优先级」 item 3 stops p2/p3 tooling and contract-hygiene cards from being dispatched while P0/P1 work is open. Today it reads open P0/P1 across the whole product repo. The maintainer ruled that it reads the lane's own queue instead. This PR writes the ruling into the rule and into the two pm-dispatch skill lines that restate it. The unlock-chain inheritance clause is unchanged, byte for byte.
Maintainer ruling (verbatim, as filed on the card)
What changed: three sentences, each rewritten in place
docs/NORTH-STAR.mdmoves (git diff --stat: 1 line).triage-duties.md:64. It restates item 3's predicate in other words (「开着」 rather than 「开放」), so both literal patterns miss it.f151ef2c9^:.claude/skills/pm-dispatch/SKILL.md:370–374, sits directly under 「定级按北极星「优先级」1–3 条」.toolingcard with no unlock target while the repo still had open P0/P1.Reader sweep: hit counts and control queries
git grep -F, run over.claude/**,skills/**,docs/**,AGENTS.md,CLAUDE.md,content/docs/**andscripts/pm/**of objectstack, at basecc4ee7758and at head1470ba822:cc4ee77581470ba822产品仓开放 P0/P1产品仓还有开放的 P0/P1开放的 P0/P1开放 P0/P1产品仓(the subject alone, widened)P0/P1 开着本车道队列所入车道队列沿链继承2 / 2 (NORTH-STAR :114, filing-gate :43) and「优先级」4 / 4. Both are unchanged, which shows the sweep read the tree.open P0,rule 3,North-Star gate|rule|item 3andlane's own queuereturns 7 hits. None is related: RUNNER "rule 3" in a checklist JSON, doc-authoring "Rule 3" comments indispatch-gates.mjs, acheck-half-states.mjscomment and apost-stamped.mjstest string. Noscripts/pm/**comment quotes any of the three sentences, and no test pins their text (取卡现读/无解锁对象/契约卫生卡/任何车道不派return 0 outside the three files).triage-duties.md:60, 「定级按北极星「优先级」1–3 条」, cites the rule by number and restates no predicate. It is unchanged.产品仓|开放的? ?P0/P1|P0/P1 开着|第 3 条|取卡前置over each whole tree:8b1f066: 0 hits.c208a71: 1 unrelated hit, 「按第 3 条分阶段」 in its ADR 0009. It is the positive control that the grep ran.Budgets
execution-duties.md: 183 / 183 lines (ceiling 183, headroom 0). :45 grows from 105 to 111 bytes (cap 120). No line added.triage-duties.md: 120 / 120 lines (ceiling 120, headroom 0). :64 grows from 78 to 87 bytes. No line added.docs/NORTH-STAR.md: 123 lines, not under a line ratchet. :114 grows from 152 to 155 bytes.Gates, at head
1470ba822The head is the change commit
a0c50fb65plus a merge oforigin/mainat1f05ea4fb, which touches none of the three files. The whole union below was re-run after that merge (@objectstack/formulaand@objectstack/lintrebuilt first). Each exit code was captured before any pipe.pnpm check:pm-skill-ratchetexecution-duties.md is 183 lines (ceiling 183; headroom 0)·triage-duties.md is 120 lines (ceiling 120; headroom 0)pnpm check:pm-skill-id-lint34 file(s) clean (pattern /#[0-9]{3,}/g)pnpm check:skill-frame-syncthe one declared copy of the decision frame is internally coherentpnpm check:doc-authoring403 files clean·53 published skill files cleanpnpm check:pm-governed-prose2 instruction surface(s) name all 6 registered governed surfacespnpm check:nul-bytesscanned 9417 text file(s) … no raw ASCII control bytesnode scripts/check-skills-token-ratchet.mjs54 authored bundle file(s) within their ceilingsnode scripts/pm/check-governed-merges.mjs --test docs/NORTH-STAR.md .claude/skills/pm-dispatch/references/execution-duties.md .claude/skills/pm-dispatch/references/triage-duties.md3 of 3 path(s) hit the register·landing tier: H(人合)·.claude/** ×2,docs/NORTH-STAR.md ×1pnpm check:pm-governed-mergespnpm check:pm-half-states4912 cases pass(new against the dispatch-time list; matched via triage-duties.md)pnpm check:pm-settings-deny-roster.claude)pnpm --filter @objectstack/lint run check:doc-formula-expressions22 record-scoped formula example(s) … judged clean. The first attempt exited 3 (PREREQUISITE NOT MET, nothing measured). It was re-run afterturbo run build --filter=@objectstack/formula --filter=@objectstack/lintunder the verify lock (VERDICT command-exit 0).node scripts/check-ci-filter-parity.mjs·node scripts/check-closing-keyword-parity.mjs(+--self-test) ·node scripts/check-comment-mask-corpus.mjs·node scripts/pm/check-harness-current.mjs --self-testpnpm check:agent-test-spelling·check:cross-package-test-inputs·check:driver-memory-census·check:gitlink-declared·check:refd-timer-probe·check:watch-hint-literalnode scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstacknames 19 commands.--rananswers19 derived famil(ies) accounted for — 19 run, 0 NOT-MEASURED (a DERIVED zero — all 19 recorded an exit code and none of them is 3).check-half-states --format=markdown --provenance. They have no local invocation, and this diff touches no TypeScript.Landing
docs/NORTH-STAR.mdis on the register's H row, which makes the whole PR Tier H. It stays draft for the maintainer's own merge; no seat flips it ready or enqueues it.docs/**plus.claude/**only, so the PR carriesskip-changeset.Acceptance notes
维护者速读(草稿)
改了什么:北极星「优先级」第 3 条的前半句,从「产品仓还有开放的 P0/P1 时,任何车道不派 p2/p3 的工具卡、契约卫生卡」改成「本车道队列还有开放的 P0/P1 时,该车道不派……」。后半句「解锁产品 P0/P1 的仪器卡沿链继承其优先级」一字不动。pm-dispatch 技能里复述这条规则的两句也同步改了,都是原地改写、不加行:执行席的取卡前置(execution-duties),以及分诊席的关卡谓词(triage-duties)。
为什么改:依据您的裁决「当前车道队列中如果已经没有 p0 p1,就应该可以派其他卡」。原文按全仓读 P0/P1,而产品仓几乎总有开着的 P0/P1,所以自己队列里一张 P0/P1 都没有的车道(例如 objectui 的 spec 席)也只能干等。改后,每个车道只看自己的队列。
风险与代价(含回滚):只改三句文字,门禁、脚本、工作流都没动,也没有任何东西发布。剩下的风险在「本车道」「队列」这两个词的边界,需要您一句话定下(见下方 ① ②);定下之前,各席先按下面的提案读。回滚就是 revert 本 PR 的这一个 commit。
席位意见:(留空,由席位定稿)
你要做的:
domain:*标签的开卡。同仓多席共用这一个队列;跨仓席(例如 objectui 的domain:spec席)只读它所派发的那个仓里的同名车道队列。pm:blocked/pm:on-hold的 P0/P1?pm:queue、无 assignee。在飞的(pm:dispatched)、pm:blocked、pm:on-hold、决策箱里的 P0/P1 都不计。docs/NORTH-STAR.md(Tier H),请您本人批准并合并;席位不会把它翻成 ready。Generated by Claude Code