Commit Graph

526 Commits

Author SHA1 Message Date
Jesse_Chen b466a6fc8c fix(report): stop listing reports via PostgREST JSON paths (BUG-574)
Staging PostgREST rejects the executiveSummary JSON-path alias, so GET /api/reports 500s. Persist a plain card_summary column from the Markdown excerpt instead.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-07 11:08:00 +08:00
Jesse_Chen 0a1076d613 docs: record BUG-569/570 fix SHA 517df002
Independent Staging Quality Gate / validate (push) Successful in 8m36s
Independent Staging Quality Gate / publish (push) Successful in 7m16s
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-07 10:04:31 +08:00
Jesse_Chen 517df002b5 fix(rectification): narrate the credible range and stop scoring periods by length (BUG-569–570)
Choice copy was comparing the search window, so every answer said the range had not changed. Block-scan summed raw scores, so longer afternoon windows won before any evidence difference.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-07 10:03:28 +08:00
Jesse_Chen 814c924e4a fix(rectification): exhaustion exit, explain layer, range reading, unknown-time scan (BUG-565–568)
Independent Staging Quality Gate / validate (push) Successful in 9m20s
Independent Staging Quality Gate / publish (push) Successful in 6m51s
Keep askable cards after exhaustion, explain each probe, read the adopted credible range in reports and chat, and compare declared periods before the minute grid when the clock is unknown.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-07 09:10:37 +08:00
Jesse_Chen b938c76ac4 docs: record post-rebase SHAs for BUG-558–560
Independent Staging Quality Gate / validate (push) Successful in 9m0s
Independent Staging Quality Gate / publish (push) Successful in 23m38s
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-06 23:06:46 +08:00
Jesse_Chen 62afa521f4 fix(rectification): keep proportional prior after holdout calibration (BUG-560)
Implement offset and softmax relative-support scales and a public holdout calibration script, but leave the default proportional because no scheme passed the coverage-and-width gate.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-06 23:05:42 +08:00
Jesse_Chen 3c30a579a9 docs: record BUG-564 fix SHA e4d16b75
Independent Staging Quality Gate / validate (push) Has been cancelled
Independent Staging Quality Gate / publish (push) Has been cancelled
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-06 23:00:39 +08:00
Jesse_Chen e4d16b7545 fix(report): keep monthly KP headings and readable timing sources
Heading-ensure only covered empty packets, so present KP months still dropped MD/AD titles and sanitizer blanked source_path. Also lock the quality gate onto the new contracts.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-06 23:00:01 +08:00
Jesse_Chen 5aa05bf0d0 docs: record BUG-563 fix SHA ebc8380f
Independent Staging Quality Gate / validate (push) Successful in 9m19s
Independent Staging Quality Gate / publish (push) Has been cancelled
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-06 22:34:04 +08:00
Jesse_Chen ebc8380fb8 fix(report): defer lazy-section setState so staging lint can pass
IntersectionObserver fallback called setVisible inside useEffect, which the
react-hooks compiler treats as an error. Queue it on rAF so the gate can
publish the MD report page.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-06 22:33:38 +08:00
Jesse_Chen 8b140479bd docs: record BUG-561/562 fix SHA cfcd369d
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-06 21:46:49 +08:00
Jesse_Chen cfcd369d4f feat(report): render longform Markdown as the report and close gaps2 holes
New reports skip the writer, persist pl9 Markdown as the body, and settle zero-token usage on the catalog model. Planned longform sections now emit blocked rows instead of vanishing.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-06 21:46:16 +08:00
Jesse_Chen a444c49391 docs: record BUG-557 fix SHA 0102a973
Independent Staging Quality Gate / validate (push) Successful in 9m30s
Independent Staging Quality Gate / publish (push) Successful in 2m0s
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-06 19:23:31 +08:00
Jesse_Chen 0102a973a3 fix(web): persist generated session titles against the post-RPC title (BUG-557)
The first-round title guard compared the pre-RPC snapshot, so append_consultation_question had already rewritten the title and the model name never landed.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-06 19:22:43 +08:00
Jesse_Chen e2f4b55c13 docs: record BUG-554 fix SHA dc6598d7
Independent Staging Quality Gate / validate (push) Successful in 10m56s
Independent Staging Quality Gate / publish (push) Successful in 6m27s
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-06 18:30:25 +08:00
Jesse_Chen dc6598d7e4 fix(web): keep the settings dialog one size and move billing into it (BUG-554)
The four account panes now share a fixed frame, chart profiles open as list then detail, and membership lives in the homepage dialog instead of a separate page.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-06 18:29:51 +08:00
Jesse_Chen 40bd0e9372 docs: record BUG-555/556 fix SHA bf8ad0d1
Independent Staging Quality Gate / validate (push) Successful in 10m20s
Independent Staging Quality Gate / publish (push) Successful in 2m3s
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-06 15:17:08 +08:00
Jesse_Chen bf8ad0d1ff fix(web): keep consultation conclusions across turns and surface cache hits (BUG-555, BUG-556)
Session history was silently clipped to the first 4000 characters of the last 12 messages, so follow-ups could not see timing or audit tables. Keep an append-only tail plus a checkpoint summary, retry overflow in the same request, and expose cache hit rate in admin usage.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-06 15:16:18 +08:00
Jesse_Chen 9ce7a374ed docs: record BUG-553 fix SHA a1956deb
Independent Staging Quality Gate / validate (push) Successful in 9m24s
Independent Staging Quality Gate / publish (push) Successful in 7m51s
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-06 14:35:00 +08:00
Jesse_Chen a1956deb63 fix(web): summarize session titles, sort by activity, and paginate history (BUG-553)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-06 14:34:30 +08:00
Jesse_Chen d04990fc4a docs: record BUG-551/552 fix SHA 055b7adc
Independent Staging Quality Gate / validate (push) Failing after 8m1s
Independent Staging Quality Gate / publish (push) Has been skipped
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-06 13:09:42 +08:00
Jesse_Chen 055b7adca9 fix(web): keep composer enabled while generating and treat stop as neutral (BUG-551, BUG-552)
Enter now queues one follow-up instead of dropping it, and a rectification stop leaves the streamed reply with a grey notice instead of an error alert.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-06 13:08:43 +08:00
Jesse_Chen f5566c06ef docs: record BUG-542 fix SHA 5483649b
Independent Staging Quality Gate / validate (push) Successful in 10m17s
Independent Staging Quality Gate / publish (push) Successful in 6m9s
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-06 12:39:34 +08:00
Jesse_Chen 5483649bc1 fix(api): stop labeling database blips as unconfigured (BUG-542)
Deploy-window connection errors were translated into "服务尚未配置".
Only real configuration errors keep that copy; other 503s use service_unavailable.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-06 12:37:21 +08:00
Jesse_Chen 3b410c141a docs: record BUG-550 fix SHA ca4e2408
Independent Staging Quality Gate / validate (push) Successful in 21m6s
Independent Staging Quality Gate / publish (push) Successful in 28m59s
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-05 21:07:26 +08:00
Jesse_Chen ca4e2408d8 fix(rectification): keep collecting while dated evidence domains remain open
Separated candidates were treated as adoptable while finance, relocation, health, or occupation collect was still pending, so clickable cards and a verification report appeared before those questions were asked.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-05 21:06:38 +08:00
Jesse_Chen 1052a0271e docs: record BUG-549 fix SHA 988d97ae
Independent Staging Quality Gate / validate (push) Successful in 19m41s
Independent Staging Quality Gate / publish (push) Successful in 8m29s
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-05 16:08:01 +08:00
Jesse_Chen 988d97ae62 fix(rectification): treat a yes discriminator as covering that domain's collect
A choice-card yes/weak_yes already told us the domain happened, so skip the same-domain "which year" collect without writing the ledger.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-05 16:07:27 +08:00
Jesse_Chen c295b8536a docs: record BUG-548 fix SHA 52a4570c
Independent Staging Quality Gate / validate (push) Successful in 9m39s
Independent Staging Quality Gate / publish (push) Successful in 7m19s
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-05 11:32:51 +08:00
Jesse_Chen 52a4570ca1 fix(report): keep the public table allowlist in sync with the longform appendix
The staging quality gate failed because database-local-business still listed the old pg_tables set after 20260905010000.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-05 11:32:17 +08:00
Jesse_Chen c6207dc8b4 docs: record BUG-547 fix SHA cd704a92
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-05 10:35:04 +08:00
Jesse_Chen cd704a92e7 fix(rectification): ask a ready discriminator before dated collect
Family coverage still continues dated collection when nothing can split leftover minutes, but an already-built choice card must not be displaced by spoken finance collect.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-05 10:34:24 +08:00
Jesse_Chen 998406cee6 fix(rectification): keep collecting after family denial
Independent Staging Quality Gate / validate (push) Failing after 10m10s
Independent Staging Quality Gate / publish (push) Has been skipped
Family "没有" was treated as adopt-ready once the training gate was open. Remaining dated domains still distinguish leftover minutes, so persist those questions instead of writing the adopt narration.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-05 09:38:59 +08:00
Jesse_Chen 329f8a2109 fix(rectification): pin the adopt card and drop casual adopt copy
Independent Staging Quality Gate / validate (push) Successful in 11m34s
Independent Staging Quality Gate / publish (push) Successful in 1m56s
The time card stayed under an earlier collect question, and the close said to just use a time for now. Keep the card on the delivery turn and present the analysis as this round's result.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-05 02:03:19 +08:00
Jesse_Chen 7c776bdd3a fix(web): vendor Inter so image builds skip Google Fonts
Independent Staging Quality Gate / validate (push) Successful in 9m0s
Independent Staging Quality Gate / publish (push) Successful in 1m59s
BUG-430 loaded Inter via next/font/google, which failed Gitea publish
run 2408 when the Docker build could not reach fonts.googleapis.com.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-05 00:28:26 +08:00
Jesse_Chen 40c623edf6 fix(rectification): bind quality cards to the followup probe
Independent Staging Quality Gate / validate (push) Successful in 23m15s
Independent Staging Quality Gate / publish (push) Failing after 36s
Graduation no longer gets the college-experience question, and identical D24 splits only ask once.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-04 23:47:51 +08:00
Jesse_Chen 73c2a1a51e docs(report): close BUG-535 after five-theme personal_full ready
Staging at 4ef4c406 produced a standard five-theme document with nine
charts, five chapter bodies, and an empty blocked disclosure.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-04 23:37:24 +08:00
Jesse_Chen 4ef4c4064f fix(report): name final-parse guards and scrub blocked wording
Independent Staging Quality Gate / validate (push) Successful in 12m11s
Independent Staging Quality Gate / publish (push) Successful in 1m57s
Five-theme assemble cleared the chart and actionNotes caps, then failed
three anonymous guards. Log field path plus kind only, and strip
deterministic phrases from sections the producer already marked blocked.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-04 23:09:21 +08:00
Jesse_Chen a75929c139 fix(report): keep actionNotes within the document cap at assemble
Independent Staging Quality Gate / validate (push) Successful in 12m42s
Independent Staging Quality Gate / publish (push) Successful in 1m56s
Five-theme personal_full still failed final parse after the charts cap
fix because writer output exceeded actionNotes.max(24). Truncate at
assemble; do not raise the schema cap.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-04 22:22:38 +08:00
Jesse_Chen d4627a5019 fix(rectification): dedupe post-adopt verify and skip this probe only
Independent Staging Quality Gate / validate (push) Successful in 14m31s
Independent Staging Quality Gate / publish (push) Successful in 1m59s
Adopted reverse-verify repeated already-asked collect stems, treated 「这题跳过」 as stopping the case, and promised holdout/OOS checks that never ran. Collect spoken stems no longer prefix a year.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-04 21:51:59 +08:00
Jesse_Chen 6b038e6d0d docs(report): record BUG-535 fix SHA 61194690
Independent Staging Quality Gate / validate (push) Has been cancelled
Independent Staging Quality Gate / publish (push) Has been cancelled
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-04 21:34:34 +08:00
Jesse_Chen 6119469069 fix(report): bind v2 chart cap to CHART_IDS.length
Five-theme personal_full assembled nine charts after health vargas landed, but the document schema still capped at six. Bind the count to the enum, align JSON/Python contracts, and log final-parse paths without values.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-04 21:33:27 +08:00
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
Jesse_Chen e27d5dc5a7 fix(report): accept section: job progress phases on read-back
Independent Staging Quality Gate / validate (push) Successful in 8m41s
Independent Staging Quality Gate / publish (push) Successful in 1m53s
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
Jesse_Chen a793edb1ad fix(rectification): keep opening greeting across set-focus
Independent Staging Quality Gate / validate (push) Successful in 9m24s
Independent Staging Quality Gate / publish (push) Successful in 1m57s
set-focus only attaches the question stem. Retracting live Chinese before
it wiped the opening hello with an empty replace. Other public tools still
retract planning prose.

