把 buildGapCore 的 resolvedTeethSql 从**逐 (患者×信号) 行相关子查询**改成
**集合式预聚合 + 反连接**。核心恒等式 ∃x∈G: t(x) ⋛ a ⟺ max{t(x)} ⋛ a,
分组 G=(患者,牙位)。13 个分支对 sig 的相关性只有三类:
时间门(10)/ 病历号等值(1)/ 无相关(2),外加「建议优先」一条的 sig.type 标量谓词。
⚠ ️ 集合式是**独立重写一份**,刻意不与 legacy 共用片段 —— 共用则重构写错的地方两边
一起错、对拍互相抵消。等价性靠 verify-gap-equivalence 逐行差分来证。
全口码(K05/K07)不进集合式:其 lateral PG 本来就会摘掉(零收益),硬套还慢 2~3 倍。
**默认 legacy**,靠 PAC_GAP_VARIANT=setbased 显式开启。生产不设该变量 → 行为零变化。
验证(测试机 585K 患者 / 本地 30K):
· SQL 层 11/11 子场景逐 (患者×信号×牙位) **零差异**,行数逐个相同
· 画像消费方 2000 位患者零差异,单患者 p95 47→27ms 不劣化
· 端到端 plan_reasons 行级 diff=0;测试机 32 万条差异仅时间漂移、**零删除**
· 交互路径(详情页刷新)200 位 × 11 子场景零差异,一次刷新 89→75ms
· 13 条分支源行全部非空 —— 零差异不是空转
收益(测试机相邻两轮,并发4):场景段 794s → 545s(×1.46)。**生产未验**。
新增 src/cli/verify-gap-equivalence.cli.ts:两版同一 REPEATABLE READ 快照双向
EXCEPT ALL 差分;--self 自对拍先证工具可信;--persona/--single/--conc 覆盖
画像、交互、并发标定四条路径。
新增 tests/gap-setbased-parity.spec.ts:结构对拍,守「两种形态的分支集合不许走散」
(加分支只改一边 = 静默错召,tsc 和现有 spec 都发现不了)。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
| Name |
Last commit
|
Last update |
|---|---|---|
| .. | ||
| ai-gen-script.cli.ts | Loading commit data... | |
| backfill-plan-labels.cli.ts | Loading commit data... | |
| bootstrap-flags.ts | Loading commit data... | |
| cold-import.cli.ts | Loading commit data... | |
| dump-openapi.cli.ts | Loading commit data... | |
| host-admin.cli.ts | Loading commit data... | |
| import-patient.cli.ts | Loading commit data... | |
| import-real-phones.cli.ts | Loading commit data... | |
| recompute-persona.cli.ts | Loading commit data... | |
| recompute-plans.cli.ts | Loading commit data... | |
| refresh-clinic-names.cli.ts | Loading commit data... | |
| reparse-patients-file.ts | Loading commit data... | |
| reparse.cli.ts | Loading commit data... | |
| seed-assignment.cli.ts | Loading commit data... | |
| stale-scan.cli.ts | Loading commit data... | |
| sync-incremental.cli.ts | Loading commit data... | |
| sync-test.cli.ts | Loading commit data... | |
| timeline.cli.ts | Loading commit data... | |
| verify-chain.cli.ts | Loading commit data... | |
| verify-field-mapper.ts | Loading commit data... | |
| verify-gap-equivalence.cli.ts | Loading commit data... |