Repository navigation
docs(pm-dispatch): a chat message that lists options and waits is the popup 「卡先于弹窗」 forbids; card first - #23969
Draft
objectstack-fleet[bot] wants to merge 1 commit into
Draft
objectstack-fleet[bot] wants to merge 1 commit into
objectstack-fleet[bot] wants to merge 1 commit into
Conversation
… popup A chat message that lists options and waits for the maintainer to choose is the same channel as the AskUserQuestion widget: the needs-user-decision card comes first, in both shapes. Reworded in place (118 bytes, 319/319 lines unchanged); the dropped inbox-cadence words survive at the needs-user-decision label row and the seat-side no-waiting rule. Claude-Session: https://claude.ai/code/session_012PxNHU3dfov2hbpg9ycZ8q Co-authored-by: Claude <noreply@anthropic.com>
This was referenced Oct 16, 2026
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #23934
Clause-②: no
What changed
One line of
.claude/skills/pm-dispatch/SKILL.md(L268, the 「卡先于弹窗」 rule) is reworded in place. No line is added or removed, no code, no gate, no changeset (.claude/**is not published).Before (118 bytes):
After (118 bytes):
The new middle clause names chat prose that lists options and waits for the maintainer's choice as the same channel as the
AskUserQuestionwidget: in both shapes theneeds-user-decisioncard comes first (card acceptance 1). The ruling behind it is the maintainer's word quoted on the card: 「需要我决策的开决策卡」 and 「这种决策问题就是应该开决策卡,是skills 没写清楚嘛?skills也需要更新」.Clause survival audit (every dropped clause must live elsewhere)
04e2341e1needs-user-decision卡」needs-user-decisionrow: 「维护者的收件箱」); the seat-side duty is L38 (「⛔ 永不整席等维护者答复;需裁事项落卡进决策箱」);grep -n 收件箱 SKILL.md→ L106, L112 remaingrep -rn "assign 推送" .claude/ AGENTS.md→ L268 only, before and afterMeasurements (PM assumptions re-measured on the base)
origin/main6d1660dc3(moved from the order's161aee10while the worktree was created;SKILL.mdlast touched onmainbyf7e836da1, unchanged between the two).SKILL.md: 319 lines before, 319 after (CEILINGS319, headroom 0). L268: 118 bytes before, 118 after (MAX_LINE_BYTES120). L270 (AskUserQuestionaccelerator) untouched at 113 bytes.abff5f852c8fd09b79ec0623439aa4f0before and after (L268 is outside it).references/decision-analysis.md(50/50) untouched: the in-place reword held every surviving clause within 120 bytes, so the fallback route was not needed.Verification at head
04e2341e1(git rev-parse --short HEADof the run)Local subset, each exit code captured before any pipe (output redirected to a log,
$?read next):pnpm check:pm-skill-ratchet✓ check-skill-line-ratchet: declared cross-file moves: 2, total ceilings down 486 lines.pnpm check:pm-skill-id-lint✓ check-skill-id-lint: 87 file(s) clean (pattern /#[0-9]{3,}/g).pnpm check:pm-governed-prose✓ check-governed-prose: 2 instruction surface(s) name all 7 registered governed surfaces …pnpm check:skill-frame-sync✓ check-skill-frame-sync: the one declared copy of the decision frame is internally coherentpnpm check:skill-frame-freshness(local-only)✓ check-skill-frame-freshness: the decision frame in this tree is current with origin/main (fetched just now).pnpm check:nul-bytescheck-nul-bytes: OK (scanned 11841 text file(s) …; no raw ASCII control bytes).Derivation:
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack(no paths; change set from the merge base6d1660dc3): 20 commands. All 20 were run with the tool's own capture idiom (eval "$cmd" > log 2>&1; status=$?, recorded ascmd :: exit N): the four above pluscheck:nul-bytes, andnode scripts/check-closing-keyword-parity.mjs(+--self-test),node scripts/check-comment-mask-corpus.mjs,node scripts/pm/check-governed-queue-guard.mjs --self-test,node scripts/pm/check-harness-current.mjs --self-test,pnpm --filter @objectstack/lint run check:doc-formula-expressions,pnpm check:agent-test-spelling,pnpm check:cross-package-test-inputs,pnpm check:doc-authoring,pnpm check:driver-memory-census,pnpm check:gitlink-declared,pnpm check:pm-expected-skips,pnpm check:pm-governed-merges,pnpm check:refd-timer-probe,pnpm check:watch-hint-literal— every one exit 0.check:doc-formula-expressionsfirst answered exit 3 (PREREQUISITE NOT MET:@objectstack/formulaand@objectstack/lintnot built); afterturbo run build --filter=@objectstack/formula --filter=@objectstack/lintunderos-verify-lock.sh(VERDICT command-exit 0, held 119 s) it was re-run and exited 0. Reconciliation:dispatch-gates --ran→✓ 20 derived famil(ies) accounted for — 20 run, 0 NOT-MEASURED;check:skill-frame-freshnessis listed as outside the derivation (local-only, by design). The artifact-roster families, the type-check lanes and the always-runs tail are CI's: the seat reads them from this PR's check-runs. No package source was touched, so there is no ① build closure and no ② package test.No ablation: the diff changes instruction text, not tested behaviour.
Acceptance notes
161aee10→6d1660dc3), which did not touch the edited file..claude/**is unpublished:skip-changesetapplies (requested throughscripts/pm/label-write.mjs; the report says whether it landed)..claude/**): this PR stays draft; the owning seat's contract-tier review record lands it. Draft is no barrier by itself — the directive is.维护者速读(草稿)
改了什么:pm-dispatch 技能的「卡先于弹窗」那一行原地改写:把「收件箱由维护者定期消化」换成「列选项等答的聊天即弹窗」。行数 319 不变,该行 118 字节不变,不加任何新门禁,不动代码。
为什么改:今天有执行席把两件产品决策以「聊天里列 A/B/C 等你选」的方式提给你,没有先开
needs-user-decision卡。你的原话是「需要我决策的开决策卡」「这种决策问题就是应该开决策卡,是skills 没写清楚嘛?skills也需要更新」。原规则只写了「弹窗」,席位把它读成仅指AskUserQuestion控件,所以聊天列选项等答成了漏洞。现在这行把两种形态点明为同一通道:先落卡,聊天只递卡链。风险与代价(含回滚):只改一行协议文字,无运行时影响、无发布面。被删掉的「收件箱由维护者定期消化」只描述你自己的消化节奏,席位侧的「不等答复、落卡进决策箱」(L38)与「维护者的收件箱」(L106)仍在;「⛔ 不 assign 推送」原样保留。回滚 = revert 这一个 commit。四项验收门禁本地全部退出 0。
席位意见:(席位填写)
你要做的:无需你点击。这是 Tier S(
.claude/**)受管面,由席位做达档复核并落地;若你不同意「列选项等答的聊天即弹窗」这一措辞,在本 PR 评论一句即可。Generated by Claude Code