15 KiB
Open Source P0 File Execution Plan
For agentic workers: REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (
- [ ]) syntax for tracking. Goal: Finish the three P0 open-source integration fronts with the smallest real diff:panchanga_apisidecar integration, VedAstro official-default closure, and PyJHora black-box evidence consumption. Architecture: Reuse the existing unified planner, API server, MCP strict workflow, localmuhurta/prashna/remediesmodules, and existing VedAstro/PyJHora audit scripts. Do not add a parallel runtime chain. Extend existing payloads so web, MCP, and skill all read the same contract. Tech Stack: Python 3.11 stdlib, existingscripts/modules, existingjyotish-appfrontend, pytest, existing repo docs.
Global Constraints
- Reuse existing repo modules; no new subsystem.
- Keep authority order: VedAstro official snapshot first, local supplemental modules second, local fallback last.
PyJHoraremains black-box evidence only; do not import/copy AGPL code.panchanga_apiideas may shape sidecar outputs, but local computation stays inscripts/muhurta.py,scripts/prashna.py,scripts/remedies.py.- Keep diffs tight: prefer helper functions inside current files over new files.
- Every task ends with targeted tests, not hand-waving.
File Map
P0-A: panchanga_api-style sidecar integration
| File | Role |
|---|---|
scripts/unified_consultation_orchestrator.py |
Decide when workflow should run prashna, muhurta/panchanga, and audited remedies sidecars. |
scripts/jyotish_api_server.py |
Build/attach prashna, muhurta_panchanga, and audited_remedies packets in one workflow response. |
scripts/muhurta.py |
Existing local Panchanga/Muhurta engine. Expose one compact helper fit for API/strict workflow payloads. |
scripts/prashna.py |
Existing time-question engine. Reuse, do not rebuild. |
scripts/remedies.py |
Existing remedies engine; only fed audited gate outputs. |
mcp_server.py |
Surface same sidecars in strict workflow output. |
jyotish-app/index.html |
Existing three-entry UI shell. Only minor control copy/visibility changes if needed. |
jyotish-app/main.js |
Send timing-sidecar inputs and render sidecar outputs. |
jyotish-app/renderers.js |
Reuse existing Panchanga rendering slot instead of new UI surface. |
tests/test_unified_consultation_orchestrator.py |
Planner contract tests. |
tests/test_api_server_security.py |
Workflow contract tests. |
tests/test_muhurta.py |
Compact Muhurta helper tests. |
tests/test_frontend_productization.py |
Frontend contract/render tests. |
P0-B: VedAstro official-default closure
| File | Role |
|---|---|
scripts/vedastro_service_adapter.py |
Single official network boundary. Cache/queue/free-tier behavior lives here first. |
scripts/vedastro_priority.py |
Shared official-first source-priority contract. |
scripts/diagnose_vedastro_mode.py |
Runtime diagnosis for official_extended vs fallback, free-tier eligibility, queue/cache state. |
scripts/jyotish_api_server.py |
Attach official summary/runtime truth to chart/full-reading/thematic/workflow responses. |
scripts/unified_consultation_orchestrator.py |
Planner-visible official-step intent only; no extra engine. |
mcp_server.py |
Surface same runtime truth and official execution layer summary. |
jyotish-app/api-bridge.js |
Preserve official/runtime truth fields from API. |
jyotish-app/main.js |
Render compact source-priority/runtime-truth block. |
jyotish-app/professional-reading.js |
Show official/partial/fallback boundary in final reading. |
jyotish-app/ai-chat.js |
Carry official evidence snapshot/runtime truth into follow-up payload. |
tests/test_vedastro_runtime_mode_diagnostics.py |
Diagnose contract. |
tests/test_vedastro_official_full_snapshot.py |
Snapshot contract. |
tests/test_vedastro_service_adapter_executor.py |
Adapter execution/caching behavior. |
tests/test_api_server_security.py |
Response contract propagation. |
tests/test_frontend_productization.py |
Frontend visibility contract. |
tests/test_vedastro_official_mcp_bridge.py |
Official bridge smoke. |
P0-C: PyJHora black-box evidence consumption
| File | Role |
|---|---|
scripts/generate_pyjhora_oracle_artifact_manifest.py |
Canonical artifact manifest generator. |
scripts/oracle_benchmark_inventory.py |
Make PyJHora artifact counts/queryable fronts visible. |
scripts/external_oracle_sanity_closure.py |
Summarize PyJHora evidence availability into closure report. |
scripts/historical_event_backtest.py |
Attach matching external evidence refs into backtest output. |
scripts/oracle_closure_master_dashboard.py |
Lift PyJHora evidence readiness into one master board. |
README.md |
State black-box boundary and what counts as closed vs not closed. |
tests/test_pyjhora_oracle_artifact_manifest.py |
Manifest shape tests. |
tests/test_oracle_benchmark_inventory.py |
Inventory tests. |
tests/test_external_oracle_sanity_closure.py |
Closure summary tests. |
tests/test_historical_event_backtest.py |
Backtest evidence-link tests. |
tests/test_oracle_closure_master_dashboard.py |
Master dashboard tests. |
Task 1: Add muhurta_panchanga sidecar to unified workflow
Files:
- Modify:
scripts/muhurta.py - Modify:
scripts/unified_consultation_orchestrator.py - Modify:
scripts/jyotish_api_server.py - Test:
tests/test_muhurta.py - Test:
tests/test_unified_consultation_orchestrator.py - Test:
tests/test_api_server_security.py
Interfaces:
-
Consumes: existing birth/location/time payload, optional
reference_date, optional user question/topic. -
Produces:
muhurta_panchanga: {status, source, panchanga, muhurta_windows, remedy_timing, blocked_reason?}in workflow/module payload. -
Step 1: Write failing helper test in
tests/test_muhurta.py- Target a new compact helper in
scripts/muhurta.py, e.g.build_muhurta_sidecar(...).
- Target a new compact helper in
-
Step 2: Run targeted test to verify failure
- Run:
python3 -m pytest tests/test_muhurta.py -q
- Run:
-
Step 3: Write failing planner/API tests
tests/test_unified_consultation_orchestrator.py: planner addsrun_muhurta_panchangafor timing/remedy/prashna routes.tests/test_api_server_security.py: workflow response includesmuhurta_panchanga.
-
Step 4: Run targeted planner/API tests
-
Step 5: Implement minimal helper in
scripts/muhurta.py- Reuse current Panchanga/Muhurta math.
- Return compact summary only; no giant raw blob.
-
Step 6: Thread helper into
scripts/jyotish_api_server.py- Add one private helper, e.g.
_compute_muhurta_panchanga(...). - Attach result to consultation workflow and high-rigor/full-reading payloads where timing/remedies are relevant.
- Add one private helper, e.g.
-
Step 7: Update planner in
scripts/unified_consultation_orchestrator.py- Add
run_muhurta_panchangaonly when route needs timing/remedy support.
- Add
-
Step 8: Re-run targeted tests
Task 2: Surface timing sidecar in MCP and frontend
Files:
- Modify:
mcp_server.py - Modify:
jyotish-app/main.js - Modify:
jyotish-app/renderers.js - Modify:
jyotish-app/index.htmlonly if an existing slot/label is missing - Test:
tests/test_frontend_productization.py
Interfaces:
-
Consumes: workflow payload with
muhurta_panchanga,prashna,audited_remedies. -
Produces: visible timing/remedy panel in frontend + strict workflow payload exposure in MCP.
-
Step 1: Write failing frontend/MCP contract test
- Assert payload/rendering can see
muhurta_panchanga.
- Assert payload/rendering can see
-
Step 2: Run targeted tests to verify failure
-
Step 3: Thread
muhurta_panchangathroughmcp_server.pystrict output -
Step 4: Reuse existing Panchanga render path in
jyotish-app/renderers.js- No new tab unless current UI truly has nowhere to show it.
-
Step 5: Update
jyotish-app/main.jsto render sidecar from unified workflow response -
Step 6: Re-run targeted tests
Task 3: Make VedAstro official path the real default contract
Files:
- Modify:
scripts/vedastro_service_adapter.py - Modify:
scripts/vedastro_priority.py - Modify:
scripts/diagnose_vedastro_mode.py - Modify:
scripts/jyotish_api_server.py - Test:
tests/test_vedastro_runtime_mode_diagnostics.py - Test:
tests/test_vedastro_service_adapter_executor.py - Test:
tests/test_vedastro_official_full_snapshot.py - Test:
tests/test_api_server_security.py
Interfaces:
-
Consumes: same birth payload/reference date/theme, existing env/free-tier settings, adapter cache/queue config.
-
Produces: one normalized block:
runtime_truthofficial_execution_layerssource_priorityfree_tier_strategy
-
Step 1: Write/extend failing diagnostics tests
- Missing premium key should not masquerade as universal blocker.
- Free-tier cache/queue possibility should be explicit.
-
Step 2: Run diagnostics tests to verify failure
-
Step 3: Write/extend failing adapter/API tests
- Repeated same request should show cache-hit semantics.
- Official snapshot status should flow as
ok/partial/blocked, not disappear.
-
Step 4: Run targeted adapter/API tests
-
Step 5: Tighten
scripts/vedastro_service_adapter.py- Reuse existing cache + queue path.
- Expose explicit metadata, not hidden internal state.
-
Step 6: Tighten
scripts/vedastro_priority.py- Keep one source-priority truth used by API/MCP/frontend.
-
Step 7: Thread normalized blocks through
scripts/jyotish_api_server.py/api/chart/api/full-reading/api/thematic_report/api/consultation_workflow
-
Step 8: Re-run targeted tests
Task 4: Show VedAstro official/fallback truth in MCP + frontend
Files:
- Modify:
mcp_server.py - Modify:
jyotish-app/api-bridge.js - Modify:
jyotish-app/main.js - Modify:
jyotish-app/professional-reading.js - Modify:
jyotish-app/ai-chat.js - Test:
tests/test_frontend_productization.py - Test:
tests/test_vedastro_official_mcp_bridge.py
Interfaces:
-
Consumes: API payload with
runtime_truth,official_execution_layers,source_priority. -
Produces: user-visible compact truth block and AI follow-up payload carrying same boundary.
-
Step 1: Write failing frontend contract tests
- Assert frontend preserves and renders runtime-truth/source-priority data.
-
Step 2: Run targeted tests to verify failure
-
Step 3: Thread fields via
jyotish-app/api-bridge.js -
Step 4: Render concise truth block in
jyotish-app/main.js/professional-reading.js- Show direct facts: official
ok/partial/blocked, cache hit, queue used, fallback used or not.
- Show direct facts: official
-
Step 5: Pass same block into
jyotish-app/ai-chat.jsfollow-up payload -
Step 6: Surface same summary in
mcp_server.pystrict workflow output -
Step 7: Re-run targeted tests
Task 5: Normalize PyJHora artifact manifest for downstream consumers
Files:
- Modify:
scripts/generate_pyjhora_oracle_artifact_manifest.py - Modify:
scripts/oracle_benchmark_inventory.py - Modify:
scripts/external_oracle_sanity_closure.py - Test:
tests/test_pyjhora_oracle_artifact_manifest.py - Test:
tests/test_oracle_benchmark_inventory.py - Test:
tests/test_external_oracle_sanity_closure.py
Interfaces:
-
Consumes:
references/oracle/artifacts/pyjhora_*+pending_packets/*pyjhora*.json. -
Produces: consistent per-front summary (
dasha,shadbala,tajika_sahams) for audit scripts. -
Step 1: Write failing manifest/inventory tests
- Need front-wise counts + file refs + boundary text.
-
Step 2: Run targeted tests to verify failure
-
Step 3: Extend
generate_pyjhora_oracle_artifact_manifest.pyminimally- Add any missing fields needed by inventory/closure consumers.
-
Step 4: Update
oracle_benchmark_inventory.pyto consume manifest, not ad hoc file scanning -
Step 5: Update
external_oracle_sanity_closure.pyto report PyJHora evidence availability explicitly -
Step 6: Re-run targeted tests
Task 6: Feed PyJHora evidence into backtest + master dashboard
Files:
- Modify:
scripts/historical_event_backtest.py - Modify:
scripts/oracle_closure_master_dashboard.py - Modify:
README.md - Test:
tests/test_historical_event_backtest.py - Test:
tests/test_oracle_closure_master_dashboard.py
Interfaces:
-
Consumes: normalized PyJHora manifest/inventory summary.
-
Produces:
- backtest result includes matching
external_evidence_refs - master dashboard shows PyJHora evidence readiness
- README truth text stays honest
- backtest result includes matching
-
Step 1: Write failing backtest/dashboard tests
-
Step 2: Run targeted tests to verify failure
-
Step 3: Update
historical_event_backtest.py- Link relevant artifact refs by front/domain; do not overclaim validation.
-
Step 4: Update
oracle_closure_master_dashboard.py- Lift manifest summary into one closure board.
-
Step 5: Refresh README wording
- Keep “black-box evidence only” explicit.
-
Step 6: Re-run targeted tests
Task 7: Final regression pack
Files:
- No new files unless a missing narrow test is unavoidable
Run:
python3 -m pytest tests/test_muhurta.py tests/test_unified_consultation_orchestrator.py tests/test_api_server_security.py -qpython3 -m pytest tests/test_vedastro_runtime_mode_diagnostics.py tests/test_vedastro_service_adapter_executor.py tests/test_vedastro_official_full_snapshot.py tests/test_vedastro_official_mcp_bridge.py tests/test_frontend_productization.py -qpython3 -m pytest tests/test_pyjhora_oracle_artifact_manifest.py tests/test_oracle_benchmark_inventory.py tests/test_external_oracle_sanity_closure.py tests/test_historical_event_backtest.py tests/test_oracle_closure_master_dashboard.py -q- Run one manual local workflow smoke:
- direct chart
- prashna/time question
- one repeated request to verify cache hit metadata
- Record remaining blocked items explicitly, especially:
- official live endpoint availability
- free-tier queue delay
- missing PyJHora evidence fronts
Fastest Execution Order
- Task 3
- Task 4
- Task 1
- Task 2
- Task 5
- Task 6
- Task 7
Reason:
- VedAstro default truth is the highest-value user-facing fix.
muhurta/panchangasidecar reuses local code and is cheap once workflow contract is stable.- PyJHora evidence work is mainly audit/dashboards, not user runtime critical path.
Stop Conditions
Stop and mark blocked if any of these happen:
- VedAstro official endpoint can only return
blockedin the current environment and no cache sample exists. - A proposed PyJHora consumption change would require importing AGPL code instead of consuming stored artifacts.
panchanga_api-style sidecar would require a second planner/entry system instead of extending current unified workflow.