Commit Graph
60 Commits
Author SHA1 Message Date
ClaudeandClaude Opus 5.5 20fafa3c29 fix(consult): receipt section cap, calendar year and Narayana method status on the card, answer-first (BUG-1729..1733)
- BUG-1729 (P0): the execution receipt capped methodologySections at 12 while
  the loader allows 32; a wealth turn delivers 14 and every receipt failed.
  The cap now lives in consultation-methodology-limits.ts and both read it;
  a sweep of all 2509 domain combinations x 3 questions passes the receipt.
- BUG-1730 (tooling): the offline model-input manifest moves to
  tests/helpers (scripts must not import tests, BUG-1140); the fact-checker
  reads the timing route's nested slow_transits.
- BUG-1731: the card carries the engine's calendar_year (both Tajika years
  and the splitting return); runtime contract rule A-08 (her Q2).
- BUG-1732: narayana_method_status names the undetermined / disputed step
  (seed, years, dual_lord, ad_direction) from the engine, "unknown" when it
  cannot; B3/B4 recorded as open; chat_use single_system_candidate /
  no_judgment; her Q1 sentence in the contract; B-02 rewritten.
- BUG-1733: the conclusion's first sentence answers the question; the
  frozen time range follows it (her Q5).
- Golden recaptured with TTL=0 (method_status; VedAstro offline reason is
  environment-dependent).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-08 07:28:00 +08:00
Claude 152848da4e Merge branch 'codex/chat-reopt-1107' into codex/phase2-chat-merge-1107
# Conflicts:
#	docs/BUG_HISTORY.md
2026-11-07 23:57:45 +08:00
ClaudeandClaude Opus 5.5 010c545e41 feat(consult): run her method layers, route-driven sub-skills, Arudha houses, product rules in the contract file (BUG-1725..1728)
- BUG-1725: evidence card Arudha rows carry pada_house_from_lagna and
  lord_natal_house plus arudha_columns; her phrasing rule
  「A2 位于水瓶;其主星土星位于本命第 2 宫」 is in the runtime contract.
- BUG-1726: methodology delivers her files in her three layers (ruling
  2026-11-07 Q3): router, status contract, output contract (skeleton
  §5/§6) and §0.4 every turn; §2.3, the matching event-judgment branch,
  the transit guide and route-needed sub-skills per question; maintenance
  files never. methodology.delivery records layer and reason. Removes
  the dead sharedConsultationMethodMarkdown.
- BUG-1727: sub-skills follow route techniques through her
  skill_family_router.json triggers (ruling Q4); question words are
  auxiliary; product domain table kept as labelled floor;
  specialized-jyotish reachable as technique paragraphs plus its
  boundaries; skill_read reads allowlisted skills/<family>/ files.
- BUG-1728: CHAT_METHOD_BOUNDARIES, natal instructions, MEVG policy and
  the shared reading move to references/product_runtime_contract.md
  (loaded by block name, each rule annotated as a product rule); her Q5
  rulings added; current order and a list of rules that may cross her
  writing floor recorded for her.
- Offline model-input manifest mode in consult-model-input-manifest.mts.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-07 23:52:05 +08:00
ClaudeandClaude Opus 5.5 f75aa137a7 fix(tooling): fact-checker reads the lord's house in 「Ax 星座(主X,落 N 宫)」 and maps Niryaana Shoola to its own field (BUG-1723)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-07 23:49:18 +08:00
ClaudeandClaude Opus 5.5 d890ecb7be eval(consult): model-input manifest, claim fact-checker, structure-only prompt fixes (占星师 2026-11-07 评测意见)
- Backtest harness writes, per run, the exact model request bodies (no
  headers or key), the computed card and a manifest: system prompt
  sections with char counts, tool calls and results, and a truncation
  check of the transmitted card (parses in full, equals the computed card,
  strings at the 800 cap, arrays at projection caps or shorter than the
  engine output, card gaps). --no-manifest turns it off.
- consult-answer-factcheck.py extracts checkable claims (regex, plus
  optional model extraction into JSON only) and verifies every claim
  deterministically against the card: matches / contradicts / not_on_card
  / status_mislabeled; per-layer transmitted / named / cited-correctly /
  audit status with "Used but never cited" flags; date precision,
  conclusion position and grade-rule checks; --report confirms answers
  written from a skill report.
