Files
Jyotisha/docs/tasks/PROGRESS-report-candidate-range-20260904.md
T
Jesse_Chen e27d5dc5a7
Independent Staging Quality Gate / validate (push) Successful in 8m41s
Independent Staging Quality Gate / publish (push) Successful in 1m53s
fix(report): accept section: job progress phases on read-back
Heartbeat and GET were parsing progress_phase with a pattern that rejects the colon prefix the writer already persists, which aborted generation after the first chapter.

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

4.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 进行中(引擎已通;被 BUG-534 打断) BUG-526 / BUG-534
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 实测(be6cf145

healthgitCommit=be6cf145latestMigration=20260904010000_read_report_candidate_range.sql。RPC 对 candidate_accepted 行返回窗口。无 report_candidate_range_unavailable

request 3c4d8311-d222-494b-8174-b8e731204fd2standard 五主题):

结果
创建 generating,未在 16 秒内 calculation_unavailable
引擎 5× POST /api/consultation_workflow 20011:48:1711:50:03Z);租约恢复后又 5×
章节 theme-career ready 1776 charstheme-health_pressure ready 1581 charsattempt 2
telemetry career finishReason=stop inputTokens=5866 elapsedMs=10765health 首次 tripwire×2(无 length
阅读页 GET 500 report_generation_failed(假失败)

随后 worker 心跳停在 section:theme-health_pressure。根因是 BUG-534recordFromRow 不接受 section:。为避免第三次租约耗尽把报告标成 calculation_unavailable,将该 job 租约延长到 15:06Z,等 534 部署后再过期恢复。