fix: stabilize vedastro oracle closure boundaries

This commit is contained in:
732642856
2026-07-02 01:22:53 +08:00
parent 82f6ec76c7
commit e054f5b663
20 changed files with 165 additions and 88 deletions
+5 -5
View File
@@ -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 绝对值大包中拆出来,优先推进第一条可验证边界日期:
@@ -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",
@@ -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`
@@ -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."
}
@@ -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.
@@ -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,
@@ -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
@@ -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.
@@ -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.
+4
View File
@@ -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)
+1 -1
View File
@@ -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),
+7 -3
View File
@@ -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()}`",
"",
+2 -1
View File
@@ -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,
+19 -2
View File
@@ -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)
+4 -4
View File
@@ -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:
+3 -3
View File
@@ -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"
@@ -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
+5 -6
View File
@@ -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
+5 -3
View File
@@ -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:
@@ -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",