Commit Graph
967 Commits
Author SHA1 Message Date
ClaudeandClaude Opus 5.5 d610756966 fix: chart dasha exact boundaries as UTC seconds (BUG-1752 privacy marker collision)
The first exact-boundary format printed local clock times; a generated
hour:minute collided with a private marker the repo scan forbids. Boundaries
are now start_ts / end_ts (UTC epoch seconds) beside the engine's local days;
no time string is printed. Goldens recaptured (evidence card TTL=0).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-08 15:11:10 +08:00
ClaudeandClaude Opus 5.5 d676292343 fix: astrologer acceptance for BUG-1758/1763/1752 (source ledger, audit acceptance, engine boundaries)
- BUG-1758: the card's affliction layer is a source ledger: one entry per fact
  with its input, effect (conflicts / not_executed) and every house it bears
  on; a fact shared by two houses is one source, never two votes.
- BUG-1763: output acceptance after the one repair: a professional answer
  without the Technique Audit Table, or any answer without the engine audit
  rows (plain mode's evidence entry), fails as incomplete (kept text, no charge).
- BUG-1752: engine rows carry exact local start/end with UTC offset, parent
  start, cycle, and a meta block (365.25-day years, zone, [start, end)); the
  chart page copies them. Tests: midnight crossing, birth balance, second
  cycle, zero-length rows and 0-year Narayana / Chara MDs never current.
- Goldens recaptured (evidence card TTL=0; chart-view dasha from the engine).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-08 14:59:50 +08:00
ClaudeandClaude Opus 5.5 dd2cd83c3e fix: affliction sources not counts, audit-table backstop, chart page engine AD/PD (BUG-1758, BUG-1763, BUG-1764, BUG-1752)
- BUG-1758: the model card drops affliction_evidence.houses.*.signal_count
  (backend field kept); S-09, the pressure basis line and the professional
  voice name the sources and never a count.
- BUG-1763: a professional answer that stopped on its own without the
  Technique Audit Table gets one table-only continuation.
- BUG-1764: the backtest harness passes the answer mode (agent context,
  user-turn shape, length continuation); CONSULT_BACKTEST_ANSWER_MODE=plain.
- BUG-1752: /api/chart carries dasha.antardasha_timeline from
  chart_dasha.birth_moment.sub_period_timeline; the chart page copies the
  engine AD/PD rows and no longer cuts periods by year proportions.
- Goldens: chart-view golden dasha recomputed from birth_moment; evidence-card
  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 14:43:50 +08:00
ClaudeandClaude Opus 5.5 17d932a517 fix(rectification): PVR functional default + source-version Narayana, reseal round5_pvr_narayana_2026_11_08 (BUG-1759)
Product approved 2026-11-08 (astrologer round-5 rulings 1, 3; same basis as
the report and the chat card):
- functional roles: drop the bphs_exception_profile pin at the three scoring
  call sites (+ research mirror); default pvr_table_30 with Moon paksha.
- Narayana: narayana_rath.calc_narayana_rath (two cycles) / antardasha, ages
  via narayana_age from the candidate birth moment; probes date from the birth
  moment. A blocked source step makes the layer unavailable, never the old
  algorithm. Blocked count on all three datasets: 0.
- Reseal: sealed 20, offset 900, live v5 231 under the new tag; identical to
  measurement variant (c) trial by trial. float_split / 166d kept.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-08 13:12:03 +08:00
ClaudeandClaude Opus 5.5 00b5c92097 Merge branch 'codex/narayana-profiles-1108' into codex/functional-pvr-1108
Combines BUG-1741..1743 (Narayana named profiles) with BUG-1746..1752
(PVR functional table, Shadbala, KP first segment, Mudda wording).
BUG_HISTORY entries kept in number order; runtime contract keeps the
round-5 Mudda sentence and the profile-based Narayana rule; evidence-card
golden recaptured with TTL 0 / PYTHONHASHSEED=0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-08 12:00:41 +08:00
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
ClaudeandClaude Opus 5.5 0404d0a07c fix(narayana): split into five named source profiles with per-step comparisons (BUG-1741..1743)
Astrologer round-5 ruling 1 (2026-11-08, B3/B4): seed, years, dual lord,
AD direction and start are separate named profiles (Sanjay Rath source
version). Each comparison profile is recomputed with one step swapped; the
step is disputed when the running MD/AD changes, blocked when the source
cannot decide. method_status names exactly those steps with her round-5
sentence; B3/B4 open item removed. Undecided years now block the layer.
The narayana-dasha CLI passes the birth moment. Engine values on the three
public charts are unchanged; Drig and rectification scoring unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-08 11:46:12 +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
ClaudeandClaude Opus 5.5 0bf8deea49 fix(rectification): birth-moment start and float sub-period split end to end (BUG-1720)
Product approved 2026-11-08. _active_vimshottari, the candidate context
timeline, chart_choice astrologer and every event_probes Vimshottari start
now use birth_moment.mahadashas from the candidate birth moment and
birth_moment.split_period for AD/PD, replacing build_dasha_timeline
(00:00 of the birth date) and the integer-day build_antardasha. Frozen
dasha_analyzer.py / domain_calculation_service.py unchanged. Research
mirrors follow. A bare date string now raises TypeError.

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
ClaudeandClaude Opus 5.5 ba70305a5e docs(functional): name PVR Table 30 as a separate reference profile (astrologer Q7)
Product profile is BPHS ch.34 general rules + sign overrides, not PVR Table 30;
Virgo Sun/Saturn neutral agrees; 6 cells differ and are listed. No
classification changed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-07 23:47:33 +08:00
ClaudeandClaude Opus 5.5 1ae97ce727 fix(upagraha): BPHS eighths as the main part-ruler profile per astrologer Q8 (BUG-1721)
8th part lordless; night starts from the lord of the 5th weekday; Gulika at
the start of Saturn's part; weekday from the period start. PVR Table 10 /
PyJHora order kept as a named alternative profile; Maandi midpoint marked a
separate method not approved by the ruling. Kaala / Mrityu / Artha Praharaka /
Yama Ghantaka move on 12 of 14 rows; Saturn's part unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-07 23:46:48 +08:00
ClaudeandClaude Opus 5.5 6277f0b873 fix(annual): keep raw Mudda whole; clip only a labelled view to the report coverage interval (BUG-1722)
(a) raw_periods / raw_antardasha_periods untruncated (ten groups);
(b) nominal_year 365.25 d and its end; (c) coverage_interval = actual solar
return -> next actual return. periods is the view over (c) (原值: cut at the
365.25-day end, 5-15 min before the next return). Annual package, report facts
and consult card carry the view label and the astrologer's crossing-segment
wording; consult layer adds the calendar-year span over two Tajika years.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-07 23:45:04 +08:00
ClaudeandClaude Opus 5.5 d73280e9ca fix(upagraha): derive day/night share rulers and Saturn share from one rule (BUG-1721)
Tables unchanged in value (equal to PyJHora const and PVR Table 10); the
lordless-share position (BPHS 8th vs PVR after Saturn) is recorded as an open
ruling; 14 weekday x day/night cases tested.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-07 23:35:39 +08:00
ClaudeandClaude Opus 5.5 295d23bf57 fix(dasha): float sub-period split on every non-frozen AD/PD path (BUG-1719)
reference_transparency_contract: birth-moment MDs + birth_moment.antardashas
instead of the date-anchored frozen service + integer-day build_antardasha.
KP monthly: elapsed years from the full-precision MD start (total_seconds).
birth_moment.split_period: generic float split, last end pinned to parent.
Frozen dasha_analyzer / domain_calculation_service untouched; rectification
scoring keeps the integer split pending a product decision.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-07 23:35:38 +08:00
ClaudeandClaude Opus 5.5 493868dd18 feat(sync): astrologer r40 8c775cd0 — EN variable-house sentences, yoga diagnostic category
jyotish_engine applicable-yoga filter: equivalent (diagnostic rows never enter detected_yogas).
report_source_translation: ported into pl9_full_data_export EN sanitizer.
yoga_engine category: ported to not_implemented and evaluation_failure rows.
Kalachakra appendix patch: not applicable (her local renderer only).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-07 23:28:26 +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
ClaudeandClaude Opus 5.5 198208ac5b feat(sync): astrologer handoff 2e5485f5 — Sodhita entry, Narayana strength profile, 71 unimplemented yogas, Argala tie, Bhava relative points
- A1: ashtakavarga_shodhana.calc_sodhita_av (her entry; ashtakavarga.py frozen),
  level=not_calibrated + prediction_scoring_allowed=False on the chain; legacy
  subtraction stays removed (BUG-1209).
- A2: select_narayana_seed_sign strength_profile rath_empty_sign_lord_strength_v1,
  shared by source-aware seed, MD and AD (matches her function on 6000 draws).
- A3: preflight of logical branches; placeholder not an implementation;
  reference_only rules listed; 71 not_implemented; cmd_yoga not_implemented_count.
- A4: neechabhanga_kendra name/category per her handoff.
- 9e971559: Vimshottari AD record lord and native current PD in dasa convergence.
- B10: Argala equal count stays strength_comparison_required (no Narayana borrow).
- B11: full-reading bhava_bala.reference_relative_points, labelled
  product_relative_points_not_traditional, no bands.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-07 22:46:04 +08:00
ClaudeandClaude Opus 5.5 62d3da37fe feat(yoga): sync astrologer Yoga rule batch (733a931b / 30dee7b0 / 1307bf69)
产品 2026-11-07 同步占星师 Yoga 规则批次:
- lord(a) != lord(b) guard on ten two-lord rules (raja 1_4, 1_10, 4_9, 5_9,
  7_9, 2_10, 2_7; dhana 5_11, 2_5; kalatra 7_1); Jobs raja_yoga_1_10 and
  Presley dhana_yoga_2_5 no longer form, matching her output.
- 23 rules become structural_observation "(Observation)" rows; old effects
  move to traditional_effects; engine rows carry claim_kind, legacy_name,
  condition_evidence, strength 'observation', strength_basis.
- formation contracts + assess_yoga_formation, formation_checks /
  formation_assessment / strength_factors on every JSON-rule row;
  participants_expr support; natal yoga context chart_type D1.
- consultation: compact rows, sieve hits and yoga_conditions carry
  claim_kind / formation / formation_checks; observation status is
  structural_observation; card yogas_detail copies them plus formation_rule.
- reports: personal report never lists an observation as a formed
  combination; annual facts rank observations last and the evidence lists
  them under 结构观察, not 格局; PL9 tables print 结构观察 for strength /
  category and group observations as mixed.
- governed rules (BUG-1207, 1205, 1187/1206, 1596/1624, 1597/1625, 1571)
  untouched; Parvata stays disabled; 69 not_implemented unchanged.
- card golden recaptured.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-07 21:58:06 +08:00
ClaudeandClaude Opus 5.5 cd07b3e018 fix: sync astrologer handoff 99076dad (Ashtottari cycle gap, Bhava MC frame, Narayana coverage, compatible fields)
Ported from handoff/product-parity-20261107 (28823446, 99076dad):
- Ashtottari: cycle index counts from the balance-shifted first MD (no
  gap before the 108th birthday); dasha_balance_at_birth / dasha_at_birth /
  timeline_basis now emitted (the report already read them).
- Bhava Chalit MC in the natal frame (_bhava_midheaven_in_natal_frame).
- Narayana current lookup: no modulo replay outside the two generated
  cycles; status selected / outside_generated_timeline.
- Bhava Bala: no unvalidated absolute level; _meta.score_unit = Virupas.
- Field names lined up with hers: required_strength_pct (+ semantics
  marker, via shadbala_display sidecar; shadbala.py stays frozen),
  Harsha missing_inputs / score_range, cmd_yoga evaluation_error_count.
Already equivalent: yoga failures (BUG-1571), Drik determinism (BUG-1576),
standalone transit ephemeris path, Chara dignity location (BUG-1566), Harsha
max 20 / unknown day-night. Tests: tests/test_handoff_99076dad_sync.py.
Golden recaptured (Narayana status field only).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-07 21:17:30 +08:00
Claude 7cc1ab42b8 merge codex/fix-r3-1107 into upstream-full integration (finance Sodhita bridge: listed with scale, never scored; producer restrictions survive) 2026-11-07 20:37:14 +08:00
ClaudeandClaude Opus 5.5 da6230aa81 refactor(timeline): move timeline_boundaries into scripts/chart_dasha (root script budget)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-07 20:35:55 +08:00
ClaudeandClaude Opus 5.5 66aab1cba4 fix(consult): label Shadbala, Argala and Tajika verification scope downstream; recapture card golden
Astrologer third-round review 2026-11-07, items 4b-4d.
- Shadbala: the ratio total rupas / minimum is labelled a sufficiency
  ratio (not auspiciousness, not ishta_phala) on the card, in the annual
  package (sufficiency_ratio_pct, rank_by_total_rupas), the report facts
  (ranking_basis, ratio_meaning, ranking_by_ratio) and the annual report
  text. Chesta reference packet rows carry values_scope on every row.
- Argala: the layer and card say supported is a structural intervention
  only; ties broken by the Narayana strength selector carry
  ruling_pending / tie_break_ruling_pending (behaviour unchanged).
- Tajika: each annual pack field lists what partial_verified covers
  (formula / order / boundary_dates / full_chart); dates_verified is false
  and the consultation layer projects it.
The consultation evidence card golden is recaptured for the new layer
fields (start_at / end_at, not_evaluated, verification scope, labels).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-07 20:29:43 +08:00
ClaudeandClaude Opus 5.5 79d256510c fix(sync-d09f): machine-evidence transit section only on finance routes
Upstream ba8e36ec adds sections.transit for every route. Here the annual route
promises a "transit" label; a real but ungated section broke the evidence-gate
parity test. The section stays for finance/wealth, where the finance support
review reads it; the health override is unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-07 20:21:46 +08:00
ClaudeandClaude Opus 5.5 6e15a0367f feat(timeline): one boundary rule, full instants and continuity checks for every period table
Astrologer third-round review 2026-11-07, item 3. timeline_boundaries
checks end == next start on full timestamps (start inclusive, end
exclusive) and lists every gap or overlap. The solar-return report and
annual pack expose the real return interval (this return to the next
actual return, computed), the Mudda 365.25-day year and the shown window
separately. The annual package checks the year chain, each year's Mudda,
Patyayini, monthly and Varsha Narayana rows, natal Vimshottari / Narayana,
and Mudda across years (a ~8-minute hole the fixed year leaves before the
next return). Consultation dasha rows gain start_at / end_at with the
birth offset and a per-system continuity check; the card carries
continuity_issue only when a table is not continuous.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-07 20:14:01 +08:00
ClaudeandClaude Opus 5.5 b0e93904c5 fix(tajika): unknown day/night leaves Harsha incomplete instead of scoring 0
Astrologer third-round review 2026-11-07, item 2. With is_daytime unknown
the fourth Harsha component is None (status unknown), the total is
withheld and only the known three-component sum (out of 15) is given.
The annual pack, report facts, interpretation rows and the parity
strength table carry the incomplete state instead of a full score.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-07 20:04:47 +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
ClaudeandClaude Opus 5.5 45a7b01353 fix(yoga): report rule evaluation failures and unimplemented rules apart from not formed
Astrologer third-round review 2026-11-07, item 1. _run_custom_expr no
longer swallows exceptions; YogaEngine.detect records evaluation_failed
rows with the error class, and rules naming a condition type no evaluator
implements (69 BVR rules) are listed as not_implemented instead of being
silently never formed. The consultation sieve moves such packet members
to not_evaluated, and the card lists them. dhana_yoga no longer imports
math; parvata_yoga is disabled pending a definition ruling (BUG-1571).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-07 20:01:18 +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