BUG-533.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-04 19:51:24 +08:00
Jesse_Chen 7baf230066 fix(report): load candidate ranges through a read-only RPC
Accepted profiles were selecting a revoked rectification table and failing the report before the engine ran. Degrade to a null window when that optional read fails.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-04 19:17:14 +08:00
Jesse_Chen 0be51e65f5 fix(rectification): ask relationship and career before dated collect
Independent Staging Quality Gate / validate (push) Successful in 10m6s
Independent Staging Quality Gate / publish (push) Has been cancelled
Move nextDatedCollectFollowup after family coverage so a new case still
asks D9 then D10. Dated third-event collect stays education → finance →
relocation → health. Admin input padding contract follows --space-3.

BUG-531 and BUG-532.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-04 19:06:54 +08:00
Jesse_Chen 3847e9c91d fix(rectification): collect a dated third event before OOS and occupation
Independent Staging Quality Gate / validate (push) Failing after 8m39s
Independent Staging Quality Gate / publish (push) Has been skipped
Holdout stays closed until the training gate opens and skips declined domains.
Dated collect order is shared with exhaustion; spoken prompts must name the domain; progress copy uses collection_progress only.

BUG-527 through BUG-530.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-04 18:17:17 +08:00
Jesse_Chen 5c5f25a33b docs(report): record staging engine smoke and BUG-525 report-worker blocker
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-04 17:31:33 +08:00
Jesse_Chen 41f973f036 fix(rectification): bind collect-denial follow-up to the asked turn
Independent Staging Quality Gate / validate (push) Has been cancelled
Independent Staging Quality Gate / publish (push) Has been cancelled
Saying no to a spoken collect left the next stem only on current_question, so the preparing spinner never cleared. Persist the ack, link asked_turn_id, and emit run.completed with turnId (BUG-525).

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-04 16:27:53 +08:00