diff --git a/.claude/agents/os-dev.md b/.claude/agents/os-dev.md index a712a14c2b..e169ceda72 100644 --- a/.claude/agents/os-dev.md +++ b/.claude/agents/os-dev.md @@ -412,9 +412,9 @@ not decoration:** 2026-08-04:这是创业项目,核心能力优先):能力扩张默认从紧,无拉动的声明面按 implementation-first 处置,已发布零消费的能力不因沉没成本获得豁免。 -Your recommendation must be justified on all four axes;四轴冲突时如实呈现权衡,交维护 -者拍板。同样,`main` 在你脚下碎了、依赖未合并、CI 基础设施故障时,返回 `blocked`(附证 -据)—— 先重试到足以确认不是你的改动。 +Your recommendation must be justified on all four axes;四轴冲突时推荐按拉动排序:实测拉动→长远, +零拉动→不扩散,防错破平,安全与难逆恒人工(只排推荐);权衡如实呈现交维护者拍板。`main` +在你脚下碎了、依赖未合并、CI 基础设施故障⇒`blocked`(附证据),重试到足以排除你的改动。 ## 终报消息 —— 恰好这段 JSON,不带任何环绕散文 diff --git a/.claude/skills/pm-dispatch/SKILL.md b/.claude/skills/pm-dispatch/SKILL.md index d4abba29c2..391ceffa6f 100644 --- a/.claude/skills/pm-dispatch/SKILL.md +++ b/.claude/skills/pm-dispatch/SKILL.md @@ -868,9 +868,17 @@ finding 定级换结果态,永不留挂)/ `Blocked-by:` 活性现验(合并一 - **创业阶段不扩散需求** — **创业阶段聚焦原则**(维护者 2026-08-04 指示: 「我们是一个创业项目,应该先专注于核心能力」):能力扩张默认从紧, 无拉动的声明面按 implementation-first 处置,已发布零消费的能力不因沉没成本获得豁免。 + **过渡也从紧 —— 创业阶段不渐进**(维护者 2026-08-27 裁,逐字:「项目在创业阶段, + 用户也很少,短期不考虑渐进。」):废弃别名/拼写与能力退役默认**立即退休**, + 不设分阶段窗口、不留双拼写宽限;staged 选项仅凭具名外部用户证据才可呈报为推荐。 推荐意见必须基于这四条轴给出理由;四轴冲突时如实呈现权衡, -交维护者拍板。**标准四棱卡面块是落卡与升级的必备件**(四棱维护者 2026-08-11 接受; +交维护者拍板。**分歧推荐序按拉动定向**(维护者 2026-08-27 裁「tong y 4」): +有实测拉动 ⇒ 荐长远形态一次付清;零拉动 ⇒ 荐不扩散(defer/remove、记录在案、重开自由); +防错轴破余下平局向响亮/结构性;安全/权限边界与破坏性难逆动作恒在人工地板。 +⛔ 此序只排推荐:分歧块照旧升级,四棱同向置信门与代裁面不变, +细则见 `references/decision-analysis.md`。 +**标准四棱卡面块是落卡与升级的必备件**(四棱维护者 2026-08-11 接受; 标准块 2026-08-18 裁定「同意」;同裁定的摘要视图/批量决裁通道已退役, 墓碑与原话见 `references/lanes/director.md`;收件箱由维护者定期与 AI 讨论消化,⛔ 不 assign 推送 —— 维护者 2026-08-19 裁定:「我感觉决策卡推给我太麻烦了,我需要和ai讨论才能判断, @@ -904,6 +912,11 @@ skills和决裁。」的归属半句,skills 面与其车道照旧归 skills 席) 发布动作的完整清单与「围绕发布的工作照旧归座位」细则以 AGENTS.md「release act」 段为权威,含**合并 Version Packages PR**)。发现未经人工的发布痕迹按事故立案, ⛔ 不代跑补救性发布 —— 机械通道的存在不构成授权,遇到那类通道当缺陷上报。 +- **发版提醒纪律**(维护者 2026-08-27 拍板,逐字:「要发版本我会自己点。 + 除非重要修复要发版本你可以提醒我。」):Version Packages PR 默认永不催 —— + 挂着的发布 PR 是常态,⛔ 不进维护者摘要;唯一例外 = 重要修复已合 main 在等发布, + 且提醒必须点名该修复与不发版的用户可见后果,让维护者仅凭提醒即可判缓急; + 与上条相组合 —— 本条管**何时开口**,上条管**谁动手**。 - **Governed 面由维护者人工合并,合并即审核记录**(三裁一脉:2026-08-08 「adr 只能由维护者自己确认,人工合并,ai 不得擅自合并」;2026-08-11「所有 skills 的更新和adr 类似,需要人工审核」;2026-08-18 对「人工合并即人工审核,事后审计代替事前门」 diff --git a/.claude/skills/pm-dispatch/references/decision-analysis.md b/.claude/skills/pm-dispatch/references/decision-analysis.md index 883fee749f..e8dcd1b3f4 100644 --- a/.claude/skills/pm-dispatch/references/decision-analysis.md +++ b/.claude/skills/pm-dispatch/references/decision-analysis.md @@ -42,3 +42,5 @@ ④ 创业阶段不扩散(remove 优于 declare-and-maintain,每个已声明的键都是永久义务); 一行推荐 + 字母选项(A/B/…);**一行强制置信缺口(「本分析看不见什么」)**。 四棱行同受六项约束:每行论据从业务立场写,机制名词只作括号补充。 +**四棱分歧推荐序**(2026-08-27「tong y 4」):②实测拉动⇒荐①长远终态;零拉动⇒荐④不扩散; +③破余下平局向响亮/结构;安全与难逆恒人工;⛔ 只排推荐,分歧照旧升级、代裁面不扩。 diff --git a/.claude/skills/pm-dispatch/references/lanes/director.md b/.claude/skills/pm-dispatch/references/lanes/director.md index b0e1bde6e8..b117d22706 100644 --- a/.claude/skills/pm-dispatch/references/lanes/director.md +++ b/.claude/skills/pm-dispatch/references/lanes/director.md @@ -25,6 +25,8 @@ issue 编号;机器判据恒英文,引文逐字不译。 策」四轴(`check:skill-frame-sync` 管的四份拷贝不动,⛔ 本文不复制框架本体)。 - 本原则重锚 2026-08-26 流程裁定(「决裁流程今天这样很好,决策卡5张一组,从业务的角度给我具体解 释,说明可选项,并进行四维分析。应该写入技能。」):流程未变,2026-08-26 定流程、2026-08-27 升格定归属。 +- **创业阶段不渐进**(维护者 2026-08-27,逐字:「创业阶段不渐进 应该写入项目总监skills」): + 废弃别名与退役默认立即退休,无窗口无双拼写宽限;staged 仅凭具名外部用户证据可荐。 ## 职责一:`needs:contract-review` 复审链 diff --git a/.claude/skills/pm-dispatch/references/review-checklist.md b/.claude/skills/pm-dispatch/references/review-checklist.md index c70b0715c9..6dac1939f6 100644 --- a/.claude/skills/pm-dispatch/references/review-checklist.md +++ b/.claude/skills/pm-dispatch/references/review-checklist.md @@ -5,11 +5,11 @@ - **PR 形态**:存在、是 draft、目标 `main`、正文首行引用卡片 —— **`Fixes #` 仅当合并应当关卡**;只落地了可实施一半(另一半在决策箱或按范围排除) - ⇒ 必须 `Part of #`,否则合并会静默关掉一张正躺在决策箱里的卡, - 而 `needs-user-decision` 的收件箱过滤只看 open issue。翻 ready 之前亲核首行,别只信报告。 -- **闭合关键词两读**: - 翻 ready 前亲扫正文 —— 合并前唯一的人工关口(⛔ 关键词永不挨着另一张 open 卡编号; - 解析器不理会否定句);合并后那一读见落地细则,解析事实见平台读数。 + ⇒ 必须 `Part of #`,否则合并静默关掉决策箱里的卡(收件箱过滤只看 open)。⚠️ 切 + `Part of` 的正文最易再武装自动关闭:解释「为何不关」的记账句(谁在合并后手动关卡)、 + 否定句、引号/反引号包裹,解析器一律照关;安全拼法 = 卡号旁零动词,关闭安排写进评论。 +- **闭合关键词两读**:翻 ready 前亲核首行、亲扫全正文(⛔ 关键词永不挨另一张 open 卡编号) + —— 合并前唯一的人工关口,别只信报告;合并后那一读见落地细则,解析事实见平台读数。 - **`Part of` 收口的卡不会自动关,`pm:dispatched` 必须手工摘**(动作要件见落地细则 B): ACCEPT 那一刻记进落地待办,⛔ 不留给下次巡检 —— 漏摘让在飞视图多算一张无主开卡。 - **范围检查**(取 changed files,⛔ 不看报告自述):无 `content/docs/releases/` 改动、 diff --git a/scripts/check-skills-token-ratchet.mjs b/scripts/check-skills-token-ratchet.mjs index f10f742287..1c34a0aeb3 100644 --- a/scripts/check-skills-token-ratchet.mjs +++ b/scripts/check-skills-token-ratchet.mjs @@ -263,9 +263,14 @@ export const CEILINGS = new Map([ ['skills/objectstack-formula/SKILL.md', 6002], // -53 (was 6055) ['skills/objectstack-i18n/SKILL.md', 6338], // -11 (was 6349) ['skills/objectstack-platform/SKILL.md', 12705], // -11 (was 12716) - // Unchanged: this skill's only id-shaped tokens are a CLI usage line and a - // JSON shape example. The one edit there (`#457` -> `#`) is byte-neutral. - ['skills/objectstack-pm-dispatch/SKILL.md', 14239], + // 14239 -> 14391: the pull-directed split-resolution order joined the decision + // frame (maintainer ruling 2026-08-27, verbatim and untranslated: 「tong y 4」 — + // accepting the four-rule set), and this file carries TWO enforced frame copies + // (check:skill-frame-sync COPIES), so the rule ships to third-party installers + // with the frame it amends — the #5130 drift is exactly a frame-semantics change + // that skipped this mirror. +152 tokens across both copies, compressed to the + // minimal anchor form; the raising PR's body carries the arithmetic. + ['skills/objectstack-pm-dispatch/SKILL.md', 14391], ['skills/objectstack-query/SKILL.md', 5552], // -17 (was 5569) ['skills/objectstack-ui/SKILL.md', 25125], // -29 (was 25154) ['skills/objectstack-upgrade/SKILL.md', 8333], // -2 (was 8335) @@ -713,8 +718,11 @@ function selfTest() { // ⚠️ Scoped to the SKILL.md rows since #12392 widened the map: summing ALL // ceilings would compare this re-measure's subtotal against a total that // now includes 27 rows it never touched, which is a different claim. + // 117943 -> 118095: shifted by exactly the +152 ruling-authorized raise on + // the pm-dispatch row (2026-08-27 「tong y 4」, see that row), so the strip's + // lowering claim keeps its original slack instead of being silently eaten. ['the re-measure lowered the SKILL.md subtotal', - skillMdCeilings.reduce((a, [, n]) => a + n, 0) < 117943, true], + skillMdCeilings.reduce((a, [, n]) => a + n, 0) < 118095, true], // ── the #12392 extension basis ─────────────────────────────────────── // Same reasoning as the pins above: the gate never reads this sha, so it diff --git a/scripts/pm/check-skill-line-ratchet.mjs b/scripts/pm/check-skill-line-ratchet.mjs index 637259a7f7..0f38a1cb10 100644 --- a/scripts/pm/check-skill-line-ratchet.mjs +++ b/scripts/pm/check-skill-line-ratchet.mjs @@ -312,7 +312,12 @@ export const CEILINGS = new Map([ // the maintainer-action ledger. A lane charter is read per seat session like // every entry above. Set at the landed line count read from this ratchet's own // run (headroom 0, same convention as the entries above). - ['.claude/skills/pm-dispatch/references/lanes/director.md', 75], + // 75 → 77: maintainer-directed placement (2026-08-27, verbatim: 「创业阶段不渐进 + // 应该写入项目总监skills」) — the no-gradualism standing rule lands here by that + // directive; the file sat at headroom 0 with no losslessly compressible slack in + // the touched sections (arithmetic in the raising PR), so the directive is the + // ruling that pays for exactly the two lines it dictates. + ['.claude/skills/pm-dispatch/references/lanes/director.md', 77], // 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. diff --git a/skills/objectstack-pm-dispatch/SKILL.md b/skills/objectstack-pm-dispatch/SKILL.md index e9032fe4d4..39dd53f775 100644 --- a/skills/objectstack-pm-dispatch/SKILL.md +++ b/skills/objectstack-pm-dispatch/SKILL.md @@ -692,7 +692,12 @@ forming, more permissive once it is stable — and this axis reads it from there like every other project-specific rule. Your recommendation must be justified on **all four** axes. If they conflict, -present the trade-off honestly and let the maintainer decide. +present the trade-off honestly and let the maintainer decide. When they split, +rank the recommendation **pull-first**: real measured pull → the long-term +shape; zero pull → non-proliferation (defer/remove, record, reopen freely); +the AI-safety axis breaks remaining ties toward the loud option; security and +destructive actions stay with the human. The order ranks recommendations +only — a split still escalates. ### 9. Round report, then next round @@ -841,7 +846,10 @@ Analyze every option on four fixed axes: declaration. How tight the default is comes from the project's conventions file, not from this template. Justify your recommendation on all four axes; if they conflict, present the -trade-off and let the maintainer decide. +trade-off and let the maintainer decide, ranking the recommendation pull-first +(real pull → long-term shape; zero pull → non-proliferation; the AI-safety +axis breaks ties; security/destructive → always the maintainer); the ranking +orders recommendations only — a split still escalates. Return "blocked" (with evidence) when the default branch is broken under you, a dependency issue is unmerged, or CI infrastructure fails — after retrying