Commit Graph
1012 Commits
Author SHA1 Message Date
jesse-ux 62be52dacf fix(chart): skip VedAstro on chart-page first paint
Independent Staging Quality Gate / validate (push) Canceled after 2m16s
Independent Staging Quality Gate / publish (push) Canceled after 0s
The natal /api/chart request from the chart page now sends skip_vedastro_main_entry_overview, matching the ephemeris page. Mapper and contract never read that evidence. BUG-718 recurs from BUG-161. Tests lock both foreground natal paths.
2026-09-16 00:22:00 +08:00
jesse-ux 69ede4367f fix(ci): migrate staging automatically before deploy
Independent Staging Quality Gate / validate (push) Successful in 10m6s
Independent Staging Quality Gate / publish (push) Successful in 4m18s
Quality gate now dispatches Migrate Staging Database, waits for success, then dispatches Deploy staging. Automatic migrate attests the in-progress gate run so the two jobs cannot deadlock. Manual migrate is unchanged. Staging schema changes must stay backward-compatible with the currently deployed app.
2026-09-15 23:36:09 +08:00
jesse-ux 1a73f64ecd fix(ci): let staging migration resolve the latest gated SHA
Independent Staging Quality Gate / validate (push) Successful in 9m38s
Independent Staging Quality Gate / publish (push) Successful in 2m7s
Leave Migrate Staging Database deploy_sha empty (or type latest) to use the newest successful backend-quality-gate push. Filled 40-hex still takes the original path. Production workflows stay required.
2026-09-15 23:19:44 +08:00
jesse-ux 5a8328e591 fix(web): paint the chart page shell before engine calls
Independent Staging Quality Gate / validate (push) Successful in 27m22s
Independent Staging Quality Gate / publish (push) Canceled after 47s
BUG-715/716/717: typed engine failures with logs and split copy, natal-only open, on-demand tabs, 10s timeout, in-memory cache, no speed-promise eyebrow.
2026-09-15 22:51:15 +08:00
jesse-ux 2533d5a328 fix(web): update chart-page sidebar contract to document-load navigation
Independent Staging Quality Gate / validate (push) Successful in 12m25s
Independent Staging Quality Gate / publish (push) Successful in 2m6s
Independent Staging Quality Gate / validate (pull_request) Successful in 14m58s
Independent Staging Quality Gate / publish (pull_request) Skipped
2026-09-15 19:48:10 +08:00
jesse-ux c6ecb86fb4 fix(web): leave chat with a document load for chart, ephemeris, and reports
Independent Staging Quality Gate / validate (pull_request) Failing after 9m45s
Independent Staging Quality Gate / publish (pull_request) Skipped
Independent Staging Quality Gate / validate (push) Failing after 9m14s
Independent Staging Quality Gate / publish (push) Skipped
Session URLs are written with history.pushState, so App Router
router.push cannot leave the home page. Sidebar destinations now
assign the document and stash the current conversation for return.
2026-09-15 19:29:41 +08:00
jesse-ux a38a941522 fix(qizheng): pass school options into the vendored chart and stabilize gates
Independent Staging Quality Gate / validate (push) Failing after 8m1s
Independent Staging Quality Gate / publish (push) Skipped
BUG-710: call getSevenGovernorsChart with ketuMode/siderealMode so
calculation.ketu_mode is the engine school, not the request echo.
BUG-711: stop forbidding /ephemeris in the sidebar contract.
BUG-712: compare ephemeris event longitudes at 6 decimals and fail
closed when the golden is missing.
2026-09-15 17:54:20 +08:00
jesse-ux 6bb892b826 fix(chat): keep page.tsx at the 1951-line freeze after lookup wiring
Independent Staging Quality Gate / validate (push) Failing after 6m40s
Independent Staging Quality Gate / publish (push) Skipped
Move BUG-705 bootstrap selection + session lookup into
resolveLookupBootstrap so Home only awaits once. The 1951 cap in
chart-view-route.test.ts is unchanged.
2026-09-15 17:40:17 +08:00
jesse-ux f51e494c5a fix(chat): keep rectification sessions findable and keep the delivery card
Independent Staging Quality Gate / validate (push) Failing after 6m45s
Independent Staging Quality Gate / publish (push) Skipped
Rectification answers now advance chat_sessions.updated_at (BUG-704).
A ?c= id missing from the loaded page is fetched before anyone may call
it deleted (BUG-705). The range card no longer has a post-card tie-break
button; live questions leave the card visible with adopt locked
(BUG-706/708). Spoken copy bans 相对支持度 (BUG-709).

