docs(debt): 记一条高频教训 —— "当下测出的结论"不适用于"被评动作发生的时刻"(两次都由我踩中)
★★ pi `e440953b` 指出我 `1de1c4c7` **在其帧内逐条为真**,我复核**全对**:
· 决定性时间序: 脚本首版 `60d59f9` 提交 = **09-25 06:08:59**;我 `1de1c4c7` = **09-25 05:52:04**
⇒ ★ 晚 **16m55s** ⇒ 写那封时脚本**尚不存在** ⇒ "拿脚本的 459 套讨论的 459"**时间上不可能**
· 帧重建(`created_at <= '2026-09-24 21:52:04'`,该列 0 NULL): bound∧P=**458** / loose∧P=**459**
· `1de1c4c7` 的四条断言在**它自己帧**里逐条为真:
[a] 459(loose) 里未绑定那 1 行 = 1 ✓ [b] 458(bound) 里残留那 1 行 = 1 ✓
[c] 残留总数 = 2 ✓ [d] 459(loose) − 2 = 457 ✓
⇒ 我在 `03adbf14`/`2a9be0e` 里"我 1de1c4c7 也错"的判断**作废**; 真错只有 pi `44dccaee` 那句(他已自认)
★★★ 由此得一条教训(**两次都由我踩中** ⇒ 值得进清单):
① `e77154d1` 那轮: 探针把"取 T"写在 `ReplacePlatformSessions` **之后** ⇒ 量到删除后的表
⇒ 得出"我的探测器漏报"的**相反**结论
② 本轮: 我验证"459−1(未绑定) 不成立"**在今日帧成立**,就据此判 `1de1c4c7`(**讨论帧**)也错
⇒ ★ 同形: **观测/判定的时刻必须与被观测/被评的动作发生在同一时刻**。
这是"判据要锚定到它防的那个动作"的**时间轴版本** —— 原那条管"锚到哪个动作",这条管"在哪个时刻测"
⇒ ★ 可执行动作: 凡结论涉及"某历史时刻的库状态",必须用 `created_at` 这类**带时刻的列**把状态
**重建**出来再判,并把该时刻与被评动作的时刻**一起打印**(⑫ 的第四样)
另: `recount-labels-must-match-predicates` 补记本条的**第二个面** ——
不只是"口径写得不完整",还有"**口径会随时间漂**"(loose/bound 各 +1 后撞上同一个 459)
⇒ 故只把标签写全**不够**,须**同时打印两个口径 + 取数时刻**(`b39359d` 已如此)
This commit is contained in:
@ -209,7 +209,7 @@
|
||||
"kind": "只有一条判据(本轮现修的那两个标签),同类无判据",
|
||||
"due": "**本文件里那些'把口径写下来'的打印即将扩充时**(下一次往 recount 加读数/加口径时,同时加这条判据)。★ 到期前提写成'下次动它'而不是'尽快',因为这条的性质是**防复发**、不是修当下 bug(当下那两处已修)。",
|
||||
"where": "`deploy/recount-relay-counts.sh` 的 `printf` 标签 —— 本轮实测: 行210 的两个标签都漏写 `mail_id is not null`,按标签字面算得 558/460 而脚本打 557/459。**已修那两个**,但**没有任何判据**保证'标签与它数的谓词一致'。",
|
||||
"note": "★★ 2026-09-26 我实测登记(pi `cc7a3027` 那轮的对账里查出来的)。\n\n## 这条钉的是**形状**,不是那两个标签\n```\n事故: `recount-relay-counts.sh` 的两个 printf 标签省掉了 `mail_id is not null`:\n 标签字面 `kind<>'failure'` ⇒ 实算 558\n 变量 NAIVE `mail_id is not null and kind<>'failure'` ⇒ 实算 557\n 标签字面 `(permission OR key NOT LIKE %failure%)` ⇒ 实算 460\n 变量 REAL 同式但带 bound ⇒ 实算 459\n⇒ 同一个数字在\"标签口径\"与\"变量口径\"下差 1(那 1 行未绑定: 标签收、变量不收)\n```\n★ 为什么这条特别值得钉: **这个脚本存在的全部理由就是\"把口径写下来\"**(文件头有「口径声明」节),\n而它自己最显眼的两行标签**没写全限定符** ⇒ 读的人拿这个数去对账**必然对不上**,且**已实际发生过一轮**\n(09-25 我 `b299ce74` 报的 loose 459 与 09-26 脚本打的 bound 459 **是同一个数字、不同集合**,\n两天的消息里都写\"459\",靠人对不出来)。\n\n## 可判形状(到期时这么建)\n```\n对 `deploy/recount-*.sh` 的读数打印与「口径声明」,断言:\n ① 每个读数变量在**定义处**与**标签处**的谓词**一致**(把 SQL 从定义行抽出来、按标签字面重算,两数必须相等)\n —— 逐条把\"标签字面\"当成一个真查询跑一遍,比\"读代码看它对不对\"可靠得多(本轮就是这么抓到的)\n ② 凡是**两个口径并存**(bound/loose、含 A/不含 A)的地方,**两个数都要打** ——\n 只打一个时,读者无法判断他手里那个数是哪个口径 ⇒ 分歧只能靠再来一轮对话解决\n```\n★ 与 `deploy-space-prefix-fs`、`observability-output` 同族(都是\"判据铺得不满\"),\n 但落点不同: 那两条管\"判据没有覆盖某个边界\",这条管\"**已写下来的口径自身不完整**\"。\n"
|
||||
"note": "★★ 2026-09-26 我实测登记(pi `cc7a3027` 那轮的对账里查出来的)。\n\n## 这条钉的是**形状**,不是那两个标签\n```\n事故: `recount-relay-counts.sh` 的两个 printf 标签省掉了 `mail_id is not null`:\n 标签字面 `kind<>'failure'` ⇒ 实算 558\n 变量 NAIVE `mail_id is not null and kind<>'failure'` ⇒ 实算 557\n 标签字面 `(permission OR key NOT LIKE %failure%)` ⇒ 实算 460\n 变量 REAL 同式但带 bound ⇒ 实算 459\n⇒ 同一个数字在\"标签口径\"与\"变量口径\"下差 1(那 1 行未绑定: 标签收、变量不收)\n```\n★ 为什么这条特别值得钉: **这个脚本存在的全部理由就是\"把口径写下来\"**(文件头有「口径声明」节),\n而它自己最显眼的两行标签**没写全限定符** ⇒ 读的人拿这个数去对账**必然对不上**,且**已实际发生过一轮**\n(09-25 我 `b299ce74` 报的 loose 459 与 09-26 脚本打的 bound 459 **是同一个数字、不同集合**,\n两天的消息里都写\"459\",靠人对不出来)。\n\n## 可判形状(到期时这么建)\n```\n对 `deploy/recount-*.sh` 的读数打印与「口径声明」,断言:\n ① 每个读数变量在**定义处**与**标签处**的谓词**一致**(把 SQL 从定义行抽出来、按标签字面重算,两数必须相等)\n —— 逐条把\"标签字面\"当成一个真查询跑一遍,比\"读代码看它对不对\"可靠得多(本轮就是这么抓到的)\n ② 凡是**两个口径并存**(bound/loose、含 A/不含 A)的地方,**两个数都要打** ——\n 只打一个时,读者无法判断他手里那个数是哪个口径 ⇒ 分歧只能靠再来一轮对话解决\n```\n★ 与 `deploy-space-prefix-fs`、`observability-output` 同族(都是\"判据铺得不满\"),\n 但落点不同: 那两条管\"判据没有覆盖某个边界\",这条管\"**已写下来的口径自身不完整**\"。\n\n## ★★★ 补记(2026-09-26 收尾):本条**两个实例都是同一个病**,且都由我踩中\n```\n### 实例①: 标签漏写限定符(`recount-relay-counts.sh:210`)—— 标签与它数的谓词不一致\n 按标签字面 558/460,脚本实打 557/459 ⇒ 已修(`48ccd11`)\n### 实例② ★★: **同一个数字 459 在两天指称不同集合**(loose vs bound 各 +1 后撞车)\n ⇒ 这是本条的**另一个面**: 不只是\"写下来的口径不完整\",还包括\"**口径会随时间漂**\"\n ⇒ 光把标签写全**不够**: 同一个标签在**不同日期**指向不同集合,而输出里**没有时刻之外的东西**\n ⇒ 现在脚本**同时打印两个口径**(bound 与 loose),并打印取数时刻 ⇒ 这一类撞车在默认路径上可见\n### ⚠️ 而我在这两轮里**把同一个病犯了两次**,都是\"当下成立 ⇒ 被评对象也成立\"\n```\n## ★★★★ 由此得到一条高频教训(两次都由我踩中 ⇒ 值得进清单)\n```\n「**当下**测出的结论,不适用于**被评的那个动作发生时**」——\n ① `e77154d1` 那轮: 我的探针把\"取 T\"写在 `ReplacePlatformSessions` **之后**\n ⇒ 量到**删除后**的表 ⇒ 得出\"我的探测器漏报\"的**相反**结论\n ② 本轮: 我复核\"459 − 1(未绑定) 不成立\"**成立**(今日帧对),\n 就据此判定我 `1de1c4c7`(**讨论帧**)也错 ⇒ 而脚本诞生于那封**之后 16m55s**,\n 它在**自己帧内四条断言逐条为真** ⇒ 我**把自己的正确结论判成了错**\n⇒ ★ 两者同形: **观测/判定的时刻,必须与被观测/被评的动作发生在同一时刻**。\n 这是\"判据要锚定到它防的那个动作\"(我原有的那条)的**时间轴版本** ——\n 原那条管\"锚到哪个动作\",这条管\"**在哪个时刻测**\"。\n⇒ ★ 可执行动作(可 grep): 凡结论涉及\"某个历史时刻的库状态\",\n 必须用 `created_at` 之类**带时刻的列**把状态**重建**出来再判,\n 并把**该时刻**与被评动作的时刻**一起打印**(⑫ 的第四样)。\n\"\"\"\n"
|
||||
},
|
||||
{
|
||||
"id": "platform-mirror-d1-cross-workspace",
|
||||
|
||||
Reference in New Issue
Block a user