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

5.4 KiB
Raw Blame History

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 generatePOST /api/reportsloadCandidateRange 都走 helper,不再 from("agentic_rectification_cases") / from("birth_time_rectification_cases")
  • 迁移 20260904010000_read_report_candidate_range.sqlsecurity definersearch_path=''revoke public/anon/authenticated、grant execute 只给 service_role。返回值只有 start_time / end_time
  • completed 枚举: 任务书以为它不在 birth_time_rectification_cases 状态枚举里。20260720010000_conversational_rectification_schema.sql 已纳入 confirmedcompleted 两个终态。RPC 使用这两值;前端不再维护一份 .in("status", …) 列表。abandoned 不取窗。

测试

  • tests/report-candidate-range.test.tspermission denied / throw / 空行三态;合法窗;敏感度输入无窗口;源码锁两处调用。
  • tests/personal-report-api.test.tsloadCandidateRange 返回 null 时 create 仍 201,不是 calculation_unavailable。原「只信 confirmed/completed 直读」改为 RPC helper 源码锁。
  • tests/database-report-candidate-range.test.tsservice_role 可 executeanon/authenticated 不可;表 SELECT 仍 denied;无行返回空;窗口 JSON 只有两列;legacy confirmed 行优先。

让步

无。未 re-grant 表权限。

门禁解堵

7ee7f825 的 CSS 合同脱节已由 0be51e65 / BUG-532 合入 staging,本单不再改那条测试。

门禁输出

  • ./node_modules/.bin/tsc --noEmit0
  • npm run lint0 error / 74 warning(既有,未动)
  • 定向:report-candidate-range + personal-report-api + personal-report-worker + migration 源码锁 75 pass
  • npm run test:dbtsx --test --test-concurrency=1 tests/database-*.test.ts):35 pass, 0 fail(含新 RPC 套件)。第一次全量 34/35,database-admin-identity 迁移在套件开头失败,单跑即过,属 Docker 争用。
  • 非数据库 tsx --test tests/*.test.ts2626 pass;当时 2 fail 为 CSS 合同(已由 0be51e65 修)与 identity-auth-integration(与并行 test:db 抢 fixture,单跑已过)。

任务 3 · staging 实测

healthe27d5dc5(含 BUG-534),latestMigration=20260904010000_read_report_candidate_range.sql。RPC 对 candidate_accepted 行返回窗口。无 report_candidate_range_unavailable

第一次(3c4d8311be6cf145 镜像)

结果
创建 generating,未在 16 秒内 calculation_unavailable
引擎 5× POST /api/consultation_workflow 200
章节 career / health 先落库;随后心跳死在 section:theme-health_pressureBUG-534
telemetry career stop inputTokens=5866health 首次 tripwire×2(无 length
阅读页 GET 500 假失败(同一 recordFromRow

租约曾延长,避免第三次耗尽被标成 calculation_unavailable

第二次(20c94bf4e27d5dc5 干净 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

干净一次的五章 inputTokens5804 / 5866 / 5921 / 6031 / 6405。p50=5921 ≈ 5.22×。墙钟 7.916.8s。摘要 1542 token / 2.9s。按红线 6 摆数据,不记成通过。

敏感度:RPC 有窗、无降级 warn、引擎 200assemble 会在 sensitive 主题追加条件句。终稿未落库,无法从文档字段再确认 candidate_window_only