Commit Graph
938 Commits
Author SHA1 Message Date
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
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 80bcfe1ed4 sync(upstream): method layer and calculation fixes from yinduzhanxing ea2a9d65
Product 2026-11-07: stay in sync with the astrologer's latest (5fb8379c..ea2a9d65).

- Method layer: mirror SKILL.md re-imported with import_yinduzhanxing.py from a
  clean ea2a9d65 clone (import record, manifest, import plan); root SKILL.md
  body equals the mirror again (nine-lord editorial reference line). Router and
  sub-skills unchanged upstream except her rectification skill, which is the
  protected commercial skill here.
- 7b43eaf2: rectification question templates say they are templates (basis,
  timing status, answer impact), no regression_hint +5 bias, low confidence
  cap, blocked/external execution status in the audit table, invalid answers
  ignored by the selector, calculation_profile echoed; API rejects a partial
  lat/lon/tz and event rectification without a place.
- a4b4b267: BPHS 27.19 Drik weighting readings as diagnostic variants in
  scripts/shadbala_reference/drik_profiles.py (shadbala.py is frozen, ERR-110;
  default quarter and BPHS piecewise geometry unchanged, BUG-1586 / BUG-1623);
  oracle audit compares rupa with rupa; VP Jain benchmark prints by default.
- bb26dc2d: /api/jaimini special mode carries the Goel fields, no invented
  Aries ascendant.
- d66d13ce: annual report exposes tajika_named_yoga_structures.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-07 18:12:32 +08:00
Claude 54f4dce09d fix(consult): running and next Narayana AD come from one Rath computation and meet without a gap (astrologer review 2026-11-07) 2026-11-07 17:08:33 +08:00
Claude 5f73e0641e merge codex/sync-features-1107 into upstream-full integration 2026-11-07 17:05:33 +08:00
Claude a3ae68f01a merge codex/sync-annual-1107 into upstream-full integration (golden recaptured next) 2026-11-07 17:05:33 +08:00
ClaudeandClaude Opus 5.5 df7ad8ee89 feat(report): export gains upstream's KP house view, Cuspal Promise, KP house checks, KP monthly support, key months, annual points, varga dignity matrix, Bhava aspects and the rectification contract chapter
- KP monthly support read the birth-balance lord every month (no current_dasha in the issue #137 timeline); now the running lords, matching upstream
- ported prediction_verdict_matrix.py and references/rectification_evidence_contract_v1.json (the contract was always blocked as file missing)
- English audit statuses run / not_run written as Ran / Not run (run is also a packet key)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-07 17:05:27 +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
ClaudeandClaude Opus 5.5 178e6d6216 feat(annual): sync Tajika named-yoga inputs, special points, Mudda profiles and Harsha with the astrologer's upstream
产品 2026-11-07 与占星师上游年运同步 (yinduzhanxing 5fb8379c):
- tajika_named_yogas gets upstream's full producer inputs (annual house,
  Harsha+Panchavargiya grade, Tajika rasi relation, lagnesh/karyesh); listed
  only, not judgment factors (3509ccd7). combined_strength stays blocked.
- annual_special_points: annual AL, Bhrigu Bindu, Gulika (upstream port).
- mudda_profiles: moon_at_birth_time (default, BUG-1216 ruling),
  moon_in_varshaphala, without_dasha_balance (upstream pl9-export profile).
- Harsha Bala: PVR 28.3 four-source native rule (upstream native function);
  PyJHora never runs.
- Carried into annual package blocks, report facts year overview, the
  consultation annual layer and nativeAnnualKeys; golden recaptured; English
  reader titles the special-points section.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-07 16:56:46 +08:00
ClaudeandClaude Opus 5.5 ea27a18229 feat(chart-choice): astrologer stage gains upstream's Python event engine, KP Placidus cusps, 19-varga scan and an honest tie label
- KP layer: sidereal Placidus cusp star/sub/sub-sub lords against MD/AD/PD
  lords (upstream KP_SUB_WEIGHTS). Owner window 04:50-05:10, synthetic
  5-event ledger: KP off 05:09, KP on 05:06 (upstream 05:09 / 05:06).
