Commit Graph
2418 Commits
Author SHA1 Message Date
ClaudeandClaude Opus 5.5 5d64f71b81 fix: astrologer round-5 rulings 2/3/4/5/10/13 (BUG-1746..1752)
- Functional default = PVR Table 30 (functional_profile=pvr_table_30); the former
  product table is bphs_exception_profile, scored only when named (rectification
  names it, scores unchanged). profile_divergence shows both roles side by side;
  movable-lagna Moon by the table's paksha note; dual-lordship note; prior rulings
  BUG-1570/1590/#166 Q4 checked against Table 30.
- Shadbala: six open items labelled parameter_sensitive; every option combination
  computed; only planets whose pass/fail flips get minimum_check=parameter_sensitive.
- Vimshottari AD/PD rows carry parent_period_start / visible_period_start; the
  consult card cuts the balance MD from its full parent and clips at birth.
- KP DBA: full first parent, clipped at birth (no balance rescale).
- Mudda: balance fields + balance_method (angle default, time comparison apart),
  nominal_year_days, her crossing wording; Harsha combined blocked reason lists items.
- D30 _meta describes the unequal parts (as her r40).
- Golden recaptured with TTL=0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-08 11:57:22 +08:00
Claude 05a11cefbf Merge branch 'codex/rectification-float-split-1108' into codex/phase2-chat-merge-1107
Independent Staging Quality Gate / validate-frontend (push) Successful in 5m18s
Independent Staging Quality Gate / validate-python (push) Successful in 6m40s
Independent Staging Quality Gate / publish (push) Successful in 2m48s
2026-11-08 10:38:08 +08:00
ClaudeandClaude Opus 5.5 0f8be4c815 fix(narayana): B3/B4 open-item text no longer names seed/years (BUG-1732 follow-up)
The r2 re-eval showed 14/70 answers naming 起运/年数 as this chart's
undetermined step, copied from the open-item sentence, while the card said
unknown or ad_direction. The sentence now names no step and says not to
infer one. Golden recaptured with TTL=0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-08 10:36:35 +08:00
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
ClaudeandClaude Opus 5.5 37383ec6a4 docs(research): float_split_2026_11_08 sealed / offset replay records; BUG-1720 fixed-pending-verify
Sealed 20 and reported-offset 900 rerun with the protocol's own scripts
(exported from c1a69445^, baseline reproduced 166d 20/20 and 900/900),
overlay recorded in the .patch. Old 166d records kept. Live astrologer
stage v5 77x3 sensitivity script added. Sensitivity numbers, not accuracy.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-08 07:11:48 +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 32e4d5609e docs(bug-history): BUG-1719..1724; consult projection carries mudda_view / calendar_year (BUG-1722)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-07 23:53:33 +08:00
ClaudeandClaude Opus 5.5 22ded10e0c docs(bug-history): BUG-1725..1728 chat re-optimization against her skill
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-07 23:52:10 +08:00
ClaudeandClaude Opus 5.5 a26645fb48 fix(consult): card Vimshottari AD/PD ends equal engine cmd_dasha (BUG-1718)
Independent Staging Quality Gate / validate-frontend (push) Successful in 5m4s
Independent Staging Quality Gate / validate-python (push) Successful in 6m36s
Independent Staging Quality Gate / publish (push) Successful in 3m3s
- _consultation_dasha_sub_periods rebuilds mahadashas from the birth moment
  (only when they reproduce the chart's shown periods) and cuts antardashas with
  chart_dasha.birth_moment.antardashas instead of the frozen
  dasha_analyzer.build_antardasha (integer days from midnight starts).
- Pratyantar cut from the antardasha's full-precision clock; the merged-field
  bridge keeps that ready timeline. Output shape unchanged.
- Regression test against cmd_dasha for two public charts; golden recaptured.
- BUG_HISTORY: BUG-1715..1718.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-07 23:02:10 +08:00
Claude 0f1add7504 docs(bug-history): BUG-1713 handoff sync, BUG-1714 yoga rule batch
Independent Staging Quality Gate / validate-frontend (push) Successful in 5m29s
Independent Staging Quality Gate / validate-python (push) Successful in 6m56s
Independent Staging Quality Gate / publish (push) Successful in 3m49s
2026-11-07 22:00:08 +08:00
ClaudeandClaude Opus 5.5 c9953c05f2 sync(upstream): port astrologer branch d09feab7 (public-sync-20261107) calculation changes
Product 2026-11-07: sync the astrologer's working branch (ea2a9d65..d09feab7).

- 0266b6ad: year lord picks by the native five-fold Panchavargiya only; a
  PyJHora score (research switch) is attached per candidate as
  external_oracle_comparison (observation_only_not_selection_input) and
  never selects. panchavargiya_selection_policy on the result; candidate_list
  and the reader-report candidate table carry the five components and raw total.
  The legacy Sun/Mars/Saturn table relabel is not applicable: calc_sodhita_av
  was already removed here (BUG-1209).
- 8c4bff8a + a5b75886: Sodhita no longer votes in finance adjudication; the
  bridge keeps raw 2/11 scores with prediction_scoring_allowed false.
- ba8e36ec: finance delivery inventory (raw, no vote), wrapped producer status
  counts as blocked in machine-evidence sections, transit section, report gate
  evidence_claims bindings, finance support review readiness.
- 5962368d: dispositor chain dispositor_sign is the dispositor's own sign.
- 8813c851: BCP observed at the reading date (bcp_reference, PL9 row).
- d09feab7: nakshatra_advanced.calculate_stellar_jeeva_sareera and the
  nadi-stellar-roles CLI; specialized-jyotish SKILL.md, usage packs, ontology
  and gap scanner mirrored.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-07 20:03:44 +08:00
Claude 8d56758ac9 docs(bug-history): BUG-1707..1712 upstream sync rounds, eval method, three-version parity fixes 2026-11-07 19:10:41 +08:00
ClaudeandClaude Opus 5.5 676b7d47cd fix: parity3 product-side defects and upstream lag (Vimsopaka, Narayana ages, asc precision, labels, Sade Sati)
Three-way parity audit 2026-11-07 (U ea2a9d65 / F frozen / P f70ae94e):
- Vimsopaka: look vargas up by "D{n}_" prefix (D60 key was misspelt, every
  D60 fell to Neutral) and score only the sign-owner relation (upstream
  ab5b8709, BPHS 7.21-27). All 16 varga scores now equal U on 3 charts.
- Narayana: age = total_seconds / (86400 x 365.25) keeping the birth time
  (upstream ab5b8709); Rath rows carry start_date / end_date from the
  unrounded ages; consult layer, report facts, API and calendar read them.
- Ascendant degree_raw / lon unrounded (engine and chart API).
- position_mode label: legacy is the apparent frame since BUG-1275; the
  profile and module labels now say "apparent" (legacy still accepted).
- Functional profile label v2 -> v3_166q4 (the table actually used).
- full-reading Sade Sati uses the dated transit Saturn (upstream e628118d):
  Jobs 2026-11-07 peak, owner / Obama not active, as U.
Consult evidence card golden recaptured.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-07 19:01:10 +08:00
ClaudeandClaude Opus 5.5 0e8d263acc fix(engine): sync with the astrologer's upstream engine (parity audit C1-C7)
C1 compute_chart_data and transit use the bundled Swiss .se1 files (flag 258,
was Moshier 260) and record chart.meta; ephemeris_events sets the path too.
C2 full-reading yoga runs on the D1 lagna (upstream a387e999 d11_asc_idx).
C3 Raj Yoga dual lord needs two houses; kl==tl skipped (upstream e628118d).
C4 rule library: Mahabhagya / Parihasaka evaluators with condition_status,
Satkalatra, Subha Kartari (Moon), Varga Yoga, Jananatpurvam (Raman 242),
Chakra Yoga, Raja Yoga mutual aspect; lords_relation same-planet guard; nodes
cast no aspect; unplaced planets fail all_in_houses / exactly_n_signs; and
bindings keep both sides; Chakra/Vajra Nabhasa, Kalanidhi, Dala retired;
duplicate algorithmic solar/lunar block removed. Astrologer rulings kept.
C5 jaimini.special_lagnas = jaimini_special_lagna_view (upstream ab5b8709).
C6 chara_karaka_standard (BPHS 8) replaces chara_karaka_jh (upstream 2f52cfca).
C7 conditional dashas get dasha_year_days and as_of (full-reading and consult).
CLI: --gender (yoga/full-reading/pl9-export), --dasha-year-days.
产品 2026-11-07 与占星师上游引擎同步。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-07 16:57:58 +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 e05dcbe92e fix(upstream): keep her professional_parity_closure out of the engine's import path (restores BUG-1674 tables); BUG-1700..1706 recorded; script budget measured 2026-11-07 15:16:18 +08:00
Claude 60560ed0f0 merge codex/up-engine-1107 into upstream-full integration 2026-11-07 14:43:36 +08:00
ClaudeandClaude Opus 5.5 8ed5b5f3c9 feat(engine): port upstream skill calculation fixes into the engine (BUG-1699)
- affliction_evidence / career_semantic_profile / career_analysis (functional
  roles, affliction signals, user-industry gate)
- sade_sati.build_saturn_cycle_timeline with bisected ingress moments
  (FLG_SIDEREAL frame, BUG-1275)
- Chesta profile candidates and PL9 AV cell profile as sidecars
  (shadbala.py / ashtakavarga.py stay frozen, ERR-110)
- Raman Sahams in the annual pack; book rule packets + admission gate
- consultation_native_layers: affliction_evidence, career_analysis,
  sade_sati_timeline, shadbala_chesta_profiles, book_rules,
  annual_tajika.raman_sahams

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-07 14:42:54 +08:00
Claude 3fa915a71e merge codex/up-voice-1107 into upstream-full integration; size caps re-measured 2026-11-07 14:35:47 +08:00
Claude 91d2aca3c1 merge codex/up-rectify-1107 into upstream-full integration 2026-11-07 14:32:16 +08:00
Claude 2fff56704b merge codex/upstream-skill-full-1107 into upstream-full integration 2026-11-07 14:32:16 +08:00
ClaudeandClaude Opus 5.5 eb2adb2858 feat(consult): professional mode by default, full skill routing in the prompt
Astrologer's plan 2026-11-07 (items 1, 2, 3, 5, 7, 10, 11; 最终产品结构建议):
- answer mode decided on the server from the user's own words (consultationAnswerMode:
  latest explicit request in this turn or session history wins; default professional,
  plain on 白话/简单点/听不懂...) and bound into the system prompt via agent context
