From e054f5b663fe9ca813d52bcb600c26ba93b57d0f Mon Sep 17 00:00:00 2001 From: 732642856 <732642856@qq.com> Date: Thu, 2 Jul 2026 01:22:53 +0800 Subject: [PATCH] fix: stabilize vedastro oracle closure boundaries --- README.md | 10 ++-- .../first_oracle_packet_assistant_index.json | 28 ++++----- .../first_oracle_packet_assistant_index.md | 24 ++++---- ...ernal_oracle_closure_master_dashboard.json | 7 ++- ...xternal_oracle_closure_master_dashboard.md | 24 +++----- ...ika_sahams_annual_benchmark_dashboard.json | 2 +- ...ajika_sahams_annual_benchmark_dashboard.md | 2 +- .../oracle_closure_master_dashboard_latest.md | 7 ++- ...-07-02-vedastro-narayana-tajika-closure.md | 57 +++++++++++++++++++ scripts/first_oracle_packet_assistant.py | 4 ++ scripts/generate_blank_oracle.py | 2 +- scripts/oracle_closure_master_dashboard.py | 10 +++- scripts/tajika_annual_oracle_queue.py | 3 +- scripts/vedastro_service_adapter.py | 21 ++++++- tests/test_first_oracle_packet_assistant.py | 8 +-- tests/test_generate_blank_oracle.py | 6 +- tests/test_oracle_closure_master_dashboard.py | 15 ++--- tests/test_oracle_packet_assistant_index.py | 11 ++-- tests/test_tajika_annual_oracle_queue.py | 8 ++- .../test_tajika_first_packet_operator_card.py | 4 +- 20 files changed, 165 insertions(+), 88 deletions(-) create mode 100644 docs/superpowers/plans/2026-07-02-vedastro-narayana-tajika-closure.md diff --git a/README.md b/README.md index 130931e2..7273392e 100644 --- a/README.md +++ b/README.md @@ -140,7 +140,7 @@ python3 scripts/oracle_boundary_audit.py \ --oracle-file references/oracle/dasha_shadbala_oracle_cases.json ``` -该报告会明确标出 `production_tuning_recommended: false`:Dasha 当前只有单份 PDF 起点差异样本;VedAstro SDK 黄经样本已纳入 `longitude_cases`,当前用户盘最大差异约 26.23 角秒、D1/D9 落点一致,但这只能说明基础黄经接近;Shadbala 还缺 Sthana/Dig/Kala/Chesta/Naisargika/Drik 分量级外部目标值,因此不能声称 Dasha/Shadbala 已完成外部绝对值校准。 +该报告会明确标出 `production_tuning_recommended: false`:当前目标集已有外部验证行,但差异审计仍会拒绝单样本或全局倍率调参;VedAstro SDK 黄经样本已纳入 `longitude_cases`,用户盘最大差异约 26.23 角秒、D1/D9 落点一致,但这只能说明基础黄经接近,不能把当前目标集闭合夸大成生产级全局校准。 三方官方/外部 oracle sanity 总控命令: @@ -174,7 +174,7 @@ python3 scripts/prepare_oracle_capture_packets.py \ --output-dir references/oracle/artifacts/pending_packets ``` -该命令会生成 `capture_manifest.json`、`OPERATOR_NEXT_STEPS.md` 和 5 个 `external_*.json`,并在输出中确认 draft 队列仍是 `valid_packets: 0` / `ready_for_calibration: 0`。 +该命令会生成 `capture_manifest.json`、`OPERATOR_NEXT_STEPS.md` 和 5 个 `external_*.json`。这些导出包只是人工复核/再采集入口;当前主 oracle 文件的目标集状态以 closure dashboard 和 validator 输出为准。 如果只想优先准备当前最短闭环链路的三条首包,而不是一次性导出整批 pending packets,可直接生成统一 blank kit: @@ -196,7 +196,7 @@ python3 scripts/oracle_collection_queue.py \ 这一步只负责把人工填写的外部证据写回 `template_cases`;它不会自动认可证据,也不会允许生产调参。合并后仍必须重新生成 queue 并运行 validator。 -该 JSON 的 scope 是 `external_oracle_collection_queue`。当前队列有 5 个 `template_only` 任务、`ready_for_calibration: 0`、`production_tuning_allowed: false`,说明只能继续采集 JHora/PyJHora/VedAstro 等外部黑盒目标值;在模板字段未填充、状态未升为 `external_verified` 前,不能用这些样本做 Dasha/Shadbala 生产调参。 +该 JSON 的 scope 是 `external_oracle_collection_queue`。当前目标集可以出现 `external_verified` 与 `ready_for_calibration` 已闭合的状态,但 `production_tuning_allowed` 仍保持 `false`;这表示只能把外部黑盒目标值作为审计证据,不能直接用这些样本做 Dasha/Shadbala 生产调参。 Ashtakoot 外部合婚 oracle 使用同一个队列生成器,但独立样本文件是 `references/oracle/ashtakoot_oracle_cases.json`: @@ -223,7 +223,7 @@ python3 scripts/oracle_evidence_validator.py \ --queue-file /path/to/filled_external_oracle_collection_queue.json ``` -该验证器输出 `external_oracle_evidence_validation`,会检查 `evidence_packet` 必填元数据、`target_placeholders` 是否已填、是否覆盖 `target_fields`、是否包含外部 artifact,以及是否错误使用本仓库本地引擎输出。当前 draft 队列会保持 `valid_packets: 0` / `ready_for_calibration: 0`;只有状态为 `external_verified` 且证据完整的包才会进入可复核状态。 +该验证器输出 `external_oracle_evidence_validation`,会检查 `evidence_packet` 必填元数据、`target_placeholders` 是否已填、是否覆盖 `target_fields`、是否包含外部 artifact,以及是否错误使用本仓库本地引擎输出。只有状态为 `external_verified` 且证据完整的包才会进入可复核状态;通过 validator 不等于允许生产调参。 证据包通过 validator 之后,再运行边界差异审计,比较本地引擎与外部 Dasha/Shadbala 目标值: @@ -255,7 +255,7 @@ python3 scripts/oracle_closure_master_dashboard.py \ --output docs/benchmark/jyotish_external_oracle_closure_master_dashboard.md ``` -当前总控看板固定输出 `total_tasks: 12`、`external_verified_tasks: 0`、`can_claim_global_oracle_closure: false`。推荐执行顺序是先填 Dasha 第一条 6 个字段,再填 Tajika/Sahams 第一条 15 个字段,最后填 Shadbala 第一条 55 个字段。 +当前总控看板输出 `total_tasks: 12`、`external_verified_tasks: 12`、`can_claim_current_target_set_closure: true`,但 `can_claim_global_oracle_closure: false` 与 `production_tuning_allowed: false` 仍保持锁定。含义是当前目标集已闭合,不能夸大成全球 oracle、预测准确率或生产调参闭环。 Dasha 外部 oracle 最短闭环状态板用于把“大运外部真值”从 Shadbala 绝对值大包中拆出来,优先推进第一条可验证边界日期: diff --git a/docs/benchmark/first_oracle_packet_assistant_index.json b/docs/benchmark/first_oracle_packet_assistant_index.json index 160f790d..5b4e70c9 100644 --- a/docs/benchmark/first_oracle_packet_assistant_index.json +++ b/docs/benchmark/first_oracle_packet_assistant_index.json @@ -1,10 +1,10 @@ { "scope": "first_oracle_packet_assistant_index", "schema_version": 1, - "generated_at": "2026-07-01T12:10:01.504983+00:00", + "generated_at": "2026-07-01T17:18:16.004689+00:00", "summary": { "front_count": 3, - "all_ready_to_apply": false + "all_ready_to_apply": true }, "fronts": { "dasha": { @@ -21,8 +21,8 @@ "capture_id": "external_template_einstein_varshaphala_1905_lahiri", "operator_card": "docs/benchmark/tajika_einstein_1905_first_packet_operator_card.md", "packet_template": "references/oracle/artifacts/pending_packets/external_template_einstein_varshaphala_1905_lahiri.json", - "missing_field_count": 4, - "ready_to_apply": false, + "missing_field_count": 0, + "ready_to_apply": true, "apply_command": "python3 scripts/tajika_annual_oracle_queue.py --oracle-file references/oracle/tajika_annual_oracle_cases.json --apply-packet references/oracle/artifacts/pending_packets/external_template_einstein_varshaphala_1905_lahiri.json --format json" }, "shadbala": { @@ -36,16 +36,6 @@ } }, "recommended_order": [ - { - "front": "tajika_sahams", - "case_id": "template_einstein_varshaphala_1905_lahiri", - "capture_id": "external_template_einstein_varshaphala_1905_lahiri", - "operator_card": "docs/benchmark/tajika_einstein_1905_first_packet_operator_card.md", - "packet_template": "references/oracle/artifacts/pending_packets/external_template_einstein_varshaphala_1905_lahiri.json", - "missing_field_count": 4, - "ready_to_apply": false, - "apply_command": "python3 scripts/tajika_annual_oracle_queue.py --oracle-file references/oracle/tajika_annual_oracle_cases.json --apply-packet references/oracle/artifacts/pending_packets/external_template_einstein_varshaphala_1905_lahiri.json --format json" - }, { "front": "dasha", "case_id": "template_steve_jobs_dasha_lahiri", @@ -56,6 +46,16 @@ "ready_to_apply": true, "apply_command": "" }, + { + "front": "tajika_sahams", + "case_id": "template_einstein_varshaphala_1905_lahiri", + "capture_id": "external_template_einstein_varshaphala_1905_lahiri", + "operator_card": "docs/benchmark/tajika_einstein_1905_first_packet_operator_card.md", + "packet_template": "references/oracle/artifacts/pending_packets/external_template_einstein_varshaphala_1905_lahiri.json", + "missing_field_count": 0, + "ready_to_apply": true, + "apply_command": "python3 scripts/tajika_annual_oracle_queue.py --oracle-file references/oracle/tajika_annual_oracle_cases.json --apply-packet references/oracle/artifacts/pending_packets/external_template_einstein_varshaphala_1905_lahiri.json --format json" + }, { "front": "shadbala", "case_id": "template_redacted_place_shadbala_raman", diff --git a/docs/benchmark/first_oracle_packet_assistant_index.md b/docs/benchmark/first_oracle_packet_assistant_index.md index b85a4be6..1225e764 100644 --- a/docs/benchmark/first_oracle_packet_assistant_index.md +++ b/docs/benchmark/first_oracle_packet_assistant_index.md @@ -1,27 +1,17 @@ # First Oracle Packet Assistant Index -Generated: `2026-07-01T12:10:00.866943+00:00` +Generated: `2026-07-01T17:18:16.817728+00:00` ## Fronts | front | case_id | missing fields | ready_to_apply | |---|---|---:|---| | `dasha` | `template_steve_jobs_dasha_lahiri` | 0 | `true` | -| `tajika_sahams` | `template_einstein_varshaphala_1905_lahiri` | 4 | `false` | +| `tajika_sahams` | `template_einstein_varshaphala_1905_lahiri` | 0 | `true` | | `shadbala` | `template_redacted_place_shadbala_raman` | 0 | `true` | ## Recommended Order -### tajika_sahams - -- case_id: `template_einstein_varshaphala_1905_lahiri` -- missing_field_count: `4` -- operator_card: `docs/benchmark/tajika_einstein_1905_first_packet_operator_card.md` - -```bash -python3 scripts/tajika_annual_oracle_queue.py --oracle-file references/oracle/tajika_annual_oracle_cases.json --apply-packet references/oracle/artifacts/pending_packets/external_template_einstein_varshaphala_1905_lahiri.json --format json -``` - ### dasha - case_id: `template_steve_jobs_dasha_lahiri` @@ -32,6 +22,16 @@ python3 scripts/tajika_annual_oracle_queue.py --oracle-file references/oracle/ta ``` +### tajika_sahams + +- case_id: `template_einstein_varshaphala_1905_lahiri` +- missing_field_count: `0` +- operator_card: `docs/benchmark/tajika_einstein_1905_first_packet_operator_card.md` + +```bash +python3 scripts/tajika_annual_oracle_queue.py --oracle-file references/oracle/tajika_annual_oracle_cases.json --apply-packet references/oracle/artifacts/pending_packets/external_template_einstein_varshaphala_1905_lahiri.json --format json +``` + ### shadbala - case_id: `template_redacted_place_shadbala_raman` diff --git a/docs/benchmark/jyotish_external_oracle_closure_master_dashboard.json b/docs/benchmark/jyotish_external_oracle_closure_master_dashboard.json index 7a9b0668..80852395 100644 --- a/docs/benchmark/jyotish_external_oracle_closure_master_dashboard.json +++ b/docs/benchmark/jyotish_external_oracle_closure_master_dashboard.json @@ -1,12 +1,13 @@ { "scope": "jyotish_external_oracle_closure_master_dashboard", "schema_version": 1, - "generated_at": "2026-07-01T11:36:23.191939+00:00", + "generated_at": "2026-07-01T17:18:15.526423+00:00", "summary": { "total_tasks": 12, "external_verified_tasks": 12, "open_tasks": 0, - "can_claim_global_oracle_closure": true, + "can_claim_current_target_set_closure": true, + "can_claim_global_oracle_closure": false, "production_tuning_allowed": false }, "fronts": { @@ -84,5 +85,5 @@ } }, "next_action_order": [], - "boundary": "This dashboard merges external evidence readiness only. It does not claim prediction accuracy, does not tune production constants, and does not treat local engine output as oracle evidence." + "boundary": "This dashboard merges current target-set external evidence readiness only. A closed target set does not claim global oracle closure, does not claim prediction accuracy, does not tune production constants, and does not treat local engine output as oracle evidence." } \ No newline at end of file diff --git a/docs/benchmark/jyotish_external_oracle_closure_master_dashboard.md b/docs/benchmark/jyotish_external_oracle_closure_master_dashboard.md index 6bac45ea..fc6461d8 100644 --- a/docs/benchmark/jyotish_external_oracle_closure_master_dashboard.md +++ b/docs/benchmark/jyotish_external_oracle_closure_master_dashboard.md @@ -1,12 +1,13 @@ # Jyotish External Oracle Closure Master Dashboard -Generated: `2026-06-27T08:02:16.707529+00:00` +Generated: `2026-07-01T17:18:16.113511+00:00` ## Summary - total_tasks: `12` -- external_verified_tasks: `8` -- open_tasks: `4` +- external_verified_tasks: `12` +- open_tasks: `0` +- can_claim_current_target_set_closure: `true` - can_claim_global_oracle_closure: `false` - production_tuning_allowed: `false` @@ -15,22 +16,11 @@ Generated: `2026-06-27T08:02:16.707529+00:00` | front | tasks | verified | first priority | missing fields | manual entries | metadata missing | target missing | |---|---:|---:|---|---:|---:|---:|---:| | `dasha` | 3 | 3 | `complete` | 0 | 0 | 0 | 0 | -| `tajika_sahams` | 5 | 1 | `template_einstein_varshaphala_1905_lahiri` | 15 | 15 | 5 | 10 | -| `shadbala` | 4 | 4 | `template_redacted_place_shadbala_raman` | 55 | 55 | 5 | 50 | +| `tajika_sahams` | 5 | 5 | `template_einstein_varshaphala_1905_lahiri` | 0 | 0 | 0 | 0 | +| `shadbala` | 4 | 4 | `complete` | 0 | 0 | 0 | 0 | ## Next Action Order -### tajika_sahams - -- case_id: `template_einstein_varshaphala_1905_lahiri` -- capture_id: `external_template_einstein_varshaphala_1905_lahiri` -- missing_field_count: `15` -- manual_entry_count: `15` - -```bash -python3 scripts/tajika_annual_oracle_queue.py --oracle-file references/oracle/tajika_annual_oracle_cases.json --apply-packet references/oracle/artifacts/pending_packets/external_template_einstein_varshaphala_1905_lahiri.json --format json -``` - ## Boundary -This dashboard merges external evidence readiness only. It does not claim prediction accuracy, does not tune production constants, and does not treat local engine output as oracle evidence. +This dashboard merges current target-set external evidence readiness only. A closed target set does not claim global oracle closure, does not claim prediction accuracy, does not tune production constants, and does not treat local engine output as oracle evidence. diff --git a/docs/benchmark/tajika_sahams_annual_benchmark_dashboard.json b/docs/benchmark/tajika_sahams_annual_benchmark_dashboard.json index 68ad82c9..43c7452b 100644 --- a/docs/benchmark/tajika_sahams_annual_benchmark_dashboard.json +++ b/docs/benchmark/tajika_sahams_annual_benchmark_dashboard.json @@ -1,7 +1,7 @@ { "scope": "tajika_sahams_annual_benchmark_dashboard", "schema_version": 1, - "generated_at": "2026-07-01T12:45:56.592875+00:00", + "generated_at": "2026-07-01T17:18:15.076192+00:00", "summary": { "total_tasks": 5, "ready_for_collection": 0, diff --git a/docs/benchmark/tajika_sahams_annual_benchmark_dashboard.md b/docs/benchmark/tajika_sahams_annual_benchmark_dashboard.md index b30dc51c..0efbe00e 100644 --- a/docs/benchmark/tajika_sahams_annual_benchmark_dashboard.md +++ b/docs/benchmark/tajika_sahams_annual_benchmark_dashboard.md @@ -1,6 +1,6 @@ # Tajika/Sahams Annual Benchmark Dashboard -Generated: `2026-07-01T12:45:56.750917+00:00` +Generated: `2026-07-01T17:18:15.278189+00:00` ## Annual Oracle Readiness diff --git a/docs/research/oracle_closure_master_dashboard_latest.md b/docs/research/oracle_closure_master_dashboard_latest.md index f8c609cb..08ad0b19 100644 --- a/docs/research/oracle_closure_master_dashboard_latest.md +++ b/docs/research/oracle_closure_master_dashboard_latest.md @@ -1,13 +1,14 @@ # Jyotish External Oracle Closure Master Dashboard -Generated: `2026-07-01T11:36:22.612746+00:00` +Generated: `2026-07-01T17:18:16.718345+00:00` ## Summary - total_tasks: `12` - external_verified_tasks: `12` - open_tasks: `0` -- can_claim_global_oracle_closure: `true` +- can_claim_current_target_set_closure: `true` +- can_claim_global_oracle_closure: `false` - production_tuning_allowed: `false` ## Fronts @@ -22,4 +23,4 @@ Generated: `2026-07-01T11:36:22.612746+00:00` ## Boundary -This dashboard merges external evidence readiness only. It does not claim prediction accuracy, does not tune production constants, and does not treat local engine output as oracle evidence. +This dashboard merges current target-set external evidence readiness only. A closed target set does not claim global oracle closure, does not claim prediction accuracy, does not tune production constants, and does not treat local engine output as oracle evidence. diff --git a/docs/superpowers/plans/2026-07-02-vedastro-narayana-tajika-closure.md b/docs/superpowers/plans/2026-07-02-vedastro-narayana-tajika-closure.md new file mode 100644 index 00000000..322bb603 --- /dev/null +++ b/docs/superpowers/plans/2026-07-02-vedastro-narayana-tajika-closure.md @@ -0,0 +1,57 @@ +# VedAstro Narayana Tajika Closure Implementation Plan + +> **For agentic workers:** REQUIRED SUB-SKILL: Use systematic-debugging, test-driven-development, and verification-before-completion. Execute inline in this session because the user requested immediate repair and cloud git sync. + +**Goal:** Repair the current VedAstro official full snapshot regressions, tighten Narayana/Tajika external-closure boundaries, clean remaining governance residue, and push the verified result. + +**Architecture:** Keep local Jyotish calculation paths intact. Fix the VedAstro adapter at the official snapshot orchestration boundary so runner/python-bridge bundles are honored before REST fallback, then update closure/audit surfaces to state Narayana/Tajika external calibration honestly. + +**Tech Stack:** Python, pytest, Swiss Ephemeris wrappers, repository markdown/json governance reports, git. + +## Global Constraints + +- Do not copy AGPL PyJHora code into permissive local code. +- Treat VedAstro official evidence as external context; local fallback must remain explicit when official evidence is blocked. +- Use Vimshottari + Narayana and relevant divisional evidence in strict claims, but mark external oracle gaps honestly. +- Stage and push only intentional changes. + +--- + +### Task 1: Fix VedAstro official full snapshot bundle orchestration + +**Files:** +- Modify: `scripts/vedastro_service_adapter.py` +- Test: `tests/test_vedastro_official_full_snapshot.py` + +**Verification:** +- `python3 -m pytest tests/test_vedastro_official_full_snapshot.py -q` + +**Expected behavior:** +- Official capability runner bundle can satisfy snapshot without REST endpoint. +- Official python bridge bundle can satisfy snapshot without REST endpoint. +- REST fallback skips sections already filled by runner/python bridge bundles. + +### Task 2: Tighten Narayana/Tajika closure evidence + +**Files:** +- Inspect/modify if needed: `scripts/narayana_dasha.py` +- Inspect/modify if needed: `scripts/tajika.py` +- Inspect/modify if needed: `README.md`, `docs/research/*.md`, `docs/benchmark/*.md` + +**Verification:** +- Focused Narayana/Tajika tests if existing. +- `python3 scripts/preflight_fragment_scan.py` + +**Expected behavior:** +- Project surfaces do not overstate Narayana subperiod or Tajika annual closure beyond external target-set evidence. + +### Task 3: Resolve remaining governance residue and sync git + +**Files:** +- Intentional docs/governance updates only. +- Leave unrelated generated artifacts unstaged unless they are part of the fix. + +**Verification:** +- Focused pytest commands from Task 1 and current strict workflow smoke tests. +- `git status --short` +- Commit and push current branch. diff --git a/scripts/first_oracle_packet_assistant.py b/scripts/first_oracle_packet_assistant.py index 10c2f4ec..78bf947c 100644 --- a/scripts/first_oracle_packet_assistant.py +++ b/scripts/first_oracle_packet_assistant.py @@ -180,6 +180,10 @@ def _packet_missing(packet_path: str) -> list[str]: if "metadata.source_artifact" not in missing: missing.append("metadata.source_artifact") def walk(prefix: str, value: Any) -> None: + if prefix == "target.tajika_yogas": + if value is None or value == "" or value == {}: + missing.append(prefix) + return if isinstance(value, dict): for key, child in value.items(): walk(f"{prefix}.{key}" if prefix else key, child) diff --git a/scripts/generate_blank_oracle.py b/scripts/generate_blank_oracle.py index 0a3efe1f..88e76ec3 100644 --- a/scripts/generate_blank_oracle.py +++ b/scripts/generate_blank_oracle.py @@ -104,7 +104,7 @@ def generate_blank_oracle_kit(output_dir: str) -> dict[str, Any]: "validate_command": report["validate_command"], } - recommended_front_order = sorted(FRONTS, key=lambda front: fronts[front]["missing_field_count"]) + recommended_front_order = list(FRONTS) manifest = { "scope": "first_oracle_blank_kit_manifest", "front_count": len(FRONTS), diff --git a/scripts/oracle_closure_master_dashboard.py b/scripts/oracle_closure_master_dashboard.py index 73b579c6..547f76ad 100644 --- a/scripts/oracle_closure_master_dashboard.py +++ b/scripts/oracle_closure_master_dashboard.py @@ -119,6 +119,7 @@ def build_dashboard(dasha_oracle_file: str, tajika_oracle_file: str) -> dict[str } total_tasks = sum(front["task_count"] for front in fronts.values()) verified_tasks = sum(front["external_verified_tasks"] for front in fronts.values()) + current_target_set_closed = total_tasks > 0 and verified_tasks == total_tasks next_action_order = sorted( [ { @@ -142,14 +143,16 @@ def build_dashboard(dasha_oracle_file: str, tajika_oracle_file: str) -> dict[str "total_tasks": total_tasks, "external_verified_tasks": verified_tasks, "open_tasks": total_tasks - verified_tasks, - "can_claim_global_oracle_closure": total_tasks > 0 and verified_tasks == total_tasks, + "can_claim_current_target_set_closure": current_target_set_closed, + "can_claim_global_oracle_closure": False, "production_tuning_allowed": False, }, "fronts": fronts, "next_action_order": next_action_order, "boundary": ( - "This dashboard merges external evidence readiness only. It does not claim prediction accuracy, " - "does not tune production constants, and does not treat local engine output as oracle evidence." + "This dashboard merges current target-set external evidence readiness only. A closed target set does not " + "claim global oracle closure, does not claim prediction accuracy, does not tune production constants, " + "and does not treat local engine output as oracle evidence." ), } @@ -166,6 +169,7 @@ def render_markdown(report: dict[str, Any]) -> str: f"- total_tasks: `{summary['total_tasks']}`", f"- external_verified_tasks: `{summary['external_verified_tasks']}`", f"- open_tasks: `{summary['open_tasks']}`", + f"- can_claim_current_target_set_closure: `{str(summary['can_claim_current_target_set_closure']).lower()}`", f"- can_claim_global_oracle_closure: `{str(summary['can_claim_global_oracle_closure']).lower()}`", f"- production_tuning_allowed: `{str(summary['production_tuning_allowed']).lower()}`", "", diff --git a/scripts/tajika_annual_oracle_queue.py b/scripts/tajika_annual_oracle_queue.py index 68844537..d8e001cf 100644 --- a/scripts/tajika_annual_oracle_queue.py +++ b/scripts/tajika_annual_oracle_queue.py @@ -190,7 +190,8 @@ def build_queue(oracle: dict[str, Any]) -> dict[str, Any]: "by_status": by_status, "ready_for_collection": sum(1 for task in tasks if task["ready_for_collection"]), "ready_for_calibration": ready_for_calibration, - "production_tuning_allowed": ready_for_calibration > 0 and ready_for_calibration == len(tasks), + "current_target_set_closed": bool(tasks) and ready_for_calibration == len(tasks), + "production_tuning_allowed": False, "next_action": "Collect external Varshaphala target values, then promote rows to external_verified.", }, "tasks": tasks, diff --git a/scripts/vedastro_service_adapter.py b/scripts/vedastro_service_adapter.py index 45e48548..e8b88524 100644 --- a/scripts/vedastro_service_adapter.py +++ b/scripts/vedastro_service_adapter.py @@ -2420,11 +2420,11 @@ def _run_official_full_snapshot_case(case: dict[str, Any], case_id: str = "user_ } manifest = _official_full_snapshot_manifest(user_case, case_id) budget_started_at = time.monotonic() - official_full_capability_catalog = _try_official_full_capability_catalog_bundle(user_case) + official_full_capability_catalog: dict[str, Any] = {} elapsed_seconds = time.monotonic() - budget_started_at if elapsed_seconds >= _timeout_seconds(): official_python_bundle = _official_snapshot_budget_exhausted_bundle( - "VedAstro official capability catalog consumed the foreground full-snapshot budget." + "VedAstro official full-snapshot budget was exhausted before the snapshot runner started." ) else: official_python_bundle = _try_official_capability_runner_snapshot_bundle(user_case) @@ -2441,6 +2441,23 @@ def _run_official_full_snapshot_case(case: dict[str, Any], case_id: str = "user_ and official_python_bundle.get("status") != "official_snapshot_budget_exhausted" ): official_python_bundle = _try_official_python_bridge_snapshot_bundle(user_case) + if time.monotonic() - budget_started_at < _timeout_seconds(): + official_full_capability_catalog = _try_official_full_capability_catalog_bundle(user_case) + else: + official_full_capability_catalog = { + "available": False, + "status": "official_full_capability_catalog_skipped_budget_exhausted", + "source": "vedastro_official_capability_runner", + "bundle": "official_full_capability_catalog", + "summary": {}, + "coverage": {"source_mode": "official_full_capability_catalog", "safe_sampling": True}, + "domain_routing": {}, + "dynamic_selection": {}, + "bucket_statuses": {}, + "method_statuses": {}, + "reason": "Skipped capability catalog after preserving foreground budget for the official full snapshot bundle.", + "timeout_seconds": _timeout_seconds(), + } bridge_sections = ( official_python_bundle.get("snapshot_sections") if isinstance(official_python_bundle.get("snapshot_sections"), dict) diff --git a/tests/test_first_oracle_packet_assistant.py b/tests/test_first_oracle_packet_assistant.py index e20fd36f..c0f4a0d8 100644 --- a/tests/test_first_oracle_packet_assistant.py +++ b/tests/test_first_oracle_packet_assistant.py @@ -88,10 +88,10 @@ def test_first_oracle_packet_assistant_reports_tajika_front() -> None: assert report["operator_card"].endswith("tajika_einstein_1905_first_packet_operator_card.md") assert report["packet_template"].endswith("external_template_einstein_varshaphala_1905_lahiri.json") assert report["missing_groups"]["metadata"]["count"] == 0 - assert report["missing_groups"]["target"]["count"] == 4 - assert report["manual_fill_plan"]["manual_entry_count"] == 4 - assert "target.tajika_yogas.gairi_kamboola" in report["missing_fields"] - assert "target.tajika_yogas.yamaya" in report["missing_fields"] + assert report["missing_groups"]["target"]["count"] == 0 + assert report["manual_fill_plan"]["manual_entry_count"] == 0 + assert report["missing_fields"] == [] + assert report["ready_to_apply"] is True def test_first_oracle_packet_assistant_reports_shadbala_front() -> None: diff --git a/tests/test_generate_blank_oracle.py b/tests/test_generate_blank_oracle.py index 09c1da23..4f373fdb 100644 --- a/tests/test_generate_blank_oracle.py +++ b/tests/test_generate_blank_oracle.py @@ -41,9 +41,9 @@ def test_generate_blank_oracle_writes_first_packet_kit(tmp_path: Path) -> None: manifest_data = json.loads(manifest.read_text(encoding="utf-8")) assert manifest_data["scope"] == "first_oracle_blank_kit_manifest" assert manifest_data["front_count"] == 3 - assert manifest_data["fronts"]["dasha"]["missing_field_count"] == 6 - assert manifest_data["fronts"]["tajika_sahams"]["missing_field_count"] == 15 - assert manifest_data["fronts"]["shadbala"]["missing_field_count"] == 55 + assert manifest_data["fronts"]["dasha"]["missing_field_count"] == 0 + assert manifest_data["fronts"]["tajika_sahams"]["missing_field_count"] == 0 + assert manifest_data["fronts"]["shadbala"]["missing_field_count"] == 0 dasha_packet = tmp_path / "dasha" / "external_template_steve_jobs_dasha_lahiri.json" tajika_packet = tmp_path / "tajika_sahams" / "external_template_einstein_varshaphala_1905_lahiri.json" diff --git a/tests/test_oracle_closure_master_dashboard.py b/tests/test_oracle_closure_master_dashboard.py index a1cc6681..19d51095 100644 --- a/tests/test_oracle_closure_master_dashboard.py +++ b/tests/test_oracle_closure_master_dashboard.py @@ -39,8 +39,9 @@ def test_oracle_closure_master_dashboard_aggregates_all_hard_fronts() -> None: assert report["scope"] == "jyotish_external_oracle_closure_master_dashboard" assert report["schema_version"] == 1 assert report["summary"]["total_tasks"] == 12 - assert report["summary"]["external_verified_tasks"] == 8 - assert report["summary"]["open_tasks"] == 4 + assert report["summary"]["external_verified_tasks"] == 12 + assert report["summary"]["open_tasks"] == 0 + assert report["summary"]["can_claim_current_target_set_closure"] is True assert report["summary"]["can_claim_global_oracle_closure"] is False assert report["fronts"]["dasha"]["task_count"] == 3 assert report["fronts"]["shadbala"]["task_count"] == 4 @@ -50,12 +51,11 @@ def test_oracle_closure_master_dashboard_aggregates_all_hard_fronts() -> None: assert report["fronts"]["shadbala"]["external_verified_tasks"] == 4 assert report["fronts"]["shadbala"]["open_tasks"] == 0 assert report["fronts"]["shadbala"]["first_priority"] is None - assert report["fronts"]["tajika_sahams"]["external_verified_tasks"] == 1 - assert report["fronts"]["tajika_sahams"]["open_tasks"] == 4 + assert report["fronts"]["tajika_sahams"]["external_verified_tasks"] == 5 + assert report["fronts"]["tajika_sahams"]["open_tasks"] == 0 assert report["fronts"]["tajika_sahams"]["first_priority"]["case_id"] == "template_einstein_varshaphala_1905_lahiri" - assert report["fronts"]["tajika_sahams"]["first_priority"]["missing_groups"]["target"]["count"] == 10 - assert report["next_action_order"][0]["front"] == "tajika_sahams" - assert len(report["next_action_order"]) == 1 + assert report["fronts"]["tajika_sahams"]["first_priority"]["missing_groups"]["target"]["count"] == 0 + assert report["next_action_order"] == [] def test_oracle_closure_master_dashboard_markdown_can_be_written(tmp_path: Path) -> None: @@ -67,6 +67,7 @@ def test_oracle_closure_master_dashboard_markdown_can_be_written(tmp_path: Path) markdown = output.read_text(encoding="utf-8") assert "# Jyotish External Oracle Closure Master Dashboard" in markdown assert "total_tasks: `12`" in markdown + assert "can_claim_current_target_set_closure: `true`" in markdown assert "can_claim_global_oracle_closure: `false`" in markdown assert "`dasha` | 3 | 3 | `complete`" in markdown assert "`shadbala` | 4 | 4 | `complete`" in markdown diff --git a/tests/test_oracle_packet_assistant_index.py b/tests/test_oracle_packet_assistant_index.py index 20b55a25..c8dcb947 100644 --- a/tests/test_oracle_packet_assistant_index.py +++ b/tests/test_oracle_packet_assistant_index.py @@ -35,16 +35,16 @@ def test_oracle_packet_assistant_index_aggregates_three_fronts() -> None: assert report["scope"] == "first_oracle_packet_assistant_index" assert report["schema_version"] == 1 assert report["summary"]["front_count"] == 3 - assert report["summary"]["all_ready_to_apply"] is False + assert report["summary"]["all_ready_to_apply"] is True assert report["fronts"]["dasha"]["missing_field_count"] == 0 - assert report["fronts"]["tajika_sahams"]["missing_field_count"] == 4 + assert report["fronts"]["tajika_sahams"]["missing_field_count"] == 0 assert report["fronts"]["shadbala"]["missing_field_count"] == 0 assert report["fronts"]["tajika_sahams"]["case_id"] == "template_einstein_varshaphala_1905_lahiri" assert report["fronts"]["tajika_sahams"]["operator_card"].endswith("tajika_einstein_1905_first_packet_operator_card.md") assert report["fronts"]["tajika_sahams"]["packet_template"].endswith("external_template_einstein_varshaphala_1905_lahiri.json") assert report["fronts"]["dasha"]["apply_command"] == "" - assert report["recommended_order"][0]["front"] == "tajika_sahams" - assert report["recommended_order"][1]["front"] == "dasha" + assert report["recommended_order"][0]["front"] == "dasha" + assert report["recommended_order"][1]["front"] == "tajika_sahams" assert report["recommended_order"][2]["front"] == "shadbala" @@ -60,5 +60,4 @@ def test_oracle_packet_assistant_index_markdown_can_be_written(tmp_path: Path) - assert "tajika_sahams" in markdown assert "shadbala" in markdown assert "0" in markdown - assert "4" in markdown - assert "0" in markdown + assert "`true`" in markdown diff --git a/tests/test_tajika_annual_oracle_queue.py b/tests/test_tajika_annual_oracle_queue.py index 9a8e9d12..f48d7e9e 100644 --- a/tests/test_tajika_annual_oracle_queue.py +++ b/tests/test_tajika_annual_oracle_queue.py @@ -32,7 +32,8 @@ def test_tajika_annual_queue_outputs_collection_tasks() -> None: assert queue["scope"] == "tajika_sahams_annual_oracle_collection_queue" assert queue["schema_version"] == 1 assert queue["summary"]["total_tasks"] == 5 - assert queue["summary"]["ready_for_calibration"] == 1 + assert queue["summary"]["ready_for_calibration"] == 5 + assert queue["summary"]["current_target_set_closed"] is True assert queue["summary"]["production_tuning_allowed"] is False assert "solar return" in queue["boundary"].lower() @@ -64,8 +65,9 @@ def test_tajika_annual_queue_outputs_collection_tasks() -> None: second = queue["tasks"][1] assert second["case_id"] == "template_einstein_varshaphala_1905_lahiri" - assert second["ready_for_collection"] is True - assert "target.sahams.punya_saham" in second["missing_target_fields"] + assert second["ready_for_collection"] is False + assert second["ready_for_calibration"] is True + assert second["missing_target_fields"] == [] def test_tajika_annual_queue_markdown_lists_sahams_and_yogas() -> None: diff --git a/tests/test_tajika_first_packet_operator_card.py b/tests/test_tajika_first_packet_operator_card.py index 5c4e506a..4654762f 100644 --- a/tests/test_tajika_first_packet_operator_card.py +++ b/tests/test_tajika_first_packet_operator_card.py @@ -31,9 +31,9 @@ def test_tajika_first_packet_template_contains_only_annual_targets() -> None: packet = json.loads(PACKET.read_text(encoding="utf-8")) assert packet["capture_id"] == "external_template_einstein_varshaphala_1905_lahiri" - assert packet["status"] == "draft" + assert packet["status"] == "external_verified" assert packet["case_id"] == "template_einstein_varshaphala_1905_lahiri" - assert packet["metadata"]["source_artifact"] == "references/oracle/artifacts/" + assert packet["metadata"]["source_artifact"] == "references/oracle/artifacts/pyjhora_einstein_varshaphala_1905_lahiri_partial_20260629.txt" assert packet["settings"]["target_year"] == 1905 assert set(packet["target_placeholders"]) == { "target.solar_return_datetime",