Files
Jyotisha/docs/tasks/PROGRESS-report-candidate-range-20260904.md
T
Jesse_Chen e674cd3871 docs(report): record staging personal_full after BUG-526 and BUG-534
Engine and five chapters now complete on accepted profiles; final assemble still fails as BUG-535.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-04 20:43:17 +08:00

84 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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` 20012:32:4312:34:12Z |
| 五章 | 全部 readynarrative 7571960 字,均有 `evidenceRefs` |
| 心跳 | 一次跑到 85% assembleBUG-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.52×=2271
干净一次的五章 `inputTokens`5804 / 5866 / 5921 / 6031 / 6405。p50=**5921 ≈ 5.22×**。墙钟 7.916.8s。摘要 1542 token / 2.9s。按红线 6 摆数据,不记成通过。
敏感度:RPC 有窗、无降级 warn、引擎 200assemble 会在 sensitive 主题追加条件句。终稿未落库,无法从文档字段再确认 `candidate_window_only`