Skip to content

docs(pm-dispatch,os-dev): 增补三条 operational note —— advisory 门禁红着合并、死掉的 dev ≠ 维护者中止、截断判读双读取 (#5741) - #5909

Merged
os-zhuang merged 1 commit into
mainfrom
claude/issue-5741-pm-skill-notes
Aug 6, 2026
Merged

docs(pm-dispatch,os-dev): 增补三条 operational note —— advisory 门禁红着合并、死掉的 dev ≠ 维护者中止、截断判读双读取 (#5741)#5909
os-zhuang merged 1 commit into
mainfrom
claude/issue-5741-pm-skill-notes

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

Fixes #5741

(派发令写的是 Closes #5741 —— duplicate-fix-guard 的关键词集两者同权,这里取仓内现行写法 Fixes,与 step 7 复核判据一致。仓内无 pull_request_template.md,版式沿用同文件前序单 PR #5877。)

基于合并了 PR #5877 之后的 main(73571306b,含 28de40f11 = #5845/#5877 对本文件的 B 段重写与 notes 6 第四条 bullet)开工。零发明整合:三条 note 的正文由原作者(issue 正文)与分诊轮评论拟好,本 PR 只做落稿、锚定证据链、维护编号与计数一致性。

单仓两文件:.claude/skills/pm-dispatch/SKILL.md(+70/-1)、.claude/agents/os-dev.md(+14)。⛔ 产品码零改动,⛔ 未触碰 content/docs/releases/

落点 × 事实源(逐条可比对)

条目 落点 实测事实源
note 10 advisory 门禁红着合并会毒化全仓 Operational notes 新增第 10 条 PR #5584 的 ESLint job(id 92425566733)conclusion: failurecompleted_at 19:53:08Z;PR merged_at 20:12:26Z ⇒ 红后 19 分 18 秒过队合并,同 PR 其余 23 个检查全绿。毒化实例 #5601(job 92432801994,同一条同行号),热修 PR #5615,治理 issue #5617
note 11 死掉的 dev 子代理 ≠ 维护者中止 新增第 11 条 #5085 评论时间线:08-05 07:00Z「已被维护者手动中止」(推断)→ 08-06 02:42Z 维护者确认误判、门解除;同一单 08-06 04:12Z 另有一次中止(宿主明确回报 stopped by the user),04:14Z 维护者示意重派
note 12 截断判读必须双读取 新增第 12 条 分诊轮评论 + 本 PR 复测:REST body 实测 4321 / 5183 / 4181 字符(#5148 / #5149 / #5164),body_htmlapplication/vnd.github.full+json 才返回(#5148 实测 6958 字符,结尾完整)
step 7 一行 报告到达 ≠ CI 收敛 step 7 复核清单,紧随「测试证据」那条 #5617 正文「PM 验收纪律同步收紧:arm auto-merge 前核 ESLint 结论为 completed/success(此前只核『无 failure』,在 in_progress 时 arm 会漏)」
os-dev 配套一行 等 CI 收敛再交报告 os-dev.mdDefinition of done 列表(无编号),skip-changeset 条之后 PR #5615 正文第 2 条自述:「push 完开了 draft PR 就直接返回了结构化报告,没有回看自己 PR 的 CI 结论……今后 PR 开完要等 CI 收敛再交报告」

三处按实测收紧了拟稿

  1. 门压时长:拟稿写「一整天」,实测是 08-05 07:00Z 立门到 08-06 02:42Z 解除 = 近 20 小时,照实写。
  2. note 11 补上真中止的对照半边:拟稿只有误判一侧。同一条 /auth/* 转发层把内部请求对象直接交给 better-auth:未知 auth 子路径(如 POST /api/v1/auth/login)返回 500 并外漏内部 TypeError,而非干净 404/405 #5085 上两种都出过,而症状完全一样(零推送、无分支)—— 所以 note 的判据落在「有无显式信号」(维护者原话,或宿主回报 stopped by the user),而不是落在症状上。这半边是 /auth/* 转发层把内部请求对象直接交给 better-auth:未知 auth 子路径(如 POST /api/v1/auth/login)返回 500 并外漏内部 TypeError,而非干净 404/405 #5085 04:12Z 评论原话,不是发明。
  3. 那道门的实际形态:它只写在「认领解除」评论里,标签退回了 pm:queue —— 队列视图显示可派发而谁也不敢派,比 pm:on-hold 更隐蔽(状态机根本读不到它)。拟稿说的是「立成 pm:on-hold」,照实改并保留纪律结论(真要 hold 就 pm:on-hold + 带重启条件的评论成对落地)。

另有两处与拟稿的计数不符,按实测办:派发令说「四条 operational note」,但 issue 与分诊轮加起来只拟了三条 note 正文(issue ① / issue ③ / 分诊轮第四条),issue 的 ② 本身就是「step 7 一行 + os-dev 一行」的配套、没有 note 正文 —— 故本 PR 落三条 note,⛔ 不发明第四条。现有 notes 最大编号实测为 9,新条顺延为 10 / 11 / 12(与 issue 猜的区间恰好一致,但取自实测)。

一致性与不动区

  • 段首计数「队列与平台层的九条实测结论」→「十二条」。全文 N 条式引用已逐一 grep,只此一处指 notes 总数。仓内其它文档(含发布版 skills/objectstack-pm-dispatch/SKILL.md)无本节计数镜像,无需同步。
  • 交叉引用全部核实存在于现行文本:notes 6 的「零命中必须用一个『确定存在的邻近词』反查」、notes 7 的「更正要发在同样公开的位置」、step 0 的 Repair first 分类、step 4 的 Stale-claim reclaim、step 5 的「Handing off an interrupted dev」、step 6 的探活、step 7 ACCEPT 的 once every check on the PR is green、状态模型的「Label + comment land as a pair」。
  • 既有 notes 1–9 逐字节未动(diff 原 113–243 行,零差异);标题结构与 origin/main 逐行相同;决策框架四份拷贝未触碰(同构门禁绿)。
  • os-dev 的新条目加在无编号Definition of done 列表里,不触碰 resource rule 1/6(rule 6) 等既有编号交叉引用(同 docs(agents): os-dev isolates scratchpad temp files in a per-issue subdir (#5614) #5727 的保序做法)。它并显式声明这次等待是前台阻塞轮询(等同 resource rule 1 的 flock),⛔ 不是可以中途返回的后台守望 —— 否则新条会与 resource rule 6 读起来冲突。
  • 门禁族与 job 的归属是实测的,不是照抄:grep .github/workflows/lint.yml 确认 check:route-envelope(:203)、check:error-code-casing(:212)、check:engine-double-contract(:382)都是 job lint(显示名 ESLint)的步骤,typecheck job 显示名为 TypeScript Type Check

验证

node scripts/check-skill-frame-sync.mjs --self-test
  ✓ check-skill-frame-sync self-test: 12 cases pass.
node scripts/check-skill-frame-sync.mjs
  ✓ 4 copies of the decision frame are structurally isomorphic across 3 files
    3 axes: business-need → long-term-soundness → ai-authoring-safety
    binding sentence present in all 4; 4 count mention(s) agree; 39 markdown files scanned
node scripts/check-nul-bytes.mjs
  check-nul-bytes: OK (scanned 5704 tracked text file(s); no raw ASCII control bytes).
node scripts/check-doc-authoring.mjs
  ✓ doc authoring guard: 362 files clean — no bare metadata literals.
node scripts/check-role-word.mjs
  check-role-word: OK (43 baselined file(s), no new occurrences).

改动文件控制字符自扫 grep -naP '[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]' → 零命中。无代码改动 ⇒ 无受影响包可 test / typecheck;.claude/ 内部 agent 工具、无发布物 ⇒ 无 changeset,走 skip-changeset 标签路线(同 PR #5877)。


Generated by Claude Code

…5741)

一天实操撞到的三个坑,SKILL.md 现状未覆盖,按「每条 operational note 是被咬过
之后写下的」体例落稿。既有 notes 1-9 与决策框架四份拷贝一字未动。

- note 10「合并前认门禁 job 的结论,不认聚合读数」:PR #5584 的 ESLint job
  19:53:08Z 结论 failure,PR 在 20:12:26Z(红后 19 分钟)照常过队合并,这条红
  随 main 的 merge ref 进了每个后续 PR 的 ESLint job(#5601 job 92432801994),
  热修 #5615 才解除;治理半边 #5617(required 集怎么配)与本条互补并交叉引用。
  实测确认三个门禁(engine-double-contract / error-code-casing /
  route-envelope)确实都是 lint.yml 里 job `lint`(显示名 ESLint)的步骤。
- note 11「dev 子代理自己死了 ≠ 维护者中止」:#5085 上两种情形都出过 ——
  08-05 07:00Z 是推断(误判,门压到 08-06 02:42Z,近 20 小时),08-06 04:12Z
  是宿主明确回报 stopped by the user(真中止,两分钟后维护者示意重派)。症状
  一样,判据是信号,所以只有显式信号成立,否则按 step 4 stale-claim 回收。
- note 12「截断判读必须双读取」:#5148 / #5149 / #5164 被判正文被 sanitizer
  截断并要求作者重贴;REST 双读取复核三条正文均完整(body 实测 4321 / 5183 /
  4181 字符,body_html 需 application/vnd.github.full+json 才返回),真因是
  读取端截断。与 notes 6(零命中反查)、notes 7(公开更正)同源交叉引用。
- step 7 复核清单增一行「报告到达 ≠ CI 收敛」,os-dev 交付清单增配套一行
  「等 CI 收敛再交报告,本地绿不等于 CI 绿」,并显式声明这是前台阻塞等待、
  不是可以中途返回的后台守望(与 resource rule 6 不冲突)。
- 段首计数「九条」→「十二条」;os-dev 的新条目加在无编号的 Definition of done
  列表里,不触碰任何编号交叉引用(同 #5727 的保序做法)。

三处按实测收紧了拟稿:门压时长写实测的近 20 小时而非「一整天」;note 11 补上
同一 issue 上的真中止对照(拟稿只有误判半边);那道门实际只写在评论里、标签退回
了 pm:queue,比 pm:on-hold 更隐蔽,照实记。

Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GX3sL71LFq8m2usg6VqTSE
@vercel

vercel Bot commented Aug 6, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
objectstack Ignored Ignored Aug 6, 2026 11:26am

Request Review

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

2 participants