Harden Jyotish runtime evidence gates
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
# External Engine Blocker Research 2026-07-05
|
||||
|
||||
Purpose: record what can be fixed locally vs. what remains blocked by external engines, licensing, or credentials.
|
||||
|
||||
## PyJHora / JHora
|
||||
|
||||
- PyPI package checked: `PyJHora`
|
||||
- Observed PyPI version: `4.8.7`
|
||||
- Upstream GitHub search top match: `naturalstupid/PyJHora`
|
||||
- Observed GitHub license: `AGPL-3.0`
|
||||
- Local status: `scripts/diagnose_pyjhora_adapter.py --json` reports `missing_dependency: jhora`
|
||||
- Local action now implemented: diagnostics expose install hint, ephemeris-data note, and AGPL boundary.
|
||||
|
||||
Boundary:
|
||||
|
||||
- Do not vendor PyJHora into this repo.
|
||||
- Do not make PyJHora a required runtime dependency.
|
||||
- Keep it as optional external benchmark / parity oracle.
|
||||
|
||||
Install hint for a separate benchmark environment:
|
||||
|
||||
```bash
|
||||
pip install PyJHora
|
||||
```
|
||||
|
||||
## VedAstro
|
||||
|
||||
- Public site checked: `https://vedastro.org/` returned reachable.
|
||||
- `https://api.vedastro.org/api` returned HTTP 404 for a direct root probe. This only proves host reachability; it does not prove a full-snapshot endpoint is configured.
|
||||
- Current local diagnostic: `scripts/diagnose_external_engine_adapters.py --json` reports VedAstro `available` in `official_extended` mode but with `premium_key_missing`.
|
||||
|
||||
Closure rule:
|
||||
|
||||
- Do not claim VedAstro cloud closure unless `vedastro_official.raw_response` is present in the runtime evidence packet.
|
||||
- Free tier can remain `blocked` or `partial`; API key is recommended for stable official full snapshot.
|
||||
|
||||
## Current Aggregate Status
|
||||
|
||||
- VedAstro: `available`, blocker `premium_key_missing`
|
||||
- PyJHora/JHora: `missing_dependency`, blocker `jhora`
|
||||
- jyotishganit: `available`, license `MIT`
|
||||
- Three-engine parity: `partial`, not complete.
|
||||
|
||||
## Sources Checked
|
||||
|
||||
- PyPI: `https://pypi.org/project/PyJHora/`
|
||||
- GitHub search/API result: `https://github.com/naturalstupid/PyJHora`
|
||||
- VedAstro site: `https://vedastro.org/`
|
||||
- VedAstro API host probe: `https://api.vedastro.org/api`
|
||||
@@ -0,0 +1,25 @@
|
||||
# Final Output Acceptance Error Log - 2026-07-04
|
||||
|
||||
Purpose: read this log before editing final report / evidence packet artifacts. Keep errors here so the same status drift does not repeat.
|
||||
|
||||
## Known Errors
|
||||
|
||||
| ID | Error | Seen In | Impact | Prevention |
|
||||
|---|---|---|---|---|
|
||||
| FOA-001 | status metadata drift | `jhora_master_evidence_packet_REDACTED_DATE_REDACTED_TIME.v13.json` and later packet chain | Top-level packet said final, but metadata stayed stale/draft or old version. | `tests/test_final_jhora_evidence_packet_acceptance.py` asserts top-level status, metadata status, `current_version`, `packet_version`, and `canonical_packet`. |
|
||||
| FOA-002 | canonical packet drift | latest packet advanced to v24 while metadata still pointed at v15 | Agents may cite old packet as current truth. | Latest-version acceptance resolves numeric highest packet and requires metadata + ledger to point to that file. |
|
||||
| FOA-003 | stale next-step ledger | ledger still said next useful step was Chapter 04 after chapters 04-06, PDF, and raw appendix existed | User/operator can continue wrong workstream. | Ledger acceptance rejects the old Chapter 04 next-step phrase and requires an Acceptance/error-log gate next step. |
|
||||
| FOA-004 | blank PDF artifact | prior ReportLab PDF attempt was blank/invalid and discarded | A report artifact can exist but be unusable. | Acceptance requires PDF path, HTML path, rendered QA pages, and non-trivial file sizes. |
|
||||
| FOA-005 | chained latest-packet drift | `jhora_master_evidence_packet_REDACTED_DATE_REDACTED_TIME.v25.json` appeared after v24, then v26 appeared after v25 while metadata still pointed one version behind | Fixing only one packet can become stale as later packet versions appear. | Acceptance always resolves the numeric highest packet and checks that exact packet, not a hard-coded version. |
|
||||
| FOA-006 | wrong quality-gate CLI flag | `python3 scripts/run_quality_gate.py --runtime-truth` | The gate does not run; command exits with argument error. | Use `python3 scripts/run_quality_gate.py --profile runtime-truth`. |
|
||||
| FOA-007 | long runtime-truth gate timeout | `python3 scripts/run_quality_gate.py --profile runtime-truth` exited 124 after 120s in this Codex tool session | A broad gate may not provide timely evidence inside the current command window. | Run focused acceptance first, then split runtime-truth into compile, inventory, diagnostics, and pytest target groups. |
|
||||
| FOA-008 | captured quality-gate output hid the slow step | `scripts/run_quality_gate.py` used `capture_output=True` for child commands | Long gates appeared blank until timeout, making the stuck subcommand invisible. | `run()` now streams child output directly. |
|
||||
|
||||
## Work Rule
|
||||
|
||||
Before changing `scratch/local/pdf_review_123456/` final artifacts:
|
||||
|
||||
1. Read this file.
|
||||
2. Run `python3 -m pytest -q tests/test_final_jhora_evidence_packet_acceptance.py`.
|
||||
3. For the broader runtime gate, prefer `PYTHONUNBUFFERED=1 python3 scripts/run_quality_gate.py --profile runtime-truth`; if it times out, split the gate into compile, inventory, diagnostics, and pytest target groups.
|
||||
4. If it fails, record the new error here before patching status/docs.
|
||||
@@ -0,0 +1,61 @@
|
||||
# Interpretation Source Invocation Honesty Audit Latest
|
||||
|
||||
Date: 2026-07-03
|
||||
|
||||
## Verdict
|
||||
|
||||
There are still local Jyotish information assets that have not been fully proven as invoked by the runtime interpretation chain.
|
||||
|
||||
This audit does not claim every character has been semantically read and promoted. It records the current provable boundary.
|
||||
|
||||
## Fast Evidence
|
||||
|
||||
- `references/` files: 535
|
||||
- `references/open_source_sources/` files: 299
|
||||
- `references/real_case_studies/` files: 5
|
||||
- `docs/research/` files: 543
|
||||
- non-standard / binary / notebook / config assets under `references docs/research`: 53
|
||||
|
||||
Existing inventory / grading artifacts found:
|
||||
|
||||
- `docs/research/character_level_inventory_manifest_latest.md`
|
||||
- `docs/research/character_level_external_manifest_latest.md`
|
||||
- `docs/research/character_level_source_grading_batch1_latest.md`
|
||||
- `docs/research/interpretation_source_full_classification_2026_07_02.md`
|
||||
- `docs/research/interpretation_source_priority1_batch1_promotion_audit_2026_07_02.md`
|
||||
|
||||
These prove that character-level indexing and batch1 grading exist. They do not prove full runtime invocation for every local source asset.
|
||||
|
||||
## Not Fully Closed
|
||||
|
||||
1. Open-source source trees are not all proven as interpretation sources:
|
||||
- `references/open_source_sources/jyotishganit`
|
||||
- `references/open_source_sources/jaimini-tropical`
|
||||
- `references/open_source_sources/VedicAstro` notebooks/test suites
|
||||
- `references/open_source_sources/rishi-ai-mcp`
|
||||
- `references/open_source_sources/vedic-astro-skills`
|
||||
- `references/open_source_sources/dashaflow`
|
||||
|
||||
2. Non-standard assets require separate extraction before source grading:
|
||||
- `.ipynb` notebooks
|
||||
- images
|
||||
- config/rule files
|
||||
- lockfiles / package metadata
|
||||
- generated PDFs or PDF-related assets if present in later scans
|
||||
|
||||
3. `docs/research/` remains mostly research/history/draft territory. It must stay classified and cannot automatically override runtime truth.
|
||||
|
||||
4. Existing source grading is batch-based. Batch1 exists; full priority1 and all candidate assets are not proven closed.
|
||||
|
||||
## Required Next Step
|
||||
|
||||
Build a fast, reusable coverage tool that maps every candidate source file to:
|
||||
|
||||
- extraction status
|
||||
- source grade
|
||||
- promotion status
|
||||
- runtime source-pack visibility
|
||||
- strict workflow visibility
|
||||
- exclusion reason when not promoted
|
||||
|
||||
Then run it in CI/quality gate so this question has a machine-checkable answer.
|
||||
@@ -0,0 +1,57 @@
|
||||
# Interpretation Source Runtime Consumption Audit 2026-07-03
|
||||
|
||||
## Scope
|
||||
|
||||
Follow-up to the existing inventory gate and advanced pipeline contract. This audit checks whether already-classified interpretation source layers are consumed by strict workflows without rebuilding the inventory system.
|
||||
|
||||
## Result
|
||||
|
||||
- `scripts/interpretation_source_inventory_gate.py`: pass.
|
||||
- Candidate pool: 956.
|
||||
- Unclassified candidates: 0.
|
||||
- Source pack status: used.
|
||||
- Runtime strict workflows now assert consumption of the promoted batch2 topic layers via secondary context markers.
|
||||
|
||||
## Consumed Runtime Markers
|
||||
|
||||
The career, finance, and relationship strict workflow tests now require:
|
||||
|
||||
- `dasha_timing_layer_used`
|
||||
- `varga_strength_layer_used`
|
||||
- `annual_special_layer_context`
|
||||
- `modifier_obstacle_layer_used`
|
||||
|
||||
These markers prove that the batch2 topic layer is not merely visible in the source pack; it is carried into adjudication context.
|
||||
|
||||
## Tests Updated
|
||||
|
||||
- `tests/test_mcp_strict_workflow_career.py`
|
||||
- `tests/test_mcp_strict_workflow_finance.py`
|
||||
- `tests/test_mcp_strict_workflow_relationship.py`
|
||||
|
||||
The tests no longer require `secondary_context` to equal an old fixed list. They now require the original business signals plus the promoted source-layer markers.
|
||||
|
||||
## Verification
|
||||
|
||||
Passed:
|
||||
|
||||
```bash
|
||||
python3 -m pytest -q \
|
||||
tests/test_mcp_strict_workflow_career.py \
|
||||
tests/test_mcp_strict_workflow_finance.py \
|
||||
tests/test_mcp_strict_workflow_relationship.py \
|
||||
tests/test_interpretation_source_inventory_gate.py \
|
||||
tests/test_interpretation_source_advanced_pipeline_contract.py \
|
||||
tests/test_interpretation_source_next_phase_contract.py \
|
||||
tests/test_interpretation_source_core5_strict_visibility.py
|
||||
```
|
||||
|
||||
Result: 94 passed.
|
||||
|
||||
Also passed: `git diff --check`.
|
||||
|
||||
## Boundary
|
||||
|
||||
No runtime source-pack rebuild was done. No quarantined or draft sources were promoted.
|
||||
|
||||
`python3 scripts/run_quality_gate.py --profile quick ...` exceeded the 120s command timeout in this session, so the quick gate was not used as completion evidence.
|
||||
@@ -0,0 +1,68 @@
|
||||
# Open Source Batches Runtime Reference Audit 2026-07-03
|
||||
|
||||
## Scope
|
||||
|
||||
Advance the next queued open-source reference batches without turning them into primary truth:
|
||||
|
||||
- `rishi_ai_mcp_batch1`
|
||||
- `vedic_astro_skills_batch1`
|
||||
|
||||
Also expose the remaining external gaps requested by the user:
|
||||
|
||||
- VedAstro official default closure
|
||||
- external oracle parity
|
||||
- install / usage path slimming
|
||||
|
||||
## Runtime Wiring
|
||||
|
||||
`mcp_server._existing_interpretation_source_pack()` now exposes:
|
||||
|
||||
- `rishi_ai_mcp_batch1_layer`
|
||||
- status: `available`
|
||||
- source refs: 16
|
||||
- mapped domains: career, finance, relationship, children, health, full_reading
|
||||
- runtime truth status: `not_primary_truth`
|
||||
|
||||
- `vedic_astro_skills_batch1_layer`
|
||||
- status: `available`
|
||||
- source refs: 8
|
||||
- mapped domains: core, reader_validation, career, relationship, rectification, calculator
|
||||
- runtime truth status: `not_primary_truth`
|
||||
|
||||
- `external_closure_gap_layer`
|
||||
- `vedastro_official.status = blocked`
|
||||
- `oracle_parity.status = blocked`
|
||||
- `install_usage_path.status = needs_slimming`
|
||||
|
||||
## Queue Update
|
||||
|
||||
Completed as visible reference layers:
|
||||
|
||||
- `real_case_studies_batch1`
|
||||
- `rishi_ai_mcp_batch1`
|
||||
- `vedic_astro_skills_batch1`
|
||||
|
||||
Remaining queue:
|
||||
|
||||
- `references_batch2`
|
||||
- `vedastro_official_default_closure`
|
||||
- `external_oracle_parity_batch`
|
||||
- `install_usage_path_slimming`
|
||||
|
||||
## Classification Boundary
|
||||
|
||||
Open-source sources remain classified as `open_source_reference` unless they were already governed runtime refs such as existing QA / reader / yoga resources. This prevents new open-source material from overriding local strict rules or oracle-calibrated calculations.
|
||||
|
||||
## Verification
|
||||
|
||||
Passed:
|
||||
|
||||
```bash
|
||||
python3 -m pytest -q \
|
||||
tests/test_interpretation_source_inventory_gate.py \
|
||||
tests/test_interpretation_source_next_phase_contract.py \
|
||||
tests/test_interpretation_source_advanced_pipeline_contract.py \
|
||||
tests/test_mcp_strict_workflow_career.py \
|
||||
tests/test_mcp_strict_workflow_finance.py \
|
||||
tests/test_mcp_strict_workflow_relationship.py
|
||||
```
|
||||
@@ -0,0 +1,197 @@
|
||||
# 开源项目接入优先级落地表
|
||||
|
||||
日期: 2026-07-03
|
||||
|
||||
目的: 把仓内已经存在的开源镜像、黑盒基准、官方桥接入口,整理成一张可执行落地表。只写当前仓库里有真实文件可指认的对象,不靠聊天记忆。
|
||||
|
||||
边界先钉死:
|
||||
|
||||
- 主运行链 source of truth 仍是本仓 `scripts/`、`mcp_server.py`、`references/`、`tests/`、`jyotish-app/`。
|
||||
- `.workbuddy` 不是 runtime truth。
|
||||
- `PyJHora` 只能走黑盒输出证据路径,不能把 AGPL 代码抄进 permissive 主链。
|
||||
- `open_source_reference` 可以进参考层、审计层、提示层,不自动升级成 primary truth。
|
||||
|
||||
相关现状依据:
|
||||
|
||||
- 主链地图: [docs/research/unique_main_chain_map_2026_07_01.md](/Users/wuyongnaren/Documents/印度占星/docs/research/unique_main_chain_map_2026_07_01.md)
|
||||
- 开源参考层已挂载说明: [docs/research/open_source_batches_runtime_reference_audit_2026_07_03.md](/Users/wuyongnaren/Documents/印度占星/docs/research/open_source_batches_runtime_reference_audit_2026_07_03.md)
|
||||
- 已接入 smoke test: [tests/test_open_source_integrations.py](/Users/wuyongnaren/Documents/印度占星/tests/test_open_source_integrations.py)
|
||||
|
||||
## 状态定义
|
||||
|
||||
- `已接`: 已有代码进入主仓脚本或 runtime reference pack,且有测试/文档证明。
|
||||
- `半接`: 仓里有镜像或桥接脚本,但还没压进默认主链,或只在参考层可见。
|
||||
- `未接`: 仓里有资料,但当前没有实际接线点。
|
||||
|
||||
## 优先级总表
|
||||
|
||||
| 优先级 | 开源对象(仓内真实文件) | 当前状态 | 接哪里 | 用来干什么 | 许可证风险 | 预计几小时落地 |
|
||||
|---|---|---|---|---|---|---|
|
||||
| P0 | `references/open_source_sources/panchanga_api/README.md` `references/open_source_sources/panchanga_api/MCP.md` `references/open_source_sources/panchanga_api/SKILL.md` | 半接 | `scripts/prashna.py` `scripts/remedies.py` `scripts/jyotish_api_server.py` `scripts/unified_consultation_orchestrator.py` `jyotish-app/main.js` | 把“时间问事 / Muhurta / Panchanga / Remedies”压到统一入口,复用你刚接好的 `prashna` 与 `audited_remedies` 主链 | 低。镜像内 README 指向 MIT;当前仓内有 `LICENSE` | 4-8h |
|
||||
| P0 | `scripts/vedastro_service_adapter.py` `scripts/vedastro_official_mcp_bridge.py` `scripts/diagnose_vedastro_mode.py` | 半接 | `scripts/jyotish_api_server.py` `mcp_server.py` `scripts/unified_consultation_orchestrator.py` | 让 official layer 真正默认参与,而不是只做桥接存在证明;同时把 runtime truth 里的 `official/full/partial/fallback` 说清楚 | 低。这里主要是官方 API/桥接,不是复制外部 GPL 代码 | 3-6h |
|
||||
| P0 | `references/oracle/artifacts/pyjhora_*` `references/oracle/artifacts/pending_packets/*pyjhora*.json` `scripts/generate_pyjhora_oracle_artifact_manifest.py` | 已接(黑盒证据层) | `scripts/external_oracle_sanity_closure.py` `scripts/oracle_benchmark_inventory.py` `scripts/historical_event_backtest.py` `README.md` | 保留 PyJHora 作为黑盒对照、历史事件回测、数值 sanity,不碰源码复制 | 中高。AGPL 风险不在“调用输出”,而在“复制代码/常量/实现” | 1-3h 做下一轮批量证据清点;8-16h 做更完整事件包 |
|
||||
| P1 | `references/open_source_sources/jyotishganit/README.md` `references/open_source_sources/jyotishganit/LICENSE` `references/open_source_sources/jyotishganit/jyotishganit/*` | 已接(部分) | `scripts/bhava_bala.py` `scripts/shadbala.py` `scripts/shadbala_advanced.py` `scripts/trimshamsa_d30.py` `scripts/constants/mit_imported_constants.py` `scripts/jyotish_engine.py` | 继续把 MIT 安全算法/常量吸收到本地精度层,尤其是 `Bhava Bala`、`Sputa Drishti`、部分 divisional / constants 对齐 | 低。MIT,且本仓已有显式标注“基于 jyotishganit” | 2-6h 做一轮定点补强;10-20h 做系统 sweep |
|
||||
| P1 | `references/open_source_sources/jaimini-tropical/README.md` `references/open_source_sources/jaimini-tropical/LICENSE` | 已接(部分) | `scripts/jaimini.py` `scripts/argala.py` `tests/test_open_source_integrations.py` `references/strict-workflow-router.md` | 补强 Jaimini/Arudha/Argala 这条线,让婚恋、事业、财富裁决里对 `AL/UL/Karaka/Argala` 的引用更硬 | 低。MIT | 2-5h |
|
||||
| P1 | `references/open_source_sources/dashaflow/*` | 已接(部分),但镜像证据不完整 | `scripts/jaimini.py` `scripts/synastry.py` `tests/test_open_source_integrations.py` | 继续利用现成 `Arudha Pada`、附加合婚 kutas、Jaimini 辅助能力;少写重复代码 | 中。当前镜像目录里没看到本地 `LICENSE` 文件,虽在别的 README 中被描述为 MIT,也要补 upstream commit + license 证据 | 2-4h 补许可证锚点;4-8h 做能力扩展 |
|
||||
| P1 | `references/open_source_sources/VedicAstro/README.md` `references/open_source_sources/VedicAstro/vedicastro/horary_chart.py` `references/open_source_sources/VedicAstro/test_suite/horary_functions_test.py` | 半接 | `scripts/prashna.py` `scripts/kp_system.py` `scripts/ephemeris_backend_probe.py` `tests/` 新 smoke | 作为 KP/Horary 参考源,补“时间问事”与 KP sub-lord 边界,不直接重写主引擎 | 低。MIT | 3-6h |
|
||||
| P2 | `references/open_source_sources/vedic-astro-skills/README.md` `references/open_source_sources/vedic-astro-skills/antigravity/skills/...` | 半接(参考层已可见) | `mcp_server.py::_existing_interpretation_source_pack()` `references/strict-workflow-router.md` `jyotish-app` prompt pack / guided topics | 主要拿方法学、问答流程、reader validation、rectification 提示结构;不当计算真值层 | 低。MIT | 2-4h |
|
||||
| P2 | `references/open_source_sources/rishi-ai-mcp/README.md` `references/open_source_sources/rishi-ai-mcp/rishi_ai_mcp.py` | 半接(参考层已可见) | `mcp_server.py::_existing_interpretation_source_pack()` `references/` 主题词映射 `prompt pack` | 拿主题分流、问答组织、relationship/finance/career topic taxonomy;不替代本地 strict workflow | 低。MIT | 2-4h |
|
||||
|
||||
## 一条一条展开
|
||||
|
||||
### 1. `panchanga_api` → 最该先接
|
||||
|
||||
仓内文件:
|
||||
|
||||
- [references/open_source_sources/panchanga_api/README.md](/Users/wuyongnaren/Documents/印度占星/references/open_source_sources/panchanga_api/README.md)
|
||||
- [references/open_source_sources/panchanga_api/MCP.md](/Users/wuyongnaren/Documents/印度占星/references/open_source_sources/panchanga_api/MCP.md)
|
||||
- [references/open_source_sources/panchanga_api/SKILL.md](/Users/wuyongnaren/Documents/印度占星/references/open_source_sources/panchanga_api/SKILL.md)
|
||||
|
||||
为什么优先:
|
||||
|
||||
- 你现在已经有 [scripts/prashna.py](/Users/wuyongnaren/Documents/印度占星/scripts/prashna.py)、[scripts/remedies.py](/Users/wuyongnaren/Documents/印度占星/scripts/remedies.py)、统一入口 [scripts/unified_consultation_orchestrator.py](/Users/wuyongnaren/Documents/印度占星/scripts/unified_consultation_orchestrator.py)。
|
||||
- 缺的不是“再发明一套 Prashna/Remedies”,而是把现有入口压得更完整。
|
||||
- `panchanga_api` 文档本身就覆盖 `prashna`、`muhurta`、`vrata`、`remedies`,跟你当前三入口结构天然贴合。
|
||||
|
||||
最省事接法:
|
||||
|
||||
1. `prashna` 入口复用现有 `entry_mode == "prashna"`。
|
||||
2. `remedies` 继续只吃 `strict_audit_gate` 过滤后的输入。
|
||||
3. 单独补一个 `muhurta/panchanga` 轻 sidecar,不碰主 chart engine。
|
||||
|
||||
### 2. VedAstro official bridge → 必须继续压实
|
||||
|
||||
仓内文件:
|
||||
|
||||
- [scripts/vedastro_service_adapter.py](/Users/wuyongnaren/Documents/印度占星/scripts/vedastro_service_adapter.py)
|
||||
- [scripts/vedastro_official_mcp_bridge.py](/Users/wuyongnaren/Documents/印度占星/scripts/vedastro_official_mcp_bridge.py)
|
||||
- [scripts/diagnose_vedastro_mode.py](/Users/wuyongnaren/Documents/印度占星/scripts/diagnose_vedastro_mode.py)
|
||||
|
||||
为什么优先:
|
||||
|
||||
- 这不是“有没有桥”。桥已经有。
|
||||
- 真缺口是: 默认主链什么时候自动用官方层、什么时候 cache 命中、什么时候 free-tier queue、什么时候 fallback。
|
||||
- 这条一旦压实,web / MCP / skill 才会统一口径。
|
||||
|
||||
最省事接法:
|
||||
|
||||
1. 继续只走现有 adapter / official bridge。
|
||||
2. 不新增第二套 VedAstro planner。
|
||||
3. 把 `runtime_truth` 直接下沉到前端结果页、MCP strict 输出、full-reading。
|
||||
|
||||
### 3. PyJHora → 只许黑盒,不许抄
|
||||
|
||||
仓内文件:
|
||||
|
||||
- [references/oracle/artifacts/pyjhora_oracle_artifact_manifest.json](/Users/wuyongnaren/Documents/印度占星/references/oracle/artifacts/pyjhora_oracle_artifact_manifest.json)
|
||||
- [scripts/generate_pyjhora_oracle_artifact_manifest.py](/Users/wuyongnaren/Documents/印度占星/scripts/generate_pyjhora_oracle_artifact_manifest.py)
|
||||
- 多个 `references/oracle/artifacts/pyjhora_*.txt`
|
||||
|
||||
当前定位:
|
||||
|
||||
- 它已经在 repo 里,但不是“可接入 runtime 的代码镜像”。
|
||||
- 它是“黑盒 external evidence 层”。
|
||||
|
||||
最省事接法:
|
||||
|
||||
1. 继续扩证据包,不扩源码依赖。
|
||||
2. 让 `historical_event_backtest`、`oracle parity`、`benchmark dashboard` 直接吃 artifact。
|
||||
3. 不把任何 PyJHora 常量表、实现细节搬进 `scripts/`。
|
||||
|
||||
### 4. `jyotishganit` → 已有真吸收,继续吃 MIT 安全部分
|
||||
|
||||
仓内文件:
|
||||
|
||||
- [references/open_source_sources/jyotishganit/README.md](/Users/wuyongnaren/Documents/印度占星/references/open_source_sources/jyotishganit/README.md)
|
||||
- [references/open_source_sources/jyotishganit/LICENSE](/Users/wuyongnaren/Documents/印度占星/references/open_source_sources/jyotishganit/LICENSE)
|
||||
- 已接痕迹:
|
||||
- [scripts/bhava_bala.py](/Users/wuyongnaren/Documents/印度占星/scripts/bhava_bala.py)
|
||||
- [scripts/shadbala.py](/Users/wuyongnaren/Documents/印度占星/scripts/shadbala.py)
|
||||
- [scripts/shadbala_advanced.py](/Users/wuyongnaren/Documents/印度占星/scripts/shadbala_advanced.py)
|
||||
- [scripts/trimshamsa_d30.py](/Users/wuyongnaren/Documents/印度占星/scripts/trimshamsa_d30.py)
|
||||
- [scripts/constants/mit_imported_constants.py](/Users/wuyongnaren/Documents/印度占星/scripts/constants/mit_imported_constants.py)
|
||||
|
||||
为什么适合继续接:
|
||||
|
||||
- 这条已经不是“设想”。
|
||||
- 本仓已经明确写了“基于 jyotishganit (MIT License) 算法适配”。
|
||||
- 所以这里最值钱的是继续定点补 math,不是重新造壳。
|
||||
|
||||
### 5. `jaimini-tropical` + `dashaflow` → 已经接进脚本层,值得继续榨干
|
||||
|
||||
仓内文件:
|
||||
|
||||
- [references/open_source_sources/jaimini-tropical/README.md](/Users/wuyongnaren/Documents/印度占星/references/open_source_sources/jaimini-tropical/README.md)
|
||||
- [references/open_source_sources/jaimini-tropical/LICENSE](/Users/wuyongnaren/Documents/印度占星/references/open_source_sources/jaimini-tropical/LICENSE)
|
||||
- [references/open_source_sources/dashaflow/](/Users/wuyongnaren/Documents/印度占星/references/open_source_sources/dashaflow)
|
||||
- 已接证明: [tests/test_open_source_integrations.py](/Users/wuyongnaren/Documents/印度占星/tests/test_open_source_integrations.py)
|
||||
- 当前脚本:
|
||||
- [scripts/jaimini.py](/Users/wuyongnaren/Documents/印度占星/scripts/jaimini.py)
|
||||
- [scripts/argala.py](/Users/wuyongnaren/Documents/印度占星/scripts/argala.py)
|
||||
- [scripts/synastry.py](/Users/wuyongnaren/Documents/印度占星/scripts/synastry.py)
|
||||
|
||||
为什么不是 P0:
|
||||
|
||||
- 这条已经有接入 smoke test。
|
||||
- 现在更大的缺口不在“有没有 A1/A10/UL/Argala”,而在“这些结果有没有被 strict workflow 主裁决强制消费”。
|
||||
|
||||
特殊风险:
|
||||
|
||||
- `jaimini-tropical` 本地有 MIT `LICENSE`。
|
||||
- `dashaflow` 当前镜像目录未见本地 `LICENSE`。虽然现有文档多处把它当 MIT 参考,但落下一步代码前,应先补一条 canonical license 锚点。
|
||||
|
||||
### 6. `VedicAstro` → 适合做 Horary/KP 辅助,不适合夺主链
|
||||
|
||||
仓内文件:
|
||||
|
||||
- [references/open_source_sources/VedicAstro/README.md](/Users/wuyongnaren/Documents/印度占星/references/open_source_sources/VedicAstro/README.md)
|
||||
- [references/open_source_sources/VedicAstro/vedicastro/horary_chart.py](/Users/wuyongnaren/Documents/印度占星/references/open_source_sources/VedicAstro/vedicastro/horary_chart.py)
|
||||
- [references/open_source_sources/VedicAstro/test_suite/horary_functions_test.py](/Users/wuyongnaren/Documents/印度占星/references/open_source_sources/VedicAstro/test_suite/horary_functions_test.py)
|
||||
|
||||
为什么排 P1:
|
||||
|
||||
- 你仓里已有 [scripts/prashna.py](/Users/wuyongnaren/Documents/印度占星/scripts/prashna.py) 和 [scripts/kp_system.py](/Users/wuyongnaren/Documents/印度占星/scripts/kp_system.py)。
|
||||
- 所以更值钱的是拿它校一遍 Horary/KP 边界,不是整包搬迁。
|
||||
|
||||
### 7. `vedic-astro-skills` / `rishi-ai-mcp` → 继续留在参考层,别冒充真值层
|
||||
|
||||
仓内文件:
|
||||
|
||||
- [references/open_source_sources/vedic-astro-skills/README.md](/Users/wuyongnaren/Documents/印度占星/references/open_source_sources/vedic-astro-skills/README.md)
|
||||
- [references/open_source_sources/rishi-ai-mcp/README.md](/Users/wuyongnaren/Documents/印度占星/references/open_source_sources/rishi-ai-mcp/README.md)
|
||||
|
||||
当前已接现状:
|
||||
|
||||
- 参考层已挂进 [mcp_server.py](/Users/wuyongnaren/Documents/印度占星/mcp_server.py) 的 `interpretation_source_pack`
|
||||
- 研究文档已明确它们是 `not_primary_truth`
|
||||
|
||||
为什么不该抢前排:
|
||||
|
||||
- 它们更像“问答结构 / topic taxonomy / prompt discipline / reader validation”的参考材料。
|
||||
- 不适合替代本地 math、official evidence、strict audit gate。
|
||||
|
||||
## 最省算力的执行顺序
|
||||
|
||||
1. `panchanga_api` → 接 `prashna/remedies/muhurta` 统一入口
|
||||
2. VedAstro official bridge → 压实默认主链 official 优先
|
||||
3. `jyotishganit` → 做定点 math 补强
|
||||
4. `jaimini-tropical` / `dashaflow` → 让已有结果被 strict workflow 真消费
|
||||
5. `VedicAstro` → 做 Horary/KP smoke + 边界校验
|
||||
6. `vedic-astro-skills` / `rishi-ai-mcp` → 只升格高价值 reader/rectification 规则
|
||||
7. PyJHora → 继续只做黑盒证据扩容
|
||||
|
||||
## 我给你的直白建议
|
||||
|
||||
如果只选 3 项,最值钱的是:
|
||||
|
||||
1. `panchanga_api`
|
||||
2. VedAstro official bridge default closure
|
||||
3. `jyotishganit` 定点精度补强
|
||||
|
||||
原因很简单:
|
||||
|
||||
- 第 1 项补“入口能力”
|
||||
- 第 2 项补“官方优先”
|
||||
- 第 3 项补“本地精度”
|
||||
|
||||
这 3 项一起做,才是真正对用户可用性和严谨度都有立刻收益。
|
||||
@@ -0,0 +1,67 @@
|
||||
# Pre-Work Error Ledger
|
||||
|
||||
Purpose: read this file before substantial project work. It exists to stop repeat mistakes caused by multiple Codex windows, WorkBuddy mirrors, local drafts, backup folders, and partial cloud-git visibility.
|
||||
|
||||
## Mandatory Pre-Work Check
|
||||
|
||||
Run or consciously verify:
|
||||
|
||||
```bash
|
||||
sed -n '1,220p' AGENTS.md
|
||||
sed -n '1,260p' docs/research/pre_work_error_ledger.md
|
||||
git status --short --branch
|
||||
git remote -v
|
||||
python3 scripts/pre_work_check.py --remote-timeout 8 --command-timeout 45
|
||||
```
|
||||
The one-command gate must cover:
|
||||
- `tests/test_runtime_import_boundaries.py`
|
||||
- `tests/test_project_fragment_governance.py`
|
||||
- `tests/test_preflight_fragment_scan.py`
|
||||
- `tests/test_remote_repo_visibility_check.py`
|
||||
- `tests/test_pre_work_check.py`
|
||||
|
||||
For large architecture or release work, also read:
|
||||
|
||||
- `docs/research/whole_machine_fragment_sweep_round25_2026_06_25.md`
|
||||
- `docs/research/whole_machine_fragment_sweep_2026_07_05.md`
|
||||
- `docs/research/unique_main_chain_map_2026_07_01.md`
|
||||
- `docs/research/local_drafts_2026_06_disposition.md`
|
||||
|
||||
## Error Ledger
|
||||
|
||||
| ID | Error / Risk | Current Status | Required Guard |
|
||||
|---|---|---|---|
|
||||
| ERR-001 | Runtime code pulled modules from `.workbuddy` distribution mirror. | resolved | Keep `tests/test_runtime_import_boundaries.py`; `.workbuddy` is reference only. |
|
||||
| ERR-002 | `mcp_server.py` documentation implied `.workbuddy` was a runtime path. | resolved | MCP top docs must point to main repo runtime; mirror wording must say distribution/reference only. |
|
||||
| ERR-003 | `local_drafts` mixed high-value research with disposable drafts. | mitigated | Use `docs/research/local_drafts_2026_06_disposition.md`; do not delete or promote drafts ad hoc. |
|
||||
| ERR-004 | Multiple local folders contain Jyotish fragments, older adapters, and WorkBuddy mirrors. | active | Read latest fragment sweep before changing adapters, oracle paths, or skill runtime boundaries. |
|
||||
| ERR-005 | Terminal git access to GitHub can fail even when the browser can open the repo. | active | Use `python3 scripts/remote_repo_visibility_check.py`; do not claim cloud sync unless status is `verified`. |
|
||||
| ERR-006 | Whole-machine `find` can time out when run too broadly. | active | Use split scans by directory and bounded `-maxdepth`; record timeouts as findings. |
|
||||
| ERR-007 | `.workbuddy/skills/jyotish-vedic-astrology` is a dirty historical mirror. | active | Never copy it over main repo. Use only for read-only comparison. |
|
||||
| ERR-008 | Current main workspace may be dirty with user/Codex changes. | active | Never reset or checkout. Read touched files before editing. |
|
||||
| ERR-009 | Astrology interpretation can drift into story-fitting from conversation history. | active | For blind technical reports, use only declared evidence packets/PDF and mark MEVG/real-case gaps. |
|
||||
| ERR-010 | VedAstro official/cloud evidence can be partial or dasha-conflicting. | active | Mark official closure partial unless exact endpoint/settings and raw output are verified. |
|
||||
| ERR-011 | Bare `pytest` command may be missing from PATH even when pytest module exists. | active | Use `python3 -m pytest ...` in acceptance commands. |
|
||||
| ERR-012 | Governance tests can fail if wording is narrower than the actual guardrail. | observed 2026-07-05 | Keep tests tied to explicit user-facing terms such as `开工前` and the ledger path. |
|
||||
| ERR-013 | GitHub API can fail from terminal Python even when browser/Web can open GitHub. | active | Treat `remote_repo_visibility_check.py` status `blocked` as authoritative for terminal parity; browser visibility alone is not sync proof. |
|
||||
| ERR-014 | Pre-work checks can be skipped when split across several manual commands. | mitigated | Use `python3 scripts/pre_work_check.py` as the one-command pre-work gate. |
|
||||
| ERR-015 | One-command pre-work can exceed desktop outer timeout if child command timeout is too wide or scan runs twice. | observed 2026-07-05 | Keep pytest child timeout bounded at 45s; let `pre_work_check.py` cache `preflight_fragment_scan.py` output for `tests/test_preflight_fragment_scan.py`. |
|
||||
| ERR-016 | Full `tests/test_api_server_security.py` can exceed the desktop outer timeout. | observed 2026-07-05 | Use focused API test slices during development; reserve full API file run for longer verification windows. |
|
||||
| ERR-017 | Pre-work gate could pass without checking the older Round 25 fragment sweep or aggregate external-engine adapter diagnostics. | mitigated 2026-07-05 | `scripts/pre_work_check.py` must require both whole-machine sweep docs and run `scripts/diagnose_external_engine_adapters.py --json` before substantial work. |
|
||||
| ERR-018 | External engine blockers can be described verbally but not carried into diagnostics. | mitigated 2026-07-05 | `diagnose_external_engine_adapters.py` must expose VedAstro closure plan and PyJHora/JHora install/license/ephemeris boundary; keep `docs/research/external_engine_blocker_research_2026_07_05.md` current. |
|
||||
|
||||
## Fragment Sweep Command Set
|
||||
|
||||
Use split scans, not one unbounded full-home command:
|
||||
|
||||
```bash
|
||||
for d in /Users/wuyongnaren/Documents /Users/wuyongnaren/WorkBuddy /Users/wuyongnaren/.workbuddy /Users/wuyongnaren/Downloads /Users/wuyongnaren/Desktop /Users/wuyongnaren/.codex/attachments; do
|
||||
[ -d "$d" ] && find "$d" -maxdepth 6 -type d -name .git 2>/dev/null | sed 's#/.git$##'
|
||||
done | rg -i '印度|jyotish|vedic|astro|yinduzhanxing|workbuddy|星轨|codex|talk' | sort
|
||||
```
|
||||
|
||||
```bash
|
||||
for d in /Users/wuyongnaren/Documents /Users/wuyongnaren/WorkBuddy /Users/wuyongnaren/.workbuddy /Users/wuyongnaren/Downloads /Users/wuyongnaren/Desktop /Users/wuyongnaren/.codex/attachments; do
|
||||
[ -d "$d" ] && find "$d" -maxdepth 7 -type f \( -iname '*jyotish*' -o -iname '*vedic*' -o -iname '*jhora*' -o -iname '*shadbala*' -o -iname '*ashtakoot*' -o -iname '*印度占星*' -o -iname '*yinduzhanxing*' \) 2>/dev/null
|
||||
done
|
||||
```
|
||||
@@ -0,0 +1,35 @@
|
||||
# Real Case Batch1 Runtime Retrieval Audit 2026-07-03
|
||||
|
||||
## Scope
|
||||
|
||||
Promote already-classified `real_case_studies_batch1` from queue-only visibility into a callable local retrieval layer without treating it as primary truth.
|
||||
|
||||
## Runtime Wiring
|
||||
|
||||
`mcp_server._existing_interpretation_source_pack()` now exposes:
|
||||
|
||||
- `real_case_calibration_layer.status = queued`
|
||||
- `real_case_calibration_layer.index_status = available`
|
||||
- `real_case_calibration_layer.batch_id = real_case_studies_batch1`
|
||||
- domain buckets: `career`, `finance`, `relationship`, `health`, `rectification`, `timing`
|
||||
- source refs from `references/real_case_studies` and `docs/benchmark`
|
||||
|
||||
`real_case_calibration.status` remains `blocked` because matching-case attachment and external MEVG calibration are still required before confidence can be lifted.
|
||||
|
||||
## Cleanup Boundary
|
||||
|
||||
Duplicate / obsolete / quarantine files were not physically deleted in this patch. They remain hard-excluded from runtime truth by the inventory gate and source-pack tests. This avoids deleting local research history while preventing contamination of the interpretation chain.
|
||||
|
||||
## Verification
|
||||
|
||||
Passed:
|
||||
|
||||
```bash
|
||||
python3 -m pytest -q \
|
||||
tests/test_interpretation_source_inventory_gate.py \
|
||||
tests/test_interpretation_source_advanced_pipeline_contract.py \
|
||||
tests/test_interpretation_source_next_phase_contract.py \
|
||||
tests/test_mcp_strict_workflow_career.py \
|
||||
tests/test_mcp_strict_workflow_finance.py \
|
||||
tests/test_mcp_strict_workflow_relationship.py
|
||||
```
|
||||
@@ -0,0 +1,79 @@
|
||||
# Whole-Machine Jyotish Fragment Sweep 2026-07-05
|
||||
|
||||
## Scope
|
||||
|
||||
Read-only sweep for project source, local mirrors, Codex work folders, WorkBuddy copies, downloads, desktop artifacts, and configured cloud git remote. No files were deleted or moved.
|
||||
|
||||
## Git State
|
||||
|
||||
Current workspace:
|
||||
|
||||
- Path: `/Users/wuyongnaren/Documents/印度占星`
|
||||
- Branch: `codex/release-hygiene-ci`
|
||||
- Upstream: `origin/codex/release-hygiene-ci`
|
||||
- Remote fetch: `git@github.com:732642856/yinduzhanxing.git`
|
||||
- Remote push: `https://github.com/732642856/yinduzhanxing.git`
|
||||
- Worktree: dirty; do not reset or overwrite user changes.
|
||||
|
||||
Remote checks:
|
||||
|
||||
- `git ls-remote --heads --tags origin` failed with `ssh: connect to host github.com port 22: Operation timed out`.
|
||||
- `git ls-remote --heads --tags https://github.com/732642856/yinduzhanxing.git` failed with `LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443`.
|
||||
- `python3 scripts/remote_repo_visibility_check.py` now records this state structurally and sets `must_not_claim_synced: true` unless terminal refs are verified.
|
||||
- `python3 scripts/remote_repo_visibility_check.py --timeout 8` returned `status: blocked`; SSH timed out, HTTPS git returned `SSL_ERROR_SYSCALL`, and GitHub API returned `UNEXPECTED_EOF_WHILE_READING`.
|
||||
- `python3 scripts/pre_work_check.py --remote-timeout 8 --command-timeout 45` later returned `status: pass` with `must_not_claim_synced: false`; network was observed to fluctuate, so this proves terminal visibility for that run, not that local dirty work was pushed.
|
||||
- Browser/Web access to `https://github.com/732642856/yinduzhanxing` succeeded.
|
||||
- Browser/Web branch page shows repository is public, default `main` updated Jun 13, 2026, and active `codex/release-hygiene-ci` updated Jul 2, 2026.
|
||||
- Browser/Web commit page for `main` shows latest visible commit `4ff6248 Complete v6.9.14 precision modules` on Jun 13, 2026.
|
||||
|
||||
Conclusion: cloud repo exists and is browser-readable, but terminal ref parity is `blocked` for this sweep.
|
||||
|
||||
## Local Git Repositories Found
|
||||
|
||||
Relevant candidates from bounded split scan:
|
||||
|
||||
- `/Users/wuyongnaren/Documents/印度占星` — current main workspace; only implementation target.
|
||||
- `/Users/wuyongnaren/.workbuddy/skills/jyotish-vedic-astrology` — dirty historical/distribution mirror; read-only reference.
|
||||
- `/Users/wuyongnaren/.workbuddy/skills` — WorkBuddy skills container.
|
||||
- `/Users/wuyongnaren/Documents/星轨talk` — adjacent talk engine repo with Jyotish adapters.
|
||||
- `/Users/wuyongnaren/Documents/Codex/2026-06-20/732642856-talk-https-github-com-732642856/work/talk-active` — older Codex talk worktree.
|
||||
- `/Users/wuyongnaren/Documents/Codex/2026-06-20/732642856-talk-https-github-com-732642856/work/talk` — older Codex talk worktree.
|
||||
- `/Users/wuyongnaren/Documents/Codex/2026-06-18/new-chat-4/work/starcanvas` — adjacent astrology/canvas project.
|
||||
- `/Users/wuyongnaren/Documents/Codex/2026-06-18/new-chat-4/work/starcanvas-active` — adjacent astrology/canvas project.
|
||||
- `/Users/wuyongnaren/Documents/星轨画布` — adjacent astrology/canvas project.
|
||||
- `/Users/wuyongnaren/WorkBuddy` and dated WorkBuddy folders — historical/reference material.
|
||||
|
||||
## High-Value Fragment Files
|
||||
|
||||
Keep these in mind before adapter/oracle/skill work:
|
||||
|
||||
- `/Users/wuyongnaren/Documents/星轨talk/engines-repo/jyotish/jyotish-adapter.js`
|
||||
- `/Users/wuyongnaren/Documents/星轨talk/engines-repo/jyotish/vedic-calc-runner.py`
|
||||
- `/Users/wuyongnaren/Documents/星轨talk/engines-repo/jyotish/jyotishganit-adapter.js`
|
||||
- `/Users/wuyongnaren/Documents/星轨talk/engines-repo/jyotish/jyotishganit-runner.py`
|
||||
- `/Users/wuyongnaren/Documents/星轨talk/engines-repo/local-jyotish-reference-audit.js`
|
||||
- `/Users/wuyongnaren/Documents/星轨talk/reports/local-jyotish-reference-audit.md`
|
||||
- `/Users/wuyongnaren/Documents/ObsidianVault/03_研究_术数占星/印度占星 Jyotish.md`
|
||||
- `/Users/wuyongnaren/Documents/ObsidianVault/03_研究_术数占星/印度占星研究结论 v3.md`
|
||||
- `/Users/wuyongnaren/Documents/ObsidianVault/03_研究_术数占星/一楠 · 印度占星完整解盘报告 v2.md`
|
||||
- `/Users/wuyongnaren/Documents/Codex/2026-06-20/732642856-yinduzhanxing-https-github-com-732642856/outputs/yinduzhanxing_local_audit_2026-06-20.md`
|
||||
|
||||
## Boundaries
|
||||
|
||||
- Main repo remains the runtime source of truth.
|
||||
- `.workbuddy` is historical/distribution reference only.
|
||||
- Obsidian, Downloads, Desktop, and personal reports may contain private material; do not commit raw contents.
|
||||
- Adjacent repos may inform adapter design but are not runtime dependencies.
|
||||
- Cloud-git parity remains blocked until terminal `git ls-remote` or equivalent succeeds.
|
||||
|
||||
## Acceptance Commands
|
||||
|
||||
```bash
|
||||
python3 scripts/pre_work_check.py --remote-timeout 8 --command-timeout 45
|
||||
python3 -m pytest -q tests/test_runtime_import_boundaries.py tests/test_project_fragment_governance.py tests/test_preflight_fragment_scan.py tests/test_remote_repo_visibility_check.py tests/test_pre_work_check.py
|
||||
```
|
||||
|
||||
```bash
|
||||
git status --short --branch
|
||||
git remote -v
|
||||
```
|
||||
@@ -0,0 +1,42 @@
|
||||
# Local Codex Plugin Wrapper Implementation 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:** Add a minimal local Codex plugin wrapper around the existing Jyotish repo so Codex can install it as a plugin using the repo's current skills and MCP server.
|
||||
**Architecture:** Keep the repo as source of truth. Add only a `.codex-plugin/plugin.json` manifest that points at existing `skills/` and the existing root `mcp_server.py`. Lock it with one static test and document local install/test steps.
|
||||
**Tech Stack:** JSON manifest, existing Python MCP server, pytest static checks, Codex local plugin install flow.
|
||||
## Global Constraints
|
||||
- Reuse existing `SKILL.md`, `skills/`, and `mcp_server.py`; no duplicate runtime chain.
|
||||
- Keep plugin scope local-only; no marketplace publishing work.
|
||||
- Smallest diff wins: one manifest, one test, one short install doc update.
|
||||
|
||||
### Task 1: Add plugin manifest coverage
|
||||
**Files:**
|
||||
- Modify: `tests/test_runtime_import_boundaries.py` or create focused plugin manifest test if cleaner
|
||||
- Test: `tests/test_codex_plugin_wrapper.py`
|
||||
**Interfaces:**
|
||||
- Consumes: `.codex-plugin/plugin.json`
|
||||
- Produces: static validation that plugin manifest exists and points at current repo assets
|
||||
- [ ] **Step 1: Write failing static test**
|
||||
- [ ] **Step 2: Run test to confirm failure**
|
||||
- [ ] **Step 3: Add minimal manifest or adjust expectations**
|
||||
- [ ] **Step 4: Re-run targeted test**
|
||||
|
||||
### Task 2: Add minimal local plugin manifest
|
||||
**Files:**
|
||||
- Create: `.codex-plugin/plugin.json`
|
||||
**Interfaces:**
|
||||
- Consumes: existing `skills/`, root `mcp_server.py`
|
||||
- Produces: installable local plugin metadata
|
||||
- [ ] **Step 1: Use plugin spec sample to choose minimal accepted fields**
|
||||
- [ ] **Step 2: Point `skills` at existing `./skills/`**
|
||||
- [ ] **Step 3: Inline `mcpServers` config for `mcp_server.py`**
|
||||
- [ ] **Step 4: Validate manifest with plugin validator**
|
||||
|
||||
### Task 3: Document local install/test flow
|
||||
**Files:**
|
||||
- Modify: `README.md`
|
||||
**Interfaces:**
|
||||
- Consumes: local plugin install command shape
|
||||
- Produces: copy-paste local install, reinstall, and test commands
|
||||
- [ ] **Step 1: Add minimal plugin install section**
|
||||
- [ ] **Step 2: Include reinstall/new-thread note**
|
||||
- [ ] **Step 3: Run targeted doc/static checks**
|
||||
@@ -0,0 +1,273 @@
|
||||
# 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_api` sidecar integration, VedAstro official-default closure, and PyJHora black-box evidence consumption.
|
||||
**Architecture:** Reuse the existing unified planner, API server, MCP strict workflow, local `muhurta/prashna/remedies` modules, 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, existing `scripts/` modules, existing `jyotish-app` frontend, 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.
|
||||
- `PyJHora` remains black-box evidence only; do not import/copy AGPL code.
|
||||
- `panchanga_api` ideas may shape sidecar outputs, but local computation stays in `scripts/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(...)`.
|
||||
- [ ] **Step 2: Run targeted test to verify failure**
|
||||
- Run: `python3 -m pytest tests/test_muhurta.py -q`
|
||||
- [ ] **Step 3: Write failing planner/API tests**
|
||||
- `tests/test_unified_consultation_orchestrator.py`: planner adds `run_muhurta_panchanga` for timing/remedy/prashna routes.
|
||||
- `tests/test_api_server_security.py`: workflow response includes `muhurta_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.
|
||||
- [ ] **Step 7: Update planner in `scripts/unified_consultation_orchestrator.py`**
|
||||
- Add `run_muhurta_panchanga` only when route needs timing/remedy support.
|
||||
- [ ] **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.html` only 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`.
|
||||
- [ ] **Step 2: Run targeted tests to verify failure**
|
||||
- [ ] **Step 3: Thread `muhurta_panchanga` through `mcp_server.py` strict 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.js` to 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_truth`
|
||||
- `official_execution_layers`
|
||||
- `source_priority`
|
||||
- `free_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.
|
||||
- [ ] **Step 5: Pass same block into `jyotish-app/ai-chat.js` follow-up payload**
|
||||
- [ ] **Step 6: Surface same summary in `mcp_server.py` strict 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.py` minimally**
|
||||
- Add any missing fields needed by inventory/closure consumers.
|
||||
- [ ] **Step 4: Update `oracle_benchmark_inventory.py` to consume manifest, not ad hoc file scanning**
|
||||
- [ ] **Step 5: Update `external_oracle_sanity_closure.py` to 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
|
||||
|
||||
- [ ] **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 -q`
|
||||
- [ ] `python3 -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 -q`
|
||||
- [ ] `python3 -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
|
||||
|
||||
1. Task 3
|
||||
2. Task 4
|
||||
3. Task 1
|
||||
4. Task 2
|
||||
5. Task 5
|
||||
6. Task 6
|
||||
7. Task 7
|
||||
|
||||
Reason:
|
||||
|
||||
- VedAstro default truth is the highest-value user-facing fix.
|
||||
- `muhurta/panchanga` sidecar 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 `blocked` in 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.
|
||||
@@ -0,0 +1,84 @@
|
||||
# Prashna Remedies Unified Entry Implementation 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:** Reuse existing `prashna` and `remedies` modules inside the unified consultation workflow so web/API/skill can expose three parallel entry modes: direct chart, rectification, and time-question (Prashna).
|
||||
**Architecture:** Keep the current `execute_consultation_workflow()` and `UnifiedConsultationOrchestrator` as the single runtime planner. Add one new `entry_mode` (`prashna`) and one gate-fed remedies path that consumes `strict_audit_gate`/guided-topic conclusion packets instead of raw free-form frontend fields. Frontend only switches entry payload shape and display mode; backend remains the source of truth.
|
||||
**Tech Stack:** Python stdlib, existing repo modules (`prashna.py`, `remedies.py`, `unified_consultation_orchestrator.py`, `jyotish_api_server.py`), existing web app JS/HTML, pytest.
|
||||
|
||||
## Global Constraints
|
||||
- Reuse existing modules; no new subsystem.
|
||||
- Keep source priority: VedAstro official snapshot first, local supplemental second, fallback last.
|
||||
- Remedies must not accept arbitrary raw advice inputs from frontend once unified path exists.
|
||||
- Frontend must expose exactly three peer entry modes: `direct_chart`, `rectification`, `prashna`.
|
||||
- Keep diffs small and local to existing orchestrator/API/frontend files.
|
||||
|
||||
### Task 1: Add `prashna` to unified runtime planner
|
||||
**Files:**
|
||||
- Modify: `scripts/unified_consultation_orchestrator.py`
|
||||
- Test: `tests/test_unified_consultation_orchestrator.py`
|
||||
**Interfaces:**
|
||||
- Consumes: `entry_mode: str`, `question: str | None`, existing route/theme normalization.
|
||||
- Produces: runtime planner contract supporting `entry_mode == "prashna"` and route/theme selection for Prashna.
|
||||
- [ ] **Step 1: Write failing tests**
|
||||
- [ ] **Step 2: Run planner tests to verify failure**
|
||||
- [ ] **Step 3: Implement minimal planner support for `prashna`**
|
||||
- [ ] **Step 4: Re-run planner tests**
|
||||
|
||||
### Task 2: Route consultation workflow through Prashna entry mode
|
||||
**Files:**
|
||||
- Modify: `scripts/jyotish_api_server.py`
|
||||
- Test: `tests/test_api_server_security.py`
|
||||
**Interfaces:**
|
||||
- Consumes: `POST /api/consultation_workflow` payload w/ `entry_mode = "prashna"`, `question`, `question_text`, optional `horary_number`, existing birth/location/time fields.
|
||||
- Produces: consultation workflow result containing `entry_mode`, `runtime_planner`, `prashna` result block, and shared provenance fields.
|
||||
- [ ] **Step 1: Write failing API workflow tests for `prashna` entry**
|
||||
- [ ] **Step 2: Run targeted tests to verify failure**
|
||||
- [ ] **Step 3: Implement minimal `prashna` entry path by reusing `_compute_prashna()`**
|
||||
- [ ] **Step 4: Re-run targeted tests**
|
||||
|
||||
### Task 3: Make unified remedies consume strict gate output only
|
||||
**Files:**
|
||||
- Modify: `scripts/jyotish_api_server.py`
|
||||
- Test: `tests/test_api_server_security.py`
|
||||
**Interfaces:**
|
||||
- Consumes: guided-topic / strict workflow conclusion packet containing `strict_audit_gate`, `topic`, `supporting_planets`, `active_dasha_lord`, and strength inputs already computed in workflow.
|
||||
- Produces: remedies response derived from audited conclusion context, not arbitrary frontend-entered `shadbala`/`doshas` blobs in unified mode.
|
||||
- [ ] **Step 1: Write failing test showing unified remedies path rejects missing gate context**
|
||||
- [ ] **Step 2: Run targeted test to verify failure**
|
||||
- [ ] **Step 3: Implement minimal audited remedies adapter around existing `recommend_remedies()`**
|
||||
- [ ] **Step 4: Re-run targeted tests**
|
||||
|
||||
### Task 4: Expose three entry modes in frontend
|
||||
**Files:**
|
||||
- Modify: `jyotish-app/index.html`
|
||||
- Modify: `jyotish-app/main.js`
|
||||
- Modify: `jyotish-app/api-bridge.js`
|
||||
- Test: `tests/test_frontend_productization.py`
|
||||
**Interfaces:**
|
||||
- Consumes: user choice among `direct_chart`, `rectification`, `prashna`.
|
||||
- Produces: frontend payloads to `/api/consultation_workflow`, plus Prashna-specific question fields when `prashna` selected.
|
||||
- [ ] **Step 1: Write failing frontend contract test for 3 entry modes**
|
||||
- [ ] **Step 2: Run targeted frontend test to verify failure**
|
||||
- [ ] **Step 3: Implement minimal UI/payload switch reuse of existing sections**
|
||||
- [ ] **Step 4: Re-run targeted frontend tests**
|
||||
|
||||
### Task 5: Wire remedies display to unified audited output
|
||||
**Files:**
|
||||
- Modify: `jyotish-app/main.js`
|
||||
- Test: `tests/test_frontend_productization.py`
|
||||
**Interfaces:**
|
||||
- Consumes: unified workflow response including audited remedies packet.
|
||||
- Produces: remedies section rendered from audited packet, not standalone free-form request flow.
|
||||
- [ ] **Step 1: Write failing render test**
|
||||
- [ ] **Step 2: Run targeted test to verify failure**
|
||||
- [ ] **Step 3: Implement minimal audited remedies rendering**
|
||||
- [ ] **Step 4: Re-run targeted tests**
|
||||
|
||||
### Task 6: End-to-end verification
|
||||
**Files:**
|
||||
- Modify if needed: `tests/test_api_server_security.py`, `tests/test_frontend_productization.py`
|
||||
**Interfaces:**
|
||||
- Produces: passing targeted regression coverage for planner, API workflow, remedies gate, and frontend entry modes.
|
||||
- [ ] **Step 1: Run targeted backend tests**
|
||||
- [ ] **Step 2: Run targeted frontend tests**
|
||||
- [ ] **Step 3: Run one live local consultation/prashna smoke probe**
|
||||
- [ ] **Step 4: Record any remaining boundary explicitly**
|
||||
@@ -0,0 +1,105 @@
|
||||
# VedAstro Runtime Truth Contract Implementation 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:** Expose machine-checkable runtime truth for VedAstro official execution and interpretation-source invocation so users and APIs can see what actually ran.
|
||||
**Architecture:** Extend the existing unified consultation/high-rigor contract instead of building a new pipeline. Reuse `vedastro_service_adapter`, `vedastro_priority`, existing interpretation source inventory/strict workflow markers, and API response contracts.
|
||||
**Tech Stack:** Python 3.11, existing `scripts/` API server/orchestrator modules, pytest.
|
||||
## Global Constraints
|
||||
- Reuse existing repo modules; no new parallel runtime chain.
|
||||
- Keep VedAstro official as preferred evidence, but do not overclaim full-catalog execution.
|
||||
- Add tests first for new response contract fields.
|
||||
- Preserve current honesty boundaries and blocked states.
|
||||
|
||||
### Task 1: Add failing API contract tests for runtime truth fields
|
||||
**Files:**
|
||||
- Modify: `tests/test_vedastro_external_technique_evidence.py`
|
||||
- Modify: `tests/test_api_server_security.py`
|
||||
**Interfaces:**
|
||||
- Consumes: `JyotishAPIHandler._high_rigor_vedastro_official_summary`, `execute_consultation_workflow`
|
||||
- Produces: expected fields `runtime_truth`, `official_execution_layers`, `interpretation_source_runtime_coverage`
|
||||
- [ ] Step 1: Write failing tests for consultation/high-rigor responses.
|
||||
- [ ] Step 2: Run targeted pytest to confirm failure.
|
||||
- [ ] Step 3: Keep assertions narrow: presence, semantics, blocked/partial handling.
|
||||
- [ ] Step 4: Re-run targeted pytest.
|
||||
|
||||
### Task 2: Implement VedAstro runtime truth summary
|
||||
**Files:**
|
||||
- Modify: `scripts/jyotish_api_server.py`
|
||||
- Check: `scripts/vedastro_priority.py`
|
||||
**Interfaces:**
|
||||
- Consumes: chart modules, `vedastro_official_full_snapshot`, `source_priority`, evidence snapshot
|
||||
- Produces: normalized runtime truth block with official mode, readiness, executed layers, blocked reasons, catalog-vs-runtime boundary
|
||||
- [ ] Step 1: Add helper(s) building normalized `runtime_truth` summary.
|
||||
- [ ] Step 2: Thread summary into `_high_rigor_vedastro_official_summary`.
|
||||
- [ ] Step 3: Thread same summary into consultation workflow top-level payload.
|
||||
- [ ] Step 4: Run targeted tests.
|
||||
|
||||
### Task 3: Implement interpretation-source runtime coverage summary
|
||||
**Files:**
|
||||
- Modify: `scripts/jyotish_api_server.py`
|
||||
- Check: `mcp_server.py`, `scripts/interpretation_source_inventory_gate.py`
|
||||
**Interfaces:**
|
||||
- Consumes: strict workflow secondary-context markers, existing source-pack status, current audit boundaries
|
||||
- Produces: API-visible summary of proven runtime visibility vs unproven source assets
|
||||
- [ ] Step 1: Add helper returning compact coverage summary.
|
||||
- [ ] Step 2: Attach to consultation workflow and thematic/high-rigor payloads.
|
||||
- [ ] Step 3: Ensure summary distinguishes `proven_runtime_markers` from `not_fully_closed`.
|
||||
- [ ] Step 4: Run targeted tests.
|
||||
|
||||
### Task 4: Add reusable audit script for machine-checkable coverage
|
||||
**Files:**
|
||||
- Create: `scripts/interpretation_source_runtime_coverage.py`
|
||||
- Add Test: `tests/test_interpretation_source_runtime_coverage.py`
|
||||
**Interfaces:**
|
||||
- Consumes: existing inventory gate data + strict workflow markers from runtime packs
|
||||
- Produces: JSON/markdown report with extraction/source-pack/runtime visibility gaps
|
||||
- [ ] Step 1: Write failing test for minimal report shape.
|
||||
- [ ] Step 2: Implement minimal script reusing existing modules.
|
||||
- [ ] Step 3: Run targeted tests.
|
||||
|
||||
### Task 5: Verify end-to-end targeted regression
|
||||
**Files:**
|
||||
- None or docs if output contract docs need refresh
|
||||
**Interfaces:**
|
||||
- Consumes: new contract fields/tests/scripts
|
||||
- Produces: fresh verification evidence
|
||||
- [ ] Step 1: Run targeted pytest set covering API contract + new coverage tool.
|
||||
- [ ] Step 2: Run `python3 scripts/diagnose_vedastro_mode.py`.
|
||||
- [ ] Step 3: Run new coverage script once in JSON mode.
|
||||
- [ ] Step 4: Summarize actual status, not aspirational status.
|
||||
|
||||
|
||||
### Task 6: Surface runtime truth in MCP and frontend result payloads
|
||||
**Files:**
|
||||
- Modify: `mcp_server.py`
|
||||
- Modify: `jyotish-app/skill-map.js`
|
||||
- Test: `tests/test_frontend_productization.py` and/or existing MCP/API contract tests
|
||||
**Interfaces:**
|
||||
- Consumes: `consultation_workflow` response contract
|
||||
- Produces: visible runtime truth / source coverage status in MCP strict workflow output and frontend result panels
|
||||
- [ ] Step 1: Add failing tests for visible payload fields.
|
||||
- [ ] Step 2: Thread fields through MCP strict workflow response.
|
||||
- [ ] Step 3: Render compact runtime truth/source coverage block in frontend result page.
|
||||
- [ ] Step 4: Run targeted tests.
|
||||
|
||||
### Task 7: Harden official-extended runtime preflight
|
||||
**Files:**
|
||||
- Modify: `scripts/diagnose_vedastro_mode.py`
|
||||
- Modify: `scripts/vedastro_service_adapter.py` and/or `.env.official.example` only if needed
|
||||
- Test: existing VedAstro diagnostics/adapter tests
|
||||
**Interfaces:**
|
||||
- Consumes: current env + adapter time budget
|
||||
- Produces: sharper preflight diagnosis for why official mode is not ready; no silent fast fallback confusion
|
||||
- [ ] Step 1: Add failing diagnostics tests if missing.
|
||||
- [ ] Step 2: Expose concrete readiness blockers in output contract.
|
||||
- [ ] Step 3: Re-run diagnostics tests.
|
||||
|
||||
### Task 8: Split slow verification into smaller quality-gate profile(s)
|
||||
**Files:**
|
||||
- Modify: `scripts/run_quality_gate.py`
|
||||
- Modify: relevant tests/docs if profile list changes
|
||||
**Interfaces:**
|
||||
- Consumes: current gate profiles and long-running test groups
|
||||
- Produces: smaller verification profile(s) for runtime-truth/strict-workflow/official contracts
|
||||
- [ ] Step 1: Add failing tests or assertions for new profile names/commands.
|
||||
- [ ] Step 2: Implement profile split and command grouping.
|
||||
- [ ] Step 3: Run targeted gate/profile tests.
|
||||
@@ -0,0 +1,68 @@
|
||||
# B.V. Raman Long Report Book Structure Implementation 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:** Convert the existing single-file comprehensive chart study into a reusable long-report book structure that can serve Markdown-first authoring and later PDF export.
|
||||
**Architecture:** Keep the existing [`/Users/wuyongnaren/Documents/印度占星/docs/reports/bv_raman_style_comprehensive_chart_research_REDACTED_DATE_REDACTED_TIME_v1.md`](/Users/wuyongnaren/Documents/印度占星/docs/reports/bv_raman_style_comprehensive_chart_research_REDACTED_DATE_REDACTED_TIME_v1.md) as the source draft, then add a new `chart_research_REDACTED_DATE_REDACTED_TIME/` directory with `book.md` as the main concatenation entry, chapter files for thematic expansion, appendix files for raw evidence, and a small metadata file for later export tooling. No new PDF pipeline is added now because none is already wired in this repo.
|
||||
**Tech Stack:** Markdown, YAML metadata, existing repo docs conventions, local JSON artifacts under `.tmp/chart_study`.
|
||||
## Global Constraints
|
||||
- Reuse existing report content; do not rewrite the full report from scratch.
|
||||
- Keep Markdown as the source of truth; PDF remains an export artifact, not a second authoring format.
|
||||
- Do not add new dependencies or a speculative PDF toolchain.
|
||||
- Preserve honesty boundaries about VedAstro/PyJHora/jyotishganit closure.
|
||||
- Prefer links to existing JSON artifacts over copying large raw blobs into prose chapters.
|
||||
- Before editing chapters, read `docs/reports/chart_research_REDACTED_DATE_REDACTED_TIME/README.md` and `docs/reports/chart_research_REDACTED_DATE_REDACTED_TIME/appendices/H_error_ledger_and_preflight.md`.
|
||||
|
||||
### Task 1: Add the long-report container
|
||||
**Files:**
|
||||
- Create: `/Users/wuyongnaren/Documents/印度占星/docs/reports/chart_research_REDACTED_DATE_REDACTED_TIME/README.md`
|
||||
- Create: `/Users/wuyongnaren/Documents/印度占星/docs/reports/chart_research_REDACTED_DATE_REDACTED_TIME/book.md`
|
||||
- Create: `/Users/wuyongnaren/Documents/印度占星/docs/reports/chart_research_REDACTED_DATE_REDACTED_TIME/metadata.yaml`
|
||||
**Interfaces:**
|
||||
- Consumes: existing v1 report and `.tmp/chart_study/*.json`
|
||||
- Produces: one stable report root that later tools or humans can extend
|
||||
- [ ] **Step 1: Create report root directory structure**
|
||||
- [ ] **Step 2: Add `README.md` explaining source-of-truth and export intent**
|
||||
- [ ] **Step 3: Add `metadata.yaml` for title/author/date/export hints**
|
||||
- [ ] **Step 4: Add `book.md` listing chapters and appendices in final reading order**
|
||||
|
||||
### Task 2: Add chapter skeletons mapped to the requested methodology
|
||||
**Files:**
|
||||
- Create: `/Users/wuyongnaren/Documents/印度占星/docs/reports/chart_research_REDACTED_DATE_REDACTED_TIME/chapters/*.md`
|
||||
**Interfaces:**
|
||||
- Consumes: user-requested B.V. Raman / Parāśara / Jaimini scope
|
||||
- Produces: one file per chapter so later expansion stays bounded
|
||||
- [ ] **Step 1: Create 00–21 chapter files**
|
||||
- [ ] **Step 2: Put a short contract at top of each chapter saying what belongs there**
|
||||
- [ ] **Step 3: Pre-fill only the first few chapters with live links to existing content/data**
|
||||
- [ ] **Step 4: Leave later chapters as clean skeletons instead of fake filled content**
|
||||
|
||||
### Task 3: Add appendix and data references
|
||||
**Files:**
|
||||
- Create: `/Users/wuyongnaren/Documents/印度占星/docs/reports/chart_research_REDACTED_DATE_REDACTED_TIME/appendices/*.md`
|
||||
- Populate/Reference: `/Users/wuyongnaren/Documents/印度占星/docs/reports/chart_research_REDACTED_DATE_REDACTED_TIME/data/`
|
||||
**Interfaces:**
|
||||
- Consumes: `.tmp/chart_study/*.json`
|
||||
- Produces: report appendix map and raw evidence pointers
|
||||
- [ ] **Step 1: Create appendix stubs for raw tables, dasha boundaries, varga positions, parity, audit, glossary**
|
||||
- [ ] **Step 2: Reference current `.tmp/chart_study` artifacts instead of duplicating them**
|
||||
- [ ] **Step 3: Explain which appendices are ready vs blocked**
|
||||
|
||||
### Task 4: Connect old draft into new main chain
|
||||
**Files:**
|
||||
- Modify/Create: `/Users/wuyongnaren/Documents/印度占星/docs/reports/chart_research_REDACTED_DATE_REDACTED_TIME/README.md`
|
||||
- Keep: `/Users/wuyongnaren/Documents/印度占星/docs/reports/bv_raman_style_comprehensive_chart_research_REDACTED_DATE_REDACTED_TIME_v1.md`
|
||||
**Interfaces:**
|
||||
- Consumes: existing v1 draft headings and current chapter structure
|
||||
- Produces: migration notes from monolith draft to book structure
|
||||
- [ ] **Step 1: Mark the old v1 report as the seed draft**
|
||||
- [ ] **Step 2: Map v1 sections to new chapter files**
|
||||
- [ ] **Step 3: Keep migration incremental instead of copying all prose immediately**
|
||||
|
||||
### Task 5: Verify structure only
|
||||
**Files:**
|
||||
- Verify: report directory tree and links
|
||||
**Interfaces:**
|
||||
- Consumes: created Markdown files
|
||||
- Produces: a structure that humans can open immediately
|
||||
- [ ] **Step 1: List created files**
|
||||
- [ ] **Step 2: Open `book.md` and `README.md` to confirm links**
|
||||
- [ ] **Step 3: Avoid claiming PDF export exists until an actual exporter is wired and tested**
|
||||
@@ -0,0 +1,26 @@
|
||||
# Vibe Coding Setup
|
||||
|
||||
Use Cline as the main AI coding surface for this repo. Use Aider for small low-cost code edits. Use Dyad only for fast front-end prototypes such as 星轨talk pages.
|
||||
|
||||
## Cline MCP
|
||||
|
||||
Generate config:
|
||||
|
||||
```bash
|
||||
python3 scripts/print_cline_mcp_config.py
|
||||
```
|
||||
|
||||
Install project-local config:
|
||||
|
||||
```bash
|
||||
python3 scripts/print_cline_mcp_config.py --install-project
|
||||
```
|
||||
|
||||
This writes `.cline/mcp.json` with the current checkout path. `.cline/` is local-only and ignored by git.
|
||||
|
||||
## Recommended Split
|
||||
|
||||
- Cline: main repo work, MCP tools, strict workflow checks.
|
||||
- Aider: precise low-cost edits with git diffs.
|
||||
- Dyad: quick UI prototypes, not the main Jyotish runtime.
|
||||
|
||||
Reference in New Issue
Block a user