- professional VISIBLE VOICE: ## route, parameters, executed techniques + raw data,
  vargas per domain, multi-dasha both directions, A/B/C grades, conflicts/blocked,
  conclusions last, Technique Audit Table with Functional Benefic/Malefic,
  MEVG / Global Web Evidence, Real Case Calibration rows, read from the card's route table;
  plain voice keeps the old shape, same backend method; safety red lines shared
- period-first rule; interpretation statuses (parameter_sensitive,
  user_history_verification_required, blocked, not_available_yet) replace
  "reference only / blocked = cannot read"; KP used conditionally (on card)
- methodology delivers sub-skill SKILL.md per skill_family_router (parashari-core always;
  jaimini-timing, kp-event, tajika-annual, financial-astrology, prashna-muhurta by domain);
  widest plan 55k chars, untruncated
- follow-ups: red lines + precision line in the prompt, post-filter for death, disease,
  divorce, pregnancy, child sex, exact-day wealth, third-party identity, exact days
- entries: children prompt without 缘分; presets 12.3 counting rule, 12.5 sends exact
  days to the ephemeris page; third starter asks for a period, or the time check first
  when the birth time is an estimate
- tests updated with 原值/新值/原因; new consult-professional-mode-20261107.test.ts

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-07 14:31:36 +08:00
ClaudeandClaude Opus 5.5 a09037c668 feat(rectification): run the astrologer's own method beside chart choice
Product order 2026-11-07: birth-time rectification follows the astrologer's
skill (yinduzhanxing 5fb8379c) in full. The chart-choice page stays; her
method is added as a stage and both results are shown side by side.

