diff --git a/docs/benchmark/jyotish_external_oracle_closure_master_dashboard.json b/docs/benchmark/jyotish_external_oracle_closure_master_dashboard.json index 121a55c5..d7bb910c 100644 --- a/docs/benchmark/jyotish_external_oracle_closure_master_dashboard.json +++ b/docs/benchmark/jyotish_external_oracle_closure_master_dashboard.json @@ -1,7 +1,7 @@ { "scope": "jyotish_external_oracle_closure_master_dashboard", "schema_version": 1, - "generated_at": "2026-06-26T10:31:36.549795+00:00", + "generated_at": "2026-06-26T12:13:47.440227+00:00", "summary": { "total_tasks": 12, "external_verified_tasks": 0, @@ -30,6 +30,49 @@ "metadata.source_artifact", "target.vimshottari_start_date" ], + "missing_groups": { + "metadata": { + "count": 5, + "fields": [ + "metadata.tool_name", + "metadata.tool_version_or_url", + "metadata.capture_date", + "metadata.operator_note", + "metadata.source_artifact" + ] + }, + "target": { + "count": 1, + "fields": [ + "target.vimshottari_start_date" + ] + } + }, + "prefilled_fields": { + "status": "draft", + "promotion_status_after_fill": "external_verified", + "metadata": { + "ayanamsa": "Lahiri", + "node_mode": "true node", + "timezone": "UTC-08:00" + }, + "settings": { + "ayanamsa": "lahiri", + "node_mode": "true" + } + }, + "manual_fill_plan": { + "status_value": "external_verified", + "manual_entry_count": 6, + "remaining_manual_fields": [ + "metadata.tool_name", + "metadata.tool_version_or_url", + "metadata.capture_date", + "metadata.operator_note", + "metadata.source_artifact", + "target.vimshottari_start_date" + ] + }, "apply_command": "python3 scripts/oracle_collection_queue.py --oracle-file references/oracle/dasha_shadbala_oracle_cases.json --apply-packet references/oracle/artifacts/pending_packets/external_template_steve_jobs_dasha_lahiri.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" } @@ -103,6 +146,233 @@ "target.shadbala_components.Saturn.drik", "target.shadbala_components.Saturn.total_rupa" ], + "missing_groups": { + "metadata": { + "count": 5, + "fields": [ + "metadata.tool_name", + "metadata.tool_version_or_url", + "metadata.capture_date", + "metadata.operator_note", + "metadata.source_artifact" + ] + }, + "target": { + "count": 50, + "fields": [ + "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" + ] + }, + "bodies": { + "Jupiter": { + "count": 7, + "fields": [ + "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" + ] + }, + "Mars": { + "count": 7, + "fields": [ + "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" + ] + }, + "Mercury": { + "count": 7, + "fields": [ + "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" + ] + }, + "Moon": { + "count": 7, + "fields": [ + "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" + ] + }, + "Saturn": { + "count": 7, + "fields": [ + "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" + ] + }, + "Sun": { + "count": 7, + "fields": [ + "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" + ] + }, + "Venus": { + "count": 7, + "fields": [ + "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" + ] + } + } + }, + "prefilled_fields": { + "status": "draft", + "promotion_status_after_fill": "external_verified", + "metadata": { + "ayanamsa": "Raman", + "node_mode": "mean node", + "timezone": "UTC+08:00" + }, + "settings": { + "ayanamsa": "raman", + "node_mode": "mean" + } + }, + "manual_fill_plan": { + "status_value": "external_verified", + "manual_entry_count": 55, + "remaining_manual_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" + ] + }, "apply_command": "python3 scripts/oracle_collection_queue.py --oracle-file references/oracle/dasha_shadbala_oracle_cases.json --apply-packet references/oracle/artifacts/pending_packets/external_template_redacted_place_shadbala_raman.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" } @@ -136,6 +406,71 @@ "target.tajika_yogas", "target.source_artifact" ], + "missing_groups": { + "metadata": { + "count": 5, + "fields": [ + "metadata.tool_name", + "metadata.tool_version_or_url", + "metadata.capture_date", + "metadata.operator_note", + "metadata.source_artifact" + ] + }, + "target": { + "count": 10, + "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" + ] + } + }, + "prefilled_fields": { + "status": "draft", + "promotion_status_after_fill": "external_verified", + "metadata": { + "ayanamsa": "Lahiri", + "node_mode": "true node", + "timezone": "UTC-08:00", + "annual_system": "Varshaphala/Tajika", + "target_year": 1984 + }, + "settings": { + "ayanamsa": "lahiri", + "node_mode": "true", + "annual_system": "varshaphala", + "target_year": 1984 + } + }, + "manual_fill_plan": { + "status_value": "external_verified", + "manual_entry_count": 15, + "remaining_manual_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" + ] + }, "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_steve_jobs_varshaphala_1984_lahiri.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" } @@ -147,6 +482,7 @@ "case_id": "template_steve_jobs_dasha_lahiri", "capture_id": "external_template_steve_jobs_dasha_lahiri", "missing_field_count": 6, + "manual_entry_count": 6, "apply_command": "python3 scripts/oracle_collection_queue.py --oracle-file references/oracle/dasha_shadbala_oracle_cases.json --apply-packet references/oracle/artifacts/pending_packets/external_template_steve_jobs_dasha_lahiri.json --format json" }, { @@ -154,6 +490,7 @@ "case_id": "template_steve_jobs_varshaphala_1984_lahiri", "capture_id": "external_template_steve_jobs_varshaphala_1984_lahiri", "missing_field_count": 15, + "manual_entry_count": 15, "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_steve_jobs_varshaphala_1984_lahiri.json --format json" }, { @@ -161,6 +498,7 @@ "case_id": "template_redacted_place_shadbala_raman", "capture_id": "external_template_redacted_place_shadbala_raman", "missing_field_count": 55, + "manual_entry_count": 55, "apply_command": "python3 scripts/oracle_collection_queue.py --oracle-file references/oracle/dasha_shadbala_oracle_cases.json --apply-packet references/oracle/artifacts/pending_packets/external_template_redacted_place_shadbala_raman.json --format json" } ], diff --git a/docs/benchmark/jyotish_external_oracle_closure_master_dashboard.md b/docs/benchmark/jyotish_external_oracle_closure_master_dashboard.md index c5e4ac1c..575d5782 100644 --- a/docs/benchmark/jyotish_external_oracle_closure_master_dashboard.md +++ b/docs/benchmark/jyotish_external_oracle_closure_master_dashboard.md @@ -1,6 +1,6 @@ # Jyotish External Oracle Closure Master Dashboard -Generated: `2026-06-26T10:31:38.662077+00:00` +Generated: `2026-06-26T12:13:46.930643+00:00` ## Summary @@ -12,11 +12,11 @@ Generated: `2026-06-26T10:31:38.662077+00:00` ## Fronts -| front | tasks | verified | first priority | missing fields | -|---|---:|---:|---|---:| -| `dasha` | 3 | 0 | `template_steve_jobs_dasha_lahiri` | 6 | -| `tajika_sahams` | 5 | 0 | `template_steve_jobs_varshaphala_1984_lahiri` | 15 | -| `shadbala` | 4 | 0 | `template_redacted_place_shadbala_raman` | 55 | +| front | tasks | verified | first priority | missing fields | manual entries | metadata missing | target missing | +|---|---:|---:|---|---:|---:|---:|---:| +| `dasha` | 3 | 0 | `template_steve_jobs_dasha_lahiri` | 6 | 6 | 5 | 1 | +| `tajika_sahams` | 5 | 0 | `template_steve_jobs_varshaphala_1984_lahiri` | 15 | 15 | 5 | 10 | +| `shadbala` | 4 | 0 | `template_redacted_place_shadbala_raman` | 55 | 55 | 5 | 50 | ## Next Action Order @@ -25,6 +25,7 @@ Generated: `2026-06-26T10:31:38.662077+00:00` - case_id: `template_steve_jobs_dasha_lahiri` - capture_id: `external_template_steve_jobs_dasha_lahiri` - missing_field_count: `6` +- manual_entry_count: `6` ```bash python3 scripts/oracle_collection_queue.py --oracle-file references/oracle/dasha_shadbala_oracle_cases.json --apply-packet references/oracle/artifacts/pending_packets/external_template_steve_jobs_dasha_lahiri.json --format json @@ -35,6 +36,7 @@ python3 scripts/oracle_collection_queue.py --oracle-file references/oracle/dasha - case_id: `template_steve_jobs_varshaphala_1984_lahiri` - capture_id: `external_template_steve_jobs_varshaphala_1984_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_steve_jobs_varshaphala_1984_lahiri.json --format json @@ -45,6 +47,7 @@ python3 scripts/tajika_annual_oracle_queue.py --oracle-file references/oracle/ta - case_id: `template_redacted_place_shadbala_raman` - capture_id: `external_template_redacted_place_shadbala_raman` - missing_field_count: `55` +- manual_entry_count: `55` ```bash python3 scripts/oracle_collection_queue.py --oracle-file references/oracle/dasha_shadbala_oracle_cases.json --apply-packet references/oracle/artifacts/pending_packets/external_template_redacted_place_shadbala_raman.json --format json diff --git a/docs/benchmark/shadbala_external_absolute_value_closure_status.json b/docs/benchmark/shadbala_external_absolute_value_closure_status.json index 682f143b..024e54ba 100644 --- a/docs/benchmark/shadbala_external_absolute_value_closure_status.json +++ b/docs/benchmark/shadbala_external_absolute_value_closure_status.json @@ -105,6 +105,233 @@ "target.shadbala_components.Saturn.drik", "target.shadbala_components.Saturn.total_rupa" ], + "missing_groups": { + "metadata": { + "count": 5, + "fields": [ + "metadata.tool_name", + "metadata.tool_version_or_url", + "metadata.capture_date", + "metadata.operator_note", + "metadata.source_artifact" + ] + }, + "target": { + "count": 50, + "fields": [ + "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" + ] + }, + "bodies": { + "Jupiter": { + "count": 7, + "fields": [ + "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" + ] + }, + "Mars": { + "count": 7, + "fields": [ + "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" + ] + }, + "Mercury": { + "count": 7, + "fields": [ + "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" + ] + }, + "Moon": { + "count": 7, + "fields": [ + "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" + ] + }, + "Saturn": { + "count": 7, + "fields": [ + "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" + ] + }, + "Sun": { + "count": 7, + "fields": [ + "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" + ] + }, + "Venus": { + "count": 7, + "fields": [ + "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" + ] + } + } + }, + "prefilled_fields": { + "status": "draft", + "promotion_status_after_fill": "external_verified", + "metadata": { + "ayanamsa": "Raman", + "node_mode": "mean node", + "timezone": "UTC+08:00" + }, + "settings": { + "ayanamsa": "raman", + "node_mode": "mean" + } + }, + "manual_fill_plan": { + "status_value": "external_verified", + "manual_entry_count": 55, + "remaining_manual_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", diff --git a/docs/benchmark/shadbala_external_absolute_value_closure_status.md b/docs/benchmark/shadbala_external_absolute_value_closure_status.md index c2bde452..7bd8cf82 100644 --- a/docs/benchmark/shadbala_external_absolute_value_closure_status.md +++ b/docs/benchmark/shadbala_external_absolute_value_closure_status.md @@ -11,9 +11,100 @@ - capture_id: `external_template_redacted_place_shadbala_raman` - packet_path: `references/oracle/artifacts/pending_packets/external_template_redacted_place_shadbala_raman.json` - required_target_fields: `target.moon_sidereal_longitude_deg, target.shadbala_components` -- 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` - reject_global_scaling: `true` +## Missing Summary + +- metadata: `5` +- target: `50` +- bodies: + + - Jupiter: `7` + - Mars: `7` + - Mercury: `7` + - Moon: `7` + - Saturn: `7` + - Sun: `7` + - Venus: `7` + +## Prefilled Fields + +- status: `draft` +- promotion_status_after_fill: `external_verified` + +- metadata: + + - ayanamsa: `Raman` + - node_mode: `mean node` + - timezone: `UTC+08:00` + +- settings: + + - ayanamsa: `raman` + - node_mode: `mean` + +## Manual Fill Plan + +- status_value: `external_verified` +- manual_entry_count: `55` + +## 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` ## Required Matrix - planets: `Sun, Moon, Mars, Mercury, Jupiter, Venus, Saturn` diff --git a/docs/benchmark/tajika_sahams_annual_closure_status.json b/docs/benchmark/tajika_sahams_annual_closure_status.json index 5f75730a..e19defe7 100644 --- a/docs/benchmark/tajika_sahams_annual_closure_status.json +++ b/docs/benchmark/tajika_sahams_annual_closure_status.json @@ -57,6 +57,71 @@ "target.tajika_yogas", "target.source_artifact" ], + "missing_groups": { + "metadata": { + "count": 5, + "fields": [ + "metadata.tool_name", + "metadata.tool_version_or_url", + "metadata.capture_date", + "metadata.operator_note", + "metadata.source_artifact" + ] + }, + "target": { + "count": 10, + "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" + ] + } + }, + "prefilled_fields": { + "status": "draft", + "promotion_status_after_fill": "external_verified", + "metadata": { + "ayanamsa": "Lahiri", + "node_mode": "true node", + "timezone": "UTC-08:00", + "annual_system": "Varshaphala/Tajika", + "target_year": 1984 + }, + "settings": { + "ayanamsa": "lahiri", + "node_mode": "true", + "annual_system": "varshaphala", + "target_year": 1984 + } + }, + "manual_fill_plan": { + "status_value": "external_verified", + "manual_entry_count": 15, + "remaining_manual_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 screenshot", "PyJHora black-box annual output", diff --git a/docs/benchmark/tajika_sahams_annual_closure_status.md b/docs/benchmark/tajika_sahams_annual_closure_status.md index cb2df5de..d889485d 100644 --- a/docs/benchmark/tajika_sahams_annual_closure_status.md +++ b/docs/benchmark/tajika_sahams_annual_closure_status.md @@ -11,8 +11,54 @@ - capture_id: `external_template_steve_jobs_varshaphala_1984_lahiri` - packet_path: `references/oracle/artifacts/pending_packets/external_template_steve_jobs_varshaphala_1984_lahiri.json` - 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` -- 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` +## Missing Summary + +- metadata: `5` +- target: `10` + +## Prefilled Fields + +- status: `draft` +- promotion_status_after_fill: `external_verified` + +- metadata: + + - ayanamsa: `Lahiri` + - node_mode: `true node` + - timezone: `UTC-08:00` + - annual_system: `Varshaphala/Tajika` + - target_year: `1984` + +- settings: + + - ayanamsa: `lahiri` + - node_mode: `true` + - annual_system: `varshaphala` + - target_year: `1984` + +## Manual Fill Plan + +- status_value: `external_verified` +- manual_entry_count: `15` + +## 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` ## Commands ```bash diff --git a/scripts/oracle_closure_master_dashboard.py b/scripts/oracle_closure_master_dashboard.py index 466916b7..0ebfba48 100644 --- a/scripts/oracle_closure_master_dashboard.py +++ b/scripts/oracle_closure_master_dashboard.py @@ -49,6 +49,9 @@ def _front_from_status(name: str, status: dict[str, Any], task_key: str, verifie "packet_path": first["packet_path"], "missing_field_count": len(missing_fields), "missing_fields": missing_fields, + "missing_groups": first.get("missing_groups", {}), + "prefilled_fields": first.get("prefilled_fields", {}), + "manual_fill_plan": first.get("manual_fill_plan", {}), "apply_command": first.get("apply_command", ""), "validate_command": first.get("validate_command", ""), }, @@ -113,6 +116,7 @@ def build_dashboard(dasha_oracle_file: str, tajika_oracle_file: str) -> dict[str "case_id": front["first_priority"]["case_id"], "capture_id": front["first_priority"]["capture_id"], "missing_field_count": front["first_priority"]["missing_field_count"], + "manual_entry_count": int(front["first_priority"].get("manual_fill_plan", {}).get("manual_entry_count", front["first_priority"]["missing_field_count"])), "apply_command": front["first_priority"]["apply_command"], } for front in fronts.values() @@ -157,14 +161,18 @@ def render_markdown(report: dict[str, Any]) -> str: "", "## Fronts", "", - "| front | tasks | verified | first priority | missing fields |", - "|---|---:|---:|---|---:|", + "| front | tasks | verified | first priority | missing fields | manual entries | metadata missing | target missing |", + "|---|---:|---:|---|---:|---:|---:|---:|", ] for key in ["dasha", "tajika_sahams", "shadbala"]: front = report["fronts"][key] first = front["first_priority"] + missing_groups = first.get("missing_groups", {}) + manual_fill_plan = first.get("manual_fill_plan", {}) lines.append( - f"| `{key}` | {front['task_count']} | {front['external_verified_tasks']} | `{first['case_id']}` | {first['missing_field_count']} |" + f"| `{key}` | {front['task_count']} | {front['external_verified_tasks']} | `{first['case_id']}` | " + f"{first['missing_field_count']} | {manual_fill_plan.get('manual_entry_count', first['missing_field_count'])} | " + f"{missing_groups.get('metadata', {}).get('count', 0)} | {missing_groups.get('target', {}).get('count', 0)} |" ) lines.extend(["", "## Next Action Order", ""]) for item in report["next_action_order"]: @@ -175,6 +183,7 @@ def render_markdown(report: dict[str, Any]) -> str: f"- case_id: `{item['case_id']}`", f"- capture_id: `{item['capture_id']}`", f"- missing_field_count: `{item['missing_field_count']}`", + f"- manual_entry_count: `{item['manual_entry_count']}`", "", "```bash", item["apply_command"], diff --git a/scripts/shadbala_oracle_closure_status.py b/scripts/shadbala_oracle_closure_status.py index bdfd65c3..3ab78f4d 100644 --- a/scripts/shadbala_oracle_closure_status.py +++ b/scripts/shadbala_oracle_closure_status.py @@ -14,6 +14,7 @@ from typing import Any ROOT = Path(__file__).resolve().parents[1] PYTHON = sys.executable FIRST_PRIORITY_CASE_ID = "template_redacted_place_shadbala_raman" +FIRST_PRIORITY_TEMPLATE_PATH = "references/oracle/evidence_packet_templates/shadbala_redacted_place_raman_first_packet.json" SHADBALA_TARGET_FIELD = "target.shadbala_components" SUPPORTING_TARGET_FIELDS = ["target.moon_sidereal_longitude_deg"] REQUIRED_PLANETS = ["Sun", "Moon", "Mars", "Mercury", "Jupiter", "Venus", "Saturn"] @@ -82,6 +83,67 @@ def _supporting_missing(packet: dict[str, Any], target_fields: list[str]) -> lis return missing +def _group_missing_fields(missing_fields: list[str]) -> dict[str, Any]: + metadata_fields = [field for field in missing_fields if field.startswith("metadata.")] + target_fields = [field for field in missing_fields if field.startswith("target.")] + body_groups: dict[str, list[str]] = {} + prefix = f"{SHADBALA_TARGET_FIELD}." + for field in target_fields: + if not field.startswith(prefix): + continue + remainder = field[len(prefix):] + body, _, component = remainder.partition(".") + if not body or not component: + continue + body_groups.setdefault(body, []).append(field) + grouped_bodies = { + body: { + "count": len(fields), + "fields": fields, + } + for body, fields in sorted(body_groups.items()) + } + return { + "metadata": { + "count": len(metadata_fields), + "fields": metadata_fields, + }, + "target": { + "count": len(target_fields), + "fields": target_fields, + }, + "bodies": grouped_bodies, + } + + +def _prefilled_fields(packet: dict[str, Any], missing_fields: list[str]) -> dict[str, Any]: + missing = set(missing_fields) + metadata = { + key: value + for key, value in packet.get("metadata", {}).items() + if f"metadata.{key}" not in missing and value not in ("", None, [], {}) + } + settings = { + key: value + for key, value in packet.get("settings", {}).items() + if value not in ("", None, [], {}) + } + return { + "status": packet.get("status"), + "promotion_status_after_fill": packet.get("promotion_status_after_fill"), + "metadata": metadata, + "settings": settings, + } + + +def _manual_fill_plan(packet: dict[str, Any], missing_fields: list[str]) -> dict[str, Any]: + return { + "status_value": packet.get("promotion_status_after_fill", "external_verified"), + "manual_entry_count": len(missing_fields), + "remaining_manual_fields": missing_fields, + } + + def _apply_command(packet_path: str, oracle_file: str) -> str: return ( "python3 scripts/oracle_collection_queue.py " @@ -111,12 +173,15 @@ def build_status(oracle_file: str) -> dict[str, Any]: if priority is None: raise RuntimeError("No Shadbala target task found") - packet = priority["evidence_packet"] - capture_id = packet["capture_id"] + queue_packet = priority["evidence_packet"] + capture_id = queue_packet["capture_id"] packet_path = f"references/oracle/artifacts/pending_packets/{capture_id}.json" + template_path = FIRST_PRIORITY_TEMPLATE_PATH if priority["case_id"] == FIRST_PRIORITY_CASE_ID else packet_path + packet = json.loads((ROOT / template_path).read_text(encoding="utf-8")) target_fields = priority.get("target_fields", []) supporting_target_fields = [field for field in SUPPORTING_TARGET_FIELDS if field in target_fields] missing_fields = _metadata_missing(packet) + _supporting_missing(packet, target_fields) + _shadbala_missing(packet) + missing_groups = _group_missing_fields(missing_fields) external_verified = [ task for task in shadbala_tasks if ( @@ -145,6 +210,9 @@ def build_status(oracle_file: str) -> dict[str, Any]: "settings": priority.get("settings", {}), "required_target_fields": supporting_target_fields + [SHADBALA_TARGET_FIELD], "missing_fields": missing_fields, + "missing_groups": missing_groups, + "prefilled_fields": _prefilled_fields(packet, missing_fields), + "manual_fill_plan": _manual_fill_plan(packet, missing_fields), "external_sources": [ "JHora Shadbala component table screenshot", "PyJHora black-box shadbala output", @@ -186,9 +254,59 @@ def render_markdown(report: dict[str, Any]) -> str: f"- capture_id: `{first['capture_id']}`", f"- packet_path: `{first['packet_path']}`", f"- required_target_fields: `{', '.join(first['required_target_fields'])}`", - f"- missing_fields: `{', '.join(first['missing_fields'])}`", f"- reject_global_scaling: `{str(first['reject_global_scaling']).lower()}`", "", + "## Missing Summary", + "", + f"- metadata: `{first['missing_groups']['metadata']['count']}`", + f"- target: `{first['missing_groups']['target']['count']}`", + ] + if first["missing_groups"]["bodies"]: + lines.extend(["- bodies:", ""]) + lines.extend( + f" - {body}: `{payload['count']}`" + for body, payload in first["missing_groups"]["bodies"].items() + ) + lines.extend( + [ + "", + "## Prefilled Fields", + "", + f"- status: `{first['prefilled_fields']['status']}`", + f"- promotion_status_after_fill: `{first['prefilled_fields']['promotion_status_after_fill']}`", + "", + ] + ) + if first["prefilled_fields"]["metadata"]: + lines.append("- metadata:") + lines.append("") + lines.extend( + f" - {key}: `{value}`" + for key, value in first["prefilled_fields"]["metadata"].items() + ) + lines.append("") + if first["prefilled_fields"]["settings"]: + lines.append("- settings:") + lines.append("") + lines.extend( + f" - {key}: `{value}`" + for key, value in first["prefilled_fields"]["settings"].items() + ) + lines.append("") + lines.extend( + [ + "## Manual Fill Plan", + "", + f"- status_value: `{first['manual_fill_plan']['status_value']}`", + f"- manual_entry_count: `{first['manual_fill_plan']['manual_entry_count']}`", + "", + "## Missing Fields", + "", + ] + ) + lines.extend(f"- `{field}`" for field in first["missing_fields"]) + lines.extend( + [ "## Required Matrix", "", f"- planets: `{', '.join(summary['required_planets'])}`", @@ -206,7 +324,8 @@ def render_markdown(report: dict[str, Any]) -> str: "", "## Next Actions", "", - ] + ] + ) lines.extend(f"- {item}" for item in report["next_actions"]) lines.extend(["", "## Boundary", "", report["boundary"], ""]) return "\n".join(lines) diff --git a/scripts/tajika_annual_closure_status.py b/scripts/tajika_annual_closure_status.py index cb41ad70..ed63ad4b 100644 --- a/scripts/tajika_annual_closure_status.py +++ b/scripts/tajika_annual_closure_status.py @@ -14,6 +14,7 @@ from typing import Any ROOT = Path(__file__).resolve().parents[1] PYTHON = sys.executable FIRST_PRIORITY_CASE_ID = "template_steve_jobs_varshaphala_1984_lahiri" +FIRST_PRIORITY_TEMPLATE_PATH = "references/oracle/evidence_packet_templates/tajika_steve_jobs_1984_first_packet.json" REQUIRED_TARGET_FIELDS = [ "target.solar_return_datetime", "target.varsha_lagna_deg", @@ -66,6 +67,49 @@ def _target_missing(packet: dict[str, Any]) -> list[str]: return missing +def _group_missing_fields(missing_fields: list[str]) -> dict[str, Any]: + metadata_fields = [field for field in missing_fields if field.startswith("metadata.")] + target_fields = [field for field in missing_fields if field.startswith("target.")] + return { + "metadata": { + "count": len(metadata_fields), + "fields": metadata_fields, + }, + "target": { + "count": len(target_fields), + "fields": target_fields, + }, + } + + +def _prefilled_fields(packet: dict[str, Any], missing_fields: list[str]) -> dict[str, Any]: + missing = set(missing_fields) + metadata = { + key: value + for key, value in packet.get("metadata", {}).items() + if f"metadata.{key}" not in missing and value not in ("", None, [], {}) + } + settings = { + key: value + for key, value in packet.get("settings", {}).items() + if value not in ("", None, [], {}) + } + return { + "status": packet.get("status"), + "promotion_status_after_fill": packet.get("promotion_status_after_fill"), + "metadata": metadata, + "settings": settings, + } + + +def _manual_fill_plan(packet: dict[str, Any], missing_fields: list[str]) -> dict[str, Any]: + return { + "status_value": packet.get("promotion_status_after_fill", "external_verified"), + "manual_entry_count": len(missing_fields), + "remaining_manual_fields": missing_fields, + } + + def _apply_command(packet_path: str, oracle_file: str) -> str: return ( "python3 scripts/tajika_annual_oracle_queue.py " @@ -93,10 +137,13 @@ def build_status(oracle_file: str) -> dict[str, Any]: if priority is None: raise RuntimeError("No Tajika annual task found") - packet = priority["evidence_packet"] - capture_id = packet["capture_id"] + queue_packet = priority["evidence_packet"] + capture_id = queue_packet["capture_id"] packet_path = f"references/oracle/artifacts/pending_packets/{capture_id}.json" + template_path = FIRST_PRIORITY_TEMPLATE_PATH if priority["case_id"] == FIRST_PRIORITY_CASE_ID else packet_path + packet = json.loads((ROOT / template_path).read_text(encoding="utf-8")) missing_fields = _metadata_missing(packet) + _target_missing(packet) + missing_groups = _group_missing_fields(missing_fields) external_verified = [ task for task in annual_tasks if task.get("status") == "external_verified" and not _target_missing(task.get("evidence_packet", {})) @@ -119,6 +166,9 @@ def build_status(oracle_file: str) -> dict[str, Any]: "settings": priority.get("settings", {}), "required_target_fields": REQUIRED_TARGET_FIELDS, "missing_fields": missing_fields, + "missing_groups": missing_groups, + "prefilled_fields": _prefilled_fields(packet, missing_fields), + "manual_fill_plan": _manual_fill_plan(packet, missing_fields), "external_sources": [ "JHora Varshaphala screenshot", "PyJHora black-box annual output", @@ -158,8 +208,48 @@ def render_markdown(report: dict[str, Any]) -> str: f"- capture_id: `{first['capture_id']}`", f"- packet_path: `{first['packet_path']}`", f"- required_target_fields: `{', '.join(first['required_target_fields'])}`", - f"- missing_fields: `{', '.join(first['missing_fields'])}`", "", + "## Missing Summary", + "", + f"- metadata: `{first['missing_groups']['metadata']['count']}`", + f"- target: `{first['missing_groups']['target']['count']}`", + "", + "## Prefilled Fields", + "", + f"- status: `{first['prefilled_fields']['status']}`", + f"- promotion_status_after_fill: `{first['prefilled_fields']['promotion_status_after_fill']}`", + "", + ] + if first["prefilled_fields"]["metadata"]: + lines.append("- metadata:") + lines.append("") + lines.extend( + f" - {key}: `{value}`" + for key, value in first["prefilled_fields"]["metadata"].items() + ) + lines.append("") + if first["prefilled_fields"]["settings"]: + lines.append("- settings:") + lines.append("") + lines.extend( + f" - {key}: `{value}`" + for key, value in first["prefilled_fields"]["settings"].items() + ) + lines.append("") + lines.extend( + [ + "## Manual Fill Plan", + "", + f"- status_value: `{first['manual_fill_plan']['status_value']}`", + f"- manual_entry_count: `{first['manual_fill_plan']['manual_entry_count']}`", + "", + "## Missing Fields", + "", + ] + ) + lines.extend(f"- `{field}`" for field in first["missing_fields"]) + lines.extend( + [ "## Commands", "", "```bash", @@ -172,7 +262,8 @@ def render_markdown(report: dict[str, Any]) -> str: "", "## Next Actions", "", - ] + ] + ) lines.extend(f"- {item}" for item in report["next_actions"]) lines.extend(["", "## Boundary", "", report["boundary"], ""]) return "\n".join(lines) diff --git a/tests/test_oracle_closure_master_dashboard.py b/tests/test_oracle_closure_master_dashboard.py index 45fb84e5..93f6181d 100644 --- a/tests/test_oracle_closure_master_dashboard.py +++ b/tests/test_oracle_closure_master_dashboard.py @@ -48,8 +48,13 @@ def test_oracle_closure_master_dashboard_aggregates_all_hard_fronts() -> None: assert report["fronts"]["dasha"]["first_priority"]["case_id"] == "template_steve_jobs_dasha_lahiri" assert report["fronts"]["shadbala"]["first_priority"]["case_id"] == "template_redacted_place_shadbala_raman" assert report["fronts"]["tajika_sahams"]["first_priority"]["case_id"] == "template_steve_jobs_varshaphala_1984_lahiri" + assert report["fronts"]["dasha"]["first_priority"]["missing_groups"]["metadata"]["count"] == 5 + assert report["fronts"]["dasha"]["first_priority"]["manual_fill_plan"]["manual_entry_count"] == 6 + assert report["fronts"]["tajika_sahams"]["first_priority"]["missing_groups"]["target"]["count"] == 10 + assert report["fronts"]["shadbala"]["first_priority"]["manual_fill_plan"]["manual_entry_count"] == 55 assert report["next_action_order"][0]["front"] == "dasha" assert report["next_action_order"][0]["missing_field_count"] == 6 + assert report["next_action_order"][0]["manual_entry_count"] == 6 assert report["next_action_order"][1]["front"] == "tajika_sahams" assert report["next_action_order"][2]["front"] == "shadbala" @@ -67,3 +72,5 @@ def test_oracle_closure_master_dashboard_markdown_can_be_written(tmp_path: Path) assert "template_steve_jobs_dasha_lahiri" in markdown assert "template_redacted_place_shadbala_raman" in markdown assert "template_steve_jobs_varshaphala_1984_lahiri" in markdown + assert "manual entries" in markdown + assert "metadata missing" in markdown diff --git a/tests/test_shadbala_oracle_closure_status.py b/tests/test_shadbala_oracle_closure_status.py index ef60e424..a6595510 100644 --- a/tests/test_shadbala_oracle_closure_status.py +++ b/tests/test_shadbala_oracle_closure_status.py @@ -51,6 +51,12 @@ def test_shadbala_oracle_closure_status_identifies_first_absolute_value_packet() assert "target.moon_sidereal_longitude_deg" in report["first_priority"]["missing_fields"] assert "target.shadbala_components.Sun.sthana" in report["first_priority"]["missing_fields"] assert "target.shadbala_components.Saturn.total_rupa" in report["first_priority"]["missing_fields"] + assert report["first_priority"]["missing_groups"]["metadata"]["count"] == 5 + assert report["first_priority"]["missing_groups"]["target"]["count"] == 50 + assert report["first_priority"]["missing_groups"]["bodies"]["Sun"]["count"] == 7 + assert report["first_priority"]["prefilled_fields"]["metadata"]["ayanamsa"] == "Raman" + assert report["first_priority"]["manual_fill_plan"]["status_value"] == "external_verified" + assert report["first_priority"]["manual_fill_plan"]["manual_entry_count"] == 55 assert report["first_priority"]["reject_global_scaling"] is True assert report["first_priority"]["validate_command"] @@ -66,3 +72,6 @@ def test_shadbala_oracle_closure_status_markdown_can_be_written(tmp_path: Path) assert "can_claim_shadbala_absolute_closure: `false`" in markdown assert "external_template_redacted_place_shadbala_raman" in markdown assert "target.shadbala_components.Sun.sthana" in markdown + assert "## Missing Summary" in markdown + assert "## Prefilled Fields" in markdown + assert "## Manual Fill Plan" in markdown diff --git a/tests/test_tajika_annual_closure_status.py b/tests/test_tajika_annual_closure_status.py index 5a448451..e4931034 100644 --- a/tests/test_tajika_annual_closure_status.py +++ b/tests/test_tajika_annual_closure_status.py @@ -56,6 +56,11 @@ def test_tajika_annual_closure_status_identifies_first_annual_packet() -> None: assert "metadata.tool_name" in report["first_priority"]["missing_fields"] assert "target.solar_return_datetime" in report["first_priority"]["missing_fields"] assert "target.sahams.punya_saham" in report["first_priority"]["missing_fields"] + assert report["first_priority"]["missing_groups"]["metadata"]["count"] == 5 + assert report["first_priority"]["missing_groups"]["target"]["count"] == 10 + assert report["first_priority"]["prefilled_fields"]["metadata"]["annual_system"] == "Varshaphala/Tajika" + assert report["first_priority"]["manual_fill_plan"]["status_value"] == "external_verified" + assert report["first_priority"]["manual_fill_plan"]["manual_entry_count"] == 15 assert report["first_priority"]["validate_command"] @@ -70,3 +75,6 @@ def test_tajika_annual_closure_status_markdown_can_be_written(tmp_path: Path) -> assert "can_claim_tajika_sahams_closure: `false`" in markdown assert "external_template_steve_jobs_varshaphala_1984_lahiri" in markdown assert "target.sahams.punya_saham" in markdown + assert "## Missing Summary" in markdown + assert "## Prefilled Fields" in markdown + assert "## Manual Fill Plan" in markdown