diff --git a/docs/benchmark/tajika_einstein_1905_first_packet_operator_card.md b/docs/benchmark/tajika_einstein_1905_first_packet_operator_card.md new file mode 100644 index 00000000..f3183eb3 --- /dev/null +++ b/docs/benchmark/tajika_einstein_1905_first_packet_operator_card.md @@ -0,0 +1,93 @@ +# First Tajika/Sahams Annual Oracle Packet Operator Card + +Goal: fill one external annual-chart packet for `template_einstein_varshaphala_1905_lahiri`. + +This is for Varshaphala / Tajika / Sahams only. Do not use local `scripts/varshaphala.py` output as evidence. + +## Birth And Year + +- Birth date: `1879-03-14` +- Birth time: `11:30:00` +- Birth place: Ulm, Germany +- Coordinates: `48.3984, 9.9916` +- Birth timezone: `0.883333` +- Ayanamsa: `lahiri` +- Node mode: `mean` +- Target annual year: `1905` + +## External Tool + +Use one external black-box source: + +- JHora Varshaphala/Tajika annual chart screen, or +- PyJHora black-box annual output, or +- a printed Tajika/Varshaphala example. + +Record the solar-return convention in `metadata.operator_note`, including timezone/DST handling and whether the tool calculates the annual chart at exact solar return. + +## Fill This Packet + +Template: + +`references/oracle/artifacts/pending_packets/external_template_einstein_varshaphala_1905_lahiri.json` + +Required metadata: + +- `status`: set to `external_verified` +- `metadata.tool_name` +- `metadata.tool_version_or_url` +- `metadata.capture_date` +- `metadata.source_artifact` +- `metadata.operator_note` + +Required target fields: + +- `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` + +Save the redacted screenshot, stdout snippet, or book citation under `references/oracle/artifacts/`. + +## Screen Checklist + +Capture only what is needed: + +1. Settings screen: ayanamsa, node mode, location, target year and solar-return convention. +2. Varshaphala chart: solar return datetime and Varsha Lagna. +3. Muntha / Year Lord screen: Muntha sign and Year Lord. +4. Mudda Dasha screen: first Mudda Dasha lord. +5. Sahams screen: Punya Saham, Rajya Saham and Vivah Saham. +6. Tajika Yogas screen: visible yogas such as Ithasala, Easarapha, Nakta or other tool labels. + +## Apply + +```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 +``` + +## 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 +``` + +Expected first milestone after real external evidence is filled: + +- Tajika/Sahams annual closure board moves from `external_verified_annual_tasks: 1` to at least `2`. +- Master dashboard still keeps `can_claim_global_oracle_closure: false` until all external oracle fronts are complete. diff --git a/scripts/first_oracle_packet_assistant.py b/scripts/first_oracle_packet_assistant.py index 5a37da52..27184fc0 100644 --- a/scripts/first_oracle_packet_assistant.py +++ b/scripts/first_oracle_packet_assistant.py @@ -41,8 +41,8 @@ FRONTS = { "--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", + "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", "external_sources": [ "JHora Varshaphala/Tajika annual chart screen", "PyJHora black-box annual output", @@ -173,10 +173,17 @@ def build_report(front: str) -> dict[str, Any]: raise RuntimeError(f"Unsupported front: {front}") config = FRONTS[front] status = _run_json(config["status_command"]) - first = status["first_priority"] + packet = json.loads((ROOT / config["packet_template"]).read_text(encoding="utf-8")) + first = status.get("first_priority") or { + "case_id": packet.get("case_id"), + "capture_id": packet.get("capture_id"), + "apply_command": "", + "validate_command": "", + "packet_path": config["packet_template"], + } packet_missing = _packet_missing(config["packet_template"]) missing_groups = _group_missing_fields(packet_missing) - packet = json.loads((ROOT / config["packet_template"]).read_text(encoding="utf-8")) + apply_command = first["apply_command"].replace(first["packet_path"], config["packet_template"]) if first.get("apply_command") else "" return { "scope": "first_external_oracle_packet_assistant", "schema_version": 1, @@ -191,8 +198,8 @@ def build_report(front: str) -> dict[str, Any]: "manual_fill_plan": _manual_fill_plan(packet, packet_missing), "ready_to_apply": not packet_missing, "external_sources": config["external_sources"], - "apply_command": first["apply_command"].replace(first["packet_path"], config["packet_template"]), - "validate_command": first["validate_command"], + "apply_command": apply_command, + "validate_command": first.get("validate_command", ""), "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/tests/test_first_oracle_packet_assistant.py b/tests/test_first_oracle_packet_assistant.py index b79055ce..dfa124eb 100644 --- a/tests/test_first_oracle_packet_assistant.py +++ b/tests/test_first_oracle_packet_assistant.py @@ -93,9 +93,9 @@ def test_first_oracle_packet_assistant_reports_tajika_front() -> None: 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 report["case_id"] == "template_einstein_varshaphala_1905_lahiri" + 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"] == 5 assert report["missing_groups"]["target"]["count"] == 10 assert report["manual_fill_plan"]["manual_entry_count"] == 15 diff --git a/tests/test_generate_blank_oracle.py b/tests/test_generate_blank_oracle.py index 35f1e257..09c1da23 100644 --- a/tests/test_generate_blank_oracle.py +++ b/tests/test_generate_blank_oracle.py @@ -46,7 +46,7 @@ def test_generate_blank_oracle_writes_first_packet_kit(tmp_path: Path) -> None: assert manifest_data["fronts"]["shadbala"]["missing_field_count"] == 55 dasha_packet = tmp_path / "dasha" / "external_template_steve_jobs_dasha_lahiri.json" - tajika_packet = tmp_path / "tajika_sahams" / "external_template_steve_jobs_varshaphala_1984_lahiri.json" + tajika_packet = tmp_path / "tajika_sahams" / "external_template_einstein_varshaphala_1905_lahiri.json" shadbala_packet = tmp_path / "shadbala" / "external_template_redacted_place_shadbala_raman.json" assert dasha_packet.exists() assert tajika_packet.exists()