Skip to content

Commit 13e8b27

Browse files
committed
docs(pm-skill): rewrite the three small references as rules only
release-aftercare keeps every duty and every number a seat acts on — the latency-to-server-time shape, the 200ms gate boundary, the waker-follows physics and the fixed protocol order — and drops the two-day operations log that produced them. Where a failure mode IS the rule's condition it survives as one clause with no date. true-green keeps the per-repo invocation, the gates a CI-log grep cannot see and the local preflight, one fact per line. compile-surfaces keeps its lookup table. The surface rows are unchanged byte for byte, so the widest-table-row pin stays where it is; only the thawed row loses its two dates and the retired in-scope wording, and the prose around the table loses its measurement provenance. release-aftercare 58->50, true-green 33->32, compile-surfaces 26->24. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019RfFHiRCSs3JXLK4cwcfox
1 parent 2a2205a commit 13e8b27

3 files changed

Lines changed: 68 additions & 79 deletions

File tree

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
1-
# 过滤 / 谓词语义的编译面清单(references —— 按需加载)
1+
# 过滤与谓词语义的编译面清单
22

3-
出处:主文件「派发」
4-
的过滤/谓词语义标准条款 —— 命中该条款的派发令把本清单**逐面抄进去**,PR 逐面申报。
5-
维护纪律与派发前复核串在正文内,
6-
一并适用:**这张表由 PR 维护、派发前先跑复核串重验,⛔ 不凭记忆抄**
3+
见 SKILL.md 〈派发〉的过滤与谓词语义条款;命中它的派发令逐面抄进本清单,PR 逐面申报。
4+
维护纪律与复核串一并适用:这张表由 PR 维护、派发前先跑复核串重验,⛔ 不凭记忆抄。
75

8-
编译面清单(逐面实测 @ `main` `48f98b0`,2026-08-07):
6+
编译面清单(行号每天在动,派发前按下方复核串重验):
97

108
| # || 落点(file:line) | 备注 |
119
| --- | --- | --- | --- |
@@ -15,12 +13,12 @@
1513
| 4 | service-analytics filter-normalizer | `packages/services/service-analytics/src/strategies/filter-normalizer.ts:1235`(`lowerAnalyticsWhere`) | analytics / cube 侧 |
1614
| 5 | `formula` | `packages/formula/src/matches-filter.ts:73`(`matchesFilterCondition`) | RLS 写侧 `check` 与公式求值;JS 两值语义的基准面 |
1715
| 半面 | objectql `having-filter` | `packages/objectql/src/having-filter.ts:92` / `:98`(`applyHaving` / `matchesHaving`) | 聚合****过滤。算半面是因为词表是子集,**但申报义务不打折** —— 它是**唯一没有 conformance 表覆盖的面**(`FILTER_LOGIC_CASES` 不驱动 HAVING 路径),所以漏了它连门禁都不会红 |
18-
| 已解冻 | `driver-memory` / `driver-mongodb` | `packages/drivers/driver-memory/src/memory-matcher.ts:134`(`checkCondition`)、`packages/drivers/driver-mongodb/src/mongodb-filter.ts:700`(`translateFieldOperators`) | 2026-08-05 投入冻结,**2026-08-11 两条裁决解除** ⇒ 「不在范围 + 冻结指令」作废,按普通面申报 |
16+
| 已解冻 | `driver-memory` / `driver-mongodb` | `packages/drivers/driver-memory/src/memory-matcher.ts:134`(`checkCondition`)、`packages/drivers/driver-mongodb/src/mongodb-filter.ts:700`(`translateFieldOperators`) | 冻结指令与不在范围的旧判定均已作废,按普通面申报 |
1917

