From 74494e0fd4adf3213f0f56697da85a9862937f08 Mon Sep 17 00:00:00 2001 From: 732642856 <732642856@qq.com> Date: Fri, 26 Jun 2026 19:08:20 +0800 Subject: [PATCH] feat(oracle): extend first packet assistant fronts --- README.md | 11 ++- ...irst_shadbala_oracle_packet_assistant.json | 75 ++++++++++++++++ .../first_shadbala_oracle_packet_assistant.md | 88 +++++++++++++++++++ .../first_tajika_oracle_packet_assistant.json | 35 ++++++++ .../first_tajika_oracle_packet_assistant.md | 48 ++++++++++ scripts/first_oracle_packet_assistant.py | 45 +++++++++- tests/test_first_oracle_packet_assistant.py | 54 ++++++++++++ 7 files changed, 352 insertions(+), 4 deletions(-) create mode 100644 docs/benchmark/first_shadbala_oracle_packet_assistant.json create mode 100644 docs/benchmark/first_shadbala_oracle_packet_assistant.md create mode 100644 docs/benchmark/first_tajika_oracle_packet_assistant.json create mode 100644 docs/benchmark/first_tajika_oracle_packet_assistant.md diff --git a/README.md b/README.md index 3fc65f61..9cab63c9 100644 --- a/README.md +++ b/README.md @@ -237,7 +237,7 @@ python3 scripts/dasha_oracle_closure_status.py \ 当前第一优先级是 `external_template_steve_jobs_dasha_lahiri`。该状态板只要求 `target.vimshottari_start_date` 和外部证据 metadata,不要求同时填完 Shadbala 七曜六分量;这样可以先完成 Dasha oracle 的第一条闭环,再单独推进 Shadbala 绝对值闭环。 -第一条 Dasha 证据包的交互辅助命令: +第一条外部证据包的交互辅助命令: ```bash python3 scripts/first_oracle_packet_assistant.py \ @@ -246,7 +246,14 @@ python3 scripts/first_oracle_packet_assistant.py \ --output docs/benchmark/first_dasha_oracle_packet_assistant.md ``` -该助手不会生成或猜测 JHora/PyJHora 真值,只会列出 `dasha_steve_jobs_lahiri_first_packet_only.json` 当前还缺哪些字段、可用外部来源、apply 命令和 validator 命令。 +同一个助手也支持: + +```bash +python3 scripts/first_oracle_packet_assistant.py --front tajika_sahams --format markdown --output docs/benchmark/first_tajika_oracle_packet_assistant.md +python3 scripts/first_oracle_packet_assistant.py --front shadbala --format markdown --output docs/benchmark/first_shadbala_oracle_packet_assistant.md +``` + +该助手不会生成或猜测 JHora/PyJHora 真值,只会列出当前 packet 还缺哪些字段、可用外部来源、apply 命令和 validator 命令。 Shadbala 外部绝对值闭环使用独立状态板,专门追踪七曜的六分量与总 Rupa: diff --git a/docs/benchmark/first_shadbala_oracle_packet_assistant.json b/docs/benchmark/first_shadbala_oracle_packet_assistant.json new file mode 100644 index 00000000..075f85aa --- /dev/null +++ b/docs/benchmark/first_shadbala_oracle_packet_assistant.json @@ -0,0 +1,75 @@ +{ + "scope": "first_external_oracle_packet_assistant", + "schema_version": 1, + "front": "shadbala", + "case_id": "template_redacted_place_shadbala_raman", + "capture_id": "external_template_redacted_place_shadbala_raman", + "operator_card": "docs/benchmark/shadbala_redacted_place_raman_first_packet_operator_card.md", + "packet_template": "references/oracle/evidence_packet_templates/shadbala_redacted_place_raman_first_packet.json", + "missing_fields": [ + "metadata.tool_name", + "metadata.tool_version_or_url", + "metadata.capture_date", + "metadata.operator_note", + "metadata.source_artifact", + "target.moon_sidereal_longitude_deg", + "target.shadbala_components.Sun.sthana", + "target.shadbala_components.Sun.dig", + "target.shadbala_components.Sun.kala", + "target.shadbala_components.Sun.chesta", + "target.shadbala_components.Sun.naisargika", + "target.shadbala_components.Sun.drik", + "target.shadbala_components.Sun.total_rupa", + "target.shadbala_components.Moon.sthana", + "target.shadbala_components.Moon.dig", + "target.shadbala_components.Moon.kala", + "target.shadbala_components.Moon.chesta", + "target.shadbala_components.Moon.naisargika", + "target.shadbala_components.Moon.drik", + "target.shadbala_components.Moon.total_rupa", + "target.shadbala_components.Mars.sthana", + "target.shadbala_components.Mars.dig", + "target.shadbala_components.Mars.kala", + "target.shadbala_components.Mars.chesta", + "target.shadbala_components.Mars.naisargika", + "target.shadbala_components.Mars.drik", + "target.shadbala_components.Mars.total_rupa", + "target.shadbala_components.Mercury.sthana", + "target.shadbala_components.Mercury.dig", + "target.shadbala_components.Mercury.kala", + "target.shadbala_components.Mercury.chesta", + "target.shadbala_components.Mercury.naisargika", + "target.shadbala_components.Mercury.drik", + "target.shadbala_components.Mercury.total_rupa", + "target.shadbala_components.Jupiter.sthana", + "target.shadbala_components.Jupiter.dig", + "target.shadbala_components.Jupiter.kala", + "target.shadbala_components.Jupiter.chesta", + "target.shadbala_components.Jupiter.naisargika", + "target.shadbala_components.Jupiter.drik", + "target.shadbala_components.Jupiter.total_rupa", + "target.shadbala_components.Venus.sthana", + "target.shadbala_components.Venus.dig", + "target.shadbala_components.Venus.kala", + "target.shadbala_components.Venus.chesta", + "target.shadbala_components.Venus.naisargika", + "target.shadbala_components.Venus.drik", + "target.shadbala_components.Venus.total_rupa", + "target.shadbala_components.Saturn.sthana", + "target.shadbala_components.Saturn.dig", + "target.shadbala_components.Saturn.kala", + "target.shadbala_components.Saturn.chesta", + "target.shadbala_components.Saturn.naisargika", + "target.shadbala_components.Saturn.drik", + "target.shadbala_components.Saturn.total_rupa" + ], + "ready_to_apply": false, + "external_sources": [ + "JHora Shadbala component table screenshot", + "PyJHora black-box shadbala output", + "documented printed/software Shadbala example" + ], + "apply_command": "python3 scripts/oracle_collection_queue.py --oracle-file references/oracle/dasha_shadbala_oracle_cases.json --apply-packet references/oracle/evidence_packet_templates/shadbala_redacted_place_raman_first_packet.json --format json", + "validate_command": "python3 scripts/oracle_collection_queue.py --oracle-file references/oracle/dasha_shadbala_oracle_cases.json --format json > /tmp/jyotish_oracle_queue_filled.json && python3 scripts/oracle_evidence_validator.py --queue-file /tmp/jyotish_oracle_queue_filled.json", + "boundary": "This assistant only reports what to fill. It must not invent external oracle values, must not use local engine output as evidence, and must not copy incompatible external code." +} \ No newline at end of file diff --git a/docs/benchmark/first_shadbala_oracle_packet_assistant.md b/docs/benchmark/first_shadbala_oracle_packet_assistant.md new file mode 100644 index 00000000..c3b67fab --- /dev/null +++ b/docs/benchmark/first_shadbala_oracle_packet_assistant.md @@ -0,0 +1,88 @@ +# First External Oracle Packet Assistant + +- front: `shadbala` +- case_id: `template_redacted_place_shadbala_raman` +- capture_id: `external_template_redacted_place_shadbala_raman` +- ready_to_apply: `false` +- operator_card: `docs/benchmark/shadbala_redacted_place_raman_first_packet_operator_card.md` +- packet_template: `references/oracle/evidence_packet_templates/shadbala_redacted_place_raman_first_packet.json` + +## Missing Fields + +- `metadata.tool_name` +- `metadata.tool_version_or_url` +- `metadata.capture_date` +- `metadata.operator_note` +- `metadata.source_artifact` +- `target.moon_sidereal_longitude_deg` +- `target.shadbala_components.Sun.sthana` +- `target.shadbala_components.Sun.dig` +- `target.shadbala_components.Sun.kala` +- `target.shadbala_components.Sun.chesta` +- `target.shadbala_components.Sun.naisargika` +- `target.shadbala_components.Sun.drik` +- `target.shadbala_components.Sun.total_rupa` +- `target.shadbala_components.Moon.sthana` +- `target.shadbala_components.Moon.dig` +- `target.shadbala_components.Moon.kala` +- `target.shadbala_components.Moon.chesta` +- `target.shadbala_components.Moon.naisargika` +- `target.shadbala_components.Moon.drik` +- `target.shadbala_components.Moon.total_rupa` +- `target.shadbala_components.Mars.sthana` +- `target.shadbala_components.Mars.dig` +- `target.shadbala_components.Mars.kala` +- `target.shadbala_components.Mars.chesta` +- `target.shadbala_components.Mars.naisargika` +- `target.shadbala_components.Mars.drik` +- `target.shadbala_components.Mars.total_rupa` +- `target.shadbala_components.Mercury.sthana` +- `target.shadbala_components.Mercury.dig` +- `target.shadbala_components.Mercury.kala` +- `target.shadbala_components.Mercury.chesta` +- `target.shadbala_components.Mercury.naisargika` +- `target.shadbala_components.Mercury.drik` +- `target.shadbala_components.Mercury.total_rupa` +- `target.shadbala_components.Jupiter.sthana` +- `target.shadbala_components.Jupiter.dig` +- `target.shadbala_components.Jupiter.kala` +- `target.shadbala_components.Jupiter.chesta` +- `target.shadbala_components.Jupiter.naisargika` +- `target.shadbala_components.Jupiter.drik` +- `target.shadbala_components.Jupiter.total_rupa` +- `target.shadbala_components.Venus.sthana` +- `target.shadbala_components.Venus.dig` +- `target.shadbala_components.Venus.kala` +- `target.shadbala_components.Venus.chesta` +- `target.shadbala_components.Venus.naisargika` +- `target.shadbala_components.Venus.drik` +- `target.shadbala_components.Venus.total_rupa` +- `target.shadbala_components.Saturn.sthana` +- `target.shadbala_components.Saturn.dig` +- `target.shadbala_components.Saturn.kala` +- `target.shadbala_components.Saturn.chesta` +- `target.shadbala_components.Saturn.naisargika` +- `target.shadbala_components.Saturn.drik` +- `target.shadbala_components.Saturn.total_rupa` + +## External Sources + +- JHora Shadbala component table screenshot +- PyJHora black-box shadbala output +- documented printed/software Shadbala example + +## Apply + +```bash +python3 scripts/oracle_collection_queue.py --oracle-file references/oracle/dasha_shadbala_oracle_cases.json --apply-packet references/oracle/evidence_packet_templates/shadbala_redacted_place_raman_first_packet.json --format json +``` + +## Validate + +```bash +python3 scripts/oracle_collection_queue.py --oracle-file references/oracle/dasha_shadbala_oracle_cases.json --format json > /tmp/jyotish_oracle_queue_filled.json && python3 scripts/oracle_evidence_validator.py --queue-file /tmp/jyotish_oracle_queue_filled.json +``` + +## Boundary + +This assistant only reports what to fill. It must not invent external oracle values, must not use local engine output as evidence, and must not copy incompatible external code. diff --git a/docs/benchmark/first_tajika_oracle_packet_assistant.json b/docs/benchmark/first_tajika_oracle_packet_assistant.json new file mode 100644 index 00000000..7ae2074f --- /dev/null +++ b/docs/benchmark/first_tajika_oracle_packet_assistant.json @@ -0,0 +1,35 @@ +{ + "scope": "first_external_oracle_packet_assistant", + "schema_version": 1, + "front": "tajika_sahams", + "case_id": "template_steve_jobs_varshaphala_1984_lahiri", + "capture_id": "external_template_steve_jobs_varshaphala_1984_lahiri", + "operator_card": "docs/benchmark/tajika_steve_jobs_1984_first_packet_operator_card.md", + "packet_template": "references/oracle/evidence_packet_templates/tajika_steve_jobs_1984_first_packet.json", + "missing_fields": [ + "metadata.tool_name", + "metadata.tool_version_or_url", + "metadata.capture_date", + "metadata.operator_note", + "metadata.source_artifact", + "target.solar_return_datetime", + "target.varsha_lagna_deg", + "target.muntha_sign", + "target.year_lord", + "target.mudda_dasha_first_lord", + "target.sahams.punya_saham", + "target.sahams.rajya_saham", + "target.sahams.vivah_saham", + "target.tajika_yogas", + "target.source_artifact" + ], + "ready_to_apply": false, + "external_sources": [ + "JHora Varshaphala/Tajika annual chart screen", + "PyJHora black-box annual output", + "printed Tajika/Varshaphala example" + ], + "apply_command": "python3 scripts/tajika_annual_oracle_queue.py --oracle-file references/oracle/tajika_annual_oracle_cases.json --apply-packet references/oracle/evidence_packet_templates/tajika_steve_jobs_1984_first_packet.json --format json", + "validate_command": "python3 scripts/tajika_annual_oracle_queue.py --oracle-file references/oracle/tajika_annual_oracle_cases.json --format json && python3 scripts/tajika_annual_benchmark_dashboard.py --oracle-file references/oracle/tajika_annual_oracle_cases.json --format json", + "boundary": "This assistant only reports what to fill. It must not invent external oracle values, must not use local engine output as evidence, and must not copy incompatible external code." +} \ No newline at end of file diff --git a/docs/benchmark/first_tajika_oracle_packet_assistant.md b/docs/benchmark/first_tajika_oracle_packet_assistant.md new file mode 100644 index 00000000..94aac965 --- /dev/null +++ b/docs/benchmark/first_tajika_oracle_packet_assistant.md @@ -0,0 +1,48 @@ +# First External Oracle Packet Assistant + +- front: `tajika_sahams` +- case_id: `template_steve_jobs_varshaphala_1984_lahiri` +- capture_id: `external_template_steve_jobs_varshaphala_1984_lahiri` +- ready_to_apply: `false` +- operator_card: `docs/benchmark/tajika_steve_jobs_1984_first_packet_operator_card.md` +- packet_template: `references/oracle/evidence_packet_templates/tajika_steve_jobs_1984_first_packet.json` + +## Missing Fields + +- `metadata.tool_name` +- `metadata.tool_version_or_url` +- `metadata.capture_date` +- `metadata.operator_note` +- `metadata.source_artifact` +- `target.solar_return_datetime` +- `target.varsha_lagna_deg` +- `target.muntha_sign` +- `target.year_lord` +- `target.mudda_dasha_first_lord` +- `target.sahams.punya_saham` +- `target.sahams.rajya_saham` +- `target.sahams.vivah_saham` +- `target.tajika_yogas` +- `target.source_artifact` + +## External Sources + +- JHora Varshaphala/Tajika annual chart screen +- PyJHora black-box annual output +- printed Tajika/Varshaphala example + +## Apply + +```bash +python3 scripts/tajika_annual_oracle_queue.py --oracle-file references/oracle/tajika_annual_oracle_cases.json --apply-packet references/oracle/evidence_packet_templates/tajika_steve_jobs_1984_first_packet.json --format json +``` + +## Validate + +```bash +python3 scripts/tajika_annual_oracle_queue.py --oracle-file references/oracle/tajika_annual_oracle_cases.json --format json && python3 scripts/tajika_annual_benchmark_dashboard.py --oracle-file references/oracle/tajika_annual_oracle_cases.json --format json +``` + +## Boundary + +This assistant only reports what to fill. It must not invent external oracle values, must not use local engine output as evidence, and must not copy incompatible external code. diff --git a/scripts/first_oracle_packet_assistant.py b/scripts/first_oracle_packet_assistant.py index 3d68b0f2..08d572bc 100644 --- a/scripts/first_oracle_packet_assistant.py +++ b/scripts/first_oracle_packet_assistant.py @@ -31,6 +31,40 @@ FRONTS = { "PyJHora black-box dasha output", "documented printed/software example", ], + }, + "tajika_sahams": { + "status_command": [ + PYTHON, + "scripts/tajika_annual_closure_status.py", + "--oracle-file", + "references/oracle/tajika_annual_oracle_cases.json", + "--format", + "json", + ], + "operator_card": "docs/benchmark/tajika_steve_jobs_1984_first_packet_operator_card.md", + "packet_template": "references/oracle/evidence_packet_templates/tajika_steve_jobs_1984_first_packet.json", + "external_sources": [ + "JHora Varshaphala/Tajika annual chart screen", + "PyJHora black-box annual output", + "printed Tajika/Varshaphala example", + ], + }, + "shadbala": { + "status_command": [ + PYTHON, + "scripts/shadbala_oracle_closure_status.py", + "--oracle-file", + "references/oracle/dasha_shadbala_oracle_cases.json", + "--format", + "json", + ], + "operator_card": "docs/benchmark/shadbala_redacted_place_raman_first_packet_operator_card.md", + "packet_template": "references/oracle/evidence_packet_templates/shadbala_redacted_place_raman_first_packet.json", + "external_sources": [ + "JHora Shadbala component table screenshot", + "PyJHora black-box shadbala output", + "documented printed/software Shadbala example", + ], } } @@ -60,9 +94,16 @@ def _packet_missing(packet_path: str) -> list[str]: if metadata.get("source_artifact") in {"references/oracle/artifacts/", "references/oracle/artifacts", "", None}: if "metadata.source_artifact" not in missing: missing.append("metadata.source_artifact") - for field, value in packet.get("target_placeholders", {}).items(): + def walk(prefix: str, value: Any) -> None: + if isinstance(value, dict): + for key, child in value.items(): + walk(f"{prefix}.{key}" if prefix else key, child) + return if value is None or value == "" or value == [] or value == {}: - missing.append(field) + missing.append(prefix) + + for field, value in packet.get("target_placeholders", {}).items(): + walk(field, value) return missing diff --git a/tests/test_first_oracle_packet_assistant.py b/tests/test_first_oracle_packet_assistant.py index a3de40bc..39b7d698 100644 --- a/tests/test_first_oracle_packet_assistant.py +++ b/tests/test_first_oracle_packet_assistant.py @@ -62,3 +62,57 @@ def test_first_oracle_packet_assistant_markdown_can_be_written(tmp_path: Path) - assert "template_steve_jobs_dasha_lahiri" in markdown assert "target.vimshottari_start_date" in markdown assert "ready_to_apply: `false`" in markdown + + +def test_first_oracle_packet_assistant_reports_tajika_front() -> None: + completed = subprocess.run( + [ + sys.executable, + "scripts/first_oracle_packet_assistant.py", + "--front", + "tajika_sahams", + "--format", + "json", + ], + cwd=ROOT, + text=True, + capture_output=True, + timeout=60, + check=False, + ) + + assert completed.returncode == 0, completed.stderr or completed.stdout + report = json.loads(completed.stdout) + assert report["front"] == "tajika_sahams" + assert report["case_id"] == "template_steve_jobs_varshaphala_1984_lahiri" + assert report["operator_card"].endswith("tajika_steve_jobs_1984_first_packet_operator_card.md") + assert report["packet_template"].endswith("tajika_steve_jobs_1984_first_packet.json") + assert "target.solar_return_datetime" in report["missing_fields"] + assert "target.sahams.punya_saham" in report["missing_fields"] + + +def test_first_oracle_packet_assistant_reports_shadbala_front() -> None: + completed = subprocess.run( + [ + sys.executable, + "scripts/first_oracle_packet_assistant.py", + "--front", + "shadbala", + "--format", + "json", + ], + cwd=ROOT, + text=True, + capture_output=True, + timeout=60, + check=False, + ) + + assert completed.returncode == 0, completed.stderr or completed.stdout + report = json.loads(completed.stdout) + assert report["front"] == "shadbala" + assert report["case_id"] == "template_redacted_place_shadbala_raman" + assert report["operator_card"].endswith("shadbala_redacted_place_raman_first_packet_operator_card.md") + assert report["packet_template"].endswith("shadbala_redacted_place_raman_first_packet.json") + assert "target.moon_sidereal_longitude_deg" in report["missing_fields"] + assert "target.shadbala_components.Sun.sthana" in report["missing_fields"]