Move nextDatedCollectFollowup after family coverage so a new case still
asks D9 then D10. Dated third-event collect stays education → finance →
relocation → health. Admin input padding contract follows --space-3.
BUG-531 and BUG-532.
Co-authored-by: Cursor <cursoragent@cursor.com>
Holdout stays closed until the training gate opens and skips declined domains.
Dated collect order is shared with exhaustion; spoken prompts must name the domain; progress copy uses collection_progress only.
BUG-527 through BUG-530.
Co-authored-by: Cursor <cursoragent@cursor.com>
Chat body, type weights, and radii were still a second scale; membership purchase now uses the shared Button so the filled terracotta action is one implementation.
Co-authored-by: Cursor <cursoragent@cursor.com>
The report centre and reader were a second newspaper identity. They now reuse canvas, hairline, and serif display tokens so the document feels like the rest of Jyotisha.
Co-authored-by: Cursor <cursoragent@cursor.com>
The early-exit reused the pre-click dossier, so the agent never ran on the common path. Use this-turn decision, log agent vs template outcome, and time out after 8s.
Co-authored-by: Cursor <cursoragent@cursor.com>
When leftover probes cannot split adjacent minutes, skip frameless follow-ups and let a no-tool agent explain the stop. Distinguish-card "no" no longer closes a whole evidence domain.
Co-authored-by: Cursor <cursoragent@cursor.com>
Consultation and personal reports otherwise ignore the merged friendship table, timing seed, module audit, and Pratyantar windows.
Co-authored-by: Cursor <cursoragent@cursor.com>
Advance the one-way import to git commit a6f47abd with consultation keypath golden, switch official VedAstro comparison to the REST Calculate bridge, and receive the 25 new registry entries behind research_only_blocked.
Co-authored-by: Cursor <cursoragent@cursor.com>
Product default stays Raman. Public-case revalidation and fixture dashas now pass --ayanamsa lahiri; profiles store the four selectable values.
Co-authored-by: Cursor <cursoragent@cursor.com>
When coverage still blocks adopt and no renderable discriminator remains, narrate the numeric range and persist a spoken collect instead of promising a time card that cannot be clicked. Recompute probe information gain on active candidates and drop zero-split probes explicitly.
Co-authored-by: Cursor <cursoragent@cursor.com>
Choice path already wrote spokenFollowupForUser into the body; free-text
dropped that stem and only filled empty answers, so a new collect_spoken
focus stayed invisible after “记下了”.
Co-authored-by: Cursor <cursoragent@cursor.com>
Distinguish-stage reverse-verify questions were exhausting after 1–3
dated probes. Union boundary windows across representative pairs, keep
multiple years per domain, raise the public cap, and allow activation
fallback without relaxing MIN_BOUNDARY_DAYS or scoring.
Co-authored-by: Cursor <cursoragent@cursor.com>
- Add sanitized Jyotish benchmark suite with fictional/public smoke samples
- Include benchmark scripts and markdown reports while excluding raw JSON/CSV outputs
- Add open-source Jyotish project comparison research
- Add complete technique coverage roadmap
- Add privacy-safe PDF chart validation methodology
- Update SKILL.md and CHANGELOG with v6.1.9 scope and privacy boundaries
Validation:
- py_compile benchmarks/jyotish/scripts/*.py passed
- quality gate passed with 35 pytest tests and golden case
- Fix: _compute_one_chart.py JD calculation used PyJHora's
gregorian_to_jd() which ALWAYS returns noon JD regardless of time.
Changed to swe.julday() with correct UTC hour.
- Impact: All 60 test charts with non-noon birth times had wrong
ascendants and house assignments (e.g. Einstein went from
Scorpio Asc -> Gemini Asc, matching Swiss Ephemeris)
- Cross-validated: Swiss Ephemeris (industry gold standard) and
xalen-ephemeris (Rust, 5M chart oracle test)
- New baseline: F1=93.50% (Precision=93.82%, Recall=93.18%)
- Regenerated: standard_test_charts.json, planet_positions_60.json,
validation_logic_report.json
- Quality gate: compile/json/audit/BPHS/pytest/golden all passed
Narayana Dasha is Parashara's rashi-based dasha system, complementary to
Vimshottari (nakshatra-based). Algorithm: start from Lagna, each sign's
dasha years = count from the sign to its lord's sign (zodiacal order).
Implementation:
- scripts/narayana_dasha.py: core calculation module
- calc_narayana_mahadasha(): 12-sign sequence from Lagna
- calc_narayana_antardasha(): sub-periods within each MD
- get_current_narayana_dasha(): locate current period by age
- scripts/cmd_narayana_dasha.py: CLI subcommand
- jyotish_engine.py: Step 4.13 in full-reading + narayana-dasha subparser
Verified with Leo Asc chart: total cycle 88 years, current Sagittarius MD
(31-38 yrs, 5H/creativity) complements Vimshottari Saturn MD.
Files: +2 new (narayana_dasha.py, cmd_narayana_dasha.py), +4 modified
Bug: v6.0.18's solar_return_full_report returned early when calc_solar_return_chart
failed (no swisseph), skipping Muntha entirely.
Fix:
- Added _estimate_sun_sign() with lookup table for sun sign from birth date
- Refactored solar_return_full_report to use degraded mode:
- Muntha + Year Lord always computed (using lookup table sun sign)
- Tajika/Sahams/Tri-Pataka/Mudda gracefully skipped with notes
- Added _SUN_SIGN_LOOKUP table covering 1950-2100, \u00b11 sign accuracy
Files: solar_return.py, SKILL.md, CHANGELOG.md, technique_registry.json