- result.python_engine: functional benefic/malefic, A7/UL/A10, SAV,
  Shadbala, date-precision weights and the lead-margin verdict
  (adjudicate_candidate_rows, neighbour stability, leave-one-out).
- Scan adds D5/D6/D8/D11/D16/D27/D40/D45 (D40/D45/D60 reference-only);
  chart-choice boundary lines unchanged.
- When the top score ties, match_tier is 'tied' (分不出前后) with system
  confidence 不确定; the UI shows the tie instead of 高度吻合.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-07 16:39:47 +08:00
ClaudeandClaude Opus 5.5 db189e931c fix(synastry): Rath Narayana carries execution_status so upstream's pair gate reads it as executed
Upstream's receipt _status reads execution_status before status and maps
partial_verified to parameter_sensitive, so the primary lane
'two-person Dasha/Narayana/Chara' was never ready and every dossier ended
delivery_readiness=blocked. The Rath view now carries execution_status
(executed when the seed is decided, blocked otherwise) and keeps the book
level in confidence_status, the same shape as upstream's Rashi Dasha
modules. Upstream's gate code is untouched.

Diana-Obama (raman) and the six eval pairs (lahiri): blocked -> ready_for_narrative.
Also syncs the Rath importer list test (varsha_narayana, consultation_native_layers)
and skips the retired BUG-1644 frozen file.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-07 16:27:24 +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 f3e794973a merge codex/up-report-1107 into upstream-full integration 2026-11-07 15:03:53 +08:00
Claude 8b160f90b6 fix(consult): card Ashtottari row follows the astrologer's second ruling (BUG-1676, 9cfc823e) 2026-11-07 15:03:53 +08:00
ClaudeandClaude Opus 5.5 67335ce827 feat(report): run the astrologer's skill in the report reading and keep the audit in the export
产品 2026-11-07 占星师方案 (item 4/5/6/8/10): the report reading and the export follow her skill.

- reading_facts v2 contract: birth parameters (no name/coordinates), 12 houses with KP cusps,
  functional roles and natural-vs-functional conflicts, per-domain vargas (wealth D2+D11+D10,
  A2/A11/A10; career D10+A10, AK/AmK; marriage D9+UL, A7/DK), special points, Jaimini, yogas as
  candidates with conditions, Vimshottari to PD + Narayana with dates (birth date + age) and the
  legacy variant, every dasha family's current period/status, transits from four reference points,
  Sade Sati, double transit, strengths, KP, annual, technique audit, evidence paths, method
  differences, blocked / parameter_sensitive / withheld states
- consult card facts: multi-varga domains, A2/A11/A10/AK/A7 participation, D1 varga resolves,
  yoga path fixed, Narayana ages; KP is conditional (参数敏感) instead of 不参与
- report writer: professional prompt (evidence first, A/B/C, dual-track timing, status labels),
  ninth section 依据与边界 (stored reading v2; v1 still reads), Latin allowed, longer limits
- export: technique audit chapter (Functional Benefic/Malefic, MEVG / Global Web Evidence,
  Real Case Calibration rows), parameter/method differences, dasha system status, evidence
  boundaries and the D1–D60 ledger (20 formal + 40 research D-N); upstream
  varga_evidence_matrix / generic_varga_research_audit + registries ported so the ledger is no
  longer blocked
- ordinary projection no longer deletes technique audit / MEVG / 参数敏感; parameter_sensitive
  is relabelled 参数敏感
- quality gate: upstream technique_audit_table check restored, plus required-row check

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-07 14:57:58 +08:00
Claude dbc580d42b merge codex/up-techniques-1107 into upstream-full integration 2026-11-07 14:46:34 +08:00
ClaudeandClaude Opus 5.5 ac9be6f88c feat(techniques): port the astrologer upstream skill's missing techniques
Port from yinduzhanxing 5fb8379c (MIT): Naisargika, Kaala, Karaka, Tara,
Lagnamsaka, Yogardha, Mandooka, Paryaaya and Padanadhamsa dashas;
Sarvatobhadra, Kota and Kalanala chakras; Nakshatra Latta; Pachakadi;
Raman Amsayu and Pindayu. Producers and their upstream tests are copied;
scripts/upstream_technique_layers.py feeds them our natal and transit
positions and attaches chart.consultation_native_layers.upstream_techniques.