20-
**这张表本身由 PR 维护 —— 与域表同一纪律
21-
** 增删一面(新驱动、新求值器、某面被合并或退役、冻结状态变化)的那个 PR 顺手改这里,
22-
不留给下一次裁决重新数。清单****过期是必然的,清单**没有维护者**才是缺陷
23-
24-
⚠️ 派发前复核一遍再抄,⛔ 不要凭这张表的记忆填派发令:本仓的包路径搬过家(驱动进
25-
`packages/drivers/`、服务进 `packages/services/`),行号更是每天在动。一条够用的复核串:`grep
26-
-rn 'matchesFilterCondition\|buildWhereSQL\|compileScopedFilterToSql' packages --include=*.ts | grep -v node_modules`。
18+
增删一面的那个 PR 顺手改这里,不留给下一次裁决重新数
19+
触发增删的四种事件:新驱动、新求值器、某面被合并或退役、冻结状态变化
20+
清单会过期是必然的,清单没有维护者才是缺陷
21+
派发前复核一遍再抄,⛔ 不凭本表的记忆填派发令:包路径搬过家,行号更是每天在动。
22+
一条够用的复核串:
23+
`grep -rn 'matchesFilterCondition\|buildWhereSQL\|compileScopedFilterToSql'
24+
packages --include=*.ts | grep -v node_modules`。
Lines changed: 34 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,58 +1,50 @@
1-
# 发版后义务(references —— 按需加载)
1+
# 发版后义务
22

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

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

9-
tagged 发版滚容器,滚容器就在区域约束内**重掷**落位;区域约束只定边界、
10-
不定城市(实测同一 ENAM 内 Ashburn ~4ms / Atlanta ~17ms / Houston ~35ms 每 leg,9 倍差)。
11-
折算用实测形状 `server ≈ 33 + 23 × RTT`:35ms/leg ≈ ~870ms/请求,
12-
在 ≤200ms 的性能门禁****;~4ms 一档 ≈ ~120ms,门禁内有余量。**所以发版后必须重读落位,
13-
⛔ 不得假设它没变** —— 上一版读到的好数字不是这一版的读数。
14-
15-
重掷有两条反直觉物理,顺序错了读数就是废的:
16-
17-
- **落位跟随唤醒者(WAKER),
18-
不跟随 `locationHint`** —— 从运维者自己的机器唤醒就掷到运维者附近。
19-
实测:加州机器重掷反复落 Houston;改用 us-east CI runner 唤醒,第一次就落 Ashburn。
20-
- **测量本身污染下一次掷点** —— 换实例中途发出的探针,自己就成了新实例的唤醒者。
21-
- **协议(顺序不可换)**:rollout → 运维侧**零 HTTP** → us-east runner 唤醒
22-
(`gh workflow run keep-warm`)→ 读 CF instances API 拿到城市 → ****开始测量。
23-
- 坏掷点就重掷(每次约 15s 空窗),⛔ 不为迁就一次坏掷点去动门禁阈值。
7+
- tagged 发版滚容器,滚容器就在区域约束内重掷落位;区域约束只定边界,不定城市。
8+
- 同一区域内各城市每 leg 相差近 9 倍:~4ms、~17ms、~35ms 都在同一个 ENAM 内。
9+
- 折算用实测形状 `server ≈ 33 + 23 × RTT`
10+
- 35ms/leg ≈ ~870ms/请求,落在 ≤200ms 的性能门禁外;~4ms 一档 ≈ ~120ms,门禁内有余量。
11+
- ⇒ 发版后必须重读落位,⛔ 不得假设它没变:上一版读到的好数字不是这一版的读数。
12+
- 重掷有两条反直觉物理,顺序错了读数就是废的。
13+
- 一、落位跟随唤醒者(WAKER)而非 `locationHint`:从运维者自己的机器唤醒就掷到它附近。
14+
- 二、测量本身污染下一次掷点:换实例中途发出的探针,自己就成了新实例的唤醒者。
15+
- 协议顺序不可换:rollout,运维侧零 HTTP,us-east runner 唤醒(`gh workflow run keep-warm`)。
16+
- 然后读 CF instances API 拿到城市,才开始测量。
17+
- 坏掷点就重掷,每次约 15s 空窗;⛔ 不为迁就一次坏掷点去动门禁阈值。
2418

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

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

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