- scripts/chart_choice/astrologer.py, POST /api/chart_choice/astrologer:
  minute-by-minute scan of D1/D2/D3/D4/D7/D9/D10/D12/D20/D24/D30/D60
  (D60 reference only), ascendant nakshatra/pada, KP sub-lord, A7/UL/A10;
  her five stages (intake, appearance/birthmark screens, event verification
  with Vimshottari MD/AD/PD + Narayana MD/AD per event and the >=5-event
  gate, D9/D10 trait correction, report); her 40/35/15/10 scoring, match-rate
  tiers (80/60), report confidence (90/70) and engine confidence; family
  (六亲) event categories; D30 only with health-type events; Gochara blocked;
  our 77-case backtest caveat on every result.
- active_rectification_questions.py synced to upstream (question_bank,
  bindings, workflow_status), local adaptations marked LOCAL, accepts an
  in-process minute_scan.
- Frontend: /api/chart-choice/astrologer and an AstrologerStage step,
  reachable from the result, the no-line case and the current record.
- Consultation reads the other version for domains kept 「两版都读」
  (provenance now records other_saved_at).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-07 14:24:01 +08:00
ClaudeandClaude Opus 5.5 9cfc823e2e fix(dasha): astrologer second ruling — Drig uses Narayana years, Ashtottari decided by the Rahu gate, Sthira variants kept apart (BUG-1676, BUG-1677, BUG-1678)
Independent Staging Quality Gate / validate-frontend (push) Successful in 5m9s
Independent Staging Quality Gate / validate-python (push) Successful in 5m49s
Independent Staging Quality Gate / publish (push) Successful in 2m50s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyeZrYn6ryNcSe5Y2Y
2026-11-07 14:05:06 +08:00
ClaudeandClaude Opus 5.5 6a57faacdb feat(consult): run the astrologer's upstream skill in full (BUG-1696, BUG-1697, BUG-1698)
- root SKILL.md is her upstream file (body byte-identical to the 5fb8379c mirror; description quoted so YAML parses and Mastra can load the skill)
- chat binds the whole SKILL.md plus references/product_runtime_contract.md (safety-only) instead of a ~477-character excerpt
- every turn carries her full strict-workflow-router (synced to upstream) and the domain's event-judgment file; product lists follow as an extra layer
- import her 10 sub-skills, family router, interpretation status contract, technique ontology and the 54 files her method names
- tests/test_upstream_skill_parity.py (in the quick gate) fails whenever her skill and ours drift
- 18 frontend guards that locked the excerpt design updated with 原值/新值/原因 notes

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-07 14:02:26 +08:00
ClaudeandClaude Opus 5.5 c55c6d0b3c fix(consult): astrologer review applied across domains — strength from Shadbala, period-first openings, Narayana sub-period, multi-meaning houses, missing card layers (BUG-1690..1695)
- Shadbala on every card that judges a planet; strength only from Shadbala, sign only says how comfortable the placement is; SAV stays with the house (BUG-1690)
- wealth: A2 / A11 (projection now lets them through) and Jupiter / Saturn transits; earning vs keeping read separately, both sides (BUG-1691)
- family: 2H / 3H, Mars, D3 for siblings; parents / children / education / migration get slow transits and time rules (BUG-1692)
- a question about a period opens with the period; the pattern phrase is for lifelong questions and holds both sides (BUG-1693)
- houses keep more than one meaning; 8 / 12 placement is how, not where from; canned education verdict removed (BUG-1694)
- time reading takes both Narayana levels (BUG-1695)

