Consolidate oracle benchmark inventory

This commit is contained in:
732642856
2026-06-28 15:45:31 +08:00
parent 73d89586ca
commit 4439deeeb9
29 changed files with 1642 additions and 23 deletions
+4 -2
View File
@@ -205,8 +205,10 @@ description: 印度占星(Jyotish)专业解盘与推运系统。核心能力
- Dasha-only 外部证据当前目标集已闭环:`dasha_external_oracle_evidence_validation.valid_dasha_packets: 3/3`;Steve Jobs / Lahiri、REDACTED_YEAR Lahiri 模板与 1800 Delhi historical epoch 的 Vimshottari 起始边界来自 PyJHora 4.8.7 隔离黑盒 stdout artifact。
- 全局 Dasha/Shadbala Calibration Status 仍未完成:`external_oracle_evidence_validation.valid_packets: 4`,`ready_for_calibration: 4`;Shadbala 外部绝对值当前目标集已通过 4/4,Raman 扩展样本与非 Dasha 靶点尚未封顶。
- 历史 UI 静态门禁仍保留旧提示 `ready_for_calibration: 0` 作为“不得过度宣称”的保守文案;实际进度必须以当前 `oracle_collection_queue.py` / `oracle_evidence_validator.py` 输出为准。
- Tajika/Sahams 年运外部样本已开始闭环:`tajika_sahams_annual_benchmark_dashboard.ready_for_calibration: 1/5`;Steve Jobs 1984 Varshaphala/Lahiri 的 solar return、Varsha Lagna、Muntha、Year Lord、Mudda Dasha 首主、三项 Sahams 与 Tajika Yogas 已由 PyJHora 4.8.7 隔离黑盒 artifact 验证,下一优先级为 Einstein 1905。仍不得声称 Tajika/Sahams 年运体系已全局封顶。
- D1/D9/SAV 高可信;Dasha 精细日期可引用已验证 Dasha-only 样本的局部进度,但不得把全部大运边界、Shadbala 绝对值或全局精度说成已完成外部校准。
- 不得把大运起点或 Shadbala 绝对值说成已完成外部校准;涉及具体日期/绝对力量值时,必须同时报告 `Dasha/Shadbala Calibration Status`、`external_oracle_evidence_validation` 与 `production_tuning_allowed: false` 边界。
- `production_tuning_allowed: false` 前,禁止为了贴合单份 PDF、单个 JHora 截图或本仓库本地输出而改生产常数。
- 对普通用户的建议话术:基础落座、D9、SAV 可作为稳定证据;当前 Dasha-only 目标集已完成外部黑盒验证,但多 Dasha 家族、Antardasha/Pratyantar 细边界仍需扩展;Shadbala 当前目标集已有四个外部六分量样本,绝对值断语可引用 4/4 闭合进度;但跨软件差异、Raman 扩展样本与公开书例仍需更多证据后再提升到全局置信。
- 工作流要求:Dasha-only packet 用 `python3 scripts/dasha_oracle_evidence_validator.py --queue-file <queue.json>` 验证;全局校准仍必须跑 `python3 scripts/oracle_evidence_validator.py --queue-file <queue.json>`,两者不可混用。
@@ -321,8 +323,8 @@ python3 scripts/validate_interpretation_templates.py --format markdown
> 这部分比“再加几个技法名”更重要,决定 skill 距离传统软件级深度还有多远。
1. **Dasha 外部绝对边界闭环**
- 当前 `ready_for_calibration: 0`
- 大运起点、剩余年数、精确日期边界仍未通过 JHora/PyJHora 黑盒证据冻结
- 当前 `ready_for_calibration: 4`
- Dasha-only 目标集已由 PyJHora 黑盒证据推进到 3/3,但全局 Dasha/Shadbala 队列仍有非 Dasha 靶点缺字段,`production_tuning_allowed: false`
2. **Shadbala 外部绝对值闭环**
- 当前 absolute Rupa 结构自洽,但还不是外部绝对值完全校准
3. **Chara Dasha 共主仲裁尾差**
+4
View File
@@ -29,9 +29,13 @@ This file is the small index for the current engineering fronts that still drive
## Oracle Closure
- `/Users/wuyongnaren/Documents/印度占星/docs/research/oracle_benchmark_inventory_latest.md`
- `/Users/wuyongnaren/Documents/印度占星/docs/research/oracle_benchmark_inventory_latest.json`
- `/Users/wuyongnaren/Documents/印度占星/docs/research/oracle_closure_master_dashboard_latest.md`
- `/Users/wuyongnaren/Documents/印度占星/docs/research/public_benchmark_dashboard_latest.md`
- `/Users/wuyongnaren/Documents/印度占星/references/oracle/`
- Before changing oracle-dependent adjudicator or benchmark claims, run:
- `python3 scripts/oracle_benchmark_inventory.py --format json`
## VedAstro Adapter MVP
@@ -12,6 +12,8 @@ Purpose: make the ephemeris roadmap probeable instead of relying on UI labels or
| `vedastro` | MIT full-stack product/API benchmark and service-boundary adapter candidate | `service_adapter_candidate` | Can inform API, OpenAPI, chat, Panchanga, and product workflow design; C# core should stay behind an API/service boundary if reused | Reuse product/API ideas and progress through an adapter contract, not as a drop-in Python ephemeris |
| `pyjhora_benchmark` | Broad JHora-style behavior/oracle benchmark | `benchmark_only` | AGPL; do not copy implementation code into this app unless the whole downstream license posture is changed | Use only expected outputs, public examples, and behavior comparisons |
Probe compatibility note: `external_benchmark_benchmark` is retained as a machine-readable role alias for external API/product comparison surfaces such as VedAstro. It is a benchmark role, not permission to import external implementation code or treat external output as production tuning without oracle validation.
## Probe
Run:
@@ -0,0 +1,641 @@
{
"scope": "oracle_benchmark_single_truth_inventory",
"schema_version": 1,
"generated_at": "2026-06-28T07:20:42.310743+00:00",
"summary": {
"oracle_registry_count": 3,
"oracle_case_count": 9,
"evidence_template_count": 4,
"pending_packet_count": 19,
"pending_pyjhora_packet_count": 8,
"pending_non_pyjhora_packet_count": 11,
"pyjhora_artifact_count": 8,
"dashboard_count": 4
},
"fronts": {
"ashtakoot": {
"oracle_registry_count": 1,
"oracle_case_count": 0,
"evidence_template_count": 0,
"pending_packet_count": 0,
"pyjhora_artifact_count": 0,
"dashboard_count": 0
},
"dasha": {
"oracle_registry_count": 0,
"oracle_case_count": 0,
"evidence_template_count": 1,
"pending_packet_count": 4,
"pyjhora_artifact_count": 3,
"dashboard_count": 0
},
"general": {
"oracle_registry_count": 0,
"oracle_case_count": 9,
"evidence_template_count": 1,
"pending_packet_count": 3,
"pyjhora_artifact_count": 0,
"dashboard_count": 2
},
"shadbala": {
"oracle_registry_count": 1,
"oracle_case_count": 0,
"evidence_template_count": 1,
"pending_packet_count": 6,
"pyjhora_artifact_count": 4,
"dashboard_count": 0
},
"tajika_sahams": {
"oracle_registry_count": 1,
"oracle_case_count": 0,
"evidence_template_count": 1,
"pending_packet_count": 6,
"pyjhora_artifact_count": 1,
"dashboard_count": 2
}
},
"files": {
"oracle_registries": [
{
"path": "references/oracle/ashtakoot_oracle_cases.json",
"name": "ashtakoot_oracle_cases.json",
"category": "oracle_registry",
"front": "ashtakoot",
"bytes": 5726,
"json_valid": true,
"scope": "external_ashtakoot_oracle_cases",
"schema_version": 1,
"template_cases_count": 5
},
{
"path": "references/oracle/dasha_shadbala_oracle_cases.json",
"name": "dasha_shadbala_oracle_cases.json",
"category": "oracle_registry",
"front": "shadbala",
"bytes": 20265,
"json_valid": true,
"scope": "external_dasha_shadbala_oracle_boundary_cases",
"schema_version": 1,
"template_cases_count": 5,
"longitude_cases_count": 1
},
{
"path": "references/oracle/tajika_annual_oracle_cases.json",
"name": "tajika_annual_oracle_cases.json",
"category": "oracle_registry",
"front": "tajika_sahams",
"bytes": 8557,
"json_valid": true,
"scope": "external_tajika_sahams_annual_oracle_cases",
"schema_version": 1,
"template_cases_count": 5
}
],
"oracle_cases": [
{
"path": "references/oracle/cases/albert_einstein.json",
"name": "albert_einstein.json",
"category": "oracle_case",
"front": "general",
"bytes": 108,
"json_valid": true
},
{
"path": "references/oracle/cases/elon_musk.json",
"name": "elon_musk.json",
"category": "oracle_case",
"front": "general",
"bytes": 108,
"json_valid": true
},
{
"path": "references/oracle/cases/equator_quito.json",
"name": "equator_quito.json",
"category": "oracle_case",
"front": "general",
"bytes": 108,
"json_valid": true
},
{
"path": "references/oracle/cases/historical_dst_london_1943.json",
"name": "historical_dst_london_1943.json",
"category": "oracle_case",
"front": "general",
"bytes": 108,
"json_valid": true
},
{
"path": "references/oracle/cases/katy_perry.json",
"name": "katy_perry.json",
"category": "oracle_case",
"front": "general",
"bytes": 108,
"json_valid": true
},
{
"path": "references/oracle/cases/marilyn_monroe.json",
"name": "marilyn_monroe.json",
"category": "oracle_case",
"front": "general",
"bytes": 108,
"json_valid": true
},
{
"path": "references/oracle/cases/polar_reykjavik.json",
"name": "polar_reykjavik.json",
"category": "oracle_case",
"front": "general",
"bytes": 108,
"json_valid": true
},
{
"path": "references/oracle/cases/steve_jobs.json",
"name": "steve_jobs.json",
"category": "oracle_case",
"front": "general",
"bytes": 108,
"json_valid": true
},
{
"path": "references/oracle/cases/yinan_video_truth_2026_06_28.json",
"name": "yinan_video_truth_2026_06_28.json",
"category": "oracle_case",
"front": "general",
"bytes": 1970,
"json_valid": true
}
],
"evidence_templates": [
{
"path": "references/oracle/evidence_packet_templates/dasha_steve_jobs_lahiri_first_packet_only.json",
"name": "dasha_steve_jobs_lahiri_first_packet_only.json",
"category": "evidence_template",
"front": "dasha",
"bytes": 1208,
"json_valid": true,
"status": "draft",
"case_id": "template_steve_jobs_dasha_lahiri",
"capture_id": "external_template_steve_jobs_dasha_lahiri",
"source_artifact": "references/oracle/artifacts/",
"ayanamsa": "lahiri",
"node_mode": "true",
"target_placeholder_count": 1
},
{
"path": "references/oracle/evidence_packet_templates/jhora_steve_jobs_lahiri_first_packet.json",
"name": "jhora_steve_jobs_lahiri_first_packet.json",
"category": "evidence_template",
"front": "general",
"bytes": 2803,
"json_valid": true,
"status": "draft",
"case_id": "template_steve_jobs_dasha_lahiri",
"capture_id": "external_template_steve_jobs_dasha_lahiri",
"source_artifact": "references/oracle/artifacts/",
"ayanamsa": "lahiri",
"node_mode": "true",
"target_placeholder_count": 2
},
{
"path": "references/oracle/evidence_packet_templates/shadbala_redacted_place_raman_first_packet.json",
"name": "shadbala_redacted_place_raman_first_packet.json",
"category": "evidence_template",
"front": "shadbala",
"bytes": 2695,
"json_valid": true,
"status": "draft",
"case_id": "template_redacted_place_shadbala_raman",
"capture_id": "external_template_redacted_place_shadbala_raman",
"source_artifact": "references/oracle/artifacts/",
"ayanamsa": "raman",
"node_mode": "mean",
"target_placeholder_count": 2
},
{
"path": "references/oracle/evidence_packet_templates/tajika_steve_jobs_1984_first_packet.json",
"name": "tajika_steve_jobs_1984_first_packet.json",
"category": "evidence_template",
"front": "tajika_sahams",
"bytes": 1783,
"json_valid": true,
"status": "draft",
"case_id": "template_steve_jobs_varshaphala_1984_lahiri",
"capture_id": "external_template_steve_jobs_varshaphala_1984_lahiri",
"source_artifact": "references/oracle/artifacts/",
"ayanamsa": "lahiri",
"node_mode": "true",
"annual_system": "varshaphala",
"target_year": 1984,
"target_placeholder_count": 10
}
],
"pending_packets": [
{
"path": "references/oracle/artifacts/pending_packets/capture_manifest.json",
"name": "capture_manifest.json",
"category": "pending_packet",
"front": "general",
"bytes": 796,
"json_valid": true,
"scope": "external_oracle_capture_packet_manifest"
},
{
"path": "references/oracle/artifacts/pending_packets/external_template_einstein_varshaphala_1905_lahiri.json",
"name": "external_template_einstein_varshaphala_1905_lahiri.json",
"category": "pending_packet",
"front": "tajika_sahams",
"bytes": 1687,
"json_valid": true,
"status": "draft",
"case_id": "template_einstein_varshaphala_1905_lahiri",
"capture_id": "external_template_einstein_varshaphala_1905_lahiri",
"source_artifact": "references/oracle/artifacts/",
"ayanamsa": "lahiri",
"node_mode": "mean",
"annual_system": "varshaphala",
"target_year": 1905,
"target_placeholder_count": 10
},
{
"path": "references/oracle/artifacts/pending_packets/external_template_extreme_latitude_kp.json",
"name": "external_template_extreme_latitude_kp.json",
"category": "pending_packet",
"front": "general",
"bytes": 2543,
"json_valid": true,
"status": "draft",
"case_id": "template_extreme_latitude_kp",
"capture_id": "external_template_extreme_latitude_kp",
"source_artifact": "references/oracle/artifacts/",
"ayanamsa": "kp",
"node_mode": "true",
"target_placeholder_count": 2
},
{
"path": "references/oracle/artifacts/pending_packets/external_template_extreme_latitude_kp_pyjhora_20260627.json",
"name": "external_template_extreme_latitude_kp_pyjhora_20260627.json",
"category": "pending_packet",
"front": "general",
"bytes": 3054,
"json_valid": true,
"status": "external_verified",
"case_id": "template_extreme_latitude_kp",
"capture_id": "external_template_extreme_latitude_kp",
"source_artifact": "references/oracle/artifacts/pyjhora_extreme_latitude_kp_shadbala_stdout_20260627.txt",
"tool_name": "PyJHora",
"ayanamsa": "kp",
"node_mode": "true",
"target_placeholder_count": 2
},
{
"path": "references/oracle/artifacts/pending_packets/external_template_redacted_place_shadbala_raman.json",
"name": "external_template_redacted_place_shadbala_raman.json",
"category": "pending_packet",
"front": "shadbala",
"bytes": 2563,
"json_valid": true,
"status": "draft",
"case_id": "template_redacted_place_shadbala_raman",
"capture_id": "external_template_redacted_place_shadbala_raman",
"source_artifact": "references/oracle/artifacts/",
"ayanamsa": "raman",
"node_mode": "mean",
"target_placeholder_count": 2
},
{
"path": "references/oracle/artifacts/pending_packets/external_template_redacted_place_shadbala_raman_pyjhora_20260627.json",
"name": "external_template_redacted_place_shadbala_raman_pyjhora_20260627.json",
"category": "pending_packet",
"front": "shadbala",
"bytes": 3173,
"json_valid": true,
"status": "external_verified",
"case_id": "template_redacted_place_shadbala_raman",
"capture_id": "external_template_redacted_place_shadbala_raman",
"source_artifact": "references/oracle/artifacts/pyjhora_redacted_place_shadbala_raman_stdout_20260627.txt",
"tool_name": "PyJHora",
"ayanamsa": "raman",
"node_mode": "mean",
"target_placeholder_count": 2
},
{
"path": "references/oracle/artifacts/pending_packets/external_template_historical_dst_london_varshaphala_1943_lahiri.json",
"name": "external_template_historical_dst_london_varshaphala_1943_lahiri.json",
"category": "pending_packet",
"front": "tajika_sahams",
"bytes": 1699,
"json_valid": true,
"status": "draft",
"case_id": "template_historical_dst_london_varshaphala_1943_lahiri",
"capture_id": "external_template_historical_dst_london_varshaphala_1943_lahiri",
"source_artifact": "references/oracle/artifacts/",
"ayanamsa": "lahiri",
"node_mode": "mean",
"annual_system": "varshaphala",
"target_year": 1943,
"target_placeholder_count": 10
},
{
"path": "references/oracle/artifacts/pending_packets/external_template_historical_epoch_lahiri.json",
"name": "external_template_historical_epoch_lahiri.json",
"category": "pending_packet",
"front": "dasha",
"bytes": 1214,
"json_valid": true,
"status": "draft",
"case_id": "template_historical_epoch_lahiri",
"capture_id": "external_template_historical_epoch_lahiri",
"source_artifact": "references/oracle/artifacts/",
"ayanamsa": "lahiri",
"node_mode": "mean",
"target_placeholder_count": 2
},
{
"path": "references/oracle/artifacts/pending_packets/external_template_historical_epoch_lahiri_pyjhora_20260627.json",
"name": "external_template_historical_epoch_lahiri_pyjhora_20260627.json",
"category": "pending_packet",
"front": "dasha",
"bytes": 1552,
"json_valid": true,
"status": "external_verified",
"case_id": "template_historical_epoch_lahiri",
"capture_id": "external_template_historical_epoch_lahiri",
"source_artifact": "references/oracle/artifacts/pyjhora_historical_epoch_dasha_stdout_20260627.txt",
"tool_name": "PyJHora",
"ayanamsa": "lahiri",
"node_mode": "mean",
"target_placeholder_count": 1
},
{
"path": "references/oracle/artifacts/pending_packets/external_template_marilyn_monroe_varshaphala_1962_lahiri.json",
"name": "external_template_marilyn_monroe_varshaphala_1962_lahiri.json",
"category": "pending_packet",
"front": "tajika_sahams",
"bytes": 1688,
"json_valid": true,
"status": "draft",
"case_id": "template_marilyn_monroe_varshaphala_1962_lahiri",
"capture_id": "external_template_marilyn_monroe_varshaphala_1962_lahiri",
"source_artifact": "references/oracle/artifacts/",
"ayanamsa": "lahiri",
"node_mode": "true",
"annual_system": "varshaphala",
"target_year": 1962,
"target_placeholder_count": 10
},
{
"path": "references/oracle/artifacts/pending_packets/external_template_steve_jobs_dasha_lahiri.json",
"name": "external_template_steve_jobs_dasha_lahiri.json",
"category": "pending_packet",
"front": "dasha",
"bytes": 2570,
"json_valid": true,
"status": "draft",
"case_id": "template_steve_jobs_dasha_lahiri",
"capture_id": "external_template_steve_jobs_dasha_lahiri",
"source_artifact": "references/oracle/artifacts/",
"ayanamsa": "lahiri",
"node_mode": "true",
"target_placeholder_count": 2
},
{
"path": "references/oracle/artifacts/pending_packets/external_template_steve_jobs_dasha_lahiri_pyjhora_20260627.json",
"name": "external_template_steve_jobs_dasha_lahiri_pyjhora_20260627.json",
"category": "pending_packet",
"front": "dasha",
"bytes": 1549,
"json_valid": true,
"status": "external_verified",
"case_id": "template_steve_jobs_dasha_lahiri",
"capture_id": "external_template_steve_jobs_dasha_lahiri",
"source_artifact": "references/oracle/artifacts/pyjhora_steve_jobs_dasha_stdout_20260627.txt",
"tool_name": "PyJHora",
"ayanamsa": "lahiri",
"node_mode": "true",
"target_placeholder_count": 1
},
{
"path": "references/oracle/artifacts/pending_packets/external_template_steve_jobs_shadbala_lahiri_pyjhora_20260627.json",
"name": "external_template_steve_jobs_shadbala_lahiri_pyjhora_20260627.json",
"category": "pending_packet",
"front": "shadbala",
"bytes": 3036,
"json_valid": true,
"status": "external_verified",
"case_id": "template_steve_jobs_dasha_lahiri",
"capture_id": "external_template_steve_jobs_dasha_lahiri",
"source_artifact": "references/oracle/artifacts/pyjhora_steve_jobs_shadbala_lahiri_stdout_20260627.txt",
"tool_name": "PyJHora",
"ayanamsa": "lahiri",
"node_mode": "true",
"target_placeholder_count": 2
},
{
"path": "references/oracle/artifacts/pending_packets/external_template_steve_jobs_varshaphala_1984_lahiri.json",
"name": "external_template_steve_jobs_varshaphala_1984_lahiri.json",
"category": "pending_packet",
"front": "tajika_sahams",
"bytes": 3249,
"json_valid": true,
"status": "external_verified",
"case_id": "template_steve_jobs_varshaphala_1984_lahiri",
"capture_id": "external_template_steve_jobs_varshaphala_1984_lahiri",
"source_artifact": "references/oracle/artifacts/pyjhora_steve_jobs_varshaphala_1984_lahiri_stdout_20260627.txt",
"tool_name": "PyJHora",
"ayanamsa": "lahiri",
"node_mode": "true",
"annual_system": "varshaphala",
"target_year": 1984,
"target_placeholder_count": 10
},
{
"path": "references/oracle/artifacts/pending_packets/external_template_steve_jobs_varshaphala_1984_lahiri_pyjhora_20260627.json",
"name": "external_template_steve_jobs_varshaphala_1984_lahiri_pyjhora_20260627.json",
"category": "pending_packet",
"front": "tajika_sahams",
"bytes": 3249,
"json_valid": true,
"status": "external_verified",
"case_id": "template_steve_jobs_varshaphala_1984_lahiri",
"capture_id": "external_template_steve_jobs_varshaphala_1984_lahiri",
"source_artifact": "references/oracle/artifacts/pyjhora_steve_jobs_varshaphala_1984_lahiri_stdout_20260627.txt",
"tool_name": "PyJHora",
"ayanamsa": "lahiri",
"node_mode": "true",
"annual_system": "varshaphala",
"target_year": 1984,
"target_placeholder_count": 10
},
{
"path": "references/oracle/artifacts/pending_packets/external_template_synthetic_extreme_latitude_varshaphala_kp.json",
"name": "external_template_synthetic_extreme_latitude_varshaphala_kp.json",
"category": "pending_packet",
"front": "tajika_sahams",
"bytes": 1676,
"json_valid": true,
"status": "draft",
"case_id": "template_synthetic_extreme_latitude_varshaphala_kp",
"capture_id": "external_template_synthetic_extreme_latitude_varshaphala_kp",
"source_artifact": "references/oracle/artifacts/",
"ayanamsa": "kp",
"node_mode": "true",
"annual_system": "varshaphala",
"target_year": 2024,
"target_placeholder_count": 10
},
{
"path": "references/oracle/artifacts/pending_packets/external_template_user_REDACTED_YEAR_moon_longitude_lahiri.json",
"name": "external_template_user_REDACTED_YEAR_moon_longitude_lahiri.json",
"category": "pending_packet",
"front": "shadbala",
"bytes": 2631,
"json_valid": true,
"status": "draft",
"case_id": "template_user_REDACTED_YEAR_moon_longitude_lahiri",
"capture_id": "external_template_user_REDACTED_YEAR_moon_longitude_lahiri",
"source_artifact": "references/oracle/artifacts/",
"ayanamsa": "lahiri",
"node_mode": "mean",
"target_placeholder_count": 3
},
{
"path": "references/oracle/artifacts/pending_packets/external_template_user_REDACTED_YEAR_moon_longitude_lahiri_pyjhora_20260627.json",
"name": "external_template_user_REDACTED_YEAR_moon_longitude_lahiri_pyjhora_20260627.json",
"category": "pending_packet",
"front": "shadbala",
"bytes": 1562,
"json_valid": true,
"status": "external_verified",
"case_id": "template_user_REDACTED_YEAR_moon_longitude_lahiri",
"capture_id": "external_template_user_REDACTED_YEAR_moon_longitude_lahiri",
"source_artifact": "references/oracle/artifacts/pyjhora_user_REDACTED_YEAR_dasha_stdout_20260627.txt",
"tool_name": "PyJHora",
"ayanamsa": "lahiri",
"node_mode": "mean",
"target_placeholder_count": 1
},
{
"path": "references/oracle/artifacts/pending_packets/external_template_user_REDACTED_YEAR_shadbala_lahiri_pyjhora_20260627.json",
"name": "external_template_user_REDACTED_YEAR_shadbala_lahiri_pyjhora_20260627.json",
"category": "pending_packet",
"front": "shadbala",
"bytes": 3275,
"json_valid": true,
"status": "external_verified",
"case_id": "template_user_REDACTED_YEAR_moon_longitude_lahiri",
"capture_id": "external_template_user_REDACTED_YEAR_moon_longitude_lahiri",
"source_artifact": "references/oracle/artifacts/pyjhora_user_REDACTED_YEAR_shadbala_lahiri_stdout_20260627.txt",
"tool_name": "PyJHora",
"ayanamsa": "lahiri",
"node_mode": "mean",
"target_placeholder_count": 3
}
],
"pyjhora_artifacts": [
{
"path": "references/oracle/artifacts/pyjhora_extreme_latitude_kp_shadbala_stdout_20260627.txt",
"name": "pyjhora_extreme_latitude_kp_shadbala_stdout_20260627.txt",
"category": "pyjhora_artifact",
"front": "shadbala",
"bytes": 2973
},
{
"path": "references/oracle/artifacts/pyjhora_redacted_place_shadbala_raman_stdout_20260627.txt",
"name": "pyjhora_redacted_place_shadbala_raman_stdout_20260627.txt",
"category": "pyjhora_artifact",
"front": "shadbala",
"bytes": 2994
},
{
"path": "references/oracle/artifacts/pyjhora_historical_epoch_dasha_stdout_20260627.txt",
"name": "pyjhora_historical_epoch_dasha_stdout_20260627.txt",
"category": "pyjhora_artifact",
"front": "dasha",
"bytes": 6188
},
{
"path": "references/oracle/artifacts/pyjhora_steve_jobs_dasha_stdout_20260627.txt",
"name": "pyjhora_steve_jobs_dasha_stdout_20260627.txt",
"category": "pyjhora_artifact",
"front": "dasha",
"bytes": 5765
},
{
"path": "references/oracle/artifacts/pyjhora_steve_jobs_shadbala_lahiri_stdout_20260627.txt",
"name": "pyjhora_steve_jobs_shadbala_lahiri_stdout_20260627.txt",
"category": "pyjhora_artifact",
"front": "shadbala",
"bytes": 2980
},
{
"path": "references/oracle/artifacts/pyjhora_steve_jobs_varshaphala_1984_lahiri_stdout_20260627.txt",
"name": "pyjhora_steve_jobs_varshaphala_1984_lahiri_stdout_20260627.txt",
"category": "pyjhora_artifact",
"front": "tajika_sahams",
"bytes": 3491
},
{
"path": "references/oracle/artifacts/pyjhora_user_REDACTED_YEAR_dasha_stdout_20260627.txt",
"name": "pyjhora_user_REDACTED_YEAR_dasha_stdout_20260627.txt",
"category": "pyjhora_artifact",
"front": "dasha",
"bytes": 6224
},
{
"path": "references/oracle/artifacts/pyjhora_user_REDACTED_YEAR_shadbala_lahiri_stdout_20260627.txt",
"name": "pyjhora_user_REDACTED_YEAR_shadbala_lahiri_stdout_20260627.txt",
"category": "pyjhora_artifact",
"front": "shadbala",
"bytes": 3018
}
],
"pyjhora_manifest": {
"path": "references/oracle/artifacts/pyjhora_oracle_artifact_manifest.json",
"name": "pyjhora_oracle_artifact_manifest.json",
"category": "pyjhora_manifest",
"front": "general",
"bytes": 3239,
"json_valid": true,
"scope": "pyjhora_oracle_artifact_manifest",
"artifact_count": 8,
"packet_count": 8
},
"dashboards": [
{
"path": "docs/research/oracle_closure_master_dashboard_latest.md",
"name": "oracle_closure_master_dashboard_latest.md",
"category": "dashboard",
"front": "general",
"bytes": 1322
},
{
"path": "docs/research/public_benchmark_dashboard_latest.md",
"name": "public_benchmark_dashboard_latest.md",
"category": "dashboard",
"front": "general",
"bytes": 1578
},
{
"path": "docs/research/tajika_annual_benchmark_dashboard_latest.md",
"name": "tajika_annual_benchmark_dashboard_latest.md",
"category": "dashboard",
"front": "tajika_sahams",
"bytes": 1053
},
{
"path": "docs/research/tajika_annual_closure_status_latest.md",
"name": "tajika_annual_closure_status_latest.md",
"category": "dashboard",
"front": "tajika_sahams",
"bytes": 2789
}
]
},
"boundary": "This inventory tracks external oracle evidence only. It does not import PyJHora/JHora implementation code, does not tune production constants, and does not treat internal consistency as external validation.",
"next_actions": [
"Promote verified pending packets into the relevant oracle registry only after metadata and source_artifact pass validation.",
"Keep PyJHora outputs as black-box artifacts and regenerate the artifact manifest after each external capture batch.",
"Update public_benchmark_dashboard_latest.md after each validated packet batch so public claims stay conservative.",
"Use this inventory before changing strict workflow or adjudicator logic that depends on external truth."
]
}
@@ -0,0 +1,85 @@
# Oracle Benchmark Single-Truth Inventory
Generated: `2026-06-28T07:20:42.378403+00:00`
## Summary
- oracle_registry_count: `3`
- oracle_case_count: `9`
- evidence_template_count: `4`
- pending_packet_count: `19`
- pending_pyjhora_packet_count: `8`
- pending_non_pyjhora_packet_count: `11`
- pyjhora_artifact_count: `8`
- dashboard_count: `4`
## Oracle Registries
- `references/oracle/ashtakoot_oracle_cases.json` (ashtakoot)
- `references/oracle/dasha_shadbala_oracle_cases.json` (shadbala)
- `references/oracle/tajika_annual_oracle_cases.json` (tajika_sahams)
## Oracle Case Files
- `references/oracle/cases/albert_einstein.json` (general)
- `references/oracle/cases/elon_musk.json` (general)
- `references/oracle/cases/equator_quito.json` (general)
- `references/oracle/cases/historical_dst_london_1943.json` (general)
- `references/oracle/cases/katy_perry.json` (general)
- `references/oracle/cases/marilyn_monroe.json` (general)
- `references/oracle/cases/polar_reykjavik.json` (general)
- `references/oracle/cases/steve_jobs.json` (general)
- `references/oracle/cases/yinan_video_truth_2026_06_28.json` (general)
## Pending Evidence Packets
- `references/oracle/artifacts/pending_packets/capture_manifest.json` (general, status: `unknown`, case: `capture_manifest.json`)
- `references/oracle/artifacts/pending_packets/external_template_einstein_varshaphala_1905_lahiri.json` (tajika_sahams, status: `draft`, case: `template_einstein_varshaphala_1905_lahiri`)
- `references/oracle/artifacts/pending_packets/external_template_extreme_latitude_kp.json` (general, status: `draft`, case: `template_extreme_latitude_kp`)
- `references/oracle/artifacts/pending_packets/external_template_extreme_latitude_kp_pyjhora_20260627.json` (general, status: `external_verified`, case: `template_extreme_latitude_kp`)
- `references/oracle/artifacts/pending_packets/external_template_redacted_place_shadbala_raman.json` (shadbala, status: `draft`, case: `template_redacted_place_shadbala_raman`)
- `references/oracle/artifacts/pending_packets/external_template_redacted_place_shadbala_raman_pyjhora_20260627.json` (shadbala, status: `external_verified`, case: `template_redacted_place_shadbala_raman`)
- `references/oracle/artifacts/pending_packets/external_template_historical_dst_london_varshaphala_1943_lahiri.json` (tajika_sahams, status: `draft`, case: `template_historical_dst_london_varshaphala_1943_lahiri`)
- `references/oracle/artifacts/pending_packets/external_template_historical_epoch_lahiri.json` (dasha, status: `draft`, case: `template_historical_epoch_lahiri`)
- `references/oracle/artifacts/pending_packets/external_template_historical_epoch_lahiri_pyjhora_20260627.json` (dasha, status: `external_verified`, case: `template_historical_epoch_lahiri`)
- `references/oracle/artifacts/pending_packets/external_template_marilyn_monroe_varshaphala_1962_lahiri.json` (tajika_sahams, status: `draft`, case: `template_marilyn_monroe_varshaphala_1962_lahiri`)
- `references/oracle/artifacts/pending_packets/external_template_steve_jobs_dasha_lahiri.json` (dasha, status: `draft`, case: `template_steve_jobs_dasha_lahiri`)
- `references/oracle/artifacts/pending_packets/external_template_steve_jobs_dasha_lahiri_pyjhora_20260627.json` (dasha, status: `external_verified`, case: `template_steve_jobs_dasha_lahiri`)
- `references/oracle/artifacts/pending_packets/external_template_steve_jobs_shadbala_lahiri_pyjhora_20260627.json` (shadbala, status: `external_verified`, case: `template_steve_jobs_dasha_lahiri`)
- `references/oracle/artifacts/pending_packets/external_template_steve_jobs_varshaphala_1984_lahiri.json` (tajika_sahams, status: `external_verified`, case: `template_steve_jobs_varshaphala_1984_lahiri`)
- `references/oracle/artifacts/pending_packets/external_template_steve_jobs_varshaphala_1984_lahiri_pyjhora_20260627.json` (tajika_sahams, status: `external_verified`, case: `template_steve_jobs_varshaphala_1984_lahiri`)
- `references/oracle/artifacts/pending_packets/external_template_synthetic_extreme_latitude_varshaphala_kp.json` (tajika_sahams, status: `draft`, case: `template_synthetic_extreme_latitude_varshaphala_kp`)
- `references/oracle/artifacts/pending_packets/external_template_user_REDACTED_YEAR_moon_longitude_lahiri.json` (shadbala, status: `draft`, case: `template_user_REDACTED_YEAR_moon_longitude_lahiri`)
- `references/oracle/artifacts/pending_packets/external_template_user_REDACTED_YEAR_moon_longitude_lahiri_pyjhora_20260627.json` (shadbala, status: `external_verified`, case: `template_user_REDACTED_YEAR_moon_longitude_lahiri`)
- `references/oracle/artifacts/pending_packets/external_template_user_REDACTED_YEAR_shadbala_lahiri_pyjhora_20260627.json` (shadbala, status: `external_verified`, case: `template_user_REDACTED_YEAR_moon_longitude_lahiri`)
## PyJHora Black-Box Assets
- `references/oracle/artifacts/pyjhora_extreme_latitude_kp_shadbala_stdout_20260627.txt` (shadbala)
- `references/oracle/artifacts/pyjhora_redacted_place_shadbala_raman_stdout_20260627.txt` (shadbala)
- `references/oracle/artifacts/pyjhora_historical_epoch_dasha_stdout_20260627.txt` (dasha)
- `references/oracle/artifacts/pyjhora_steve_jobs_dasha_stdout_20260627.txt` (dasha)
- `references/oracle/artifacts/pyjhora_steve_jobs_shadbala_lahiri_stdout_20260627.txt` (shadbala)
- `references/oracle/artifacts/pyjhora_steve_jobs_varshaphala_1984_lahiri_stdout_20260627.txt` (tajika_sahams)
- `references/oracle/artifacts/pyjhora_user_REDACTED_YEAR_dasha_stdout_20260627.txt` (dasha)
- `references/oracle/artifacts/pyjhora_user_REDACTED_YEAR_shadbala_lahiri_stdout_20260627.txt` (shadbala)
Manifest: `references/oracle/artifacts/pyjhora_oracle_artifact_manifest.json`
## Dashboards
- `docs/research/oracle_closure_master_dashboard_latest.md`
- `docs/research/public_benchmark_dashboard_latest.md`
- `docs/research/tajika_annual_benchmark_dashboard_latest.md`
- `docs/research/tajika_annual_closure_status_latest.md`
## Boundary
This inventory tracks external oracle evidence only. It does not import PyJHora/JHora implementation code, does not tune production constants, and does not treat internal consistency as external validation.
## Next Actions
- Promote verified pending packets into the relevant oracle registry only after metadata and source_artifact pass validation.
- Keep PyJHora outputs as black-box artifacts and regenerate the artifact manifest after each external capture batch.
- Update public_benchmark_dashboard_latest.md after each validated packet batch so public claims stay conservative.
- Use this inventory before changing strict workflow or adjudicator logic that depends on external truth.
@@ -1,10 +1,10 @@
# Public Jyotish Benchmark Dashboard
Generated: `2026-06-26T18:30:41.336555+00:00`
Generated: `2026-06-28T07:20:42.239186+00:00`
## Capability Registry
- technique_count: `79`
- technique_count: `89`
- capability_valid: `true`
- problem_count: `0`
@@ -19,6 +19,14 @@ Generated: `2026-06-26T18:30:41.336555+00:00`
- external_verified_shadbala_tasks: `4`
- shadbala_task_count: `4`
## PyJHora Black-Box Assets
- artifact_count: `8`
- packet_count: `8`
- dasha_artifacts: `3`
- shadbala_artifacts: `4`
- tajika_sahams_artifacts: `1`
## Boundary Audit
- external_verified_template_cases: `4`
@@ -32,7 +40,7 @@ Generated: `2026-06-26T18:30:41.336555+00:00`
## Remaining Gap
Dasha-only external oracle readiness is 3/3; Shadbala external absolute-value readiness is 4/4; public long-term benchmark history is not yet comparable to the strongest global open-source projects.
Dasha-only external oracle readiness is 3/3; Shadbala external absolute-value readiness is 4/4; PyJHora black-box assets are 8 artifacts / 8 packets; public long-term benchmark history is not yet comparable to the strongest global open-source projects.
## Next Actions
+2
View File
@@ -2117,6 +2117,7 @@ const VALIDATION_TRANSPARENCY = {
recall: 'Recall 93.99%',
f1: 'F1 95.22%',
unmappedPyjhora: 'unmapped_pyjhora: 718',
unmappedExternalBenchmark: 'unmapped_external_benchmark: tracked',
gates: ['golden cases', 'BPHS invariants', 'release-quality-gate'],
};
@@ -2132,6 +2133,7 @@ function renderValidationTransparencyPanel() {
${renderValidationTransparencyMetric('Recall', VALIDATION_TRANSPARENCY.recall, '参考可比较规则中,被当前引擎找回的比例。')}
${renderValidationTransparencyMetric('F1', VALIDATION_TRANSPARENCY.f1, 'Precision 与 Recall 的综合分。')}
${renderValidationTransparencyMetric('Coverage gap', VALIDATION_TRANSPARENCY.unmappedPyjhora, '仍未映射的 PyJHora/B.V. Raman 规则保持可见。')}
${renderValidationTransparencyMetric('External gap', VALIDATION_TRANSPARENCY.unmappedExternalBenchmark, '外部 benchmark 缺口保持可见,但不得等同个人事件预测准确率。')}
</div>
<div class="validation-transparency-boundary">
<strong>边界</strong>
+10
View File
@@ -395,3 +395,13 @@
- 完成“有效文件复用索引”:新增 `docs/research/local_reuse_candidate_index_round28_2026_06_26.md`,把当前 repo、旧 WorkBuddy skill、历史 benchmark、本地开源镜像按 `direct current repo reuse`、`older WorkBuddy skill reuse`、`local open-source mirrors`、`benchmark-only sources` 分类,明确未来补 Kuja/Panchanga/Tajika/Chara/Prompt Pack 时必须先查已有文件和许可证边界,再决定是否新写。
- 2026-06-26:新增 `docs/research/antigravity_sidecar_work_order_round29_2026_06_26.md`,继续扩大副手任务规模,集中拆 skill 全量补齐、本地可直接测试、云端同步白名单、外部 oracle 精度闭环与 `Round30 Top120`。
- 2026-06-26:当前待正式归档并推云的核心资产为 `docs/research/antigravity_round28_*_2026_06_26.md` 与 `docs/research/antigravity_sidecar_work_order_round29_2026_06_26.md`;归档完成后主线程继续优先补高 ROI 的 API/CLI/前端隐藏技法,而不是重新空写算法。
## 2026-06-28 Oracle/Benchmark 收口
- 按用户要求继续完成未完成任务前,重新读取 `task_plan.md`、`findings.md`、`progress.md` 与 `docs/research/ACTIVE_FRONTS.md`,确认当前高价值遗漏集中在外部 oracle/PyJHora 黑盒证据包、pending packets、benchmark dashboard 与 Shadbala 组件边界。
- 先写红灯测试 `tests/test_oracle_benchmark_inventory.py`,要求项目能机器化索引 oracle registries、oracle cases、pending packets、PyJHora artifacts、manifest 与 dashboards。
- 新增 `scripts/oracle_benchmark_inventory.py`,生成 `oracle_benchmark_single_truth_inventory`,把 `references/oracle/`、`references/oracle/cases/`、`references/oracle/artifacts/pending_packets/` 与 dashboard 文件折叠成单一 JSON/Markdown 真相入口。
- 生成 `docs/research/oracle_benchmark_inventory_latest.json` 与 `docs/research/oracle_benchmark_inventory_latest.md`,当前索引统计为 3 个 oracle registry、9 个 oracle case、19 个 pending packet、8 个 PyJHora 黑盒 artifact、4 个 dashboard。
- 更新 `docs/research/ACTIVE_FRONTS.md` 的 Oracle Closure 入口,要求后续修改 oracle-dependent adjudicator 或 benchmark claims 前先运行 `python3 scripts/oracle_benchmark_inventory.py --format json`。
- 收口上一轮遗留的 finance Shadbala 组件审计:`mcp_server.py` 对 `shadbala.planets` 要求 `sthana/dig/kala/chesta/naisargika/drik` 六分量,缺失时 `confidence_cap = low` 且进入 `secondary_context += ["shadbala_component_gap"]`;补文档 `docs/research/shadbala_component_confidence_cap_v1_2026_06_28.md`。
- 验证:`python3 -m pytest tests/test_oracle_benchmark_inventory.py -q` 通过;`python3 -m pytest tests/test_mcp_strict_workflow_finance.py -q` 24 项通过;`python3 -m json.tool docs/research/oracle_benchmark_inventory_latest.json` 通过。
@@ -0,0 +1,65 @@
{
"capture_id": "external_template_historical_dst_london_varshaphala_1943_lahiri",
"status": "draft",
"case_id": "template_historical_dst_london_varshaphala_1943_lahiri",
"birth": {
"year": 1910,
"month": 4,
"day": 15,
"hour": 12,
"minute": 0,
"second": 0,
"lat": 51.5074,
"lon": -0.1278,
"tz": 0
},
"settings": {
"ayanamsa": "lahiri",
"node_mode": "mean",
"annual_system": "varshaphala",
"target_year": 1943
},
"required_metadata_fields": [
"tool_name",
"tool_version_or_url",
"capture_date",
"source_artifact",
"ayanamsa",
"node_mode",
"timezone",
"annual_system",
"target_year",
"operator_note"
],
"metadata": {
"tool_name": "",
"tool_version_or_url": "",
"capture_date": "",
"source_artifact": "references/oracle/artifacts/",
"ayanamsa": "lahiri",
"node_mode": "mean",
"timezone": 0,
"annual_system": "varshaphala",
"target_year": 1943,
"operator_note": ""
},
"target_placeholders": {
"target.solar_return_datetime": null,
"target.varsha_lagna_deg": null,
"target.muntha_sign": null,
"target.year_lord": null,
"target.mudda_dasha_first_lord": null,
"target.sahams.punya_saham": null,
"target.sahams.rajya_saham": null,
"target.sahams.vivah_saham": null,
"target.tajika_yogas": null,
"target.source_artifact": null
},
"integrity_checks": {
"must_not_come_from_local_engine": true,
"requires_external_artifact": true,
"requires_status_external_verified_before_calibration": true,
"requires_solar_return_convention": true
},
"promotion_status_after_fill": "external_verified"
}
@@ -0,0 +1,65 @@
{
"capture_id": "external_template_marilyn_monroe_varshaphala_1962_lahiri",
"status": "draft",
"case_id": "template_marilyn_monroe_varshaphala_1962_lahiri",
"birth": {
"year": 1926,
"month": 6,
"day": 1,
"hour": 9,
"minute": 30,
"second": 0,
"lat": 34.0522,
"lon": -118.2437,
"tz": -8
},
"settings": {
"ayanamsa": "lahiri",
"node_mode": "true",
"annual_system": "varshaphala",
"target_year": 1962
},
"required_metadata_fields": [
"tool_name",
"tool_version_or_url",
"capture_date",
"source_artifact",
"ayanamsa",
"node_mode",
"timezone",
"annual_system",
"target_year",
"operator_note"
],
"metadata": {
"tool_name": "",
"tool_version_or_url": "",
"capture_date": "",
"source_artifact": "references/oracle/artifacts/",
"ayanamsa": "lahiri",
"node_mode": "true",
"timezone": -8,
"annual_system": "varshaphala",
"target_year": 1962,
"operator_note": ""
},
"target_placeholders": {
"target.solar_return_datetime": null,
"target.varsha_lagna_deg": null,
"target.muntha_sign": null,
"target.year_lord": null,
"target.mudda_dasha_first_lord": null,
"target.sahams.punya_saham": null,
"target.sahams.rajya_saham": null,
"target.sahams.vivah_saham": null,
"target.tajika_yogas": null,
"target.source_artifact": null
},
"integrity_checks": {
"must_not_come_from_local_engine": true,
"requires_external_artifact": true,
"requires_status_external_verified_before_calibration": true,
"requires_solar_return_convention": true
},
"promotion_status_after_fill": "external_verified"
}
@@ -0,0 +1,139 @@
{
"capture_id": "external_template_steve_jobs_varshaphala_1984_lahiri",
"status": "external_verified",
"case_id": "template_steve_jobs_varshaphala_1984_lahiri",
"birth": {
"year": 1955,
"month": 2,
"day": 24,
"hour": 19,
"minute": 15,
"second": 0,
"lat": 37.7749,
"lon": -122.4194,
"tz": -8
},
"settings": {
"ayanamsa": "lahiri",
"node_mode": "true",
"annual_system": "varshaphala",
"target_year": 1984
},
"required_metadata_fields": [
"tool_name",
"tool_version_or_url",
"capture_date",
"source_artifact",
"ayanamsa",
"node_mode",
"timezone",
"annual_system",
"target_year",
"operator_note"
],
"metadata": {
"tool_name": "PyJHora",
"tool_version_or_url": "PyJHora 4.8.7 isolated /tmp black-box run",
"capture_date": "2026-06-27",
"source_artifact": "references/oracle/artifacts/pyjhora_steve_jobs_varshaphala_1984_lahiri_stdout_20260627.txt",
"ayanamsa": "lahiri",
"node_mode": "PyJHora default",
"timezone": "UTC-08:00",
"annual_system": "Varshaphala/Tajika",
"target_year": 1984,
"operator_note": "Black-box annual output from isolated /tmp virtualenv. PyJHora AGPL code was not copied into this repository; only generated output is stored as external evidence. Year Lord direct call raised KeyError when Rahu appeared in candidates; packet records the filtered classical-planet workaround per PyJHora docstring boundary."
},
"target_placeholders": {
"target.solar_return_datetime": "1984-02-25T05:41:37-08:00",
"target.varsha_lagna_deg": 287.4007,
"target.muntha_sign": "Cancer",
"target.year_lord": "Mars",
"target.mudda_dasha_first_lord": "Sun",
"target.sahams.punya_saham": 249.1148,
"target.sahams.rajya_saham": 207.6343,
"target.sahams.vivah_saham": 8.8762,
"target.tajika_yogas": {
"eesarpha": [
[
0,
5
],
[
1,
3
],
[
2,
6
],
[
4,
5
]
],
"gairi_kamboola": null,
"ithasala": [
[
0,
1,
1
],
[
0,
4,
2
],
[
1,
4,
3
]
],
"kamboola": [
true,
[
[
1,
4
]
],
[
[
0,
4
],
[
1,
4
],
[
0,
1
],
[
0,
4
]
]
],
"khallasara": null,
"manahoo": [
[
0,
4,
10
]
],
"nakta": [],
"yamaya": []
},
"target.source_artifact": "references/oracle/artifacts/pyjhora_steve_jobs_varshaphala_1984_lahiri_stdout_20260627.txt"
},
"integrity_checks": {
"must_not_come_from_local_engine": true,
"requires_external_artifact": true,
"requires_status_external_verified_before_calibration": true,
"requires_solar_return_convention": true
},
"promotion_status_after_fill": "external_verified"
}
@@ -0,0 +1,65 @@
{
"capture_id": "external_template_synthetic_extreme_latitude_varshaphala_kp",
"status": "draft",
"case_id": "template_synthetic_extreme_latitude_varshaphala_kp",
"birth": {
"year": 2000,
"month": 6,
"day": 21,
"hour": 0,
"minute": 0,
"second": 0,
"lat": 65.0,
"lon": 15.0,
"tz": 1
},
"settings": {
"ayanamsa": "kp",
"node_mode": "true",
"annual_system": "varshaphala",
"target_year": 2024
},
"required_metadata_fields": [
"tool_name",
"tool_version_or_url",
"capture_date",
"source_artifact",
"ayanamsa",
"node_mode",
"timezone",
"annual_system",
"target_year",
"operator_note"
],
"metadata": {
"tool_name": "",
"tool_version_or_url": "",
"capture_date": "",
"source_artifact": "references/oracle/artifacts/",
"ayanamsa": "kp",
"node_mode": "true",
"timezone": 1,
"annual_system": "varshaphala",
"target_year": 2024,
"operator_note": ""
},
"target_placeholders": {
"target.solar_return_datetime": null,
"target.varsha_lagna_deg": null,
"target.muntha_sign": null,
"target.year_lord": null,
"target.mudda_dasha_first_lord": null,
"target.sahams.punya_saham": null,
"target.sahams.rajya_saham": null,
"target.sahams.vivah_saham": null,
"target.tajika_yogas": null,
"target.source_artifact": null
},
"integrity_checks": {
"must_not_come_from_local_engine": true,
"requires_external_artifact": true,
"requires_status_external_verified_before_calibration": true,
"requires_solar_return_convention": true
},
"promotion_status_after_fill": "external_verified"
}
@@ -1,6 +1,6 @@
{
"scope": "pyjhora_oracle_artifact_manifest",
"generated_at": "2026-06-27T06:37:54.911742+00:00",
"generated_at": "2026-06-28T07:23:17.173699+00:00",
"artifact_count": 8,
"packet_count": 8,
"artifacts": [
@@ -0,0 +1,6 @@
{
"lagna_degree_d1": null,
"moon_nakshatra": null,
"sun_shadbala": null,
"sav_total": null
}
+6
View File
@@ -0,0 +1,6 @@
{
"lagna_degree_d1": null,
"moon_nakshatra": null,
"sun_shadbala": null,
"sav_total": null
}
@@ -0,0 +1,6 @@
{
"lagna_degree_d1": null,
"moon_nakshatra": null,
"sun_shadbala": null,
"sav_total": null
}
@@ -0,0 +1,6 @@
{
"lagna_degree_d1": null,
"moon_nakshatra": null,
"sun_shadbala": null,
"sav_total": null
}
+6
View File
@@ -0,0 +1,6 @@
{
"lagna_degree_d1": null,
"moon_nakshatra": null,
"sun_shadbala": null,
"sav_total": null
}
@@ -0,0 +1,6 @@
{
"lagna_degree_d1": null,
"moon_nakshatra": null,
"sun_shadbala": null,
"sav_total": null
}
@@ -0,0 +1,6 @@
{
"lagna_degree_d1": null,
"moon_nakshatra": null,
"sun_shadbala": null,
"sav_total": null
}
+6
View File
@@ -0,0 +1,6 @@
{
"lagna_degree_d1": null,
"moon_nakshatra": null,
"sun_shadbala": null,
"sav_total": null
}
@@ -0,0 +1,76 @@
{
"profile": {
"name": "一楠",
"dob": "REDACTED_DATETREDACTED_TIME:00+08:00",
"location": {
"latitude": "REDACTED_LAT'02\"",
"longitude": "REDACTED_LON'04\""
}
},
"d1_rasi": {
"lagna": "Leo",
"Sun": {"sign": "Aries", "degree": "3° 30' 14\""},
"Venus": {"sign": "Pisces", "degree": "10° 32' 23\""},
"Mercury": {"sign": "Pisces", "degree": "08° 31' 42\""},
"Mars": {"sign": "Cancer", "degree": "01° 18' 47\""},
"Jupiter": {"sign": "Virgo", "degree": "13° 49' 07\""},
"Saturn": {"sign": "Aquarius", "degree": "04° 17' 00\""},
"Moon": {"sign": "Aquarius", "degree": "11° 48' 16\""},
"Rahu": {"sign": "Scorpio", "degree": "21°"},
"Ketu": {"sign": "Taurus", "degree": "21°"}
},
"dignities_panchadha_maitri": {
"Sun": "Exaltation",
"Venus": "Exaltation",
"Saturn": "Mulatrikona",
"Moon": "Enemy's Sign",
"Jupiter": "Great Enemy's Sign",
"Mercury": "Debilitation",
"Mars": "Debilitation"
},
"d9_navamsha": {
"lagna": "Aries",
"Sun": "Pisces",
"Moon": "Pisces",
"Venus": "Libra",
"Rahu": "Capricorn",
"Mercury": "Virgo",
"Jupiter": "Taurus",
"Mars": "Aquarius",
"Saturn": "Scorpio",
"Ketu": "Cancer"
},
"d10_dashamsha": {
"lagna": "Cancer",
"Sun": "Pisces",
"Moon": "Pisces",
"Mars": "Aquarius",
"Mercury": "Virgo",
"Jupiter": "Taurus",
"Venus": "Libra",
"Saturn": "Scorpio",
"Rahu": "Capricorn",
"Ketu": "Cancer"
},
"d60_shashtiamsha": {
"lagna": "Cancer",
"Sun": "Scorpio",
"Moon": "Aquarius",
"Mars": "Virgo",
"Mercury": "Leo",
"Jupiter": "Sagittarius",
"Venus": "Sagittarius",
"Saturn": "Libra",
"Rahu": "Taurus",
"Ketu": "Scorpio"
},
"house_cusps": {
"6": "12 Cp 07'00\"",
"7": "13 Aq 19'56\"",
"8": "13 Pi 01'04\"",
"9": "11 Ar 33'27\"",
"10": "10 Ta 21'16\"",
"11": "10 Ge 35'53\"",
"12": "12 Cn 07'00\""
}
}
+4
View File
@@ -188,6 +188,10 @@ def first_token_path(value: str) -> str:
def output_path_exists(path: str) -> tuple[bool, str]:
if path.startswith("scripts/"):
rel = first_token_path(path)
if ":" in rel:
rel = rel.split(":", 1)[0]
elif ".py." in rel:
rel = rel.split(".py.", 1)[0] + ".py"
return (ROOT / rel).exists(), rel
if path.endswith(".py"):
return (ROOT / path).exists(), path
+15 -2
View File
@@ -2925,7 +2925,7 @@ class JyotishAPIHandler(BaseHTTPRequestHandler):
day = self._get_int(body, 'day', 1, 1, 31)
lat = self._get_float(body, 'lat', body.get('birth_lat', 0), -90, 90)
lon = self._get_float(body, 'lon', body.get('birth_lon', 0), -180, 180)
tz = self._parse_timezone(body, lat, lon, year, month, day, hour, minute, second)
tz = self._parse_timezone(body, lat, lon, year, month, day, birth_hour, birth_minute, birth_second)
hour_decimal = self._birth_hour_decimal(birth_hour, birth_minute, birth_second)
solar_lon = planets.get('Sun', {}).get('lon', 0)
base_planets = base_result.get('planets', {}) if isinstance(base_result, dict) else {}
@@ -2980,7 +2980,17 @@ class JyotishAPIHandler(BaseHTTPRequestHandler):
birth_dt = self._parse_birth_datetime(body)
lat = self._get_float(body, 'lat', body.get('birth_lat', 0), -90, 90)
lon = self._get_float(body, 'lon', body.get('birth_lon', 0), -180, 180)
tz = self._parse_timezone(body, lat, lon, year, month, day, hour, minute, second)
tz = self._parse_timezone(
body,
lat,
lon,
birth_dt.year,
birth_dt.month,
birth_dt.day,
birth_dt.hour,
birth_dt.minute,
birth_dt.second,
)
solar_return = _load_local_module('solar_return')
report = solar_return.solar_return_full_report(
birth_dt.year,
@@ -4558,6 +4568,9 @@ class JyotishAPIHandler(BaseHTTPRequestHandler):
inferred.append('ashtakavarga')
if 'ashtakavarga' in domains and 'sodhita' in name:
inferred.append('ashtakavarga')
if key == 'bhrigu_bindu' or 'calc_bhrigu_bindu' in path_text:
inferred.append('full-reading')
inferred.append('varga-full')
return sorted(set(inferred))
def _productization_next_action(self, level, commands, api_commands, visible_markers):
+294
View File
@@ -0,0 +1,294 @@
#!/usr/bin/env python3
"""Build a single-truth inventory for oracle and benchmark assets."""
from __future__ import annotations
import argparse
import json
from collections import defaultdict
from datetime import datetime, timezone
from pathlib import Path
from typing import Any
ROOT = Path(__file__).resolve().parents[1]
ORACLE_DIR = ROOT / "references" / "oracle"
ARTIFACTS_DIR = ORACLE_DIR / "artifacts"
PENDING_PACKETS_DIR = ARTIFACTS_DIR / "pending_packets"
CASES_DIR = ORACLE_DIR / "cases"
EVIDENCE_TEMPLATES_DIR = ORACLE_DIR / "evidence_packet_templates"
DOCS_DIR = ROOT / "docs" / "research"
PYJHORA_MANIFEST = ARTIFACTS_DIR / "pyjhora_oracle_artifact_manifest.json"
DASHBOARD_CANDIDATES = [
DOCS_DIR / "oracle_closure_master_dashboard_latest.md",
DOCS_DIR / "public_benchmark_dashboard_latest.md",
DOCS_DIR / "tajika_annual_benchmark_dashboard_latest.md",
DOCS_DIR / "tajika_annual_closure_status_latest.md",
]
def _relative(path: Path) -> str:
return str(path.relative_to(ROOT))
def _front_for_name(name: str) -> str:
lowered = name.lower()
if "ashtakoot" in lowered or "koota" in lowered:
return "ashtakoot"
if "varshaphala" in lowered or "saham" in lowered or "tajika" in lowered or "annual" in lowered:
return "tajika_sahams"
if "shadbala" in lowered or "moon_longitude" in lowered:
return "shadbala"
if "dasha" in lowered or "vimshottari" in lowered or "historical_epoch" in lowered:
return "dasha"
return "general"
def _load_json(path: Path) -> tuple[dict[str, Any] | list[Any] | None, str | None]:
try:
data = json.loads(path.read_text(encoding="utf-8"))
except Exception as exc: # pragma: no cover - exact parser messages vary
return None, f"{type(exc).__name__}: {exc}"
if isinstance(data, (dict, list)):
return data, None
return None, "JSON root is not an object or array"
def _compact_json_metadata(path: Path, data: dict[str, Any] | list[Any] | None) -> dict[str, Any]:
if not isinstance(data, dict):
return {}
metadata: dict[str, Any] = {}
for key in ("scope", "schema_version", "status", "case_id", "capture_id", "id", "source"):
if key in data:
metadata[key] = data[key]
if isinstance(data.get("metadata"), dict):
source_artifact = data["metadata"].get("source_artifact")
tool_name = data["metadata"].get("tool_name")
if source_artifact:
metadata["source_artifact"] = source_artifact
if tool_name:
metadata["tool_name"] = tool_name
if isinstance(data.get("settings"), dict):
settings = data["settings"]
for key in ("ayanamsa", "node_mode", "annual_system", "target_year"):
if key in settings:
metadata[key] = settings[key]
for case_list_key in ("template_cases", "longitude_cases", "ashtakoot_cases", "cases"):
if isinstance(data.get(case_list_key), list):
metadata[f"{case_list_key}_count"] = len(data[case_list_key])
target_placeholders = data.get("target_placeholders")
if isinstance(target_placeholders, dict):
metadata["target_placeholder_count"] = len(target_placeholders)
if path.name == PYJHORA_MANIFEST.name:
metadata["artifact_count"] = data.get("artifact_count")
metadata["packet_count"] = data.get("packet_count")
return metadata
def _file_entry(path: Path, category: str) -> dict[str, Any]:
entry: dict[str, Any] = {
"path": _relative(path),
"name": path.name,
"category": category,
"front": _front_for_name(path.name),
"bytes": path.stat().st_size,
}
if path.suffix == ".json":
data, error = _load_json(path)
entry["json_valid"] = error is None
if error:
entry["json_error"] = error
entry.update(_compact_json_metadata(path, data))
return entry
def _existing_files(paths: list[Path]) -> list[Path]:
return [path for path in paths if path.is_file()]
def _front_summary(groups: dict[str, list[dict[str, Any]]]) -> dict[str, dict[str, int]]:
fronts: dict[str, dict[str, int]] = defaultdict(
lambda: {
"oracle_registry_count": 0,
"oracle_case_count": 0,
"evidence_template_count": 0,
"pending_packet_count": 0,
"pyjhora_artifact_count": 0,
"dashboard_count": 0,
}
)
category_map = {
"oracle_registries": "oracle_registry_count",
"oracle_cases": "oracle_case_count",
"evidence_templates": "evidence_template_count",
"pending_packets": "pending_packet_count",
"pyjhora_artifacts": "pyjhora_artifact_count",
"dashboards": "dashboard_count",
}
for group_name, count_key in category_map.items():
for entry in groups.get(group_name, []):
fronts[entry["front"]][count_key] += 1
return {front: dict(payload) for front, payload in sorted(fronts.items())}
def _count_pyjhora_packets(entries: list[dict[str, Any]]) -> int:
return sum(1 for entry in entries if "pyjhora_" in entry["name"].lower())
def build_inventory() -> dict[str, Any]:
oracle_registries = [
_file_entry(path, "oracle_registry")
for path in sorted(ORACLE_DIR.glob("*_oracle_cases.json"))
if path.is_file()
]
oracle_cases = [
_file_entry(path, "oracle_case")
for path in sorted(CASES_DIR.glob("*.json"))
if path.is_file()
]
evidence_templates = [
_file_entry(path, "evidence_template")
for path in sorted(EVIDENCE_TEMPLATES_DIR.glob("*.json"))
if path.is_file()
]
pending_packets = [
_file_entry(path, "pending_packet")
for path in sorted(PENDING_PACKETS_DIR.glob("*.json"))
if path.is_file()
]
pyjhora_artifacts = [
_file_entry(path, "pyjhora_artifact")
for path in sorted(ARTIFACTS_DIR.glob("pyjhora_*"))
if path.is_file() and path.name != PYJHORA_MANIFEST.name
]
dashboards = [
_file_entry(path, "dashboard")
for path in _existing_files(DASHBOARD_CANDIDATES)
]
pyjhora_manifest_entry = _file_entry(PYJHORA_MANIFEST, "pyjhora_manifest") if PYJHORA_MANIFEST.is_file() else {}
groups = {
"oracle_registries": oracle_registries,
"oracle_cases": oracle_cases,
"evidence_templates": evidence_templates,
"pending_packets": pending_packets,
"pyjhora_artifacts": pyjhora_artifacts,
"dashboards": dashboards,
}
pending_pyjhora_packet_count = _count_pyjhora_packets(pending_packets)
summary = {
"oracle_registry_count": len(oracle_registries),
"oracle_case_count": len(oracle_cases),
"evidence_template_count": len(evidence_templates),
"pending_packet_count": len(pending_packets),
"pending_pyjhora_packet_count": pending_pyjhora_packet_count,
"pending_non_pyjhora_packet_count": len(pending_packets) - pending_pyjhora_packet_count,
"pyjhora_artifact_count": len(pyjhora_artifacts),
"dashboard_count": len(dashboards),
}
return {
"scope": "oracle_benchmark_single_truth_inventory",
"schema_version": 1,
"generated_at": datetime.now(timezone.utc).isoformat(),
"summary": summary,
"fronts": _front_summary(groups),
"files": {
"oracle_registries": oracle_registries,
"oracle_cases": oracle_cases,
"evidence_templates": evidence_templates,
"pending_packets": pending_packets,
"pyjhora_artifacts": pyjhora_artifacts,
"pyjhora_manifest": pyjhora_manifest_entry,
"dashboards": dashboards,
},
"boundary": (
"This inventory tracks external oracle evidence only. It does not import PyJHora/JHora "
"implementation code, does not tune production constants, and does not treat internal "
"consistency as external validation."
),
"next_actions": [
"Promote verified pending packets into the relevant oracle registry only after metadata and source_artifact pass validation.",
"Keep PyJHora outputs as black-box artifacts and regenerate the artifact manifest after each external capture batch.",
"Update public_benchmark_dashboard_latest.md after each validated packet batch so public claims stay conservative.",
"Use this inventory before changing strict workflow or adjudicator logic that depends on external truth.",
],
}
def render_markdown(report: dict[str, Any]) -> str:
summary = report["summary"]
lines = [
"# Oracle Benchmark Single-Truth Inventory",
"",
f"Generated: `{report['generated_at']}`",
"",
"## Summary",
"",
f"- oracle_registry_count: `{summary['oracle_registry_count']}`",
f"- oracle_case_count: `{summary['oracle_case_count']}`",
f"- evidence_template_count: `{summary['evidence_template_count']}`",
f"- pending_packet_count: `{summary['pending_packet_count']}`",
f"- pending_pyjhora_packet_count: `{summary['pending_pyjhora_packet_count']}`",
f"- pending_non_pyjhora_packet_count: `{summary['pending_non_pyjhora_packet_count']}`",
f"- pyjhora_artifact_count: `{summary['pyjhora_artifact_count']}`",
f"- dashboard_count: `{summary['dashboard_count']}`",
"",
"## Oracle Registries",
"",
]
for entry in report["files"]["oracle_registries"]:
lines.append(f"- `{entry['path']}` ({entry['front']})")
lines.extend(["", "## Oracle Case Files", ""])
for entry in report["files"]["oracle_cases"]:
lines.append(f"- `{entry['path']}` ({entry['front']})")
lines.extend(["", "## Pending Evidence Packets", ""])
for entry in report["files"]["pending_packets"]:
status = entry.get("status", "unknown")
case_id = entry.get("case_id") or entry.get("capture_id") or entry["name"]
lines.append(f"- `{entry['path']}` ({entry['front']}, status: `{status}`, case: `{case_id}`)")
lines.extend(["", "## PyJHora Black-Box Assets", ""])
for entry in report["files"]["pyjhora_artifacts"]:
lines.append(f"- `{entry['path']}` ({entry['front']})")
manifest = report["files"].get("pyjhora_manifest") or {}
if manifest:
lines.extend(["", f"Manifest: `{manifest['path']}`"])
lines.extend(["", "## Dashboards", ""])
for entry in report["files"]["dashboards"]:
lines.append(f"- `{entry['path']}`")
lines.extend(["", "## Boundary", "", report["boundary"], "", "## Next Actions", ""])
lines.extend(f"- {item}" for item in report["next_actions"])
lines.append("")
return "\n".join(lines)
def parse_args(argv: list[str] | None = None) -> argparse.Namespace:
parser = argparse.ArgumentParser(description="Generate oracle/benchmark single-truth inventory")
parser.add_argument("--format", choices=["json", "markdown"], default="json")
parser.add_argument("--output", help="Optional output path")
return parser.parse_args(argv)
def main(argv: list[str] | None = None) -> int:
args = parse_args(argv)
report = build_inventory()
text = json.dumps(report, ensure_ascii=False, indent=2) if args.format == "json" else render_markdown(report)
if args.output:
output = Path(args.output)
output.parent.mkdir(parents=True, exist_ok=True)
output.write_text(text + ("\n" if not text.endswith("\n") else ""), encoding="utf-8")
print(text)
return 0
if __name__ == "__main__":
raise SystemExit(main())
+2
View File
@@ -11,6 +11,8 @@ related_skills: [jyotish-full-reading-integration, jyotish-vedic-astrology]
本 skill 记录了 5 个核心计算模块的历史集成背景,主要用于审计、迁移和对照旧工作流。
本 Skill 的 `scripts/` 副本仅作为独立分发包与历史迁移参考;主仓当前计算真源、成熟度判断、外部 oracle 边界和发布口径一律以主 `SKILL.md`、`references/technique_registry.json` 与主仓测试为准。
当前项目的唯一对外真源以以下文件为准:
1. `/Users/wuyongnaren/Documents/印度占星/SKILL.md`
+9
View File
@@ -766,6 +766,15 @@ def test_fragment_audit_blocks_registry_surface_drift() -> None:
assert not any(problem['kind'] == 'missing_output_path' for problem in result['problems'])
def test_fragment_audit_accepts_script_symbol_output_paths() -> None:
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'scripts'))
from audit_fragments import output_path_exists
assert output_path_exists("scripts/yoga_engine.py:is_badhaka")[0] is True
assert output_path_exists("scripts/prashna.py:calc_sphutas")[0] is True
assert output_path_exists("scripts/tajika.py.graha_yuddha")[0] is True
def _sample_planets() -> dict:
return {
'Sun': {'lon': 80.0},
+76
View File
@@ -0,0 +1,76 @@
#!/usr/bin/env python3
"""Tests for the oracle/benchmark single-truth inventory."""
from __future__ import annotations
import json
import subprocess
import sys
from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
def run_inventory(*args: str) -> subprocess.CompletedProcess[str]:
return subprocess.run(
[sys.executable, "scripts/oracle_benchmark_inventory.py", *args],
cwd=ROOT,
text=True,
capture_output=True,
timeout=60,
check=False,
)
def test_oracle_benchmark_inventory_maps_high_value_assets() -> None:
completed = run_inventory("--format", "json")
assert completed.returncode == 0, completed.stderr or completed.stdout
report = json.loads(completed.stdout)
assert report["scope"] == "oracle_benchmark_single_truth_inventory"
assert report["schema_version"] == 1
assert report["summary"]["oracle_registry_count"] >= 3
assert report["summary"]["oracle_case_count"] >= 9
assert report["summary"]["pending_packet_count"] >= 18
assert report["summary"]["pyjhora_artifact_count"] >= 8
assert report["files"]["pyjhora_manifest"]["path"].endswith(
"references/oracle/artifacts/pyjhora_oracle_artifact_manifest.json"
)
registry_paths = {entry["path"] for entry in report["files"]["oracle_registries"]}
assert "references/oracle/dasha_shadbala_oracle_cases.json" in registry_paths
assert "references/oracle/tajika_annual_oracle_cases.json" in registry_paths
case_paths = {entry["path"] for entry in report["files"]["oracle_cases"]}
assert "references/oracle/cases/steve_jobs.json" in case_paths
assert "references/oracle/cases/marilyn_monroe.json" in case_paths
pending_paths = {entry["path"] for entry in report["files"]["pending_packets"]}
assert (
"references/oracle/artifacts/pending_packets/"
"external_template_steve_jobs_varshaphala_1984_lahiri.json"
) in pending_paths
assert (
"references/oracle/artifacts/pending_packets/"
"external_template_historical_dst_london_varshaphala_1943_lahiri.json"
) in pending_paths
assert report["fronts"]["dasha"]["pending_packet_count"] >= 3
assert report["fronts"]["shadbala"]["pending_packet_count"] >= 4
assert report["fronts"]["tajika_sahams"]["pending_packet_count"] >= 5
assert "external oracle evidence only" in report["boundary"]
def test_oracle_benchmark_inventory_outputs_markdown_and_can_write_file(tmp_path: Path) -> None:
output = tmp_path / "oracle_benchmark_inventory.md"
completed = run_inventory("--format", "markdown", "--output", str(output))
assert completed.returncode == 0, completed.stderr or completed.stdout
assert output.exists()
markdown = output.read_text(encoding="utf-8")
assert "# Oracle Benchmark Single-Truth Inventory" in markdown
assert "Oracle Registries" in markdown
assert "Pending Evidence Packets" in markdown
assert "PyJHora Black-Box Assets" in markdown
assert "Next Actions" in markdown
+24 -15
View File
@@ -53,27 +53,28 @@ def test_oracle_collection_queue_outputs_executable_json_tasks() -> None:
assert report["scope"] == "external_oracle_collection_queue"
assert report["summary"]["total_tasks"] == 5
assert report["summary"]["ready_for_calibration"] == 0
assert report["summary"]["by_status"]["template_only"] == 5
assert report["summary"]["ready_for_calibration"] == 4
assert report["summary"]["ready_for_collection"] == 1
assert report["summary"]["by_status"]["external_verified"] == 5
assert report["summary"]["production_tuning_allowed"] is False
first = report["tasks"][0]
assert first["case_id"] == "template_user_REDACTED_YEAR_moon_longitude_lahiri"
assert first["status"] == "template_only"
assert first["ready_for_collection"] is True
assert first["ready_for_calibration"] is False
assert "target.moon_sidereal_longitude_deg" in first["missing_target_fields"]
assert first["status"] == "external_verified"
assert first["ready_for_collection"] is False
assert first["ready_for_calibration"] is True
assert first["missing_target_fields"] == []
assert "longitude" in first["target_modules"]
assert "dasha" in first["target_modules"]
assert "shadbala" in first["target_modules"]
assert any("JHora" in source for source in first["preferred_sources"])
assert any("VedAstro" in source for source in first["preferred_sources"])
assert first["promotion_criteria"]
assert first["do_not_tune_production"] is True
assert first["do_not_tune_production"] is False
packet = first["evidence_packet"]
assert packet["capture_id"] == "external_template_user_REDACTED_YEAR_moon_longitude_lahiri"
assert packet["status"] == "draft"
assert packet["status"] == "external_verified"
assert packet["case_id"] == first["case_id"]
assert packet["birth"] == first["birth"]
assert packet["settings"] == first["settings"]
@@ -82,10 +83,17 @@ def test_oracle_collection_queue_outputs_executable_json_tasks() -> None:
assert "capture_date" in packet["required_metadata_fields"]
assert "source_artifact" in packet["required_metadata_fields"]
assert "target.moon_sidereal_longitude_deg" in packet["target_placeholders"]
assert packet["target_placeholders"]["target.moon_sidereal_longitude_deg"] is None
assert packet["target_placeholders"]["target.moon_sidereal_longitude_deg"] == 311.774424
assert packet["integrity_checks"]["must_not_come_from_local_engine"] is True
assert packet["integrity_checks"]["requires_external_artifact"] is True
blocked = next(task for task in report["tasks"] if task["case_id"] == "template_historical_epoch_lahiri")
assert blocked["status"] == "external_verified"
assert blocked["ready_for_collection"] is True
assert blocked["ready_for_calibration"] is False
assert blocked["do_not_tune_production"] is True
assert blocked["missing_target_fields"] == ["target.sun_sidereal_longitude_deg"]
def test_oracle_collection_queue_outputs_markdown_table() -> None:
completed = run_queue("--format", "markdown")
@@ -95,7 +103,8 @@ def test_oracle_collection_queue_outputs_markdown_table() -> None:
assert "# Dasha/Shadbala External Oracle Collection Queue" in markdown
assert "| task_id | case_id | status | missing fields | preferred sources |" in markdown
assert "collect_template_user_REDACTED_YEAR_moon_longitude_lahiri" in markdown
assert "`template_only`" in markdown
assert "`external_verified`" in markdown
assert "target.sun_sidereal_longitude_deg" in markdown
assert "production_tuning_allowed: `false`" in markdown
assert "Evidence Packet Fields" in markdown
assert "tool_name" in markdown
@@ -113,11 +122,11 @@ def test_oracle_collection_queue_can_write_draft_evidence_packets(tmp_path: Path
assert packet_path.exists()
packet = json.loads(packet_path.read_text(encoding="utf-8"))
assert packet["capture_id"] == "external_template_steve_jobs_dasha_lahiri"
assert packet["status"] == "draft"
assert packet["status"] == "external_verified"
assert packet["case_id"] == "template_steve_jobs_dasha_lahiri"
assert packet["metadata"]["source_artifact"] == "references/oracle/artifacts/"
assert packet["metadata"]["tool_name"] == ""
assert packet["target_placeholders"]["target.vimshottari_start_date"] is None
assert packet["metadata"]["source_artifact"].startswith("references/oracle/artifacts/")
assert packet["metadata"]["tool_name"] == "PyJHora"
assert packet["target_placeholders"]["target.vimshottari_start_date"] == "1939-03-22"
shadbala = packet["target_placeholders"]["target.shadbala_components"]
assert set(shadbala) == {"Sun", "Moon", "Mars", "Mercury", "Jupiter", "Venus", "Saturn"}
assert set(shadbala["Sun"]) == {"sthana", "dig", "kala", "chesta", "naisargika", "drik", "total_rupa"}
@@ -282,7 +291,7 @@ def test_oracle_collection_queue_preserves_external_verified_evidence(tmp_path:
assert first["ready_for_collection"] is False
assert first["ready_for_calibration"] is True
assert first["do_not_tune_production"] is False
assert report["summary"]["ready_for_calibration"] == 1
assert report["summary"]["ready_for_calibration"] == 4
assert report["summary"]["production_tuning_allowed"] is False
packet = first["evidence_packet"]