- Professional voice (structure only): a short 结论 block first; point and
  lord facts only from the card field, one value per point; status words
  copied (the Yoga line no longer says 「只写 yogas.hits 里成立的」); a dasha
  level the card does not give is 未交付; dates are 名义计算边界 unless the
  birth time is rectified; each grade cites its rule and missing items.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-07 17:39:46 +08:00
Claude df558c211b feat(consult): annual brief on every card, Argala on domain houses, next Narayana AD, ported dashas and Sudasa in the dasha table (BUG-1701 follow-up) 2026-11-07 15:56:59 +08:00
Claude f44871bf7f fix(consult): parameters and book rules reach the model; raw parameter_sensitive in finished output is still a leak; backtest harness takes wealth and a request time 2026-11-07 15:27:45 +08:00
ClaudeandClaude Opus 5.5 30637729ff refactor: remove conversational rectification from the web app (BUG-1644)
Home chat surface, onboarding assessment, rectification cases API, Mastra
rectification tools and admin telemetry are gone; 生时纠正 is the standalone
/rectification page. Old birth_time_rectification sessions are hidden from
lists. Consult offer card links to the page. Copy renamed to 生时纠正.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXozbkyFNqbu8pVEtZ7W
2026-11-06 07:55:04 +08:00
ClaudeandClaude Opus 5.5 762287ede1 feat(consult): tell the model an elderly native's parents are probably gone (BUG-1580, local)
Two earlier attempts asked the model to reason from the age (a voice clause
with no birth date; an age_years field it ignored). The server now decides:
when the native is ELDER_PARENTS_AGE_THRESHOLD (65) or older at the request's
UTC+8 calendar date, the parents, family and general sections carry one plain
sentence right under the label, parents_life_stage, with the age in it. Below
65, or with no birth date, nothing is added. The birth date, time and place
still never reach the model; no prompt rule changes.

The biography backtest reads each figure's real birth date from the golden
instead of 1950-01-01 and passes its request time.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyeZrYn6ryNcSe5Y2Y
2026-11-04 21:07:29 +08:00
ClaudeandClaude Opus 5.5 80c3763fc4 chore(backtest): CONSULT_BACKTEST_GOLDEN swaps in a regenerated engine capture
Lets a before/after engine comparison run side by side without overwriting the
tracked fixture.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyeZrYn6ryNcSe5Y2Y
2026-11-04 12:33:32 +08:00
ClaudeandClaude Opus 5.5 feb16ed358 fix(consult): one short VISIBLE VOICE instead of 17k characters of stacked answer rules (BUG-1540)
The parents answer read as house-by-house fact chains with a gloss on every
house, opened with "both lines show pressure" instead of the pattern asked
for, and copied the example's 「实际是哪一种,告诉我一句」. The model was
satisfying ~13.9k characters of writing rules stated three times (voice,
English contract, user turn) plus copyable Good/Bad examples.

- VISIBLE VOICE is now the single statement: follow the user's own
  structure, open with the overall picture, explain why each placement
  means what it means, gloss terms briefly; then the red lines only.
- Contract and first/follow-up user turns point at it instead of
  restating it; all example answers removed.
- AFFLICTION_RANGE_RULE keeps the red line (no biographical verdicts, no
  reverse reassurance) but drops the forced range and closing ask; the
  question's own premise counts.
- Contract tests cap the voice at 2600 characters and lock every red line
  the old tests guarded; backtest script gains --question.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyeZrYn6ryNcSe5Y2Y
2026-11-04 09:53:27 +08:00
jesse-uxandGrok (agent loop) cd7e0a3493 把普通对话的预留、取消、追加、寒暄结算和用量计算收进结算工厂。
Independent Staging Quality Gate / validate (push) Successful in 13m51s
Independent Staging Quality Gate / publish (push) Successful in 4m6s
完成回答、直达校正、输出审核和开流前加载仍留在路由里,使 diff 停在 1500 行以内。

Co-Authored-By: Grok (agent loop)
2026-10-15 19:12:44 +08:00
jesse-uxandGrok (agent loop) a54f75e5e3 fix(capacity): limit each user and queue heavy compute briefly.
Consult, rectification turns, and report generation stop before a credit reservation when the product caps are hit. A full heavy-compute gate waits up to 8 seconds, and one consultation retries that 429 inside the same request.