Task docs assigned 700-704; qizheng already took 700-703.
2026-09-15 17:10:53 +08:00
jesse-ux d3a2c48ba5 feat(web): add read-only /ephemeris page
Independent Staging Quality Gate / validate (push) Failing after 7m30s
Independent Staging Quality Gate / publish (push) Skipped
2026-09-15 16:40:56 +08:00
jesse-ux 830799fafb feat(chart): add a read-only natal chart page
Independent Staging Quality Gate / validate (push) Canceled after 5m23s
Independent Staging Quality Gate / publish (push) Canceled after 0s
Open /chart from the sidebar without billing or a model. Five tabs; Western and Qizheng stay unavailable until those endpoints land. Ephemeris nav points at /ephemeris (404 until that page ships).
2026-09-15 16:27:50 +08:00
jesse-ux 2d7698ead3 fix(chat): keep stored rectification titles on open
Independent Staging Quality Gate / validate (push) Successful in 11m43s
Independent Staging Quality Gate / publish (push) Successful in 2m3s
Opening a saved birth-time session no longer restamps the title or updatedAt from the wall clock. Occupies BUG-699, recurrence of BUG-553.
2026-09-15 14:48:03 +08:00
jesse-ux ff5023a282 test(chat): restore two-layer markdown contract counts
Independent Staging Quality Gate / validate (push) Successful in 9m19s
Independent Staging Quality Gate / publish (push) Successful in 11m32s
Spoken and report layers each keep a message-markdown shell and both must call renderProse; login hard-jumps drop from 4 to 3 after the onboarding suggestion effect went away. No product code.
2026-09-15 13:27:17 +08:00
jesse-ux 6c748d86b0 fix(ui): 44px coarse hits and align CSS breakpoints
Independent Staging Quality Gate / validate (push) Failing after 8m53s
Independent Staging Quality Gate / publish (push) Skipped
Touch-screen message actions get a 44x44 hit once gap and bottom margin open to 20px; fine-pointer geometry stays 27x34. Tablet CSS cuts at 1023 to match sidebarViewportForWidth. Report centre/reader join the 767 mobile cut; TOC keeps 860. Occupies BUG-695/696/697.
2026-09-15 12:46:59 +08:00
jesse-ux 8144fca27d fix(chat): fold natal reports and drop homepage topic cards
Independent Staging Quality Gate / validate (push) Failing after 9m47s
Independent Staging Quality Gate / publish (push) Skipped
Homepage no longer waits on /api/onboarding for six starter questions.
Natal answers show the spoken layer first; the Level 2 skeleton sits in a
collapsed 完整分析 block. Wide tables scroll sideways on a phone. Form
inputs are 16px so iOS does not zoom on focus.
2026-09-15 12:27:16 +08:00
jesse-ux 039b0a2608 fix(rectification): say 这两分钟 only when two candidates remain (BUG-692)
Independent Staging Quality Gate / validate (push) Successful in 9m43s
Independent Staging Quality Gate / publish (push) Successful in 8m50s
Count-aware closed-pool invite, catch the five stale contract assertions, and mark M1b V1/V2 as not_measured.
2026-09-15 09:43:51 +08:00
jesse-ux c5fbee56a6 fix(rectification): label declared birth time as record or estimate (BUG-690)
Independent Staging Quality Gate / validate (push) Failing after 8m55s
Independent Staging Quality Gate / publish (push) Skipped
Hospital records, family estimates and period-only windows now keep distinct copy on the board and range card. Scoring still uses the reported clock as the search-window centre. Hospital minutes outside the current range are stated with the offset and no preference.
2026-09-14 23:20:15 +08:00
jesse-ux a266b6b727 fix(rectification): invite another dated event instead of saying the pool is closed (BUG-689)
Independent Staging Quality Gate / validate (push) Failing after 10m16s
Independent Staging Quality Gate / publish (push) Skipped
When the seven collect lines are closed, the range card still appears, but the copy asks for one more exact-day event of any kind instead of saying the questions are finished. A new dated event after delivery stales the snapshot so the session does not stay delivered.
2026-09-14 22:56:01 +08:00
jesse-ux 963c147c58 fix(rectification): do not hold delivery on exhausted or closed-ceiling paths (BUG-688)
Independent Staging Quality Gate / validate (push) Successful in 10m3s
Independent Staging Quality Gate / publish (push) Successful in 3m53s
Style questions still precede a converging range card when a renderable
followup exists. Exhausted, closed-ceiling, and holdout-unavailable exits
deliver immediately. Hold at most once per Case. Restore the single-gate
exit assertion and stop treating the tie-break ack as an exit carrier.
2026-09-14 21:43:21 +08:00
jesse-ux 6fd7925ad4 fix(web): update range-delivery test copy after tie-break hold (BUG-686/687)
Independent Staging Quality Gate / validate (push) Successful in 9m44s
Independent Staging Quality Gate / publish (push) Canceled after 29m18s
Gate npm test failed 6 assertions that still looked for 目前范围 in host
narration, or expected a range card before unused style probes. Keep the
card title; allow the closed-pool copy and heldForTieBreak path.
2026-09-14 21:04:10 +08:00
jesse-ux d97b9e9fe6 fix(rectification): ask unused style probes before every range card
Independent Staging Quality Gate / validate (push) Failing after 9m19s
Independent Staging Quality Gate / publish (push) Skipped
Hold delivery whenever tie-break questions remain, not only on a one-point lead. Drop the event-anchor discard for varga_style; keep the two-sign split gate.
2026-09-14 18:30:40 +08:00
jesse-ux 7f28bfecbb fix(rectification): ask tie-break questions before the range card (BUG-685/686/687)
Close leads hold delivery until unused D9/D10 style questions are asked. Tie-break POST merges the new turn into the transcript. Range copy no longer lists declined lines.
2026-09-14 18:23:54 +08:00
jesse-ux 9da42c99d2 fix(rectification): keep tied-first from delivering while probes remain (BUG-683/684)
Independent Staging Quality Gate / validate (push) Successful in 13m48s
Independent Staging Quality Gate / publish (push) Successful in 2m6s
tied_first is only terminal when there is no dated probe and targeted collect is exhausted. An unnarrowed opening window cannot announce adopt. Delivered dead choice cards take the delivered gap instead of the repair copy.
2026-09-14 17:06:51 +08:00
jesse-ux d5a8db0a4e fix(rectification): deliver range cards on tied first place instead of falling back to collect (BUG-680/681/682)
Independent Staging Quality Gate / validate (push) Successful in 17m18s
Independent Staging Quality Gate / publish (push) Successful in 13m52s
Refresh persist failures no longer count as attempts. tied_first completes with a range before stillNeedNarrowing. Delivery narration and cards share DELIVERY_OUTCOMES. The question gap gets a delivered terminal so the unavailable copy does not appear after a range is given.
2026-09-14 15:41:04 +08:00
jesse-ux b50a8f94ac fix(ci): update DESIGN contract after hanging spoken questions (BUG-679)
Independent Staging Quality Gate / validate (push) Successful in 10m36s
Independent Staging Quality Gate / publish (push) Successful in 7m40s
Quality gate run 2598 failed because the unwritten-evidence test still required the old persisted-question DESIGN sentence. Align the assertion with the BUG-678 hang-back contract.
2026-09-14 13:43:03 +08:00
jesse-ux 2dbcf2661b fix(rectification): hang spoken year follow-ups and drop engine representative from model tables (BUG-678/676)
Independent Staging Quality Gate / validate (push) Failing after 11m54s
Independent Staging Quality Gate / publish (push) Skipped
Spoken collect without askedTurnId now hangs on the last assistant message, remaining-candidate copy uses credible_range, and engine representativeTime no longer keeps eliminated minutes in model house tables.
2026-09-14 12:12:27 +08:00
jesse-ux d021bca5e1 fix(ci): clear leftover .venv before Python 3.14 venv create (BUG-677)
Independent Staging Quality Gate / validate (push) Successful in 12m2s
Independent Staging Quality Gate / publish (push) Successful in 2m8s
Staging gate run 2594 died in Install dependencies with FileExistsError on a reused hostexecutor .venv. Remove the leftover directory and create the venv with --clear so Python 3.14 mkdir does not abort the job.
2026-09-14 09:49:25 +08:00
jesse-ux 69ffa07d6b fix(rectification): stop speaking unstampable distinguish stems (BUG-674/675)
Independent Staging Quality Gate / validate (push) Failing after 20s
Independent Staging Quality Gate / publish (push) Skipped
Distinguish followups that cannot stamp a probe now go to persistExhaustionCollect instead of repeating the card stem in the assistant body. Choice focuses without asked_turn_id hang on the last assistant turn, and persisted_question with a live choice_card renders the existing card. Representative-time inconsistency is warn-only (BUG-676 investigating).
2026-09-14 03:42:48 +08:00
jesse-ux 8221c6121b fix(rectification): restore targeted collect cards from spoken focus (BUG-673)
Independent Staging Quality Gate / validate (push) Successful in 10m39s
Independent Staging Quality Gate / publish (push) Successful in 2m9s
Keep targeted existence questions as A-D cards. Recover collect-schema
stock by question-id prefix, surface the stem when persist fails, and
send spoken targeted existence to the repair exit instead of a naked prompt.
2026-09-14 01:51:55 +08:00
Jesse_ChenandCursor 14d199e694 fix(rectification): compare health and occupation aliases through one merge (BUG-672)
Independent Staging Quality Gate / validate (push) Successful in 12m12s
Independent Staging Quality Gate / publish (push) Successful in 24m21s
Skipped or already-reported health must not be asked again as health_pressure, and occupation declined as other must still close the occupation line.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-13 23:08:55 +08:00
Jesse_ChenandCursor 9912760104 fix(rectification): keep range-card tie-break entry honest after D9/D10 answers (BUG-666~668)
Independent Staging Quality Gate / validate (push) Successful in 13m8s
Independent Staging Quality Gate / publish (push) Canceled after 9m59s
Hide the button once both personality cards are answered, persist the second card in the same opt-in round, and freeze Skill 10.0.26.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-13 22:45:31 +08:00
Jesse_ChenandCursor 192845ce2f fix(rectification): keep targeted collect cards tappable after snapshot reread (BUG-669~671)
Independent Staging Quality Gate / validate (push) Successful in 25m6s
Independent Staging Quality Gate / publish (push) Successful in 2m9s
GET dropped the A–D card when the recast had no choice_frame, so a refresh left a disabled card and a collect-wait. Project from the persisted copy, rebuild the keep frame, and send a dead choice to repair-exit.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-13 21:50:35 +08:00
Jesse_ChenandCursor 530f260f76 fix(rectification): ask remaining split lines one card at a time (BUG-661~663)
Independent Staging Quality Gate / validate (push) Successful in 12m9s
Independent Staging Quality Gate / publish (push) Successful in 2m17s
Dated-pool empty now yields existence cards per remaining layer, leftover-candidate copy, and an optional D9/D10 tie-break on the range card. Skill 10.0.25.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-13 16:50:25 +08:00
Jesse_ChenandCursor 5d54d0597d test(rectification): lock failReceipt engine_message for compare failures
Independent Staging Quality Gate / validate (push) Successful in 12m27s
Independent Staging Quality Gate / publish (push) Successful in 7m46s
BUG-659 moved compare tool_failed fingerprints into failReceipt; keep the
source lock on the shared helper so the staging gate still requires a
redacted engine_message.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-13 11:03:20 +08:00
Jesse_ChenandCursor 073a45b73e fix(rectification): keep set-focus idempotent and record tool failures (BUG-659/660)
Independent Staging Quality Gate / validate (push) Failing after 13m36s
Independent Staging Quality Gate / publish (push) Skipped
Same-id focus returns instead of making the model retry; kind_hint targetKind is ignored. Failed receipts keep a redacted original error and known codes. Host fallback recap no longer duplicates dates.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-13 00:23:11 +08:00
Jesse_ChenandCursor 529fcc097f fix(rectification): keep invite collect CHECK-legal after kind mapping (BUG-656)
Independent Staging Quality Gate / validate (push) Successful in 9m14s
Independent Staging Quality Gate / publish (push) Successful in 2m12s
Full TAP failed because invite_more is not a target_kind enum value, and
exhaustion re-decide after skipped targeted persist must reuse decideAfterInferenceChange.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-12 06:34:35 +08:00
Jesse_ChenandCursor eae049d0ea fix(rectification): persist refresh attempts and map collect focus kinds (BUG-656/657/658)
Independent Staging Quality Gate / validate (push) Failing after 13m28s
Independent Staging Quality Gate / publish (push) Skipped
Empty engine refresh now records an already_answered attempt so GET can leave wait-to-narrow; collect kinds map onto the table CHECK; remaining candidates drive probe refresh.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-12 06:09:20 +08:00
Jesse_ChenandCursor 512be9b76e fix(rectification): persist refreshed probes only when the engine has new questions (BUG-655)
Empty refreshes were writing inference rows, and GET-selected probe keys could miss inference_state, so persist rejected the next card.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-12 01:51:57 +08:00
Jesse_ChenandCursor 6c9a089620 fix(rectification): refresh remaining probes and targeted collect before delivering range (BUG-653/654)
Independent Staging Quality Gate / validate (push) Successful in 13m54s
Independent Staging Quality Gate / publish (push) Successful in 10m50s
Dated-choice exhaustion is not convergence. Refresh probes from remaining
active candidates, then ask a targeted collect, then deliver. Skill 10.0.24.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-11 18:28:39 +08:00
Jesse_ChenandCursor f870d3d757 fix(rectification): keep dated precision cards after empty dated discriminator pool (BUG-651)
Staging gate 2558 failed because leftover tests still expected D9/D10 or leftover collect after the pool emptied. Discriminate sessions still deliver; dated precision cards still ask.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-11 15:22:55 +08:00
Jesse_ChenandCursor 66f63c7643 fix(rectification): deliver range when dated discriminator pool is empty (BUG-651/652)
When dated choice probes are exhausted after the training gate, stop treating yearless D9/D10 cards as the next discriminator and persist a range carrier in the same answer transaction.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-11 14:33:39 +08:00
Jesse_ChenandCursor 1fa994ea63 fix(rectification): keep dated occupation answers scoreable (BUG-649/650)
Independent Staging Quality Gate / validate (push) Successful in 13m26s
Independent Staging Quality Gate / publish (push) Successful in 9m33s
Occupation collect was wiping year-month into an unscored note, and idle gap copy never joined the evidence turn.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-11 11:49:52 +08:00
Jesse_ChenandCursor dd8f35f7ba fix(rectification): invite-first collect, holdout at 4 events, Skill 10.0.23 (BUG-646–648)
Stop domain-wheel collecting and age-band years in prompts. Ask until the training gate, then discriminate until convergence, then deliver a range plus a concrete follow-up. Reserve holdout only with four dated events.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-11 01:43:02 +08:00
Jesse_ChenandCursor 52db714ba9 fix(rectification): equal-weight collect, year-cue questions, classifier no/unsure (BUG-641–643)
Ask finance and health like other domains, put year-cued collect questions first, and let the classifier distinguish decline vs skip. Skill 10.0.22.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-10 21:53:10 +08:00
Jesse_ChenandCursor a3a51c32c2 fix(rectification): re-ask superseded collect ids instead of fake delivery (BUG-644/645)
A superseded collect row still occupied the unique question id, so the last
"没有" skipped the unasked domain and spoke delivery copy while can_adopt stayed false.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-10 21:03:12 +08:00
Jesse_ChenandCursor 8f9eb58738 fix(rectification): give persist-first-sentence fixture a completed batch (BUG-635)
Independent Staging Quality Gate / validate (push) Successful in 9m47s
Independent Staging Quality Gate / publish (push) Successful in 8m55s
The staging gate failed because that case claimed 记下了 without a write tool, which the unwritten-evidence guard now rejects.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-10 18:11:25 +08:00
Jesse_ChenandCursor a1db6fe550 fix(rectification): feed cluster span into confirmation-gate refresh paths
Independent Staging Quality Gate / validate (push) Failing after 9m55s
Independent Staging Quality Gate / publish (push) Has been skipped
Representative minutes still undercounted width on dossier refresh and parsed snapshots even after the engine used cluster coverage.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-10 17:51:07 +08:00
Jesse_ChenandCursor a998b6ec53 fix(rectification): stop unwritten-evidence claims and same-cluster dasha false conflicts (BUG-635–640)
Independent Staging Quality Gate / validate (push) Has been cancelled
Independent Staging Quality Gate / publish (push) Has been cancelled
Host only says 记下了 after a real write; Mastra schema rejections fail closed. Ledger year keys no longer drop quality probes, dual-dasha agreement is per cluster, width uses cluster span, and public house tables follow the inference minute.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-10 17:38:37 +08:00
Jesse_ChenandCursor d96b24c276 fix(rectification): keep skipped health out of holdout and repair empty exits (BUG-626, BUG-627)
Independent Staging Quality Gate / validate (push) Successful in 12m11s
Independent Staging Quality Gate / publish (push) Successful in 7m54s
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-10 11:59:47 +08:00
Jesse_ChenandCursor 0263658477 fix(rectification): host-fallback empty evidence turns and choice range narration (BUG-633, BUG-634)
Evidence turns that already recorded a batch no longer fail the whole run when the model emits no text; unchanged ranges now name which clock spans lead or lag, and the timeline no longer says 收窄.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-10 11:57:07 +08:00