From 80b20b8e85456a0120f80a1bb72b1bcdab7104b3 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 12 Aug 2026 09:09:43 +0000 Subject: [PATCH] docs(pm-dispatch): spec-semantic fable clause, native issue-typing + Bug-first tiebreaker, retire shift-end skill-suggestion list Closing consolidated skills batch (three maintainer rulings of 2026-08-12): - Model tiering gains mandatory clause 2: cards altering the contract's accept/reject behavior or growing its public surface (the domain:spec semantic lane) dispatch at claude-fable-5, no downward discretion; spec-surface / spec-tooling / downstream-adaptation tiers explicitly unchanged. Criterion cites the existing adjudication boundary test and the one-package-three-seats split - no second copy. - Triage duty: native issue types Bug/Feature/Task typed on every card by the triage seat as single authoritative producer; Bug without a named location or repro path does not enter pm:queue; no mass backfill. Three named consumers: adjudication routing, release-board type:Bug query, and the new Bug-first tiebreaker within ordinary queue items (a tiebreaker, not a priority ladder). - Seat-exit checklist: the mandatory shift-end SKILL update-suggestion list is retired; shift-end reporting narrows to three classes (wrong or missing principle / mechanizable item / platform-fact row), default zero; lessons-learned prose is no longer admissible into skill texts. Ratchet headroom 0: all additions offset in-place by compressing touched sections whose operational detail already lives in references/ (seat-post protocol, release board ops, cloud-card lessons, dispatch runbook). Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_012Gg6rMAti8ZaueWb6BRsDn --- .claude/skills/pm-dispatch/SKILL.md | 160 +++++++++--------- .../references/seat-post-protocol.md | 8 +- 2 files changed, 86 insertions(+), 82 deletions(-) diff --git a/.claude/skills/pm-dispatch/SKILL.md b/.claude/skills/pm-dispatch/SKILL.md index c4209317df..d8694a564d 100644 --- a/.claude/skills/pm-dispatch/SKILL.md +++ b/.claude/skills/pm-dispatch/SKILL.md @@ -219,17 +219,18 @@ UI 创建并勾 GitHub 连接器、UI 钉模型(会话内 create_trigger 的Rout ## 座位贴协议(一座位一贴,单写手) -多写手共编一个 body 机制上防不住互吞(维护者 2026-08-06 拍板):**贴 = 座位**(标签`pm:seat`),正 -文固定六段现值(**范围 | 当前 PM | 继承台账 | 热文件串行队 | 常设承诺 | 说明**,没有一段随时间 -增长),**只由在任座位 PM 编辑**,正文为权威 —— 标题(`[PM seat] <座位名> — <状态>`)与 -assignee 是它的派生视图,三者同笔更新。接管/移交 = 改正文 + 一条审计评论,**评论只作审计不承载 -状态**;接管压缩是标准步骤(按六段模板重述现值,编辑历史即存档)。**读侧闭环(维护者 2026-08-12 -批准):接管与巡检只读贴正文 + 晚于正文最后编辑的评论** —— 更早的已被那次编辑吸收,是存档不是现 -状。**热文件串行队是正文具名段**(文件 → 有序卡片清单 → 每张卡认领的区域;区域写不清就只能整文 -件串行)。无心跳,活性惰性判定(只在接管冲突时评估,会话座位 >24h 无产出可回收);每轮巡检核对自 -己的贴;竞态(空缺争用)三招 —— 动手前重 fetch 正文、审计评论时间戳先到先得、写后回读。状态词表 -、接管/退场收尾清单等细则见 `references/seat-post-protocol.md`;epic 委托不入座位贴体系 -;`packages/spec` 恒归 spec 座位。 +多写手共编一个 body 机制上防不住互吞(维护者 2026-08-06 拍板):**贴 = 座位**(标签 `pm:seat`), +正文固定六段现值、**只由在任座位 PM 编辑**、正文为权威,标题与 assignee 是派生视图、三者同笔更 +新;接管/移交 = 改正文 + 一条审计评论(**评论只作审计不承载状态**),接管压缩是标准步骤。**读侧 +闭环(维护者 2026-08-12 批准):接管与巡检只读贴正文 + 晚于正文最后编辑的评论** —— 更早的已被那 +次编辑吸收,是存档不是现状。**热文件串行队是正文具名段**(区域写不清就只能整文件串行)。无心跳 +,活性惰性判定;竞态三招 —— 动手前重 fetch 正文、审计评论时间戳先到先得、写后回读。**换班报告默 +认零建议**(维护者 2026-08-12 裁定,原话:「还有各车道下班时会提交 skills 建议有必要吗?就是那些 +搞得后来skills越来越乱。」):强制建议清单已退役,离任报告只收三类 —— 原则错/缺(→ skills 席专题) +、可机械化项(→ 门禁/脚本卡,⛔ 不是散文)、平台事实变化(→ references 事实表改一行)—— 以 +`finding` 入 skills 车道由该席分诊,三类之外默认关 not planned;「经验教训」散文不再入技能文本 +(防错归门禁,判断归档位)。六段模板、状态词表、接管/退场收尾清单等细则见 +`references/seat-post-protocol.md`;epic 委托不入座位贴体系;`packages/spec` 恒归 spec 座位。 ## Epic 子树车道 @@ -249,46 +250,48 @@ assignee 是它的派生视图,三者同笔更新。接管/移交 = 改正文 + (执行座位 ⛔ 跳过本节动作 —— 读到标签当既成事实。) **Backlog sweep(常设职责,不等请求)。** 每轮扫任一析取命中的卡:① 全裸(无`pm:*`、 -无 `needs-user-decision`、无 `domain:*`);② 有 `pm:queue` 无 `domain:*` (**仅限主仓** —— 姊妹 -仓没有车道标签,这形状是它们队列卡的常态);③ 有 `domain:*` 无pm-state。②③ 只取 `updated_at` 早 -于 ~2 分钟的卡(半标注的第二来源是一次标签写入把老卡打成半标注),且不是可选项 —— 只带路由或状 -态机其一的卡对两个视图同时不可见,而半标注卡是协议自己按设计生产的。排除:`tracking`、 -`status:parked`(其正常形状恰是「带域标签无 pm-state」)、全部 `pm:seat` 贴;存量大时每轮限量、 -优先最新。 +无 `needs-user-decision`、无 `domain:*`);② 有 `pm:queue` 无 `domain:*`(**仅限主仓** —— 姊妹 +仓没有车道标签,这形状是它们队列卡的常态);③ 有 `domain:*` 无 pm-state。②③ 只取 `updated_at` +早于 ~2 分钟的卡且不是可选项 —— 半标注卡是协议自己按设计生产的(一次标签写入即把老卡打成半标 +注),只带路由或状态机其一的卡对两个视图同时不可见。排除:`tracking`、`status:parked`(其正常形 +状恰是「带域标签无 pm-state」)、全部 `pm:seat` 贴;存量大时每轮限量、优先最新。 **分类动作**(每张三选一 + 一个修复通道):**`pm:queue`** —— 有具名落点或复现的具体缺陷、范围明 确的工具/门禁修复、恢复不变量的 finding、test-only pin,无可问之事; **`needs-user-decision`** —— 设计卡、feature/契约形状提案、需要 appetite 的多周程序、碰存量数据迁移形状或删除已发布能 力的,落卡时**必带四棱卡面块**(见「升级与决策」),⛔ 不留待有人接手再补;**`finding`** —— 观察 类(死代码、未演练漂移、抛光;真实但今天没有用户撞上),持有态待定级;**Repair first** —— 正文 -被 sanitizer 截断的卡不可派发,评论修复指令后跳过;它是停摆指令,判据必须比其它分类更硬(双读取 -),事后证伪要在同处公开作废。 +被 sanitizer 截断的卡不可派发,评论修复指令后跳过;停摆指令判据必须比其它分类更硬(双读取),事 +后证伪同处公开作废。 + +**原生 issue 类型 Bug/Feature/Task 是分诊的固定产出**(维护者 2026-08-12 裁定「同意」):分诊 +座位是 `type` 字段的唯一权威生产者(立单者可预填,分诊校正 —— 与 `domain:*` 同一纪律);判据即 +代裁的机械边界测试(⛔ 不另抄):违背已声明契约 ⇒ `Bug`,扩大接受集/公开面 ⇒ `Feature`,其余 +⇒ `Task`。`Bug` 无具名落点或复现路径不入 `pm:queue`(标记补复现);⛔ 不回填存量 backlog(全库重 +扫必烂),新卡即时打、存量卡下次碰到补。读者三个:代裁路由(`Feature` 机械落人工地板,`Bug`/ +`Task` 才是代裁候选)、发版板缺陷扫描(`type:Bug is:open`)、普通队列 Bug 优先平手判据。 **路由即分诊的技术判断,永不升级「哪个仓?」。** 读三仓代码定落点;跨仓的按contract-first 拆分; -父单已有子结构的,父单队列标签即可(sub-issue 自动成为候选),分诊时逐个展开路由、 -补 `Blocked-by:` 排序,父单是协调节点**永不派发**。每张留一条英文审计评论(「Triage: lands in -…; rationale: …」),可选带 `Size/model suggestion: , ` 行供执行席参 -考。跨仓查重(shadow 检查):跟跨仓引用 +关键词搜两姊妹仓 —— 在飞 ⇒ `Blocked-by:` 不派;open 未 -认领 ⇒ 先收敛成一个派发入口;已完成 ⇒ 卡可能过期。**「生产者在哪?」是常设分诊问题**:declared -≠ enforced 形状的卡先问谁在写这个字段 —— 答案通常就是根因,并在派发前改变卡的范围与域标签。 +父单已有子结构的,父单队列标签即可(sub-issue 自动成为候选),分诊逐个展开路由、补 `Blocked-by:` +排序,父单是协调节点**永不派发**。每张留一条英文审计评论(「Triage: lands in …; rationale: …」) +,可选带 `Size/model suggestion:` 行供执行席参考。跨仓查重(shadow 检查):跟跨仓引用 + 关键词搜 +两姊妹仓 —— 在飞 ⇒ `Blocked-by:` 不派;open 未认领 ⇒ 先收敛成一个派发入口;已完成 ⇒ 卡可能过期 +。**「生产者在哪?」是常设分诊问题**:declared ≠ enforced 形状的卡先问谁在写这个字段 —— 答案通 +常就是根因,并在派发前改变卡的范围与域标签。 **发现分诊轮(队列的出水口)。** 触发:每 ~5 轮,或 `finding` 存量 >~15 插队。对每条先做过时前提 -检查(main 一天 ~18 合并,发现的准确性半衰期以天计),然后三选一:晋级(换 `pm:queue`)/ 关闭 not -planned(附理由,列入轮次报告 —— 维护者可否决重开,PM 不等批准)/ 持有(记一行为什么还留着)。**判 -级发生在这里,不在立单时**(立单的 dev 只有局部视野,照实立单不自行压级)。**sweep 打包晋级**(维 -护者 2026-08-07 批准)五条:同类才打包(全部命中同一判据);逐项清单(落点 | before | after) -是 PR 正文必备件; N 项之外零改动且 PR 自证;范围外发现照旧单开;sweep 卡本身是认领对象,成员单 -保持标签但不再是可派发候选。 +检查(发现的准确性半衰期以天计),然后三选一:晋级(换 `pm:queue`)/ 关闭 not planned(附理由,列入 +轮次报告 —— 维护者可否决重开,PM 不等批准)/ 持有(记一行为什么还留着)。**判级发生在这里,不在 +立单时**(立单 dev 只有局部视野,照实立单不压级)。**sweep 打包晋级**(维护者 2026-08-07 批准)五 +条:同类才打包(全部命中同一判据);逐项清单(落点 | before | after)是 PR 正文必备件;N 项之外零 +改动且 PR 自证;范围外发现照旧单开;sweep 卡是认领对象,成员单保持标签但不再是可派发候选。 **发版板(`target:`;运维细则见 `references/seat-post-protocol.md`)。** 判据二元(⛔ 不 做优先级渐变 —— 渐变没人维护):「不修它,当前 RC 能不能发?」判阻塞四类:① 用户今天就撞的已发布 面缺陷;② 公开契约 declared≠enforced;③ 存量数据/迁移形状(发布后修不回);④ 发布说明里要为它道歉 -的。拆分/分票时 `target:*` 随工作走,对每一半重跑二元判据,默认继承,不继承要把理由按四类写在卡 -上。**每个 backlog 恰好一个生产者**(主仓 → 分诊座位;objectui / cloud → 各自整仓座位),其余座 -位不打不摘,⛔ 谁都不扫别人的 backlog;维护者的发版清单 = **三仓三条查询之和**,「归零 = 可发版 -」指三张板都空。鲜度与发现分诊轮同节奏;**发版时刻 = 清板不是重扫**(修掉 / 摘牌 / 明示接受带 -病发布三选一);**发版前置**:清板动手前取一次 pin 读数,pin 滞后 ⇒ console bump 单已存在且已上 -板或明示接受,否则不 cut。 +的。拆分/分票时 `target:*` 随工作走,对每一半重跑二元判据,默认继承,不继承按四类写明理由。**每 +个 backlog 恰好一个生产者**,⛔ 谁都不扫别人的 backlog;「归零 = 可发版」指三张板都空。鲜度同发 +现分诊轮;**发版时刻 = 清板不是重扫**;清板三选一与 pin 前置细则见 references。 **高置信决策卡的分诊代裁(维护者 2026-08-12 裁定)。** 出处原话:「让他帮我从实际业务需求出发, 从平台长远合理性出发,从避免ai写代码犯错的角度出发,从创业阶段不扩散需求的角度出发综合分析……很 @@ -307,9 +310,8 @@ planned(附理由,列入轮次报告 —— 维护者可否决重开,PM 不等 enforced 的恢复)⇒ bug/整理 ⇒ 代裁车道。 - **置信门(全部成立才可代裁)**:① 四棱同向(全指向同一选项,任何分裂即升级);②不在人工地板上 ;③ 不收窄、不推翻任何既有维护者裁决;④ 执行是**否决窗口不是许可门**—— 裁定 → 一次标签写入 - 换 `needs-user-decision` 为工作态 → 卡上贴四棱块 + 结论 - + `auto-adjudicated` 标记 → 轮次报告设**代裁清单**专节(聚合漂移的刹车);⑤ 代裁分析跑 - 在 `claude-fable-5`(与维护者手工流程同档)。 + 换 `needs-user-decision` 为工作态 → 卡上贴四棱块 + 结论 + `auto-adjudicated` 标记 → 轮次报 + 告设**代裁清单**专节(聚合漂移的刹车);⑤ 代裁分析跑在 `claude-fable-5`(与维护者手工流程同档)。 - **回翻条款**:代裁卡实施中发现契约终究要动 ⇒ dev 停手,卡回`needs-user-decision` —— 报告分叉 ,⛔ 永不静默重裁。 @@ -317,25 +319,25 @@ planned(附理由,列入轮次报告 —— 维护者可否决重开,PM 不等 ### 候选与批次 -**整车道一次读全,本地求交**(维护者 2026-08-11 接受):`list_issues` 带 -`labels: [domain:X]` + 最小字段一次拿回全车道 open 集,各状态本地求交 —— 按单一 pm状态切片的 -查询看不见其它状态,是结构性盲区。候选 = open、未 assign、无`needs-user-decision`;已排队父单 -的 open sub-issue 自动是候选(`pm:epic` 父单的子树除外)。**每张候选读全文 + 全部评论**(裁决落 -在评论区,跳过评论就是跳过裁决;评论还可能记着一半工作已交付);**派发前做 stale-premise -check**(issue 描述的是立单当天的仓 —— `git log --oneline -20 -- ` 花几分钟,不查则赔一 -次 agent-run)。 - -**批次独立性。** 一批内任两单不得可能碰同一个包/registry/barrel/spec schema;拿不准就串行。** -同文件单跨轮硬串行;延后不是搁置**(被延后那一刻就把已知的坑记到该 issue上)。**维护者明示豁免 -同文件串行时,替代纪律四条**(豁免的是排队,不是防撞):① 认领评论把文件面申报到**区域**级(函数/ -段落);② 开 PR 前合一次 main;③ 兄弟卡落地后再合一次;④ 冲突交合并队列仲裁,⛔ PM 不手动排序;豁 -免不外溢,无明示豁免默认硬串行。**阻塞解除后给延后单重新定价**:派发前一单时带必答项「你的改动 -让 #X 变简单/变难/变得不必要还是无影响?」,派发后一单前用这个回答重读它的选项与成本,⛔ 不沿用 -立单时那份(适用判据:前后单共用同一契约或数据表示)。 +**整车道一次读全,本地求交**(维护者 2026-08-11 接受):`list_issues` 带 `labels: [domain:X]` + +最小字段一次拿回全车道 open 集,各状态本地求交 —— 按单一 pm 状态切片的查询看不见其它状态,是结 +构性盲区。候选 = open、未 assign、无`needs-user-decision`;已排队父单的 open sub-issue 自动是 +候选(`pm:epic` 父单的子树除外)。**每张候选读全文 + 全部评论**(裁决落在评论区,跳过评论就是跳 +过裁决;评论还可能记着一半工作已交付);**派发前做 stale-premise check**(issue 描述的是立单当天 +的仓 —— `git log --oneline -20 -- ` 花几分钟,不查则赔一次 agent-run)。 + +**批次独立性。** 一批内任两单不得可能碰同一个包/registry/barrel/spec schema;拿不准就串行。**同 +文件单跨轮硬串行;延后不是搁置**(被延后那一刻就把已知的坑记到该 issue 上)。**维护者明示豁免同 +文件串行时,替代纪律四条**(豁免的是排队,不是防撞):① 文件面申报到**区域**级(函数/段落);② 开 +PR 前合一次 main;③ 兄弟卡落地后再合一次;④ 冲突交合并队列仲裁,⛔ PM 不手动排序;豁免不外溢。** +阻塞解除后给延后单重新定价**:派发前一单时带必答项「你的改动让 #X 变简单/变难/变得不必要还是无 +影响?」,派发后一单前用这个回答重读它的选项与成本,⛔ 不沿用立单时那份(前后单共用同一契约或数 +据表示时适用)。 **选择优先级**:`priority:p0` 插队 > 解锁扇出 ≥2 的上游单 > `target:` 板上项 > 被任一开 -卡 `Blocked-by:` 点名的上游单 > 普通队列项(维护者 2026-08-11 裁定);扇出从`Blocked-by:` 反向 -索引现算,⛔ 不为此发明存储标签;**优先是排序,不是豁免**。**解锁那一刻两类断言同时最不可信**: +卡 `Blocked-by:` 点名的上游单 > 普通队列项,项内 `Bug` 先于 `Feature`/`Task`(维护者 2026-08-11 +与 2026-08-12 裁定)—— **平手判据,⛔ 不是优先级阶梯**(P1–P5 细粒度渐变已试已拒:没人维护必烂) +;扇出从`Blocked-by:` 反向索引现算,⛔ 不为此发明存储标签;**优先是排序,不是豁免**。**解锁那一刻两类断言同时最不可信**: 卡内文件面要在合并后的 ref 上重验(上游已合 ≠ 卡还成立—— 关掉上游的那个合并最可能顺手把你这张 卡也修掉);PM 自己「这条裁决收窄/关掉了那张卡」的判断是假设不是前提,必须以机制假设身份进派发 令,被证伪就在同一张卡公开更正再重新分诊。 @@ -343,8 +345,7 @@ check**(issue 描述的是立单当天的仓 —— `git log --oneline -20 --