Co-Authored-By: Grok (agent loop)
2026-10-15 13:33:06 +08:00
jesse-uxandGrok (agent loop) 9324253408 fix(consult): move the answer-effort probe out of the image build
The dry-run script lived under frontend/scripts and read a test fixture, so the web image build would type-check a file the image does not copy. Move it to frontend/tests with a non-test filename. The switch default is unchanged.

Checked: guard plus answer-effort tests 5 pass, 0 fail, 0 cancelled; probe --dry-run exit 0; tsc exit 0; lint 0 errors and 123 warnings.

Co-Authored-By: Grok (agent loop)
2026-10-15 10:56:22 +08:00
jesse-uxGrok (agent loop)Cursor
ab7f66be14 feat(consult): add an answer-step reasoning effort switch
The switch is off unless CONSULT_ANSWER_REASONING_EFFORT is set, so today's request body stays the same. A set value is sent as top-level reasoning_effort only on the answer step. The real A/B did not run: there is no model key.

Request-body probe, the named frontend tests (114 pass, 0 fail), tsc, and lint (0 errors) were run.

Co-Authored-By: Grok (agent loop)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-15 08:31:19 +08:00
jesse-uxandGrok (agent loop) 9e29310941 合并 staging,并让发问准备的检查跟上新位置
两条按源码原文查找的检查改认搬走后的写法,意思没有放宽。对照脚本挪到测试目录,镜像构建不再去找测试文件。业务代码和三个开关的默认值没改。

自测:相关前端测试 40 通过,失败 0,取消 0。假时钟仍是并行 160、串行 210。tsc 0 错,lint 0 error。

Co-Authored-By: Grok (agent loop)
2026-10-14 10:56:17 +08:00
jesse-uxandGrok (agent loop) a0e223e20c 发问准备可以并行,三个开关先保持关闭(BUG-1337~1339)
开流前的注销检查可以和读会话、解析模型同时进行;审核改到扣点前等待,不再挡住第一行;模型版本可以短缓存;两个领域可以一起算。本机没有数据库中位数,也没有带星盘网络库的镜像,所以默认仍是关闭、缓存 0、领域逐个算。

自测:tsc 0 错;lint 0 error;相关测试失败 0、取消 0。test:db 未跑。

Co-Authored-By: Grok (agent loop)
2026-10-14 07:23:58 +08:00
jesse-ux 16f9f86843 fix(consult): date the full-data cache and slim the model card
The cache key now includes the request date, and files older than two days are removed. The model card keeps values only. Parashari aspects are copied from the engine. Saving a chart warms the packet without blocking the response.

Biography severe conflicts rose from 1 to 3, so this is not accepted for merge. Not pushed.
2026-10-09 10:00:45 +08:00
Jesse_ChenandClaude Opus 5.5 6ad0bea320 feat(rectification): start from an offer card in the consultation, come back to it (BUG-1247~1251)
TASK-rectification-in-chat-step1-20261006, direct execution.

- The homepage 生时校正 pill and the text trigger (isRectificationHandoffQuestion)
  are gone. The consult agent decides (RECTIFICATION_OFFER_RULE, one
  definition) and calls offer-birth-time-rectification; the server decides
  whether a card may show (self, product on, no case in progress,
  feature_pricing price). The offer is stored with the answer and travels on
  run.completed; the card hangs under that answer.
- Opening from the card binds the offer to the case in the consultation's own
  messages (no table change); GET/POST /api/rectification/cases/[caseId]/source
  find the source and go back: one divider (time changed or not), earlier
  answers captioned 按校正前的时间, and a 按新时间重新看 button that sends only
  when clicked. Auto-return after the post-adopt check or a terminal case, only
  for work done in this view.
- Model history skips the divider and notes answers written with the old time.

