Family coverage still continues dated collection when nothing can split leftover minutes, but an already-built choice card must not be displaced by spoken finance collect.
Co-authored-by: Cursor <cursoragent@cursor.com>
Family "没有" was treated as adopt-ready once the training gate was open. Remaining dated domains still distinguish leftover minutes, so persist those questions instead of writing the adopt narration.
Co-authored-by: Cursor <cursoragent@cursor.com>
The time card stayed under an earlier collect question, and the close said to just use a time for now. Keep the card on the delivery turn and present the analysis as this round's result.
Co-authored-by: Cursor <cursoragent@cursor.com>
BUG-430 loaded Inter via next/font/google, which failed Gitea publish
run 2408 when the Docker build could not reach fonts.googleapis.com.
Co-authored-by: Cursor <cursoragent@cursor.com>
Five-theme assemble cleared the chart and actionNotes caps, then failed
three anonymous guards. Log field path plus kind only, and strip
deterministic phrases from sections the producer already marked blocked.
Co-authored-by: Cursor <cursoragent@cursor.com>
Five-theme personal_full still failed final parse after the charts cap
fix because writer output exceeded actionNotes.max(24). Truncate at
assemble; do not raise the schema cap.
Co-authored-by: Cursor <cursoragent@cursor.com>
Adopted reverse-verify repeated already-asked collect stems, treated 「这题跳过」 as stopping the case, and promised holdout/OOS checks that never ran. Collect spoken stems no longer prefix a year.
Co-authored-by: Cursor <cursoragent@cursor.com>
Five-theme personal_full assembled nine charts after health vargas landed, but the document schema still capped at six. Bind the count to the enum, align JSON/Python contracts, and log final-parse paths without values.
Co-authored-by: Cursor <cursoragent@cursor.com>
Heartbeat and GET were parsing progress_phase with a pattern that rejects the colon prefix the writer already persists, which aborted generation after the first chapter.
Co-authored-by: Cursor <cursoragent@cursor.com>
set-focus only attaches the question stem. Retracting live Chinese before
it wiped the opening hello with an empty replace. Other public tools still
retract planning prose.
BUG-533.
Co-authored-by: Cursor <cursoragent@cursor.com>
Accepted profiles were selecting a revoked rectification table and failing the report before the engine ran. Degrade to a null window when that optional read fails.
Co-authored-by: Cursor <cursoragent@cursor.com>
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