diff --git a/.claude/skills/pm-dispatch/references/lanes/cli.md b/.claude/skills/pm-dispatch/references/lanes/cli.md index 39c41c008b..4740dcbfd6 100644 --- a/.claude/skills/pm-dispatch/references/lanes/cli.md +++ b/.claude/skills/pm-dispatch/references/lanes/cli.md @@ -14,7 +14,6 @@ ## 常设承诺 -- **每轮巡检第一判据**:先读半状态巡查锚(`half-state-patrol.yml` 置顶 issue)点名本道卡/PR/座位贴的 H 行,逐行认领或处置,再做其余判据;锚行未处置 ⛔ 不开新派发。 - **Required checks 六个**:`TypeScript Type Check` · `Lint & Repo Gates` · `Test Core` · `Dogfood Regression Gate` · `Build Core` · `Temporal Conformance (live PG + MySQL)` —— 逐 job 读各自 `conclusion`,⛔ 不认 diff --git a/.claude/skills/pm-dispatch/references/lanes/devx.md b/.claude/skills/pm-dispatch/references/lanes/devx.md index 528d1f3d39..d962e510a7 100644 --- a/.claude/skills/pm-dispatch/references/lanes/devx.md +++ b/.claude/skills/pm-dispatch/references/lanes/devx.md @@ -15,7 +15,6 @@ ## 常设承诺 -- **每轮巡检第一判据**:先读半状态巡查锚(`half-state-patrol.yml` 置顶 issue)点名本道卡/PR/座位贴的 H 行,逐行认领或处置,再做其余判据;锚行未处置 ⛔ 不开新派发。 - `content/docs/releases/**` 是 release-owned,恰两条通道:完整性缺口逐卡批准 (⛔ 不构成先例);事实错误走专用 docs-only PR。发布页作用域只管 v16 及以后。 - ⛔ 不做任何发布动作,含改根 `version` 脚本链;**能点绿的门禁不等于该点绿**。 diff --git a/.claude/skills/pm-dispatch/references/lanes/engine.md b/.claude/skills/pm-dispatch/references/lanes/engine.md index 71c9ac04f8..34ab76633e 100644 --- a/.claude/skills/pm-dispatch/references/lanes/engine.md +++ b/.claude/skills/pm-dispatch/references/lanes/engine.md @@ -18,7 +18,6 @@ ## 常设承诺 -- **每轮巡检第一判据**:先读半状态巡查锚(`half-state-patrol.yml` 置顶 issue)点名本道卡/PR/座位贴的 H 行,逐行认领或处置,再做其余判据;锚行未处置 ⛔ 不开新派发。 - **投入冻结随包不随车道**:维护者 2026-08-05 对 `driver-memory` / `driver-mongodb` 族的投入冻结继续有效;能穿过冻结的形状是「消除静默失败模式」与 清账/对齐既有能力,形如**能力投资**的卡派发前须取裁决;`formula` / `driver-sql` diff --git a/.claude/skills/pm-dispatch/references/lanes/hotcrm.md b/.claude/skills/pm-dispatch/references/lanes/hotcrm.md index b4c93ad88a..3b717e6974 100644 --- a/.claude/skills/pm-dispatch/references/lanes/hotcrm.md +++ b/.claude/skills/pm-dispatch/references/lanes/hotcrm.md @@ -24,7 +24,6 @@ ## 常设承诺 -- **每轮巡检第一判据**:先读半状态巡查锚(`half-state-patrol.yml` 置顶 issue)点名本道卡/PR/座位贴的 H 行,逐行认领或处置,再做其余判据;锚行未处置 ⛔ 不开新派发。 - **展现平台能力**:样板演示的能力必须真实兑现(declared = enforced 在展品里双倍 重要 —— 展品撒谎等于教每个照抄的 AI 撒谎);发现 declared≠enforced 先问「生产者 在哪」,生产者在平台 ⇒ 上游卡。 diff --git a/.claude/skills/pm-dispatch/references/lanes/services.md b/.claude/skills/pm-dispatch/references/lanes/services.md index b339cbd40f..f3fd4177b2 100644 --- a/.claude/skills/pm-dispatch/references/lanes/services.md +++ b/.claude/skills/pm-dispatch/references/lanes/services.md @@ -14,7 +14,6 @@ ## 常设承诺 -- **每轮巡检第一判据**:先读半状态巡查锚(`half-state-patrol.yml` 置顶 issue)点名本道卡/PR/座位贴的 H 行,逐行认领或处置,再做其余判据;锚行未处置 ⛔ 不开新派发。 - **每条否定性 pin 都要消融验证**(被禁行为放回 → 测试转红 → 报失败输出 → 恢复) —— 单独的绿不是证据。 - **安全族卡的披露纪律**:复现配方不落任何公开面(卡、PR、评论);证据以抽象描述 diff --git a/.claude/skills/pm-dispatch/references/lanes/skills.md b/.claude/skills/pm-dispatch/references/lanes/skills.md index 5a7507bdf2..048af82e8c 100644 --- a/.claude/skills/pm-dispatch/references/lanes/skills.md +++ b/.claude/skills/pm-dispatch/references/lanes/skills.md @@ -14,7 +14,6 @@ ## 常设承诺 -- **每轮巡检第一判据**:先读半状态巡查锚(`half-state-patrol.yml` 置顶 issue)点名本道卡/PR/座位贴的 H 行,逐行认领或处置,再做其余判据;锚行未处置 ⛔ 不开新派发。 - 四维分析先于派发与复核。 - governed PR 恒 draft 等人合;flip/arm 前跑 `check-governed-merges --test`(带 路径);轮报的 governed 合并审计清单带 `--since` 四仓实跑,⛔ 不凭记忆汇总。 diff --git a/.claude/skills/pm-dispatch/references/lanes/spec.md b/.claude/skills/pm-dispatch/references/lanes/spec.md index f8c49b2a61..e1338f4b26 100644 --- a/.claude/skills/pm-dispatch/references/lanes/spec.md +++ b/.claude/skills/pm-dispatch/references/lanes/spec.md @@ -30,7 +30,6 @@ ## 常设承诺 -- **每轮巡检第一判据**:先读半状态巡查锚(`half-state-patrol.yml` 置顶 issue)点名本道卡/PR/座位贴的 H 行,逐行认领或处置,再做其余判据;锚行未处置 ⛔ 不开新派发。 - findings 首触定级归分诊席,本席只供证据。 - **待命巡逻每次做整车道全交集读**(delta 扫描有尾隙:扫描后、波次边界前入队的卡 谁都看不见;全交集读是安全网)。 diff --git a/.claude/skills/pm-dispatch/references/platform-readings.md b/.claude/skills/pm-dispatch/references/platform-readings.md index 03378e8592..a09f62668a 100644 --- a/.claude/skills/pm-dispatch/references/platform-readings.md +++ b/.claude/skills/pm-dispatch/references/platform-readings.md @@ -103,10 +103,9 @@ - **判「正文被截断」必须双读取**:`.body` 原文 + `Accept: application/vnd.github.full+json` 的 `.body_html`,两者同一处断掉才算 issue 端截断。读侧实测有确定性触发:正文含字面 script 开标记形状的 token(less-than 紧跟 script 字样;doctype 开标记、object 标签形状同触发)时,API/MCP 读回在该 token 处静默截断而网页全文完好 —— 存储体无损,⛔ 不「修复」只在 API 读短的卡:先 WebFetch 渲染页核对全文,重写会毁掉本来正确的正文。 **第三条读路径,同一个坑、读路径对调**:MCP `issue_read` / PR 读路径把**行内反引号里的尖括号片段整个吃掉**,而 GitHub 存储字节完好(raw REST 取回一字不差)⇒ ⛔ **永不单凭 MCP 读判截断,先取 raw REST 核对再判** —— 否则「repair-first」规则被**正确**地应用到一张完好的卡上,重写毁掉的是正确内容(同日三席独立观察,一次已到差点重写的地步,拦住它的只是那位 dev 自己的核验习惯 —— 无任何机械守卫)。判据 = 数**空的行内代码跨度**:一个空的行内代码恰是短尖括号片段被吃掉的签名(对照:一份读作 0 空跨度、10 个存活字面尖括号 tag 的正文即完好;阴性对照 —— 有的正文本来就把标识符不带尖括号写,所以判据是**尖括号**不是反引号);数字实体(撇号 / 引号成 `'` / `"`)是普通实体编码,**不是**截断证据(2026-08-23 实测)。 -- **落库删字节,网页同显、围栏不防护**:「less-than + 感叹号 + 左方括号」序列(markup-declaration 开标记,恰是负向后行断言接字符类的形状)里的感叹号在存储层被删,幸存文本仍像代码但意义已变;裸「less-than + 感叹号」存活;作者规则并入下一条。 -- 写侧另一半:sanitizer 在**写入时按 tag 形状删,不按尖括号**(2026-08-18 issue body 实测):行内反引号里的 tag 形状 token(读作未知 HTML 标签者 —— 注释标记、`` 类占位符、泛型)整个被删;孤立 less-than / greater-than 在行内代码**存活**;⛔ **围栏不防护 tag 形状 token**(2026-08-20 issue body 三写实测,推翻旧「围栏块整体存活」读数):HTML 注释形状标记裸写被整删留空行,入围栏照删留空围栏;非 tag 形状的带尖括号正则在围栏中实测存活(2026-08-18,上一条删感叹号仍另计);同日实测同类标记在**评论**里存活,但 ⛔ 不据此推「评论豁免」(下条:评论体照样被整段截断);裸标识符(无尖括号)存活 ⇒ SKILL 提取契约(字面文本 grep + 裸标识符回退)仍有效;写返回 200,损耗只在回读可见。 - 作者规则一条管三坑:必须字面携带 tag/script/markup-declaration 形状的文本进围栏并把危险字符用词拼出,或改花括号占位符(`{n}`)/整句用词描述;要字面尖括号写实体 `<` / `>`;含尖括号的任何写后回读逐个确认(失效完全静默;⛔ 回读不豁免评论 —— 2026-08-18/19 四次评论写入里那次未归因的标记缺席,归因在下条)。 -- **评论体也会被毁,形状是「截断」不是「删片段」**:sanitizer 从**首个命名 HTML 元素的尖括号片段**起,把评论体一路吃到结尾(2026-08-21 实测:一份用**字面文本**标记发出的 dev 报告评论,正文在 `this.error(` 处断掉、JSON 不可解析;同机制把记录此事的卡自己的正文也截在同一处)⇒ ⛔ **字面文本标记只保住标记、保不住正文** —— 标记扫描照报成功,人看着像正常收尾,只有真去解析才发现;引信是普通 TS 形状(`Promise`、`Array` 一类),不是奇异语法。安全过程:标识符一律进反引号,尖括号写实体或用词拼出,写后**回读尾部**确认正文结束在它该结束的地方,⛔ 只回读标记不算验证。⚠️ 边界:姊妹仓一次五形受控探针测到的是**选择性删除**(所有位置的 tag/注释被移除,不能开标签的尖括号实体化存活)而非截断到尾 —— 两种形状都实测过,写侧一律按最坏的截断防护。 +- **写侧 sanitizer 作者规则,一条管三坑**:必须字面携带 tag / script / markup-declaration 形状的文本进围栏并把危险字符**用词拼出**(⛔ 围栏本身不防护 —— 防护的是拼写,实测见下条),或改花括号占位符(`{n}`)/整句用词描述;要字面尖括号写实体 `<` / `>`;裸标识符(无尖括号)存活 ⇒ SKILL 提取契约(字面文本 grep + 裸标识符回退)仍有效。写返回 200,损耗只在回读可见 ⇒ **含尖括号的任何写后回读逐个确认**(失效完全静默);⛔ 回读不豁免评论(2026-08-18/19 四次评论写入里那次未归因的标记缺席,归因在下面的评论条),⛔ 只回读标记不算验证 —— 要**回读尾部**确认正文结束在它该结束的地方。 +- **写侧实测行为 · issue body(落库删字节,网页同显)**:sanitizer 按 **tag 形状**删、不按尖括号(2026-08-18 issue body 实测)—— 行内反引号里的 tag 形状 token(读作未知 HTML 标签者:注释标记、`` 类占位符、泛型)整个被删,HTML 注释形状标记裸写被整删留空行;孤立 less-than / greater-than 在行内代码**存活**。⛔ **围栏不防护 tag 形状 token**:入围栏照删、留空围栏(2026-08-20 issue body 三写实测);非 tag 形状的带尖括号正则在围栏中实测存活(2026-08-18)。**另一坑另计**:「less-than + 感叹号 + 左方括号」序列(markup-declaration 开标记,恰是负向后行断言接字符类的形状)里的感叹号在存储层被删,幸存文本仍像代码但意义已变;裸「less-than + 感叹号」存活。同日实测同类标记在**评论**里存活,但 ⛔ 不据此推「评论豁免」(下条:评论体照样被整段截断)。 +- **写侧实测行为 · 评论(形状是「截断」不是「删片段」)**:sanitizer 从**首个命名 HTML 元素的尖括号片段**起,把评论体一路吃到结尾(2026-08-21 实测:一份用**字面文本**标记发出的 dev 报告评论,正文在 `this.error(` 处断掉、JSON 不可解析;同机制把记录此事的卡自己的正文也截在同一处)⇒ ⛔ **字面文本标记只保住标记、保不住正文** —— 标记扫描照报成功,人看着像正常收尾,只有真去解析才发现;引信是普通 TS 形状(`Promise`、`Array` 一类),不是奇异语法;安全过程 = 标识符一律进反引号、尖括号写实体或用词拼出(回读纪律见上面的作者规则条)。⚠️ 边界:姊妹仓一次五形受控探针测到的是**选择性删除**(所有位置的 tag/注释被移除,不能开标签的尖括号实体化存活)而非截断到尾 —— 两种形状都实测过,**写侧一律按最坏的截断防护**。 - **并行 spec PR 同动 pin 计数断言**(被踢不是事故,按 os-regen 序再解一轮):解冲 突两侧收据都保留、按合并顺序堆叠,新计数**从合并后源码重数**(操作数是文件本身不是历史),⛔ 不从两侧收据做算术;双方占同一编号是常态(各取当时 max+1),重编号后进侧。 - **容器重启杀死在飞 dev,现场三态判读**:① 分支已推 + PR 已开 ⇒ 只欠验收(CI 重跑 + 复核,不动代码); diff --git a/.claude/skills/pm-dispatch/references/seat-post-protocol.md b/.claude/skills/pm-dispatch/references/seat-post-protocol.md index 2cbe5636c9..59e46df138 100644 --- a/.claude/skills/pm-dispatch/references/seat-post-protocol.md +++ b/.claude/skills/pm-dispatch/references/seat-post-protocol.md @@ -62,11 +62,11 @@ ## 座位 Routine 创建细则 -- 由维护者在 claude.ai 的 Routines UI 创建并勾选 GitHub 连接器 —— 会话内 - `create_trigger` 建的 fresh-session Routine 不携带连接器,fired 会话拿不到 - GitHub 工具,表现为**静默零产出**;⛔ 不要在会话里 create_trigger 出一个座位 - Routine 就当它在跑。模型不能经 API 钉住,同样在 UI 钉;Routine 继承环境默认模 - 型,环境默认变了它跟着变。 +- 由维护者在 claude.ai 的 Routines UI 创建 —— 凭据随 Routine 所挂 repo sources 走, + Routines UI 并无 GitHub 连接器入口(2026-08-23 实测)。会话内 `create_trigger` 的 + fresh-session Routine 不挂 repo sources ⇒ fired 会话拿不到 GitHub 工具,表现为 + **静默零产出**;⛔ 不要在会话里 create_trigger 出一个座位 Routine 就当它在跑。 + 模型不能经 API 钉住,同样在 UI 钉;Routine 继承环境默认模型,环境默认变了它跟着变。 - 创建后**先手动 fire 一轮烟测**,判据取 **GitHub 上的产出**(标签写入/审计评论/ 座位贴编辑),不取「会话看起来起来了」;零产出即技术性失败,回滚: `delete_trigger` + 清空座位登记 + 失败注记。 diff --git a/scripts/pm/check-skill-line-ratchet.mjs b/scripts/pm/check-skill-line-ratchet.mjs index 295a68c746..f1b9da2e73 100644 --- a/scripts/pm/check-skill-line-ratchet.mjs +++ b/scripts/pm/check-skill-line-ratchet.mjs @@ -110,7 +110,10 @@ export const CEILINGS = new Map([ // 2026-08-20: the four-facet analysis must argue from the business // standpoint). Set at landed line count (headroom 0, same convention). ['.claude/skills/pm-dispatch/references/decision-analysis.md', 38], - ['.claude/skills/pm-dispatch/references/platform-readings.md', 134], + // 134 → 133: whole-text restructuring round, PR-2 (maintainer ruling + // 2026-08-23) — the three write-side sanitizer rows consolidated to one + // author rule + one measured-behaviour row per surface (body / comment). + ['.claude/skills/pm-dispatch/references/platform-readings.md', 133], ['.claude/skills/pm-dispatch/references/review-checklist.md', 82], ['.claude/skills/pm-dispatch/references/landing-operations.md', 82], // Release-aftercare duties — what a lane PM still owes AFTER a tagged release @@ -126,16 +129,21 @@ export const CEILINGS = new Map([ // Lane job descriptions (maintainer ruling 2026-08-19: per-lane PM job // descriptions move from seat-post prose into versioned skill references). // Set at landed line counts (headroom 0, same convention as above). - ['.claude/skills/pm-dispatch/references/lanes/engine.md', 41], - ['.claude/skills/pm-dispatch/references/lanes/services.md', 31], - ['.claude/skills/pm-dispatch/references/lanes/cli.md', 37], - ['.claude/skills/pm-dispatch/references/lanes/devx.md', 38], - ['.claude/skills/pm-dispatch/references/lanes/skills.md', 36], - ['.claude/skills/pm-dispatch/references/lanes/spec.md', 44], + // Each −1: whole-text restructuring round, PR-2 (maintainer ruling + // 2026-08-23) — the patrol-anchor sentence was carried verbatim by all seven + // lanes and now lives once in SKILL.md 执行座位职责, so every lane drops it. + // cli.md pays −2 because it was carrying the map's last line of headroom. + ['.claude/skills/pm-dispatch/references/lanes/engine.md', 40], + ['.claude/skills/pm-dispatch/references/lanes/services.md', 30], + ['.claude/skills/pm-dispatch/references/lanes/cli.md', 35], + ['.claude/skills/pm-dispatch/references/lanes/devx.md', 37], + ['.claude/skills/pm-dispatch/references/lanes/skills.md', 35], + ['.claude/skills/pm-dispatch/references/lanes/spec.md', 43], // repo:hotcrm lane charter (maintainer rulings 2026-08-20: exemplar-app repo — // platform capabilities implemented upstream, 展现平台能力, 不扩散需求, runs on // community edition). Set at landed line count (headroom 0, same convention). - ['.claude/skills/pm-dispatch/references/lanes/hotcrm.md', 45], + // 45 → 44: same patrol-anchor hoist deletion as the six lanes above. + ['.claude/skills/pm-dispatch/references/lanes/hotcrm.md', 44], // 399 → 405 (#11126): maintainer-ruled (2026-08-23, option B, quoted in that // PR) — the +6-line cross-repo dispatch-gates caveat, sized so the queued // #11137 (395→399 on main) and this PR's +6 compose to exactly 405.