Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ enable-auto-merge 调用根本没落地(GraphQL、吃配额、回显两向不可
消失的,就是被闭合关键词静默误关的卡。与上段互补不互替:`closed_by_pull_requests`
逐卡核对、要先知道读哪张;盘点对账不需要先验名单,实测抓住静默误关的正是这一步。
落地后**再核一次落地判据本身**:队列的合并同样走 os-regen 驱动,A 的静默吞并在队
列合并这一步一样能发生。
列合并这一步一样能发生。**MERGED 不是终点**:发版后义务见 `release-aftercare.md`。

**落地窗口给关键 PR 挂 `subscribe_pr_activity`**(会话型座位专用;Routine 座位收
不到,维持轮询):⛔ 不订阅 dev 交报告前的 PR —— 双驾驶员互踩(云卡出生即订阅不越
Expand Down
58 changes: 58 additions & 0 deletions .claude/skills/pm-dispatch/references/release-aftercare.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
# 发版后义务(references —— 按需加载)

出处:落地窗口止于 MERGED,而 MERGED 不是用户拿到东西的时刻。本表是 tagged 发版滚
上生产**之后**车道 PM 仍欠的动作,发版窗口查阅;⛔ 不引用 issue 编号。实测底账:
2026-08-21/23 云侧连续两日的发版运维记录。

## A. 每次 fleet roll 重掷容器落位 —— 先读落位,再读延迟

tagged 发版滚容器,滚容器就在区域约束内**重掷**落位;区域约束只定边界、不定城市
(实测同一 ENAM 内 Ashburn ~4ms / Atlanta ~17ms / Houston ~35ms 每 leg,9 倍差)。
折算用实测形状 `server ≈ 33 + 23 × RTT`:35ms/leg ≈ ~870ms/请求,在 ≤200ms 的性能
门禁**外**;~4ms 一档 ≈ ~120ms,门禁内有余量。**所以发版后必须重读落位,⛔ 不得假
设它没变** —— 上一版读到的好数字不是这一版的读数。

重掷有两条反直觉物理,顺序错了读数就是废的:

- **落位跟随唤醒者(WAKER),不跟随 `locationHint`** —— 从运维者自己的机器唤醒就
掷到运维者附近。实测:加州机器重掷反复落 Houston;改用 us-east CI runner 唤醒,
第一次就落 Ashburn。
- **测量本身污染下一次掷点** —— 换实例中途发出的探针,自己就成了新实例的唤醒者。
- **协议(顺序不可换)**:rollout → 运维侧**零 HTTP** → us-east runner 唤醒
(`gh workflow run keep-warm`)→ 读 CF instances API 拿到城市 → **才**开始测量。
- 坏掷点就重掷(每次约 15s 空窗),⛔ 不为迁就一次坏掷点去动门禁阈值。

## B. 一次真实用户路径探针 —— health 绿证明不了用户能进来

发版后至少跑**一条真实用户走的完整链路**(登录 → SSO 跳转 → 落地页有数据),⛔ 不
以 `/health` 200、部署 job 绿或合成 E2E 绿代替。实测失效模式:平台 SSO 跳转对每个
真实用户失败了**五周**(2026-07-17 最后一次成功换 token,2026-08-22 才被发现),期
间健康检查全绿、E2E 也全绿 —— E2E 用邮箱密码直登,从不跑那段交换。**合成路径绕开
的那一段,正是只有真实用户才会走的那一段。**

## C. 手改线上状态 = 止血带 —— 先点名谁重放它、什么时候重放

改任何**由重放层拥有**的线上状态(库里的行、配置行、绑定)之前,先答两个问题并写进
卡:**谁**重放这份状态(seed / reseed / migration / boot binder),**什么时候**重放。

- 手改是止血带,**重放层的修复才是真卡** —— 不立卡,修复就只活在一个人的记忆里。
- **修好的代码必须赶在下一次重放事件之前发出去**,否则事故原样重开。实测:一次 SSO
补救手翻了库里的认证方法行,一次跑在修复之前的 reseed 把它整批翻了回去,直到修复
落进 seed 本身才止住。
- 手改**同刻**记录:改了哪张表哪些行、多少行、谁重放、真卡在哪。

## D. 被打断的长循环 —— 恢复的第一个动作是重读现实

后台长跑循环(重掷、恢复轮询、灰度推进)被会话重启打断时,**它最后记下的「意图」不
是线上此刻的状态**。恢复的第一个动作恒为**重读线上真实状态**,⛔ 永不从循环的最后
已知意图往下接;⛔ 也不把长循环留在无人认领的后台。实测:一个被孤儿化的重掷循环,
把生产控制面停在它自己掷出的**最差**一档上数小时,而循环留下的最后一行写着「继续重
掷」。

## E. 诚实条款 —— 后来的测量推翻已合并 PR 的断言,更正公开落到卡上

已合并 PR 正文里的事实断言被后来的测量证伪时,**更正公开发到卡上**,⛔ 不只是自己
知道、也不只在下一份报告里顺带带过。实测:一张卡的正文断言「SQL DEFAULT 会回填已有
行」,后续实测是已有行仍为 NULL(add-column 并不把默认值带进 DDL);更正当场发到卡
上,回填那一半因此留在原卡等人做,而不是被当成已交付。**已合并 ≠ 已证实** —— PR 正
文是当时的最好理解,卡才是事实的现居地。
9 changes: 9 additions & 0 deletions scripts/pm/check-skill-line-ratchet.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,15 @@ export const CEILINGS = new Map([
['.claude/skills/pm-dispatch/references/platform-readings.md', 134],
['.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
// rolls to production, which the landing window (ends at MERGED) never
// covered: post-roll placement/latency reading with the waker-bias re-draw
// physics, one real user-path probe, the tourniquet rule for replayed live
// state, orphaned-loop resumption, and the honesty clause. Set at landed line
// count (headroom 0, same convention as the entries above). Its pointer from
// landing-operations.md rides existing slack on that file's last
// MERGED-tracking line, so that ceiling stays at 82 — no re-wrap, no cut.
['.claude/skills/pm-dispatch/references/release-aftercare.md', 58],
['.claude/skills/pm-dispatch/references/seat-post-protocol.md', 101],
// Lane job descriptions (maintainer ruling 2026-08-19: per-lane PM job
// descriptions move from seat-post prose into versioned skill references).
Expand Down
Loading