diff --git a/docs/tasks/README.md b/docs/tasks/README.md index e8c9dcca..b476fe3c 100644 --- a/docs/tasks/README.md +++ b/docs/tasks/README.md @@ -258,7 +258,8 @@ | `TASK-rectification-holdout-expansion-20260929.md` | `PROGRESS-rectification-holdout-expansion-20260929.md` | **开放评价集扩到 ≥60 例(v5)**:所有打分判定都在 20 例上做,1 例 = 5pp,KP / 精度闸 / V1n 的 no_benefit 都只差 1–3 例。只用 Rodden AA 公开名人,事件人工核对出处,分层(年代 / 纬度 / 南半球 / 跨午夜 / UTC+8),v4 不动;基线成绩单 v4 子集须与已发布数字逐格一致。研究单的判定以 v5 为准 | 已验收(Claude 09-29:77 例、v4 子集数字逐格一致、抽样 6 例来源一致、冻结文件零改动;UTC+8 5/6 为数据可得性缺口,接受;已合入 staging)→ 研究单判定可开工 | 分支 `codex/rectification-holdout-expansion-20260929`(BUG-1090) | | `TASK-rectification-scoring-research-20260929.md` | `PROGRESS-rectification-scoring-research-20260929.md` | **打分方法研究(离线)**:R-A 似然比校准权重(leave-one-case-out,KP / Pranapada / D60 作为特征由数据定权重、允许负权重)、R-B 缺席证据(口述时间线覆盖时段内的空白年扣分,必测漏说稳健性)、R-C 精度追问可行性(对已说事件追问月份,算在定向追问 2 条额度内)。判定必须在 v5 上做;有收益才立实现单并按 ERR-110 重冻结 | 已验收关单(Claude 09-30:v5 77 例三项全部不过硬红线 1,稳定特征 0 个;BUG-1091 closed_by_design;打分路线关闭,后续走产品口径「盘型选择」研究) | 分支 `codex/rectification-scoring-research-20260929`(BUG-1091 closed_by_design) | | `TASK-rectification-varga-resolution-research-20260930.md` | `PROGRESS-rectification-varga-resolution-research-20260930.md` | **「盘型口径」研究(离线)**:打分层关闭后,把校正目标从分钟改为分盘上升段。v5 实测:±10 六题后 D1 单一 75/77,D9/D10 ≤2 种 68/63,多数=真值 88%/84%;±30 起分盘分不开。M0 入库段扫描与区间脚本、M1 段级汇总与阈值-准确率(留一法)、M2 按段选题、M3 按问题域取盘 + 「不用校正」比例、M4 实现单要点。不改引擎 / 常数 / 冻结文件;红线:真值段不被排除 ≥ 现在真值在区间比例 | 已验收(Claude 09-30:M0–M3 + 稳健性完整执行,复跑逐字节一致,红线逐格核对;盘型口径成立——±10 D9/D10 头段=真值 88%/86%、占比≥0.6 留一法 92%/90%,±30 约 1/4–1/3 用户可信,±60 分盘 blocked;提前停不过门;「不用校正」只对 D1 成立。另一会话 08:49 部分归档 bedb4d7b 已被取代并移除)→ 实现单待写 | 分支 `codex/rectification-varga-resolution-research-20260930`(BUG-1105) | -| `TASK-rectification-varga-resolution-20260930.md` | — | **「盘型口径」实现单**:交付改为「每张目标盘的上升 + 可信度档位」(≤±10:≥0.6 较可信 / 0.5–0.6 倾向 / <0.5 分不开;≤±30 只有较可信或分不开;>±30 只给 D1);按问题域取盘(婚恋 D1+D9 / 事业 D1+D10 / 综合三张);段扫描端点 + 「盘型一致不用校正」出口;按段选题仅 ≤±30;不得用占比提前停;采用落库头段交集中点。不改引擎 / 常数 / 冻结文件。红线:回放 ±10/±30 真值段保留 76/76、头段命中不低于研究「按段」列;段级汇总与研究 JSON golden 逐格一致 | 待领取 | — | +| `TASK-rectification-varga-resolution-20260930.md` | — | **「盘型口径」实现单**:交付改为「每张目标盘的上升 + 可信度档位」(≤±10:≥0.6 较可信 / 0.5–0.6 倾向 / <0.5 分不开;≤±30 只有较可信或分不开;>±30 只给 D1);按问题域取盘(婚恋 D1+D9 / 事业 D1+D10 / 综合三张);段扫描端点 + 「盘型一致不用校正」出口;按段选题仅 ≤±30;不得用占比提前停;采用落库头段交集中点。不改引擎 / 常数 / 冻结文件。红线:回放 ±10/±30 真值段保留 76/76、头段命中不低于研究「按段」列;段级汇总与研究 JSON golden 逐格一致 | 验收未通过(Claude 10-01 对 review 分支 ce9d669c:算法 77 例生产路径与研究 M1/M2 整树差 0、tsc/lint/npm 失败清单同基线、gzip +0.77%、Python 快速门 1035/0 fail 均过;**P0 首页/新建开案 42501**——12 参数 definer 包装调用被 08-14 ACL 收回属主 EXECUTE 的 11 参数函数;真库全量与正式回放文件未闭环)→ 修复单 | — | +| `TASK-rectification-varga-resolution-fix-20261001.md` | — | **盘型口径修复单**:F1 开案 RPC 42501(推荐包装改 security invoker,禁补属主授权)、F2 Docker 真库全量 test:db + 旧会话可打开、F3 用 `--posterior production` 重生成正式回放文件(Claude 同命令已得差 0)、F4 研究 PG harness、F5 记录。部署须先迁移 | 待领取 | 基于 review/rectification-varga-resolution-20260930 ce9d669c | | `TASK-rectification-typed-event-scoring-research-20260929.md` | `PROGRESS-rectification-typed-event-research-20260929.md` | **打字经历按选择题规则计分(离线研究,不上线)**:计分通道不对称 + 已入账年份挡题;R0 学业质量题措辞 / 年精度显示成 1 月(冻结文件,需重新冻结) | 已验收(Claude 2026-09-29 合并验收:全量前端 4302/24 与基线同 24 条环境失败、tsc 0、lint 0 error、`/` Static、gzip +0.16%、快速门 pytest 1001 passed、两份回放复跑一致),待部署核对 | BUG-1088、1089 | | `TASK-report-reader-polish-20260929.md` | `PROGRESS-report-reader-polish-20260929.md` | **报告页打磨**:生成入口挪进页面主体(删标题栏按钮)、详情页到底部按钮(懒渲染一次到底)、导出按钮带文字、目录一级/二级分层、去掉「字段」与 RL/NL 缩写表头、状态列同义重复去重、报告表格淡底色、分块导出显示真实文件大小 | Claude 直接执行并自验(tsc 0、lint 0 error、全量 fail 与基线同 24 条、`/` Static、gzip +7 B、快速门 Python 1000 passed),已部署 staging `d7772011`,真机欠 | BUG-1092~1094 | | `TASK-report-english-edition-20260929.md` | `PROGRESS-report-english-edition-20260929.md` | **报告中英两版**:同一次引擎计算渲染 zh/en 两遍(不用模型翻译),瑜伽库 477 条补英文、模板与前端表头英文化;中文逐字节不变、英文零汉字、两版数字序列一致;阅读页 `?lang=en` 切换,导出当前语言 + 「问 AI 建议导出英文版」提示;旧报告不补英文 | Claude 直接执行(含两个 fork 子代理)并自验(tsc 0、lint 0 error、全量 fail 与基线同 24 条、`/` Static、gzip +0.06%、Python 定向全绿),已部署 staging `d7772011`,真机欠 | — | diff --git a/docs/tasks/TASK-rectification-varga-resolution-fix-20261001.md b/docs/tasks/TASK-rectification-varga-resolution-fix-20261001.md new file mode 100644 index 00000000..78c962f9 --- /dev/null +++ b/docs/tasks/TASK-rectification-varga-resolution-fix-20261001.md @@ -0,0 +1,88 @@ +# 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` 改由前端按返回值判断。 +- **禁止**:给属主或任何非 service_role 角色补 EXECUTE(破坏 08-14 仅 service_role 白名单);改 08-14 迁移;删除或弱化 `database-segment-opening.test.ts` 与 ACL 合同断言。 +- 两条新迁移尚未部署到任何环境,允许**原文件修改**(不新增第三条迁移),修改处在 PROGRESS 写原值 / 新值 / 原因。 +- 其余代码不动;不重开算法、阈值、UI。 + +## 硬红线 + +1. 原任务书硬红线 1–7 继续有效;本单修复后 Claude 用同一命令复跑回放与门禁。 +2. **真库**:`npm run test:db --prefix frontend`(Docker,Postgres 17)全量通过,`database-segment-*` 与 `database-segment-skill-history` 全绿;基线 DB 测试名 0 丢失。无 Docker 不得开工本单(写 BLOCKED)。 +3. ACL 合同:12 参数函数(若保留)只有 service_role EXECUTE;11 参数函数 ACL 与 `f898df55` 逐项相同。 +4. 正式回放文件必须带 `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`(本单授权覆盖): + ```bash + 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 + ``` + 验收:M1 / M2 与 accepted 深比较差异 0(Claude 10-01 同命令已得 0)。 +- **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。