35-
改任何**由重放层拥有**的线上状态(库里的行、配置行、绑定)之前,先答两个问题并写进卡:
36-
****重放这份状态(seed / reseed / migration / boot binder),**什么时候**重放。
37-
38-
- 手改是止血带,**重放层的修复才是真卡** —— 不立卡,修复就只活在一个人的记忆里。
39-
- **修好的代码必须赶在下一次重放事件之前发出去**,
40-
否则事故原样重开。实测:一次 SSO 补救手翻了库里的认证方法行,
41-
一次跑在修复之前的 reseed 把它整批翻了回去,直到修复落进 seed 本身才止住。
42-
- 手改**同刻**记录:改了哪张表哪些行、多少行、谁重放、真卡在哪。
29+
- 改任何由重放层拥有的线上状态(库里的行、配置行、绑定)之前,先答两个问题并写进卡。
30+
- 两问:谁重放这份状态(seed、reseed、migration、boot binder),什么时候重放。
31+
- 手改是止血带,重放层的修复才是真卡 —— 不立卡,修复就只活在一个人的记忆里。
32+
- 修好的代码必须赶在下一次重放事件之前发出去,否则事故原样重开。
33+
- 失效模式:一次手翻库里的认证方法行,被一次跑在修复之前的 reseed 整批翻了回去。
34+
- 直到修复落进 seed 本身才止住。
35+
- 手改同刻记录:改了哪张表哪些行、多少行、谁重放、真卡在哪。
4336

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

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

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

54-
已合并 PR 正文里的事实断言被后来的测量证伪时,**更正公开发到卡上**,
55-
⛔ 不只是自己知道、也不只在下一份报告里顺带带过。实测:一张卡的正文断言
56-
「SQL DEFAULT 会回填已有行」,后续实测是已有行仍为 NULL(add-column 并不把默认值带进 DDL);
57-
更正当场发到卡上,回填那一半因此留在原卡等人做,而不是被当成已交付。
58-
**已合并 ≠ 已证实** —— PR 正文是当时的最好理解,卡才是事实的现居地。
47+
- 已合并 PR 正文里的事实断言被后来的测量证伪时,更正公开发到卡上。
48+
- ⛔ 不只是自己知道,也 ⛔ 不只在下一份报告里顺带带过。
49+
- 已合并不等于已证实:PR 正文是当时的最好理解,卡才是事实的现居地。
50+
- 更正当场发到卡上,未做完的那一半因此留在原卡等人做,而不是被当成已交付。
Lines changed: 22 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,32 @@
1-
# 各仓「真绿」跑法索引(references —— 按需加载)
1+
# 各仓真绿跑法索引
22

3-
出处:主文件「复核 / 入队与落地」的入队资格条款(全 check 绿,非 required 子集)。
4-
每仓一节:正典测试跑法、CI 日志 grep 看不见的门禁、本地 preflight —— 一行一事实。
5-
与编译面清单同一维护纪律:**这张表由 PR 维护**,踩到新形态的那个 PR 顺手改这里;
6-
⛔ 不引用 issue 编号。
3+
见 SKILL.md 〈复核〉的入队资格条款(全 check 绿,非 required 子集);每仓一节,一行一事实。
4+
每节放正典测试跑法、CI 日志 grep 看不见的门禁、本地 preflight。
5+
与编译面清单同一维护纪律:这张表由 PR 维护,踩到新形态的那个 PR 顺手改这里。
76

87
## objectstack(后端主仓)
98