Not shipped: needs the blind eval first (no model key on this machine).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-07 13:40:28 +08:00
ClaudeandClaude Opus 5.5 16457906f9 fix(dasha): astrologer rulings — strict Ashtottari gate, Sthira full Brahma, Drig years pending (BUG-1676, BUG-1677, BUG-1678)
Independent Staging Quality Gate / validate-frontend (push) Successful in 5m18s
Independent Staging Quality Gate / validate-python (push) Successful in 5m52s
Independent Staging Quality Gate / publish (push) Successful in 2m49s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyeZrYn6ryNcSe5Y2Y
2026-11-07 13:10:31 +08:00
ClaudeandClaude Opus 5.5 3ddf4db8d2 docs(research): party statements count as legal dates; Tina Turner admitted with Brownsville
Independent Staging Quality Gate / validate-frontend (push) Successful in 5m14s
Independent Staging Quality Gate / validate-python (push) Successful in 5m50s
Independent Staging Quality Gate / publish (push) Successful in 3m9s
Astrologer 2026-11-07: a spouse's memoir or anniversary statement of the
marriage date counts as a party statement of the legal date; Tina Turner is
admitted with Brownsville, Tennessee (UTC-6) and 22:10 from the registrar
birth note. Usable for round 1: 54 career and 33 relationship people.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-07 12:48:58 +08:00
ClaudeandClaude Opus 5.5 237aa26f26 docs(research): apply the third holdout ruling; legal-basis and birth-dispute research
Astrologer 2026-11-07: primary legal_marriage needs an explicit legal basis
(inferred dates go to appendix and sensitivity only); Clooney and Macron go
to the development set; Tina Turner deferred, Gloria Estefan observation only.
Research across the web (astrologer posts and discussions used only as
pointers; rectified times never admissible): 11 more marriages get an
explicit basis (Hemingway–Gellhorn legal date is 1940-11-21), 4 rest on
party statements for the astrologer to rule on; Hillary Clinton's hour digit
and Woody Allen's date stay unresolved; Tina Turner's place points to
Brownsville. Usable: 53 career and 30 relationship people.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-07 12:48:58 +08:00
ClaudeandClaude Opus 5.5 9bce1d6b1f feat(synastry): symmetric Rajju / Vedha flags and cross-chart relationship-point links (BUG-1681)
Independent Staging Quality Gate / validate-frontend (push) Successful in 4m58s
Independent Staging Quality Gate / validate-python (push) Successful in 5m45s
Independent Staging Quality Gate / publish (push) Successful in 2m46s
- marriage_match keeps Rajju (same group) and Vedha (paired) as flags, which
  read the same either way round; Mahendra, Stree Deergha and the in-law
  star rules are recorded as not used (gender-directed / in-law risk).
- pair_promise_links lists where one person's 7th lord, UL, DK, A7 or Moon
  sits in the other's ascendant, Moon or Venus sign (same sign or 1-7 axis).
