e674cd3871
Engine and five chapters now complete on accepted profiles; final assemble still fails as BUG-535. Co-authored-by: Cursor <cursoragent@cursor.com>
84 lines
5.4 KiB
Markdown
84 lines
5.4 KiB
Markdown
# PROGRESS · BUG-526 报告链路不得直读已收权的校正表(2026-09-04)
|
||
|
||
工作树:`/Users/jesse/Downloads/Copse/astrology/.worktrees/report-candidate-range-20260904`
|
||
分支:`codex/report-candidate-range-20260904`
|
||
基线:任务书写 `cce919fe`;开工 `origin/staging` HEAD 为 `846b6064`(含本任务书)。
|
||
任务书:仓库根 `TASK-report-candidate-range-read-20260904.md`
|
||
未恢复 `service_role` 表级权限,未改表/列/RLS/既有 grant,未改 worker 其余生成管线,未改 `.gitea/workflows/**`,不提升 main。
|
||
|
||
| 任务 | 状态 | BUG |
|
||
| --- | --- | --- |
|
||
| 1 两处读取降级 + 语义修正 | 完成 | BUG-526 |
|
||
| 2 只读 RPC + `test:db` | 完成(本文件定向套件已绿;全量 `test:db` 见下方门禁输出) | BUG-526 |
|
||
| 3 部署后真实 personal_full | 部分完成(引擎与五章正文已通;终稿 `final_parse_rejected`,见 BUG-535) | BUG-526 / BUG-534 / BUG-535 |
|
||
| 4 BUG-526 收口 | 完成(修复版本待 staging SHA) | BUG-526 |
|
||
|
||
## 实现要点
|
||
|
||
- 共享 helper `frontend/src/lib/report-candidate-range.ts`:只调 `read_report_candidate_range`。permission denied / 抛错 → warn(仅 `event` + `reason` 错误码)→ `null`;空行 → `null` 且不 warn。非法时钟或 `start > end` 也当无窗口。
|
||
- worker `generate` 与 `POST /api/reports` 的 `loadCandidateRange` 都走 helper,不再 `from("agentic_rectification_cases")` / `from("birth_time_rectification_cases")`。
|
||
- 迁移 `20260904010000_read_report_candidate_range.sql`:`security definer`、`search_path=''`、`revoke` public/anon/authenticated、`grant execute` 只给 `service_role`。返回值只有 `start_time` / `end_time`。
|
||
- **`completed` 枚举:** 任务书以为它不在 `birth_time_rectification_cases` 状态枚举里。`20260720010000_conversational_rectification_schema.sql` 已纳入 `confirmed` 与 `completed` 两个终态。RPC 使用这两值;前端不再维护一份 `.in("status", …)` 列表。`abandoned` 不取窗。
|
||
|
||
## 测试
|
||
|
||
- `tests/report-candidate-range.test.ts`:permission denied / throw / 空行三态;合法窗;敏感度输入无窗口;源码锁两处调用。
|
||
- `tests/personal-report-api.test.ts`:`loadCandidateRange` 返回 `null` 时 create 仍 201,不是 `calculation_unavailable`。原「只信 confirmed/completed 直读」改为 RPC helper 源码锁。
|
||
- `tests/database-report-candidate-range.test.ts`:`service_role` 可 execute,`anon`/`authenticated` 不可;表 SELECT 仍 denied;无行返回空;窗口 JSON 只有两列;legacy confirmed 行优先。
|
||
|
||
## 让步
|
||
|
||
无。未 re-grant 表权限。
|
||
|
||
## 门禁解堵
|
||
|
||
`7ee7f825` 的 CSS 合同脱节已由 `0be51e65` / BUG-532 合入 staging,本单不再改那条测试。
|
||
|
||
## 门禁输出
|
||
|
||
- `./node_modules/.bin/tsc --noEmit`:0
|
||
- `npm run lint`:0 error / 74 warning(既有,未动)
|
||
- 定向:`report-candidate-range` + `personal-report-api` + `personal-report-worker` + migration 源码锁 **75 pass**
|
||
- `npm run test:db`(`tsx --test --test-concurrency=1 tests/database-*.test.ts`):**35 pass, 0 fail**(含新 RPC 套件)。第一次全量 34/35,`database-admin-identity` 迁移在套件开头失败,单跑即过,属 Docker 争用。
|
||
- 非数据库 `tsx --test tests/*.test.ts`:2626 pass;当时 2 fail 为 CSS 合同(已由 `0be51e65` 修)与 `identity-auth-integration`(与并行 `test:db` 抢 fixture,单跑已过)。
|
||
|
||
## 任务 3 · staging 实测
|
||
|
||
health:`e27d5dc5`(含 BUG-534),`latestMigration=20260904010000_read_report_candidate_range.sql`。RPC 对 `candidate_accepted` 行返回窗口。无 `report_candidate_range_unavailable`。
|
||
|
||
### 第一次(`3c4d8311`,`be6cf145` 镜像)
|
||
|
||
| 项 | 结果 |
|
||
| --- | --- |
|
||
| 创建 | generating,未在 16 秒内 `calculation_unavailable` |
|
||
| 引擎 | 5× `POST /api/consultation_workflow` 200 |
|
||
| 章节 | career / health 先落库;随后心跳死在 `section:theme-health_pressure`(BUG-534) |
|
||
| telemetry | career `stop` `inputTokens=5866`;health 首次 `tripwire`×2(无 `length`) |
|
||
| 阅读页 | GET 500 假失败(同一 `recordFromRow`) |
|
||
|
||
租约曾延长,避免第三次耗尽被标成 `calculation_unavailable`。
|
||
|
||
### 第二次(`20c94bf4`,`e27d5dc5` 干净 attempt 1)
|
||
|
||
| 项 | 结果 |
|
||
| --- | --- |
|
||
| 引擎 | 5× `consultation_workflow` 200(12:32:43–12:34:12Z) |
|
||
| 五章 | 全部 ready,narrative 757–1960 字,均有 `evidenceRefs` |
|
||
| 心跳 | 一次跑到 85% assemble,BUG-534 已不再打断 |
|
||
| 终稿 | `report_schema_invalid` / `final_parse_rejected`(不是 guard,不是 evidenceHash) |
|
||
| telemetry | 无 `finishReason=length`(五章 + 摘要均为 `stop`) |
|
||
|
||
Writer 回溯(只记 evidenceRef,不记正文):
|
||
|
||
| 章 | 绑定的 bundle 技法 |
|
||
| --- | --- |
|
||
| career | `ev-tech-d10` `ev-tech-a10` `ev-tech-amk` `ev-tech-vimshottari` |
|
||
| marriage | `ev-tech-d9` `ev-tech-ul` `ev-tech-dk` |
|
||
| wealth | `ev-tech-d2` `ev-tech-d11` `ev-tech-yoga` `ev-tech-ashtakavarga` |
|
||
|
||
### 2 倍线(对照 `PROGRESS-report-skill-parity-20260901.md` 改前 p50 est.tok 1135.5,2×=2271)
|
||
|
||
干净一次的五章 `inputTokens`:5804 / 5866 / 5921 / 6031 / 6405。p50=**5921 ≈ 5.22×**。墙钟 7.9–16.8s。摘要 1542 token / 2.9s。按红线 6 摆数据,不记成通过。
|
||
|
||
敏感度:RPC 有窗、无降级 warn、引擎 200;assemble 会在 sensitive 主题追加条件句。终稿未落库,无法从文档字段再确认 `candidate_window_only`。
|