5.1 KiB
5.1 KiB
PROGRESS · personal report sectioning · 2026-08-30
Task 0 gate — observed after staging deployment
- Telemetry commit:
1f1fdb1d155e472118ad7d1d4c49b1b5cb95bcb2. - Deployed staging SHA verified at
https://staging.jyotisha.chat/api/health:37c0c139656c5eab7150221e8c09d9aa6fcf95b8. - Observation window: 2026-08-30 20:46–20:51 Asia/Taipei, one real authenticated “生成完整报告” run.
- User-visible result: report did not complete; the report center shows
report_schema_invalid. - Server event: one
[personal-report]generation_failedwithinnerReason=final_parse_rejected.
Telemetry sample (privacy-safe fields only)
| observed agent attempts | outcome | finishReason | inputTokens | outputTokens | totalTokens | repairAttempted |
|---|---|---|---|---|---|---|
| 1 | resolved | stop |
4,772 | 3,069 | 7,841 | false |
Gate metrics from this sample
- Report failures: 1.
- Agent telemetry attempts observed: 1.
finishReason="length": 0 / 1 = 0% of observed agent attempts; 0 / 0 = not applicable when restricted to agent attempts that themselves failed.outputTokensp50: 3,069.outputTokensp95: 3,069.- Important attribution: this run's agent call resolved with
finishReason="stop"; the later report-level final parse failed. Therefore this sample does not support attributing the report failure to truncation.
Gate decision
Task 0 observation is complete. No output cap, schema relaxation, or schema tightening was made from the estimate in the task brief. The observed failure is recorded as a report-level parse failure, not a length failure. It is now permissible to begin Tasks 1–4, subject to the Docker/database stop rule and the remaining quality gates.
Task 1–4
- Not started at the time of this entry.
Task 1–4 implementation
- Task 1: added
public.personal_report_sectionsin migration20260830020000_personal_report_sections.sql. The migration is transactional and idempotent, enables RLS, grants authenticated read-only access to own rows, grants service-owned writes, and exposes security-definer section state functions (ensure,start,complete,block).report_documentremains final-output-only. - Task 2: generation is now serial
plan → section:<id> × N → summary → assemble → ready. Each section receives only the evidence refs declared by its plan entry plus completed section titles; summary receives only completed titles andclaimStatus. Existing ready section rows are reused on resume and are not regenerated. - Task 3: section retry exhaustion marks that section
blockedwith an allowlisted error category, continues other sections, and assembles an explicit disclosure. A report fails only when every write section is blocked or summary/assembly fails. - Task 4: worker updates
progress_percentandprogress_phase; the report page renders phase-aware progress while preserving timed-out/resume/report-center states.
Validation
./node_modules/.bin/tsc --noEmit --pretty false: passed.npm run lint: passed with 0 errors and 24 pre-existing warnings.- Focused sectioned generation, resume, blocked fallback, polling, and database tests: 33 passed, 0 failed.
npm run test:db: passed with 34 passed, 0 failed (Docker-backed).- Full
./node_modules/.bin/tsx --test tests/*.test.ts: exit 1 in this local run. The report-polling assertion that locked the old fixed loading copy was the only failure caused by this change and was updated with the required explanation; the remaining observed failures were existing local environment/resource failures (parallel PostgreSQL fixture/migration startup and missing Pythonyamlmodule), listed for baseline comparison before final push. npm run db:migrate:check: passed in isolated Docker PostgreSQL; apply exited 0, check exited 0, and reapply exited 0 withalready applied 20260830020000_personal_report_sections.sql.npm run build: passed; Next.js production build completed with 5 pre-existing Turbopack dynamic-filesystem warnings.
Full-test comparison
./node_modules/.bin/tsx --test tests/*.test.ts: exited 1 in the final local run. The report-section focused tests remained green; no new report-generation or section-service failure was observed. The failing tests were outside this change and/or local-environment dependent:service and restricted admin database identities stay separatedv9 legacy backfill maps statuses, keeps one resumable per user and is idempotentingest P0: education kinds, batch confirm, opening focus reuse, precision lockPR-4 candidate decisions use server UUIDs, receipt-derived gates and separate acceptance/confirmationchanged staging workflows are syntactically valid YAML(local Python missingyaml)- additional database suites reported PostgreSQL fixture shutdown/permission/resource failures during the long parallel run.
- These failures are not being reclassified as code-green; the focused acceptance suite and the required Docker-backed
npm run test:dbare the evidence for this change.
Delivery
- Task 1–4 commit: pending local commit.
- Staging push/deploy: pending.