…`;取数的是 PM 不是 dev —— dev 只跑被点名的 - 门禁族,全 farm 归 CI);行级断言转述进派发令前必须自己重验。 + 在角色文件(派发词与它冲突时它胜),错了就修那里,⛔ 不靠派发词临时覆盖。**清单、路径、行号在 + 派发那一刻从树上取**,⛔ 不从卡片/上次派发/记忆抄(取数 `node scripts/pm/dispatch-gates.mjs` + ;取数的是 PM 不是 dev —— dev 只跑被点名的门禁族,全 farm 归 CI);行级断言转述前必须自己重验。 - **文件面写两句**(预期落点 + 生产者在别包时报备后按生产者侧修,⛔ 不在消费者侧打补丁 );**same-day churn 行**(当天合并 ⇒ 先核对当前 main);**在飞重叠拦截**(每轮求交,相交即发四句 警告,被完全覆盖就停下回报 ⛔ 不硬造 diff)。 @@ -416,19 +418,17 @@ dev 侧推分支要早 —— 远程分支是在飞工作最硬的证据。**Sta **资源与后端(维护者 2026-08-12 裁定:中级卡改子 agent、模型由 PM 按难度逐卡指定;覆盖 2026-08-10 的「M 及以上默认云卡」)。** S 级机械 + M ⇒ `mode:subagent`(PM 容器内并行,档位按 Model tiering 显式传参);S 级但不机械(判断面在设计不在门禁)按 M 待遇。`mode:cloud` 只保留给 -:L/XL、必须活过 PM 会话的工作、浏览器/dogfood 验证、以及逐卡判断的 build 重 M 卡(争用只来 -自 build+test,docs/指令类 M 卡碰不到;论证见 `references/dispatch-runbook.md`)。**归档义务只 -落在云卡**(遗忘容器面随之收窄到 L 级派发);OOM 死的单独重派;判定连同档位写进认领评论。 +:L/XL、必须活过 PM 会话的工作、浏览器/dogfood 验证、逐卡判断的 build 重 M 卡(论证 +见 `references/dispatch-runbook.md`)。**归档义务只落在云卡**;OOM 死的单独重派;判定连同档位写 +进认领评论。 **云卡四课**(细则见 `references/dispatch-runbook.md`;一次性云卡用 `create_session`,⛔ 不用 create_trigger+fire —— 维护者 2026-08-07 拍板,trigger 流只留给定时/重复型):① 授权面随 -source 不随环境(带 `source_url` + `outcome_branch` + 显式 `model` + 车道名开头的 `title`) -;② 派发词必带**自驱条款**(合法回合终点只有推送完成 + 终报,或硬阻塞详报);③ 交付通道 = dev -自开 draft PR + 终报以 issue 评论交付;④ **云卡 draft PR 一存在立即 `subscribe_pr_activity` -—— 硬步骤**(未订阅的云卡 PR 是轮询负债)。云会话 `SendMessage` not-reachable 是设计非故障(维 -护者 2026-08-11 裁定:事件驱动架构即长期方案),⛔ 不复测。**接手中断的 dev**:先试 SendMessage -复活,resume 不可用才走 worktree 接手协议 —— ⛔ 不重跑原派发词;worktree 不新建;逐 hunk 读既 -有工作再决定;验证完整重跑;assignee/认领评论/分支全不动(既有认领的延续,不是新认领)。 +source 不随环境;② 派发词必带**自驱条款**;③ 交付通道 = dev 自开 draft PR + 终报以 issue 评论 +交付;④ **云卡 draft PR 一存在立即 `subscribe_pr_activity` —— 硬步骤**。云会话 `SendMessage` +not-reachable 是设计非故障(维护者 2026-08-11 裁定),⛔ 不复测。**接手中断的 dev**:先试 +SendMessage 复活,resume 不可用才走接手协议 —— ⛔ 不重跑原派发词;worktree 不新建;逐 hunk 读 +既有工作再决定;验证完整重跑;assignee/认领评论/分支全不动(既有认领的延续,不是新认领)。 ### 收集 diff --git a/.claude/skills/pm-dispatch/references/seat-post-protocol.md b/.claude/skills/pm-dispatch/references/seat-post-protocol.md index 860c084a5f..6bc18d6168 100644 --- a/.claude/skills/pm-dispatch/references/seat-post-protocol.md +++ b/.claude/skills/pm-dispatch/references/seat-post-protocol.md @@ -46,8 +46,12 @@ 任会话 ID、注销时间、队列快照、**热文件串行队**、跨车道备忘);⑤ 审计评论存档 (接任指引:`/pm-dispatch 接手` + 先读座位贴);⑥ `list_triggers` 清点本会话全 部自设定时器,逐个清理**或随移交物转交**(绑着移交中 PR 的定时器随 PR 转交,不 - 清);⑦ 向维护者交最终报告,含本任期沉淀的 SKILL 更新建议清单(查重后立单 —— 换 - 班复盘是交接的固定产物)。 + 清);⑦ 向维护者交最终报告 —— **不含 SKILL 更新建议清单**(该固定产物已退役,维护 + 者 2026-08-12 裁定;零建议是好班次)。任期观察只可按三类上报:① 原则错/缺(不变量 + 级,罕见)→ 经专题通道给 skills 席;② 可机械化项(提议门禁或脚本,⛔ 永不散文)→ + 正常立卡;③ 平台事实变化 → `references/` 事实表改一行。三类都以 `finding` 入 + skills 车道由该席分诊;三类之外默认关 not planned;「经验教训」散文不再入技能文 + 本 —— 防错住门禁,判断住模型档位,叙事教训是旧世界的补偿机制。 - **epic 委托不入座位贴体系**(父单正文自带会话与领地,`label:pm:epic` 即全量索 引);座位贴只记常设座位,一件事只记一处。`packages/spec` 恒归 spec 座位。