Full suite 4987 / fail 24, identical to 6ec8efd5 (4973 / 24), no test name
lost; tsc 0; lint 0 errors; build keeps / Static, first-load gzip +0.20%.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
2026-10-07 12:58:58 +08:00
Jesse_ChenandClaude Opus 5.5 1252de3e63 fix(frontend-tests): expand test files in run-tests.mjs so Node 20 still runs the suite (BUG-1230)
Independent Staging Quality Gate / validate (push) Successful in 26m0s
Independent Staging Quality Gate / publish (push) Successful in 5m15s
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N4f2nya58RoRu4yEmJgRGE
2026-10-04 23:22:08 +08:00
jesse-ux 2c64b66423 fix(gate): keep quality-gate logs readable (BUG-1230)
Summarize successful steps, print the failing check and error text,
and split the validate job into seven steps. Local npm test stays TAP.
2026-10-04 22:58:17 +08:00
Jesse_ChenandClaude Opus 5.5 7806c72f2c feat(consult): cards carry functional profile v2; close round-4 backtest residue (BUG-1158, BUG-1176, BUG-1182)
- Evidence-card and biography-backtest goldens regenerated with the capture
  scripts (PYTHONHASHSEED=0, cache TTL 0; byte-identical twice); only the
  functional-role fields change.
- CAREER_FIELD_ASK_RULE: A10 / AL / Sun / 10th lord in 4/6/8/12 say
  resistance or cost only, never "not on stage / go deep", and houses are not
  translated into fields.
- AFFLICTION_RANGE_RULE: no portrait of an afflicted person from the lord's
  house or a benefic occupant ("managing / arranging / cares about your
  future"), actions do not presuppose reaching them, one ask per answer.
- Examples that paired "4th lord in 10th" with "her attention is on your
  future / close" now state the line is unafflicted (Monroe's chart had that
  exact placement and copied it). Retrograde line also bans "drags on".
- Backtest script: several follow-up domains in one run.
Changed assertions carry 原值 / 新值 / 原因 in the test comments.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N4f2nya58RoRu4yEmJgRGE
2026-10-02 12:32:02 +08:00
Jesse_ChenandClaude Opus 5.5 6a02e5e91e feat(consult): career answers don't guess the field — strength/resistance/timing + one ask; follow-up reads a stated job (BUG-1176 decision); goldens regenerated; rubric round-4 pass lines; backtest script career follow-up
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N4f2nya58RoRu4yEmJgRGE
2026-10-02 09:12:06 +08:00
Jesse_ChenandClaude Opus 5.5 071a196d11 fix(research): backtest correction turn passes typed history messages
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N4f2nya58RoRu4yEmJgRGE
2026-10-02 00:46:48 +08:00
Jesse_ChenandClaude Opus 5.5 955bab691a feat(consult): sections presuppose nothing, examples carry no reading rule or job shape, corrections are acknowledged
- natalAnswerShapeBody: NATAL_SECTION_RULE replaces 「这个人是什么样、你们怎么相处、
  事情会怎么走」; the shared voice quotes the same constant (BUG-1164)
- product-voice / VOICE.md: no 逆行 in examples, parents example leads with the
  affliction and asks to confirm, married-presupposing Good example removed (BUG-1165)
- follow-up shape: a user correction is acknowledged, never defended (BUG-1166)
- career examples carry no job shape (升职 / 专业能力 / 做深现有工作) (BUG-1168)
- biography backtest golden regenerated with the real engine so the card carries
  brief 1's aspects, combustion, yoga domains and saturn_from_moon_house;
  backtest script gains --correction follow-up turns

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N4f2nya58RoRu4yEmJgRGE
2026-10-02 00:38:01 +08:00
Jesse_ChenandClaude Opus 5.5 691ee440e3 feat(research): consult biography backtest harness and pre-change baseline
Independent Staging Quality Gate / validate (push) Successful in 16m20s
Independent Staging Quality Gate / publish (push) Successful in 3m54s
TASK-consult-no-presupposition-and-backtest-20261001 T4 infrastructure only
(T1-T3 untouched). New files only, so it merges cleanly with the parallel
evidence-card brief.

- capture_consult_biography_backtest_golden.py: same handler/body/trim as the
  evidence-card golden; nine public AA charts x parents/marriage/health/career.
- consult-biography-backtest-golden.json: real engine output, byte-reproducible.
- consult_biography_backtest_rubric.json: facts with sources, must_not,
  expected_signals per figure x domain.
- consult-biography-backtest.mts: runs the product's real agent, tools, card,
  methodology, user-turn shape and streamAgentResponse; deterministic checks only.
