Commit Graph
3543 Commits
Author SHA1 Message Date
jesseandClaude Opus 5.5 cbfb37f7c8 test: list /rectification in the capability audit app routes (issue #145)
Independent Staging Quality Gate / validate (push) Successful in 20m54s
Independent Staging Quality Gate / publish (push) Successful in 5m43s
Staging gate run 2009 failed on test_capability_audit_scans_registry_and_local_sources:
the new app route app/(app)/rectification was not in the expected list.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 17:23:17 +08:00
jesseandClaude Opus 5.5 dfd3208979 feat: standalone rectification entry at /rectification (issue #145)
Independent Staging Quality Gate / validate (push) Failing after 13m25s
Independent Staging Quality Gate / publish (push) Skipped
- Sidebar 「生时校正」 under 星盘, behind a new account `rectification` flag.
- /rectification page: status card from entry-summary (not started / in
  progress with window and confirmed event count / adopted time), a short
  data check, then the home rectification surface (?rectify=1, or
  ?rectify=new to start over; ?c=<id> to continue or view). No price on
  the page.
- entry-summary gains session id, candidate range, confirmed evidence count
  and adopted times (add-only migration 20261028170000).
- The offer card under a consultation answer becomes one line and a link
  to /rectification; an explicit request in chat also goes there. No case
  is opened from a conversation any more.
- Starter home shows a rectification prompt for self charts with an
  estimated time; onboarding checklist gains 做一次生时校正 for them.
- Chart-page link points to /rectification. Shell registers its router so
  home hooks can navigate client-side without useRouter in Home().
- Docs: VOICE, DESIGN, CHANGELOG, device checklist.

Self profile only; other people are issue #160.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 16:50:55 +08:00
Jesse_ChenandClaude Opus 5.5 12eb7018ec docs(testing): answer-step reasoning effort A/B results (issue #134, #135 data)
Independent Staging Quality Gate / validate (push) Successful in 22m59s
Independent Staging Quality Gate / publish (push) Successful in 4m55s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 14:28:35 +08:00
Jesse_ChenandClaude Opus 5.5 8d1cb4a53b Heavy routes run in worker processes, one per heavy slot (issue #133, BUG-1493)
The single ThreadingHTTPServer ran pure-Python v5 score / block_scan / report
reference under one GIL, so the gate's two slots shared a core. start_server
now starts a spawn pool (workers = heavy concurrency, PYTHONHASHSEED=0, engine
pre-imported); those three routes call the same compute method in a worker.
Over HTTP: score alone 4.74 s, two at once 5.01 / 4.58 s (1.06x; in-process
1.56x). Results equal except per-process fingerprints; report markdown equal.
~165 MB extra. A crashed pool answers inline and restarts; off with
JYOTISH_HEAVY_COMPUTE_PROCESSES=0; tests calling compute methods unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 14:28:05 +08:00
Jesse_ChenandClaude Opus 5.5 5fd79a5649 Chart surfaces start Vimshottari from the birth moment, as reports do (issue #137, BUG-1492)
/api/chart, /api/dasha and the analysis layer, daily guidance and the KP
monthly packet used compute_vimshottari_timeline, which hands
build_dasha_timeline only the birth date, so periods started at midnight;
cmd_dasha (reports) starts from the birth clock and lays antardashas from the
full parent with float days. scripts/chart_dasha/birth_moment.py reproduces
cmd_dasha; 60 standard charts: MD and AD 60/60 equal (old chart path 9/60),
51 charts move by at most one day. Frozen scoring files are untouched, so
rectification probes keep the day start (left for a product decision).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 14:27:35 +08:00
Jesse_ChenandClaude Opus 5.5 699e353887 Rectification turns no longer spend a model call reading the case (issue #136, BUG-1491)
Step 0 of every turn could only call rectification-read-case with the
default projection, a result the server can compute. The runner now runs the
agent's own read-case tool after the Skill is bound (same tool, receipts and
projection), passes the call and result to the model as the turn's opening,
and gives step 0 the full tool set. Synthetic chunks go through the same loop
(case.loaded, activity and Skill receipt once each) but not into step timings.
The synthetic call carries a short reasoning line: thinking-mode DeepSeek
rejects a prior tool call without reasoning_content (checked live). read-case
stays callable for resume / full_diagnostics. Agents without listTools keep
the step-0 read. The Skill package has no "read first" text; prompts updated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 14:27:27 +08:00
Jesse_ChenandClaude Opus 5.5 a614895a2b Loader waits for a module another thread is still importing (issue #132, BUG-1482 reopened)
Independent Staging Quality Gate / validate (push) Successful in 16m40s
Independent Staging Quality Gate / publish (push) Successful in 4m32s
Gate run 5888 failed: the synastry full dossier computes two full readings
on a thread pool, and the second thread got jyotish_engine from sys.modules
while the first was still executing it (no cmd_full_reading yet). Reuse now
goes through importlib.import_module, which waits on the module lock.

Four threads loading one module in a fresh interpreter: before
[False, True, True, True], after all True three times. Dossier scenario
before 4/4 AttributeError, after 6/6 ok; synastry-full-report.test.ts 17/17.
Ledger ERR-117: local npm baseline hid it (system python3 lacks swisseph).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 13:47:30 +08:00
Jesse_ChenandClaude cd6ad9d27a Merge origin/staging into upstream sync 9 (issue #141)
Independent Staging Quality Gate / validate (push) Failing after 14m40s
Independent Staging Quality Gate / publish (push) Skipped
Staging took BUG-1472..1482 while this branch was in review, so the
branch's eight entries move to BUG-1483..1490. Docs and one test
comment only; the branch's commit messages keep the old numbers.

Co-Authored-By: Claude (agent loop) <noreply@anthropic.com>
2026-10-28 12:45:29 +08:00
Jesse_ChenandClaude Opus 5.5 8a72aa5b44 API loader shares one module object per file (issue #132, BUG-1482)
Independent Staging Quality Gate / publish (push) Canceled after 0s
Independent Staging Quality Gate / validate (push) Canceled after 8m49s
_load_local_module always re-executed the file as _jyotish_local_<name>, so
engine, dasha, varga and others ran as extra copies with their own caches.
It now reuses scripts.<name> / <name> when that file is already imported,
else imports it under its plain name so later imports share it; the private
copy remains only as a fallback. Call sites unchanged. Probe after one
consultation and one chart: loader-made copies 19 -> 0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 12:43:59 +08:00
Jesse_ChenandClaude Opus 5.5 0594afcd5c Remove 11 closure ledger scripts only their own tests used (issue #138, BUG-1481)
Batch 1 of the scripts/ root cleanup: the closure scripts no runtime entry,
other script, workflow, deploy file, ops doc or quality gate reaches, with
their 11 test files (30 cases). Their references/ outputs stay. Scripts still
imported elsewhere, named by the gate, or listed in archived reference indexes
are kept. Root budget 452 -> 441.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 12:43:08 +08:00
Jesse_ChenandClaude Opus 5.5 2fbce95536 Frontend drops 15 files no page reaches (issue #139, BUG-1480)
Unreachable from every app entry and frontend/scripts (dynamic imports
counted): chart-basics-tab, error-toast, seven unused shadcn ui files
(skeleton among them), three birth-time helpers only tests used, the motion
provider shell (it imported motion/react statically), and the two empty
people/account stores. Tests that only exercised them are removed or trimmed,
each with old/new/reason notes. Unreachable files 18 -> 3 (all kept on
purpose); npm test names drop exactly the 4 removed and 1 renamed test.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 12:43:07 +08:00
jesse-uxandGrok (agent loop) 60116f2813 test(cli): lock Darakaraka to the canonical karaka table (BUG-1478, issue #141)
The D9 smoke case expected Sun, which is what the old reader produced when
it took the 7th highest degree in the 8-karaka variant. The canonical table
and the fixed reader both give Moon for this chart (Moon 3.09 degrees).

Expect Moon and the D9 fields that follow it, and assert the reader agrees
with chara_karaka_8.karaka_table_8.Darakaraka.planet so the test locks
reader/main-table identity instead of one planet name.

Co-Authored-By: Grok (agent loop)
2026-10-28 12:39:55 +08:00
Jesse_ChenandClaude Opus 5.5 b9a5415e71 VedAstro failures are remembered for the day; the rectification check fits the frontend's wait (issue #130, BUG-1479)
Independent Staging Quality Gate / publish (push) Canceled after 0s
Independent Staging Quality Gate / validate (push) Canceled after 2m17s
- Foreground gateway: a run that ended without official data is written to
  the existing same-day negative snapshot store; later turns that day answer
  from it without starting the gateway (second call <= 0.15 s, same fields).
  Success still goes to the positive cache first; a consult-gate deferral and
  a join timeout are not failures.
- /v5/vedastro-validate: a result blocked by VedAstro itself is kept in memory
  for a day per (evidence fingerprint, candidate pair); evidence-decided
  results are not. The whole check has 11 s (frontend waits 12 s); calls with
  time to spare keep the adapter timeout, so normal output is unchanged.
- conftest also isolates the negative store and clears the check memory.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 12:38:17 +08:00
Jesse_ChenandClaude Opus 5.5 06d0c7dc37 Cold /chart, /people, /synastry read in one round and stop re-reading the shell's data (issue #127, BUG-1478)
- The HTML early-read script also runs on /chart, /people and /synastry:
  account, people list and the current person's sessions, plus on /chart the
  remembered person's chart-view (bound to that person, page deadline kept).
  The model list stays home-only.
- Account and people-list early reads hand one clone to the shell and one to
  the page, once each, in either order; later reloads go to the network.
- Synastry sends product-access, account, people and history together; access
  is still decided before anything about people paints.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 12:11:03 +08:00
Jesse_ChenandClaude Opus 5.5 16fcb8c289 A ?c= link reads its conversation in the HTML's first round (issue #126, BUG-1477)
Independent Staging Quality Gate / validate (push) Successful in 15m37s
Independent Staging Quality Gate / publish (push) Successful in 8m8s
The early-read script now also sends /api/sessions/<id> when ?c= carries a
valid session id (same rule as parseSessionUrlQuery), next to the account.
Only the home bootstrap takes it, bound to that id and once: the lookup for a
conversation off the first page, or the landing fetchSessionDetail. 401/404/
error handling and notices are unchanged; a failed early read refetches.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 11:59:01 +08:00
Jesse_ChenandClaude Opus 5.5 18c6e13028 Consult card keeps parsed packets in memory, prewarms each turn, writes 0600 (issue #129, BUG-1476)
Independent Staging Quality Gate / publish (push) Canceled after 0s
Independent Staging Quality Gate / validate (push) Canceled after 11s
- consult_packet_view keeps the last 3 parsed packets with their shared domain
  base (~30 MB each). A hit reads no file and copies nothing: attach for one
  domain 0.106 s -> 0.002 s. Memory holds the file's JSON round trip, i.e.
  exactly what a hit returned before; consult_card_facts sha256 equal old/new.
- Cache files are created 0600, same bytes as before.
- The consult route fires a warm for the turn's chart before reserving credit,
  so the day's first question does not build the packet on the answer path.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 11:57:53 +08:00
Jesse_ChenandClaude Opus 5.5 a81b32349f First screen drops date-fns, the auth client and the report export (issue #125, BUG-1475)
Independent Staging Quality Gate / validate (push) Successful in 14m54s
Independent Staging Quality Gate / publish (push) Successful in 4m7s
- parseBirthDate/formatBirthDate: hand-written yyyy-MM-dd with the same strict
  round-trip check; equal to the date-fns version on 97,507 inputs.
- Sign-out imports the better-auth client on click.
- The share report export downloads at idle after first paint; once loaded,
  share writes the clipboard inside the click exactly as before.
- page.tsx: drop the unused consultationReportMarkdown import.

gzip-9 of every referenced JS/CSS: / -29,240 B (still Static); /chart, /people,
/reports about -29 KB; /ephemeris -23.6 KB.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 11:35:09 +08:00
Jesse_ChenandClaude Opus 5.5 55ebdd7a95 Home first screen no longer carries the rectification surface or react-markdown (issue #124, BUG-1474)
Independent Staging Quality Gate / publish (push) Canceled after 0s
Independent Staging Quality Gate / validate (push) Canceled after 9m27s
page.tsx imported the whole rectification surface statically; its verification
report also imported chat-markdown-view statically, which pulled react-markdown
into / even though chat-message-content already loaded it lazily.

- Home renders a same-named lazy wrapper; openRectificationCase starts the
  download with the open request and awaits it before setting the ids that
  mount the surface, so it still reveals once, drawn.
- The markdown loader moves to lib/chat-markdown-loader; the home bootstrap
  awaits it before revealing a conversation with messages (no plain-text flash
  on ?c=). The blank home does not wait.

/ first load, gzip-9 of every referenced JS/CSS: 704,165 -> 609,606 B (-13.4%),
still Static.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 11:25:43 +08:00
Jesse_ChenandClaude Opus 5.5 ea7dd95757 Window consultation sends its two chart requests together (issue #128, BUG-1473)
Independent Staging Quality Gate / publish (push) Canceled after 0s
Independent Staging Quality Gate / validate (push) Canceled after 9m48s
executeWindowConsultation awaited /api/declared_window_chart before sending
/api/rectification/v5/range_reading, which does not depend on it. Both now go
out at once; a failed range reading still only drops the minute-sensitive
themes. Two 150 ms stubs: ~150 ms total instead of ~300 ms.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 11:16:11 +08:00
Jesse_ChenandClaude Opus 5.5 ad801a5db7 Home and the chat chart no longer re-render on every streamed frame (issue #123, BUG-1472)
Independent Staging Quality Gate / publish (push) Canceled after 0s
Independent Staging Quality Gate / validate (push) Canceled after 2m12s
Home subscribed to the whole streamingReply object, so each animation frame of
an answer re-ran the page (header, picker, composer, overlays) and the desktop
natal panel under it. ChatStreamingTranscript now subscribes for its session
and feeds ChatTranscript; Home reads one derived boolean for the stop label.
ChatChartSplit is memoized. 100 frames: Home <=2 commits (was >=100), panel 0.

Two source-contract tests now pin the new component instead of the old names.
The onboarding typewriter still ticks at Home level (out of this ticket).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 11:13:55 +08:00
Jesse_ChenandClaude bb2382833b docs(tasks): upstream sync 9 first rejection (agent loop, issue #141)
The quick gate fails one smoke test: the Darakaraka reader now agrees
with our own 7/8-karaka tables (Moon), but the old test pinned the
buggy reader's Sun. Fix the expectation and lock reader == table.

Co-Authored-By: Claude (agent loop) <noreply@anthropic.com>
2026-10-28 10:33:44 +08:00
jesse-uxandGrok (agent loop) 57867c94fe docs(sync9): record batch A bugs, the capability map, and the replay numbers (issue #141)
BUG-1472 through BUG-1479. Rectification 20-case and 900-window metrics match the sync8 reports. Batch B is not done.

Co-Authored-By: Grok (agent loop)
2026-10-28 09:47:45 +08:00
jesse-uxandGrok (agent loop) 13f45e3475 docs(sync): note upstream main 5fb8379c without moving the pinned mirror (issue #141)
source_commit stays b9a0ef8f because the pin tests require it and that object was rewritten. The ledger target is the last calculation commit 8aed605a43. hash_contract_result is a prose pass, same shape as the previous entry. Importer --apply was not run.

Co-Authored-By: Grok (agent loop)
2026-10-28 09:47:44 +08:00
jesse-uxandGrok (agent loop) 8aed605a43 fix(aspects): pass planet speed into the three production callers (BUG-1479, upstream e628118d)
aspects.py itself is in d226b0e53 because it was already staged. Ketu and applying/separating behavior are covered by the geometry test. Callers pass numeric speeds, or None when speed is absent. calc_house_aspects does not take speed.

Co-Authored-By: Grok (agent loop)
2026-10-28 09:45:39 +08:00
jesse-uxandGrok (agent loop) bd09485243 fix(arudha): sign-only coordinates, no invented degree (BUG-1477, upstream 8b55630a)
Arudha, A10, and Upapada report the sign and house only. Rectification still reads Bhava, Hora, and Ghati degrees plus frozen jaimini padas. Sealed 20-case replay and 900 reported-offset windows match the sync8 metrics line for line. Frozen-file hash matched.

Co-Authored-By: Grok (agent loop)
2026-10-28 09:45:39 +08:00
jesse-uxandGrok (agent loop) c1bd59e97a test(dasha): keep the upstream boundary contract (upstream 07fc5be3)
A8 is tests only. dasha_analyzer.py is frozen and was not edited. Both contract tests passed.

Co-Authored-By: Grok (agent loop)
2026-10-28 09:45:09 +08:00
jesse-uxandGrok (agent loop) 7bede9c99a fix(darakaraka): sort with the existing Jaimini tables (BUG-1478, upstream 45b3b66b)
Calls calc_chara_karaka_7 and calc_chara_karaka_8. jaimini.py is not edited.

Co-Authored-By: Grok (agent loop)
2026-10-28 09:45:08 +08:00
jesse-uxandGrok (agent loop) 96312893b7 fix(kalachakra): classical sign periods when the Moon longitude is present (BUG-1476, upstream f353a096)
Without a Moon longitude the simplified table remains. Exact pada starts use a local boundary table because shared find_nakshatra misclassifies 50 of 108 starts. Two existing child-period assertions now expect antardasha; original, new value, and reason are in the test comments. 116 source tests passed.

Co-Authored-By: Grok (agent loop)
2026-10-28 09:45:08 +08:00
jesse-uxandGrok (agent loop) b35c424945 fix(ashtottari): source arcs and a shifted sub-period clock (BUG-1475, upstream 0712f98f)
Rahu uses the circular unique start. Output keys are unchanged. Upstream arc and clock tests passed.

Co-Authored-By: Grok (agent loop)
2026-10-28 09:45:07 +08:00
jesse-uxandGrok (agent loop) 16bae00615 fix(saham): apply Table 74 before legacy rows (BUG-1474, upstream cb8a1ca7)
Directed-arc sign stays as BUG-1387. formula_traces remains the 36-row report list. Book rows are no longer overwritten by the old house approximation.

Co-Authored-By: Grok (agent loop)
2026-10-28 09:45:06 +08:00
jesse-uxandGrok (agent loop) 9d3f59a872 fix(tithi): use the source lord order (BUG-1473, upstream 33537b31)
Tithi lords follow tithi_seed. No new scripts/tithi_ashtottari.py. Upstream source tests passed.

Co-Authored-By: Grok (agent loop)
2026-10-28 09:45:06 +08:00
jesse-uxandGrok (agent loop) d226b0e538 fix(yogini): full balance on an exact nakshatra start (BUG-1472, upstream d268d519)
An exact star start belongs to the new nakshatra. Non-finite Moon longitude or year length raises. 31 boundary tests passed. 10000 random longitudes matched the previous balance formula, 0 mismatches.

Co-Authored-By: Grok (agent loop)
2026-10-28 09:45:04 +08:00
Jesse_ChenandClaude 9a0ce76d48 docs(tasks): upstream sync 9 brief (agent loop, issue #141)
Fifteen calculation fixes landed on upstream main on 10-16 that sync 8
never saw, because sync 8 took the upstream-notice branch instead.
Batch A (nine items outside the rectification freeze) goes to Grok now;
Varga and Narayana touch frozen files and wait for #137.

Co-Authored-By: Claude (agent loop) <noreply@anthropic.com>
2026-10-28 08:44:22 +08:00
Jesse_ChenandClaude Opus 5.5 3eeb898071 Copy the full-data packet once per report, not once per domain (issue #122, BUG-1471)
Independent Staging Quality Gate / validate (push) Successful in 15m27s
Independent Staging Quality Gate / publish (push) Successful in 3m43s
read_full_data_domain deep-copied the shared worksheets on every call; a long
report reads five domains twice, so ten copies for read-only use. The shared
part is now copied once (full_data_domain_base) and reused for every domain's
facts and their leaf check; each domain's facts are still copied out so domains
share no objects. Long reports byte-identical on four fictional charts; with
#121, -24–29% end to end.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoz1Qk3y9buDv1mkmTu
2026-10-28 07:06:32 +08:00
Jesse_ChenandClaude Opus 5.5 f8fa4d66ef Long-report render fast path on by default (issue #121, BUG-1335)
Byte-identical to the legacy path on four fictional charts (PyJHora masked),
-19–26% end to end (median 23%). Short of the 25% written on the ticket; the
product owner chose to turn it on anyway. JYOTISH_REPORT_RENDER_FAST=0 restores
the old path.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoz1Qk3y9buDv1mkmTu
2026-10-28 06:49:18 +08:00
Jesse_ChenandClaude Opus 5.5 584a72454b Chart head, inspector, chart-type sheet and dark-mode fills tidied (issue #140, BUG-1470)
Independent Staging Quality Gate / validate (push) Successful in 16m53s
Independent Staging Quality Gate / publish (push) Successful in 4m23s
- Composer cancels InputGroup's dark-mode fills too (BUG-1466 covered light only).
- Chart head controls share one 32px height, tags 28px, per the signed prototype;
  the birth line moves under the name so the phone top bar is one line.
- Inspector card has one fixed height and scrolls inside.
- Chart-type sheet header is a row (SheetHeader ships flex-col).
- Restore shadcn's base border-color rule: bare kit borders were drawn in
  currentColor, a white line in dark mode; the phone chart sheet pads once.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoz1Qk3y9buDv1mkmTu
2026-10-28 06:29:41 +08:00
Jesse_ChenandClaude Opus 5.5 142595f810 Chart and people pages no longer load the city table up front (issue #120, BUG-1469)
Independent Staging Quality Gate / publish (push) Canceled after 0s
Independent Staging Quality Gate / validate (push) Canceled after 11m35s
The birth editor on /chart now loads when the pen row is clicked (warmed on
hover/focus), the people page's add/edit form is fetched after mount, and
the people city column reads the on-demand table. /chart first load
-116 KB gzip, /people -111 KB; home +0.19%, still static. A static import
graph test keeps the table out of both pages.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoz1Qk3y9buDv1mkmTu
2026-10-28 06:18:05 +08:00
Jesse_ChenandClaude Opus 5.5 a31b6dda39 docs(research): code health audit 2026-10-28 (issue #118)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoz1Qk3y9buDv1mkmTu
2026-10-28 06:00:24 +08:00
Jesse_ChenandClaude Opus 5.5 7444964859 Test the first progress line against the held stream, not a wall clock (BUG-1468)
Independent Staging Quality Gate / validate (push) Successful in 16m12s
Independent Staging Quality Gate / publish (push) Successful in 3m57s
The 300 ms budget failed twice on the gate runner while the test takes about
74 ms locally. What it proves is that the line shows before the server
answers, so assert that the controllable stream has not answered yet.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014Ad9rqAB8pXXvyzh7f4X8v
2026-10-28 05:41:04 +08:00
Jesse_ChenandClaude Opus 5.5 0f0fea325e Sidebar session menu and drag on every page (issue #116)
Independent Staging Quality Gate / validate (push) Failing after 15m9s
Independent Staging Quality Gate / publish (push) Skipped
Rename, delete with confirmation, pin, share and reorder moved from Home's
session hook into the shared (app) shell, so /chart, /ephemeris, /reports
and /people rows get the same menu and drag as /. Home only adds its paging
cursor, what the open conversation does when deleted, and which local chats
are unsaved. BUG-1467.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014Ad9rqAB8pXXvyzh7f4X8v
2026-10-28 01:52:47 +08:00
Jesse_ChenandClaude Opus 5.5 36fd4b2c83 Chart page back to the signed-off prototype (issue #114, round 5)
Independent Staging Quality Gate / validate (push) Successful in 23m11s
Independent Staging Quality Gate / publish (push) Successful in 5m14s
Round 3 followed the competitor screenshots instead of prototype v2.
Restored from the prototype source: page head (name, system switch,
report and chat buttons), layer row left / style right, the caption
strip with dasha chips, north board drawn from house centroids with sign
glyph + name + house number, dignity colours and " R", twelve house
theme chips with dots, wrapped antardasha chips, card hints, inspector
empty state, deep-reading hints, chevron date steps and 此刻, year axis
under the mahadasha scroll, three-column birth data. Point layers stay
in the layer group; side triangles stack bodies so nothing leaves the
frame (BUG-1465 test kept).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014Ad9rqAB8pXXvyzh7f4X8v
2026-10-27 17:28:14 +08:00
Jesse_ChenandClaude Opus 5.5 47f6eb4791 Composer no longer greys out when empty; tidy sidebar session rows (BUG-1466)
Independent Staging Quality Gate / validate (push) Successful in 22m32s
Independent Staging Quality Gate / publish (push) Canceled after 2m43s
InputGroup's has-disabled: classes matched the disabled send button and
greyed the whole empty composer; ChatComposer cancels both. Sortable
session rows drop the always-on grip column: mouse drags the row (6px),
touch long-presses (250ms), a drag never opens the row, and the grip
stays only for keyboard sorting, visible on focus. The row menu shows on
hover, focus or the current row on hover-capable devices.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014Ad9rqAB8pXXvyzh7f4X8v
2026-10-27 17:02:54 +08:00
Jesse_ChenandClaude Opus 5.5 43c5a81a50 Chart page layout cleanup (issue #114, round 3, BUG-1465)
Independent Staging Quality Gate / validate (push) Successful in 19m20s
Independent Staging Quality Gate / publish (push) Successful in 4m47s
North board: each house gets fixed slots for its sign name, bodies, tags
and transit glyphs, so names no longer pile up at the centre and corners
and right-hand bodies stay inside the frame. Card body grid column is
minmax(0, 1fr), so the board no longer overflows the card on phones.

Board card keeps two control rows (type, one layer row incl. point
layers); north/south moves into the card header; the duplicate caption
strip is gone. House themes list occupied houses; antardashas sit in one
row; glance grid aligned; date field no longer full width; the time tab
shows only Chara/Yogini below the Vimshottari scroll.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014Ad9rqAB8pXXvyzh7f4X8v
2026-10-27 16:30:05 +08:00
jesse-uxandGrok (agent loop) c098edf2bb 更正首页崩溃修复的全量失败分类。
Independent Staging Quality Gate / validate (push) Successful in 24m37s
Independent Staging Quality Gate / publish (push) Successful in 4m43s
33 条里 13 条是 Windows 已知名单。另外三条全量里没赶上,单独重跑已通过。

Co-Authored-By: Grok (agent loop)
2026-10-27 14:52:00 +08:00
jesse-uxandGrok (agent loop) 5289afbbfe fix(home): fill missing saved-person fields before the home page reads them
Accounts that already saved another person crashed on the home page because the chart list left birthTimeClue out. The list entry now starts from an empty profile, then keeps every field the API sent.

Checks: tsc exit 0; lint 0 errors (122 existing warnings); chart-library-normalize 2 pass; related tests 38 pass; npm test 5268 tests, 5235 pass, 33 fail, 0 cancelled. Those 33 are the existing Windows set, including the 13 names in windows-known-failures.txt.

Co-Authored-By: Grok (agent loop)
2026-10-27 14:49:16 +08:00
Jesse_ChenandClaude e34dc6b665 docs(tasks): home crash for accounts with saved people brief (agent loop, issue #115)
Co-Authored-By: Claude (agent loop) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LutgzyJqNhPpZy1nFsJtN3
2026-10-27 14:20:46 +08:00
Jesse_ChenandClaude Opus 5.5 941effe803 Chart page data tables and point layers (issue #114, round 2)
Independent Staging Quality Gate / validate (push) Successful in 16m22s
Independent Staging Quality Gate / publish (push) Successful in 4m26s
Adds /api/chart_points, a thin route over existing producers (upagrahas,
Swiss-Ephemeris special lagnas, Yogi points, arudha padas, friendship), and
the chart page's 数据表 (planets, upagrahas, special lagnas, arudhas,
shadbala detail, friendship) plus a 标点 layer that marks every point of one
group on the board. The ashtakavarga matrix gains the ascendant's own row.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014Ad9rqAB8pXXvyzh7f4X8v
2026-10-27 13:31:35 +08:00
Jesse_ChenandClaude Opus 5.5 e80bc64d93 Chart page on one sheet with a clickable North/South board (issue #114)
Independent Staging Quality Gate / validate (push) Successful in 15m27s
Independent Staging Quality Gate / publish (push) Successful in 4m27s
The chart page is now one page: board and inspector beside the nine-body
table, house themes, dasha strip and summary, with four deep-reading tabs
below (time, strength, yogas, chart book). Clicking a body or house draws its
rulership and aspect lines and fills the inspector. Shadbala, yogas and the
birth tithi come from the natal packet; ashtakavarga and house strength are a
new lazy layer; the transit layer takes any date. The chat's natal panel
carries the same board, opens by default, and is a bottom sheet on phones.

Logged two engine bugs found on the way (BUG-1462 sunrise, BUG-1463
/api/shadbala); neither is fixed here.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014Ad9rqAB8pXXvyzh7f4X8v
2026-10-27 12:47:14 +08:00
Jesse_ChenandClaude Opus 5.5 e433c0e4a8 解读校验放过「不一定会」(BUG-1461 复验补修)
Independent Staging Quality Gate / publish (push) Canceled after 0s
Independent Staging Quality Gate / validate (push) Canceled after 6m8s
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LutgzyJqNhPpZy1nFsJtN3
2026-10-27 11:31:11 +08:00
Jesse_ChenandClaude Opus 5.5 a2c919a103 docs(tasks): #113 progress numbers
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LutgzyJqNhPpZy1nFsJtN3
2026-10-27 11:29:44 +08:00