- Appendix shows both.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXp2su8Vzqv3jNvkCSqt
2026-11-07 12:48:36 +08:00
ClaudeandClaude Opus 5.5 e66b4dec5f feat(synastry): each person's relationship promise in the dossier and appendix (BUG-1680)
Independent Staging Quality Gate / validate-frontend (push) Successful in 5m20s
Independent Staging Quality Gate / validate-python (push) Successful in 5m52s
Independent Staging Quality Gate / publish (push) Successful in 2m48s
`relationship_promise` reads both full charts: 7th lord and 7th-house
occupants, Venus and DK with sign, house, dignity and functional role; UL
with its lord, occupants and the 2nd from UL; D9 ascendant, D9 7th lord and
Venus in D9 (vargottama). Missing charts stay `not_available`. The appendix
adds one promise line per person under their structure line.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXp2su8Vzqv3jNvkCSqt
2026-11-07 12:38:18 +08:00
ClaudeandClaude Opus 5.5 0d0180667d fix(synastry): technical appendix shows parameters, the seven kutas, Kuja and Papasamya; blocked reads 无法计算 (BUG-1679)
Independent Staging Quality Gate / validate-frontend (push) Successful in 5m10s
Independent Staging Quality Gate / validate-python (push) Successful in 5m46s
Independent Staging Quality Gate / publish (push) Successful in 3m0s
The appendix read keys the dossier does not have: the profile is per person
(`calculation_profile.person_a/person_b`), kuta scores sit under
`ashtakoota_36.international_core.scores`, and the Raman packet is the match
object itself. Parameters were always 「未标明」 and the traditional block was
one sentence. Now: per-person ayanamsa / node / house system, the seven-kuta
total out of 35 with each item and its ceiling, Bhakoot / Nadi exception
candidates (raw score unchanged), Kuja per reference frame with mitigations
and the comparison, Papasamya per person, and the Raman Kuja variant.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXp2su8Vzqv3jNvkCSqt
2026-11-07 12:26:25 +08:00
ClaudeandClaude Opus 5.5 c081fbe00d fix(report): R/C column and Vimshottari balance start (BUG-1674, BUG-1675)
Independent Staging Quality Gate / validate-frontend (push) Successful in 5m14s
Independent Staging Quality Gate / validate-python (push) Successful in 5m48s
Independent Staging Quality Gate / publish (push) Successful in 2m45s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyeZrYn6ryNcSe5Y2Y
2026-11-07 12:00:13 +08:00
ClaudeandClaude Opus 5.5 00dc697b0d feat(report): reader direction A with grouped contents; paragraphs get air, fact tables as one quiet list (BUG-1673)
Independent Staging Quality Gate / validate-frontend (push) Successful in 5m8s
Independent Staging Quality Gate / validate-python (push) Successful in 5m45s
Independent Staging Quality Gate / publish (push) Successful in 2m39s
- Contents in three groups: 解读 (the eight reading sections, each anchored),
  推运 (dasha / annual chapters by title), 本命数据 (the rest, folded to
  "N 项" until opened or read into).
- Reading: section numbers, a row of section chips, 17px / 1.85 body; the
  article restores paragraph spacing that Tailwind preflight zeroed.
- Fact tables and calculation charts move into the article column; one
  hairline row per table, custom chevron, the shared status said once.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXp2su8Vzqv3jNvkCSqt
2026-11-07 11:52:16 +08:00
ClaudeandClaude Opus 5.5 8255b22c41 fix(ephemeris): 未来九十天 grouped by day with correct names, directions and ingresses; ask draft A (BUG-1672)
Independent Staging Quality Gate / validate-frontend (push) Successful in 5m5s
Independent Staging Quality Gate / validate-python (push) Successful in 5m42s
Independent Staging Quality Gate / publish (push) Successful in 2m34s
- Engine rows: lowercase planet names map to Chinese; `direct_to_retrograde`
  reads as 停滞转逆 (Jupiter 12-13, Mars 01-11 were shown as 转顺); ingresses
  read `to_sign` and stations take sign/degree from `longitude`, so the
  eleven sign changes in the window show again.
- List: one row per day, date + "N 天后" (tappable), neutral glyph + planet
  + event; same-day events share the date.
- Ask card names the selected day and stacks on phones; the draft is the
  owner's option A and the jump is a client navigation when the app router
  is mounted.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXp2su8Vzqv3jNvkCSqt