- Baseline on 9b937c4a: 39/72 severe biography conflicts; all five audit cases
  reproduce in both runs.

BUG-1170 is registered when brief 3 lands.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N4f2nya58RoRu4yEmJgRGE
2026-10-02 00:10:06 +08:00
Jesse_ChenandClaude Opus 5.5 96f83bb435 fix(build): move the persisted-replay research harness out of frontend/scripts; guard runtime sources against tests/ imports (BUG-1140)
The staging publish job built the web image without frontend/tests, and
next build type-checks every .ts under frontend/, so the harness importing
../tests/helpers/postgres-fixture.ts failed with TS2307. The harness depends
on the test fixture, so it now lives in frontend/tests/research; the Python
driver points there. A new test fails if src/ or scripts/ import tests/.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
2026-10-01 09:37:00 +08:00
Jesse_ChenandClaude Opus 5.5 73605c3b8e fix(rectification): product-domain open wrapper runs as invoker; V10 turn append in history test and replay harness; rename segment migrations (BUG-1131)
- open_agentic_rectification_case_v2 (12 args) becomes SECURITY INVOKER: the
  immutable-skill ACL reconciliation leaves EXECUTE on the 11-arg open only to
  service_role, so the definer wrapper hit 42501 on every homepage/new open.
- The pending-opening read moves to owner function
  agentic_rectification_opening_pending_v1, granted to service_role only.
- History test and persisted replay harness append turns through the V10
  request-idempotent overload; the V9 overload is revoked from service_role.
- Opening test fixture adds the required birth_time_source.
- Segment migrations renamed to 20261001* so they sort after staging's
  20260930* migrations on both fresh and existing databases.
- Stale Windows replay replaced with the production-path replay (M1/M2 equal
  to accepted research, implementation_identity included).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
2026-10-01 08:04:05 +08:00
66f087b588 feat(rectification): submit varga-resolution implementation for review
Review-only snapshot for BUG-1115 through BUG-1117; not merge-ready. New opening and append-turn PostgreSQL permission failures remain blocked. Persisted joint replay has zero completed questions; segment ordering remains off by default. The existing offline replay JSON is retained stale and unchanged after a denied overwrite, including its CRLF line endings. Browser/provider validation and final serial gates remain pending. No deployment, role permission changes, or staging/main push.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-01 08:04:04 +08:00
Jesse_ChenandClaude Opus 5.5 c2265dabb2 fix(home): early boot reads load as an async data: script so stylesheets no longer hold them back (BUG-1127)
An inline classic script after the stylesheets waited for them to download;
on staging the reads left at 2.4-3.1 s. Measurement script gains
--css-delay and --ua iphone.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N4f2nya58RoRu4yEmJgRGE
2026-10-01 01:36:35 +08:00
Jesse_ChenandClaude Opus 5.5 856f611fcf docs(home): records for the home first-load round (BUG-1127..1130); measurement script lint fix
Progress with before/after, T4 evidence (supportsImmutableAssets has no
effect under self-hosted standalone) in BLOCKED.md, device checklist,
changelog, board row to 待验收.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N4f2nya58RoRu4yEmJgRGE
2026-10-01 00:57:52 +08:00
Jesse_ChenandClaude Opus 5.5 31d0737897 chore(home): measurement script for the cold home boot (TASK-home-first-load §7)
Not part of CI.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N4f2nya58RoRu4yEmJgRGE
2026-10-01 00:40:17 +08:00
jesse-ux 88fe67df9b fix(sessions): title rectification chats with the result time 2026-09-25 01:56:57 +08:00
Jesse_ChenandClaude Opus 5 d6c359b205 fix(db): 把校正标题/活跃时间修补搬成迁移
BUG-699 / BUG-704 的数据修补原先只存在于
frontend/scripts/repair-rectification-session-titles.mjs,需要
SCHEMA_DATABASE_URL 才能跑,产品负责人没有任何按钮能执行它,所以那批
错日期的会话标题一直没修。

脚本里本来就是纯 SQL,搬进一次性迁移即可复用现成的
`Migrate Staging Database` 按钮:

- 新增 20260916020000_rectification_session_title_repair.sql,两段 update
  逐字取自脚本(合同测试比对,改了哪边都会红);权限守卫沿用
  20260915010000 的 schema_owner 写法。