10-
- 重活(build/test)一律走共享验证锁入口 `bash scripts/pm/os-verify-lock.sh -c '<cmd>'`
11-
—— 结论读它印的 VERDICT 行,⛔ 不读裸 `$?`(排队语义与预算见 os-dev 定义)。
12-
- 该锁 **Linux-only**:宿主无可用 `flock` 时入口点不拒绝,改跑声明式 unlocked 模式 ——
13-
降级写进 VERDICT 行,并印出 PR 正文该照抄的申报原文(⛔ 别另写一套措辞)。
14-
- 门禁族派生:`node scripts/pm/dispatch-gates.mjs` **不传路径**,脚本自己从 merge-base
15-
取变更集;⛔ 不自己 `git diff` 喂清单 —— 两点差按此刻的 `origin/main` 求值,姊妹
16-
PR 的文件会被算进来,而退出码照样 0。
17-
- 该脚本只住本仓,答案只关于它所在的树:喂姊妹仓路径得到的是**本仓**的门禁族 ——
18-
形态完整、退出码 0、全错;`--repo <owner>/<name>` 申报归属可机械拒错。
9+
- 重活(build 与 test)一律走共享验证锁入口 `bash scripts/pm/os-verify-lock.sh -c '<cmd>'`
10+
- 结论读它印的 VERDICT 行,⛔ 不读裸 `$?`;排队语义与预算见 os-dev 定义。
11+
- 该锁 Linux-only:宿主无可用 `flock` 时入口点不拒绝,改跑声明式 unlocked 模式。
12+
- 降级写进 VERDICT 行,并印出 PR 正文该照抄的申报原文,⛔ 别另写一套措辞。
13+
- 门禁族派生:`node scripts/pm/dispatch-gates.mjs` 不传路径,脚本自己从 merge-base 取变更集。
14+
- ⛔ 不自己 `git diff` 喂清单:两点差按此刻的 `origin/main` 求值,姊妹 PR 的文件会被算进来。
15+
- 而那种误用退出码照样 0;该脚本只住本仓,喂姊妹仓路径得到的仍是本仓的门禁族。
16+
- 那种答案形态完整、退出码 0、全错;`--repo <owner>/<name>` 申报归属可机械拒错。
1917

2018
## objectui(前端)
2119

22-
- 正典跑法:**仅仓根 `pnpm test`**。vitest 守卫拒绝 package 目录内的运行 —— 那种跑法曾假绿
23-
(无关 console 文件通过、目标用例 0 个在跑,被计为通过);守卫的拒绝是保护,⛔ 不绕。
24-
- typecheck 脚本拼作 `type-check`(连字符);拼错脚本名的 `pnpm --filter` 匹配零脚本、
25-
**退出码 0**、静默假绿 —— 核对输出确实回显了脚本名再信绿。
20+
- 正典跑法:仅仓根 `pnpm test`
21+
- vitest 守卫拒绝 package 目录内的运行:那种跑法曾假绿,无关文件通过而目标用例 0 个在跑。
22+
- 守卫的拒绝是保护,⛔ 不绕。
23+
- typecheck 脚本拼作 `type-check`(连字符);拼错脚本名的 `pnpm --filter` 匹配零脚本、退出码 0。
24+
- 那是静默假绿:核对输出确实回显了脚本名再信绿。
2625

2726
## cloud
2827

29-
- 本地 preflight:`preflight-workspace-dist`(workspace 依赖的 dist 新鲜度守卫)——
30-
按其自身输出的提示跑,先建再测。
31-
- 严格区 `check-test-typecheck` 的失败**不以 `error TS` 行出现在 CI 日志**:turbo
32-
汇总只写 `#typecheck` failed —— 要看到台账消息必须本地跑该包自己的 `typecheck` 脚本;
33-
对 CI 日志 grep `error TS` 的阴性读数在这一族上不成立。
28+
- 本地 preflight `preflight-workspace-dist`workspace 依赖的 dist 新鲜度守卫
29+
- 按其自身输出的提示跑:先建再测。
30+
- 严格区 `check-test-typecheck` 的失败不以 `error TS` 行进 CI 日志,turbo 汇总只写 `#typecheck` failed。
31+
-要看到台账消息必须本地跑该包自己的 `typecheck` 脚本
32+
- 对 CI 日志 grep `error TS` 的阴性读数在这一族上不成立。

0 commit comments

Comments
 (0)