2026-11-07 11:19:14 +08:00
ClaudeandClaude Opus 5.5 f1f3c61001 feat(ui): chart loader lights the four kendra houses clockwise; 生时纠正 waits with it (BUG-1671)
Independent Staging Quality Gate / validate-frontend (push) Successful in 5m15s
Independent Staging Quality Gate / validate-python (push) Successful in 5m45s
Independent Staging Quality Gate / publish (push) Successful in 2m30s
After the lines draw, houses 1 → 10 → 7 → 4 (top, right, bottom, left)
crossfade one into the next; the cycle is 6s. The 生时纠正 loading step
drops its text card for the centred ChartDrawLoader + 「正在计算…」.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXozbkyFNqbu8pVEtZ7W
2026-11-07 01:43:17 +08:00
ClaudeandClaude Opus 5.5 228df0f7fb feat(ephemeris): personal month calendar on 星历 (BUG-1666, BUG-1667)
Independent Staging Quality Gate / validate-frontend (push) Successful in 5m12s
Independent Staging Quality Gate / validate-python (push) Successful in 5m48s
Independent Staging Quality Gate / publish (push) Successful in 3m27s
The 星历 page gets a month calendar for the chosen person: every day is
吉 / 平 / 凶 with two or three life themes from transits against their own
chart, the selected day opens to its themes and "为什么", and below it
「接下来要留心」, 「这几天」 and 「回看」 (owner, 2026-11-07: A's grid plus
C's lower half).

Engine: scripts/personal_calendar.py joins existing calculators on one
date axis (one call, <0.5 s for 45 days): Panchanga in the subject's own
ayanamsa, Tara / Chandra bala, Moon house from Lagna and Moon,
Ashtakavarga SAV + Moon BAV, transit conjunctions with natal points,
functional benefic / malefic, activity verdicts with native inputs,
ingress / station / combustion / eclipse / Vimshottari AD+PD boundaries,
and a month backdrop (Vimshottari MD/AD/PD, Narayana, Sade Sati / Kantaka,
slow-graha contacts, Jupiter+Saturn double transit). New endpoint
/api/personal_calendar.

BUG-1666: check_activity_muhurta ignored Vishti karana, Vyatipata /
Vaidhriti and an avoided Chandra bala, so a Vishti day could be 大吉.
BUG-1667 (closes BUG-703 / BUG-707): /api/panchanga_range now honours the
requested ayanamsa; the day view asks for the subject's own and drops the
Lahiri note.

Frontend: /api/ephemeris/month (own rate-limit bucket, cached),
/api/ephemeris/checks + migration 20261107010000_ephemeris_day_checks
(answers kept with the birth declaration they were made under). Copy is
life-first with the sky events folded under 为什么; draft wording pending
the astrologer. TASK-ephemeris-page decisions 4/6 and hard lines 3/7/9
superseded per the owner; DESIGN.md §16 updated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXozbkyFNqbu8pVEtZ7W
2026-11-07 00:44:37 +08:00
ClaudeandClaude Opus 5.5 38244928e8 docs(research): legal marriage dates verified for the holdout candidates
Independent Staging Quality Gate / validate-frontend (push) Successful in 4m59s
Independent Staging Quality Gate / validate-python (push) Successful in 5m43s
Independent Staging Quality Gate / publish (push) Successful in 3m1s
55 more marriages checked: 6 with an explicit legal act, 35 jurisdictional
(the officiated wedding is the legal act there, no separate civil act
found), 2 ceremony only, 17 unconfirmed (date conflicts or no place). 7
inferred dates got a stating source; one stays low confidence. Usable for
round 1, counting each person once: 57 career; 27 relationship with explicit
legal dates only, 41 if jurisdictional dates count (astrologer to decide).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-07 00:02:38 +08:00
ClaudeandClaude Opus 5.5 545b407978 docs(research): round-2 holdout candidates and verified legal marriage dates
Independent Staging Quality Gate / validate-frontend (push) Successful in 5m23s
Independent Staging Quality Gate / validate-python (push) Successful in 5m48s
Independent Staging Quality Gate / publish (push) Successful in 2m50s
About 230 names screened against both repos before any research; 70 unused
names researched, 48 rated AA or A, all re-checked against raw Astrotheme
pages. Strict legal-marriage rule applied on merge (48 downgraded to
unconfirmed). The 16 round-1 marriages were verified: 9 confirmed (3 with a
different legal date than first recorded), 1 not legal, the rest unconfirmed.
Usable for round 1, counting each person once: 57 for career and 23 for
relationship. Still a draft: no annual facts were run for these people.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-06 22:52:36 +08:00
ClaudeandClaude Opus 5.5 0fa9cdb668 docs(research): apply the astrologer's holdout ruling; 24 of 36 candidates already used in the project
Independent Staging Quality Gate / validate-frontend (push) Successful in 5m4s
Independent Staging Quality Gate / validate-python (push) Successful in 5m47s
Independent Staging Quality Gate / publish (push) Successful in 3m37s
Astrologer 2026-11-06: Hillary Clinton not admitted (time source conflict);
admission per person (traceable date, time, place and historical zone,
rating consistent with its source); primary marriage event is the legal
effective date, ceremony only secondary; round 1 tests career and
relationship only.

Re-audit of both repos found 24 of the 36 kept candidates already used
(rectification holdout v5 roster, celebrity test fixtures, standard test
charts, adjudicator audits, consult backtests, website e2e eval); the first
audit only read subject.name fields. 9 unused plus 2 listed in another
study's pool remain for review; 16 of their marriage events need the legal
date confirmed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-06 21:41:49 +08:00
ClaudeandClaude Opus 5.5 8ae116d303 feat(ux): novice walkthrough pass — onboarding, settings flash, type scale B (BUG-1662, BUG-1663, BUG-1664, BUG-1670)
Independent Staging Quality Gate / validate-frontend (push) Failing after 3m16s
Independent Staging Quality Gate / validate-python (push) Successful in 5m54s
Independent Staging Quality Gate / publish (push) Skipped
Walked sign-up → profile → chart → question → answer as a first-time user
and fixed what got in the way:

- 星盘档案 showed 「出生时间待补全」 for a reported time the chart already
  draws at; period profiles showed the raw key (BUG-1662).
- Phone header: title, person chip and guide pill overlapped at 360–390px
  (BUG-1663).
- Birth time: a recorded time no longer demands an earliest/latest range;
  design B folds the six sources into one row with 更改 (BUG-1664). Intake
  hints trimmed with the owner's approval.
- Page switch rendered the new page twice; the copy in the leaving slot took
  /?account=… and its dialog vanished with it (BUG-1670). The leaving page now
  keeps its own router context.
- 新手指引 design C: 「下一步:…」 pill plus count, no prices, no 去做 buttons;
  short labels on narrow phones. 「这次提问免费」 removed.
- Login: consent box above the button, 「登录或注册」, plain two-step copy.
- Place: no false 「搜索」 claim, 北纬/东经 first, UTC offset with 夏令时 note,
  Chinese country names in pinyin order.
- One name 「生时纠正」 on user-facing copy; middle dots off the main path;
  calmer delete and error styles; no frosted glass or in-page card shadows.
- Type scale B: every page uses 13 / 16 / 20 / 28 px (chart drawings excepted).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXozbkyFNqbu8pVEtZ7W
2026-11-06 20:53:42 +08:00
ClaudeandClaude Opus 5.5 18ba6b39c9 fix(reports): a generating row moves and shows N / M chapters; the list is one card; the reader gets canvas A's cover (BUG-1665)
Independent Staging Quality Gate / validate-frontend (push) Successful in 5m7s
Independent Staging Quality Gate / validate-python (push) Successful in 5m50s
Independent Staging Quality Gate / publish (push) Successful in 2m56s
Product, 2026-11-06: 「生成中的报告是不是应该加一个动画,而且告诉用户进度」,
「为什么就只有上面那一个边」, 「报告页里面的 UI 不是重新设计了吗?为什么没有应用上」.

- The list GET reads section rows and the job phase for generating reports
  and returns stage + finished/total, computed with the waiting screen's own
  describeReportProgress (never a percentage, DESIGN.md · 报告生成等待态). A
  failed progress read leaves the list unchanged.
- A generating row shows the app's chart-draw motion in its icon slot (also on
  phones), 「已完成 N / M 章」 and one cell per chapter along the bottom.
