Commit Graph
261 Commits
Author SHA1 Message Date
Jesse_Chen 0034333b87 Merge codex/chart-dasha-yogini-20261021 (#88) into staging
Independent Staging Quality Gate / validate (push) Successful in 14m47s
Independent Staging Quality Gate / publish (push) Successful in 4m43s
2026-10-22 09:18:42 +08:00
Jesse_Chen 61462e7e48 Merge codex/synastry-staging-fix-20261021 (#85 T7-T11) into staging
Independent Staging Quality Gate / publish (push) Canceled after 0s
Independent Staging Quality Gate / validate (push) Canceled after 1m3s
# Conflicts:
#	CHANGELOG.md
#	docs/BUG_HISTORY.md
#	docs/tasks/README.md
2026-10-22 09:17:02 +08:00
jesse-uxGrok (agent loop)Cursor
a06598c8a6 feat(chart): Yogini 切换条留在栏内,并补上口径
两个选项分掉右栏宽度,点选区域至少 44px。同一提交写上设计、文案、更新日志和真人步骤。

Co-Authored-By: Grok (agent loop)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-22 03:57:22 +08:00
Jesse_Chen 28dd8df333 Merge codex/chart-subject-table-20261021 (#86) into staging
Independent Staging Quality Gate / validate (push) Successful in 15m56s
Independent Staging Quality Gate / publish (push) Successful in 3m36s
# Conflicts:
#	CHANGELOG.md
#	docs/BUG_HISTORY.md
2026-10-22 03:23:59 +08:00
Jesse_Chen 680159bab3 Merge codex/chart-ascendant-slash-20261021 (#87) into staging
Independent Staging Quality Gate / validate (push) Successful in 14m14s
Independent Staging Quality Gate / publish (push) Successful in 4m9s
# Conflicts:
#	CHANGELOG.md
#	docs/tasks/README.md
2026-10-22 01:21:22 +08:00
jesse-uxGrok (agent loop)Cursor
3cbd0cbd33 fix(chart): 报告数值表才单行,保存他人共用一处,点内边距不关编辑框
F1 只有表头含速度、度数或黄经的表保持单行,其余表和打印都换行。
F2 保存他人收成 saveOtherProfile,档案页保存后也清星盘和星历缓存(BUG-1405)。
F3 编辑框只在点到框外时关闭,内边距不再丢掉未保存内容(BUG-1406)。

Co-Authored-By: Grok (agent loop)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-22 01:13:42 +08:00
jesse-uxGrok (agent loop)Cursor
d2edf8b7a8 fix(chart): 上升的状态格改成「/」
上升不是行星,本命、月亮盘和分盘的状态格不再写「不适用」。悬停或点一下说明原因。报告同一格写「/」,并在表下加中英文说明。

Co-Authored-By: Grok (agent loop)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-22 00:03:19 +08:00
jesse-uxGrok (agent loop)Cursor
a2f65842e6 fix(report): toast a missing English edition and tint export selection
Opening the export sheet now says once, at the top, why English is unavailable. Selected borders, radios and checks use the theme color while fills stay neutral.

Co-Authored-By: Grok (agent loop)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-21 23:13:15 +08:00
jesse-uxGrok (agent loop)Cursor
57ee79cc5f fix(synastry): let the same pair start another report
A finished match used to reopen the old report. Starting again now writes a new one and charges again; a report still being written is reused.

Co-Authored-By: Grok (agent loop)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-21 23:08:21 +08:00
jesse-uxGrok (agent loop)Cursor
885bd5665f fix(chart): 星盘页可以改出生资料,人名看得出能点,报告行星表不再挤断
报告行星表按内容定列宽,速度显示到 4 位小数,星宿英文名不再从中间拆开。星盘页出生行就地编辑;别人已保存的出生时间仍锁住。

Co-Authored-By: Grok (agent loop)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-21 20:38:23 +08:00
jesse-uxandCursor dc80a43aae fix(synastry): open the report on its own address
The shared report URL lit the personal-report item in the sidebar. The new address keeps the synastry item current and replaces the old link.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-21 18:07:51 +08:00
jesse-uxandCursor 229df727c9 fix(synastry): scroll the report from the full-width outer container
The narrow column was the only scrollport, so the wheel did nothing on the side blanks.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-21 17:53:08 +08:00
jesse-uxandCursor 6a761bc51e fix(synastry): show timeline spans and keep old chats on the default model
English reports hid the analysis fold, timeline titles left out the month span, and deleting a pinned model stopped the next consultation turn.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-21 16:28:04 +08:00
jesse-uxandCursor 67c1e68815 feat(synastry): lay out the match screens from the confirmed prototype
Independent Staging Quality Gate / validate (push) Failing after 18m11s
Independent Staging Quality Gate / publish (push) Skipped
The add-person card, the generating wait, and the report header follow the prototype the product owner pointed at.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-20 17:22:17 +08:00
jesse-uxandCursor 0a5d93ab75 fix(admin): save published models as a new draft and allow deleting them
Independent Staging Quality Gate / validate (push) Successful in 14m0s
Independent Staging Quality Gate / publish (push) Successful in 4m5s
Editing a published model tried to update a non-draft row, so the save collapsed into a generic constraint error.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-20 15:02:42 +08:00
jesse-uxandCursor 3956519f33 feat(synastry): open a follow-up chat from one stored report section
The chat stays bound to that section's saved calculation, checks each chart fact before answering, and bills like an ordinary turn.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-19 21:44:25 +08:00
jesse-uxGrok (agent loop)Cursor
e8793bb0d2 fix(synastry): fill section evidence and stop the English job from sticking
The review found empty sections and an English job that stayed running. Take evidence from reader briefs, retry one section, and settle before marking the report ready.

Co-Authored-By: Grok (agent loop)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-19 12:55:17 +08:00
jesse-ux d4ed45d891 Merge remote-tracking branch 'origin/staging' into codex/synastry-full-report-20261018 2026-10-19 12:01:06 +08:00
jesse-uxGrok (agent loop)Cursor
9ea5b3b0c0 feat(synastry): write the full relationship report on demand
The pair page and reader replace the leftover chat draft, and the same pair is not charged again.

Co-Authored-By: Grok (agent loop)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-19 10:03:55 +08:00
Jesse_ChenandClaude Opus 5.5 e7cab24c1a merge origin/staging into narrower delivery (只碰文档;显示漏段 BUG-1375 顺延为 BUG-1392, issue #77)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LutgzyJqNhPpZy1nFsJtN3
2026-10-19 09:15:55 +08:00
jesse-uxandCursor a0e84845e9 feat(people): raise the chart archive cap to 20 people
Independent Staging Quality Gate / validate (push) Successful in 17m28s
Independent Staging Quality Gate / publish (push) Successful in 23m1s
The trigger, the shared constants, and the limit sentence now agree, and the archive and person menus scroll instead of growing past the screen.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-18 16:33:06 +08:00
jesse-uxandGrok (agent loop) 1ba473970f 避免四舍五入和缺区间把还可能的时间从目前范围里藏掉。
Co-Authored-By: Grok (agent loop)
2026-10-17 21:16:32 +08:00
jesse-uxandGrok (agent loop) 56a3c08145 显示生时校正里还活着的时间段,不再把空档涂进目前范围。
交付卡、旁白和遥测在有簇区间时按段书写。打分、出题和进区间门槛未改;对半出题和门槛 6 因为没有真值保留回放而没有交付。

Co-Authored-By: Grok (agent loop)
2026-10-17 03:07:25 +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-uxGrok (agent loop)Cursor
454951de27 fix(chart): keep the ascendant nakshatra the page already renders
The chart API rebuilt the ascendant without nakshatra, lord, and pada, so those cells stayed blank. Cache schema is now 7. Centered column headers line up with their cells, and the current dasha card keeps its tint without the left accent.

pytest 34 passed. tsc 0 errors. lint 0 errors and 123 existing warnings.

Co-Authored-By: Grok (agent loop)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-15 09:46:37 +08:00
jesse-uxandGrok (agent loop) 29949e0a29 接受删除旧报告页,并跟上最新 staging
Independent Staging Quality Gate / validate (push) Failing after 8m31s
Independent Staging Quality Gate / publish (push) Skipped
旧的结构化报告页已由另一单删除,标识留在现在用的阅读页。测试不再读取那个文件。更新日志和 Bug 历史两边都保留。

自测:tsc 退出码 0;lint 0 error、123 warning;修复单点名的 3 个测试 7 通过、0 失败、0 取消。

Co-Authored-By: Grok (agent loop)
2026-10-14 12:27:33 +08:00
jesse-uxandGrok (agent loop) 392c1f7218 合并 staging,并去掉已删组件留下的样式名单条目
knownUnstyled 不再保留 personal-report-additional-charts。它只被删掉的报告组件用过。其它白名单没有同类残留。业务代码没改。

自测:类名合同和两条否定合同 6 通过,失败 0,取消 0。tsc 0 错,lint 0 error。

Co-Authored-By: Grok (agent loop)
2026-10-14 11:10:17 +08:00
jesse-uxandGrok (agent loop) fca62fda43 给别人出报告能读到档案,对话和报告标明 AI 生成
BUG-1063:后台按列只读档案,授权前数据库拒绝读表,授权后通过。对话输入框下和报告标题下加上 AI 生成说明。状态板按已部署提交改措辞,不标 resolved。下载文件元数据没有做。

自测:tsc 退出码 0;lint 0 error;定向测试 51 通过;test:db 82 项里 13 项为 Windows 已知失败,无新增;隐私标记退出码 0。

Co-Authored-By: Grok (agent loop)
2026-10-14 09:30:51 +08:00
jesse-uxandGrok (agent loop) 1f9947a0d7 删除三个无调用方接口和约 3000 行前端死代码
关掉未登录就会触发约 20 秒计算的入口,并记下 BUG-1342。普通导出的逐字节锁保留。自测 tsc 0 错,lint 0 error / 123 warning,改到的前端测试 fail=0,两份 Python 测试通过,test:db 失败 13 条与 Windows 已知清单一致。

Co-Authored-By: Grok (agent loop)
2026-10-14 08:39:32 +08:00
jesse-uxandGrok (agent loop) 6350943152 回答生成时侧栏不再跟着每一帧重画
外壳只在会话、当前项或账户这些数据变了才更新。60 帧计数从注册 60 次、提交 60 次降到 0 次,点下去仍是最新一次操作。BUG-1329。

Co-Authored-By: Grok (agent loop)
2026-10-14 04:12:02 +08:00
jesse-uxandGrok (agent loop) 8883f8475f 报告开头改成重点摘要卡
新报告用围栏画出大运和事业、财富、婚恋,标题下写名字与日期。旧报告不变。

自测:pytest test_report_full_data_fix.py 10 通过;相关四份报告测试退出码 0;前端相关测试 147 通过、0 失败、0 取消;tsc 退出码 0;lint 0 error。

Co-Authored-By: Grok (agent loop)
2026-10-13 21:45:43 +08:00
Claude 3cc7fe23d1 merge origin/staging into the report translation fix (issue #53)
Independent Staging Quality Gate / validate (push) Successful in 15m24s
Independent Staging Quality Gate / publish (push) Successful in 3m48s
Docs-only conflict in BUG_HISTORY: BUG-1311 (#52) and BUG-1312..1315 (#53)
both appended after BUG-1310; kept both in number order. Product owner
chose option A on #53: Claude merges a stale branch when only docs conflict.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LutgzyJqNhPpZy1nFsJtN3
2026-10-13 18:44:38 +08:00
jesse-uxandGrok (agent loop) 6e6fae8d84 fix(ui): stop the composer radius from clipping the first glyph
The inner textarea kept a 12px radius after its side padding was cleared, so the first character was cut into an arc. Only .composer textarea is now border-radius 0. The outer frame is unchanged.

Verified: chat-reading-load-mobile.test.ts was 7 pass / 1 fail before the CSS change, then 8 pass / 0 fail / 0 cancelled. tsc --noEmit exit 0. npm run lint 0 errors.

Co-Authored-By: Grok (agent loop)
2026-10-13 14:32:25 +08:00
jesse-uxandGrok (agent loop) a295afa40f fix(report): draw charts in the full-data body and clean Chinese residue
New reports draw one north-Indian chart for each ready divisional in the body, so the trailing duplicate section drops. Chinese full-data prose no longer glues English onto Han or leaves listed, background, or native. The birth table starts with the ascendant. The D9 same-sign column says yes or no.

Self-test: tsc exit 0; npm run lint exit 0 (0 errors, 125 existing warnings); three frontend test files 39 pass, 0 fail, 0 cancelled; pytest test_report_chart_blank_columns.py 16 passed; seven related report files 88 passed, exit 0; privacy markers 63 passed.

Co-Authored-By: Grok (agent loop)
2026-10-13 14:02:26 +08:00
Jesse_ChenandClaude Opus 5.5 586561eb68 fix(settings): the ayanamsa hint says new rectifications follow the setting (BUG-1310)
Independent Staging Quality Gate / validate (push) Successful in 13m43s
Independent Staging Quality Gate / publish (push) Successful in 16m40s
Also records the 10-12 rectification batch as merged in the bug history,
changelog and task index.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HwMNZEzdzmrbPhuRNmZe3C
2026-10-12 15:43:27 +08:00
jesse-uxandJesse_Chen 0f05c9e26a fix(rectification): scan chart boundaries in the user's ayanamsa (BUG-1307, BUG-1309) 2026-10-12 15:36:50 +08:00
jesse-uxandJesse_Chen 74949d0475 feat(rectification): open on the nearest chart boundary (BUG-1307) 2026-10-12 15:36:43 +08:00
jesse-uxandJesse_Chen 805932addd fix(consult): mark rectification opened only after the case opens (BUG-1306) 2026-10-12 15:36:36 +08:00
jesse-uxandJesse_Chen b8bdc003c3 fix(consult): open rectification when the user asks directly (BUG-1306)
Independent Staging Quality Gate / validate (push) Successful in 19m41s
Independent Staging Quality Gate / publish (push) Successful in 3m52s
2026-10-12 14:17:05 +08:00
jesse-uxandJesse_Chen 98c98aa535 feat(report): replace the reader edition with the full-data report
Generate the full-data edition (pl9_personal_long_report.v4) and remove the reader edition. English still contains Han, so the API withholds it (BUG-1272, investigating). This commit is not pushed to staging.
2026-10-08 22:29:31 +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 171a3f25ac fix(consult): plain wrapping for answer prose; stop reading the analysis checklist aloud
Independent Staging Quality Gate / publish (push) Canceled after 0s
Independent Staging Quality Gate / validate (push) Canceled after 12m33s
BUG-1252: answer prose drops text-wrap: pretty. WebKit (every iPhone browser)
applies it to the whole paragraph, so lines came out evenly short with a blank
strip on the right and every streamed character re-broke the lines above.

BUG-1253: the condensed checklists and shared reading open with an
analysis-only note; PLAIN_SPEECH_RULE (one definition) tells the writer not to
quote layer names, signal counts, rules or house-counting, caps evidence in
brackets at two, and gives everyday words for card fields with no Chinese name
(no coined names like 合力星). Marriage layers become everyday wording; career,
wealth and health say not to announce layers.

Full suite 4966 / fail 24, identical to baseline d2c22ca2 (4962 / 24); build
keeps / Static; first-load gzip unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
2026-10-06 20:19:50 +08:00
jesse-uxandJesse_Chen 6e16dc5e16 fix(rectification): keep one delivery and adopt with the birth date
Accept and GET now decide with the same birth snapshot as the answer, so an under-age probe cannot flip can_adopt. The exit skips a second write when this reply already delivered. The card stays without an adopt button when adoption is not allowed, and a refusal shows the Chinese sentence.
2026-10-06 16:03:57 +08:00
Jesse_ChenandClaude Opus 5.5 da226db1d4 fix(consult): blank-line paragraphs, drop the H2 contract line, remove the assistant avatar
Independent Staging Quality Gate / validate (push) Failing after 18m5s
Independent Staging Quality Gate / publish (push) Skipped
Acceptance fix for 28113fa0 (TASK-consult-conversational-answer-fix-20261006):
- F1: chat-answer-detail no longer pins 'Every H2 must start its own line'
  (first turns carry no H2), assertion change noted in three columns.
- F2: Good examples separate paragraphs with a blank line and the shape says
  so; .message p is pre-wrap, so a single newline only wraps.
- Product request: remove the assistant avatar on every surface (consult,
  rectification, onboarding); --assistant-content-inset back to 0px.

Full suite 4941 / fail 24, identical to baseline 86cafe68 minus a timing flake;
build keeps / Static; first-load gzip -0.1%.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
2026-10-06 15:58:40 +08:00
jesse-uxandJesse_Chen 5a589a9058 fix(consult): write the first turn as chat, not a sectioned report
Ordinary consult first turns drop Markdown headings and the required
action list. People are named in the paragraph, and pinned examples no
longer contain copyable advice. BUG-1244, BUG-1245.
2026-10-06 15:58:40 +08:00
jesse-ux 137ed6f408 fix(consult): stop the consult-gate VedAstro wait and record step timing
Consult turns reuse a same-day official snapshot inside the rectification gate, or record deferred_in_consultation instead of starting another 4-second snapshot. Classification, step 0, step 1, and the time to the first answer character go into the existing usage metadata and a new admin usage column.

BUG-1231, BUG-1232
2026-10-05 02:33:36 +08:00
Jesse_ChenandClaude Opus 5.5 ae18952e51 fix(report,chart): blank columns — drop Kranti, split Ashtakavarga house SAV, ascendant nakshatra, engine varga dignity, no duplicate charts (BUG-1199..1203)
Independent Staging Quality Gate / validate (push) Successful in 15m27s
Independent Staging Quality Gate / publish (push) Successful in 3m42s
- Report p33 table: no Kranti column (no producer; materials.kranti stays blocked).
- Report p53 table: the "SAV" column was the with-Lagna total (386). Split in the
  reader into SAV / Lagna BAV / SAV + Lagna with a totals row; ashtakavarga.py is
  untouched (frozen rectification identity, ERR-115).
- /api/chart ascendant carries nakshatra / pada / lord (_nakshatra_fields shared with
  the nine bodies); chart cache schema 4 -> 5.
- /api/varga_full bodies carry dignity_level from varga_dignity_level, the function
  the Vimsopaka path now shares (A/B identical); the chart page shows the D1 status
  wording and no longer derives a three-level dignity itself.
- Report page draws each chart once: the trailing block skips charts the body already
  fenced (same rule as the export); the birth-time caveat moves under the body's
  chart heading.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
2026-10-03 09:11:15 +08:00
Jesse_ChenandClaude Opus 5.5 6987875b84 feat(rectification): post-adopt verdict says whether the adopted time still fits and offers 改用 HH:MM; renumber BUG-1170→1172 (BUG-1173)
Independent Staging Quality Gate / validate (push) Successful in 14m56s
Independent Staging Quality Gate / publish (push) Successful in 3m23s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
2026-10-02 07:40:30 +08:00
Jesse_ChenandClaude Opus 5.5 b62308c4ad fix(rectification): segment verification report drops the minute leaderboard (BUG-1151)
Independent Staging Quality Gate / validate (push) Successful in 33m11s
Independent Staging Quality Gate / publish (push) Successful in 3m46s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
2026-10-01 21:14:57 +08:00
Jesse_ChenandClaude Opus 5.5 282455cc83 fix(rectification): post-adopt check gets its own message and keeps its buttons; segment bubble copy (BUG-1146, BUG-1147)
Independent Staging Quality Gate / validate (push) Successful in 13m59s
Independent Staging Quality Gate / publish (push) Successful in 3m49s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
2026-10-01 16:59:32 +08:00