Commit Graph
1423 Commits
Author SHA1 Message Date
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-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_ChenandClaude Opus 5.5 998d07baf9 test(db): run the gte/lt check on a probe table the runtime role can read
Independent Staging Quality Gate / validate (push) Successful in 15m20s
Independent Staging Quality Gate / publish (push) Successful in 4m51s
The first version seeded chart_profiles, which the runtime role cannot read
directly; the gate failed with permission denied (run 4168).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014Ad9rqAB8pXXvyzh7f4X8v
2026-10-21 14:38:16 +08:00
Jesse_ChenandClaude Opus 5.5 503a16fb92 fix(db): add gte and lt to the self-hosted query builder so synastry reports can be created
Independent Staging Quality Gate / validate (push) Failing after 18m15s
Independent Staging Quality Gate / publish (push) Skipped
createSynastryFullReport counted today's reports with .gte(), which the
self-hosted client did not implement; every create threw before any credit
was reserved and surfaced as a generic 500 (BUG-1399). The synastry create
path now uses the shared DataQueryBuilder type, and a scan test requires every
builder method used in src to exist on the self-hosted client.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014Ad9rqAB8pXXvyzh7f4X8v
2026-10-21 14:15:59 +08:00
jesse-uxandCursor 63984d4fca fix(synastry): use the shared 767px cut and drop the unused place class
Independent Staging Quality Gate / validate (push) Successful in 15m1s
Independent Staging Quality Gate / publish (push) Successful in 3m49s
The staging gate rejected a 760px breakpoint and a class with no CSS rule.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-21 09:24:20 +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 dac6b7fae9 test(db): expect the published synastry.full prices in the business schema
Independent Staging Quality Gate / validate (push) Successful in 17m30s
Independent Staging Quality Gate / publish (push) Successful in 4m5s
The local PostgreSQL check reads the whole feature_pricing table, so the 19-credit rows from the new migration have to be in the expected list.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-20 14:24:20 +08:00
jesse-uxandCursor 006b067e82 fix(synastry): open the match page from the live flag and price it at 19 credits
Independent Staging Quality Gate / validate (push) Failing after 14m48s
Independent Staging Quality Gate / publish (push) Skipped
The closed sentence was prerendered when the build had no database. The page now asks for the flag in the browser, and synastry.full is published at 19 credits.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-20 12:52:28 +08:00
jesse-uxandCursor 549e37b995 fix(synastry): check the dasha sentences the report actually writes
A shifted antardasha or English mahadasha was passing because the checker only recognized 大运 and 子运.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-20 07:36:32 +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
123295135a fix(synastry): restore report paging and finish the third review gaps
Independent Staging Quality Gate / validate (push) Successful in 16m50s
Independent Staging Quality Gate / publish (push) Successful in 10m2s
The list query had been split into four reads, so older pages no longer followed one cursor. A7 was read from the wrong module, and the shell asked for the product switch on every mount.

Co-Authored-By: Grok (agent loop)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-19 15:53:06 +08:00
jesse-uxGrok (agent loop)Cursor
362d903c31 fix(synastry): close the second review gaps on evidence, billing, and the sidebar
The second review still failed on missing database and route coverage, an unmarked relationship structure, a stuck English lease, and a sidebar that fetched the product switch itself.

Co-Authored-By: Grok (agent loop)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-19 14:48:11 +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-uxGrok (agent loop)Cursor
2cc5c0c128 merge origin/staging into the second marriage-match fix
Keep both changelog sections and both bug-history tails.

Co-Authored-By: Grok (agent loop)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-18 20:29:46 +08:00
jesse-uxGrok (agent loop)Cursor
cf5a62c684 fix(synastry): store only the two marriage-match profiles
The saved row was the whole dossier twice. Keep the default and Raman match results, drop a concurrent duplicate insert back to the first row, and hide the new rows from the old history list.

Checked service tests 9/9, tsc 0, lint 0 errors, and test:db 73 pass / 13 fail matching the Windows known list.

Co-Authored-By: Grok (agent loop)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-18 19:14:31 +08:00
Jesse_ChenandClaude Opus 5.5 79f6ac5297 chore(rectification): refreeze sealed and offset replays as upstream_sync8_2026_10_18
Sync8 changed ashtakavarga.py, dasha_analyzer.py and narayana_dasha.py,
which are in the frozen scoring identity. Sealed (20) and reported-offset
(900) replays match the scoring_perf_2026_10_13 records trial for trial,
so ERR-110 stores a new record. Prior records are kept byte-for-byte.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HwMNZEzdzmrbPhuRNmZe3C
2026-10-18 18:57:02 +08:00
jesse-uxGrok (agent loop)Cursor
52160a9cef merge origin/staging into marriage-match fix
Keep both changelog entries and the archive-limit board row. The marriage-match row stays on this branch for the storage fix.

Co-Authored-By: Grok (agent loop)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-18 18:51:34 +08:00
Jesse_ChenandClaude Opus 5.5 0b6e6a2d58 fix(report): join simultaneous Deeptadi states with a comma in English
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HwMNZEzdzmrbPhuRNmZe3C
2026-10-18 18:46:02 +08:00
Jesse_Chen 84967d747f Merge remote-tracking branch 'origin/staging' into codex/upstream-sync8-finish-20261018
# Conflicts:
#	CHANGELOG.md
2026-10-18 18:44:55 +08:00
jesse-uxGrok (agent loop)Cursor
83c97a8976 fix(avastha): keep simultaneous conditions and use the PVR activity formula
Upstream e628118d, 7d545039, f75a6e77, and ac565836. Dignity follows the sign, Deeptadi keeps every condition that applies, and Shayanadi hours come from the previous Hindu sunrise. BUG-1389.