- dasha_registry: kaala and padanadhamsa keys (35 -> 37); the nine ported
  dashas are served by compute_dasha or fail closed with upstream's reason.
- technique_registry.json: 16 partial entries; README badges follow.
- Evidence lookup section `upstream_techniques` in the consultation tool.
- Boundaries: Kalanala carries no PyJHora (AGPL) grid coordinates;
  Padanadhamsa/Lagnamsaka run on our Narayana engine (no Rath Table 12,
  PVR co-lord variants or second cycle). PyJHora observers and the Amsayu
  worked-example scaffold live in scripts/research (root .py budget).
- PyJHora black-box cross-checks: Naisargika (lords/years) and Kaala
  (seed segment and fraction within 5e-4) on a public chart.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-07 14:44:37 +08:00
Claude 995a723bbb merge codex/up-books-1107 into upstream-full integration 2026-11-07 14:44:04 +08:00
ClaudeandClaude Opus 5.5 96be1174df feat(consult): sentence-level book citation index + search_jyotish_books tool
Owner order 2026-11-07 (astrologer plan item 2): metadata-only catalog and rule citations in git; full texts and passage index stay local (gitignored). POST /api/book_citations and a bounded consultation tool with chart condition check.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-07 14:43:43 +08:00
Claude 60560ed0f0 merge codex/up-engine-1107 into upstream-full integration 2026-11-07 14:43:36 +08:00
Claude 619316e667 merge codex/up-annual-1107 into upstream-full integration 2026-11-07 14:43:00 +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
ClaudeandClaude Opus 5.5 0f8c0508bc feat(annual,synastry): run the astrologer's tajika-annual and full-synastry skills in full
Annual (产品 2026-11-07 占星师方案 item 9):
- package: optional current-city return location (default birth place, disclosed);
  annual Shadbala; Varsha Narayana (PVR ch.30.4 port of the upstream entry on the
  product's Rath Narayana); transit_context with Sade Sati phase, natal
  Ashtakavarga of each slow ingress and slow-body Vedha; not_included updated
- report_facts: year overview carries Sahams by domain, Panchavargiya/Harsha,
  annual Shadbala, Tajika aspects, Varsha Narayana; phases carry Varsha MD/AD and
  Sade Sati; ingress events carry BAV/SAV; audit rows split (Transits, Sade Sati,
  Transit AV, Vedha, Sahams, Annual Shadbala, Varsha Narayana) and consistent
- writer: full layer (both natal tracks per domain, Mudda/Patyayini four layers,
  year chart) instead of the plain layer; professional rules: evidence first,
  terms explained, dual-track timing, A/B/C confidence capped by the program,
  parameter_sensitive/blocked kept; Tajika yogas stay non-factors (3509ccd7)
- page: current-city picker, evidence/timing/confidence lines

Synastry:
- writer gets relationship_promise and pair_promise_links; four event classes
  with both-person activation (Vimshottari, Narayana, transits); calendar
  overlap is not resonance; English timeline carries parallel timing and the
  resonance gate; profile_gate/delivery_readiness enforced; same ayanamsa for
  both; sections follow customer-report-shape.md; source_modules not truncated

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-07 14:42:26 +08:00
Claude 89bcafa5e6 merge codex/up-card-1107 into upstream-full integration 2026-11-07 14:32:17 +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 27838f6969 feat(consult): put the astrologer's full data on the evidence card
产品 2026-11-07 占星师方案:回答模型拿到完整数据 (plan items 4-6, 8 and
second-half 3-8).

Engine (scripts/consultation_native_layers.py), new native layers read from
existing producers only:
- kp_placidus: jyotish_engine.cmd_kp (KP ayanamsa, Placidus, cusp-to-cusp),
  cusp sign/star/sub/sub-sub lords, ABCD significators, whole-sign comparison,
  houses the running Vimshottari lords signify
- dasha_systems: running MD/AD/PD + applicability for Vimshottari, Narayana
  (with dates from engine ages), Chara/Sthira/Drig/Shoola/Niryaana
  Shoola/Navamsha/Lagna Kendradi, Yogini, Kalachakra, Ashtottari (strict
  gate), Tribhagi (MD only), the conditional set; others not_available_yet
- special_points (compute_chart_points), transit_detail (Tara/Chandra Bala,
  Sade Sati), yoga_conditions, strength_detail (Avastha, Bhava Bala),
  card_parameters

Card: base.parameters, base.timing.dasha_systems / transits_detail,
base.natal yogas_detail / strength / jaimini / functional_afflictions;
per domain route table, KP, special points, wealth D10/A10/Bhava Bala,
career AK, parents D4. Lookup gains kp_placidus and special_points.
Size budgets raised with 原值/新值/原因 comments; golden fixture recaptured.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-07 14:27:46 +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 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 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 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 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 2028d7fdf7 feat(report): 「大运传统参考」 from the astrologer's bilingual nine-lord text (yinduzhanxing 058c4f5f)
Independent Staging Quality Gate / validate-frontend (push) Successful in 5m8s
Independent Staging Quality Gate / validate-python (push) Successful in 5m55s
Independent Staging Quality Gate / publish (push) Successful in 3m9s
- Sync references/mahadasha_editorial_bilingual.json (9 lords x 3 paragraphs,
  zh + en, per-paragraph source locators) and mahadasha_editorial_policy.md,
  plus the one-line pointers in SKILL.md and vimshottari_dasha_guide.md.
- New chapter after 大运解释 in both editions: the three paragraphs side by
  side (general / traditionally supportive / traditionally strained), never
  picked by lord or chart, Mahadasha layer only; source labelled as secondary
  study notes with the original edition pending verification; English only
  in the English edition.
- Coverage contract: the topic moves from NOT_CARRIED to the checked list.

No change to the frozen exporter, dates or any scoring.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyeZrYn6ryNcSe5Y2Y
2026-11-06 21:48:09 +08:00
ClaudeandClaude Opus 5.5 fd3737359f test(report): coverage contract against the upstream export; Shattrimshatsama reference table; keep an empty Tajika presence section
Product: turn the upstream coverage audit into our own automated check.

- scripts/report_render/upstream_coverage.py maps 140 upstream topics to our
  zh/en sections and checks presence, real content, key columns (transit
  sign, yoga participants, Shadbala components, Kala Chakra signs) and
  degraded markers. NOT_CARRIED records the 4 topics we do not ship and why.
  It also runs as a CLI on any exported report.
- tests/test_report_upstream_coverage_contract.py runs it on two fictional
  charts in both editions, checks the contract itself, and proves it flags a
  bad report. The 2026-11-05 export gives 15 findings; today's gives 0.
- Fixes the contract found: Shattrimshatsama gets the opt-in reference table
  like the other conditional dashas; a year without a Tajika yoga keeps its
  section with one sentence instead of dropping it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyeZrYn6ryNcSe5Y2Y
2026-11-06 21:48:09 +08:00
ClaudeandClaude Opus 5.5 163b139f5a feat(report): annual chart numeric data with return time, ascendant, Muntha, year lord and houses (upstream parity)
Independent Staging Quality Gate / validate-frontend (push) Successful in 5m11s
Independent Staging Quality Gate / validate-python (push) Successful in 5m52s
Independent Staging Quality Gate / publish (push) Successful in 3m1s
Each annual chart now opens with its local return time, annual ascendant,
Muntha and year lord; every body gets its whole-sign house from the annual
ascendant, longitude and degree in sign.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyeZrYn6ryNcSe5Y2Y
2026-11-06 18:28:12 +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 2d03842765 feat(report): Prastara, Avastha and Goel Jaimini detail in the appendix (upstream parity)
Independent Staging Quality Gate / validate-frontend (push) Successful in 5m16s
Independent Staging Quality Gate / validate-python (push) Successful in 5m44s
Independent Staging Quality Gate / publish (push) Successful in 2m49s
- Prastara: per-planet table of the eight contributors' bindus by sign; the
  columns add up to the BAV.
- Avastha inputs: each planet's state in the five systems with its basis and
  method (BPHS rule / simplified rule); Chinese state names come from the
  module's own meaning text, no new glossary.
- Goel Jaimini: planet parts (Mooltrikona, Karaka, Kendriya, Kartari,
  Adhipati, malefic contacts) and sign parts (permanent, Karaka, Sthana,
  aspect, lord strength).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyeZrYn6ryNcSe5Y2Y
2026-11-06 17:55:14 +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 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
ClaudeandClaude Opus 5.5 4e9430c48b feat(annual): exact Jupiter / Saturn aspect instants as a fact table, no orb, not in windows (BUG-1653)
Exact contacts are roots, not windows: the instant Jupiter (120/180/240)
or Saturn (60/180/270) stands at its Parashari aspect angle from a natal
point, by the transit scan's daily sampling and bisection. Passes of one
retrograde loop form one sequence; a station that only approaches the angle
is never listed. The report card exact_contacts carries them for review
(used_for_windows: false); no influence window until the astrologer sets one.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-06 15:23:17 +08:00
ClaudeandClaude Opus 5.5 2bbf984017 fix(tajika): port the nine-yoga Tajika authority and instantaneous applying test from yinduzhanxing (BUG-1652)
The product still ran the 2026-09-03 two-yoga version, so Nakta, Yamaya,
Manahoo and Kamboola showed as blocked. Port yinduzhanxing fb8fe915: the
governed draft and authority (nine yogas), the kernel's applying/separating
by instantaneous relative speed, the rule record (author corrected to
P.V.R. Narasimha Rao in this copy) and the upstream tests. In the annual
year-chart layer every Tajika connection is marked source_review: pending;
only Ithasala / Easarapha still produce factors until the rules are reviewed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-06 15:23:17 +08:00
ClaudeandClaude Opus 5.5 a8548673f6 feat(annual): read each phase per domain and per track, and use the user's declared birth range (BUG-1650)
Independent Staging Quality Gate / validate-frontend (push) Successful in 4m58s
Independent Staging Quality Gate / validate-python (push) Successful in 5m41s
Independent Staging Quality Gate / publish (push) Successful in 2m40s
Astrologer ruling 2026-11-06 (two rounds) on the annual defaults:
- no 2/2/1 weighted lean and no tie rule; mahadashas are background;
  Vimshottari and Narayana are read per domain; a lord enters a domain only
  through houses it owns or occupies (same rule for benefics and malefics);
  the Narayana sign only marks a theme as active; summaries never reach past
  the judged domains (部分领域可判断); 平稳 is not produced, a repeat of the
  previous phase reads 延续前一阶段的主题
- phases are never merged in the calculation; today splits the running one;
  timeline rows merge only by reading_group and keep inner dates
- windows need one shared domain; ranking by sources, date certainty and
  conflict; sky events must touch a report domain; Jupiter / Saturn
  Parashari sign aspects (5/7/9, 3/7/10, same sign apart) to each domain's
  natal objects, as relations only
- no confirmed/unconfirmed switch (product: same method for everyone): the
  range the user declared at intake is sampled and every change bisected to
  the minute, through natal chart, vargas, special points, dasha dates, solar
  return, year chart and Mudda / Patyayini; windows keep the whole range the
  dates can fall in, never a "core date"
- year-chart factors in four layers (relation, Tajika connection, limits,
  Panchavargiya capability), never a verdict; Rath method version stamped and
  unresolved branches give no direction; maraka recorded, never scored

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-06 14:14:41 +08:00