Commit Graph
100 Commits
Author SHA1 Message Date
jesse-uxandGrok (agent loop) 74a739b2dc feat(card): seven acceptance counterexamples end to end (BUG-1812)
- career layer gets the D1 longitudes, so the paksha has one source (Obama
  base vs career mismatch fixed)
- card carries movable_lagna_moon.reason, Narayana ad_status / ad_reason and
  the mahadasha cycle_index; running line says "sub-period undecided"
- engine keeps the MD when the AD is undecided; timingFollowing skips
  zero_duration rows explicitly
- timingKeys allowlist: adstatus / adreason / cycleindex / zeroduration
- fixtures + capture script, 16 engine tests, 7 card tests, PROGRESS, BUG-1812

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

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-08 11:57:22 +08:00
Claude 05a11cefbf Merge branch 'codex/rectification-float-split-1108' into codex/phase2-chat-merge-1107
Independent Staging Quality Gate / validate-frontend (push) Successful in 5m18s
Independent Staging Quality Gate / validate-python (push) Successful in 6m40s
Independent Staging Quality Gate / publish (push) Successful in 2m48s
2026-11-08 10:38:08 +08:00
ClaudeandClaude Opus 5.5 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
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
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
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 c1a69445b5 refactor: retire event-scored rectification backend (BUG-1644)
Remove the V5 scoring pipeline, dynamic rectification, minute-rectification
evaluations and the research scripts built on them, plus their API routes.
Keep the upstream skill layer (gate, questionnaire, active events), the
varga-segments scan and the consult range reading (moved to
scripts/birth_window_range_reading.py).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXozbkyFNqbu8pVEtZ7W
2026-11-06 02:40:28 +08:00
ClaudeandClaude Opus 5.5 7827d9aff0 chore(rectification): re-freeze after the BUG-1622..1626 renumber (ERR-110)
The renumber (093da446) changed comments in shadbala.py and both replay
scripts, so the frozen identity moved. On top of staging 849343cd:
FREEZE / REPORT constants first, --freeze, then replay:
astrologer_166d_2026_11_05; contract rotated with previous =
astrologer_166c_2026_11_05 (kept byte-for-byte).

Versus astrologer_166c_2026_11_05 and astrologer_166b_2026_11_04: sealed 20
and reported offset 900 all identical, metrics and summary identical,
historical changed_trial_count 10 / 731. Still scoring-15; no tuning.
BUG-1622 records the second re-freeze.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyeZrYn6ryNcSe5Y2Y
2026-11-05 15:35:31 +08:00
ClaudeandClaude Opus 5.5 093da4468d docs: renumber this branch's records BUG-1613..1617 -> BUG-1622..1626
Another session shipped a different BUG-1613 (loading curtain) to staging.
Mapping in order: 1613->1622, 1614->1623, 1615->1624, 1616->1625,
1617->1626, in BUG_HISTORY headings and bodies, CHANGELOG, ledger, research
notes, code comments, rule text, test notes and the holdout contract text.
Text only. shadbala.py and the two replay scripts are in the frozen identity,
so an ERR-110 re-freeze follows in the next commit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyeZrYn6ryNcSe5Y2Y
2026-11-05 15:32:05 +08:00
ClaudeandClaude Opus 5.5 3c81ebf3cf chore(rectification): re-freeze sealed holdout and offset sweep for the #166 2026-11-05 labels (ERR-110, BUG-1613..1617)
shadbala.py (frozen identity) changed in 5ffef30a: labels, comments and the
shared mercury_malefic_companions() helper, no value change. Scoring identity
stays rectification-v5-matrix-scoring-15; no ALGORITHM_VERSION bump.

FREEZE / REPORT constants first, --freeze, then replay (after all code
commits of this branch, 09fd3a42): astrologer_166c_2026_11_05; contract
rotated with previous = astrologer_166b_2026_11_04 (kept byte-for-byte).

Versus astrologer_166b_2026_11_04, trial by trial:
- sealed 20: all identical; metrics identical (top-1 0.40, top-3 0.45, mean
  minute error 6.95); historical changed_trial_count still 10.