Co-Authored-By: Grok (agent loop)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-18 16:57:45 +08:00
jesse-uxGrok (agent loop)Cursor
cf063834ca feat(synastry): store the upstream seven-item marriage match
Move the bde5d615 engine and full-synastry skill in unchanged, save both profiles without billing or a page, and retire the old synastry module.

Checked targeted pytest, tsc 0, lint 0 errors, service tests 6/6, and test:db 73 pass / 13 fail matching the Windows known list.

Co-Authored-By: Grok (agent loop)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-18 16:44:05 +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) d2296c2654 把前后端共用的请求契约和小工具收成一份,避免再各抄一份。
报告创建请求、校正入口和同名类型改从 contracts 推导;同义的对象判断与 sha256 改走共享函数。调用处用 import 别名保留原名,使 diff 低于 1500 行。行为、哈希和状态字符串不变。

Co-Authored-By: Grok (agent loop)
2026-10-15 22:22:44 +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) 360a667e4f fix(capacity): align two stale checks with the rate-limit edit.
The consultation contract still required await directly before runConsultationWorkflow(toolInput), and a new report test shifted three privacy allowlist lines. Keep the toolInput lock and move that test to the end. No product code change.

Co-Authored-By: Grok (agent loop)
2026-10-15 15:31:35 +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
Claude ef49257b73 merge origin/staging into answer effort ab (issue #65)
Independent Staging Quality Gate / validate (push) Successful in 14m3s
Independent Staging Quality Gate / publish (push) Successful in 3m47s
Docs-only catch-up; agent-loop rule A.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LutgzyJqNhPpZy1nFsJtN3
2026-10-15 11:15:23 +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
Claude 7175548531 merge origin/staging into api chart subprocess gate (issue #64)
Independent Staging Quality Gate / validate (push) Successful in 13m47s
Independent Staging Quality Gate / publish (push) Successful in 4m5s
Docs-only catch-up; agent-loop rule A.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LutgzyJqNhPpZy1nFsJtN3
2026-10-15 10:44:32 +08:00
jesse-uxandGrok (agent loop) 0d73cd332b merge origin/staging into the answer-effort branch (issue #65)
Keep the pushed switch commit and take the newer staging history, including the bounce brief.

Co-Authored-By: Grok (agent loop)
2026-10-15 10:42:03 +08:00
Claude 71f7fac3a1 merge origin/staging into chart ascendant row (issue #53)
Independent Staging Quality Gate / validate (push) Successful in 13m39s
Independent Staging Quality Gate / publish (push) Successful in 3m47s
Docs-only catch-up; agent-loop rule A.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LutgzyJqNhPpZy1nFsJtN3
2026-10-15 10:14:36 +08:00
jesse-uxandGrok (agent loop) 18fdce6006 merge origin/staging into the chart subprocess gate branch
Keep the pushed fix commit and bring in the bounce brief plus the data-layer fix.

Co-Authored-By: Grok (agent loop)
2026-10-15 10:11:38 +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) b184448871 fix(db): check callers against the adapter that actually runs
The self-hosted client was typed as a full Supabase client, so an old scoring poll called .single() on a plain promise and failed. The new DataClient only lists methods the adapter implements.

Co-Authored-By: Grok (agent loop)
2026-10-15 09:21:14 +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-uxGrok (agent loop)Cursor
336286e428 fix(chart): skip unused synastry overview and doomed report subprocesses
Synastry charts now skip the unused external overview and run together. Reports skip PyJHora subprocesses when that library is missing, and a full heavy-compute slot logs which paths hold it. Splitting quotas stays a simulation.

Gate, growth, and report pytest passed, as did the frontend route tests, tsc, lint, and the A/B script.

Co-Authored-By: Grok (agent loop)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-15 08:02:39 +08:00
jesse-uxandGrok (agent loop) 09906cdccc fix(release): keep owners and grants in production recovery points
Co-Authored-By: Grok (agent loop)
2026-10-14 21:01:52 +08:00
jesse-uxandGrok (agent loop) 32aa46b573 fix(release): close the first review of the production release path
Host rehearsal no longer needs Node on the production machine, and a failed cleanup now stops with the rehearsal database name. Docs-only staging heads no longer block rollback. Tests no longer hardcode Windows paths, and a trailing slash on the production site still refuses the test code.

pytest 12 passed; tsc exit 0; lint 0 errors; identity tests 9 passed, 0 cancelled. test:db was not run.

Co-Authored-By: Grok (agent loop)
2026-10-14 16:37:58 +08:00
jesse-uxandGrok (agent loop) 0dc1d8fa52 merge origin/staging into the release-path fix branch
Co-Authored-By: Grok (agent loop)
2026-10-14 15:54:45 +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
Claude 400af57e86 merge origin/staging into frontend dead code (issue #63)
Independent Staging Quality Gate / validate (push) Failing after 7m39s
Independent Staging Quality Gate / publish (push) Skipped
Docs-only catch-up; agent-loop rule A.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LutgzyJqNhPpZy1nFsJtN3
2026-10-14 11:20:59 +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) 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) 00e6efdbfa 发布可以跟上只多了文档的测试环境头
四个生产工作流改用同一条发布修订:最近一次代码门禁成功的提交可以发布,后面只多文档不再挡住。生产环境拒绝测试验证码。63 个还没上生产的迁移写了分级、演练脚本和首发步骤。没有点任何生产按钮。

自测:发布修订 7 通过,演练安全 3 通过,tsc 0 错,lint 0 error。本机空库演练在服务角色读人物表处按设计停止(退出码 4,其他人物已确认行数为 0)。

Co-Authored-By: Grok (agent loop)
2026-10-14 10:24:40 +08:00