- 过往的报告 is one bordered card like the 年运 row; hairlines only between rows.
- 生成报告 opens the report already being written (「查看生成进度」) instead of
  meeting 「已有报告正在生成中」.
- Reader direction A, the part BUG-1631 left out: the report opens on a cover
  (kicker, 「名字的星盘」, birth and generated line, AI notice, hairline); the
  bar names the person. The generating page's bar gets ‹ 我的报告.

Four source-literal tests updated with 原值/新值/原因.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyeZrYn6ryNcSe5Y2Y
2026-11-06 20:34:50 +08:00
ClaudeandClaude Opus 5.5 6f10cce7ae fix(report): Avastha state names follow the calculator; nakshatra dasha context as in the upstream export (BUG-1661)
- BUG-1661: Avastha states were translated by the general glossary, which had
  Young as 青年期 and Youth as 壮年期 (the calculator says 少年期 / 青年期) and
  left Old, Dina, Sabha and others in English ("Deep 睡眠"). One table taken
  from the calculator's enum comments now names them in the report body, the
  appendix and the frontend fact table. The Python export also uses a comma
  for simultaneous Deeptadi states in English (BUG-1391 fixed only the
  frontend).
- Nakshatra dasha context: natal Moon nakshatra, the current MD and AD lords'
  nakshatras and Taras, and the nakshatra of each AD lord in the MD. Both
  Ashtottari applicability rules are listed; when they disagree the report
  says no ruling has been made.

Frontend: report-fact-tables.test.ts assertions updated with 原值/新值/原因.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyeZrYn6ryNcSe5Y2Y
2026-11-06 18:25:02 +08:00
ClaudeandClaude Opus 5.5 4a937ff0e4 fix(report): name the Shadbala components; add Vimsopaka and varga-ruler detail (BUG-1660)
- BUG-1660: the six Shadbala columns used generic labels (合计 / 内容 / 分数 /
  年数 / 落座度数 / 容许天数). They are now Sthana, Dig, Kala, Cheshta,
  Naisargika and Drik, with totals, the BPHS minimum and the ratio, plus Sthana
  and Kala sub-part tables. Values are unchanged.
- Vimsopaka: per-varga dignity, points, weight and weighted score.
- Divisional mapping: per-varga sign, sign lord and sign-only dignity
  (Moolatrikona inside vargas awaits BUG-1622, so it is not marked).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyeZrYn6ryNcSe5Y2Y
2026-11-06 17:50:54 +08:00
ClaudeandClaude Opus 5.5 9351b0b633 feat(report): Lagna Kendradi, Niryaana Shoola sub-periods and non-applicable conditional dashas, as in the upstream export
Independent Staging Quality Gate / validate-frontend (push) Successful in 5m20s
Independent Staging Quality Gate / validate-python (push) Successful in 6m3s
Independent Staging Quality Gate / publish (push) Successful in 3m28s
Product decision 2026-11-06: follow the upstream export for these tables.

- Lagna Kendradi: upstream profile kendradi_narayana_duration_candidate_v1
  (Lagna sign, then kendra / panaphara / apoklima order, Narayana sign years,
  the same years Drig uses). Major periods only; labelled as not checked
  against a book example.