- 幂等:改完之后两段 where 都不再匹配同一行,重复应用影响 0 行。
- 各自 get diagnostics + raise notice 打出行数;db-migrate.mjs 加 notice
  转发,否则 node-postgres 会把 NOTICE 丢掉,迁移日志里一个数字都看不到。
- 脚本降级为只读核对工具:--apply 改为报错并指向迁移;导入不再连库。

生产停在 7b620c7a(没有 use-rectification-surface.ts,标题固定且不写库),
两段 where 自然匹配 0 行,是预期内的 no-op。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JUei7K13cYxLHE3Axe4A45
2026-09-16 01:35:01 +00: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 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_ChenandClaude Fable 5.1 aff9d19343 fix(chat): keep the latest reply mounted through settlement and animate the timeline collapse
The streaming and settled versions of the trailing assistant reply were
two components, so settling unmounted one and mounted the other and the
entrance tween replayed over text the reader was already on. One
LatestAssistantEntry now owns that row under a single key, and the
history list excludes it. The CSS entrance keyframe that doubled the
GSAP tween is gone and the tween matches the documented 160ms. The step
timeline no longer remounts on settle: it is a button-controlled
disclosure with a 180ms grid-rows transition, the reader's own toggle
wins over the live default, and an in-flight request with no events yet
shows a queued row instead of an empty shell.

BUG-474 BUG-475

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JUei7K13cYxLHE3Axe4A45
2026-09-02 04:29:01 +00:00
Jesse_Chen 5c1d095f69 feat(frontend): use offline global birth place hierarchy 2026-08-30 15:55:45 +08:00
Jesse_ChenandCursor 3198fb6b2b perf(frontend): split chat streaming, load Inter, isolate admin CSS
Independent Staging Quality Gate / validate (push) Successful in 10m14s
Independent Staging Quality Gate / publish (push) Successful in 11m5s
Settled messages no longer rebuild on every token, Inter is actually
requested, and admin routes drop the 33 KB chat stylesheet. Root
force-dynamic is gone so public shells can prerender without changing
the no-store Cache-Control contract.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-29 03:39:43 +08:00
Jesse_Chen 7a24a8d387 ops: harden production data migration
Staging Backend Quality Gate / validate (push) Successful in 10m5s
Staging Backend Quality Gate / publish (push) Successful in 9m18s
2026-08-10 04:19:24 +08:00
Jesse_Chen ffbe505c23 fix: complete production data migration rehearsal
Staging Backend Quality Gate / validate (push) Failing after 49m36s
Staging Backend Quality Gate / publish (push) Has been skipped
2026-08-09 14:17:01 +08:00
Jesse_Chen d36ca7aac2 ops: align production ETL with legacy admin source 2026-08-09 13:53:07 +08:00
Jesse_Chen f53e2d09ed ops: add production PostgreSQL migration tooling 2026-08-09 13:20:06 +08:00
Jesse_Chen f3946eaa6f chore: retire legacy rectification runtime
Staging Backend Quality Gate / validate (push) Failing after 9m57s
Staging Backend Quality Gate / publish (push) Has been skipped
2026-08-07 12:55:32 +08:00
Jesse 8473146773 fix(staging): deploy gate-attested controllers
Staging Backend Quality Gate / validate (pull_request) Successful in 14m1s
Staging Backend Quality Gate / publish (pull_request) Has been skipped
2026-08-06 19:18:04 +08:00
Jesse_Chen 5957803de4 Merge GitHub upstream into Gitea primary 2026-08-05 11:13:34 +08:00
Jesse_Chen 53e04da7db fix(deploy): verify all retired staging migrations 2026-07-30 15:45:23 +08:00
Jesse_Chen 08c39cf949 fix(deploy): verify retired staging migration 2026-07-30 15:16:06 +08:00
linmeng f4e35974c6 Revert "merge: sync GitHub staging to Gitea"
Deploy staging to test server / deploy (push) Failing after 14m49s
This reverts commit a55c69115d, reversing
changes made to 02c9c9f3d6.
2026-07-30 14:38:17 +08:00
Jesse_Chen 8ade6ed5c8 refactor: rebuild birth time rectification agent 2026-07-28 13:04:30 +08:00