docs(pm-dispatch,os-dev): 串行接力一夜沉淀的六条缺口补进 SKILL —— 接力模式、锚点措辞、裁决传播扫描、停摆纠偏、飞行中重叠、预期红停放 (#5441) - #5501
Conversation
…摆纠偏、飞行中重叠、预期红停放 (#5441) 2026-08-04/05 夜 spec 车道以串行接力连落 10 个 PR(#5304 → #5365),六个情形是 现行 SKILL 没有覆盖、靠现场即兴的,各有实付学费。按 issue 注明的落点章节逐条插入: - 第 7 步「入队与落地」新增平行小节「串行接力」:每棒一整圈(auto-merge 由 PM 挂、 dev 永不碰,ready 与 auto-merge 顺序不可反且每棒各走一次)、相邻棒同文件交接语义 而非文本(#5318/#5319 实例)、两棒散文互锁由 PM 指派分工(#5323↔#5365、#5335)。 - 「入队与落地 A」新增锚点断言措辞:authenticity = baseRev 是 origin/main 祖先 且 keys 与该 commit 逐行一致;baseRev 允许滞后;⛔ 不得要求 baseRev == merge-base (那会教唆手改锚点,即 #4650 攻击自身)。四步序的第 3 步补上「先 commit merge」, 并引用 #5370 / #5371 两个新陷阱(仅引用,不实现)。 - 第 5 步派发词 + 第 7 步 review 新增「裁决传播 = 全仓 pin 扫描」:翻 pin 一轮翻完 且必须保留承重(#5322 裁决、#5365 的 REST 层漏翻)。 - 第 6 步 Collect 的 subagent 半边新增停摆纠偏:watcher 永不触发,中途状态即停摆 信号,第三次视为不可靠改走接手协议。生产端半边同步落到 os-dev.md 资源纪律第 6 条。 - 第 5 步 same-day churn 新增姊妹段「飞行中范围重叠」:每轮读 origin/main 时对每个 在飞 dispatch 做相交判断,相交即预警(#5322 × #5335 实例)。 - 「入队与落地 B」新增依赖 PR 的预期红停放:draft 停放 + 签名级预期红清单 + 解除 条件,新签名才是真问题(#5365 的 REST 红即由此识别)。 仅改 `.claude/` 内部 agent 协议文本,不发布任何包;六条落点之外未动任何段落。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GX3sL71LFq8m2usg6VqTSE
|
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
自查发现的方向错误:「Handing off an interrupted dev」小节是第 5 步的子节 (SKILL.md:839),而新增段落写在第 6 步(:923),原文写「below」会把读者指向 第 6 步之后的 Cloud mode 段。同段里对 cloud-mode ~2h 阈值的「below」是对的,保留。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GX3sL71LFq8m2usg6VqTSE
…,不是 00:0xZ issue #5441 正文写「#5335 在 00:0xZ 合入」,核 GitHub API 的 merged_at 与 main 上 squash 提交的 committer date,两者一致给出 2026-08-04T23:49:44Z。改写成「起飞后 32 分钟合入(merged_at 2026-08-04T23:49:44Z)」,把不可核验的钟点换成可核验的 时间差 + 权威字段;起飞时刻 23:17Z 沿用 issue 的记述(无仓内产物可核,且非承重)。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GX3sL71LFq8m2usg6VqTSE
自查补两条(已推,head
|
⛔ merge queue 构建失败 — 先分诊,再决定要不要重排队列构建 31016486579 红了。队列跑的是全量套件(PR 侧 CI 只跑 affected 子集), 失败的 job(日志抽取,best effort):
历史信号:
分诊清单:
Generated by Claude Code · merge-queue-triage workflow (#4859) |
#5501(#5441 的实施)已于 2026-08-05T15:02:23Z 合入 main,本分支终轮 git merge origin/main 无冲突(两 PR 的落点区段互不相交)。机械合并之后补两处**语义**叠加, 使两侧意图相加而不是并排放置: - step 6 Collect:#5501 的停摆纠偏靠 SendMessage 唤醒一个还活着的对面,而座位 Routine 的 fire 结束后没有可唤醒的 subagent —— 停摆与「会话已销毁」在 GitHub 上是同一个读数。补一段:验证管线可能超过一个 fire 的活,一开始就走 mode:cloud, 把恢复权交给下一轮的 GitHub 读数。 - 座位 Routine 化一节:补跨 fire 长流程的可行性依据 —— 串行接力(一棒一整圈 + 棒间 PM 复核)必然跨多个 fire,能跨过去是因为交接物全是 GitHub 读数(draft/ ready、auto-merge 是否挂上、预期红停放那份签名级清单写在 PR body 里);因此 对长流程只加一条要求:接力/停放的每一项都要落成 GitHub 上可读的文本,不许把 「下一棒该干什么」留在会话记忆里。 未改 #5501 的任何原文(含其「飞行中范围重叠拦截」段 —— 它说的是 PM 为**自己** 在飞的 agent 复查 main,双射之下天然就是本车道范围,与本单删掉的跨 PM 全局在飞 检查不是同一个机制,无需改写)。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01N3uGFF8teXbpgtbEJ1aYXu
…ine 化 (objectstack-ai#5472) (objectstack-ai#5522) * docs(pm-dispatch): 协调模型改版 —— 分诊/执行纵向拆分 + 一人一车道双射 + 登记表正文即真相 + 座位 Routine 化 (objectstack-ai#5472) 维护者 2026-08-05 拍板的 PM 协调模型改版,落到 `.claude/skills/pm-dispatch/SKILL.md` (唯一文件面)加一份 changeset。前提已对 origin/main 核过:同文件今天已合的 objectstack-ai#5130 (决策轴)与 objectstack-ai#5095(域表 22 包)成果全部保留,engine 域拆分与本单其余条款在 main 上均未落地,按增量施工。 - Multi-repo rule 4 重写为「纵向拆分 + 双射」:1 个分诊 PM(全仓唯一,只扫/分类/ 打标签/拆跨域/查重,永不认领派发,`domain:*` 的唯一生产者)+ N 个执行 PM(信任 标签、跳过分诊、只在本车道认领)。旧的分片阶梯 / 同队列禁令 / Borrowing 三段 删除,只留一处「越界许可已删除」的墓碑句。 - 跨域例外路径成为唯一越界通道:分诊座位指定单一车道 PM 认领 + 申报文件面 + 定向在飞检查(写明触发条件与检查范围);全局在飞检查从每轮常备税降级为该路径专用。 - 座位表协议(objectstack-ai#4604):正文表格即唯一权威现状,行=座位 / 列=座位|范围|当前 PM|说明, 接管即就地编辑该行 + 审计评论;评论不承载状态;无心跳,活性惰性判定,>24h 无产出 可回收。epic 登记退回 `pm:epic` 父单正文(`label:pm:epic` 即索引),座位表不重复记。 - rule 5 补 org Project 的分层定位:视图层、无任何机器读它、GraphQL 配额不进循环 热路径;权威层坚持 issue 正文 + REST。 - 域表重切:`domain:engine` 拆为 `domain:engine-core`(objectql / metadata* / platform-objects / core / formula / plugin-pinyin-search)与 `domain:drivers` (`plugins/driver-*`),附存量标签迁移与座位表加行要求;拆分后每包恰好一域。 - 座位 Routine 化的运行形态(Dispatch backends / Collect / step 9):每座位一个 cron Routine、fresh session per fire、频率随队列深度独立调、读 objectstack-ai#4604 拿范围 → 从 labels 重建状态 → 跑一轮 → 结束;轮次互斥取「fire 开始查上一轮产出时间, 间隔不足即自退」。⛔ 如实记录 objectstack-ai#5474 试点实测:CCR 会话内 create_trigger 创建的 Routine 不携带 GitHub 连接器,fired session 无 mcp github 工具即静默零产出, 座位 Routine 须由维护者从 claude.ai Routines UI 带连接器创建并先烟测。 - round loop 新增职责划分表(step 0 / step 2 分类半边属分诊座位,step 1、3-9 属 执行座位)+ step 0 三处扫描排除 + Guardrails 两条新 binding。 刻意未动:`.claude/agents/os-dev.md`(在飞 objectstack-ai#5441 的领地)、`content/docs/releases/`、 已发布目录 `skills/objectstack-pm-dispatch/`、objectstack-ai#4604 正文本身(运行态登记由 PM 落地)。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01N3uGFF8teXbpgtbEJ1aYXu * docs(pm-dispatch): 与 objectstack-ai#5501 的语义合并 —— 座位 Routine 与停摆纠偏/串行接力的层级互引 (objectstack-ai#5472) objectstack-ai#5501(objectstack-ai#5441 的实施)已于 2026-08-05T15:02:23Z 合入 main,本分支终轮 git merge origin/main 无冲突(两 PR 的落点区段互不相交)。机械合并之后补两处**语义**叠加, 使两侧意图相加而不是并排放置: - step 6 Collect:objectstack-ai#5501 的停摆纠偏靠 SendMessage 唤醒一个还活着的对面,而座位 Routine 的 fire 结束后没有可唤醒的 subagent —— 停摆与「会话已销毁」在 GitHub 上是同一个读数。补一段:验证管线可能超过一个 fire 的活,一开始就走 mode:cloud, 把恢复权交给下一轮的 GitHub 读数。 - 座位 Routine 化一节:补跨 fire 长流程的可行性依据 —— 串行接力(一棒一整圈 + 棒间 PM 复核)必然跨多个 fire,能跨过去是因为交接物全是 GitHub 读数(draft/ ready、auto-merge 是否挂上、预期红停放那份签名级清单写在 PR body 里);因此 对长流程只加一条要求:接力/停放的每一项都要落成 GitHub 上可读的文本,不许把 「下一棒该干什么」留在会话记忆里。 未改 objectstack-ai#5501 的任何原文(含其「飞行中范围重叠拦截」段 —— 它说的是 PM 为**自己** 在飞的 agent 复查 main,双射之下天然就是本车道范围,与本单删掉的跨 PM 全局在飞 检查不是同一个机制,无需改写)。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01N3uGFF8teXbpgtbEJ1aYXu --------- Co-authored-by: Claude <noreply@anthropic.com>
…ack-ai#5580) (objectstack-ai#5625) `github.event.pull_request.labels` 是事件触发那一刻的快照。开 PR 后数秒内补 `skip-changeset` 标签,`opened` 事件的 run 看不见它 → 走计数路径 → 无 changeset → 红;而 `rerun_failed_jobs` 复用同一份载荷(pm-dispatch Operational notes 5), 于是这个红 run 按构造无法被重跑成绿。一日三例:objectstack-ai#5467(本门禁自己的修复 PR)、 objectstack-ai#5501、objectstack-ai#5577,每例都要一个人或 agent 停下来「认签名解释掉」。 job 内新增第一个步骤,用 `gh api repos/$REPO/pulls/$PR` 实时读回标签集,产出 `steps.labels.outputs.skip`;其后每个步骤按它决定是否执行。载荷读法按 issue 建议 保留为 fast-path —— 载荷已有标签就整个 job 跳过,常规路径依旧零 runner 成本。 - **容忍方向朝着执行**:标签读不到(API 报错、无 PR 号)判为 `skip=false`,即 照常执行守卫。读不到输入的门什么也没验证,据此发豁免正是 objectstack-ai#4690 反模式(静默 跳过、exit 0、看起来像「无违规」);失败以 `::warning::` 明说,由计数步骤定论。 - **实时读放在 checkout 之前**:标签在位时其后全部步骤跳过,整个 job 只花一次 API 调用 —— 收敛到实时状态比它替掉的那个 stale 红更便宜。 - **精确整行匹配**(`grep -qxF`,here-string 而非管道):被替换的 `contains(数组, 'skip-changeset')` 是数组元素精确匹配,子串匹配会让 `skip-changeset-audit` 这类标签新获豁免;here-string 让 `grep -q` 不进管道,避免 `-q` 首个命中即关闭 管道、写入端吃 SIGPIPE 在 `pipefail` 下把判定翻成 false。 - 保留 fast-path 留下唯一一个反向 stale 格:标签在开 PR 后被**移除**时本 run 仍 短路。该格自愈 —— 移除标签必然触发 `unlabeled` 事件,它起的 run 两处都看不到 标签而照常执行;objectstack-ai#5580 那个方向没有这种救援(`labeled` run 的绿不会清掉 `opened` run 的红)。文件内注释写明了这笔交换。 ⛔ 未动 `BASE_SHA` diff 计数逻辑与 objectstack-ai#5292/PR objectstack-ai#5467 的三段有序失败文案(heredoc 终结符仍在块基缩进);未动其他 job。`allow-major` 步骤的同款载荷读法按边界留在 原样 —— RC pre-mode 期间休眠(`check-changeset-no-major.mjs` 整体让位),已记为 objectstack-ai#5620。 验证:`check:workflow-status-functions` 与 `check:nul-bytes`(含各自 self-test) 全绿;从 YAML 抽出该步骤真实脚本,以 stub `gh` 在 `bash -e` 与 `bash -eo pipefail` 两种方言下跑 7 场景 × 2 = 14 例全通过(载荷 stale/标签实时在位、无标签、空标签、 API 失败、无 PR 号、近似标签名、401 个标签的 pipefail 压力);另建前后决策真值表, 7 格中仅「载荷无标签 + 实时有标签」的首 run 与其重跑两格改变(enforce → exempt), 与事前预测一致。 Fixes objectstack-ai#5580 Claude-Session: https://claude.ai/code/session_01GX3sL71LFq8m2usg6VqTSE Co-authored-by: Claude <noreply@anthropic.com>
…in 滞后、死代码删除复核 (objectstack-ai#5513) (objectstack-ai#5645) 2026-08-05 跑完一整条 filter 缺陷链(objectstack-ai#5363 / objectstack-ai#5366 / objectstack-ai#5368 / objectstack-ai#5375 / objectstack-ai#5431 / objectstack-ai#5445, cloud#1117)后回看,六处在那一轮真实咬过人或真实救过场的规程,SKILL 里没有对应条目。 六条各落在 issue 指定的节内,**纯增补**:111 行插入、0 行删除,既有条目(objectstack-ai#5501 的接力 模式、objectstack-ai#5522 的座位模型、objectstack-ai#5630 的 assertEngineDeleteDispatch 条款)一字未动。 落点与要点: 1. **Multi-repo,rule 2 之后**「pin 滞后」——`Blocked-by:` 只保证上游已合并,姊妹仓还有 第二个读数:本仓 pin 是否覆盖那个 commit。cloud#1116 的裁决落于 framework objectstack-ai#5368 (`9c5abf4e9`),而 cloud 的 `.objectstack-sha` 未覆盖它,于是 `TursoDriver` 有一个 方向反了的分叉窗口(fail-closed 一侧先到)。规程:派发前核祖先关系;未覆盖则 dev 在 PR 正文留档窗口与方向,⛔ pin bump 不做 rider。 2. **step 3** 末「阻塞解除后重新定价」—— 前一单合入会改变后一单的成本模型,方向不止一个 (本轮变便宜、没变、成本估计过期各有实例)。两个动作配对:派发前一单时带必答项 「你的改动是否让 #X 变简单 / 变难 / 不必要 / 无影响」,派发被延后那单前用该回答重读 其选项与成本估计。 3. **step 5** 派发令「多面组件的测试落点」—— 同一契约 ≥2 实现面时,新用例进共享一致性 覆盖而非独立文件(原话照录)。附 objectstack-ai#5375 / objectstack-ai#5431 / objectstack-ai#5445 三条正交轴共用一条不变量。 4. **step 7 清单**「收益穿过它必经的那道边界之后还在吗」—— 判据是价值主张是否依赖下游 如实转发;实例即 objectstack-ai#5423(4xx 直通曾整条替换 ≥500 字符正文,`code` 到了正文没到)。 5. **step 7 清单**「死代码删除的复核」——「这是死代码」是断言而非能从 diff 读出的事实, PM 在 origin/main 独立核一次引用面再 ACCEPT(查法用 Operational notes 6:notes 6 说 怎么查不假阴性,本条说什么时候必须查)。 6. **step 8** 升级门槛之后「带前提的裁决」—— 分歧关键是可被代码证伪的事实时,第三档 = 裁决 + 前提验证要求 + 「前提不成立报 fork,不许硬做也不许悄悄改选」禁令,三件缺一 不可;缺第 3 条即退化为无人裁决且无读数显示。 实施时两处核实结果与 issue 正文不同,成文按核实后的事实写: - issue 的附带论断「没有任何闸门在量这个 pin 滞后」**不成立** —— cloud 的 `scripts/check-pin-staleness.sh`(test.yml 以 `continue-on-error` 跑)每次 CI 都报两个 pin 各落后 main 多少 commit,advisory 是**有意设计**(`--max-behind` 需显式传)。它答 的是「落后多少」,不是「是否覆盖我这条裁决 commit」;成文因此指向该脚本,并只把后一个 问题留给派发前的祖先判断。据此**未**另立「无闸门」的发现单。 - 第 4 条的 rest-server 缺陷本身已由 objectstack-ai#5423 按「截断而非替换」修掉,成文改用过去时并注明, 以免后来的读者去找一个已不存在的活 bug;该条要补的是**复核清单的缺口**,与代码是否已修 无关。 第 1 / 3 条按 issue「未验证的部分」的克制写入适用判据(前后单共用同一契约或数据表示; 组件对同一契约有 ≥2 实现面),形态迥异的批次(纯 UI、纯文档)明确不强加。 验证:`node scripts/check-nul-bytes.mjs --self-test` + 全仓扫描绿(48 断言 / 5537 文件); 改动文件自扫 `grep -naP '[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]'` 零命中,并用邻近词反查证伪 「扫描器坏了」;`check:docs-audit-scope` 绿;markdown 结构核对(强调标记成对、代码围栏 16 个偶数、嵌套围栏缩进对齐)。 Claude-Session: https://claude.ai/code/session_01GX3sL71LFq8m2usg6VqTSE Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: os-zhuang <hr@objectstack.ai>
Fixes #5441
2026-08-04/05 夜 spec 车道以串行接力连落 10 个 PR(#5304 → #5306 → #5308 → #5318 → #5319 → #5321 → #5314 → #5312 → #5323 → #5365),其中六个情形是现行 SKILL 没有覆盖、全靠现场即兴的。按 issue 注明的落点章节逐条插入,六条落点之外未动任何段落。
前提核验(基于合并后的 origin/main,HEAD = 0285f7f)
issue 提醒 SKILL.md 今日已两改(#5453 三轴 / #5468 域表),章节位置有位移 —— 已基于合并后文本施工。六条全部确认缺失:
grep 接力零命中;A/B 两条只写单 PR 流程grep baseRev零命中;authorable-surface仅 1 命中(A 的八条路径清单)grep 裁决传播/INVALID_FILTER均零命中grep 停摆零命中;原文只有「死掉 / 输出畸形算 blocked」grep 飞行中零命中;在飞5 处全属域车道的批次选择,非在飞预警grep 预期红零命中;notes 2 只覆盖 flaky 的偶然红第 2 条的措辞逐条对着代码核过,不是照抄 issue:
packages/spec/scripts/build-schemas.ts的verifyCommittedSurfaceBase()文档注释与实现只查两件事 —— baseRev 是 origin/main 的祖先(merge-base --is-ancestor)、keys 与该 commit 的 surface 逐行一致(compareAnchorKeys)。没有任何地方要求 baseRev == merge-base。const drifted = ... JSON.stringify(committed.doc.keys) !== JSON.stringify(anchor.keys),且if (drifted && !CHECK)才写 —— 即只在 keys 漂移时才推进 baseRev;同处注释写着 "Staleness is NOT an error"。PR fix(spec): #4650 删除闸门改用树内基线锚点,按 SHA 钉住的离线消费者构建不再硬失败 (#5235) #5304 的正文同样写明「滞后是合法的,不是错误 ……--check只证明它真实(authentic),不要求它最新(current)」。gen:schema在 merge 未 commit 时运行,会把 authorable-surface 锚点倒退回旧 merge-base —— 生成器写入、门全绿、静默撤销 main 的锚点推进 #5370 /gen:schemarmSync 整个json-schema/会顺手抹掉gen:openapi的产物,rest 的 openapi 路由测试随后 503 假红——check:generated原地跑 build-schemas 也触发 #5371 两单已核实存在且开放(os-regen 驱动指示的gen:schema在 merge 未 commit 时运行,会把 authorable-surface 锚点倒退回旧 merge-base —— 生成器写入、门全绿、静默撤销 main 的锚点推进 #5370bug/pm:queue,gen:schemarmSync 整个json-schema/会顺手抹掉gen:openapi的产物,rest 的 openapi 路由测试随后 503 假红——check:generated原地跑 build-schemas 也触发 #5371finding),文中仅引用、明确写「⛔ 不要在接力单里顺手实现」。其余案例编号也已核实:10 个 PR 全在 main 上;#5365 的合并 diff 确实同时改了
packages/rest/src/analytics-filter-refusal-envelope.test.ts(+87)与 service-analytics 层,正是第 3 条「消费层各有拷贝」的实证;INVALID_FILTER在 objectql / rest 十余个文件里有拷贝。改动内容
.claude/skills/pm-dispatch/SKILL.md(+135)auto-merge由 PM 挂 / dev 永不碰(ready 与 auto-merge 顺序不可反,且每棒各走一次,不是整链一次);相邻棒同文件交接语义而非文本(fix(spec): app 表单摘掉八个已退役的墓碑键输入,#3786 对账门改判「真实可授权面」(#5280) #5318/feat(spec)!: ViewItemSchema 拆成授权门 + wire 变体,并让 wire 的开放递归生效 (#5074) #5319 同动metadata-form-zod-reconciliation.test.ts,取一边会「各自绿、合起来错」);两棒散文互锁由 PM 在两侧指派分工(fix(driver-mongodb): 空$and/$or/$not归约成布尔单位元,非 filter 节点先响亮拒收 (#5239) #5323 ↔ fix(service-analytics): 空 $and/$or 按布尔单位元归约,两个编译器对齐五后端,四条进一致性表 (#5322) #5365、fix(service-analytics)!: 作者的where也 NULL-safe ——$not下推守卫、{$not:{}}为零行、{}析取项吸收$or(#5325) #5335 的 pin 块),否则两边都动或都不动,两种结果在 CI 上都是绿的。gen:schema在 merge 未 commit 时运行,会把 authorable-surface 锚点倒退回旧 merge-base —— 生成器写入、门全绿、静默撤销 main 的锚点推进 #5370,留着注解等于自留「声明与执行不一致」。git log origin/main时对每个在飞 dispatch 做「新落地 PR × 在飞文件面」相交判断,相交即预警(四条内容);并点明它与 Operational notes 8 的分工 —— notes 8 是 PM 替自己入队前复查,这条是替别人在飞的 agent 复查。.claude/agents/os-dev.md(+11) —— 第 4 条的生产端半边(PD #12:生产端修复优于 PM 端补救):资源纪律新增第 6 条「前台跑完,不要把验证挂到后台等唤醒」,并区分出唯一合法的长等待是第 1 条的flock排队。os-dev.md:263的字节自扫正则(#5484 的目标行)已下移到 :274,内容一字未动。按内容 grep,不要按行号。未动的两处(刻意)
skills/objectstack-pm-dispatch/SKILL.md(已发布镜像):那是面向客户的泛化版本(有 Quickstart / Configuration,没有「入队与落地」这类本仓专属小节),六条里的案例编号与本仓 issue 号对它无意义。沿用 docs(pm-dispatch,os-dev): 决策分析轴由两条扩为三条 —— 补「实际业务需求」轴与创业聚焦原则 (#5130) #5453 的先例(「已发布目录里的镜像本次刻意未动,那是发布内容,另单处理」)。os-dev.md的字节自扫正则:os-dev.md 的「自扫」正则比门禁本身还窄:#5460 把 DEL 纳入扫描面后,那条指令会给出假绿 #5484 的活,已单独排队。skip-changeset标签,与派发口径不同 —— 请复核派发口径要求「空 frontmatter changeset,先例
.changeset/pm-dispatch-three-axis-decision-frame.md」。该先例已被今日更晚合入的 #5467(修 #5292)改判,现行Check Changeset门禁的失败文案原文:门禁文案逐字点名
.claude/属路由 2。本 PR 因此走标签路线(已挂skip-changeset)。这正是 SKILL 第 5 步「same-day churn」讲的那件事发生在派发口径本身上:先例来自 #5453,而 #5467 在其后落地。若维护者/PM 仍要求那份 in-repo 散文记录,一条空 changeset 即可补上(说一声就加),但按门禁的说法它下游不到任何 CHANGELOG。验证
.claude/的实际读者只有两个门(其余两个的 ROOTS 不含.claude/,如实说明,不冒充覆盖):不覆盖
.claude/但一并跑过、确认无回归:字节纪律自扫(超出门禁扫描面,含 #5460 加入的 DEL):
没有测试可加,如实说明:改动是两份
.claude/内部 agent 协议散文,不含任何可执行代码路径;packages/spec的check:skill-docs/check:skill-refs生成链的SKILLS_DIR指向仓根skills/(已核build-skill-docs.ts:28、build-skill-references.ts:34),读不到.claude/,所以没有生成物需要重生成。pnpm test/pnpm typecheck对本 diff 无信息量,未跑 —— 报告里不拿它们充作证据。🤖 Generated with Claude Code
https://claude.ai/code/session_01GX3sL71LFq8m2usg6VqTSE
Generated by Claude Code