- Niryaana Shoola: sub-periods forward from the MD sign, twelve equal parts;
  the research chapter adds the third level. Labelled: PVR gives no separate
  rule, comparison only.
- Conditional dashas whose classical gate fails (Satabdika, Shodashottari,
  Dwadashottari, Dwisaptatisama, Panchottari, Chaturshitisama) get a separate
  reference copy with the existing standard-table profile. The reading's own
  modules stay not_applicable, so consultation, convergence and
  rectification are unchanged; the report states the unmet condition.

Tests that locked the old omissions are updated with 原值/新值/原因.
Pre-work ledger: notes from this session (restore, CRLF files, baseline failures).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyeZrYn6ryNcSe5Y2Y
2026-11-06 17:39:39 +08:00
ClaudeandClaude Opus 5.5 81f1ab45d6 fix(report): yoga participants, nine-body transits, four restored sections; opening and appendix parity (BUG-1657..1659)
Compared against the upstream customer export of 2026-11-05.

- BUG-1657: detected yogas carry the planets the rule bound (structured
  evaluators, solar/lunar rows, loop-free custom expressions via AST; an
  `or` over different planets names nobody). The report lists participants
  and current-Dasha overlap instead of 未判定.
- BUG-1658: the dated transit table reads transit_positions, so all nine
  bodies have sign, degree, speed and retrograde.
- BUG-1659: Navamsha AD durations, current convergence (12 houses), Pancha
  Pakshi and Rashi Tulya Navamsa are put on the worksheet and rendered;
  Pancha Pakshi uses the birth weekday instead of always Sunday.
- Opening: timeline (next PDs, Narayana current period) and career /
  finance / relationship evidence (house lords, AmK/DK, A10/UL, D10/D9/D2/D11)
  under 「重点」, then a reading guide. The focus card stays under the title
  (BUG-1316).
- Traditional supportive practices are wired to the remedies module (reference
  only, mistranslations fixed, duplicate table removed).
- Appendix: Argala per-source detail, nakshatra reference with lord, gana,
  degree and KP sub-lord, and verified calculation notes.

tests/test_full_data_parity_chapters.py: the four "public gap" sections now
must carry real cells (原值/新值/原因 in the test).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyeZrYn6ryNcSe5Y2Y
2026-11-06 17:23:21 +08:00
ClaudeandClaude Opus 5.5 8f83eb2c25 fix(report): Kalachakra uses the classical sign periods from the Moon longitude (BUG-1656)
The full reading and the dasha registry called the Kalachakra module without
the Moon longitude, so BUG-1487's PVR ch.24 sign periods never ran in the
product. The report printed the legacy approximation (planet lords, 7..18
years) under a "simplified model" label.

Both callers now pass the Moon longitude. The dasha family carries
method_profile. Classical results keep their own AD/PD rows instead of the
rotated simplified table, and the reader and research tables list signs.
The PyJHora comparison was rerun: majors now agree, sub-period division still
differs (documented).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyeZrYn6ryNcSe5Y2Y
2026-11-06 17:23:21 +08:00
ClaudeandClaude Opus 5.5 07f750436b docs(research): draft candidates for a new annual holdout (36 people, 134 dated events), unreviewed
Independent Staging Quality Gate / validate-frontend (push) Successful in 4m57s
Independent Staging Quality Gate / validate-python (push) Successful in 5m40s
Independent Staging Quality Gate / publish (push) Successful in 2m37s
48 public figures not in the development set; kept the 36 with Rodden AA or
A on Astrotheme. Ratings, sources, birth dates and times re-checked against
the raw pages (all match); 129 of 133 day-precise event dates found verbatim
on their source page, 4 marked derived_needs_review. Draft only: no annual
facts were run for these people, and they are not admitted or frozen.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-06 16:26:46 +08:00
ClaudeandClaude Opus 5.5 8de8f3d45c fix(tajika): sync the astrologer's 3509ccd7: oppositions, no factor promotion, annual cases back to template (BUG-1655)
From yinduzhanxing branch codex/local-web-verification-20261026 (remote SHA checked):
- kernel: a 180-degree opposition keeps its 180 target (it was matched as 0);
  exact and equal-speed states are no longer called applying or separating
- named-yoga authority rows carry source_review_status and
  factor_promotion_allowed: false; the annual year-chart layer honours the
  flag, so no Tajika yoga (Ithasala / Easarapha included) becomes a factor
- the five annual oracle cases go back to template_only (archived text kept);
  the dashboards no longer claim annual closure

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-06 16:26:46 +08:00
ClaudeandClaude Opus 5.5 3a6f09815d feat(rectification): history, current result first, mini charts, all cards open (BUG-1654)
Every save keeps a record (chart_choice_records via chart_choice_adopt_v3);
the page opens on the current result with its time scale and the history
list, a past record can be adopted again while the birth declaration is
unchanged. Comparison cards are all open with a 60px mini chart per side
following the north/south board setting. Saving shows one toast.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXozbkyFNqbu8pVEtZ7W
2026-11-06 15:58:19 +08:00