diff --git a/references/oracle/evidence_packet_index_2026_07_19.json b/references/oracle/evidence_packet_index_2026_07_19.json index 5e5a17d2..8c58e9b6 100644 --- a/references/oracle/evidence_packet_index_2026_07_19.json +++ b/references/oracle/evidence_packet_index_2026_07_19.json @@ -5,7 +5,7 @@ "production_tuning_allowed": false, "boundary": "Index of current governance packets only. Raw oracle artifacts remain in references/oracle/artifacts and are not all duplicated here.", "summary": { - "packet_count": 128, + "packet_count": 142, "blocked_or_partial_count": 52, "human_review_required_count": 3 }, @@ -1033,6 +1033,198 @@ "claim_status": "open_queue", "consumer_policy": "research_observation_only", "claim_boundary": "Records public KP and Tajika/Varshaphala candidate sources found during WorkBuddy closure; none is a complete numeric oracle yet." + }, + { + "packet_id": "kp_exact_cusp_invocation_closure_2026_07_21", + "path": "references/oracle/kp_exact_cusp_invocation_closure_2026_07_21.json", + "domain": "kp_precision_timing", + "claim_status": "observation_only", + "consumer_policy": "research_observation_only", + "claim_boundary": "Closes exact KP cusp/star/sub/sub-sub runtime invocation using VedicAstro raw; public numeric worked-example oracle remains blocked." + }, + { + "packet_id": "tajika_steve_jobs_1984_extraction_contract_2026_07_21", + "path": "references/oracle/tajika_steve_jobs_1984_extraction_contract_2026_07_21.json", + "domain": "tajika_oracle", + "claim_status": "blocked_until_oracle", + "consumer_policy": "research_observation_only", + "claim_boundary": "Keeps Steve Jobs 1984 Tajika/Varshaphala template blocked until citable external numeric fields are captured and replayed." + }, + { + "packet_id": "kp_tajika_public_oracle_source_triage_round2_2026_07_21", + "path": "references/oracle/kp_tajika_public_oracle_source_triage_round2_2026_07_21.json", + "domain": "worked_example_collection", + "claim_status": "open_queue", + "consumer_policy": "research_observation_only", + "claim_boundary": "Round2 web triage adds KP API-surface and Steve Jobs Varshaphala numeric candidates; both remain non-oracle until source/hash/extraction/replay close." + }, + { + "packet_id": "roxyapi_kp_surface_contract_2026_07_21", + "path": "references/oracle/roxyapi_kp_surface_contract_2026_07_21.json", + "domain": "kp_precision_timing", + "claim_status": "reference_only", + "consumer_policy": "research_observation_only", + "claim_boundary": "Pins RoxyAPI KP endpoint/field surface as reference-only; same-input numeric replay and public worked example remain required before oracle use." + }, + { + "packet_id": "tajika_yumpu_source_review_gate_2026_07_21", + "path": "references/oracle/tajika_yumpu_source_review_gate_2026_07_21.json", + "domain": "tajika_oracle", + "claim_status": "blocked_until_oracle", + "consumer_policy": "research_observation_only", + "claim_boundary": "Keeps Yumpu Steve Jobs Varshaphala candidate blocked until copyright/source review, structured capture, hash, and local replay are complete." + }, + { + "packet_id": "kp_archive_worked_example_candidate_2026_07_21", + "path": "references/oracle/kp_archive_worked_example_candidate_2026_07_21.json", + "domain": "kp_precision_timing", + "claim_status": "open_queue", + "consumer_policy": "research_observation_only", + "claim_boundary": "Internet Archive KP cuspal-system text is a worked-example candidate, but remains blocked until structured numeric extraction, copyright/source review, and replay." + }, + { + "packet_id": "kp_archive_numeric_locator_packet_2026_07_21", + "path": "references/oracle/kp_archive_numeric_locator_packet_2026_07_21.json", + "domain": "kp_precision_timing", + "claim_status": "open_queue", + "consumer_policy": "research_observation_only", + "claim_boundary": "Hash-stable KP archive locator with candidate numeric line numbers; still requires permitted extraction and replay before oracle use." + }, + { + "packet_id": "tajika_yumpu_access_locator_2026_07_21", + "path": "references/oracle/tajika_yumpu_access_locator_2026_07_21.json", + "domain": "tajika_oracle", + "claim_status": "blocked_until_oracle", + "consumer_policy": "research_observation_only", + "claim_boundary": "Yumpu source is reachable and mentions Steve Jobs, but no authorized numeric Tajika/Varshaphala extraction or replay has occurred." + }, + { + "packet_id": "shadbala_component_joined_closure_packet_2026_07_21", + "path": "references/oracle/shadbala_component_joined_closure_packet_2026_07_21.json", + "domain": "shadbala_oracle", + "claim_status": "partial", + "consumer_policy": "research_observation_only", + "claim_boundary": "Joins parsed PyJHora WorkBuddy 42 component rows to same-unit Shadbala closure queue; explanatory partial only, no absolute truth upgrade." + }, + { + "packet_id": "kp_archive_numeric_extraction_result_2026_07_21", + "path": "references/oracle/kp_archive_numeric_extraction_result_2026_07_21.json", + "domain": "kp_precision_timing", + "claim_status": "blocked_until_oracle", + "consumer_policy": "research_observation_only", + "claim_boundary": "Machine extraction found one partial 11th cusp degree from KP archive text but no complete input/star-sub-sub table; oracle remains blocked." + }, + { + "packet_id": "technique_invocation_matrix_current_2026_07_21", + "path": "references/oracle/technique_invocation_matrix_current_2026_07_21.json", + "domain": "technique_invocation", + "claim_status": "partial", + "consumer_policy": "research_observation_only", + "claim_boundary": "Tracks current code/skill/API/UI/gate/oracle status for Shadbala, KP, Tajika, rectification and timing; no truth upgrade." + }, + { + "packet_id": "shadbala_priority_component_arbitration_2026_07_22", + "path": "references/oracle/shadbala_priority_component_arbitration_2026_07_22.json", + "domain": "shadbala_oracle", + "claim_status": "partial", + "consumer_policy": "research_observation_only", + "claim_boundary": "Prioritizes Naisargika/Dig/Drik Shadbala component arbitration; explanatory partial only, no absolute formula truth selected." + }, + { + "packet_id": "shadbala_hard_component_arbitration_2026_07_22", + "path": "references/oracle/shadbala_hard_component_arbitration_2026_07_22.json", + "domain": "shadbala_oracle", + "claim_status": "partial", + "consumer_policy": "research_observation_only", + "claim_boundary": "Classifies Chesta/Sthana/Kala as hard Shadbala components with method/formula blockers; no absolute truth upgrade." + }, + { + "packet_id": "kp_observation_sync_contract_2026_07_22", + "path": "references/oracle/kp_observation_sync_contract_2026_07_22.json", + "domain": "kp_precision_timing", + "claim_status": "observation_only", + "consumer_policy": "research_observation_only", + "claim_boundary": "KP is calculable/displayable as technical observation only; public numeric oracle and verified prediction remain blocked." + }, + { + "packet_id": "research_web_skill_invocation_gap_matrix_2026_07_22", + "path": "references/oracle/research_web_skill_invocation_gap_matrix_2026_07_22.json", + "domain": "research_web_skill_sync", + "claim_status": "open_queue", + "consumer_policy": "research_planning_only", + "claim_boundary": "Tracks code/skill/API/UI/oracle/commercial sync gaps; does not upgrade any technique to truth-ready." + }, + { + "packet_id": "shadbala_component_closure_rollup_2026_07_22", + "path": "references/oracle/shadbala_component_closure_rollup_2026_07_22.json", + "domain": "shadbala_component_closure", + "claim_status": "partial", + "consumer_policy": "research_observation_only", + "claim_boundary": "42 same-unit component rows are summarized for display; only Naisargika is tolerance-ready observation, no absolute Virupa truth upgrade." + }, + { + "packet_id": "kp_public_source_candidate_update_2026_07_22", + "path": "references/oracle/kp_public_source_candidate_update_2026_07_22.json", + "domain": "kp_precision_timing", + "claim_status": "blocked_until_oracle", + "consumer_policy": "research_observation_only", + "claim_boundary": "KP public reference-table candidates and one partial archive cusp fact are recorded; exact cusp/star-sub-sub oracle remains blocked." + }, + { + "packet_id": "muhurta_observation_factor_packet_2026_07_22", + "path": "references/oracle/muhurta_observation_factor_packet_2026_07_22.json", + "domain": "muhurta_factor_scoring", + "claim_status": "observation_only", + "consumer_policy": "research_observation_only", + "claim_boundary": "Tarabala/Chandrabala/Rahu Kalam/Abhijit are captured as observation factors only; no final Muhurta verdict." + }, + { + "packet_id": "horary_annual_sensitive_points_numeric_packet_queue_2026_07_22", + "path": "references/oracle/horary_annual_sensitive_points_numeric_packet_queue_2026_07_22.json", + "domain": "horary_annual_sensitive_points", + "claim_status": "open_queue", + "consumer_policy": "research_observation_only", + "claim_boundary": "Prashna/Tajika/Saham/Gulika/Sphuta numeric packet queue; candidates do not upgrade claims until complete input/raw/hash/replay close." + }, + { + "packet_id": "workbuddy_round5_transfer_status_2026_07_22", + "path": "references/oracle/workbuddy_round5_transfer_status_2026_07_22.json", + "domain": "fragment_governance", + "claim_status": "ready_contract", + "consumer_policy": "research_governance_only", + "claim_boundary": "Accounts for 20 WorkBuddy round4 candidates: transferred/reference-only/forbidden; does not claim whole-machine exhaustiveness or truth upgrade." + }, + { + "packet_id": "shadbala_formula_arbitration_queue_v2_2026_07_22", + "path": "references/oracle/shadbala_formula_arbitration_queue_v2_2026_07_22.json", + "domain": "shadbala_component_closure", + "claim_status": "partial", + "consumer_policy": "research_observation_only", + "claim_boundary": "Dig/Drik/Kala/Sthana/Chesta formula policies are queued for arbitration; no absolute Virupa truth upgrade." + }, + { + "packet_id": "muhurta_full_scoring_matrix_queue_2026_07_22", + "path": "references/oracle/muhurta_full_scoring_matrix_queue_2026_07_22.json", + "domain": "muhurta_factor_scoring", + "claim_status": "open_queue", + "consumer_policy": "research_observation_only", + "claim_boundary": "Muhurta full scoring factors are queued; factor observations allowed, final electional verdict forbidden until oracle closure." + }, + { + "packet_id": "kp_exact_cusp_public_worked_example_hunt_2026_07_22", + "path": "references/oracle/kp_exact_cusp_public_worked_example_hunt_2026_07_22.json", + "domain": "kp_precision_timing", + "claim_status": "blocked_until_oracle", + "consumer_policy": "research_observation_only", + "claim_boundary": "KP exact cusp public worked-example hunt found only candidate/reference sources; required exact cusp/star/sub/sub-sub oracle remains missing." + }, + { + "packet_id": "prashna_tajika_numeric_source_hunt_2026_07_22", + "path": "references/oracle/prashna_tajika_numeric_source_hunt_2026_07_22.json", + "domain": "horary_annual_sensitive_points", + "claim_status": "open_queue", + "consumer_policy": "research_observation_only", + "claim_boundary": "Prashna/Tajika/Gulika/Saham/Sphuta public source hunt only; candidates do not upgrade numeric oracle claims." } ] } diff --git a/references/oracle/horary_annual_sensitive_points_numeric_packet_queue_2026_07_22.json b/references/oracle/horary_annual_sensitive_points_numeric_packet_queue_2026_07_22.json new file mode 100644 index 00000000..69a838bf --- /dev/null +++ b/references/oracle/horary_annual_sensitive_points_numeric_packet_queue_2026_07_22.json @@ -0,0 +1,86 @@ +{ + "scope": "horary_annual_sensitive_points_numeric_packet_queue", + "created_at": "2026-07-22", + "claim_status": "open_queue", + "truth_matrix_allowed": false, + "production_tuning_allowed": false, + "boundary": "Prashna/Tajika/Saham/Gulika/Sphuta numeric packet queue only. Existing numeric candidates do not upgrade interpretation or prediction claims until complete input, settings, raw/hash and legal replay close.", + "rows": [ + { + "technique": "Prashna input contract", + "local_code": "available", + "numeric_candidate_status": "input_contract_ready_numeric_oracle_needed", + "source_packet": "references/oracle/prashna_input_contract_2026_07_20.json", + "missing_for_oracle": [ + "same-input public worked example", + "external replay", + "claim-gate upgrade review" + ], + "claim_boundary": "question time/place/timezone/ayanamsa/node-mode can be captured, but judgment remains observation/blocked until numeric examples close." + }, + { + "technique": "Sphuta / Trisphuta / Chatusphuta / Panchasphuta", + "local_code": "probe_available", + "numeric_candidate_status": "partial_numeric_candidate_present_not_oracle", + "source_packet": "references/oracle/prashna_numeric_oracle_packet_queue_2026_07_20.json", + "numeric_fields_present": [ + "sun", + "moon", + "rahu", + "lagna", + "gulika", + "trisphuta", + "chatusphuta", + "panchasphuta" + ], + "missing_for_oracle": [ + "complete Prashna input", + "ayanamsa", + "node mode", + "timezone", + "raw capture hash", + "local and external replay" + ], + "claim_boundary": "Numeric-looking Sphuta values are candidate evidence only." + }, + { + "technique": "Gulika", + "local_code": "available", + "numeric_candidate_status": "candidate_inside_sphuta_packet", + "source_packet": "references/oracle/prashna_numeric_oracle_packet_queue_2026_07_20.json", + "missing_for_oracle": [ + "standalone Gulika worked example", + "sunrise/sunset and day/night convention", + "same-input replay comparison" + ], + "claim_boundary": "Gulika can be calculated locally but remains observation-only without standalone oracle closure." + }, + { + "technique": "Saham", + "local_code": "available", + "numeric_candidate_status": "worked_example_needed", + "source_packet": "scripts/saham_daynight.py", + "missing_for_oracle": [ + "public Saham formula variant", + "annual/prashna input", + "expected numeric values", + "day/night convention" + ], + "claim_boundary": "Saham remains local calculation/reference-only until citable numeric packet closes." + }, + { + "technique": "Tajika / Varshaphala", + "local_code": "partial", + "numeric_candidate_status": "source_hunt_blocked", + "source_packet": "references/oracle/tajika_steve_jobs_1984_extraction_contract_2026_07_21.json", + "missing_for_oracle": [ + "clean public Steve Jobs 1984 annual chart numeric source", + "solar return convention", + "ayanamsa/node mode/timezone", + "local replay comparison", + "copyright-safe provenance" + ], + "claim_boundary": "Tajika/Varshaphala annual interpretation remains blocked/partial; do not promote from Yumpu snippets." + } + ] +} diff --git a/references/oracle/kp_archive_numeric_extraction_result_2026_07_21.json b/references/oracle/kp_archive_numeric_extraction_result_2026_07_21.json new file mode 100644 index 00000000..d8fc03d9 --- /dev/null +++ b/references/oracle/kp_archive_numeric_extraction_result_2026_07_21.json @@ -0,0 +1,24 @@ +{ + "scope": "kp_archive_numeric_extraction_result", + "created_at": "2026-07-21", + "claim_status": "blocked_until_oracle", + "source_locator": "references/oracle/kp_archive_numeric_locator_packet_2026_07_21.json", + "truth_matrix_allowed": false, + "production_tuning_allowed": false, + "numeric_oracle_ready": false, + "extracted_partial_numeric_fact": { + "line_number": 2662, + "cusp": "11th", + "sign": "Sagittarius", + "degree_dms": "27°48'40\"", + "context": "Example explains why 11th house lordship is allotted to Jupiter." + }, + "why_not_oracle": [ + "no complete birth/question input tied to this figure was extracted", + "no full star/sub/sub-sub expected result table was extracted", + "line refers reader to another book for Kalamsa/Cuspal Interlinks details", + "single cusp degree cannot validate exact KP event timing" + ], + "next_action": "Review the referenced figure/page and related book citation manually; only promote if complete input plus star/sub/sub-sub table can be captured under citation limits.", + "boundary": "This closes the machine extraction pass: a partial cusp degree was found, but a complete numeric KP oracle packet was not." +} diff --git a/references/oracle/kp_archive_numeric_locator_packet_2026_07_21.json b/references/oracle/kp_archive_numeric_locator_packet_2026_07_21.json new file mode 100644 index 00000000..b4377625 --- /dev/null +++ b/references/oracle/kp_archive_numeric_locator_packet_2026_07_21.json @@ -0,0 +1,41 @@ +{ + "scope": "kp_archive_numeric_locator_packet", + "created_at": "2026-07-21", + "claim_status": "open_queue", + "truth_matrix_allowed": false, + "production_tuning_allowed": false, + "source_url": "https://archive.org/download/Book1969LiewellynAToZHoroscopeMakerAndDelineatorKPRedIt/Jyotish_Key%20to%20Learn_K.P.%20cuspal%20system_S.P.%20Khullar_djvu.txt", + "source_sha256": "3c5c714f3f15af4784c8b647268b8349e1a11bf045481abbd56d263432dd2a9a", + "source_length_bytes": 387799, + "locator_status": "candidate_lines_found_not_oracle", + "candidate_numeric_line_count": 41, + "term_hits": { + "example": 62, + "cuspal": 224, + "longitude": 5, + "significator": 53, + "horary": 3, + "dasa": 263 + }, + "candidate_line_numbers_sample": [ + 2662, + 6465, + 6577, + 6586, + 6588, + 6737, + 10746, + 12922, + 19845, + 20692 + ], + "copyright_boundary": "locator_only_no_bulk_text_extraction", + "missing_for_oracle": [ + "manual review of candidate lines/pages", + "minimal permitted excerpt/citation policy", + "exact birth/question data for any selected worked example", + "structured cusp longitude and star/sub/sub-sub expected values", + "same-input local or VedicAstro replay" + ], + "boundary": "This packet upgrades KP archive discovery from vague candidate to hash-stable locator. It still does not provide a numeric oracle row." +} diff --git a/references/oracle/kp_archive_worked_example_candidate_2026_07_21.json b/references/oracle/kp_archive_worked_example_candidate_2026_07_21.json new file mode 100644 index 00000000..a8ff96da --- /dev/null +++ b/references/oracle/kp_archive_worked_example_candidate_2026_07_21.json @@ -0,0 +1,26 @@ +{ + "scope": "kp_archive_worked_example_candidate", + "created_at": "2026-07-21", + "claim_status": "open_queue", + "truth_matrix_allowed": false, + "production_tuning_allowed": false, + "source_url": "https://archive.org/stream/Book1969LiewellynAToZHoroscopeMakerAndDelineatorKPRedIt/Jyotish_Key%20to%20Learn_K.P.%20cuspal%20system_S.P.%20Khullar_djvu.txt", + "candidate_strength": "worked_example_text_candidate", + "observed_public_snippet_topics": [ + "Sub-Sub lord", + "cusp significator example", + "dasa lord example", + "house/cusp signification" + ], + "oracle_status": "blocked_pending_structured_numeric_extraction", + "copyright_boundary": "public_access_not_permission_to_bulk_copy", + "missing_for_oracle": [ + "book/source bibliographic review", + "specific page/section locator", + "minimal fair-use excerpt policy", + "exact cusp longitude table if present", + "star/sub/sub-sub result table extraction", + "same-input local or VedicAstro replay" + ], + "boundary": "This is the strongest KP worked-example text candidate found in this pass, but it is not yet a numeric oracle packet." +} diff --git a/references/oracle/kp_exact_cusp_invocation_closure_2026_07_21.json b/references/oracle/kp_exact_cusp_invocation_closure_2026_07_21.json new file mode 100644 index 00000000..a836bec8 --- /dev/null +++ b/references/oracle/kp_exact_cusp_invocation_closure_2026_07_21.json @@ -0,0 +1,72 @@ +{ + "scope": "kp_exact_cusp_invocation_closure", + "created_at": "2026-07-21", + "claim_status": "observation_only", + "source_raw": "references/oracle/vedicastro_kp_house_cusp_raw_2026_07_21.json", + "runtime_invocation_status": "exact_cusp_star_sub_sub_raw_available", + "public_numeric_oracle_status": "blocked_missing_public_worked_example", + "truth_matrix_allowed": false, + "production_tuning_allowed": false, + "boundary": "This closes the runtime invocation gap for exact KP house cusp/star/sub/sub-sub raw. It does not close public numeric worked-example oracle parity and cannot be used as verified event timing truth.", + "raw_hash": "2e7a6b17eb2965a60846f625f6bd8bc03555216d6225983647bcbfa23d0e345b", + "request_contract": { + "ayanamsa": "Krishnamurti", + "house_system": "Placidus", + "timezone": "America/Los_Angeles", + "birth_case": "Steve Jobs public case", + "privacy": "public_person_case_only" + }, + "schema_fields": [ + "Object", + "HouseNr", + "Rasi", + "LonDecDeg", + "SignLonDMS", + "SignLonDecDeg", + "DegSize", + "Nakshatra", + "RasiLord", + "NakshatraLord", + "SubLord", + "SubSubLord" + ], + "summary": { + "house_count": 12, + "required_fields": [ + "HouseNr", + "LonDecDeg", + "NakshatraLord", + "SubLord", + "SubSubLord" + ] + }, + "sample_cusps": [ + { + "HouseNr": 1, + "LonDecDeg": 149.434, + "NakshatraLord": "Sun", + "SubLord": "Rahu", + "SubSubLord": "Rahu" + }, + { + "HouseNr": 2, + "LonDecDeg": 175.493, + "NakshatraLord": "Mars", + "SubLord": "Rahu", + "SubSubLord": "Venus" + }, + { + "HouseNr": 3, + "LonDecDeg": 205.634, + "NakshatraLord": "Jupiter", + "SubLord": "Mercury", + "SubSubLord": "Saturn" + } + ], + "next_required_evidence": [ + "public KP worked example with exact cusp longitude", + "published star/sub/sub-sub table result", + "same ayanamsa and Placidus/KP house settings", + "field-level comparison against this raw packet" + ] +} diff --git a/references/oracle/kp_exact_cusp_public_worked_example_hunt_2026_07_22.json b/references/oracle/kp_exact_cusp_public_worked_example_hunt_2026_07_22.json new file mode 100644 index 00000000..9985175b --- /dev/null +++ b/references/oracle/kp_exact_cusp_public_worked_example_hunt_2026_07_22.json @@ -0,0 +1,54 @@ +{ + "scope": "kp_exact_cusp_public_worked_example_hunt", + "created_at": "2026-07-22", + "claim_status": "blocked_until_oracle", + "truth_matrix_allowed": false, + "production_tuning_allowed": false, + "search_status": "no_complete_public_numeric_worked_example_found", + "boundary": "This search found KP reference tables and partial example fragments, but no public worked example with complete input plus exact cusp longitude plus star/sub/sub-sub expected table.", + "required_fields": [ + "birth_or_question_input", + "place", + "timezone", + "ayanamsa", + "house_system", + "exact_cusp_longitude", + "star_lord", + "sub_lord", + "sub_sub_lord" + ], + "sources_reviewed": [ + { + "source_id": "astrosage_fundamental_principles", + "url": "https://kpastrology.astrosage.com/kp-learning-home/tutorial/chapter-2-fundamental-principles", + "useful_for": "cusp and sub-lord semantics", + "missing": ["complete worked example", "exact cusp star/sub/sub-sub expected row"] + }, + { + "source_id": "astrosage_sign_star_sub_table", + "url": "https://kpastrology.astrosage.com/reference-tables/sign-star-and-sub-table", + "useful_for": "reference table candidate", + "missing": ["same-input cusp calculation", "birth/question input"] + }, + { + "source_id": "aryanastrology_sub_lord_table", + "url": "https://aryanastrologyresearchcentre.com/2021/08/kp-astrology-sub-lord-table/", + "useful_for": "sub-lord calculation method candidate", + "missing": ["house cusp worked example", "sub-sub lord expected table"] + }, + { + "source_id": "indiadivine_horary_cuspal_sublord_fragment", + "url": "https://www.indiadivine.org/content/topic/1467658-horary-cuspal-sublord-in-the-sub-of-retrograde-planet/", + "useful_for": "partial Horary input fragment", + "missing": ["exact cusp longitude", "star/sub/sub-sub expected table", "replayable source table"] + }, + { + "source_id": "kpastrology_basics", + "url": "https://www.kpastrology.com/kpbasics.htm", + "useful_for": "cusp/star/sub concept explanation", + "missing": ["numeric worked example"] + } + ], + "next_action": "Continue manual/archive search for a citation-safe page or public PDF containing all required fields. Until then KP remains calculable/displayable as observation-only.", + "runtime_sync_policy": "observation_only_not_verified_prediction" +} diff --git a/references/oracle/kp_observation_sync_contract_2026_07_22.json b/references/oracle/kp_observation_sync_contract_2026_07_22.json new file mode 100644 index 00000000..3cf400c1 --- /dev/null +++ b/references/oracle/kp_observation_sync_contract_2026_07_22.json @@ -0,0 +1,45 @@ +{ + "scope": "kp_observation_sync_contract", + "created_at": "2026-07-22", + "claim_status": "observation_only", + "runtime_status": "calculable", + "display_status": "displayable_with_warning", + "prediction_status": "not_verified_prediction", + "truth_matrix_allowed": false, + "production_tuning_allowed": false, + "allowed_claim_level": "technical_observation", + "forbidden_claims": [ + "verified event timing", + "confirmed birth-time rectification", + "public oracle parity", + "predictive certainty from KP significators" + ], + "evidence_refs": [ + "references/oracle/kp_exact_cusp_invocation_closure_2026_07_21.json", + "references/oracle/kp_archive_numeric_extraction_result_2026_07_21.json", + "references/oracle/roxyapi_kp_surface_contract_2026_07_21.json" + ], + "display_fields": [ + "cusp_longitude", + "rasi", + "nakshatra", + "nakshatra_lord", + "sub_lord", + "sub_sub_lord", + "raw_hash", + "oracle_boundary" + ], + "sync_targets": { + "skill": "reference_only_with_boundary", + "api": "observation_endpoint_allowed", + "ui": "capability_center_badge_only", + "commercial": "eligible_as_observation_contract_not_prediction" + }, + "required_user_facing_boundary": "KP exact cusp/star/sub/sub-sub can be displayed as technical observation. Public worked-example oracle is still missing, so KP must not be used as verified precise event timing.", + "next_required_evidence": [ + "complete public KP worked example", + "same-input star/sub/sub-sub expected table", + "field-level replay against runtime raw", + "claim gate test proving verified prediction remains blocked" + ] +} diff --git a/references/oracle/kp_public_source_candidate_update_2026_07_22.json b/references/oracle/kp_public_source_candidate_update_2026_07_22.json new file mode 100644 index 00000000..e46b144c --- /dev/null +++ b/references/oracle/kp_public_source_candidate_update_2026_07_22.json @@ -0,0 +1,63 @@ +{ + "scope": "kp_public_source_candidate_update", + "created_at": "2026-07-22", + "claim_status": "blocked_until_oracle", + "truth_matrix_allowed": false, + "production_tuning_allowed": false, + "source_basis": [ + { + "source_id": "astrosage_sign_star_sub_table", + "url": "https://kpastrology.astrosage.com/reference-tables/sign-star-and-sub-table", + "use": "reference_table_candidate", + "license_boundary": "public web reference only; no bulk table copy committed", + "missing_for_numeric_oracle": [ + "complete worked-example birth/question input", + "expected exact cusp longitude", + "expected star/sub/sub-sub row tied to that same input" + ] + }, + { + "source_id": "astrosage_fundamental_principles", + "url": "https://kpastrology.astrosage.com/kp-learning-home/tutorial/chapter-2-fundamental-principles", + "use": "formula_semantics_candidate", + "observed_semantics": "Sub lords follow Vimshottari sequence inside each star.", + "license_boundary": "semantic citation only; no table implementation copied", + "missing_for_numeric_oracle": [ + "sub-sub worked example", + "house cusp calculation contract", + "same-input runtime replay" + ] + }, + { + "source_id": "archive_khullar_partial_cusp", + "url": "https://archive.org/download/Book1969LiewellynAToZHoroscopeMakerAndDelineatorKPRedIt/Jyotish_Key%20to%20Learn_K.P.%20cuspal%20system_S.P.%20Khullar_djvu.txt", + "use": "partial_numeric_candidate", + "observed_partial_fact": { + "cusp": "11th", + "sign": "Sagittarius", + "degree_dms": "27°48'40\"" + }, + "missing_for_numeric_oracle": [ + "full birth/question input", + "star/sub/sub-sub expected values", + "citation-safe page review", + "same-input local/VedicAstro replay" + ] + } + ], + "runtime_sync_policy": { + "kp_status": "calculable_displayable_public_oracle_blocked", + "allowed": [ + "technical KP cusp/star/sub/sub-sub observation", + "source/reference table provenance display", + "candidate significator table with warning" + ], + "forbidden": [ + "verified precise event timing", + "truth-matrix oracle parity", + "birth-time truth claim" + ] + }, + "next_action": "Manually inspect citation-safe pages around the archive partial cusp and search for a full public worked example with exact input plus star/sub/sub-sub table.", + "boundary": "KP has public reference-table candidates and one partial archive cusp degree. It remains observation-only until a complete numeric worked example is captured and replayed." +} diff --git a/references/oracle/kp_tajika_public_oracle_source_triage_round2_2026_07_21.json b/references/oracle/kp_tajika_public_oracle_source_triage_round2_2026_07_21.json new file mode 100644 index 00000000..620f62b0 --- /dev/null +++ b/references/oracle/kp_tajika_public_oracle_source_triage_round2_2026_07_21.json @@ -0,0 +1,40 @@ +{ + "scope": "kp_tajika_public_oracle_source_triage_round2", + "created_at": "2026-07-21", + "claim_status": "open_queue", + "truth_matrix_allowed": false, + "production_tuning_allowed": false, + "boundary": "Round2 web triage found useful KP API-surface references and a Steve Jobs Varshaphala numeric candidate, but neither is yet a clean public numeric oracle packet.", + "candidates": [ + { + "candidate_id": "roxyapi_kp_surface_candidate", + "domain": "kp_exact_cusp", + "source_url": "https://github.com/RoxyAPI/kp-astrology-api", + "supporting_url": "https://roxyapi.com/docs/guides/kp", + "promotion_status": "api_surface_reference_only", + "claim_upgrade": "none", + "useful_evidence": "Documents a KP API shape with Placidus cusps and signLord/starLord/subLord/subSubLord fields.", + "missing_for_oracle": [ + "license and reproducible local runner review", + "public worked example with expected values", + "source package/version hash", + "same-input field-level comparison" + ] + }, + { + "candidate_id": "steve_jobs_varshaphala_yumpu_candidate", + "domain": "tajika_varshaphala", + "source_url": "https://www.yumpu.com/en/document/view/40420384/ashtakavarga-system-of-prediction-a-part-40-neelastro", + "promotion_status": "numeric_candidate_needs_source_review", + "claim_upgrade": "none", + "useful_evidence": "Search snippet exposes Steve Jobs Varshaphala chart rows and annual years, including numeric chart fragments.", + "missing_for_oracle": [ + "full page capture with stable hash", + "permission/copyright review", + "structured extraction of the 1984/age-29 annual chart if present", + "metadata for ayanamsa, node mode, timezone and solar return convention", + "local replay field comparison" + ] + } + ] +} diff --git a/references/oracle/muhurta_full_scoring_matrix_queue_2026_07_22.json b/references/oracle/muhurta_full_scoring_matrix_queue_2026_07_22.json new file mode 100644 index 00000000..40d2e404 --- /dev/null +++ b/references/oracle/muhurta_full_scoring_matrix_queue_2026_07_22.json @@ -0,0 +1,83 @@ +{ + "scope": "muhurta_full_scoring_matrix_queue", + "created_at": "2026-07-22", + "claim_status": "open_queue", + "truth_matrix_allowed": false, + "production_tuning_allowed": false, + "source_observation_packet": "references/oracle/muhurta_observation_factor_packet_2026_07_22.json", + "boundary": "Full Muhurta scoring queue only. Factors may be displayed as observations; no final electional verdict is allowed until formula weights and public worked examples close.", + "factor_rows": [ + { + "factor": "Tarabala", + "runtime_status": "observation_available", + "claim": "factor_only", + "missing_for_scoring": ["activity-specific weight", "public worked example", "negative example"] + }, + { + "factor": "Chandrabala", + "runtime_status": "observation_available", + "claim": "factor_only", + "missing_for_scoring": ["birth Moon sign contract", "activity-specific weight", "public worked example"] + }, + { + "factor": "Rahu Kalam", + "runtime_status": "observation_available", + "claim": "avoidance_window_only", + "missing_for_scoring": ["location-aware sunrise/sunset replay", "activity override policy", "public worked example"] + }, + { + "factor": "Yamaganda", + "runtime_status": "local_formula_available_not_packeted", + "claim": "avoidance_window_only", + "missing_for_scoring": ["observation packet capture", "location-aware sunrise/sunset replay", "public worked example"] + }, + { + "factor": "Gulika Kalam", + "runtime_status": "local_formula_available_not_packeted", + "claim": "avoidance_window_only", + "missing_for_scoring": ["observation packet capture", "Gulika tradition variant", "public worked example"] + }, + { + "factor": "Abhijit Muhurta", + "runtime_status": "observation_available", + "claim": "reference_window_only", + "missing_for_scoring": ["weekday exception policy", "location-aware solar noon", "public worked example"] + }, + { + "factor": "Panchaka", + "runtime_status": "gap", + "claim": "not_computed", + "missing_for_scoring": ["source formula", "nakshatra/tithi mapping", "activity-specific impact", "public worked example"] + }, + { + "factor": "Vyatipata", + "runtime_status": "panchanga_yoga_detectable", + "claim": "gate_candidate_only", + "missing_for_scoring": ["hard-block vs weighted penalty policy", "public worked example"] + }, + { + "factor": "Vaidhriti", + "runtime_status": "panchanga_yoga_detectable", + "claim": "gate_candidate_only", + "missing_for_scoring": ["hard-block vs weighted penalty policy", "public worked example"] + }, + { + "factor": "Sankranti", + "runtime_status": "gap", + "claim": "not_computed", + "missing_for_scoring": ["solar ingress calculation", "punya/avoidance window policy", "public worked example"] + } + ], + "display_policy": { + "allowed": "Show factor rows and warnings with low confidence.", + "forbidden": "Do not show a final Muhurta score, best date, or auspicious verdict." + }, + "summary": { + "factor_count": 10, + "observation_available": 4, + "local_formula_available_not_packeted": 2, + "panchanga_yoga_detectable": 2, + "gap": 2, + "final_verdict_allowed": false + } +} diff --git a/references/oracle/muhurta_observation_factor_packet_2026_07_22.json b/references/oracle/muhurta_observation_factor_packet_2026_07_22.json new file mode 100644 index 00000000..d5e37438 --- /dev/null +++ b/references/oracle/muhurta_observation_factor_packet_2026_07_22.json @@ -0,0 +1,149 @@ +{ + "scope": "muhurta_observation_factor_packet", + "created_at": "2026-07-22", + "claim_status": "observation_only", + "truth_matrix_allowed": false, + "production_tuning_allowed": false, + "probe_command": "/Library/Frameworks/Python.framework/Versions/3.11/bin/python3 scripts/muhurta_factor_probe.py --date 2026-07-19 --birth-moon-nakshatra-index 4 --birth-moon-sign-index 1", + "raw_sha256": "f884d3b18a15ba901c8e2a12c18b615b00ceff0beb7d1c497e172c799cb4cb63", + "canonical_request": { + "date": "2026-07-19", + "birth_moon_nakshatra_index": 4, + "birth_moon_sign_index": 1 + }, + "factor_status": { + "tarabala": "computed_rule_probe", + "chandrabala": "computed_rule_probe", + "rahu_kalam": "present", + "abhijit_muhurta": "present" + }, + "observed_factor_keys": [ + "tarabala", + "chandrabala", + "rahu_kalam", + "abhijit_muhurta" + ], + "candidate_window_policy": { + "blockers": [], + "claim_status": "exploratory_muhurta_candidate", + "confidence_cap": "low", + "label": "abhijit_reference_window", + "signals": [ + "Tarabala", + "Chandrabala", + "Abhijit" + ] + }, + "full_scoring_status": "blocked_until_oracle", + "verified_muhurta_verdict": false, + "raw_observation": { + "boundary": "Muhurta factors are observations only;未通过完整 worked examples 与负样本验证,不能作为确定择日承诺。", + "candidate_windows": [ + { + "blockers": [], + "claim_status": "exploratory_muhurta_candidate", + "confidence_cap": "low", + "label": "abhijit_reference_window", + "signals": [ + "Tarabala", + "Chandrabala", + "Abhijit" + ] + } + ], + "claim_status": "exploratory_muhurta_candidate", + "created_at": "2026-07-19", + "date": "2026-07-19", + "ephemeris_source": "swisseph", + "factors": { + "abhijit_muhurta": { + "description": "Abhijit Muhurta 是一天中最吉祥的时段(正午前后各24分钟)", + "duration_minutes": 48, + "rule": "日升到日落共15个 muhurta,第8个(中间)即 Abhijit", + "warning": "周三(Wednesday/Budha Vara)不宜使用 Abhijit" + }, + "chandrabala": { + "favorable": true, + "relative_house": 5, + "status": "computed_rule_probe" + }, + "panchanga": { + "auspicious_count": 2, + "hora": { + "hora_from_sunrise": 6.0, + "hora_lord": "Mars", + "hora_num": 7, + "quality": "asubha" + }, + "karana": { + "is_vishti": false, + "karana": "Taitila", + "karana_num": 11, + "quality": "subha" + }, + "nakshatra": { + "moon_lon": 159.62, + "nakshatra": "Uttara Phalguni", + "nakshatra_idx": 11, + "pada": 4, + "quality": "subha", + "type": "sthira" + }, + "overall_quality": "凶(Asubha)", + "overall_score": 0.42, + "rahu_kala": { + "duration_minutes": 90.0, + "end": "18:00", + "guidance": "Avoid important beginnings and commitments.", + "label": "Rahu Kala", + "segment": 8, + "start": "16:30" + }, + "tithi": { + "full_name": "Shukla Shashthi", + "moon_sun_diff": 67.0, + "name": "Shashthi", + "paksha": "Shukla", + "quality": "mixed", + "tithi_in_paksha": 6, + "tithi_num": 6 + }, + "total_elements": 6, + "vara": { + "quality": "asubha", + "vara": "Sunday", + "vara_lord": "Sun", + "weekday_idx": 0 + }, + "warnings": [ + "⚠️ Parigha Yoga——不利时段" + ], + "yoga": { + "quality": "asubha", + "sun_moon_sum": 252.24, + "yoga": "Parigha", + "yoga_idx": 18 + } + }, + "rahu_kalam": { + "duration_minutes": 90.0, + "end": "18:00", + "guidance": "Avoid important beginnings and commitments.", + "label": "Rahu Kala", + "segment": 8, + "start": "16:30" + }, + "tarabala": { + "favorable": true, + "status": "computed_rule_probe", + "tara_class": 8, + "tara_position": 8 + } + }, + "full_scoring_status": "blocked_until_oracle", + "production_tuning_allowed": false, + "scope": "muhurta_factor_probe", + "verified_muhurta_verdict": false + }, + "boundary": "Tarabala/Chandrabala/Rahu Kalam/Abhijit are captured as observation factors only. No final Muhurta scoring or electional verdict is allowed until formula weights and public worked examples close." +} diff --git a/references/oracle/prashna_tajika_numeric_source_hunt_2026_07_22.json b/references/oracle/prashna_tajika_numeric_source_hunt_2026_07_22.json new file mode 100644 index 00000000..327b519a --- /dev/null +++ b/references/oracle/prashna_tajika_numeric_source_hunt_2026_07_22.json @@ -0,0 +1,58 @@ +{ + "scope": "prashna_tajika_numeric_source_hunt", + "created_at": "2026-07-22", + "claim_status": "open_queue", + "truth_matrix_allowed": false, + "production_tuning_allowed": false, + "boundary": "Source hunt only. New public candidates may supply formula or partial numeric facts, but none currently closes complete input + expected values + raw/hash + replay for Prashna/Gulika/Saham/Tajika.", + "candidate_sources": [ + { + "source_id": "prasna_marga_archive_text", + "url": "https://archive.org/stream/PrasnaMargaBVR/Prasna%20Marga%201_djvu.txt", + "domain": "Prashna/Sphuta", + "useful_for": "source text locator for Trisphuta/Chatusphuta/Pranasphuta formulas", + "upgrade_status": "formula_locator_only", + "missing_for_numeric_packet": ["complete worked example input", "expected local chart values", "citation-safe excerpt review"] + }, + { + "source_id": "eastrovedica_lesson49_sphuta_definitions", + "url": "https://www.eastrovedica.com/html/vedic_astrologylesson49.asp", + "domain": "Sphuta", + "useful_for": "public formula definitions for Tri/Chatu/Pancha Sphuta", + "upgrade_status": "formula_reference_only", + "missing_for_numeric_packet": ["birth/question input", "expected values", "external replay"] + }, + { + "source_id": "scribd_gulika_mandi_numeric_candidate", + "url": "https://www.scribd.com/document/551959941/calculation-and-interpretation-of-gulika-and-mandi", + "domain": "Gulika", + "useful_for": "snippet reports a Gulika longitude candidate for May 11 2014", + "upgrade_status": "numeric_candidate_needs_copyright_and_input_review", + "missing_for_numeric_packet": ["full location/timezone", "source permission/citation boundary", "local replay"] + }, + { + "source_id": "astrogle_saham_formula_reference", + "url": "https://www.astrogle.com/astrology/important-role-of-sahams-in-varshaphala-annual-chart.html", + "domain": "Saham/Tajika", + "useful_for": "Saham formula variants including day/night Punya Saham and Vivaha Saham", + "upgrade_status": "formula_reference_only", + "missing_for_numeric_packet": ["annual chart input", "expected Saham longitude", "day/night convention replay"] + }, + { + "source_id": "varshaphala_ms_mehta_pdf_candidate", + "url": "https://astrofoxx.files.wordpress.com/2018/11/jyotish_annual-horoscope_varshaphala_m-s-mehta.pdf", + "domain": "Tajika/Varshaphala", + "useful_for": "public PDF candidate for annual horoscope worked examples", + "upgrade_status": "candidate_needs_page_level_numeric_extraction", + "missing_for_numeric_packet": ["page-level worked example fields", "solar return convention", "ayanamsa/node/timezone", "raw/hash capture"] + } + ], + "next_action": "Promote only a source that supplies complete input and expected numeric fields. Keep Scribd/Yumpu snippets as candidates, not oracle packets.", + "summary": { + "candidate_count": 5, + "formula_reference_only": 2, + "formula_locator_only": 1, + "numeric_candidate_needs_review": 1, + "pdf_candidate_needs_extraction": 1 + } +} diff --git a/references/oracle/research_web_skill_commercial_gap_registry_2026_07_20.json b/references/oracle/research_web_skill_commercial_gap_registry_2026_07_20.json index b2df11d3..ea5d6f67 100644 --- a/references/oracle/research_web_skill_commercial_gap_registry_2026_07_20.json +++ b/references/oracle/research_web_skill_commercial_gap_registry_2026_07_20.json @@ -63,6 +63,16 @@ ] } }, + "completed_milestones": [ + { + "track": "kp_precision_timing_observation_sync", + "completed_at": "2026-07-22", + "contract": "references/oracle/kp_observation_sync_contract_2026_07_22.json", + "matrix": "references/oracle/technique_invocation_matrix_current_2026_07_21.json", + "status": "calculable_displayable_public_oracle_blocked", + "sync_boundary": "KP exact cusp/star/sub/sub-sub may be exposed as technical observation only. It must not be advertised as verified event timing or birth-time truth." + } + ], "delivery_queue": [ { "track": "worked_examples_to_numeric_packets", diff --git a/references/oracle/research_web_skill_invocation_gap_matrix_2026_07_22.json b/references/oracle/research_web_skill_invocation_gap_matrix_2026_07_22.json new file mode 100644 index 00000000..72526d3d --- /dev/null +++ b/references/oracle/research_web_skill_invocation_gap_matrix_2026_07_22.json @@ -0,0 +1,100 @@ +{ + "scope": "research_web_skill_invocation_gap_matrix", + "created_at": "2026-07-22", + "claim_status": "open_queue", + "production_tuning_allowed": false, + "truth_matrix_allowed": false, + "boundary": "This matrix tracks whether a Jyotish technique is actually callable by code, skill, API, and research web UI. It is not a truth upgrade matrix.", + "rows": [ + { + "technique": "Shadbala", + "code": "yes", + "skill": "yes_high_rigor_required", + "api": "yes", + "ui": "research_panel_partial", + "oracle": "component_explanatory_partial", + "next_action": "Expose same-unit component closure status in web Technique Audit instead of a single optimistic Shadbala label.", + "commercial_sync": "sync_partial_with_component_boundary" + }, + { + "technique": "KP exact cusp / star-sub-sub", + "code": "probe_available", + "skill": "reference_only_with_boundary", + "api": "observation_endpoint_allowed", + "ui": "capability_center_badge_only", + "oracle": "public_numeric_oracle_blocked", + "next_action": "Display KP as technical observation only; continue archive numeric line extraction for public worked examples.", + "commercial_sync": "sync_observation_contract_only" + }, + { + "technique": "Muhurta / Panchanga factors", + "code": "factor_probe_partial", + "skill": "partial", + "api": "partial", + "ui": "not_full_scoring", + "oracle": "factor_observation_only", + "next_action": "Add Tarabala, Chandrabala, Rahu Kalam, Abhijit factor display without final择日 verdict.", + "commercial_sync": "sync_observation_only_after_factor_contract" + }, + { + "technique": "Prashna / Saham / Gulika / Sphuta", + "code": "partial_probe_available", + "skill": "blocked_or_observation", + "api": "partial", + "ui": "not_clear", + "oracle": "worked_example_numeric_packet_needed", + "next_action": "Convert public worked examples into numeric packets before any claim upgrade.", + "commercial_sync": "do_not_sync_as_prediction" + }, + { + "technique": "Tajika / Varshaphala", + "code": "partial", + "skill": "partial", + "api": "partial", + "ui": "limited", + "oracle": "numeric_source_missing", + "next_action": "Continue source hunt for clean Steve Jobs 1984 or other public annual chart numeric packet.", + "commercial_sync": "hold_until_clean_oracle_or_reference_only" + }, + { + "technique": "Birth-time rectification", + "code": "yes_candidate_engine", + "skill": "yes_candidate_only", + "api": "yes_candidate_only", + "ui": "guided_journey_needs_maturity", + "oracle": "needs_human_labeled_holdout", + "next_action": "Improve journey resume/mobile/error handling while keeping claim candidate-only.", + "commercial_sync": "sync_journey_contract_not_birth_time_truth" + }, + { + "technique": "Day/month timing", + "code": "candidate_ranker", + "skill": "candidate_only", + "api": "candidate_windows_only", + "ui": "candidate_windows_only", + "oracle": "blocked_until_independent_labels", + "next_action": "Collect frozen positive/negative labels and run blind ranking; no tuning on existing controls.", + "commercial_sync": "sync_boundary_contract_only" + }, + { + "technique": "D1-D60 varga mapping", + "code": "generic_engine_with_special_case_gaps", + "skill": "registry_available", + "api": "partial", + "ui": "not_full_matrix", + "oracle": "external_packet_gaps", + "next_action": "Promote only mapped divisions with source/formula/oracle status visible.", + "commercial_sync": "sync_mapped_divisions_only" + }, + { + "technique": "Compatibility / relationship combinations", + "code": "foundation_available", + "skill": "rule_family_registry", + "api": "partial", + "ui": "basic", + "oracle": "advanced_overlay_unclosed", + "next_action": "Connect relationship rule-family registry to UI as evidence-weighted layers.", + "commercial_sync": "sync_foundation_only" + } + ] +} diff --git a/references/oracle/roxyapi_kp_surface_contract_2026_07_21.json b/references/oracle/roxyapi_kp_surface_contract_2026_07_21.json new file mode 100644 index 00000000..3ced429b --- /dev/null +++ b/references/oracle/roxyapi_kp_surface_contract_2026_07_21.json @@ -0,0 +1,59 @@ +{ + "scope": "roxyapi_kp_surface_contract", + "created_at": "2026-07-21", + "claim_status": "reference_only", + "truth_matrix_allowed": false, + "production_tuning_allowed": false, + "source": { + "repo_url": "https://github.com/RoxyAPI/kp-astrology-api", + "docs_url": "https://roxyapi.com/docs/guides/kp", + "license_claim_in_repo_readme": "MIT license; commercial use stated in README", + "source_review_status": "reference_only_until_dependency_and_terms_review" + }, + "api_surface": { + "endpoint": "POST /vedic-astrology/kp/chart", + "request_fields": [ + "date", + "time", + "latitude", + "longitude", + "timezone", + "ayanamsa", + "nodeType" + ], + "cusp_fields": [ + "house", + "longitude", + "sign", + "signLord", + "nakshatra", + "starLord", + "subLord", + "subSubLord", + "kpNumber" + ], + "related_outputs": [ + "planets[].subLord", + "planets[].subSubLord", + "significators.houseWise", + "significators.planetWise" + ] + }, + "local_relation": { + "local_observation_packet": "references/oracle/kp_exact_cusp_invocation_closure_2026_07_21.json", + "compatible_fields": [ + "cusp longitude", + "star/nakshatra lord", + "sub lord", + "sub-sub lord" + ] + }, + "oracle_status": "blocked_missing_same_input_numeric_replay", + "missing_for_oracle": [ + "pinned package/source commit and license terms review", + "same-input raw output with hash", + "public worked example expected values", + "field-level comparison against local/VedicAstro KP raw" + ], + "boundary": "RoxyAPI is useful as a KP surface/reference candidate. It does not close exact KP cusp oracle parity until a same-input numeric replay and public worked example are captured." +} diff --git a/references/oracle/shadbala_component_closure_rollup_2026_07_22.json b/references/oracle/shadbala_component_closure_rollup_2026_07_22.json new file mode 100644 index 00000000..6b801c22 --- /dev/null +++ b/references/oracle/shadbala_component_closure_rollup_2026_07_22.json @@ -0,0 +1,122 @@ +{ + "scope": "shadbala_component_closure_rollup", + "created_at": "2026-07-22", + "claim_status": "component_explanatory_partial", + "truth_matrix_allowed": false, + "production_tuning_allowed": false, + "source_joined_packet": "references/oracle/shadbala_component_joined_closure_packet_2026_07_21.json", + "summary": { + "total_rows": 42, + "bucket_counts": { + "method_variant": 8, + "formula_or_unit_mismatch": 27, + "within_tolerance": 7 + }, + "component_count": 6, + "absolute_truth_upgrade_count": 0, + "display_ready_observation_components": [ + "naisargika" + ] + }, + "components": [ + { + "component": "naisargika", + "row_count": 7, + "bucket_counts": { + "within_tolerance": 7 + }, + "closure_status": "observation_tolerance_ready", + "display_policy": "show_as_component_ready_observation", + "claim_upgrade": "none", + "sample_tickets": [ + "shadbala.sun.naisargika", + "shadbala.moon.naisargika", + "shadbala.mars.naisargika" + ], + "next_action": "Freeze fixed Virupa table after a second public case repeats tolerance behavior." + }, + { + "component": "dig", + "row_count": 7, + "bucket_counts": { + "formula_or_unit_mismatch": 7 + }, + "closure_status": "formula_or_unit_arbitration_required", + "display_policy": "show_as_component_partial_with_mismatch_count", + "claim_upgrade": "none", + "sample_tickets": [ + "shadbala.sun.dig", + "shadbala.moon.dig", + "shadbala.mars.dig" + ], + "next_action": "Pin cusp/whole-house direction policy and compare against source-cited worked example." + }, + { + "component": "drik", + "row_count": 7, + "bucket_counts": { + "formula_or_unit_mismatch": 7 + }, + "closure_status": "formula_or_unit_arbitration_required", + "display_policy": "show_as_component_partial_with_mismatch_count", + "claim_upgrade": "none", + "sample_tickets": [ + "shadbala.sun.drik", + "shadbala.moon.drik", + "shadbala.mars.drik" + ], + "next_action": "Pin aspect model, orb/interpolation and benefic/malefic policy before parity claim." + }, + { + "component": "chesta", + "row_count": 7, + "bucket_counts": { + "method_variant": 6, + "formula_or_unit_mismatch": 1 + }, + "closure_status": "method_variant_requires_source_choice", + "display_policy": "show_as_method_variant_not_error", + "claim_upgrade": "none", + "sample_tickets": [ + "shadbala.sun.chesta", + "shadbala.moon.chesta", + "shadbala.mars.chesta" + ], + "next_action": "Preserve method_variant until mean-motion/Seeghrochcha/luminary policy is selected." + }, + { + "component": "sthana", + "row_count": 7, + "bucket_counts": { + "method_variant": 2, + "formula_or_unit_mismatch": 5 + }, + "closure_status": "formula_or_unit_arbitration_required", + "display_policy": "show_as_component_partial_with_mismatch_count", + "claim_upgrade": "none", + "sample_tickets": [ + "shadbala.sun.sthana", + "shadbala.moon.sthana", + "shadbala.mars.sthana" + ], + "next_action": "Split Sthana subcomponents and pin dignity/Moolatrikona/varga policies." + }, + { + "component": "kala", + "row_count": 7, + "bucket_counts": { + "formula_or_unit_mismatch": 7 + }, + "closure_status": "formula_or_unit_arbitration_required", + "display_policy": "show_as_component_partial_with_mismatch_count", + "claim_upgrade": "none", + "sample_tickets": [ + "shadbala.sun.kala", + "shadbala.moon.kala", + "shadbala.mars.kala" + ], + "next_action": "Pin sunrise/day-night/time-context subcomponent formulas and unit caps." + } + ], + "boundary": "Shadbala is component-level explanatory partial. Naisargika may be displayed as tolerance-ready observation; Dig/Drik/Kala/Sthana/Chesta remain source/method arbitration, not absolute Virupa parity." +} diff --git a/references/oracle/shadbala_component_joined_closure_packet_2026_07_21.json b/references/oracle/shadbala_component_joined_closure_packet_2026_07_21.json new file mode 100644 index 00000000..d7084fcd --- /dev/null +++ b/references/oracle/shadbala_component_joined_closure_packet_2026_07_21.json @@ -0,0 +1,950 @@ +{ + "boundary": "Joined PyJHora WorkBuddy component rows to existing same-unit closure tickets. This improves explanation and prioritization only; absolute parity remains unclaimed.", + "claim_status": "partial", + "component_priority": [ + { + "bucket_counts": { + "within_tolerance": 7 + }, + "component": "naisargika", + "recommended_next_action": "freeze_observation_tolerance_after_second_case" + }, + { + "bucket_counts": { + "formula_or_unit_mismatch": 7 + }, + "component": "dig", + "recommended_next_action": "formula_source_arbitration" + }, + { + "bucket_counts": { + "formula_or_unit_mismatch": 7 + }, + "component": "drik", + "recommended_next_action": "formula_source_arbitration" + }, + { + "bucket_counts": { + "formula_or_unit_mismatch": 1, + "method_variant": 6 + }, + "component": "chesta", + "recommended_next_action": "preserve_method_variant" + }, + { + "bucket_counts": { + "formula_or_unit_mismatch": 5, + "method_variant": 2 + }, + "component": "sthana", + "recommended_next_action": "preserve_method_variant" + }, + { + "bucket_counts": { + "formula_or_unit_mismatch": 7 + }, + "component": "kala", + "recommended_next_action": "formula_source_arbitration" + } + ], + "created_at": "2026-07-21", + "joined_rows": [ + { + "canonical_component": "Sthanabala", + "claim_boundary": "Component-level explanatory partial only; no absolute Shadbala truth upgrade.", + "claim_upgrade": "none", + "closure_bucket": "method_variant", + "component": "sthana", + "next_evidence_owner": "method_variant_decision", + "normalized_values_virupa": { + "jyotishganit": 153.341, + "local": 217.09, + "vp_jain_local": 157.05, + "vp_jain_published": 172.04, + "xalen": 235.83916197045576 + }, + "planet": "Sun", + "pyjhora_source_artifact_sha256": "65f652ac47d4a81ab43568bde8c5d7b9fac09d45f399564500c5af1a12db96c3", + "pyjhora_workbuddy_rupa": 3.6182, + "pyjhora_workbuddy_virupa": 217.09, + "same_unit_classification": "method_variant", + "ticket_id": "shadbala.sun.sthana" + }, + { + "canonical_component": "Digbala", + "claim_boundary": "Component-level explanatory partial only; no absolute Shadbala truth upgrade.", + "claim_upgrade": "none", + "closure_bucket": "formula_or_unit_mismatch", + "component": "dig", + "next_evidence_owner": "formula_source_arbitration", + "normalized_values_virupa": { + "jyotishganit": 29.175, + "local": 24.81, + "vp_jain_local": 6.6, + "vp_jain_published": 6.59, + "xalen": 30.0 + }, + "planet": "Sun", + "pyjhora_source_artifact_sha256": "65f652ac47d4a81ab43568bde8c5d7b9fac09d45f399564500c5af1a12db96c3", + "pyjhora_workbuddy_rupa": 2.3498, + "pyjhora_workbuddy_virupa": 140.99, + "same_unit_classification": "formula_or_unit_mismatch", + "ticket_id": "shadbala.sun.dig" + }, + { + "canonical_component": "Kaalabala", + "claim_boundary": "Component-level explanatory partial only; no absolute Shadbala truth upgrade.", + "claim_upgrade": "none", + "closure_bucket": "formula_or_unit_mismatch", + "component": "kala", + "next_evidence_owner": "formula_source_arbitration", + "normalized_values_virupa": { + "jyotishganit": 148.893, + "local": 140.98, + "vp_jain_local": 81.8, + "vp_jain_published": 81.8, + "xalen": 133.08365500051036 + }, + "planet": "Sun", + "pyjhora_source_artifact_sha256": "65f652ac47d4a81ab43568bde8c5d7b9fac09d45f399564500c5af1a12db96c3", + "pyjhora_workbuddy_rupa": 0.4135, + "pyjhora_workbuddy_virupa": 24.81, + "same_unit_classification": "formula_or_unit_mismatch", + "ticket_id": "shadbala.sun.kala" + }, + { + "canonical_component": "Cheshtabala", + "claim_boundary": "Component-level explanatory partial only; no absolute Shadbala truth upgrade.", + "claim_upgrade": "none", + "closure_bucket": "method_variant", + "component": "chesta", + "next_evidence_owner": "method_variant_decision", + "normalized_values_virupa": { + "jyotishganit": 37.06, + "local": 36.0, + "vp_jain_local": 70.14, + "vp_jain_published": 0.0, + "xalen": 30.0 + }, + "planet": "Sun", + "pyjhora_source_artifact_sha256": "65f652ac47d4a81ab43568bde8c5d7b9fac09d45f399564500c5af1a12db96c3", + "pyjhora_workbuddy_rupa": 0.0, + "pyjhora_workbuddy_virupa": 0.0, + "same_unit_classification": "method_variant", + "ticket_id": "shadbala.sun.chesta" + }, + { + "canonical_component": "Naisargikabala", + "claim_boundary": "Component-level explanatory partial only; no absolute Shadbala truth upgrade.", + "claim_upgrade": "none", + "closure_bucket": "within_tolerance", + "component": "naisargika", + "next_evidence_owner": "ready_for_tolerance_freeze", + "normalized_values_virupa": { + "jyotishganit": 60.0, + "local": 60.0, + "vp_jain_local": 60.0, + "vp_jain_published": 60.0, + "xalen": 60.0 + }, + "planet": "Sun", + "pyjhora_source_artifact_sha256": "65f652ac47d4a81ab43568bde8c5d7b9fac09d45f399564500c5af1a12db96c3", + "pyjhora_workbuddy_rupa": 1.0, + "pyjhora_workbuddy_virupa": 60.0, + "same_unit_classification": "within_1_virupa_observation", + "ticket_id": "shadbala.sun.naisargika" + }, + { + "canonical_component": "Drikbala", + "claim_boundary": "Component-level explanatory partial only; no absolute Shadbala truth upgrade.", + "claim_upgrade": "none", + "closure_bucket": "formula_or_unit_mismatch", + "component": "drik", + "next_evidence_owner": "formula_source_arbitration", + "normalized_values_virupa": { + "jyotishganit": -6.462, + "local": 1.74, + "vp_jain_local": 11.25, + "vp_jain_published": 11.24, + "xalen": 3.75 + }, + "planet": "Sun", + "pyjhora_source_artifact_sha256": "65f652ac47d4a81ab43568bde8c5d7b9fac09d45f399564500c5af1a12db96c3", + "pyjhora_workbuddy_rupa": 0.029, + "pyjhora_workbuddy_virupa": 1.74, + "same_unit_classification": "formula_or_unit_mismatch", + "ticket_id": "shadbala.sun.drik" + }, + { + "canonical_component": "Sthanabala", + "claim_boundary": "Component-level explanatory partial only; no absolute Shadbala truth upgrade.", + "claim_upgrade": "none", + "closure_bucket": "formula_or_unit_mismatch", + "component": "sthana", + "next_evidence_owner": "formula_source_arbitration", + "normalized_values_virupa": { + "jyotishganit": 141.341, + "local": 246.34, + "vp_jain_local": 77.17, + "vp_jain_published": 77.17, + "xalen": 193.83884030327874 + }, + "planet": "Moon", + "pyjhora_source_artifact_sha256": "65f652ac47d4a81ab43568bde8c5d7b9fac09d45f399564500c5af1a12db96c3", + "pyjhora_workbuddy_rupa": 4.1057, + "pyjhora_workbuddy_virupa": 246.34, + "same_unit_classification": "formula_or_unit_mismatch", + "ticket_id": "shadbala.moon.sthana" + }, + { + "canonical_component": "Digbala", + "claim_boundary": "Component-level explanatory partial only; no absolute Shadbala truth upgrade.", + "claim_upgrade": "none", + "closure_bucket": "formula_or_unit_mismatch", + "component": "dig", + "next_evidence_owner": "formula_source_arbitration", + "normalized_values_virupa": { + "jyotishganit": 20.159, + "local": 95.48, + "vp_jain_local": 12.21, + "vp_jain_published": 12.22, + "xalen": 20.000000000000004 + }, + "planet": "Moon", + "pyjhora_source_artifact_sha256": "65f652ac47d4a81ab43568bde8c5d7b9fac09d45f399564500c5af1a12db96c3", + "pyjhora_workbuddy_rupa": 2.493, + "pyjhora_workbuddy_virupa": 149.58, + "same_unit_classification": "formula_or_unit_mismatch", + "ticket_id": "shadbala.moon.dig" + }, + { + "canonical_component": "Kaalabala", + "claim_boundary": "Component-level explanatory partial only; no absolute Shadbala truth upgrade.", + "claim_upgrade": "none", + "closure_bucket": "formula_or_unit_mismatch", + "component": "kala", + "next_evidence_owner": "formula_source_arbitration", + "normalized_values_virupa": { + "jyotishganit": 183.112, + "local": 149.61, + "vp_jain_local": 205.96, + "vp_jain_published": 205.85, + "xalen": 106.91634499948964 + }, + "planet": "Moon", + "pyjhora_source_artifact_sha256": "65f652ac47d4a81ab43568bde8c5d7b9fac09d45f399564500c5af1a12db96c3", + "pyjhora_workbuddy_rupa": 1.5913, + "pyjhora_workbuddy_virupa": 95.48, + "same_unit_classification": "formula_or_unit_mismatch", + "ticket_id": "shadbala.moon.kala" + }, + { + "canonical_component": "Cheshtabala", + "claim_boundary": "Component-level explanatory partial only; no absolute Shadbala truth upgrade.", + "claim_upgrade": "none", + "closure_bucket": "method_variant", + "component": "chesta", + "next_evidence_owner": "method_variant_decision", + "normalized_values_virupa": { + "jyotishganit": 10.667, + "local": 21.34, + "vp_jain_local": 108.76, + "vp_jain_published": 0.0, + "xalen": 30.0 + }, + "planet": "Moon", + "pyjhora_source_artifact_sha256": "65f652ac47d4a81ab43568bde8c5d7b9fac09d45f399564500c5af1a12db96c3", + "pyjhora_workbuddy_rupa": 0.0, + "pyjhora_workbuddy_virupa": 0.0, + "same_unit_classification": "method_variant", + "ticket_id": "shadbala.moon.chesta" + }, + { + "canonical_component": "Naisargikabala", + "claim_boundary": "Component-level explanatory partial only; no absolute Shadbala truth upgrade.", + "claim_upgrade": "none", + "closure_bucket": "within_tolerance", + "component": "naisargika", + "next_evidence_owner": "ready_for_tolerance_freeze", + "normalized_values_virupa": { + "jyotishganit": 51.43, + "local": 51.43, + "vp_jain_local": 51.43, + "vp_jain_published": 51.43, + "xalen": 51.43 + }, + "planet": "Moon", + "pyjhora_source_artifact_sha256": "65f652ac47d4a81ab43568bde8c5d7b9fac09d45f399564500c5af1a12db96c3", + "pyjhora_workbuddy_rupa": 0.8572, + "pyjhora_workbuddy_virupa": 51.43, + "same_unit_classification": "within_1_virupa_observation", + "ticket_id": "shadbala.moon.naisargika" + }, + { + "canonical_component": "Drikbala", + "claim_boundary": "Component-level explanatory partial only; no absolute Shadbala truth upgrade.", + "claim_upgrade": "none", + "closure_bucket": "formula_or_unit_mismatch", + "component": "drik", + "next_evidence_owner": "formula_source_arbitration", + "normalized_values_virupa": { + "jyotishganit": 13.946, + "local": 20.06, + "vp_jain_local": -0.33, + "vp_jain_published": -0.32, + "xalen": 18.75 + }, + "planet": "Moon", + "pyjhora_source_artifact_sha256": "65f652ac47d4a81ab43568bde8c5d7b9fac09d45f399564500c5af1a12db96c3", + "pyjhora_workbuddy_rupa": 0.3343, + "pyjhora_workbuddy_virupa": 20.06, + "same_unit_classification": "formula_or_unit_mismatch", + "ticket_id": "shadbala.moon.drik" + }, + { + "canonical_component": "Sthanabala", + "claim_boundary": "Component-level explanatory partial only; no absolute Shadbala truth upgrade.", + "claim_upgrade": "none", + "closure_bucket": "formula_or_unit_mismatch", + "component": "sthana", + "next_evidence_owner": "formula_source_arbitration", + "normalized_values_virupa": { + "jyotishganit": 232.378, + "local": 198.63, + "vp_jain_local": 184.94, + "vp_jain_published": 184.94, + "xalen": 213.63005915206912 + }, + "planet": "Mars", + "pyjhora_source_artifact_sha256": "65f652ac47d4a81ab43568bde8c5d7b9fac09d45f399564500c5af1a12db96c3", + "pyjhora_workbuddy_rupa": 3.3105, + "pyjhora_workbuddy_virupa": 198.63, + "same_unit_classification": "formula_or_unit_mismatch", + "ticket_id": "shadbala.mars.sthana" + }, + { + "canonical_component": "Digbala", + "claim_boundary": "Component-level explanatory partial only; no absolute Shadbala truth upgrade.", + "claim_upgrade": "none", + "closure_bucket": "formula_or_unit_mismatch", + "component": "dig", + "next_evidence_owner": "formula_source_arbitration", + "normalized_values_virupa": { + "jyotishganit": 46.955, + "local": 77.41, + "vp_jain_local": 20.98, + "vp_jain_published": 20.99, + "xalen": 50.0 + }, + "planet": "Mars", + "pyjhora_source_artifact_sha256": "65f652ac47d4a81ab43568bde8c5d7b9fac09d45f399564500c5af1a12db96c3", + "pyjhora_workbuddy_rupa": 2.1322, + "pyjhora_workbuddy_virupa": 127.93, + "same_unit_classification": "formula_or_unit_mismatch", + "ticket_id": "shadbala.mars.dig" + }, + { + "canonical_component": "Kaalabala", + "claim_boundary": "Component-level explanatory partial only; no absolute Shadbala truth upgrade.", + "claim_upgrade": "none", + "closure_bucket": "formula_or_unit_mismatch", + "component": "kala", + "next_evidence_owner": "formula_source_arbitration", + "normalized_values_virupa": { + "jyotishganit": 106.407, + "local": 127.92, + "vp_jain_local": 158.34, + "vp_jain_published": 158.08, + "xalen": 85.58365500051036 + }, + "planet": "Mars", + "pyjhora_source_artifact_sha256": "65f652ac47d4a81ab43568bde8c5d7b9fac09d45f399564500c5af1a12db96c3", + "pyjhora_workbuddy_rupa": 1.2902, + "pyjhora_workbuddy_virupa": 77.41, + "same_unit_classification": "formula_or_unit_mismatch", + "ticket_id": "shadbala.mars.kala" + }, + { + "canonical_component": "Cheshtabala", + "claim_boundary": "Component-level explanatory partial only; no absolute Shadbala truth upgrade.", + "claim_upgrade": "none", + "closure_bucket": "method_variant", + "component": "chesta", + "next_evidence_owner": "method_variant_decision", + "normalized_values_virupa": { + "jyotishganit": 22.864, + "local": 21.6, + "vp_jain_local": 19.25, + "vp_jain_published": 20.93, + "xalen": 15.0 + }, + "planet": "Mars", + "pyjhora_source_artifact_sha256": "65f652ac47d4a81ab43568bde8c5d7b9fac09d45f399564500c5af1a12db96c3", + "pyjhora_workbuddy_rupa": 1.643, + "pyjhora_workbuddy_virupa": 98.58, + "same_unit_classification": "method_variant", + "ticket_id": "shadbala.mars.chesta" + }, + { + "canonical_component": "Naisargikabala", + "claim_boundary": "Component-level explanatory partial only; no absolute Shadbala truth upgrade.", + "claim_upgrade": "none", + "closure_bucket": "within_tolerance", + "component": "naisargika", + "next_evidence_owner": "ready_for_tolerance_freeze", + "normalized_values_virupa": { + "jyotishganit": 17.14, + "local": 17.14, + "vp_jain_local": 17.14, + "vp_jain_published": 17.14, + "xalen": 17.14 + }, + "planet": "Mars", + "pyjhora_source_artifact_sha256": "65f652ac47d4a81ab43568bde8c5d7b9fac09d45f399564500c5af1a12db96c3", + "pyjhora_workbuddy_rupa": 0.2857, + "pyjhora_workbuddy_virupa": 17.14, + "same_unit_classification": "within_1_virupa_observation", + "ticket_id": "shadbala.mars.naisargika" + }, + { + "canonical_component": "Drikbala", + "claim_boundary": "Component-level explanatory partial only; no absolute Shadbala truth upgrade.", + "claim_upgrade": "none", + "closure_bucket": "formula_or_unit_mismatch", + "component": "drik", + "next_evidence_owner": "formula_source_arbitration", + "normalized_values_virupa": { + "jyotishganit": 12.483, + "local": 13.49, + "vp_jain_local": -5.1, + "vp_jain_published": -5.1, + "xalen": 15.0 + }, + "planet": "Mars", + "pyjhora_source_artifact_sha256": "65f652ac47d4a81ab43568bde8c5d7b9fac09d45f399564500c5af1a12db96c3", + "pyjhora_workbuddy_rupa": 0.2248, + "pyjhora_workbuddy_virupa": 13.49, + "same_unit_classification": "formula_or_unit_mismatch", + "ticket_id": "shadbala.mars.drik" + }, + { + "canonical_component": "Sthanabala", + "claim_boundary": "Component-level explanatory partial only; no absolute Shadbala truth upgrade.", + "claim_upgrade": "none", + "closure_bucket": "method_variant", + "component": "sthana", + "next_evidence_owner": "method_variant_decision", + "normalized_values_virupa": { + "jyotishganit": 111.704, + "local": 167.96, + "vp_jain_local": 223.16, + "vp_jain_published": 238.16, + "xalen": 134.20630911404785 + }, + "planet": "Mercury", + "pyjhora_source_artifact_sha256": "65f652ac47d4a81ab43568bde8c5d7b9fac09d45f399564500c5af1a12db96c3", + "pyjhora_workbuddy_rupa": 2.7993, + "pyjhora_workbuddy_virupa": 167.96, + "same_unit_classification": "method_variant", + "ticket_id": "shadbala.mercury.sthana" + }, + { + "canonical_component": "Digbala", + "claim_boundary": "Component-level explanatory partial only; no absolute Shadbala truth upgrade.", + "claim_upgrade": "none", + "closure_bucket": "formula_or_unit_mismatch", + "component": "dig", + "next_evidence_owner": "formula_source_arbitration", + "normalized_values_virupa": { + "jyotishganit": 7.954, + "local": 12.64, + "vp_jain_local": 31.97, + "vp_jain_published": 31.97, + "xalen": 9.999999999999998 + }, + "planet": "Mercury", + "pyjhora_source_artifact_sha256": "65f652ac47d4a81ab43568bde8c5d7b9fac09d45f399564500c5af1a12db96c3", + "pyjhora_workbuddy_rupa": 2.0297, + "pyjhora_workbuddy_virupa": 121.78, + "same_unit_classification": "formula_or_unit_mismatch", + "ticket_id": "shadbala.mercury.dig" + }, + { + "canonical_component": "Kaalabala", + "claim_boundary": "Component-level explanatory partial only; no absolute Shadbala truth upgrade.", + "claim_upgrade": "none", + "closure_bucket": "formula_or_unit_mismatch", + "component": "kala", + "next_evidence_owner": "formula_source_arbitration", + "normalized_values_virupa": { + "jyotishganit": 72.089, + "local": 121.79, + "vp_jain_local": 211.48, + "vp_jain_published": 210.68, + "xalen": 85.66634499948964 + }, + "planet": "Mercury", + "pyjhora_source_artifact_sha256": "65f652ac47d4a81ab43568bde8c5d7b9fac09d45f399564500c5af1a12db96c3", + "pyjhora_workbuddy_rupa": 0.2107, + "pyjhora_workbuddy_virupa": 12.64, + "same_unit_classification": "formula_or_unit_mismatch", + "ticket_id": "shadbala.mercury.kala" + }, + { + "canonical_component": "Cheshtabala", + "claim_boundary": "Component-level explanatory partial only; no absolute Shadbala truth upgrade.", + "claim_upgrade": "none", + "closure_bucket": "method_variant", + "component": "chesta", + "next_evidence_owner": "method_variant_decision", + "normalized_values_virupa": { + "jyotishganit": 35.368, + "local": 47.8, + "vp_jain_local": 18.08, + "vp_jain_published": 28.76, + "xalen": 60.0 + }, + "planet": "Mercury", + "pyjhora_source_artifact_sha256": "65f652ac47d4a81ab43568bde8c5d7b9fac09d45f399564500c5af1a12db96c3", + "pyjhora_workbuddy_rupa": 0.763, + "pyjhora_workbuddy_virupa": 45.78, + "same_unit_classification": "method_variant", + "ticket_id": "shadbala.mercury.chesta" + }, + { + "canonical_component": "Naisargikabala", + "claim_boundary": "Component-level explanatory partial only; no absolute Shadbala truth upgrade.", + "claim_upgrade": "none", + "closure_bucket": "within_tolerance", + "component": "naisargika", + "next_evidence_owner": "ready_for_tolerance_freeze", + "normalized_values_virupa": { + "jyotishganit": 25.71, + "local": 25.71, + "vp_jain_local": 25.71, + "vp_jain_published": 25.71, + "xalen": 25.71 + }, + "planet": "Mercury", + "pyjhora_source_artifact_sha256": "65f652ac47d4a81ab43568bde8c5d7b9fac09d45f399564500c5af1a12db96c3", + "pyjhora_workbuddy_rupa": 0.4285, + "pyjhora_workbuddy_virupa": 25.71, + "same_unit_classification": "within_1_virupa_observation", + "ticket_id": "shadbala.mercury.naisargika" + }, + { + "canonical_component": "Drikbala", + "claim_boundary": "Component-level explanatory partial only; no absolute Shadbala truth upgrade.", + "claim_upgrade": "none", + "closure_bucket": "formula_or_unit_mismatch", + "component": "drik", + "next_evidence_owner": "formula_source_arbitration", + "normalized_values_virupa": { + "jyotishganit": -10.985, + "local": -10.62, + "vp_jain_local": 4.29, + "vp_jain_published": 4.29, + "xalen": 0.0 + }, + "planet": "Mercury", + "pyjhora_source_artifact_sha256": "65f652ac47d4a81ab43568bde8c5d7b9fac09d45f399564500c5af1a12db96c3", + "pyjhora_workbuddy_rupa": -0.1772, + "pyjhora_workbuddy_virupa": -10.63, + "same_unit_classification": "formula_or_unit_mismatch", + "ticket_id": "shadbala.mercury.drik" + }, + { + "canonical_component": "Sthanabala", + "claim_boundary": "Component-level explanatory partial only; no absolute Shadbala truth upgrade.", + "claim_upgrade": "none", + "closure_bucket": "formula_or_unit_mismatch", + "component": "sthana", + "next_evidence_owner": "formula_source_arbitration", + "normalized_values_virupa": { + "jyotishganit": 226.178, + "local": 201.81, + "vp_jain_local": 152.97, + "vp_jain_published": 152.98, + "xalen": 211.17574521147395 + }, + "planet": "Jupiter", + "pyjhora_source_artifact_sha256": "65f652ac47d4a81ab43568bde8c5d7b9fac09d45f399564500c5af1a12db96c3", + "pyjhora_workbuddy_rupa": 3.3633, + "pyjhora_workbuddy_virupa": 201.8, + "same_unit_classification": "formula_or_unit_mismatch", + "ticket_id": "shadbala.jupiter.sthana" + }, + { + "canonical_component": "Digbala", + "claim_boundary": "Component-level explanatory partial only; no absolute Shadbala truth upgrade.", + "claim_upgrade": "none", + "closure_bucket": "formula_or_unit_mismatch", + "component": "dig", + "next_evidence_owner": "formula_source_arbitration", + "normalized_values_virupa": { + "jyotishganit": 44.095, + "local": 80.59, + "vp_jain_local": 31.99, + "vp_jain_published": 31.99, + "xalen": 40.00000000000001 + }, + "planet": "Jupiter", + "pyjhora_source_artifact_sha256": "65f652ac47d4a81ab43568bde8c5d7b9fac09d45f399564500c5af1a12db96c3", + "pyjhora_workbuddy_rupa": 3.3218, + "pyjhora_workbuddy_virupa": 199.31, + "same_unit_classification": "formula_or_unit_mismatch", + "ticket_id": "shadbala.jupiter.dig" + }, + { + "canonical_component": "Kaalabala", + "claim_boundary": "Component-level explanatory partial only; no absolute Shadbala truth upgrade.", + "claim_upgrade": "none", + "closure_bucket": "formula_or_unit_mismatch", + "component": "kala", + "next_evidence_owner": "formula_source_arbitration", + "normalized_values_virupa": { + "jyotishganit": 250.984, + "local": 199.32, + "vp_jain_local": 143.34, + "vp_jain_published": 144.22, + "xalen": 94.41634499948964 + }, + "planet": "Jupiter", + "pyjhora_source_artifact_sha256": "65f652ac47d4a81ab43568bde8c5d7b9fac09d45f399564500c5af1a12db96c3", + "pyjhora_workbuddy_rupa": 1.3433, + "pyjhora_workbuddy_virupa": 80.6, + "same_unit_classification": "formula_or_unit_mismatch", + "ticket_id": "shadbala.jupiter.kala" + }, + { + "canonical_component": "Cheshtabala", + "claim_boundary": "Component-level explanatory partial only; no absolute Shadbala truth upgrade.", + "claim_upgrade": "none", + "closure_bucket": "method_variant", + "component": "chesta", + "next_evidence_owner": "method_variant_decision", + "normalized_values_virupa": { + "jyotishganit": 36.424, + "local": 46.49, + "vp_jain_local": 11.23, + "vp_jain_published": 8.43, + "xalen": 60.0 + }, + "planet": "Jupiter", + "pyjhora_source_artifact_sha256": "65f652ac47d4a81ab43568bde8c5d7b9fac09d45f399564500c5af1a12db96c3", + "pyjhora_workbuddy_rupa": 1.2333, + "pyjhora_workbuddy_virupa": 74.0, + "same_unit_classification": "method_variant", + "ticket_id": "shadbala.jupiter.chesta" + }, + { + "canonical_component": "Naisargikabala", + "claim_boundary": "Component-level explanatory partial only; no absolute Shadbala truth upgrade.", + "claim_upgrade": "none", + "closure_bucket": "within_tolerance", + "component": "naisargika", + "next_evidence_owner": "ready_for_tolerance_freeze", + "normalized_values_virupa": { + "jyotishganit": 34.29, + "local": 34.29, + "vp_jain_local": 34.29, + "vp_jain_published": 34.29, + "xalen": 34.29 + }, + "planet": "Jupiter", + "pyjhora_source_artifact_sha256": "65f652ac47d4a81ab43568bde8c5d7b9fac09d45f399564500c5af1a12db96c3", + "pyjhora_workbuddy_rupa": 0.5715, + "pyjhora_workbuddy_virupa": 34.29, + "same_unit_classification": "within_1_virupa_observation", + "ticket_id": "shadbala.jupiter.naisargika" + }, + { + "canonical_component": "Drikbala", + "claim_boundary": "Component-level explanatory partial only; no absolute Shadbala truth upgrade.", + "claim_upgrade": "none", + "closure_bucket": "formula_or_unit_mismatch", + "component": "drik", + "next_evidence_owner": "formula_source_arbitration", + "normalized_values_virupa": { + "jyotishganit": 4.072, + "local": 6.9, + "vp_jain_local": 4.31, + "vp_jain_published": 4.32, + "xalen": -3.75 + }, + "planet": "Jupiter", + "pyjhora_source_artifact_sha256": "65f652ac47d4a81ab43568bde8c5d7b9fac09d45f399564500c5af1a12db96c3", + "pyjhora_workbuddy_rupa": 0.1148, + "pyjhora_workbuddy_virupa": 6.89, + "same_unit_classification": "formula_or_unit_mismatch", + "ticket_id": "shadbala.jupiter.drik" + }, + { + "canonical_component": "Sthanabala", + "claim_boundary": "Component-level explanatory partial only; no absolute Shadbala truth upgrade.", + "claim_upgrade": "none", + "closure_bucket": "formula_or_unit_mismatch", + "component": "sthana", + "next_evidence_owner": "formula_source_arbitration", + "normalized_values_virupa": { + "jyotishganit": 112.816, + "local": 154.06, + "vp_jain_local": 198.09, + "vp_jain_published": 198.08, + "xalen": 165.31374287471633 + }, + "planet": "Venus", + "pyjhora_source_artifact_sha256": "65f652ac47d4a81ab43568bde8c5d7b9fac09d45f399564500c5af1a12db96c3", + "pyjhora_workbuddy_rupa": 2.5677, + "pyjhora_workbuddy_virupa": 154.06, + "same_unit_classification": "formula_or_unit_mismatch", + "ticket_id": "shadbala.venus.sthana" + }, + { + "canonical_component": "Digbala", + "claim_boundary": "Component-level explanatory partial only; no absolute Shadbala truth upgrade.", + "claim_upgrade": "none", + "closure_bucket": "formula_or_unit_mismatch", + "component": "dig", + "next_evidence_owner": "formula_source_arbitration", + "normalized_values_virupa": { + "jyotishganit": 45.684, + "local": 69.95, + "vp_jain_local": 53.29, + "vp_jain_published": 53.29, + "xalen": 50.0 + }, + "planet": "Venus", + "pyjhora_source_artifact_sha256": "65f652ac47d4a81ab43568bde8c5d7b9fac09d45f399564500c5af1a12db96c3", + "pyjhora_workbuddy_rupa": 1.8907, + "pyjhora_workbuddy_virupa": 113.44, + "same_unit_classification": "formula_or_unit_mismatch", + "ticket_id": "shadbala.venus.dig" + }, + { + "canonical_component": "Kaalabala", + "claim_boundary": "Component-level explanatory partial only; no absolute Shadbala truth upgrade.", + "claim_upgrade": "none", + "closure_bucket": "formula_or_unit_mismatch", + "component": "kala", + "next_evidence_owner": "formula_source_arbitration", + "normalized_values_virupa": { + "jyotishganit": 63.186, + "local": 113.45, + "vp_jain_local": 135.84, + "vp_jain_published": 135.89, + "xalen": 109.41634499948964 + }, + "planet": "Venus", + "pyjhora_source_artifact_sha256": "65f652ac47d4a81ab43568bde8c5d7b9fac09d45f399564500c5af1a12db96c3", + "pyjhora_workbuddy_rupa": 1.1658, + "pyjhora_workbuddy_virupa": 69.95, + "same_unit_classification": "formula_or_unit_mismatch", + "ticket_id": "shadbala.venus.kala" + }, + { + "canonical_component": "Cheshtabala", + "claim_boundary": "Component-level explanatory partial only; no absolute Shadbala truth upgrade.", + "claim_upgrade": "none", + "closure_bucket": "formula_or_unit_mismatch", + "component": "chesta", + "next_evidence_owner": "formula_source_arbitration", + "normalized_values_virupa": { + "jyotishganit": 46.466, + "local": 29.36, + "vp_jain_local": 27.23, + "vp_jain_published": 28.18, + "xalen": 15.0 + }, + "planet": "Venus", + "pyjhora_source_artifact_sha256": "65f652ac47d4a81ab43568bde8c5d7b9fac09d45f399564500c5af1a12db96c3", + "pyjhora_workbuddy_rupa": 0.518, + "pyjhora_workbuddy_virupa": 31.08, + "same_unit_classification": "formula_or_unit_mismatch", + "ticket_id": "shadbala.venus.chesta" + }, + { + "canonical_component": "Naisargikabala", + "claim_boundary": "Component-level explanatory partial only; no absolute Shadbala truth upgrade.", + "claim_upgrade": "none", + "closure_bucket": "within_tolerance", + "component": "naisargika", + "next_evidence_owner": "ready_for_tolerance_freeze", + "normalized_values_virupa": { + "jyotishganit": 42.86, + "local": 42.86, + "vp_jain_local": 42.86, + "vp_jain_published": 42.86, + "xalen": 42.86 + }, + "planet": "Venus", + "pyjhora_source_artifact_sha256": "65f652ac47d4a81ab43568bde8c5d7b9fac09d45f399564500c5af1a12db96c3", + "pyjhora_workbuddy_rupa": 0.7143, + "pyjhora_workbuddy_virupa": 42.86, + "same_unit_classification": "within_1_virupa_observation", + "ticket_id": "shadbala.venus.naisargika" + }, + { + "canonical_component": "Drikbala", + "claim_boundary": "Component-level explanatory partial only; no absolute Shadbala truth upgrade.", + "claim_upgrade": "none", + "closure_bucket": "formula_or_unit_mismatch", + "component": "drik", + "next_evidence_owner": "formula_source_arbitration", + "normalized_values_virupa": { + "jyotishganit": -4.511, + "local": -2.75, + "vp_jain_local": -2.85, + "vp_jain_published": -2.86, + "xalen": 0.0 + }, + "planet": "Venus", + "pyjhora_source_artifact_sha256": "65f652ac47d4a81ab43568bde8c5d7b9fac09d45f399564500c5af1a12db96c3", + "pyjhora_workbuddy_rupa": -0.0458, + "pyjhora_workbuddy_virupa": -2.75, + "same_unit_classification": "formula_or_unit_mismatch", + "ticket_id": "shadbala.venus.drik" + }, + { + "canonical_component": "Sthanabala", + "claim_boundary": "Component-level explanatory partial only; no absolute Shadbala truth upgrade.", + "claim_upgrade": "none", + "closure_bucket": "formula_or_unit_mismatch", + "component": "sthana", + "next_evidence_owner": "formula_source_arbitration", + "normalized_values_virupa": { + "jyotishganit": 151.104, + "local": 218.61, + "vp_jain_local": 206.3, + "vp_jain_published": 206.31, + "xalen": 199.85598657098197 + }, + "planet": "Saturn", + "pyjhora_source_artifact_sha256": "65f652ac47d4a81ab43568bde8c5d7b9fac09d45f399564500c5af1a12db96c3", + "pyjhora_workbuddy_rupa": 3.6435, + "pyjhora_workbuddy_virupa": 218.61, + "same_unit_classification": "formula_or_unit_mismatch", + "ticket_id": "shadbala.saturn.sthana" + }, + { + "canonical_component": "Digbala", + "claim_boundary": "Component-level explanatory partial only; no absolute Shadbala truth upgrade.", + "claim_upgrade": "none", + "closure_bucket": "formula_or_unit_mismatch", + "component": "dig", + "next_evidence_owner": "formula_source_arbitration", + "normalized_values_virupa": { + "jyotishganit": 24.313, + "local": 19.63, + "vp_jain_local": 26.66, + "vp_jain_published": 26.67, + "xalen": 20.000000000000004 + }, + "planet": "Saturn", + "pyjhora_source_artifact_sha256": "65f652ac47d4a81ab43568bde8c5d7b9fac09d45f399564500c5af1a12db96c3", + "pyjhora_workbuddy_rupa": 2.2795, + "pyjhora_workbuddy_virupa": 136.77, + "same_unit_classification": "formula_or_unit_mismatch", + "ticket_id": "shadbala.saturn.dig" + }, + { + "canonical_component": "Kaalabala", + "claim_boundary": "Component-level explanatory partial only; no absolute Shadbala truth upgrade.", + "claim_upgrade": "none", + "closure_bucket": "formula_or_unit_mismatch", + "component": "kala", + "next_evidence_owner": "formula_source_arbitration", + "normalized_values_virupa": { + "jyotishganit": 71.929, + "local": 136.76, + "vp_jain_local": 139.63, + "vp_jain_published": 139.56, + "xalen": 85.58365500051036 + }, + "planet": "Saturn", + "pyjhora_source_artifact_sha256": "65f652ac47d4a81ab43568bde8c5d7b9fac09d45f399564500c5af1a12db96c3", + "pyjhora_workbuddy_rupa": 0.327, + "pyjhora_workbuddy_virupa": 19.62, + "same_unit_classification": "formula_or_unit_mismatch", + "ticket_id": "shadbala.saturn.kala" + }, + { + "canonical_component": "Cheshtabala", + "claim_boundary": "Component-level explanatory partial only; no absolute Shadbala truth upgrade.", + "claim_upgrade": "none", + "closure_bucket": "method_variant", + "component": "chesta", + "next_evidence_owner": "method_variant_decision", + "normalized_values_virupa": { + "jyotishganit": 58.137, + "local": 36.99, + "vp_jain_local": 6.78, + "vp_jain_published": 5.05, + "xalen": 30.0 + }, + "planet": "Saturn", + "pyjhora_source_artifact_sha256": "65f652ac47d4a81ab43568bde8c5d7b9fac09d45f399564500c5af1a12db96c3", + "pyjhora_workbuddy_rupa": 0.606, + "pyjhora_workbuddy_virupa": 36.36, + "same_unit_classification": "method_variant", + "ticket_id": "shadbala.saturn.chesta" + }, + { + "canonical_component": "Naisargikabala", + "claim_boundary": "Component-level explanatory partial only; no absolute Shadbala truth upgrade.", + "claim_upgrade": "none", + "closure_bucket": "within_tolerance", + "component": "naisargika", + "next_evidence_owner": "ready_for_tolerance_freeze", + "normalized_values_virupa": { + "jyotishganit": 8.57, + "local": 8.57, + "vp_jain_local": 8.57, + "vp_jain_published": 8.57, + "xalen": 8.57 + }, + "planet": "Saturn", + "pyjhora_source_artifact_sha256": "65f652ac47d4a81ab43568bde8c5d7b9fac09d45f399564500c5af1a12db96c3", + "pyjhora_workbuddy_rupa": 0.1428, + "pyjhora_workbuddy_virupa": 8.57, + "same_unit_classification": "within_1_virupa_observation", + "ticket_id": "shadbala.saturn.naisargika" + }, + { + "canonical_component": "Drikbala", + "claim_boundary": "Component-level explanatory partial only; no absolute Shadbala truth upgrade.", + "claim_upgrade": "none", + "closure_bucket": "formula_or_unit_mismatch", + "component": "drik", + "next_evidence_owner": "formula_source_arbitration", + "normalized_values_virupa": { + "jyotishganit": 8.06, + "local": 9.49, + "vp_jain_local": 5.83, + "vp_jain_published": 5.82, + "xalen": 11.25 + }, + "planet": "Saturn", + "pyjhora_source_artifact_sha256": "65f652ac47d4a81ab43568bde8c5d7b9fac09d45f399564500c5af1a12db96c3", + "pyjhora_workbuddy_rupa": 0.1582, + "pyjhora_workbuddy_virupa": 9.49, + "same_unit_classification": "formula_or_unit_mismatch", + "ticket_id": "shadbala.saturn.drik" + } + ], + "production_tuning_allowed": false, + "pyjhora_component_packet": "references/oracle/pyjhora_steve_jobs_shadbala_stdout_components_2026_07_21.json", + "scope": "shadbala_component_joined_closure_packet", + "source_queue": "references/oracle/shadbala_component_closure_queue_v2_2026_07_19.json", + "summary": { + "absolute_truth_upgrade_count": 0, + "closure_bucket_counts": { + "formula_or_unit_mismatch": 27, + "method_variant": 8, + "within_tolerance": 7 + }, + "joined_ticket_count": 42, + "pyjhora_component_rows_joined": 42 + }, + "truth_matrix_allowed": false +} diff --git a/references/oracle/shadbala_formula_arbitration_queue_v2_2026_07_22.json b/references/oracle/shadbala_formula_arbitration_queue_v2_2026_07_22.json new file mode 100644 index 00000000..535ac281 --- /dev/null +++ b/references/oracle/shadbala_formula_arbitration_queue_v2_2026_07_22.json @@ -0,0 +1,123 @@ +{ + "scope": "shadbala_formula_arbitration_queue_v2", + "created_at": "2026-07-22", + "claim_status": "partial", + "truth_matrix_allowed": false, + "production_tuning_allowed": false, + "source_rollup": "references/oracle/shadbala_component_closure_rollup_2026_07_22.json", + "boundary": "Formula arbitration queue only. These policy choices make component differences explainable; they do not make Shadbala absolute Virupa parity truth-ready.", + "components": [ + { + "component": "dig", + "current_bucket": "formula_or_unit_mismatch", + "research_policy_to_test": "house_cusp_angular_distance", + "alternative_variants": [ + "whole_house_angular_distance", + "equal_house_midpoint", + "engine_specific_cusp_model" + ], + "unit_contract": "Virupa, capped/floored after angular interpolation; house/cusp basis must be explicit.", + "why_this_policy": "Dig Bala is a directional/angular strength; using cuspal geometry is the most testable policy against exact external worked examples.", + "next_evidence": [ + "source-cited formula paragraph", + "same-input cusp longitudes", + "per-planet angular distance table", + "local vs PyJHora/Xalen/jyotishganit rerun" + ], + "claim_upgrade": "none" + }, + { + "component": "drik", + "current_bucket": "formula_or_unit_mismatch", + "research_policy_to_test": "classical_graha_drishti_with_signed_benefic_malefic_sum", + "alternative_variants": [ + "orb_weighted_aspect_strength", + "full_parashara_special_aspects_only", + "natural_benefic_malefic_only", + "functional_benefic_malefic_overlay" + ], + "unit_contract": "Signed Virupa contribution; positive/negative scale and aspect-strength interpolation must be named.", + "why_this_policy": "Drik Bala mismatches are dominated by aspect model and benefic/malefic sign convention rather than raw longitude availability.", + "next_evidence": [ + "aspect matrix with source weights", + "natural vs functional benefic/malefic toggle", + "signed Virupa subtotal per aspect", + "same-input external worked example" + ], + "claim_upgrade": "none" + }, + { + "component": "kala", + "current_bucket": "formula_or_unit_mismatch", + "research_policy_to_test": "split_kala_subcomponents_before_total_comparison", + "subcomponents_required": [ + "nathonatha", + "paksha", + "tribhaga", + "abda", + "masa", + "vara", + "hora", + "ayana", + "yuddha" + ], + "unit_contract": "Each subcomponent must declare Virupa cap/floor and birth-time/sunrise/day-night context.", + "why_this_policy": "Kala total parity is not meaningful until time-context subcomponents are visible.", + "next_evidence": [ + "local sunrise/sunset context", + "birth local time and day/night status", + "subcomponent formula source", + "component subtotal replay" + ], + "claim_upgrade": "none" + }, + { + "component": "sthana", + "current_bucket": "mixed_method_and_formula", + "research_policy_to_test": "split_sthana_subcomponents_before_variant_selection", + "subcomponents_required": [ + "uccha", + "saptavargaja", + "ojayugma", + "kendradi", + "drekkana", + "moolatrikona_or_dignity_variant" + ], + "unit_contract": "Subcomponent Virupa rows must be compared before a total Sthana decision.", + "why_this_policy": "Sthana mismatches mix moolatrikona intervals, dignity tables, and varga strength inclusion.", + "next_evidence": [ + "dignity table provenance", + "moolatrikona degree interval policy", + "varga inclusion list", + "subcomponent subtotal replay" + ], + "claim_upgrade": "none" + }, + { + "component": "chesta", + "current_bucket": "method_variant", + "research_policy_to_test": "explicit_mean_motion_seeghrochcha_variant_selection", + "alternative_variants": [ + "mean_motion_based", + "seeghrochcha_based", + "retrogression_speed_based", + "luminary_zero_or_special_policy" + ], + "unit_contract": "Virupa method variant must be named before comparing absolute values.", + "why_this_policy": "Chesta is primarily a method-variant problem; forcing one absolute truth would hide legitimate tradition/engine divergence.", + "next_evidence": [ + "source-cited Chesta formula", + "planet speed/retrogression raw", + "luminary treatment policy", + "same-input replay after variant selection" + ], + "claim_upgrade": "none" + } + ], + "summary": { + "component_count": 5, + "formula_or_unit_tracks": 4, + "method_variant_tracks": 1, + "absolute_truth_upgrade_count": 0 + } +} diff --git a/references/oracle/shadbala_hard_component_arbitration_2026_07_22.json b/references/oracle/shadbala_hard_component_arbitration_2026_07_22.json new file mode 100644 index 00000000..d086317e --- /dev/null +++ b/references/oracle/shadbala_hard_component_arbitration_2026_07_22.json @@ -0,0 +1,48 @@ +{ + "scope": "shadbala_hard_component_arbitration", + "created_at": "2026-07-22", + "claim_status": "partial", + "truth_matrix_allowed": false, + "production_tuning_allowed": false, + "source_joined_packet": "references/oracle/shadbala_component_joined_closure_packet_2026_07_21.json", + "summary": { + "component_count": 3, + "absolute_truth_upgrade_count": 0, + "components_remaining_non_absolute": 3 + }, + "components": [ + { + "component": "chesta", + "dominant_issue": "method_variant", + "bucket_counts": { + "method_variant": 6, + "formula_or_unit_mismatch": 1 + }, + "blocked_reason": "Mean-motion/Seeghrochcha/luminary policies diverge across engines and fixtures.", + "next_action": "Preserve method_variant; require source-cited Chesta policy before comparing absolute Virupa.", + "claim_upgrade": "none" + }, + { + "component": "sthana", + "dominant_issue": "mixed_method_and_formula", + "bucket_counts": { + "formula_or_unit_mismatch": 5, + "method_variant": 2 + }, + "blocked_reason": "Moolatrikona degree interval vs whole-sign treatment and dignity/varga subcomponent inclusion differ.", + "next_action": "Split Sthana into subcomponents and compare only after Moolatrikona and dignity-table variants are pinned.", + "claim_upgrade": "none" + }, + { + "component": "kala", + "dominant_issue": "formula_or_unit_mismatch", + "bucket_counts": { + "formula_or_unit_mismatch": 7 + }, + "blocked_reason": "Time-context and subcomponent formula/unit policies differ for all seven planets.", + "next_action": "Pin birth-time/sunrise/day-night context and Kala subcomponent formula source before parity comparison.", + "claim_upgrade": "none" + } + ], + "boundary": "Hard Shadbala components remain explanatory partial. This packet prevents tuning them into a single absolute truth without source variant decisions." +} diff --git a/references/oracle/shadbala_priority_component_arbitration_2026_07_22.json b/references/oracle/shadbala_priority_component_arbitration_2026_07_22.json new file mode 100644 index 00000000..fd1cd62e --- /dev/null +++ b/references/oracle/shadbala_priority_component_arbitration_2026_07_22.json @@ -0,0 +1,66 @@ +{ + "boundary": "Naisargika/Dig/Drik are prioritized for Shadbala closure. This packet explains current partial status; it does not select an absolute formula truth.", + "claim_status": "partial", + "components": [ + { + "bucket_counts": { + "within_tolerance": 7 + }, + "claim_upgrade": "none", + "closure_status": "observation_tolerance_ready", + "component": "naisargika", + "formula_summary": "Natural strength assigned by fixed planetary order/brightness tradition.", + "known_variants": [ + "fixed table rounding", + "planet inclusion set" + ], + "next_action": "Add second public case, then freeze fixed Virupa table/tolerance.", + "source_formula": "shadbala_naisargika_bala", + "unit_contract": "Fixed Virupa table for seven visible planets; table source must be named." + }, + { + "bucket_counts": { + "formula_or_unit_mismatch": 7 + }, + "claim_upgrade": "none", + "closure_status": "formula_source_arbitration_required", + "component": "dig", + "formula_summary": "Directional strength by angular distance from planet-specific strongest direction/house.", + "known_variants": [ + "house-cusp vs whole-house angular distance", + "rounding precision" + ], + "next_action": "Pin house/cusp vs whole-house angular-distance policy and rerun component comparison.", + "source_formula": "shadbala_dig_bala", + "unit_contract": "Virupa component; cap/floor and interpolation must be explicit." + }, + { + "bucket_counts": { + "formula_or_unit_mismatch": 7 + }, + "claim_upgrade": "none", + "closure_status": "formula_source_arbitration_required", + "component": "drik", + "formula_summary": "Aspectual strength from benefic/malefic aspects on planet; depends on aspect model, orb/interpolation and natural/functional treatment policy.", + "known_variants": [ + "graha drishti model", + "orb/interpolation", + "benefic/malefic classification" + ], + "next_action": "Pin graha-drishti/aspect-strength model, positive/negative scale and benefic/malefic policy.", + "source_formula": "shadbala_drik_bala", + "unit_contract": "Virupa component; positive/negative sign and aspect-strength scale must be explicit." + } + ], + "created_at": "2026-07-22", + "production_tuning_allowed": false, + "scope": "shadbala_priority_component_arbitration", + "source_joined_packet": "references/oracle/shadbala_component_joined_closure_packet_2026_07_21.json", + "summary": { + "absolute_truth_upgrade_count": 0, + "component_count": 3, + "formula_source_arbitration_required_count": 2, + "observation_tolerance_ready_count": 1 + }, + "truth_matrix_allowed": false +} diff --git a/references/oracle/tajika_steve_jobs_1984_extraction_contract_2026_07_21.json b/references/oracle/tajika_steve_jobs_1984_extraction_contract_2026_07_21.json new file mode 100644 index 00000000..44db3ece --- /dev/null +++ b/references/oracle/tajika_steve_jobs_1984_extraction_contract_2026_07_21.json @@ -0,0 +1,39 @@ +{ + "scope": "tajika_steve_jobs_1984_extraction_contract", + "created_at": "2026-07-21", + "claim_status": "blocked_until_oracle", + "source_template": "references/oracle/evidence_packet_templates/tajika_steve_jobs_1984_first_packet.json", + "truth_matrix_allowed": false, + "production_tuning_allowed": false, + "boundary": "Steve Jobs 1984 Tajika/Varshaphala remains a blank template. No annual-chart oracle or interpretation upgrade is allowed until a citable external numeric source fills the required fields.", + "required_metadata_fields": [ + "tool_name", + "tool_version_or_url", + "capture_date", + "source_artifact", + "ayanamsa", + "node_mode", + "timezone", + "annual_system", + "target_year" + ], + "required_numeric_fields": [ + "solar_return_datetime", + "varsha_lagna_deg", + "muntha_sign", + "year_lord", + "mudda_dasha_first_lord", + "sahams.punya_saham", + "sahams.rajya_saham", + "sahams.vivah_saham", + "tajika_yogas" + ], + "candidate_sources": [ + { + "source_id": "varshaphala_public_pdf_candidate", + "source_url": "https://vedicastrologervaibhavvyas.com/DownloadsofVA/4.%20my%20article%20on%20varshaphala.pdf", + "use": "method/example candidate only", + "blocked_reason": "not Steve Jobs 1984 and not yet extracted into structured numeric fields" + } + ] +} diff --git a/references/oracle/tajika_yumpu_access_locator_2026_07_21.json b/references/oracle/tajika_yumpu_access_locator_2026_07_21.json new file mode 100644 index 00000000..23221c4e --- /dev/null +++ b/references/oracle/tajika_yumpu_access_locator_2026_07_21.json @@ -0,0 +1,24 @@ +{ + "scope": "tajika_yumpu_access_locator", + "created_at": "2026-07-21", + "claim_status": "blocked_until_oracle", + "truth_matrix_allowed": false, + "production_tuning_allowed": false, + "source_url": "https://www.yumpu.com/en/document/view/40420384/ashtakavarga-system-of-prediction-a-part-40-neelastro", + "http_status": 200, + "html_probe": { + "bytes_read": 120000, + "steve_jobs_string_found": true, + "varshaphala_string_found": false + }, + "numeric_extraction_status": "not_performed", + "copyright_boundary": "access_locator_only_no_bulk_capture", + "missing_for_oracle": [ + "authorized/full source capture", + "confirmation that 1984 Varshaphala values are present", + "structured numeric field extraction", + "source hash for approved capture", + "local replay comparison" + ], + "boundary": "Yumpu is reachable and contains a Steve Jobs string in the first 120KB HTML probe, but no numeric Tajika/Varshaphala oracle extraction was performed." +} diff --git a/references/oracle/tajika_yumpu_source_review_gate_2026_07_21.json b/references/oracle/tajika_yumpu_source_review_gate_2026_07_21.json new file mode 100644 index 00000000..61e36b24 --- /dev/null +++ b/references/oracle/tajika_yumpu_source_review_gate_2026_07_21.json @@ -0,0 +1,33 @@ +{ + "scope": "tajika_yumpu_source_review_gate", + "created_at": "2026-07-21", + "claim_status": "blocked_until_oracle", + "candidate_id": "steve_jobs_varshaphala_yumpu_candidate", + "source_url": "https://www.yumpu.com/en/document/view/40420384/ashtakavarga-system-of-prediction-a-part-40-neelastro", + "truth_matrix_allowed": false, + "production_tuning_allowed": false, + "copyright_boundary": "no_bulk_text_or_table_extraction", + "finding": "Search results suggest this candidate may contain Steve Jobs Varshaphala numerical material, but the source is a document-hosting page. It is not yet a safe, citable, structured oracle packet.", + "allowed_next_actions": [ + "record bibliographic/source metadata", + "capture only minimal fair-use snippets needed to identify whether 1984/age-29 numeric fields exist", + "prefer finding the original author/source or a permissive copy", + "manually enter numeric fields only after source/copyright review", + "hash the final approved capture artifact" + ], + "forbidden_actions": [ + "bulk copy full tables or full document text", + "treat search snippets as numeric oracle evidence", + "use candidate values in truth matrix before local replay", + "commercialize extracted content without source review" + ], + "required_before_oracle": [ + "approved source capture hash", + "target year 1984 or explicit age/year mapping", + "solar return convention", + "varsha lagna degree", + "Muntha/year lord/Mudda Dasha values", + "Saham and Tajika yoga values", + "field-level local replay comparison" + ] +} diff --git a/references/oracle/technique_invocation_matrix_current_2026_07_21.json b/references/oracle/technique_invocation_matrix_current_2026_07_21.json new file mode 100644 index 00000000..5633120f --- /dev/null +++ b/references/oracle/technique_invocation_matrix_current_2026_07_21.json @@ -0,0 +1,60 @@ +{ + "scope": "technique_invocation_matrix_current", + "created_at": "2026-07-21", + "claim_status": "partial", + "production_tuning_allowed": false, + "truth_matrix_allowed": false, + "boundary": "Current invocation matrix only. A technique can be present in code or UI while still blocked at oracle/claim level.", + "rows": [ + { + "technique": "Shadbala", + "code": "yes", + "skill": "yes_high_rigor_required", + "api": "yes", + "ui": "yes_research_panel", + "claim_gate": "component_partial_only", + "oracle_status": "component_explanatory_partial", + "evidence": "references/oracle/shadbala_component_joined_closure_packet_2026_07_21.json" + }, + { + "technique": "KP exact cusp", + "code": "probe_available", + "skill": "reference_only", + "api": "observation_endpoint_allowed", + "ui": "capability_center_badge_only", + "claim_gate": "observation_only", + "oracle_status": "calculable_displayable_public_oracle_blocked", + "evidence": "references/oracle/kp_observation_sync_contract_2026_07_22.json" + }, + { + "technique": "Tajika/Varshaphala", + "code": "partial", + "skill": "partial", + "api": "partial", + "ui": "limited", + "claim_gate": "blocked_until_oracle", + "oracle_status": "steve_jobs_1984_numeric_source_missing", + "evidence": "references/oracle/tajika_steve_jobs_1984_extraction_contract_2026_07_21.json" + }, + { + "technique": "Birth-time rectification", + "code": "yes", + "skill": "yes_candidate_only", + "api": "yes", + "ui": "yes_guided_journey", + "claim_gate": "candidate_not_birth_time_truth", + "oracle_status": "needs_human_labeled_holdout", + "evidence": "references/oracle/kp_tajika_public_oracle_source_candidates_2026_07_21.json" + }, + { + "technique": "Day/month timing", + "code": "partial", + "skill": "yes_with_boundary", + "api": "candidate_windows_only", + "ui": "candidate_windows_only", + "claim_gate": "exploratory_candidate_only", + "oracle_status": "blocked_until_human_labels", + "evidence": "references/real_case_calibration/day_level_holdout_v3_human_annotation_packet_2026_07_19.json" + } + ] +} diff --git a/references/oracle/workbuddy_round5_transfer_status_2026_07_22.json b/references/oracle/workbuddy_round5_transfer_status_2026_07_22.json new file mode 100644 index 00000000..b5584597 --- /dev/null +++ b/references/oracle/workbuddy_round5_transfer_status_2026_07_22.json @@ -0,0 +1,219 @@ +{ + "scope": "workbuddy_round5_transfer_status", + "created_at": "2026-07-22", + "claim_status": "ready_contract", + "truth_matrix_allowed": false, + "production_tuning_allowed": false, + "source_ledger": "references/oracle/workbuddy_round4_candidate_ledger_2026_07_21.json", + "source_ledger_sha256": "2461acb8abc77f26320b37adb8a1dfeb889092c9cb54fe8311868eb06fd0eb0e", + "summary": { + "candidate_count": 20, + "reference_only_not_runtime": 6, + "transferred_to_research_registry_or_test": 12, + "forbidden_private_or_obsolete": 2 + }, + "rows": [ + { + "candidate_id": "wb_round4_sahams_execution_guide", + "domain": "tajika_saham", + "round4_decision": "reference_only", + "source_path": "/Users/wuyongnaren/WorkBuddy/2026-07-05-19-03-49/yinduzhanxing/references/sahams-execution-guide.md", + "round5_status": "reference_only_not_runtime", + "research_target": null, + "claim_upgrade": "none", + "boundary": "Useful as background/source map only; no runtime import and no truth upgrade." + }, + { + "candidate_id": "wb_round4_varga_system_quick_reference", + "domain": "varga", + "round4_decision": "reference_only", + "source_path": "/Users/wuyongnaren/WorkBuddy/2026-07-05-19-03-49/yinduzhanxing/references/varga-system-quick-reference.md", + "round5_status": "reference_only_not_runtime", + "research_target": null, + "claim_upgrade": "none", + "boundary": "Useful as background/source map only; no runtime import and no truth upgrade." + }, + { + "candidate_id": "wb_round4_varga_divisional_quick_reference", + "domain": "varga", + "round4_decision": "reference_only", + "source_path": "/Users/wuyongnaren/WorkBuddy/2026-07-05-19-03-49/yinduzhanxing/references/varga-divisional-charts-quick-reference.md", + "round5_status": "reference_only_not_runtime", + "research_target": null, + "claim_upgrade": "none", + "boundary": "Useful as background/source map only; no runtime import and no truth upgrade." + }, + { + "candidate_id": "wb_round4_ashtakavarga_complete_system", + "domain": "ashtakavarga", + "round4_decision": "reference_only", + "source_path": "/Users/wuyongnaren/WorkBuddy/2026-07-05-19-03-49/yinduzhanxing/references/ashtakavarga-complete-system.md", + "round5_status": "reference_only_not_runtime", + "research_target": null, + "claim_upgrade": "none", + "boundary": "Useful as background/source map only; no runtime import and no truth upgrade." + }, + { + "candidate_id": "wb_round4_dasha_shadbala_oracle_cases", + "domain": "shadbala_oracle", + "round4_decision": "reference_only", + "source_path": "/Users/wuyongnaren/WorkBuddy/2026-07-05-19-03-49/yinduzhanxing/references/oracle/dasha_shadbala_oracle_cases.json", + "round5_status": "reference_only_not_runtime", + "research_target": null, + "claim_upgrade": "none", + "boundary": "Useful as background/source map only; no runtime import and no truth upgrade." + }, + { + "candidate_id": "wb_round4_tajika_annual_oracle_cases", + "domain": "tajika_oracle", + "round4_decision": "reference_only", + "source_path": "/Users/wuyongnaren/WorkBuddy/2026-07-05-19-03-49/yinduzhanxing/references/oracle/tajika_annual_oracle_cases.json", + "round5_status": "reference_only_not_runtime", + "research_target": null, + "claim_upgrade": "none", + "boundary": "Useful as background/source map only; no runtime import and no truth upgrade." + }, + { + "candidate_id": "wb_round4_event_judgment_examples", + "domain": "event_judgment", + "round4_decision": "migrate_to_registry", + "source_path": "/Users/wuyongnaren/WorkBuddy/2026-07-05-19-03-49/yinduzhanxing/references/event_judgment_examples.md", + "round5_status": "transferred_to_research_registry_or_test", + "research_target": "references/oracle/event_judgment_fragment_rule_family_registry_2026_07_21.json", + "claim_upgrade": "none", + "boundary": "Formalized into current research repo output; not copied as WorkBuddy truth source and not upgraded beyond target claim gate." + }, + { + "candidate_id": "wb_round4_birth_time_rectification_cases", + "domain": "birth_time_rectification", + "round4_decision": "migrate_to_test", + "source_path": "/Users/wuyongnaren/WorkBuddy/2026-07-05-19-03-49/yinduzhanxing/references/birth-time-rectification-cases.md", + "round5_status": "transferred_to_research_registry_or_test", + "research_target": "references/oracle/research_birth_time_journey_ui_contract_2026_07_21.json", + "claim_upgrade": "none", + "boundary": "Formalized into current research repo output; not copied as WorkBuddy truth source and not upgraded beyond target claim gate." + }, + { + "candidate_id": "wb_round4_birth_time_rectification_advanced", + "domain": "birth_time_rectification", + "round4_decision": "migrate_to_registry", + "source_path": "/Users/wuyongnaren/WorkBuddy/2026-07-05-19-03-49/yinduzhanxing/references/birth-time-rectification-advanced.md", + "round5_status": "transferred_to_research_registry_or_test", + "research_target": "references/oracle/research_birth_time_journey_ui_contract_2026_07_21.json", + "claim_upgrade": "none", + "boundary": "Formalized into current research repo output; not copied as WorkBuddy truth source and not upgraded beyond target claim gate." + }, + { + "candidate_id": "wb_round4_event_judgment_career", + "domain": "event_judgment", + "round4_decision": "migrate_to_registry", + "source_path": "/Users/wuyongnaren/WorkBuddy/2026-07-05-19-03-49/yinduzhanxing/references/event_judgment_career.md", + "round5_status": "transferred_to_research_registry_or_test", + "research_target": "references/oracle/event_judgment_fragment_rule_family_registry_2026_07_21.json", + "claim_upgrade": "none", + "boundary": "Formalized into current research repo output; not copied as WorkBuddy truth source and not upgraded beyond target claim gate." + }, + { + "candidate_id": "wb_round4_event_judgment_wealth", + "domain": "event_judgment", + "round4_decision": "migrate_to_registry", + "source_path": "/Users/wuyongnaren/WorkBuddy/2026-07-05-19-03-49/yinduzhanxing/references/event_judgment_wealth.md", + "round5_status": "transferred_to_research_registry_or_test", + "research_target": "references/oracle/event_judgment_fragment_rule_family_registry_2026_07_21.json", + "claim_upgrade": "none", + "boundary": "Formalized into current research repo output; not copied as WorkBuddy truth source and not upgraded beyond target claim gate." + }, + { + "candidate_id": "wb_round4_event_judgment_skeleton", + "domain": "event_judgment", + "round4_decision": "migrate_to_registry", + "source_path": "/Users/wuyongnaren/WorkBuddy/2026-07-05-19-03-49/yinduzhanxing/references/event_judgment_skeleton.md", + "round5_status": "transferred_to_research_registry_or_test", + "research_target": "references/oracle/event_judgment_fragment_rule_family_registry_2026_07_21.json", + "claim_upgrade": "none", + "boundary": "Formalized into current research repo output; not copied as WorkBuddy truth source and not upgraded beyond target claim gate." + }, + { + "candidate_id": "wb_round4_kp_practical_event_timing", + "domain": "kp_precision_timing", + "round4_decision": "migrate_to_registry", + "source_path": "/Users/wuyongnaren/WorkBuddy/2026-07-05-19-03-49/yinduzhanxing/references/kp-practical-event-timing.md", + "round5_status": "transferred_to_research_registry_or_test", + "research_target": "references/oracle/kp_observation_sync_contract_2026_07_22.json", + "claim_upgrade": "none", + "boundary": "Formalized into current research repo output; not copied as WorkBuddy truth source and not upgraded beyond target claim gate." + }, + { + "candidate_id": "wb_round4_muhurta_complete_guide", + "domain": "muhurta", + "round4_decision": "migrate_to_registry", + "source_path": "/Users/wuyongnaren/WorkBuddy/2026-07-05-19-03-49/yinduzhanxing/references/muhurta-complete-guide.md", + "round5_status": "transferred_to_research_registry_or_test", + "research_target": "references/oracle/muhurta_observation_factor_packet_2026_07_22.json", + "claim_upgrade": "none", + "boundary": "Formalized into current research repo output; not copied as WorkBuddy truth source and not upgraded beyond target claim gate." + }, + { + "candidate_id": "wb_round4_tajika_yoga_complete_guide", + "domain": "tajika_saham", + "round4_decision": "migrate_to_registry", + "source_path": "/Users/wuyongnaren/WorkBuddy/2026-07-05-19-03-49/yinduzhanxing/references/tajika-yoga-complete-guide.md", + "round5_status": "transferred_to_research_registry_or_test", + "research_target": "references/oracle/horary_annual_sensitive_points_numeric_packet_queue_2026_07_22.json", + "claim_upgrade": "none", + "boundary": "Formalized into current research repo output; not copied as WorkBuddy truth source and not upgraded beyond target claim gate." + }, + { + "candidate_id": "wb_round4_saham_rules", + "domain": "tajika_saham", + "round4_decision": "migrate_to_test", + "source_path": "/Users/wuyongnaren/WorkBuddy/2026-07-05-19-03-49/yinduzhanxing/references/saham_rules.json", + "round5_status": "transferred_to_research_registry_or_test", + "research_target": "references/oracle/horary_annual_sensitive_points_numeric_packet_queue_2026_07_22.json", + "claim_upgrade": "none", + "boundary": "Formalized into current research repo output; not copied as WorkBuddy truth source and not upgraded beyond target claim gate." + }, + { + "candidate_id": "wb_round4_user_1993_shadbala_pending_packet", + "domain": "shadbala_private", + "round4_decision": "forbidden_private_or_obsolete", + "source_path": "/Users/wuyongnaren/WorkBuddy/2026-07-05-19-03-49/yinduzhanxing/references/oracle/artifacts/pending_packets/external_template_user_1993_shadbala_lahiri_pyjhora_20260627.json", + "round5_status": "forbidden_private_or_obsolete", + "research_target": null, + "claim_upgrade": "none", + "boundary": "Contains private/source-insufficient pending evidence or obsolete WorkBuddy fragment; not for truth source, public release, or commercial claim." + }, + { + "candidate_id": "wb_round4_handan_shadbala_pending_packet", + "domain": "shadbala_private", + "round4_decision": "forbidden_private_or_obsolete", + "source_path": "/Users/wuyongnaren/WorkBuddy/2026-07-05-19-03-49/yinduzhanxing/references/oracle/artifacts/pending_packets/external_template_handan_shadbala_raman.json", + "round5_status": "forbidden_private_or_obsolete", + "research_target": null, + "claim_upgrade": "none", + "boundary": "Contains private/source-insufficient pending evidence or obsolete WorkBuddy fragment; not for truth source, public release, or commercial claim." + }, + { + "candidate_id": "wb_round4_pyjhora_steve_jobs_shadbala_stdout", + "domain": "shadbala_oracle", + "round4_decision": "migrate_to_test", + "source_path": "/Users/wuyongnaren/WorkBuddy/2026-07-05-19-03-49/yinduzhanxing/references/oracle/artifacts/pyjhora_steve_jobs_shadbala_lahiri_stdout_20260627.txt", + "round5_status": "transferred_to_research_registry_or_test", + "research_target": "references/oracle/shadbala_component_closure_rollup_2026_07_22.json", + "claim_upgrade": "none", + "boundary": "Formalized into current research repo output; not copied as WorkBuddy truth source and not upgraded beyond target claim gate." + }, + { + "candidate_id": "wb_round4_tajika_steve_jobs_1984_first_packet", + "domain": "tajika_oracle", + "round4_decision": "migrate_to_test", + "source_path": "/Users/wuyongnaren/WorkBuddy/2026-07-05-19-03-49/yinduzhanxing/references/oracle/evidence_packet_templates/tajika_steve_jobs_1984_first_packet.json", + "round5_status": "transferred_to_research_registry_or_test", + "research_target": "references/oracle/tajika_steve_jobs_1984_extraction_contract_2026_07_21.json", + "claim_upgrade": "none", + "boundary": "Formalized into current research repo output; not copied as WorkBuddy truth source and not upgraded beyond target claim gate." + } + ], + "answer_to_user": "WorkBuddy astrology candidates are not all copied; they are classified. Valuable items are transferred into registries/tests/observation packets, reference-only material is retained as source map, and private/obsolete pending packets remain forbidden.", + "boundary": "Round5 status proves candidate-level disposition. It does not claim whole-machine exhaustiveness beyond the round4 candidate ledger and does not authorize copying WorkBuddy runtime as truth source." +} diff --git a/scripts/shadbala_component_joined_closure.py b/scripts/shadbala_component_joined_closure.py new file mode 100644 index 00000000..b96bd362 --- /dev/null +++ b/scripts/shadbala_component_joined_closure.py @@ -0,0 +1,108 @@ +#!/usr/bin/env python3 +"""Join same-unit Shadbala queue with parsed PyJHora WorkBuddy component rows.""" +from __future__ import annotations + +import json +from collections import Counter, defaultdict +from pathlib import Path +from typing import Any + + +ROOT = Path(__file__).resolve().parents[1] +QUEUE = ROOT / "references/oracle/shadbala_component_closure_queue_v2_2026_07_19.json" +PYJHORA = ROOT / "references/oracle/pyjhora_steve_jobs_shadbala_stdout_components_2026_07_21.json" +OUTPUT = ROOT / "references/oracle/shadbala_component_joined_closure_packet_2026_07_21.json" + +CLASSIFICATION_BUCKET = { + "within_1_virupa_observation": "within_tolerance", + "formula_or_unit_mismatch": "formula_or_unit_mismatch", + "method_variant": "method_variant", + "insufficient_numeric_sources": "insufficient_numeric_sources", +} +PRIORITY = ["naisargika", "dig", "drik", "chesta", "sthana", "kala"] + + +def _load(path: Path) -> dict[str, Any]: + return json.loads(path.read_text(encoding="utf-8")) + + +def _next_action(component: str, buckets: Counter[str]) -> str: + if component == "naisargika" and buckets["within_tolerance"]: + return "freeze_observation_tolerance_after_second_case" + if component in {"chesta", "sthana"}: + return "preserve_method_variant" + if buckets["formula_or_unit_mismatch"]: + return "formula_source_arbitration" + return "collect_second_public_case" + + +def build() -> dict[str, Any]: + queue = _load(QUEUE) + pyjhora = _load(PYJHORA) + pyjhora_rows = { + (row["planet"], row["component"]): row + for row in pyjhora["component_rows"] + } + joined: list[dict[str, Any]] = [] + by_component: dict[str, Counter[str]] = defaultdict(Counter) + for ticket in queue["tickets"]: + key = (ticket["planet"], ticket["component"]) + py_row = pyjhora_rows.get(key) + bucket = CLASSIFICATION_BUCKET.get(ticket["same_unit_classification"], "insufficient_numeric_sources") + by_component[ticket["component"]][bucket] += 1 + joined.append( + { + "ticket_id": ticket["ticket_id"], + "planet": ticket["planet"], + "component": ticket["component"], + "canonical_component": ticket["canonical_component"], + "closure_bucket": bucket, + "same_unit_classification": ticket["same_unit_classification"], + "pyjhora_workbuddy_virupa": py_row["virupa"] if py_row else None, + "pyjhora_workbuddy_rupa": py_row["rupa"] if py_row else None, + "pyjhora_source_artifact_sha256": py_row["source_artifact_sha256"] if py_row else None, + "normalized_values_virupa": ticket["normalized_values_virupa"], + "next_evidence_owner": ticket["next_evidence_owner"], + "claim_upgrade": "none", + "claim_boundary": "Component-level explanatory partial only; no absolute Shadbala truth upgrade.", + } + ) + component_priority = [] + for component in PRIORITY: + buckets = by_component[component] + component_priority.append( + { + "component": component, + "bucket_counts": dict(buckets), + "recommended_next_action": _next_action(component, buckets), + } + ) + return { + "scope": "shadbala_component_joined_closure_packet", + "created_at": "2026-07-21", + "claim_status": "partial", + "truth_matrix_allowed": False, + "production_tuning_allowed": False, + "source_queue": str(QUEUE.relative_to(ROOT)), + "pyjhora_component_packet": str(PYJHORA.relative_to(ROOT)), + "summary": { + "joined_ticket_count": len(joined), + "pyjhora_component_rows_joined": sum(1 for row in joined if row["pyjhora_workbuddy_virupa"] is not None), + "absolute_truth_upgrade_count": 0, + "closure_bucket_counts": dict(Counter(row["closure_bucket"] for row in joined)), + }, + "component_priority": component_priority, + "joined_rows": joined, + "boundary": "Joined PyJHora WorkBuddy component rows to existing same-unit closure tickets. This improves explanation and prioritization only; absolute parity remains unclaimed.", + } + + +def main() -> int: + packet = build() + OUTPUT.write_text(json.dumps(packet, ensure_ascii=False, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print(json.dumps(packet, ensure_ascii=False, sort_keys=True)) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/scripts/shadbala_priority_component_arbitration.py b/scripts/shadbala_priority_component_arbitration.py new file mode 100644 index 00000000..af92b02a --- /dev/null +++ b/scripts/shadbala_priority_component_arbitration.py @@ -0,0 +1,98 @@ +#!/usr/bin/env python3 +"""Build first-pass arbitration for stable Shadbala components.""" +from __future__ import annotations + +import json +from pathlib import Path +from typing import Any + + +ROOT = Path(__file__).resolve().parents[1] +JOINED = ROOT / "references/oracle/shadbala_component_joined_closure_packet_2026_07_21.json" +FORMULA = ROOT / "references/oracle/formula_source_knowledge_base_2026_07_19.json" +OUTPUT = ROOT / "references/oracle/shadbala_priority_component_arbitration_2026_07_22.json" +TARGETS = ["naisargika", "dig", "drik"] + + +def _load(path: Path) -> dict[str, Any]: + return json.loads(path.read_text(encoding="utf-8")) + + +def _formula_by_component() -> dict[str, dict[str, Any]]: + data = _load(FORMULA) + return { + row["component"]: row + for row in data["formulas"] + if row.get("family") == "Shadbala" and row.get("component") in TARGETS + } + + +def _status(component: str, bucket_counts: dict[str, int]) -> str: + if component == "naisargika" and bucket_counts.get("within_tolerance") == 7: + return "observation_tolerance_ready" + if bucket_counts.get("formula_or_unit_mismatch"): + return "formula_source_arbitration_required" + if bucket_counts.get("method_variant"): + return "method_variant_required" + return "open_queue" + + +def _next_action(component: str, status: str) -> str: + if status == "observation_tolerance_ready": + return "Add second public case, then freeze fixed Virupa table/tolerance." + if component == "dig": + return "Pin house/cusp vs whole-house angular-distance policy and rerun component comparison." + if component == "drik": + return "Pin graha-drishti/aspect-strength model, positive/negative scale and benefic/malefic policy." + return "Collect more numeric evidence." + + +def build() -> dict[str, Any]: + joined = _load(JOINED) + formulas = _formula_by_component() + priorities = {row["component"]: row for row in joined["component_priority"]} + rows = [] + for component in TARGETS: + buckets = priorities[component]["bucket_counts"] + status = _status(component, buckets) + formula = formulas[component] + rows.append( + { + "component": component, + "closure_status": status, + "bucket_counts": buckets, + "source_formula": formula["formula_id"], + "formula_summary": formula["formula_summary"], + "unit_contract": formula["unit_contract"], + "known_variants": formula["known_variants"], + "claim_upgrade": "none", + "next_action": _next_action(component, status), + } + ) + return { + "scope": "shadbala_priority_component_arbitration", + "created_at": "2026-07-22", + "claim_status": "partial", + "truth_matrix_allowed": False, + "production_tuning_allowed": False, + "source_joined_packet": str(JOINED.relative_to(ROOT)), + "summary": { + "component_count": len(rows), + "observation_tolerance_ready_count": sum(1 for row in rows if row["closure_status"] == "observation_tolerance_ready"), + "formula_source_arbitration_required_count": sum(1 for row in rows if row["closure_status"] == "formula_source_arbitration_required"), + "absolute_truth_upgrade_count": 0, + }, + "components": rows, + "boundary": "Naisargika/Dig/Drik are prioritized for Shadbala closure. This packet explains current partial status; it does not select an absolute formula truth.", + } + + +def main() -> int: + packet = build() + OUTPUT.write_text(json.dumps(packet, ensure_ascii=False, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print(json.dumps(packet, ensure_ascii=False, sort_keys=True)) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/tests/test_horary_annual_sensitive_points_numeric_packet_queue.py b/tests/test_horary_annual_sensitive_points_numeric_packet_queue.py new file mode 100644 index 00000000..a7a87fee --- /dev/null +++ b/tests/test_horary_annual_sensitive_points_numeric_packet_queue.py @@ -0,0 +1,46 @@ +import json +from pathlib import Path + + +ROOT = Path(__file__).resolve().parents[1] +PACKET = ROOT / "references/oracle/horary_annual_sensitive_points_numeric_packet_queue_2026_07_22.json" +INDEX = ROOT / "references/oracle/evidence_packet_index_2026_07_19.json" + + +def test_horary_annual_queue_tracks_all_requested_families_without_claim_upgrade(): + data = json.loads(PACKET.read_text(encoding="utf-8")) + assert data["scope"] == "horary_annual_sensitive_points_numeric_packet_queue" + assert data["claim_status"] == "open_queue" + assert data["truth_matrix_allowed"] is False + assert data["production_tuning_allowed"] is False + techniques = {row["technique"] for row in data["rows"]} + assert { + "Prashna input contract", + "Sphuta / Trisphuta / Chatusphuta / Panchasphuta", + "Gulika", + "Saham", + "Tajika / Varshaphala", + } <= techniques + assert "do not upgrade" in data["boundary"] + + +def test_sphuta_has_partial_numeric_candidate_but_tajika_remains_blocked(): + rows = {row["technique"]: row for row in json.loads(PACKET.read_text(encoding="utf-8"))["rows"]} + sphuta = rows["Sphuta / Trisphuta / Chatusphuta / Panchasphuta"] + assert sphuta["numeric_candidate_status"] == "partial_numeric_candidate_present_not_oracle" + assert "trisphuta" in sphuta["numeric_fields_present"] + assert "complete Prashna input" in sphuta["missing_for_oracle"] + + tajika = rows["Tajika / Varshaphala"] + assert tajika["numeric_candidate_status"] == "source_hunt_blocked" + assert "Yumpu snippets" in tajika["claim_boundary"] + + +def test_horary_annual_queue_is_indexed(): + packets = { + row["packet_id"]: row + for row in json.loads(INDEX.read_text(encoding="utf-8"))["packets"] + } + packet = packets["horary_annual_sensitive_points_numeric_packet_queue_2026_07_22"] + assert packet["claim_status"] == "open_queue" + assert packet["consumer_policy"] == "research_observation_only" diff --git a/tests/test_kp_archive_numeric_extraction_result.py b/tests/test_kp_archive_numeric_extraction_result.py new file mode 100644 index 00000000..346d90e3 --- /dev/null +++ b/tests/test_kp_archive_numeric_extraction_result.py @@ -0,0 +1,28 @@ +import json +from pathlib import Path + + +ROOT = Path(__file__).resolve().parents[1] +PACKET = ROOT / "references/oracle/kp_archive_numeric_extraction_result_2026_07_21.json" +INDEX = ROOT / "references/oracle/evidence_packet_index_2026_07_19.json" + + +def test_kp_archive_extraction_finds_partial_cusp_but_no_oracle(): + data = json.loads(PACKET.read_text(encoding="utf-8")) + assert data["scope"] == "kp_archive_numeric_extraction_result" + assert data["claim_status"] == "blocked_until_oracle" + assert data["truth_matrix_allowed"] is False + assert data["extracted_partial_numeric_fact"]["cusp"] == "11th" + assert data["extracted_partial_numeric_fact"]["sign"] == "Sagittarius" + assert data["extracted_partial_numeric_fact"]["degree_dms"] == "27°48'40\"" + assert data["numeric_oracle_ready"] is False + + +def test_kp_archive_extraction_result_is_indexed(): + packets = { + row["packet_id"]: row + for row in json.loads(INDEX.read_text(encoding="utf-8"))["packets"] + } + packet = packets["kp_archive_numeric_extraction_result_2026_07_21"] + assert packet["claim_status"] == "blocked_until_oracle" + assert packet["consumer_policy"] == "research_observation_only" diff --git a/tests/test_kp_archive_numeric_locator_packet.py b/tests/test_kp_archive_numeric_locator_packet.py new file mode 100644 index 00000000..2547aa05 --- /dev/null +++ b/tests/test_kp_archive_numeric_locator_packet.py @@ -0,0 +1,28 @@ +import json +from pathlib import Path + + +ROOT = Path(__file__).resolve().parents[1] +PACKET = ROOT / "references/oracle/kp_archive_numeric_locator_packet_2026_07_21.json" +INDEX = ROOT / "references/oracle/evidence_packet_index_2026_07_19.json" + + +def test_kp_archive_locator_has_hash_and_candidate_lines(): + data = json.loads(PACKET.read_text(encoding="utf-8")) + assert data["scope"] == "kp_archive_numeric_locator_packet" + assert data["claim_status"] == "open_queue" + assert data["truth_matrix_allowed"] is False + assert data["source_sha256"] == "3c5c714f3f15af4784c8b647268b8349e1a11bf045481abbd56d263432dd2a9a" + assert data["source_length_bytes"] > 300000 + assert data["candidate_numeric_line_count"] >= 40 + assert data["locator_status"] == "candidate_lines_found_not_oracle" + + +def test_kp_archive_locator_is_indexed(): + packets = { + row["packet_id"]: row + for row in json.loads(INDEX.read_text(encoding="utf-8"))["packets"] + } + packet = packets["kp_archive_numeric_locator_packet_2026_07_21"] + assert packet["claim_status"] == "open_queue" + assert packet["consumer_policy"] == "research_observation_only" diff --git a/tests/test_kp_archive_worked_example_candidate.py b/tests/test_kp_archive_worked_example_candidate.py new file mode 100644 index 00000000..619d5f40 --- /dev/null +++ b/tests/test_kp_archive_worked_example_candidate.py @@ -0,0 +1,28 @@ +import json +from pathlib import Path + + +ROOT = Path(__file__).resolve().parents[1] +PACKET = ROOT / "references/oracle/kp_archive_worked_example_candidate_2026_07_21.json" +INDEX = ROOT / "references/oracle/evidence_packet_index_2026_07_19.json" + + +def test_kp_archive_candidate_is_closer_but_not_oracle(): + data = json.loads(PACKET.read_text(encoding="utf-8")) + assert data["scope"] == "kp_archive_worked_example_candidate" + assert data["claim_status"] == "open_queue" + assert data["truth_matrix_allowed"] is False + assert data["candidate_strength"] == "worked_example_text_candidate" + assert "Sub-Sub lord" in data["observed_public_snippet_topics"] + assert "cusp significator example" in data["observed_public_snippet_topics"] + assert data["oracle_status"] == "blocked_pending_structured_numeric_extraction" + + +def test_kp_archive_candidate_is_indexed(): + packets = { + row["packet_id"]: row + for row in json.loads(INDEX.read_text(encoding="utf-8"))["packets"] + } + packet = packets["kp_archive_worked_example_candidate_2026_07_21"] + assert packet["claim_status"] == "open_queue" + assert packet["consumer_policy"] == "research_observation_only" diff --git a/tests/test_kp_exact_cusp_invocation_closure.py b/tests/test_kp_exact_cusp_invocation_closure.py new file mode 100644 index 00000000..ba623b7a --- /dev/null +++ b/tests/test_kp_exact_cusp_invocation_closure.py @@ -0,0 +1,37 @@ +import json +from pathlib import Path + + +ROOT = Path(__file__).resolve().parents[1] +PACKET = ROOT / "references/oracle/kp_exact_cusp_invocation_closure_2026_07_21.json" +RAW = ROOT / "references/oracle/vedicastro_kp_house_cusp_raw_2026_07_21.json" +INDEX = ROOT / "references/oracle/evidence_packet_index_2026_07_19.json" + + +def test_kp_invocation_closes_exact_cusp_runtime_not_oracle(): + data = json.loads(PACKET.read_text(encoding="utf-8")) + assert data["scope"] == "kp_exact_cusp_invocation_closure" + assert data["claim_status"] == "observation_only" + assert data["truth_matrix_allowed"] is False + assert data["runtime_invocation_status"] == "exact_cusp_star_sub_sub_raw_available" + assert data["public_numeric_oracle_status"] == "blocked_missing_public_worked_example" + assert data["source_raw"] == str(RAW.relative_to(ROOT)) + + +def test_kp_invocation_has_12_cusps_and_required_fields(): + data = json.loads(PACKET.read_text(encoding="utf-8")) + assert data["summary"]["house_count"] == 12 + assert set(data["summary"]["required_fields"]) <= set(data["schema_fields"]) + first = data["sample_cusps"][0] + assert first["HouseNr"] == 1 + assert {"LonDecDeg", "NakshatraLord", "SubLord", "SubSubLord"} <= set(first) + + +def test_kp_invocation_packet_is_indexed(): + packets = { + row["packet_id"]: row + for row in json.loads(INDEX.read_text(encoding="utf-8"))["packets"] + } + packet = packets["kp_exact_cusp_invocation_closure_2026_07_21"] + assert packet["claim_status"] == "observation_only" + assert packet["consumer_policy"] == "research_observation_only" diff --git a/tests/test_kp_exact_cusp_public_worked_example_hunt.py b/tests/test_kp_exact_cusp_public_worked_example_hunt.py new file mode 100644 index 00000000..0208e0b7 --- /dev/null +++ b/tests/test_kp_exact_cusp_public_worked_example_hunt.py @@ -0,0 +1,37 @@ +import json +from pathlib import Path + + +ROOT = Path(__file__).resolve().parents[1] +PACKET = ROOT / "references/oracle/kp_exact_cusp_public_worked_example_hunt_2026_07_22.json" +INDEX = ROOT / "references/oracle/evidence_packet_index_2026_07_19.json" + + +def test_kp_exact_cusp_hunt_keeps_oracle_blocked_when_required_fields_missing(): + data = json.loads(PACKET.read_text(encoding="utf-8")) + assert data["scope"] == "kp_exact_cusp_public_worked_example_hunt" + assert data["claim_status"] == "blocked_until_oracle" + assert data["truth_matrix_allowed"] is False + assert data["search_status"] == "no_complete_public_numeric_worked_example_found" + for field in ["exact_cusp_longitude", "star_lord", "sub_lord", "sub_sub_lord"]: + assert field in data["required_fields"] + assert "observation-only" in data["next_action"] + + +def test_kp_exact_cusp_hunt_records_reviewed_sources_as_candidates_only(): + data = json.loads(PACKET.read_text(encoding="utf-8")) + sources = {row["source_id"]: row for row in data["sources_reviewed"]} + assert "astrosage_sign_star_sub_table" in sources + assert "indiadivine_horary_cuspal_sublord_fragment" in sources + for source in sources.values(): + assert source["missing"] + + +def test_kp_exact_cusp_hunt_is_indexed(): + packets = { + row["packet_id"]: row + for row in json.loads(INDEX.read_text(encoding="utf-8"))["packets"] + } + packet = packets["kp_exact_cusp_public_worked_example_hunt_2026_07_22"] + assert packet["claim_status"] == "blocked_until_oracle" + assert packet["consumer_policy"] == "research_observation_only" diff --git a/tests/test_kp_observation_sync_contract.py b/tests/test_kp_observation_sync_contract.py new file mode 100644 index 00000000..7590cca7 --- /dev/null +++ b/tests/test_kp_observation_sync_contract.py @@ -0,0 +1,43 @@ +import json +from pathlib import Path + + +ROOT = Path(__file__).resolve().parents[1] +CONTRACT = ROOT / "references/oracle/kp_observation_sync_contract_2026_07_22.json" +INDEX = ROOT / "references/oracle/evidence_packet_index_2026_07_19.json" + + +def test_kp_observation_sync_contract_is_calculable_displayable_not_predictive(): + data = json.loads(CONTRACT.read_text(encoding="utf-8")) + assert data["scope"] == "kp_observation_sync_contract" + assert data["claim_status"] == "observation_only" + assert data["runtime_status"] == "calculable" + assert data["display_status"] == "displayable_with_warning" + assert data["prediction_status"] == "not_verified_prediction" + assert data["truth_matrix_allowed"] is False + assert data["allowed_claim_level"] == "technical_observation" + assert "verified event timing" in data["forbidden_claims"] + + +def test_kp_observation_sync_contract_links_required_evidence(): + data = json.loads(CONTRACT.read_text(encoding="utf-8")) + assert data["evidence_refs"] == [ + "references/oracle/kp_exact_cusp_invocation_closure_2026_07_21.json", + "references/oracle/kp_archive_numeric_extraction_result_2026_07_21.json", + "references/oracle/roxyapi_kp_surface_contract_2026_07_21.json" + ] + fields = data["display_fields"] + assert {"cusp_longitude", "nakshatra_lord", "sub_lord", "sub_sub_lord"} <= set(fields) + assert data["sync_targets"]["skill"] == "reference_only_with_boundary" + assert data["sync_targets"]["api"] == "observation_endpoint_allowed" + assert data["sync_targets"]["ui"] == "capability_center_badge_only" + + +def test_kp_observation_sync_contract_is_indexed(): + packets = { + row["packet_id"]: row + for row in json.loads(INDEX.read_text(encoding="utf-8"))["packets"] + } + packet = packets["kp_observation_sync_contract_2026_07_22"] + assert packet["claim_status"] == "observation_only" + assert packet["consumer_policy"] == "research_observation_only" diff --git a/tests/test_kp_public_source_candidate_update.py b/tests/test_kp_public_source_candidate_update.py new file mode 100644 index 00000000..4ccea994 --- /dev/null +++ b/tests/test_kp_public_source_candidate_update.py @@ -0,0 +1,42 @@ +import json +from pathlib import Path + + +ROOT = Path(__file__).resolve().parents[1] +PACKET = ROOT / "references/oracle/kp_public_source_candidate_update_2026_07_22.json" +INDEX = ROOT / "references/oracle/evidence_packet_index_2026_07_19.json" + + +def test_kp_public_source_update_keeps_oracle_blocked(): + data = json.loads(PACKET.read_text(encoding="utf-8")) + assert data["scope"] == "kp_public_source_candidate_update" + assert data["claim_status"] == "blocked_until_oracle" + assert data["truth_matrix_allowed"] is False + assert data["production_tuning_allowed"] is False + assert data["runtime_sync_policy"]["kp_status"] == "calculable_displayable_public_oracle_blocked" + assert "verified precise event timing" in data["runtime_sync_policy"]["forbidden"] + + +def test_kp_public_source_update_records_reference_table_and_partial_cusp_sources(): + data = json.loads(PACKET.read_text(encoding="utf-8")) + sources = {row["source_id"]: row for row in data["source_basis"]} + assert "astrosage_sign_star_sub_table" in sources + assert "astrosage_fundamental_principles" in sources + partial = sources["archive_khullar_partial_cusp"]["observed_partial_fact"] + assert partial == { + "cusp": "11th", + "sign": "Sagittarius", + "degree_dms": "27°48'40\"", + } + for row in data["source_basis"]: + assert row["missing_for_numeric_oracle"] + + +def test_kp_public_source_update_is_indexed(): + packets = { + row["packet_id"]: row + for row in json.loads(INDEX.read_text(encoding="utf-8"))["packets"] + } + packet = packets["kp_public_source_candidate_update_2026_07_22"] + assert packet["claim_status"] == "blocked_until_oracle" + assert packet["consumer_policy"] == "research_observation_only" diff --git a/tests/test_kp_tajika_public_oracle_source_triage_round2.py b/tests/test_kp_tajika_public_oracle_source_triage_round2.py new file mode 100644 index 00000000..cd006c61 --- /dev/null +++ b/tests/test_kp_tajika_public_oracle_source_triage_round2.py @@ -0,0 +1,38 @@ +import json +from pathlib import Path + + +ROOT = Path(__file__).resolve().parents[1] +PACKET = ROOT / "references/oracle/kp_tajika_public_oracle_source_triage_round2_2026_07_21.json" +INDEX = ROOT / "references/oracle/evidence_packet_index_2026_07_19.json" + + +def test_round2_adds_kp_api_surface_and_steve_jobs_varshaphala_candidates(): + data = json.loads(PACKET.read_text(encoding="utf-8")) + assert data["scope"] == "kp_tajika_public_oracle_source_triage_round2" + assert data["claim_status"] == "open_queue" + assert data["truth_matrix_allowed"] is False + ids = {row["candidate_id"] for row in data["candidates"]} + assert "roxyapi_kp_surface_candidate" in ids + assert "steve_jobs_varshaphala_yumpu_candidate" in ids + + +def test_round2_keeps_sources_as_candidates_only(): + data = json.loads(PACKET.read_text(encoding="utf-8")) + for row in data["candidates"]: + assert row["promotion_status"] in { + "api_surface_reference_only", + "numeric_candidate_needs_source_review", + } + assert row["claim_upgrade"] == "none" + assert row["missing_for_oracle"] + + +def test_round2_packet_is_indexed(): + packets = { + row["packet_id"]: row + for row in json.loads(INDEX.read_text(encoding="utf-8"))["packets"] + } + packet = packets["kp_tajika_public_oracle_source_triage_round2_2026_07_21"] + assert packet["claim_status"] == "open_queue" + assert packet["consumer_policy"] == "research_observation_only" diff --git a/tests/test_muhurta_full_scoring_matrix_queue.py b/tests/test_muhurta_full_scoring_matrix_queue.py new file mode 100644 index 00000000..33706635 --- /dev/null +++ b/tests/test_muhurta_full_scoring_matrix_queue.py @@ -0,0 +1,46 @@ +import json +from pathlib import Path + + +ROOT = Path(__file__).resolve().parents[1] +PACKET = ROOT / "references/oracle/muhurta_full_scoring_matrix_queue_2026_07_22.json" +INDEX = ROOT / "references/oracle/evidence_packet_index_2026_07_19.json" + + +def test_muhurta_full_scoring_matrix_keeps_final_verdict_blocked(): + data = json.loads(PACKET.read_text(encoding="utf-8")) + assert data["scope"] == "muhurta_full_scoring_matrix_queue" + assert data["claim_status"] == "open_queue" + assert data["truth_matrix_allowed"] is False + assert data["production_tuning_allowed"] is False + assert data["summary"]["final_verdict_allowed"] is False + assert "no final electional verdict" in data["boundary"] + assert "Do not show a final Muhurta score" in data["display_policy"]["forbidden"] + + +def test_muhurta_full_scoring_matrix_tracks_requested_factors(): + rows = {row["factor"]: row for row in json.loads(PACKET.read_text(encoding="utf-8"))["factor_rows"]} + for factor in [ + "Panchaka", + "Yamaganda", + "Gulika Kalam", + "Vyatipata", + "Vaidhriti", + "Sankranti", + ]: + assert factor in rows + assert rows[factor]["missing_for_scoring"] + assert rows["Yamaganda"]["runtime_status"] == "local_formula_available_not_packeted" + assert rows["Gulika Kalam"]["runtime_status"] == "local_formula_available_not_packeted" + assert rows["Panchaka"]["runtime_status"] == "gap" + assert rows["Sankranti"]["runtime_status"] == "gap" + + +def test_muhurta_full_scoring_matrix_is_indexed(): + packets = { + row["packet_id"]: row + for row in json.loads(INDEX.read_text(encoding="utf-8"))["packets"] + } + packet = packets["muhurta_full_scoring_matrix_queue_2026_07_22"] + assert packet["claim_status"] == "open_queue" + assert packet["consumer_policy"] == "research_observation_only" diff --git a/tests/test_muhurta_observation_factor_packet.py b/tests/test_muhurta_observation_factor_packet.py new file mode 100644 index 00000000..cdefb4b7 --- /dev/null +++ b/tests/test_muhurta_observation_factor_packet.py @@ -0,0 +1,45 @@ +import json +from pathlib import Path + + +ROOT = Path(__file__).resolve().parents[1] +PACKET = ROOT / "references/oracle/muhurta_observation_factor_packet_2026_07_22.json" +INDEX = ROOT / "references/oracle/evidence_packet_index_2026_07_19.json" + + +def test_muhurta_observation_packet_captures_requested_factors_without_verdict(): + data = json.loads(PACKET.read_text(encoding="utf-8")) + assert data["scope"] == "muhurta_observation_factor_packet" + assert data["claim_status"] == "observation_only" + assert data["truth_matrix_allowed"] is False + assert data["production_tuning_allowed"] is False + assert data["verified_muhurta_verdict"] is False + assert data["observed_factor_keys"] == [ + "tarabala", + "chandrabala", + "rahu_kalam", + "abhijit_muhurta", + ] + assert data["full_scoring_status"] == "blocked_until_oracle" + assert "No final Muhurta scoring" in data["boundary"] + + +def test_muhurta_observation_packet_has_replay_hash_and_raw_observation(): + data = json.loads(PACKET.read_text(encoding="utf-8")) + assert len(data["raw_sha256"]) == 64 + assert data["canonical_request"]["date"] == "2026-07-19" + assert data["factor_status"]["tarabala"] == "computed_rule_probe" + assert data["factor_status"]["chandrabala"] == "computed_rule_probe" + assert data["factor_status"]["rahu_kalam"] == "present" + assert data["factor_status"]["abhijit_muhurta"] == "present" + assert data["raw_observation"]["claim_status"] == "exploratory_muhurta_candidate" + + +def test_muhurta_observation_packet_is_indexed(): + packets = { + row["packet_id"]: row + for row in json.loads(INDEX.read_text(encoding="utf-8"))["packets"] + } + packet = packets["muhurta_observation_factor_packet_2026_07_22"] + assert packet["claim_status"] == "observation_only" + assert packet["consumer_policy"] == "research_observation_only" diff --git a/tests/test_prashna_tajika_numeric_source_hunt.py b/tests/test_prashna_tajika_numeric_source_hunt.py new file mode 100644 index 00000000..e54a44ce --- /dev/null +++ b/tests/test_prashna_tajika_numeric_source_hunt.py @@ -0,0 +1,39 @@ +import json +from pathlib import Path + + +ROOT = Path(__file__).resolve().parents[1] +PACKET = ROOT / "references/oracle/prashna_tajika_numeric_source_hunt_2026_07_22.json" +INDEX = ROOT / "references/oracle/evidence_packet_index_2026_07_19.json" + + +def test_prashna_tajika_source_hunt_records_candidates_without_oracle_upgrade(): + data = json.loads(PACKET.read_text(encoding="utf-8")) + assert data["scope"] == "prashna_tajika_numeric_source_hunt" + assert data["claim_status"] == "open_queue" + assert data["truth_matrix_allowed"] is False + assert data["production_tuning_allowed"] is False + assert data["summary"]["candidate_count"] == 5 + assert "Source hunt only" in data["boundary"] + assert "not oracle packets" in data["next_action"] + + +def test_prashna_tajika_source_hunt_covers_requested_domains(): + rows = {row["source_id"]: row for row in json.loads(PACKET.read_text(encoding="utf-8"))["candidate_sources"]} + assert rows["prasna_marga_archive_text"]["domain"] == "Prashna/Sphuta" + assert rows["eastrovedica_lesson49_sphuta_definitions"]["domain"] == "Sphuta" + assert rows["scribd_gulika_mandi_numeric_candidate"]["domain"] == "Gulika" + assert rows["astrogle_saham_formula_reference"]["domain"] == "Saham/Tajika" + assert rows["varshaphala_ms_mehta_pdf_candidate"]["domain"] == "Tajika/Varshaphala" + for row in rows.values(): + assert row["missing_for_numeric_packet"] + + +def test_prashna_tajika_source_hunt_is_indexed(): + packets = { + row["packet_id"]: row + for row in json.loads(INDEX.read_text(encoding="utf-8"))["packets"] + } + packet = packets["prashna_tajika_numeric_source_hunt_2026_07_22"] + assert packet["claim_status"] == "open_queue" + assert packet["consumer_policy"] == "research_observation_only" diff --git a/tests/test_research_web_skill_commercial_gap_registry.py b/tests/test_research_web_skill_commercial_gap_registry.py index 3e1e9d8e..cf142d11 100644 --- a/tests/test_research_web_skill_commercial_gap_registry.py +++ b/tests/test_research_web_skill_commercial_gap_registry.py @@ -34,3 +34,13 @@ def test_research_web_skill_gap_registry_orders_numeric_packets_before_ui_truth_ assert "localStorage only" in tracks["research_web_profile_flow"]["next_delivery"] assert "exploratory" in tracks["research_web_rectification_journey"]["gate_for_upgrade"] assert "skill_truth_overlay" in tracks["skill_to_web_sync"]["next_delivery"] + + +def test_research_web_skill_gap_registry_records_kp_observation_sync_boundary(): + data = json.loads(REGISTRY.read_text(encoding="utf-8")) + milestones = {row["track"]: row for row in data["completed_milestones"]} + kp = milestones["kp_precision_timing_observation_sync"] + assert kp["contract"] == "references/oracle/kp_observation_sync_contract_2026_07_22.json" + assert kp["status"] == "calculable_displayable_public_oracle_blocked" + assert "technical observation only" in kp["sync_boundary"] + assert "verified event timing" in kp["sync_boundary"] diff --git a/tests/test_research_web_skill_invocation_gap_matrix.py b/tests/test_research_web_skill_invocation_gap_matrix.py new file mode 100644 index 00000000..360245f2 --- /dev/null +++ b/tests/test_research_web_skill_invocation_gap_matrix.py @@ -0,0 +1,54 @@ +import json +from pathlib import Path + + +ROOT = Path(__file__).resolve().parents[1] +MATRIX = ROOT / "references/oracle/research_web_skill_invocation_gap_matrix_2026_07_22.json" +INDEX = ROOT / "references/oracle/evidence_packet_index_2026_07_19.json" + + +def test_research_web_skill_invocation_gap_matrix_tracks_each_runtime_layer(): + data = json.loads(MATRIX.read_text(encoding="utf-8")) + assert data["scope"] == "research_web_skill_invocation_gap_matrix" + assert data["claim_status"] == "open_queue" + assert data["production_tuning_allowed"] is False + assert data["truth_matrix_allowed"] is False + assert "not a truth upgrade matrix" in data["boundary"] + + required = {"technique", "code", "skill", "api", "ui", "oracle", "next_action", "commercial_sync"} + for row in data["rows"]: + assert required <= set(row) + assert row["next_action"] + assert row["commercial_sync"] + + +def test_kp_and_timing_rows_keep_observation_and_holdout_boundaries(): + rows = {row["technique"]: row for row in json.loads(MATRIX.read_text(encoding="utf-8"))["rows"]} + + kp = rows["KP exact cusp / star-sub-sub"] + assert kp["api"] == "observation_endpoint_allowed" + assert kp["oracle"] == "public_numeric_oracle_blocked" + assert kp["commercial_sync"] == "sync_observation_contract_only" + + timing = rows["Day/month timing"] + assert timing["oracle"] == "blocked_until_independent_labels" + assert "blind ranking" in timing["next_action"] + assert timing["commercial_sync"] == "sync_boundary_contract_only" + + +def test_shadbala_row_requires_component_level_display_not_single_label(): + rows = {row["technique"]: row for row in json.loads(MATRIX.read_text(encoding="utf-8"))["rows"]} + shadbala = rows["Shadbala"] + assert shadbala["oracle"] == "component_explanatory_partial" + assert "same-unit component closure status" in shadbala["next_action"] + + +def test_research_web_skill_invocation_gap_matrix_is_indexed(): + packets = { + row["packet_id"]: row + for row in json.loads(INDEX.read_text(encoding="utf-8"))["packets"] + } + packet = packets["research_web_skill_invocation_gap_matrix_2026_07_22"] + assert packet["claim_status"] == "open_queue" + assert packet["consumer_policy"] == "research_planning_only" + assert "does not upgrade" in packet["claim_boundary"] diff --git a/tests/test_roxyapi_kp_surface_contract.py b/tests/test_roxyapi_kp_surface_contract.py new file mode 100644 index 00000000..e9a7c321 --- /dev/null +++ b/tests/test_roxyapi_kp_surface_contract.py @@ -0,0 +1,27 @@ +import json +from pathlib import Path + + +ROOT = Path(__file__).resolve().parents[1] +PACKET = ROOT / "references/oracle/roxyapi_kp_surface_contract_2026_07_21.json" +INDEX = ROOT / "references/oracle/evidence_packet_index_2026_07_19.json" + + +def test_roxyapi_kp_surface_contract_is_not_oracle(): + data = json.loads(PACKET.read_text(encoding="utf-8")) + assert data["scope"] == "roxyapi_kp_surface_contract" + assert data["claim_status"] == "reference_only" + assert data["truth_matrix_allowed"] is False + assert data["api_surface"]["endpoint"] == "POST /vedic-astrology/kp/chart" + assert {"starLord", "subLord", "subSubLord"} <= set(data["api_surface"]["cusp_fields"]) + assert data["oracle_status"] == "blocked_missing_same_input_numeric_replay" + + +def test_roxyapi_kp_surface_contract_is_indexed(): + packets = { + row["packet_id"]: row + for row in json.loads(INDEX.read_text(encoding="utf-8"))["packets"] + } + packet = packets["roxyapi_kp_surface_contract_2026_07_21"] + assert packet["claim_status"] == "reference_only" + assert packet["consumer_policy"] == "research_observation_only" diff --git a/tests/test_shadbala_component_closure_rollup.py b/tests/test_shadbala_component_closure_rollup.py new file mode 100644 index 00000000..8f47c5af --- /dev/null +++ b/tests/test_shadbala_component_closure_rollup.py @@ -0,0 +1,43 @@ +import json +from pathlib import Path + + +ROOT = Path(__file__).resolve().parents[1] +PACKET = ROOT / "references/oracle/shadbala_component_closure_rollup_2026_07_22.json" +INDEX = ROOT / "references/oracle/evidence_packet_index_2026_07_19.json" + + +def test_shadbala_rollup_summarizes_all_42_same_unit_rows(): + data = json.loads(PACKET.read_text(encoding="utf-8")) + assert data["scope"] == "shadbala_component_closure_rollup" + assert data["claim_status"] == "component_explanatory_partial" + assert data["truth_matrix_allowed"] is False + assert data["production_tuning_allowed"] is False + assert data["summary"]["total_rows"] == 42 + assert data["summary"]["bucket_counts"] == { + "method_variant": 8, + "formula_or_unit_mismatch": 27, + "within_tolerance": 7, + } + assert data["summary"]["absolute_truth_upgrade_count"] == 0 + + +def test_shadbala_rollup_marks_only_naisargika_tolerance_ready(): + data = json.loads(PACKET.read_text(encoding="utf-8")) + rows = {row["component"]: row for row in data["components"]} + assert rows["naisargika"]["closure_status"] == "observation_tolerance_ready" + assert rows["naisargika"]["bucket_counts"] == {"within_tolerance": 7} + for component in ["dig", "drik", "kala", "sthana"]: + assert rows[component]["closure_status"] == "formula_or_unit_arbitration_required" + assert rows["chesta"]["closure_status"] == "method_variant_requires_source_choice" + assert "absolute Virupa parity" in data["boundary"] + + +def test_shadbala_rollup_is_indexed(): + packets = { + row["packet_id"]: row + for row in json.loads(INDEX.read_text(encoding="utf-8"))["packets"] + } + packet = packets["shadbala_component_closure_rollup_2026_07_22"] + assert packet["claim_status"] == "partial" + assert packet["consumer_policy"] == "research_observation_only" diff --git a/tests/test_shadbala_component_joined_closure_packet.py b/tests/test_shadbala_component_joined_closure_packet.py new file mode 100644 index 00000000..1e107663 --- /dev/null +++ b/tests/test_shadbala_component_joined_closure_packet.py @@ -0,0 +1,53 @@ +import json +import subprocess +from pathlib import Path + + +ROOT = Path(__file__).resolve().parents[1] +PACKET = ROOT / "references/oracle/shadbala_component_joined_closure_packet_2026_07_21.json" +INDEX = ROOT / "references/oracle/evidence_packet_index_2026_07_19.json" + + +def test_joined_closure_generator_attaches_pyjhora_rows_to_all_42_tickets(): + data = json.loads( + subprocess.check_output( + ["python3", "scripts/shadbala_component_joined_closure.py"], + cwd=ROOT, + text=True, + ) + ) + assert data["scope"] == "shadbala_component_joined_closure_packet" + assert data["claim_status"] == "partial" + assert data["truth_matrix_allowed"] is False + assert data["summary"]["joined_ticket_count"] == 42 + assert data["summary"]["pyjhora_component_rows_joined"] == 42 + assert data["summary"]["absolute_truth_upgrade_count"] == 0 + + +def test_stable_components_are_grouped_before_harder_components(): + data = json.loads(PACKET.read_text(encoding="utf-8")) + priority = [row["component"] for row in data["component_priority"]] + assert priority[:3] == ["naisargika", "dig", "drik"] + assert priority[-3:] == ["chesta", "sthana", "kala"] + rows = {row["component"]: row for row in data["component_priority"]} + assert rows["naisargika"]["recommended_next_action"] == "freeze_observation_tolerance_after_second_case" + assert rows["chesta"]["recommended_next_action"] == "preserve_method_variant" + + +def test_joined_rows_keep_formula_unit_method_variant_statuses(): + data = json.loads(PACKET.read_text(encoding="utf-8")) + statuses = {row["closure_bucket"] for row in data["joined_rows"]} + assert {"within_tolerance", "formula_or_unit_mismatch", "method_variant"} <= statuses + for row in data["joined_rows"]: + assert row["pyjhora_workbuddy_virupa"] is not None + assert row["claim_upgrade"] == "none" + + +def test_joined_closure_packet_is_indexed(): + packets = { + row["packet_id"]: row + for row in json.loads(INDEX.read_text(encoding="utf-8"))["packets"] + } + packet = packets["shadbala_component_joined_closure_packet_2026_07_21"] + assert packet["claim_status"] == "partial" + assert packet["consumer_policy"] == "research_observation_only" diff --git a/tests/test_shadbala_formula_arbitration_queue_v2.py b/tests/test_shadbala_formula_arbitration_queue_v2.py new file mode 100644 index 00000000..580256c2 --- /dev/null +++ b/tests/test_shadbala_formula_arbitration_queue_v2.py @@ -0,0 +1,39 @@ +import json +from pathlib import Path + + +ROOT = Path(__file__).resolve().parents[1] +PACKET = ROOT / "references/oracle/shadbala_formula_arbitration_queue_v2_2026_07_22.json" +INDEX = ROOT / "references/oracle/evidence_packet_index_2026_07_19.json" + + +def test_shadbala_formula_arbitration_queue_tracks_five_unclosed_components(): + data = json.loads(PACKET.read_text(encoding="utf-8")) + assert data["scope"] == "shadbala_formula_arbitration_queue_v2" + assert data["claim_status"] == "partial" + assert data["truth_matrix_allowed"] is False + assert data["production_tuning_allowed"] is False + assert data["summary"]["component_count"] == 5 + assert data["summary"]["absolute_truth_upgrade_count"] == 0 + assert "do not make Shadbala absolute Virupa parity truth-ready" in data["boundary"] + + +def test_shadbala_formula_arbitration_queue_has_requested_component_policies(): + rows = {row["component"]: row for row in json.loads(PACKET.read_text(encoding="utf-8"))["components"]} + assert rows["dig"]["research_policy_to_test"] == "house_cusp_angular_distance" + assert "whole_house_angular_distance" in rows["dig"]["alternative_variants"] + assert rows["drik"]["research_policy_to_test"] == "classical_graha_drishti_with_signed_benefic_malefic_sum" + assert "functional_benefic_malefic_overlay" in rows["drik"]["alternative_variants"] + assert "hora" in rows["kala"]["subcomponents_required"] + assert "moolatrikona_or_dignity_variant" in rows["sthana"]["subcomponents_required"] + assert rows["chesta"]["research_policy_to_test"] == "explicit_mean_motion_seeghrochcha_variant_selection" + + +def test_shadbala_formula_arbitration_queue_is_indexed(): + packets = { + row["packet_id"]: row + for row in json.loads(INDEX.read_text(encoding="utf-8"))["packets"] + } + packet = packets["shadbala_formula_arbitration_queue_v2_2026_07_22"] + assert packet["claim_status"] == "partial" + assert packet["consumer_policy"] == "research_observation_only" diff --git a/tests/test_shadbala_hard_component_arbitration.py b/tests/test_shadbala_hard_component_arbitration.py new file mode 100644 index 00000000..5af7c9c8 --- /dev/null +++ b/tests/test_shadbala_hard_component_arbitration.py @@ -0,0 +1,36 @@ +import json +from pathlib import Path + + +ROOT = Path(__file__).resolve().parents[1] +PACKET = ROOT / "references/oracle/shadbala_hard_component_arbitration_2026_07_22.json" +INDEX = ROOT / "references/oracle/evidence_packet_index_2026_07_19.json" + + +def test_hard_component_arbitration_classifies_chesta_sthana_kala(): + data = json.loads(PACKET.read_text(encoding="utf-8")) + assert data["scope"] == "shadbala_hard_component_arbitration" + rows = {row["component"]: row for row in data["components"]} + assert set(rows) == {"chesta", "sthana", "kala"} + assert rows["chesta"]["dominant_issue"] == "method_variant" + assert rows["sthana"]["dominant_issue"] == "mixed_method_and_formula" + assert rows["kala"]["dominant_issue"] == "formula_or_unit_mismatch" + assert data["truth_matrix_allowed"] is False + + +def test_hard_components_keep_actionable_boundaries(): + data = json.loads(PACKET.read_text(encoding="utf-8")) + for row in data["components"]: + assert row["claim_upgrade"] == "none" + assert row["next_action"] + assert row["blocked_reason"] + + +def test_hard_component_packet_is_indexed(): + packets = { + row["packet_id"]: row + for row in json.loads(INDEX.read_text(encoding="utf-8"))["packets"] + } + packet = packets["shadbala_hard_component_arbitration_2026_07_22"] + assert packet["claim_status"] == "partial" + assert packet["consumer_policy"] == "research_observation_only" diff --git a/tests/test_shadbala_priority_component_arbitration.py b/tests/test_shadbala_priority_component_arbitration.py new file mode 100644 index 00000000..7946f2e9 --- /dev/null +++ b/tests/test_shadbala_priority_component_arbitration.py @@ -0,0 +1,45 @@ +import json +import subprocess +from pathlib import Path + + +ROOT = Path(__file__).resolve().parents[1] +PACKET = ROOT / "references/oracle/shadbala_priority_component_arbitration_2026_07_22.json" +INDEX = ROOT / "references/oracle/evidence_packet_index_2026_07_19.json" + + +def test_priority_arbitration_covers_naisargika_dig_drik(): + data = json.loads( + subprocess.check_output( + ["python3", "scripts/shadbala_priority_component_arbitration.py"], + cwd=ROOT, + text=True, + ) + ) + assert data["scope"] == "shadbala_priority_component_arbitration" + assert data["claim_status"] == "partial" + rows = {row["component"]: row for row in data["components"]} + assert set(rows) == {"naisargika", "dig", "drik"} + assert rows["naisargika"]["closure_status"] == "observation_tolerance_ready" + assert rows["dig"]["closure_status"] == "formula_source_arbitration_required" + assert rows["drik"]["closure_status"] == "formula_source_arbitration_required" + assert data["truth_matrix_allowed"] is False + + +def test_priority_arbitration_preserves_no_absolute_truth_upgrade(): + data = json.loads(PACKET.read_text(encoding="utf-8")) + assert data["summary"]["absolute_truth_upgrade_count"] == 0 + for row in data["components"]: + assert row["claim_upgrade"] == "none" + assert row["next_action"] + assert row["source_formula"] + + +def test_priority_arbitration_is_indexed(): + packets = { + row["packet_id"]: row + for row in json.loads(INDEX.read_text(encoding="utf-8"))["packets"] + } + packet = packets["shadbala_priority_component_arbitration_2026_07_22"] + assert packet["claim_status"] == "partial" + assert packet["consumer_policy"] == "research_observation_only" diff --git a/tests/test_tajika_steve_jobs_1984_extraction_contract.py b/tests/test_tajika_steve_jobs_1984_extraction_contract.py new file mode 100644 index 00000000..0373f0d4 --- /dev/null +++ b/tests/test_tajika_steve_jobs_1984_extraction_contract.py @@ -0,0 +1,27 @@ +import json +from pathlib import Path + + +ROOT = Path(__file__).resolve().parents[1] +PACKET = ROOT / "references/oracle/tajika_steve_jobs_1984_extraction_contract_2026_07_21.json" +INDEX = ROOT / "references/oracle/evidence_packet_index_2026_07_19.json" + + +def test_tajika_steve_jobs_contract_keeps_blank_template_blocked(): + data = json.loads(PACKET.read_text(encoding="utf-8")) + assert data["scope"] == "tajika_steve_jobs_1984_extraction_contract" + assert data["claim_status"] == "blocked_until_oracle" + assert data["truth_matrix_allowed"] is False + assert data["source_template"].endswith("tajika_steve_jobs_1984_first_packet.json") + assert "varsha_lagna_deg" in data["required_numeric_fields"] + assert "tajika_yogas" in data["required_numeric_fields"] + + +def test_tajika_extraction_contract_is_indexed(): + packets = { + row["packet_id"]: row + for row in json.loads(INDEX.read_text(encoding="utf-8"))["packets"] + } + packet = packets["tajika_steve_jobs_1984_extraction_contract_2026_07_21"] + assert packet["claim_status"] == "blocked_until_oracle" + assert packet["consumer_policy"] == "research_observation_only" diff --git a/tests/test_tajika_yumpu_access_locator.py b/tests/test_tajika_yumpu_access_locator.py new file mode 100644 index 00000000..f9977b93 --- /dev/null +++ b/tests/test_tajika_yumpu_access_locator.py @@ -0,0 +1,27 @@ +import json +from pathlib import Path + + +ROOT = Path(__file__).resolve().parents[1] +PACKET = ROOT / "references/oracle/tajika_yumpu_access_locator_2026_07_21.json" +INDEX = ROOT / "references/oracle/evidence_packet_index_2026_07_19.json" + + +def test_yumpu_access_locator_records_access_without_numeric_extraction(): + data = json.loads(PACKET.read_text(encoding="utf-8")) + assert data["scope"] == "tajika_yumpu_access_locator" + assert data["claim_status"] == "blocked_until_oracle" + assert data["truth_matrix_allowed"] is False + assert data["http_status"] == 200 + assert data["html_probe"]["steve_jobs_string_found"] is True + assert data["numeric_extraction_status"] == "not_performed" + + +def test_yumpu_access_locator_is_indexed(): + packets = { + row["packet_id"]: row + for row in json.loads(INDEX.read_text(encoding="utf-8"))["packets"] + } + packet = packets["tajika_yumpu_access_locator_2026_07_21"] + assert packet["claim_status"] == "blocked_until_oracle" + assert packet["consumer_policy"] == "research_observation_only" diff --git a/tests/test_tajika_yumpu_source_review_gate.py b/tests/test_tajika_yumpu_source_review_gate.py new file mode 100644 index 00000000..89629791 --- /dev/null +++ b/tests/test_tajika_yumpu_source_review_gate.py @@ -0,0 +1,28 @@ +import json +from pathlib import Path + + +ROOT = Path(__file__).resolve().parents[1] +PACKET = ROOT / "references/oracle/tajika_yumpu_source_review_gate_2026_07_21.json" +INDEX = ROOT / "references/oracle/evidence_packet_index_2026_07_19.json" + + +def test_yumpu_source_review_gate_blocks_numeric_oracle_until_capture_is_legal(): + data = json.loads(PACKET.read_text(encoding="utf-8")) + assert data["scope"] == "tajika_yumpu_source_review_gate" + assert data["claim_status"] == "blocked_until_oracle" + assert data["truth_matrix_allowed"] is False + assert data["candidate_id"] == "steve_jobs_varshaphala_yumpu_candidate" + assert data["copyright_boundary"] == "no_bulk_text_or_table_extraction" + assert data["allowed_next_actions"] + assert data["forbidden_actions"] + + +def test_yumpu_gate_is_indexed(): + packets = { + row["packet_id"]: row + for row in json.loads(INDEX.read_text(encoding="utf-8"))["packets"] + } + packet = packets["tajika_yumpu_source_review_gate_2026_07_21"] + assert packet["claim_status"] == "blocked_until_oracle" + assert packet["consumer_policy"] == "research_observation_only" diff --git a/tests/test_technique_invocation_matrix_current.py b/tests/test_technique_invocation_matrix_current.py new file mode 100644 index 00000000..ee062b33 --- /dev/null +++ b/tests/test_technique_invocation_matrix_current.py @@ -0,0 +1,30 @@ +import json +from pathlib import Path + + +ROOT = Path(__file__).resolve().parents[1] +MATRIX = ROOT / "references/oracle/technique_invocation_matrix_current_2026_07_21.json" +INDEX = ROOT / "references/oracle/evidence_packet_index_2026_07_19.json" + + +def test_invocation_matrix_tracks_code_skill_api_ui_gate_oracle(): + data = json.loads(MATRIX.read_text(encoding="utf-8")) + assert data["scope"] == "technique_invocation_matrix_current" + rows = {row["technique"]: row for row in data["rows"]} + for technique in ["Shadbala", "KP exact cusp", "Tajika/Varshaphala", "Birth-time rectification", "Day/month timing"]: + row = rows[technique] + assert {"code", "skill", "api", "ui", "claim_gate", "oracle_status"} <= set(row) + assert rows["Shadbala"]["oracle_status"] == "component_explanatory_partial" + assert rows["KP exact cusp"]["oracle_status"] == "calculable_displayable_public_oracle_blocked" + assert rows["KP exact cusp"]["evidence"] == "references/oracle/kp_observation_sync_contract_2026_07_22.json" + assert rows["Day/month timing"]["claim_gate"] == "exploratory_candidate_only" + + +def test_invocation_matrix_is_indexed(): + packets = { + row["packet_id"]: row + for row in json.loads(INDEX.read_text(encoding="utf-8"))["packets"] + } + packet = packets["technique_invocation_matrix_current_2026_07_21"] + assert packet["claim_status"] == "partial" + assert packet["consumer_policy"] == "research_observation_only" diff --git a/tests/test_workbuddy_round5_transfer_status.py b/tests/test_workbuddy_round5_transfer_status.py new file mode 100644 index 00000000..6b798b20 --- /dev/null +++ b/tests/test_workbuddy_round5_transfer_status.py @@ -0,0 +1,58 @@ +import json +from pathlib import Path + + +ROOT = Path(__file__).resolve().parents[1] +PACKET = ROOT / "references/oracle/workbuddy_round5_transfer_status_2026_07_22.json" +INDEX = ROOT / "references/oracle/evidence_packet_index_2026_07_19.json" + + +def test_workbuddy_round5_accounts_for_all_round4_candidates(): + data = json.loads(PACKET.read_text(encoding="utf-8")) + assert data["scope"] == "workbuddy_round5_transfer_status" + assert data["claim_status"] == "ready_contract" + assert data["truth_matrix_allowed"] is False + assert data["production_tuning_allowed"] is False + assert data["summary"]["candidate_count"] == 20 + assert data["summary"]["transferred_to_research_registry_or_test"] == 12 + assert data["summary"]["reference_only_not_runtime"] == 6 + assert data["summary"]["forbidden_private_or_obsolete"] == 2 + assert "not all copied" in data["answer_to_user"] + + +def test_workbuddy_round5_links_high_value_transfers_to_current_research_packets(): + rows = {row["candidate_id"]: row for row in json.loads(PACKET.read_text(encoding="utf-8"))["rows"]} + assert rows["wb_round4_pyjhora_steve_jobs_shadbala_stdout"]["research_target"] == ( + "references/oracle/shadbala_component_closure_rollup_2026_07_22.json" + ) + assert rows["wb_round4_kp_practical_event_timing"]["research_target"] == ( + "references/oracle/kp_observation_sync_contract_2026_07_22.json" + ) + assert rows["wb_round4_muhurta_complete_guide"]["research_target"] == ( + "references/oracle/muhurta_observation_factor_packet_2026_07_22.json" + ) + assert rows["wb_round4_tajika_steve_jobs_1984_first_packet"]["research_target"] == ( + "references/oracle/tajika_steve_jobs_1984_extraction_contract_2026_07_21.json" + ) + + +def test_workbuddy_round5_keeps_private_pending_packets_forbidden(): + rows = {row["candidate_id"]: row for row in json.loads(PACKET.read_text(encoding="utf-8"))["rows"]} + for candidate_id in [ + "wb_round4_user_1993_shadbala_pending_packet", + "wb_round4_handan_shadbala_pending_packet", + ]: + row = rows[candidate_id] + assert row["round5_status"] == "forbidden_private_or_obsolete" + assert row["research_target"] is None + assert "not for truth source" in row["boundary"] + + +def test_workbuddy_round5_status_is_indexed(): + packets = { + row["packet_id"]: row + for row in json.loads(INDEX.read_text(encoding="utf-8"))["packets"] + } + packet = packets["workbuddy_round5_transfer_status_2026_07_22"] + assert packet["claim_status"] == "ready_contract" + assert packet["consumer_policy"] == "research_governance_only"