Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
9.0 KiB
9.0 KiB
TASK · 盘型口径实现修复单:开案 RPC 42501 + 真库复验 + 正式回放文件(2026-10-01)
基线
- 待修分支:远端
review/rectification-varga-resolution-20260930@ce9d669c(单提交,基于f898df55)。 - 修复分支:
codex/rectification-varga-resolution-fix-20261001,从ce9d669c起,开工先git rebase origin/staging(origin/staging已前进 ≥ 19 个提交,冲突预计只在文档;代码冲突逐处核对,不得丢对方改动)。 - 工作树
.worktrees/rectification-varga-resolution-fix-20261001。 - 原任务书
TASK-rectification-varga-resolution-20260930.md的决策记录、硬红线全部继续有效。
Claude 验收记录(2026-10-01,对 ce9d669c)
环境:Linux,Node 22.14(/exec-daemon/node),Python 3.13,无 Docker(真库测试无法在本机运行)。基线 = f898df55 同机同依赖。
| 检查 | 结果 | 结论 |
|---|---|---|
冻结文件(PRODUCTION_FILES 10 个 + 事件引擎) |
0 改动 | 通过 |
jyotish_api_server.py |
+2 行薄注册;growth contract 绿 | 通过 |
tsc --noEmit |
0 错(基线 0) | 通过 |
npm run lint |
0 error / 126 warning(基线 0 / 126) | 通过 |
npm test |
分支 4714 / pass 4650 / fail 24 / skip 40;基线 4418 / 4363 / 24 / 31。失败清单逐名相同(24 条均为 Docker / PG / 部署环境用例),基线测试名 0 丢失,新增 296 | 通过(环境缺口同基线) |
next build |
exit 0,/ 仍 ○ Static |
通过 |
首屏 gzip(/ 预渲染 HTML 引用的 JS + CSS) |
JS 646,480 → 651,961(+0.85%),CSS 不变,合计 +0.77% | 通过(±2% 内) |
| Python 快速门 | 1035 passed / 1 skipped / 0 failed;定向(端点、研究、growth、完整性、隐私、打分研究)135 passed | 通过 |
| 硬红线 2(生产段级汇总 = 研究) | varga_resolution_probe.py --posterior production --stages m1,m2,77 例 × ±10/±30/±60:M1 per-case 1155 格差 0;M1、M2 整棵结果树与 docs/research/varga_resolution_research_2026_09_30.json 深比较差异 0 |
通过(超过任务书 ≥10 例要求) |
| 硬红线 1(回放) | 真值段保留 ±10 76/76/76、±30 76/76/76(D1/D9/D10);±60 D9/D10 74 → 按 D3 blocked。头段 = 真值 ±10 D9 68 / D10 66、±30 44 / 49,等于研究「线上顺序」列 | 通过(T5 默认关闭,按原任务书让步顺序,「按段」列收益不计入本单) |
| D3 档位 | segment-summary.ts::confidenceTier:非 D1 且宽 > 61 → blocked;≥ 0.6 较可信;宽 ≤ 21 且 ≥ 0.5 倾向;否则分不开;D1 全窗唯一 → 确定 |
与任务书一致 |
| D4 不提前停 | rectification-decision.ts 只加透传字段,出卡时机未改 |
通过 |
| D5 按段选题 | RECTIFICATION_SEGMENT_ORDER=on 才启用,且宽 > 61 不启用 |
通过(默认关) |
| D7 采用分钟 | 目标盘头段交集中点 → 为空取 D1 头段中点 → 交付区间内最近分钟 | 与任务书一致 |
| 既有断言改动 | 29 处被删断言:23 处为 Skill 版本 10.0.32 → 10.0.33;其余为入口 / 只读投影 / ACL 合同,执行方已写三栏 | 未见放宽 |
| 开案 RPC(真库) | 见下「事故实证」 | 不通过(P0) |
真库全量 npm run test:db |
本机无 Docker;执行方最后一次 DinD 为 79 / 77 / 2 fail(opening 42501 + history fixture,后者已改 fixture 未复跑) | 未闭环 |
| 正式回放文件 | docs/research/varga_resolution_impl_replay_2026_09_30.json 为旧 Windows 产物,无 implementation_identity,与 accepted 严格比差 1242 格(执行方自述) |
不通过 |
| 真机 / 真实模型 | 清单 docs/testing/rectification-varga-resolution-20260930.md 已写,未执行 |
环境缺口 |
结论:算法实现正确(77 例生产路径与研究逐格一致),但因 P0 开案权限失败不可合入。
事故实证(P0)
frontend/supabase/migrations/20260930020000_rectification_segment_checks.sql:新 12 参数open_agentic_rectification_case_v2(..., p_product_domain text)为security definer,函数体内调用既有 11 参数同名函数。frontend/supabase/migrations/20260814010000_immutable_skill_registry.sql的 ACL 对账块(for v_grantee in select distinct pg_get_userbyid(a.grantee) ... where a.grantee <> v_service_role loop execute format('revoke execute on function %s from %I', ...))把 11 参数函数的 EXECUTE 从除 service_role 外所有角色收回,包括函数属主。- 于是 12 参数函数以属主身份调用 11 参数函数 →
42501 permission denied for function open_agentic_rectification_case_v2。 frontend/src/lib/rectification-agentic/v9/case-service.ts::openRectificationCase对intent !== "session"(首页、新建)一律传p_product_domain走 12 参数版本 → 部署后所有从首页发起的新校正开不了案。 执行方 DinD 真库database-segment-opening.test.ts:44已复现。
决策记录(Claude 2026-10-01,依产品 09-30 授权的盘型口径)
- F1 修法二选一,推荐 (a):
- (a) 12 参数包装函数改为
security invoker:调用方是 service_role,本就对 11 参数 open 与initialize_agentic_rectification_domain_v1有 EXECUTE;不需要任何新授权。 - (b) 删除 12 参数包装,
case-service.ts先调 11 参数 open、disposition === "created"时再调initialize_agentic_rectification_domain_v1,should_start_opening改由前端按返回值判断。
- (a) 12 参数包装函数改为
- 禁止:给属主或任何非 service_role 角色补 EXECUTE(破坏 08-14 仅 service_role 白名单);改 08-14 迁移;删除或弱化
database-segment-opening.test.ts与 ACL 合同断言。 - 两条新迁移尚未部署到任何环境,允许原文件修改(不新增第三条迁移),修改处在 PROGRESS 写原值 / 新值 / 原因。
- 其余代码不动;不重开算法、阈值、UI。
硬红线
- 原任务书硬红线 1–7 继续有效;本单修复后 Claude 用同一命令复跑回放与门禁。
- 真库:
npm run test:db --prefix frontend(Docker,Postgres 17)全量通过,database-segment-*与database-segment-skill-history全绿;基线 DB 测试名 0 丢失。无 Docker 不得开工本单(写 BLOCKED)。 - ACL 合同:12 参数函数(若保留)只有 service_role EXECUTE;11 参数函数 ACL 与
f898df55逐项相同。 - 正式回放文件必须带
implementation_identity,与 accepted 研究 JSON 的 M1 / M2 深比较差异 0。
任务分解
- F1 开案 RPC(BUG-1131):按决策 (a) 或 (b) 修;
database-segment-opening.test.ts先红后绿(红的日志留 PROGRESS);ACL 合同测试补 12 参数函数的prosecdef断言((a) 时应为 false)。 - F2 真库全量复验:F1 后在最终源码上跑全量
test:db;history fixture 修正后的database-segment-skill-history.test.ts必须真实执行到 transition / action / run receipt 末断言;旧校正会话(Skill 10.0.32 绑定)列表、打开、只读均通过(BUG-621)。 - F3 正式回放文件:用下列命令重生成并替换
docs/research/varga_resolution_impl_replay_2026_09_30.json(本单授权覆盖):验收:M1 / M2 与 accepted 深比较差异 0(Claude 10-01 同命令已得 0)。export PYTHONHASHSEED=0 VARGA_REPLAY_NODE=$(command -v node) # Node 22 python3 scripts/research/varga_resolution_probe.py --posterior production --stages m1,m2 \ --radii 10,30,60 --cache-dir /tmp/varga-cache \ --baseline-out /tmp/varga-prod-baseline.json \ --json-out docs/research/varga_resolution_impl_replay_2026_09_30.json --quiet - F4 研究侧 PG 持久回放 harness(
frontend/scripts/rectification-segment-persisted-replay.ts、scripts/research/varga_resolution_persisted_replay.py):若 append 权限失败与 F1 同类(属主 EXECUTE),随 F1 一并验证;仍失败则在 PROGRESS 标blocked并说明,不阻塞合入(F3 已覆盖算法验证)。 - F5 记录:PROGRESS 追加本单节;BUG-1131 新增;BUG-1115~1117 在 F1–F3 通过后由 Claude 改 resolved;
docs/tasks/README.md状态;CHANGELOG.md不需新条(用户可感知行为未变)。
部署注意
- 两条迁移(
20260930010000_rectification_segment_adoption.sql、20260930020000_rectification_segment_checks.sql)必须先迁移后部署;get_agentic_rectification_case_dossier被create or replace,旧版本保存为_before_segments,回滚时按此恢复。 - 部署 staging 后产品按真机清单走一遍(至少:首页发起婚恋问题 → D1 + D9 两行;±60 窗口只有 D1 行;采用后报告页盘型与卡片一致;旧校正会话能打开)。
让步顺序
F1 > F2 > F3 > F5 > F4。F1–F3 缺一不可合入。
BUG 编号
开工时核对 docs/BUG_HISTORY.md 最大号(写作时 BUG-1130)。本单:BUG-1131(12 参数开案包装以属主身份调用被 ACL 对账收回 EXECUTE 的 11 参数函数,首页 / 新建开案 42501)。关联 BUG-1115~1117、BUG-621。