Commit Graph
975 Commits
Author SHA1 Message Date
ClaudeandClaude Opus 5.5 ae714e0349 fix(narayana): default strength scope back to seed_only_v0 pending the astrologer (BUG-1784)
Owner 2026-11-09: the R2 widening is on hold until the astrologer rules on it.
STRENGTH_SCOPE_DEFAULT returns to seed_only_v0. All R2 code stays: local
propagation, the selected / equal / unresolved statuses, and
seed_ad_start_p43d_v1 as a named non-default profile. profile_config and the
cache keys record strength_scope = seed_only_v0. R1 and R3 are unchanged.
Tests that pinned the widened scope now pass it explicitly, with
原值 / 新值 / 原因 notes. Evidence-card golden recaptured (TTL=0; only the
profile labels changed).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-09 00:21:12 +08:00
ClaudeandClaude Opus 5.5 b7ba7f4e4f fix(consult): R3 witness fields and Narayana profile_config reach the real card (BUG-1786, BUG-1783)
Found in the round-7 cross-branch check: on public charts (Zidane, Obama)
the Neecha Bhanga row never reached yogas_detail. The compact detector entry
dropped formation_evidence, and the row sat past the 30-row cap. Keep the
witness fields when compacting and never cut a row that carries them (the
cap stays 30). The card's Narayana method_status also dropped the engine's
profile_config (timing key allowlist); carry it through.

Evidence-card golden recaptured with TTL=0 (Obama: row 30 is now Neecha
Bhanga); the load-dependent VedAstro closure reason is kept as before.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-09 00:03:21 +08:00
ClaudeandClaude Opus 5.5 8aa0d0cbcd merge: codex/round7-rect-kp-1108 into round7 integration (BUG-1801..1804)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-08 23:41:07 +08:00
ClaudeandClaude Opus 5.5 43d99de64b fix(rectification-api): never raise the engine's can_apply=false (BUG-1802)
The high-rigor path overwrote can_apply with the technique contract's
confirmation_allowed, so a passing external validation could turn a
low-confidence or provisional engine result into an applicable one.
Both must now agree; otherwise the contract continues rectification
with local_engine_cannot_apply.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-08 22:41:31 +08:00
ClaudeandClaude Opus 5.5 0df8a3283f fix(rectification): provisional vs comparable leader under unequal coverage (BUG-1801)
Raw totals are only compared when every candidate computed the same
(event, layer) evidence units. Otherwise winning_segment stays the raw
leader (provisional_leader) and comparable_leader re-ranks over the
units all candidates share; a missing unit is dropped for everyone,
never scored 0. The live stage Python engine now skips an event whose
Narayana is unavailable instead of scoring it 0, repeated facts count
once, and the stage labels an unequal-coverage leader as provisional.

占星师 2026-11-08 验收清单 §6 / §9 / §10.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-08 22:41:31 +08:00
ClaudeandClaude Opus 5.5 d784e99867 feat(narayana): round-6 R1 default AD direction, R2 strength scope and local propagation, R3 self-reference
- R1: default AD direction rath_p50_md_parity_v1 (start parity kept as a research
  profile); full profile config + algorithm version on every Narayana output, cache
  keys (consult, api chart, probes, long report, synastry) and the rectification run.
- R2: one strength profile at the seed, AD start and p.43 (d); selected / equal /
  unresolved kept apart; unresolved nodes block only what depends on them (seed
  candidates kept, dated MDs before an unresolved length kept, AD-only loss in
  rectification keeps the MD).
- R3: Neecha Bhanga witness fields (reference, relative_house, self_reference,
  independent_confirmation_allowed, self_reference_only) from the main detector to
  the evidence card yogas_detail rows; self-reference-only never counts as support.
- Sync her b54812c3 KP clock validation; port her round-5 / round-6 tests.
- BUG-1783..1787; 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 22:38:00 +08:00
Claude 528eaefb6a Merge branch 'codex/round6-engine-1108' into codex/round6-fixes-1108
# Conflicts:
#	docs/BUG_HISTORY.md
#	frontend/tests/fixtures/consult-evidence-card-golden.json
2026-11-08 16:52:48 +08:00
ClaudeandClaude Opus 5.5 fbbc4c7c21 fix: Narayana N1-N5, KP K1, functional K2/K3 per astrologer round-5 item reply
- seed rath_highest_occupant_dignity_v1 (named convention; equal tier below own sign blocks the seed)
- AD direction profiles rath_p50_md_parity_v1 / rath_stronger_lord_start_parity_v1 (default, pending choice)
- Saturn+Ketu in seed / MD sign blocked; PyJHora Ketu priority only as named reference profile
- 0-year MD rows flagged, never current, skipped on the annual timeline; years profile rath_table8_phalita_dignity_v1
- KP DBA year_days 365.25 default, parent/AD/full/visible fields, boundaries equal main Vimshottari
- functional profile pvr_table30_v1 (aliases), Moon-only blocked without paksha; profile through API,
  cache keys, audit; rectification asserts one profile per run
- 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 15:20:45 +08:00
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