docs(pm-dispatch): 三条 fleet-wide hazard 写进 SKILL —— 定点文本写法纪律、sanitizer 写侧就地删除、判死门槛 (#6393) - #6460
Merged
Merged
Conversation
…r 写侧就地删除、判死门槛 (#6393) 三条 hazard 均为 2026-08-07 实测,跨 domain:spec-surface 与 domain:devx 两个座位: 1. 已删除的 send_later 定时器仍会投递,且文本可能落后现实数轮(三次实测)。 落点 Operational note 3 新增「定点文本的写法纪律」,step 6 巡检定点与 step 7 flip 定点各加一条同款约束:文本以「幂等 —— 动手前先重读状态」开头,只描述 判据(若 X 则 Y),不描述结论(现在去做 Y)。 2. GitHub sanitizer 就地吞掉尖括号片段,反引号不提供保护。落点 Operational note 12 —— 原有的「读侧截断」两条一字未改、依旧成立,新增的是同一个 sanitizer 的第二种失效形态(写侧就地删除),附三例写后回读实测对照表。 3. 45 分钟是探针门槛,不是判死门槛。落点 step 6 —— 探针门槛保留不动,新增判死 的三类正当依据与「先建基线再判」。两条实测基线带出处写成样例,明确标注 不是全车队常数(两席九单跨越 ~64 分钟到近 3 小时)。 发布件 skills/objectstack-pm-dispatch/SKILL.md 三条逐条核实后加泛化版(机制描述, 不含 lane/seat/domain:* 词汇):step 6 加「check-in 写成判据」与「静默门槛是收集 边界而非判死」,step 4 加认领评论的写后回读(其占位符正是被吞的形态)。 三轴决策框架 4 份拷贝逐字节未变(diff/cmp/md5 三重取证 + frame-sync 绿)。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BDmDsu2575gDxeMCxXhDE3
|
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
hotlong
marked this pull request as ready for review
August 7, 2026 22:51
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 #6393
把 #6393 立单人给出的三条 fleet-wide hazard 写进
.claude/skills/pm-dispatch/SKILL.md,并按 #5451 route B 逐条核实后给发布件skills/objectstack-pm-dispatch/SKILL.md加机制级泛化版。三条 hazard 均为 2026-08-07 实测,且跨两个座位(domain:spec-surface立单席 +domain:devx认领席)独立复现。纯文档 / 内部流程纪律,不发布任何包 ⇒skip-changeset。1. 三条落点 before / after
危险 1 —— 已删除的
send_later定时器仍会投递,且文本可能落后现实数轮完整待执行状态写进 send_later 定点文本之后新增一段)+ step 6 巡检定点条款 + step 7 flip 定点条款,共 3 处⇒ 重新派发/⇒ 判为不可靠/⇒ 打回不 arm点名为要禁的形态。step 6 / step 7 各挂一条同款约束并回指 note 3明确写进 after 的合成关系,避免读者以为是覆写:上面第一条让文本完整,这一条让它过期时仍然安全;两条是同一枪的两面。
危险 2 —— sanitizer 就地吞掉尖括号片段,反引号不提供保护
body+body_html在同一处断掉才算 issue 端截断)、Repair first的停摆成本。0 处提「反引号」「HTML 实体」「就地删除」危险 3 —— 探针门槛 ≠ 判死门槛
派发后 ~45 分钟无任何远程产出即到探活门槛给的是探针门槛;全文 0 处出现「判死」,PM 面对的「多久之后可以下『它死了』的结论」无答案mode:cloud的 ~2h 静默显式定性为本轮收集边界而非判死机械 before/after 判别(实测,非论证)
对
origin/main与本分支各 grep 一次判别串,origin/main全为 0:origin/main幂等 —— 动手前先重读状态已删除的定时器只许描述**判据**反引号HTML 实体就地删除判死发布件同法:
idempotent — re-read the state/State criteria/collection boundary, not a verdict/baseline you have actually measured/backticks do not protect/read it back and confirm——origin/main全 0,本分支各 1。2. 声明 A —— 三条规则各自代入真实历史案例(论证式验证,非实测)
delete_trigger的定时器仍投递,文本写「判为不可靠 ⇒ 重新派发一个 fresh os-dev,worktree 已存在」,而 PR #6389 早已交付并通过复核<!-- os-dev-report -->存回为空;expected <n> to be 19存回expected to be 19;git log -- <path>存回git log --body与body_html在同一处断掉才算 issue 端截断」。这三例正文没有断点,双读取一致地报告「正文完整」⇒ 判定为「没有 sanitizer 问题」,而标记确实已经消失3. 声明 B —— 既有主张未被改写(实测)
note 12 的读侧主张逐字仍在。 按内容锚点抽出 note 12 整段(从
**12. 判「正文被 sanitizer 截断」到**13. MCP 工具的两个参数语义陷阱),对origin/main与本分支各抽一次后diff:⇒ 26 行原文一行未删、一行未改,新增 25 行。整份 diff 的删除行全仓只有 1 行:
即原句原文照旧、仅在其后追加从句,不是替换。
step 6 的 45 分钟探针门槛仍在且未被判死门槛取代。
派发后 ~45 分钟无任何远程产出即到探活门槛与批量在飞期间,主巡检间隔不得长于 45 分钟两条均未进入 diff 的删除侧;新增段第一句即45 分钟是发探针的门槛,⛔ 不是判死的门槛 —— 两者必须分开,并在末尾把两个既有数字的分工写死:45 分钟 = 探活门槛;mode:cloud的 ~2h = 本轮收集边界;两者都不是判死。4. 基线的出处标注(⛔ 非全车队常数)
写进 step 6 的表带出处、标形态,并在表前一句明写「只是出处样例,⛔ 不是全车队常数 —— 卡片形态不同,区间没有理由相同,driver 或 engine-core 的重活不适用下表」:
domain:spec-surface席,2026-08-07(#6393)domain:devx席,2026-08-07(#6393 认领评论)规则句是「基线是你自己车道实测的完工耗时,⛔ 不是本文里的任何常数;没有基线就先建基线再判」。
5. 发布件逐条核实结论(#5451 route B)
读
skills/objectstack-pm-dispatch/SKILL.md全文后逐条判定。参照 #6405 的实测结论:发布件没有 lane / seat /domain:*词汇,pm:*状态也只定义了一部分 ⇒ 泛化一律写成机制描述,⛔ 不照抄本仓词汇、不引入本仓 issue 号。Arm a check-in (~15 min); on each wake, sweep … then re-arm silently—— 同一个「把文本投进未来」的机制,只是不点工具名Repair first只覆盖读侧截断Repair first的截断形态silent for over ~2 h (count it as blocked and move on)是唯一的时间阈值;发布件没有 45 分钟探针门槛发布件三条都有同构面 ⇒ 三条都加了泛化版,没有一条是硬塞的。
role词计数核对:改后仍为 0(grep -oiE '\brole(s)?\b' | wc -l⇒ 0),check:role-word绿。6. 声明 C —— 三轴决策框架逐字节未变(实测,三重取证)
按内容锚点抽出 4 份拷贝(跨 3 文件),改前改后各抽一次:
.claude/skills/pm-dispatch/SKILL.mdstep 831b2bb67ea03b2804d32aaae4666cbccskills/objectstack-pm-dispatch/SKILL.md自有 frame 段e35b5f9233d1761371f669f8ff4c6cfe1800b99f4d111762aff5cafbcd729182.claude/agents/os-dev.md0da1ba478dac2885c662ea2672694726check:skill-frame-sync改前改后均 EXIT 0(4 copies … structurally isomorphic across 3 files,3 轴顺序business-need → long-term-soundness → ai-authoring-safety)。check:skill-frame-freshness的输出行由改前的3/3 framework files are byte-identical to the ref变为改后的1/3。原因是该计数比的是整份文件、不是 frame 段,而本 PR 恰好动了 3 份文件中的 2 份;该 gate 同一次输出里明写the frame itself is unchanged — that is fine且wording differences are not drift,EXIT 仍为 0。frame 段本身未变的证据是上表的 cmp/md5,不是这个计数。7. 与 #6410 的关系 —— 相邻但不合并
#6410(semantic-ruling 模板要带 compiler-face 清单)落在同一个文件的 step 5 派发词 区域,与本 PR 的四处落点(note 3 / note 12 / step 6 / step 7)无一行重叠;两者评审面不同(前者是语义裁决的派发清单,后者是定时器 / sanitizer / 判死门槛三条运维纪律),本座位按串行派发。⇒ 分开 commit、分开 rationale,不搭车。本 PR 未触碰 step 5 的任何一行。
8. 门禁 EXIT 表(
git add之后运行)pnpm check:skill-frame-syncpnpm check:skill-frame-freshnessthe frame itself is unchanged — that is fine(见第 6 节读数说明)pnpm check:doc-authoringpnpm check:role-wordrole计数仍为 0pnpm check:nul-bytesgrep -naP '[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]'pnpm --filter @objectstack/spec check:skill-docs✅ Skill docs in sync9. 本 PR 正文的自证 —— 危险 2 在本 PR 里当场复现(dogfood,实测)
本 PR 正文里所有字面尖括号一律写 HTML 实体。为了给危险 2 留一条当场可复现的证据,下表第二行故意写成裸尖括号、且放在反引号里(正是立单人测过的「反引号不保护」形态)。PR 创建后立刻读回
.body逐段比对,危险 2 在本 PR 自己的正文里当场复现:.body实测结果&lt;n&gt;⇒ 渲染成<n>&lt;n&gt;与<n>两段一字不差<probe>三点值得记:
.body与写入原文逐段对比才看得见。本 PR 因此是这条 hazard 的第 4 个实测样本(立单人 3 例 + 本例),也是它第一次在跨座位之外被独立复现。10. 不在本 PR 里(边界申明)
content/docs/references/**重生成)未写进 SKILL —— 分诊评论明示它是车道局部、权威副本在 [PM seat] domain:spec-surface — 🟢 os-project-manager #6298,a PR touching it would be a rider。本 PR 一字未提。.claude/agents/os-dev.md、其它 skill、content/docs/releases/**、[PM seat] domain:spec-surface — 🟢 os-project-manager #6298。skip-changeset标签路线。