- reported offset 900: all identical; summary identical (top-1 hits at
  +-15/30/60 4/3/0, top-3 31/34/30, delivery coverage at +-15 219, mean top-1
  minute error 20.52); historical changed_trial_count still 731.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyeZrYn6ryNcSe5Y2Y
2026-11-05 15:31:43 +08:00
ClaudeandClaude Opus 5.5 3e7388c37f feat(narayana): default to Sanjay Rath, keep the legacy algorithm as a labelled comparison (BUG-1601, #166 Q9)
Product decision 2026-11-04 on astrologer ruling #166 Q9. One builder,
narayana_legacy_label.product_narayana, makes the product Narayana object:
the Rath view on top (label "Sanjay Rath 版(默认;…)", seed sign, 24 MDs,
running MD / AD with remaining_years, the running MD's ADs) and the whole
labelled legacy result under `legacy`. When Rath cannot decide a start sign
the object says blocked in plain words; legacy never stands in.

- Consultation card: timing.narayana is Rath; the legacy running MD rides
  as a short timing.narayana_legacy; timing.narayana_rath is gone.
- Full reading / report: Rath block first, "- 对照:旧算法…" after; the
  parity chapter lists Rath (default), source-aware and legacy (comparison);
  dasha master pack Narayana periods are the Rath MDs.
- /api/dasha narayana: periods are Rath, legacy under `legacy`.
- Annual: Rath is the product timeline (used_by_product_timeline true),
  narayana_skeleton_profile "rath", legacy is the reference and never counts.
- CLI narayana-dasha prints Rath first, legacy as comparison.
- Consult full-data cache schema v2 -> v3 so old legacy-default packets miss.

Rectification scoring is untouched and still calls calc_narayana_mahadasha
(frozen identity). Evidence-card, biography and card-facts captures were
regenerated with their scripts; annual-report-facts.json was regenerated from
its endpoint function. Tests pinning legacy-as-default are rewritten with
原值/新值/原因.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-05 04:32:07 +08:00
ClaudeandClaude Opus 5.5 013f889529 chore(rectification): re-freeze sealed holdout and offset sweep for #166 batch 2 at scoring-15 (ERR-110, BUG-1590..1598)
Independent Staging Quality Gate / validate-frontend (push) Successful in 6m25s
Independent Staging Quality Gate / validate-python (push) Successful in 6m30s
Independent Staging Quality Gate / publish (push) Successful in 3m3s
FREEZE / REPORT constants first, --freeze, then replay:
astrologer_166b_2026_11_04 (frozen after 7ff447ac); contract rotated with
previous = astrologer_166_2026_11_04 (kept byte-for-byte).

Versus astrologer_166_2026_11_04 (no tuning):
- sealed 20: all identical, metrics unchanged.
- reported offset 900: 114 changed; top-1 hits at +-15/30/60 stay 4/3/0;
  top-3 30/34/29 -> 31/34/30; delivery coverage at +-15 220 -> 219; mean
  top-1 minute error 20.87 -> 20.52.

BUG-1590..1598 recorded; ledger and CHANGELOG lines added.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-04 22:42:41 +08:00
ClaudeandClaude Opus 5.5 1989649f70 chore(rectification): re-freeze sealed holdout and offset sweep for the #166 rulings at scoring-14 (ERR-110, BUG-1581..1589)
FREEZE / REPORT constants first, --freeze, then replay: astrologer_166_2026_11_04.
Contract rotated with previous = d30_venus_2026_11_04 (kept byte-for-byte);
freshness test and frontend confirmation-gate test updated.

Versus d30_venus_2026_11_04 (no tuning):
- sealed 20: 17 identical / 3 changed (case 6 true_rank 8 -> 4, case 16
  13 -> 11, case 20 1 -> 8 with minute error 10 -> 8); top_1 0.45 -> 0.40,
  top_3 0.50 -> 0.45, MAE 7.05 -> 6.95, coverage 0 unchanged.
- reported offset 900: 584 identical / 316 changed (rank better 122, worse
  139); top-1 hits at +-15/30/60 4/3/0 and top-3 30/34/29 unchanged; delivery
  coverage at +-15 219 -> 220; mean top-1 minute error 19.51 -> 20.87.
No per-ruling attribution replay was run.

BUG-1581..1589 recorded (BUG-1575 resolved with BUG-1583); ledger and
CHANGELOG lines added.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-04 21:14:16 +08:00
ClaudeandClaude Opus 5.5 71d38b0d67 chore(rectification): re-freeze sealed holdout and offset sweep for D30 and Venus roles at scoring-13 (ERR-110, BUG-1560, BUG-1570)
Independent Staging Quality Gate / validate-python (push) Successful in 7m24s
Independent Staging Quality Gate / validate-frontend (push) Successful in 7m25s
Independent Staging Quality Gate / publish (push) Successful in 2m59s
FREEZE / REPORT constants first, --freeze, then replay: d30_venus_2026_11_04.
Contract rotated with previous = audit_wave2_2026_11_04 (kept byte-for-byte);
freshness test and frontend confirmation-gate test updated.

Versus audit_wave2_2026_11_04 (product accepted these costs 2026-11-04, no
tuning):
- sealed 20: 17 identical / 3 changed (case 5 rank 1 -> 3, case 18 12 -> 10,
  case 14 reasons only); top_1 0.50 -> 0.45, MAE 6.65 -> 7.05; top_3 0.50 and
  coverage 0 unchanged. All from the D30 table.
- reported offset 900: 650 identical / 250 changed; top-1 hits at
  +-15/30/60 14/17/15 -> 4/3/0 of 300 (all from Venus roles); top-3 and
  delivery coverage unchanged at every radius; mean minute error
  19.79 -> 19.51 (from D30).
Attribution from single-fix replays on git-archive copies: D30 alone 3 sealed
/ 166 offset trials, Venus alone 0 / 108; they overlap only in case 20.

BUG-1560 and BUG-1570 resolved; ledger and CHANGELOG lines added.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyeZrYn6ryNcSe5Y2Y
2026-11-04 17:46:58 +08:00
ClaudeandClaude Opus 5.5 607a48b6c3 chore(rectification): re-freeze sealed holdout and offset sweep once for the merged audit wave 2 (ERR-110)
Independent Staging Quality Gate / validate-frontend (push) Successful in 6m27s
Independent Staging Quality Gate / validate-python (push) Successful in 6m34s
Independent Staging Quality Gate / publish (push) Successful in 3m1s
G (BUG-1560/1561: varga.py, divisional_charts_extended.py), H (BUG-1566/1567:
jaimini.py) and J (BUG-1270/1576: shadbala.py) each changed frozen identity
files and each froze its own audit_g / audit_h / audit_j record, which only
matches that branch's tree. Per ERR-110 the merged tree is frozen once as
audit_wave2_2026_11_04 (FREEZE/REPORT constants first, --freeze, then replay).
The contract now points at audit_wave2 with moon_paksha_2026_11_04 as the
previous record; the per-branch records are kept byte-for-byte and named as
intermediate in the superseded_reason notes. Freshness test and frontend gate
test updated.

Compared field by field with moon_paksha_2026_11_04: sealed holdout 20/20
trials identical, metrics unchanged; reported offset 900/900 identical,
summary unchanged; changed_trial_count vs 2026-09-20 stays 8 / 581.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyeZrYn6ryNcSe5Y2Y
2026-11-04 17:24:31 +08:00
ClaudeandClaude Opus 5.5 895a75a2ed chore(rectification): re-freeze sealed holdout and offset sweep for the varga fixes (ERR-110)
BUG-1560 / BUG-1561 changed scripts/varga.py and
scripts/divisional_charts_extended.py, both in the frozen scoring identity.
Per ERR-110 new records were created with each script's --freeze and
replayed as audit_g_2026_11_04; scripts, contract, freshness test and the
frontend gate test point at them. Prior records are kept byte-for-byte.

Compared field by field with moon_paksha_2026_11_04: sealed holdout 20/20
trials identical, metrics unchanged; reported offset 900/900 identical,
summary unchanged; changed_trial_count vs 2026-09-20 stays 8 / 581.
(The D16/D20/D27/D45 and extended-module charts are not read by scoring.)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyeZrYn6ryNcSe5Y2Y
2026-11-04 17:02:53 +08:00
ClaudeandClaude Opus 5.5 18b01c23e5 fix(shadbala): count the Moon's Paksha 2x, not 4x; adopt BPHS-Santhanam 27.10-11 + 27.18 (BUG-1557)
Independent Staging Quality Gate / publish (push) Canceled after 0s
Independent Staging Quality Gate / validate-python (push) Canceled after 1m32s
Independent Staging Quality Gate / validate-frontend (push) Canceled after 1m33s
The precise path doubled the Moon's Paksha in Kala (Raman, Graha and Bhava
Balas §55(c)) and then took that doubled value again as her Chesta (BPHS
27.18), so her Paksha entered the total four times; Chesta could reach 120,
clamping Kashta to 0 and pushing Ishta past 60. Every surveyed source
counts 2P.

Product decision 2026-11-04: BPHS (Santhanam) 27.10-11 + 27.18, as in
saravali.github.io, Maitreya8 (default) and jyotishyamitra. The Moon's
Paksha is the folded base, not doubled; waxing Moon benefic, waning Moon
malefic (BPHS 3.11, already what classify_drik_planets does, unchanged);
Chesta = Paksha. method_variants.moon_paksha names the convention. Other
planets, Drik and the legacy calc_kala_bala path are unchanged.

shadbala.py is in the rectification frozen identity, so per ERR-110 new
records were frozen and replayed as moon_paksha_2026_11_04. Compared field
by field with data_audit_2026_11_04: sealed holdout 20/20 and reported
offset 900/900 identical, metrics and summary unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyeZrYn6ryNcSe5Y2Y
2026-11-04 15:46:16 +08:00
ClaudeandClaude Opus 5.5 1b367e6ba8 chore(rectification): re-freeze sealed holdout and offset sweep for the data-audit engine fixes (ERR-110)
Independent Staging Quality Gate / validate-frontend (push) Successful in 6m17s
Independent Staging Quality Gate / validate-python (push) Successful in 6m20s
Independent Staging Quality Gate / publish (push) Successful in 2m43s
BUG-1545 (scripts/narayana_dasha.py, scripts/active_rectification_event_engine.py)
and BUG-1546 (scripts/shadbala.py) changed files in the frozen scoring
identity, so the integrity gate went red. Per ERR-110, new records were
created with each script's --freeze and replayed under the label
data_audit_2026_11_04; the scripts, contract, freshness test and frontend
gate test now point at them, following 129313e1. Prior records are kept
byte-for-byte.

Compared field by field with the d60_mapping_2026_10_29 records:
- sealed holdout: 20/20 trials identical; metrics unchanged.
- reported offset: 898/900 identical; 2 trials changed true_rank only
  (one case, radius 60, offsets -30/-20: 76->67, 80->77). Top-1,
  minute error, delivery coverage and summary are unchanged. Reverting
  only the BUG-1545 files restores the old ranks; reverting shadbala.py
  does not; a different PYTHONHASHSEED gives the same result.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyeZrYn6ryNcSe5Y2Y
2026-11-04 14:13:00 +08:00
jesse-uxandGrok (agent loop) 3bc82acba6 research(d60): ship the G2/G5 script and report per-switch flips (issue #149)
The G2 precheck and the G5 noise floor had only a results file; the script
that produces them is now in scripts/research/d60_two_way_g2_g5.py, with
a test that reproduces the committed JSON byte for byte.

G5 is now reported per switch, with the ayanamsa offset in arcminutes.
Against the Raman baseline all three alternatives flip 77/77. Between the
alternatives themselves the number follows the offset: Lahiri to KP 21/77
(27.3%, 5.81'), KP to True Chitra 19/77 (24.7%, 5.02'), Lahiri to True
Chitra 2/77 (2.6%, 0.83'). The report says so and no longer claims that
any frame change flips every chart; the registered gate is baseline
relative and still triggers.

The report also states that G2's "not evaluable" comes from the registered
same-day answer policy, not from a measurement that D60 does not help.

Co-Authored-By: Grok (agent loop)
2026-10-29 16:32:54 +08:00
jesse-uxandGrok (agent loop) 129313e175 fix(varga): count D60 from the sign itself for every sign (BUG-1500, issue #149)
Independent Staging Quality Gate / validate (push) Successful in 20m59s
Independent Staging Quality Gate / publish (push) Successful in 4m25s
The production D60 branch added one sign to 1-based even signs, with no
source, while the repository's own guide and the vedastro mapping count
from the sign itself. PyJHora agrees with the latter: 33/77 recorded times
before, 77/77 after.

- scripts/varga.py: D60 is (si+pi)%12 for odd and even signs; other
  mappings and the vedastro mode are untouched.
- tests/test_d60_varga_mapping.py: 12 signs x 60 parts against
  PyJHora, plus the even-sign first part.
- scripts/research/d60_two_way_run.py: the G1 reconciliation that found
  this, now in the repository with a test; G1 passes 77/77.
- scripts/varga.py is part of the extended frozen identity, so the sealed
  holdout and the reported-offset sweep were re-frozen per ERR-110. All
  20 and 900 trials match the upstream_sync9b records on every field and
  the metrics and summary are unchanged.

Co-Authored-By: Grok (agent loop)
2026-10-29 14:30:57 +08:00
jesse-uxandGrok (agent loop) 5c5f333d4d fix(varga): port the five sarpa ranges and the 22nd drekkana house (BUG-1494, BUG-1495, issue #159)
Upstream 50847e57, ported semantically:

- Sarpa Drekkana now accepts the five classical ranges (Cancer 2/3,
  Scorpio 1/2, Pisces 3) and partitions on the raw longitude instead of
  the rounded display degrees.
- The 22nd Drekkana is the eighth house of D3 (+7), not +21 zodiacal
  ten-degree divisions.

scripts/varga.py is part of the extended frozen identity, so the sealed
holdout and the reported-offset sweep were re-frozen under ERR-110:
20/20 sealed trials and 900/900 sweep trials match the sync8 records on
every compared field, and the metrics, summary and widening geometry are
unchanged.

Tests: the upstream varga/ sarpa files are added under
tests/test_upstream_sync9b_*.py; the stale +21 assertion and the sarpa
definition string are updated with the original/new/reason columns in
PROGRESS.

Co-Authored-By: Grok (agent loop)
2026-10-28 16:25:45 +08:00
jesse-uxandGrok (agent loop) a757af6b4e 标出研究章和 PyJHora 的已知差别(#92)。
10 张虚构盘逐体系对照。不一致的方法在标题下写明差在哪一类。本命 Tithi 顺行一致,逆行没有公开函数。Windows 上 1970 年以前的日出不再用 fromtimestamp。

自测:合同与研究章测试通过;200 张英文扫描约 1956 秒通过。未跑全量 pytest、快速门和前端。

Co-Authored-By: Grok (agent loop)
2026-10-23 22:29:52 +08:00
jesse-uxandGrok (agent loop) d45e65a9ec 完整数据版补上研究口径的推运、次小运和细分盘(#92)。
研究章在渲染时计算,不写入资料包。四种星座大运次小运和 Kalachakra 第三层不改原来的主运、子运。D81、D108、D144 只留在研究章。

自测:test_research_timing、星座大运、域读取、卫生预算、真恒星、jhora 扫描、API 增长、六章标题、英文版。三张虚构盘中英出稿都低于 180 秒。PyJHora 已导入但未做逐层对照。

Co-Authored-By: Grok (agent loop)
2026-10-23 18:20:44 +08:00
Jesse_ChenandClaude Opus 5.5 e7cab24c1a merge origin/staging into narrower delivery (只碰文档;显示漏段 BUG-1375 顺延为 BUG-1392, issue #77)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LutgzyJqNhPpZy1nFsJtN3
2026-10-19 09:15:55 +08:00
Jesse_ChenandClaude Opus 5.5 79f6ac5297 chore(rectification): refreeze sealed and offset replays as upstream_sync8_2026_10_18
Sync8 changed ashtakavarga.py, dasha_analyzer.py and narayana_dasha.py,
which are in the frozen scoring identity. Sealed (20) and reported-offset
(900) replays match the scoring_perf_2026_10_13 records trial for trial,
so ERR-110 stores a new record. Prior records are kept byte-for-byte.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HwMNZEzdzmrbPhuRNmZe3C
2026-10-18 18:57:02 +08:00
jesse-uxandGrok (agent loop) 1ba473970f 避免四舍五入和缺区间把还可能的时间从目前范围里藏掉。
Co-Authored-By: Grok (agent loop)
2026-10-17 21:16:32 +08:00
Jesse_ChenandClaude Opus 5.5 d6c1304c50 按产品选 B 删除跨机器不可复现的拆类金样测试,采集脚本留作手动工具(issue #70)
Independent Staging Quality Gate / publish (push) Canceled after 0s
Independent Staging Quality Gate / validate (push) Canceled after 15m33s
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LutgzyJqNhPpZy1nFsJtN3
2026-10-16 14:17:39 +08:00
jesse-uxandGrok (agent loop) a7fe7e9dd5 修复拆类金样换机器就对不齐的问题,避免测试删掉共用排盘缓存。
指纹不再包含仓库绝对路径;采集时关闭缓存而不是删除目录。基线与本分支 8 个哈希一致,定向 pytest 11 通过。

Co-Authored-By: Grok (agent loop)
2026-10-16 11:48:27 +08:00
jesse-uxandGrok (agent loop) c7350bcafb 把星盘接口的计算和 HTTP 拆成两个类,离线入口不再伪造请求对象。
方法体未改。定向测试 383 通过;1 条校正回归在基线上同样失败,断言未改。快速门和全量 pytest 未跑。

Co-Authored-By: Grok (agent loop)
2026-10-16 10:24:42 +08:00
jesse-uxandGrok (agent loop) dbba127e71 拆分报告渲染函数的第一阶段,把 34 个无外层依赖的辅助函数搬到 report_render。
同一份真实盘包在屏蔽与不屏蔽 PyJHora 下新旧渲染 sha 都一致,各 24 项且退出码 0。指定 pytest 233 通过、3 跳过。

Co-Authored-By: Grok (agent loop)
2026-10-15 20:59:11 +08:00
jesse-uxandGrok (agent loop) e21e167a73 fix(chart): lock synastry chart calls and stop overwriting the A/B note
The bounced contract still looked for the old chart calls. The research script now writes to a temp directory unless --out is set. Quota splits stay unimplemented.

Co-Authored-By: Grok (agent loop)
2026-10-15 10:19:41 +08:00
jesse-uxGrok (agent loop)Cursor
336286e428 fix(chart): skip unused synastry overview and doomed report subprocesses
Synastry charts now skip the unused external overview and run together. Reports skip PyJHora subprocesses when that library is missing, and a full heavy-compute slot logs which paths hold it. Splitting quotas stays a simulation.

Gate, growth, and report pytest passed, as did the frontend route tests, tsc, lint, and the A/B script.

Co-Authored-By: Grok (agent loop)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-15 08:02:39 +08:00
jesse-uxandGrok (agent loop) a04e590961 合并 staging,并把长报告缓存目录登记进自行清理名单
Independent Staging Quality Gate / validate (push) Successful in 14m32s
Independent Staging Quality Gate / publish (push) Successful in 4m18s
与最新 origin/staging 合并。report_reference_cache 写入 OFFLINE_SCRATCH_NAMES。清理仍由每次读取前删掉两天前的文件完成,两个缓存模块的行为没改。

自测:test_api_scratch_retention 10、test_report_reference_perf 15、test_consult_card_full_source 12,共 37 通过。

Co-Authored-By: Grok (agent loop)
2026-10-14 10:40:43 +08:00
Claude cb8004a188 merge origin/staging into api disk cache retention (issue #60)
Independent Staging Quality Gate / validate (push) Successful in 13m18s
Independent Staging Quality Gate / publish (push) Successful in 3m37s
Docs-only conflicts resolved by keeping both; agent-loop rule A.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LutgzyJqNhPpZy1nFsJtN3
2026-10-14 09:11:01 +08:00
jesse-uxandGrok (agent loop) 69c739fbee 个人长报告同盘同日重试改为秒回
完整数据版在版本号明确时复用当天的结果。渲染快捷算法留下但默认关闭,本机只快了大约两成。

Co-Authored-By: Grok (agent loop)
2026-10-14 06:37:40 +08:00
jesse-uxandGrok (agent loop) 81e2e1cfed 服务器缓存按期限清理,审计快照默认不再落地
排盘缓存、官方快照、负缓存、网关任务和分盘段过期后会删掉。同一张盘的数字写法合成一把缓存键。失败快照只用短期限。自测留存、异步任务、增长合同、安全缓存和隐私标记;一万个文件的清理慢于 2 秒,命中率提升不到 2.5 倍,都按实测写入记录。

Co-Authored-By: Grok (agent loop)
2026-10-14 04:53:30 +08:00
jesse-uxandGrok (agent loop) 8e0503f9c0 Speed up rectification scoring without changing results.
Cache work that depends only on the candidate minute, drop unread response fields, and reject windows above 241 candidates before any chart is built. Eleven canonical scenario hashes match 77057a819. Sealed and reported-offset replays match the 2026-10-08 records (changed_trial_count 8 and 581) and are stored as scoring_perf_2026_10_13.

Co-Authored-By: Grok (agent loop)
2026-10-14 02:06:14 +08:00
jesse-uxandJesse_Chen c4fc1044e3 research(rectification): score D12 parent probes, sample underpowered (BUG-1308) 2026-10-12 15:37:00 +08:00
jesse-ux 16f9f86843 fix(consult): date the full-data cache and slim the model card
The cache key now includes the request date, and files older than two days are removed. The model card keeps values only. Parashari aspects are copied from the engine. Saving a chart warms the packet without blocking the response.

Biography severe conflicts rose from 1 to 3, so this is not accepted for merge. Not pushed.
2026-10-09 10:00:45 +08:00
Jesse_ChenandClaude Opus 5.5 256fdb26b9 test(rashi-dashas): compare with PyJHora on the same Lahiri chart
Independent Staging Quality Gate / validate (push) Successful in 23m22s
Independent Staging Quality Gate / publish (push) Successful in 3m34s
The frozen comparison put an engine-default (Raman) native chart next to a
LAHIRI PyJHora chart, so half of every recorded difference was ayanamsa.
Both the freezer and the test now pass ayanamsa_name=lahiri; the fixture and
the progress diff table are regenerated. Report code is unchanged.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
2026-10-09 06:35:49 +08:00
jesse-ux 9d3eb23ee4 feat: 完整数据版加入六种星座大运
Sthira、Drig、Shoola、Navamsha、Niryaana Shoola 与 K.N. Rao 的 Chara 从本盘算出。Lagna Kendradi 不上表。未推送。
2026-10-09 00:43:00 +08:00
jesse-ux e5f2a75183 fix(ephemeris): include nutation in the sidereal frame
恒星黄道改为与 Swiss Ephemeris FLG_SIDEREAL 同一套含章动岁差。
产品默认路径不再用平岁差去减含章动的视位置。上升和宫头用同一个岁差。
校正身份升到 rectification-v5-matrix-scoring-12。
BUG-1275。未推送,未部署。v5 先验头名三格下降 1.3 个百分点,不调参。
2026-10-08 18:42:45 +08:00
jesse-ux 795b8845c7 fix(special-lagnas): compute eight birth points without PyJHora
Independent Staging Quality Gate / validate (push) Successful in 19m4s
Independent Staging Quality Gate / publish (push) Successful in 3m51s
Production images do not install PyJHora, so those eight points were blocked.
Swiss Ephemeris now computes them in-process. Rectification keeps the old
Hora and Ghati formulas.

BUG-1273.
2026-10-08 15:01:44 +08:00
jesse-ux 3b84a3b028 fix(rectification): re-freeze sealed identity after D5/D11 (ERR-110, BUG-1260) 2026-10-07 18:08:25 +08:00
jesse-uxandJesse_Chen a855512ecc research(rectification): put scripts on the path before nadi imports (BUG-1240)
Running the study as a file does not put scripts/ on sys.path, so the
production chart imports failed before any scoring. The library inserts
that directory itself. No rule or threshold changed.
2026-10-05 23:26:05 +08:00
jesse-uxandJesse_Chen c40f23c20e research(rectification): nadi second-level study helpers and N0 checks (BUG-1240)
Five-level Vimshottari and equal-division D150 helpers, plus a runner that
refuses to score until the preregistration file exists. First three lords
match the production chain on the v5 events. No production files changed.
2026-10-05 23:26:05 +08:00