diff --git a/references/oracle/evidence_packet_index_2026_07_19.json b/references/oracle/evidence_packet_index_2026_07_19.json index 68a56152..c5a60e32 100644 --- a/references/oracle/evidence_packet_index_2026_07_19.json +++ b/references/oracle/evidence_packet_index_2026_07_19.json @@ -561,14 +561,30 @@ "claim_status": "partial", "consumer_policy": "research_to_commercial_contract_only", "claim_boundary": "Queues formula/ayanamsa/node/rounding attribution for jyotishganit mismatches; no majority-vote truth." + }, + { + "packet_id": "external_source_use_tier_registry_2026_07_20", + "path": "references/oracle/external_source_use_tier_registry_2026_07_20.json", + "domain": "external_source_governance", + "claim_status": "ready_contract", + "consumer_policy": "research_to_commercial_contract_only", + "claim_boundary": "Classifies OSS/web/real-case sources by allowed use tier; does not upgrade any source to oracle truth." + }, + { + "packet_id": "high_rigor_closure_gate_snapshot_2026_07_20", + "path": "references/oracle/high_rigor_closure_gate_snapshot_2026_07_20.json", + "domain": "high_rigor_governance", + "claim_status": "blocked", + "consumer_policy": "research_to_commercial_contract_only", + "claim_boundary": "Aggregates current high-rigor gates; blocked/partial gates remain blocked until their evidence packets close." } ], "production_tuning_allowed": false, "scope": "evidence_packet_index", "status": "active_index_v1", "summary": { - "packet_count": 70, - "blocked_or_partial_count": 45, + "packet_count": 72, + "blocked_or_partial_count": 46, "human_review_required_count": 2 } } diff --git a/references/oracle/external_source_use_tier_registry_2026_07_20.json b/references/oracle/external_source_use_tier_registry_2026_07_20.json new file mode 100644 index 00000000..918645bb --- /dev/null +++ b/references/oracle/external_source_use_tier_registry_2026_07_20.json @@ -0,0 +1,104 @@ +{ + "boundary": "This registry authorizes source usage tiers; it does not close timing, KP cusp, Shadbala/AV, or Muhurta numeric truth.", + "claim_status": "ready_contract", + "created_at": "2026-07-20", + "production_tuning_allowed": false, + "rules": [ + "Permissive OSS can be copied only after license, commit, and package hash are pinned.", + "OSS engine agreement is evidence, not final truth, unless external worked examples close the method.", + "Public stories can be shown as similar case references, not used as negative holdout labels.", + "Public PDFs become oracle candidates only when full inputs, settings, numeric expected values, citation, and replay hash exist.", + "Conflicting Shadbala/AV/KP results must be surfaced as method variants, not majority-voted." + ], + "scope": "external_source_use_tier_registry", + "sources": [ + { + "allowed_use_tier": "permissive_adapter_or_formula_observation", + "can_be_oracle_truth": false, + "can_copy_code": true, + "license_status": "MIT", + "name": "northtara/jyotishganit", + "required_before_truth": [ + "pinned commit/package hash", + "same input contract", + "field-level raw output", + "method provenance", + "worked-example or independent oracle arbitration" + ], + "source_id": "jyotishganit_mit", + "source_type": "open_source_engine", + "url": "https://github.com/northtara/jyotishganit" + }, + { + "allowed_use_tier": "permissive_adapter_or_formula_isolation", + "can_be_oracle_truth": false, + "can_copy_code": true, + "license_status": "Apache-2.0", + "name": "vedika-io/xalen-ephemeris", + "required_before_truth": [ + "pinned commit/Cargo.lock hash", + "same ayanamsa/node/timezone contract", + "same raw longitude/JD input", + "component-level formula provenance" + ], + "source_id": "xalen_ephemeris_apache", + "source_type": "open_source_ephemeris", + "url": "https://github.com/vedika-io/xalen-ephemeris" + }, + { + "allowed_use_tier": "client_wrapper_observation_only", + "can_be_oracle_truth": false, + "can_copy_code": true, + "license_status": "MIT", + "name": "VedAstro.Python", + "required_before_truth": [ + "hosted deployment build/version identity", + "raw response hash", + "endpoint/method documentation" + ], + "source_id": "vedastro_python_mit", + "source_type": "client_wrapper", + "url": "https://github.com/VedAstro/VedAstro.Python" + }, + { + "allowed_use_tier": "manual_oracle_candidate_queue", + "can_be_oracle_truth": false, + "can_copy_code": false, + "license_status": "public_web_candidate_not_license_cleared_for_copying", + "name": "Public KP calculation PDF candidates", + "required_before_truth": [ + "full birth/input data", + "ayanamsa/timezone/house system", + "expected cusp/star/sub values", + "citation/page", + "replay artifact hash" + ], + "source_id": "public_kp_pdf_candidate", + "source_type": "worked_example_candidate", + "url": "references/oracle/public_worked_example_queue_2026_07_19.json" + }, + { + "allowed_use_tier": "case_reference_for_user_explanation", + "can_be_oracle_truth": false, + "can_copy_code": false, + "license_status": "citation_only", + "name": "Public biography/news/event cases", + "required_before_truth": [ + "reliable birth record", + "dated positive events", + "explicitly evidenced non-event windows", + "independent human label freeze", + "no tuning on holdout" + ], + "source_id": "public_real_case_story", + "source_type": "real_case_reference", + "url": "global_web_search_or_public_dataset" + } + ], + "summary": { + "copyable_code_source_count": 3, + "oracle_truth_ready_count": 0, + "source_count": 5 + }, + "truth_matrix_allowed": false +} diff --git a/references/oracle/high_rigor_closure_gate_snapshot_2026_07_20.json b/references/oracle/high_rigor_closure_gate_snapshot_2026_07_20.json new file mode 100644 index 00000000..77c67218 --- /dev/null +++ b/references/oracle/high_rigor_closure_gate_snapshot_2026_07_20.json @@ -0,0 +1,562 @@ +{ + "birth_time_truth_allowed": false, + "boundary": "Snapshot of gate state only; blocked/partial gates remain blocked until their evidence packets close.", + "commercial_sync_allowed": false, + "created_at": "2026-07-20", + "gates": [ + { + "claim_boundary": "External numeric worked examples are incomplete for Prashna/Tajika/Saham/Gulika/Sphuta and formula/unit disputed components.", + "evidence": [ + { + "artifact": "prashna_tajika_saham_gulika_sphuta_oracle_packet", + "claim_boundary": "This packet records local artifacts, source candidates, and required worked examples. It does not claim external numeric closure.", + "status": "oracle_packet_registry_v1" + }, + { + "artifact": "formula_source_knowledge_base", + "claim_boundary": "This registry attaches source/formula/unit/oracle boundaries. It does not by itself prove absolute parity or prediction accuracy.", + "status": "formula_source_registry_v1" + } + ], + "gate_id": "external_numeric_oracle", + "status": "blocked" + }, + { + "claim_boundary": "Independent human-labeled negative windows are required before verified day/month timing claims.", + "evidence": { + "annotations": [ + { + "adjudicator": "", + "annotation_id": "DLH-PILOT-001-75809BC667", + "candidate_label": "target_event", + "domain": "marriage", + "end": "1991-03-18", + "event_absent_assertion": "", + "event_description": "Marriage to Laurene Powell Jobs", + "final_label": null, + "frozen_before_scoring": false, + "independent_human_reviewed": false, + "notes": "", + "review_decision": "pending", + "source_quote_or_summary": "", + "source_urls": [ + "https://allaboutstevejobs.com/bio/timeline", + "https://people.com/who-is-laurene-powell-jobs-steve-jobs-wife-7502390" + ], + "start": "1991-03-18", + "subject_id": "steve_jobs", + "subject_name": "Steve Jobs", + "time_uncertainty_days": null + }, + { + "adjudicator": "", + "annotation_id": "DLH-PILOT-002-2E68252F11", + "candidate_label": "no_target_event", + "domain": "marriage", + "end": "1990-09-30", + "event_absent_assertion": "Candidate non-marriage interval before the documented March 18, 1991 marriage; must be independently checked against biography/timeline sources.", + "event_description": "", + "final_label": null, + "frozen_before_scoring": false, + "independent_human_reviewed": false, + "notes": "", + "review_decision": "pending", + "source_quote_or_summary": "", + "source_urls": [ + "https://allaboutstevejobs.com/bio/timeline", + "https://people.com/who-is-laurene-powell-jobs-steve-jobs-wife-7502390" + ], + "start": "1990-09-01", + "subject_id": "steve_jobs", + "subject_name": "Steve Jobs", + "time_uncertainty_days": null + }, + { + "adjudicator": "", + "annotation_id": "DLH-PILOT-003-3B88192D62", + "candidate_label": "no_target_event", + "domain": "marriage", + "end": "1991-06-30", + "event_absent_assertion": "Candidate non-marriage interval after the documented March 18, 1991 marriage; must be independently checked against biography/timeline sources.", + "event_description": "", + "final_label": null, + "frozen_before_scoring": false, + "independent_human_reviewed": false, + "notes": "", + "review_decision": "pending", + "source_quote_or_summary": "", + "source_urls": [ + "https://allaboutstevejobs.com/bio/timeline", + "https://people.com/who-is-laurene-powell-jobs-steve-jobs-wife-7502390" + ], + "start": "1991-06-01", + "subject_id": "steve_jobs", + "subject_name": "Steve Jobs", + "time_uncertainty_days": null + }, + { + "adjudicator": "", + "annotation_id": "DLH-PILOT-004-647CE4536A", + "candidate_label": "target_event", + "domain": "marriage", + "end": "1992-10-03", + "event_absent_assertion": "", + "event_description": "Marriage to Michelle Robinson Obama", + "final_label": null, + "frozen_before_scoring": false, + "independent_human_reviewed": false, + "notes": "", + "review_decision": "pending", + "source_quote_or_summary": "", + "source_urls": [ + "https://www.obamalibrary.gov/obamas/first-lady-michelle-obama", + "https://www.whitehousehistory.org/bios/michelle-obama" + ], + "start": "1992-10-03", + "subject_id": "barack_obama", + "subject_name": "Barack Obama", + "time_uncertainty_days": null + }, + { + "adjudicator": "", + "annotation_id": "DLH-PILOT-005-4B61A2A307", + "candidate_label": "no_target_event", + "domain": "marriage", + "end": "1992-07-31", + "event_absent_assertion": "Candidate non-marriage interval before the documented October 3, 1992 marriage; must be independently checked against relationship/timeline sources.", + "event_description": "", + "final_label": null, + "frozen_before_scoring": false, + "independent_human_reviewed": false, + "notes": "", + "review_decision": "pending", + "source_quote_or_summary": "", + "source_urls": [ + "https://www.obamalibrary.gov/obamas/first-lady-michelle-obama", + "https://www.whitehousehistory.org/bios/michelle-obama" + ], + "start": "1992-07-01", + "subject_id": "barack_obama", + "subject_name": "Barack Obama", + "time_uncertainty_days": null + }, + { + "adjudicator": "", + "annotation_id": "DLH-PILOT-006-260BF5AEBD", + "candidate_label": "no_target_event", + "domain": "marriage", + "end": "1993-01-31", + "event_absent_assertion": "Candidate non-marriage interval after the documented October 3, 1992 marriage; must be independently checked against relationship/timeline sources.", + "event_description": "", + "final_label": null, + "frozen_before_scoring": false, + "independent_human_reviewed": false, + "notes": "", + "review_decision": "pending", + "source_quote_or_summary": "", + "source_urls": [ + "https://www.obamalibrary.gov/obamas/first-lady-michelle-obama", + "https://www.whitehousehistory.org/bios/michelle-obama" + ], + "start": "1993-01-01", + "subject_id": "barack_obama", + "subject_name": "Barack Obama", + "time_uncertainty_days": null + }, + { + "adjudicator": "", + "annotation_id": "DLH-PILOT-007-275F44F8FC", + "candidate_label": "target_event", + "domain": "marriage", + "end": "1903-01-06", + "event_absent_assertion": "", + "event_description": "Marriage to Mileva Marić", + "final_label": null, + "frozen_before_scoring": false, + "independent_human_reviewed": false, + "notes": "", + "review_decision": "pending", + "source_quote_or_summary": "", + "source_urls": [ + "https://einstein-website.de/en/timeline/", + "https://www.pbs.org/wgbh/nova/einstein/timeline/" + ], + "start": "1903-01-06", + "subject_id": "albert_einstein", + "subject_name": "Albert Einstein", + "time_uncertainty_days": null + }, + { + "adjudicator": "", + "annotation_id": "DLH-PILOT-008-5675318BC7", + "candidate_label": "no_target_event", + "domain": "marriage", + "end": "1902-06-30", + "event_absent_assertion": "Candidate non-marriage interval before the documented January 6, 1903 marriage; must be independently checked against timeline/biography sources.", + "event_description": "", + "final_label": null, + "frozen_before_scoring": false, + "independent_human_reviewed": false, + "notes": "", + "review_decision": "pending", + "source_quote_or_summary": "", + "source_urls": [ + "https://einstein-website.de/en/timeline/", + "https://www.pbs.org/wgbh/nova/einstein/timeline/" + ], + "start": "1902-06-01", + "subject_id": "albert_einstein", + "subject_name": "Albert Einstein", + "time_uncertainty_days": null + }, + { + "adjudicator": "", + "annotation_id": "DLH-PILOT-009-0BC3CA37FF", + "candidate_label": "no_target_event", + "domain": "marriage", + "end": "1903-04-30", + "event_absent_assertion": "Candidate non-marriage interval after the documented January 6, 1903 marriage; must be independently checked against timeline/biography sources.", + "event_description": "", + "final_label": null, + "frozen_before_scoring": false, + "independent_human_reviewed": false, + "notes": "", + "review_decision": "pending", + "source_quote_or_summary": "", + "source_urls": [ + "https://einstein-website.de/en/timeline/", + "https://www.pbs.org/wgbh/nova/einstein/timeline/" + ], + "start": "1903-04-01", + "subject_id": "albert_einstein", + "subject_name": "Albert Einstein", + "time_uncertainty_days": null + } + ], + "created_at": "2026-07-19", + "instructions": [ + "Do not use candidate_label as final_label.", + "For target_event, verify the event date from public sources.", + "For no_target_event, verify absence in the interval from public sources.", + "Freeze all labels before timing_ranker_blind_eval.py is run.", + "Do not use existing observed control dates for tuning." + ], + "production_tuning_allowed": false, + "ready_for_blind_eval": false, + "scope": "day_level_holdout_human_annotation_packet", + "source_report": "references/real_case_calibration/day_level_holdout_v3_pilot_source_queue_report_2026_07_19.json", + "status": "awaiting_independent_human_adjudication", + "summary": { + "annotation_count": 9, + "final_label_count": 0, + "frozen_count": 0, + "negative_candidate_count": 6, + "positive_candidate_count": 3 + }, + "truth_boundary": "This packet is for human labeling only. It must not be scored until final_label, adjudicator, independent_human_reviewed, and frozen_before_scoring are complete." + }, + "gate_id": "independent_negative_holdout", + "status": "blocked" + }, + { + "claim_boundary": "KP star/sub-lord, ruling planets and significator probes can support research inspection, but cannot drive precise event timing until exact cusp calculation, external numeric oracle and independent negative holdout validation pass.", + "evidence": { + "boundary": "This contract separates current KP field probes from exact KP cusp timing. Current local significator tables use whole-sign/house-center probe houses and must not be treated as precise KP cusps.", + "claim_boundary": "KP star/sub-lord, ruling planets and significator probes can support research inspection, but cannot drive precise event timing until exact cusp calculation, external numeric oracle and independent negative holdout validation pass.", + "created_at": "2026-07-19", + "current_runtime_cusp_mode": "whole_sign_house_center_probe", + "exact_cusp_status": "blocked_missing_oracle", + "kp_significator_runtime_policy": "supporting_probe_only", + "production_tuning_allowed": false, + "required_exact_cusp_inputs": [ + { + "field": "birth_or_question_datetime", + "reason": "KP cusps are time-sensitive and must use the exact event/question timestamp." + }, + { + "field": "latitude", + "reason": "House cusps depend on local latitude." + }, + { + "field": "longitude", + "reason": "House cusps depend on local longitude and local sidereal time." + }, + { + "field": "timezone", + "reason": "Timezone and DST must be explicit before sidereal time/cusp calculation." + }, + { + "field": "ayanamsa", + "reason": "KP cusps and star/sub-lord fields require a fixed sidereal setting." + }, + { + "field": "house_system", + "reason": "KP typically uses a Placidus-style cusp workflow; the runtime must not silently substitute whole-sign houses." + } + ], + "required_oracles": [ + { + "claim_boundary": "Needed before exact cusp fields can be marked verified.", + "oracle_id": "kp_cusp_numeric_worked_example", + "required_fields": [ + "house_number", + "cusp_longitude", + "sign", + "rasi_lord", + "star_lord", + "sub_lord", + "sub_sub_lord" + ], + "status": "missing" + }, + { + "claim_boundary": "Needed before ABCD significator tables can be used beyond probe status.", + "oracle_id": "kp_significator_field_example", + "required_fields": [ + "planet_significator_A", + "planet_significator_B", + "planet_significator_C", + "planet_significator_D", + "house_significator_A", + "house_significator_B", + "house_significator_C", + "house_significator_D" + ], + "status": "missing" + }, + { + "claim_boundary": "Needed before KP timing can upgrade from exploratory candidate to verified timing claim.", + "oracle_id": "negative_holdout_timing_set", + "required_fields": [ + "positive_event_window", + "negative_non_event_windows", + "blind_ranking_protocol" + ], + "status": "missing" + } + ], + "safe_runtime_policy": { + "allowed": [ + "Expose probe fields with raw hash", + "Use KP fields as downgrade-only or supporting context", + "Show exact-cusp blocker in Technique Audit Table" + ], + "blocked": [ + "Verified day/month timing claim", + "Birth-time truth claim", + "Commercial precise KP event promise" + ] + }, + "scope": "kp_cusp_precision_contract", + "status": "contract_v1" + }, + "gate_id": "kp_exact_cusp", + "status": "blocked" + }, + { + "claim_boundary": "KP, Muhurta, advanced Ashtakavarga and advanced compatibility have registries/probes, but full scoring remains blocked or partial.", + "evidence": [ + { + "claim_boundary": "Reference/probe only; exact KP cusp contract exists at references/oracle/kp_cusp_precision_contract_2026_07_19.json, but current runtime remains whole-sign/house-center probe until numeric cusp oracle passes.", + "commercial_sync_status": "blocked_until_oracle", + "domain": "kp_precision_timing", + "external_oracle_status": "oracle_queue_present_awaiting_public_example", + "local_code_status": "precision_contract_present_probe_approximate", + "technique_id": "kp_cusps" + }, + { + "claim_boundary": "Reference/probe only; KP star/sub-lord fields are exposed by scripts/kp_precision_timing_probe.py but cannot make precise event claims until exact cusp oracle and holdout gates close.", + "commercial_sync_status": "blocked_until_oracle", + "domain": "kp_precision_timing", + "external_oracle_status": "hash_manifest_present_fixture_missing_or_fixed", + "local_code_status": "minimal_probe_present", + "technique_id": "star_sub_lord" + }, + { + "claim_boundary": "Reference/probe only; ruling planets are exposed by scripts/kp_precision_timing_probe.py but cannot drive rectification or timing before exact question-time contract, external oracle and negative holdout gates.", + "commercial_sync_status": "blocked_until_oracle", + "domain": "kp_precision_timing", + "external_oracle_status": "missing_ruling_planets_oracle", + "local_code_status": "minimal_probe_present", + "technique_id": "ruling_planets" + }, + { + "claim_boundary": "Reference/probe only; significator ABCD tables are exposed by scripts/kp_precision_timing_probe.py but require exact cusp contract and field-level oracle before runtime use.", + "commercial_sync_status": "blocked_until_oracle", + "domain": "kp_precision_timing", + "external_oracle_status": "missing_significator_oracle", + "local_code_status": "minimal_probe_present", + "technique_id": "kp_significators" + }, + { + "claim_boundary": "Research-only until question-time input contract, KP number handling, and external examples are available.", + "commercial_sync_status": "research_only", + "domain": "kp_precision_timing", + "external_oracle_status": "missing", + "local_code_status": "missing_runtime", + "technique_id": "kp_horary" + }, + { + "claim_boundary": "Can support day context, but cannot be marketed as full Muhurta scoring.", + "commercial_sync_status": "ready_after_guarded_contract", + "domain": "muhurta", + "external_oracle_status": "partial", + "local_code_status": "present", + "technique_id": "panchanga_base" + }, + { + "claim_boundary": "Do not present as auspicious-date selection until Tarabala/Chandrabala/Panchaka/Rahu Kalam weights and examples are validated.", + "commercial_sync_status": "blocked_until_oracle", + "domain": "muhurta", + "external_oracle_status": "missing", + "local_code_status": "missing_runtime", + "technique_id": "full_muhurta_scoring" + }, + { + "claim_boundary": "Observation-only until natal Moon matching, Tara sequence, Chandra Bala rules and external examples pass.", + "commercial_sync_status": "blocked_until_oracle", + "domain": "muhurta", + "external_oracle_status": "missing", + "local_code_status": "factor_probe_present", + "technique_id": "tarabala_chandrabala" + }, + { + "claim_boundary": "Can be shown as Panchanga interval after sunrise/sunset contract; not a full Muhurta verdict.", + "commercial_sync_status": "ready_after_guarded_contract", + "domain": "muhurta", + "external_oracle_status": "partial", + "local_code_status": "factor_probe_present", + "technique_id": "rahu_yamaganda_gulika_kalam" + }, + { + "claim_boundary": "Reference-only until formula source, timezone handling and worked examples close.", + "commercial_sync_status": "blocked_until_oracle", + "domain": "muhurta", + "external_oracle_status": "missing", + "local_code_status": "missing_runtime", + "technique_id": "abhijit_sankranti_vyatipata_vaidhriti" + }, + { + "claim_boundary": "Core BAV/SAV can be used with method-variant and parity boundary.", + "commercial_sync_status": "ready_after_guarded_contract", + "domain": "ashtakavarga_advanced_usage", + "external_oracle_status": "partial", + "local_code_status": "present", + "technique_id": "bav_sav_core" + }, + { + "claim_boundary": "Observation-only design item; do not use for precise transit timing until source and holdout gates close.", + "commercial_sync_status": "blocked_until_oracle", + "domain": "ashtakavarga_advanced_usage", + "external_oracle_status": "missing", + "local_code_status": "missing_runtime", + "technique_id": "kakshya_transit" + }, + { + "claim_boundary": "Research-only until rules, source examples and negative controls are available.", + "commercial_sync_status": "blocked_until_oracle", + "domain": "ashtakavarga_advanced_usage", + "external_oracle_status": "missing", + "local_code_status": "missing_runtime", + "technique_id": "sensitive_transit_nakshatra_rashi" + }, + { + "claim_boundary": "Do not infer life events from age/direction lists without verified case calibration.", + "commercial_sync_status": "research_only", + "domain": "ashtakavarga_advanced_usage", + "external_oracle_status": "missing", + "local_code_status": "missing_runtime", + "technique_id": "important_ages_directional_usage" + }, + { + "claim_boundary": "Blocked for verified timing until independent negative holdout passes.", + "commercial_sync_status": "blocked_until_oracle", + "domain": "ashtakavarga_advanced_usage", + "external_oracle_status": "missing", + "local_code_status": "missing_runtime", + "technique_id": "annual_sav_timing_scan" + }, + { + "claim_boundary": "Usable as compatibility factor, not deterministic marriage outcome.", + "commercial_sync_status": "ready_after_guarded_contract", + "domain": "compatibility", + "external_oracle_status": "partial", + "local_code_status": "present", + "technique_id": "ashtakoota_core" + }, + { + "claim_boundary": "Do not claim full top-tier compatibility until planet/Lagna Kuta variants and examples are validated.", + "commercial_sync_status": "blocked_until_oracle", + "domain": "compatibility", + "external_oracle_status": "missing", + "local_code_status": "partial_or_missing", + "technique_id": "extended_koota_planet_lagna" + }, + { + "claim_boundary": "Research-only until deduplication, source packet and tests exist.", + "commercial_sync_status": "research_only", + "domain": "compatibility", + "external_oracle_status": "missing", + "local_code_status": "registry_only", + "technique_id": "relationship_combinations_rule_families" + }, + { + "claim_boundary": "Observation-only until Ashtakavarga relationship overlay rules and examples close.", + "commercial_sync_status": "blocked_until_oracle", + "domain": "compatibility", + "external_oracle_status": "missing", + "local_code_status": "missing_runtime", + "technique_id": "relationship_av_overlay" + }, + { + "claim_boundary": "Western-derived compatibility overlay; keep out of Vedic commercial runtime unless explicitly scoped as cross-system research.", + "commercial_sync_status": "not_for_commercial_runtime", + "domain": "compatibility", + "external_oracle_status": "not_applicable_vedic_core", + "local_code_status": "missing_runtime", + "technique_id": "composite_davidson_charts" + } + ], + "gate_id": "full_scoring_contracts", + "status": "partial" + } + ], + "next_actions": [ + { + "action": "collect_public_numeric_oracle_packets", + "blocked_by": [ + "external_numeric_oracle" + ], + "target": "Prashna/Tajika/Saham/Gulika/Sphuta and Shadbala/AV disputed components" + }, + { + "action": "pre_register_independent_negative_holdout", + "blocked_by": [ + "independent_negative_holdout" + ], + "target": "day/month timing blind ranking" + }, + { + "action": "pin_exact_kp_cusp_oracle", + "blocked_by": [ + "kp_exact_cusp" + ], + "target": "KP cusp longitude + star/sub/sub-sub worked example" + }, + { + "action": "promote_full_scoring_only_after_oracle", + "blocked_by": [ + "full_scoring_contracts", + "external_numeric_oracle", + "independent_negative_holdout" + ], + "target": "KP/Muhurta/AV/compatibility scoring" + } + ], + "overall_status": "blocked", + "production_tuning_allowed": false, + "scope": "high_rigor_closure_gate_snapshot", + "snapshot_hash": "6bd1d7073570245e8a0610c808c5fe3335601e2c49cbc122b57329ec10c56137", + "source_scope": "high_rigor_closure_gate", + "verified_day_month_timing_allowed": false +} diff --git a/scripts/external_source_use_tier_registry.py b/scripts/external_source_use_tier_registry.py new file mode 100644 index 00000000..b6ba0b11 --- /dev/null +++ b/scripts/external_source_use_tier_registry.py @@ -0,0 +1,134 @@ +#!/usr/bin/env python3 +"""Classify OSS/web Jyotish sources by allowed verification use.""" + +from __future__ import annotations + +import argparse +import json +from pathlib import Path +from typing import Any + + +ROOT = Path(__file__).resolve().parents[1] + + +SOURCES: list[dict[str, Any]] = [ + { + "source_id": "jyotishganit_mit", + "name": "northtara/jyotishganit", + "url": "https://github.com/northtara/jyotishganit", + "license_status": "MIT", + "source_type": "open_source_engine", + "allowed_use_tier": "permissive_adapter_or_formula_observation", + "can_copy_code": True, + "can_be_oracle_truth": False, + "required_before_truth": [ + "pinned commit/package hash", + "same input contract", + "field-level raw output", + "method provenance", + "worked-example or independent oracle arbitration", + ], + }, + { + "source_id": "xalen_ephemeris_apache", + "name": "vedika-io/xalen-ephemeris", + "url": "https://github.com/vedika-io/xalen-ephemeris", + "license_status": "Apache-2.0", + "source_type": "open_source_ephemeris", + "allowed_use_tier": "permissive_adapter_or_formula_isolation", + "can_copy_code": True, + "can_be_oracle_truth": False, + "required_before_truth": [ + "pinned commit/Cargo.lock hash", + "same ayanamsa/node/timezone contract", + "same raw longitude/JD input", + "component-level formula provenance", + ], + }, + { + "source_id": "vedastro_python_mit", + "name": "VedAstro.Python", + "url": "https://github.com/VedAstro/VedAstro.Python", + "license_status": "MIT", + "source_type": "client_wrapper", + "allowed_use_tier": "client_wrapper_observation_only", + "can_copy_code": True, + "can_be_oracle_truth": False, + "required_before_truth": [ + "hosted deployment build/version identity", + "raw response hash", + "endpoint/method documentation", + ], + }, + { + "source_id": "public_kp_pdf_candidate", + "name": "Public KP calculation PDF candidates", + "url": "references/oracle/public_worked_example_queue_2026_07_19.json", + "license_status": "public_web_candidate_not_license_cleared_for_copying", + "source_type": "worked_example_candidate", + "allowed_use_tier": "manual_oracle_candidate_queue", + "can_copy_code": False, + "can_be_oracle_truth": False, + "required_before_truth": [ + "full birth/input data", + "ayanamsa/timezone/house system", + "expected cusp/star/sub values", + "citation/page", + "replay artifact hash", + ], + }, + { + "source_id": "public_real_case_story", + "name": "Public biography/news/event cases", + "url": "global_web_search_or_public_dataset", + "license_status": "citation_only", + "source_type": "real_case_reference", + "allowed_use_tier": "case_reference_for_user_explanation", + "can_copy_code": False, + "can_be_oracle_truth": False, + "required_before_truth": [ + "reliable birth record", + "dated positive events", + "explicitly evidenced non-event windows", + "independent human label freeze", + "no tuning on holdout", + ], + }, +] + + +def build(date: str) -> dict[str, Any]: + return { + "scope": "external_source_use_tier_registry", + "created_at": date, + "claim_status": "ready_contract", + "production_tuning_allowed": False, + "truth_matrix_allowed": False, + "summary": { + "source_count": len(SOURCES), + "copyable_code_source_count": sum(1 for row in SOURCES if row["can_copy_code"]), + "oracle_truth_ready_count": sum(1 for row in SOURCES if row["can_be_oracle_truth"]), + }, + "rules": [ + "Permissive OSS can be copied only after license, commit, and package hash are pinned.", + "OSS engine agreement is evidence, not final truth, unless external worked examples close the method.", + "Public stories can be shown as similar case references, not used as negative holdout labels.", + "Public PDFs become oracle candidates only when full inputs, settings, numeric expected values, citation, and replay hash exist.", + "Conflicting Shadbala/AV/KP results must be surfaced as method variants, not majority-voted.", + ], + "sources": SOURCES, + "boundary": "This registry authorizes source usage tiers; it does not close timing, KP cusp, Shadbala/AV, or Muhurta numeric truth.", + } + + +def main() -> int: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--date", default="2026-07-20") + args = parser.parse_args() + print(json.dumps(build(args.date), ensure_ascii=False, indent=2, sort_keys=True)) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/scripts/high_rigor_closure_snapshot.py b/scripts/high_rigor_closure_snapshot.py new file mode 100644 index 00000000..7602bf7d --- /dev/null +++ b/scripts/high_rigor_closure_snapshot.py @@ -0,0 +1,47 @@ +#!/usr/bin/env python3 +"""Materialize high-rigor closure gate output as a dated evidence snapshot.""" + +from __future__ import annotations + +import argparse +import hashlib +import json +from pathlib import Path +from typing import Any + +from scripts.high_rigor_closure_gate import build_report + + +def stable_json(data: Any) -> str: + return json.dumps(data, ensure_ascii=False, sort_keys=True, separators=(",", ":"), default=str) + + +def build(date: str) -> dict[str, Any]: + report = build_report() + snapshot = { + "scope": "high_rigor_closure_gate_snapshot", + "created_at": date, + "source_scope": report["scope"], + "overall_status": report["overall_status"], + "production_tuning_allowed": report["production_tuning_allowed"], + "verified_day_month_timing_allowed": report["verified_day_month_timing_allowed"], + "birth_time_truth_allowed": report["birth_time_truth_allowed"], + "commercial_sync_allowed": report["commercial_sync_allowed"], + "gates": report["gates"], + "next_actions": report["next_actions"], + "boundary": "Snapshot of gate state only; blocked/partial gates remain blocked until their evidence packets close.", + } + snapshot["snapshot_hash"] = hashlib.sha256(stable_json(snapshot).encode("utf-8")).hexdigest() + return snapshot + + +def main() -> int: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--date", default="2026-07-20") + args = parser.parse_args() + print(json.dumps(build(args.date), ensure_ascii=False, indent=2, sort_keys=True)) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/tests/test_external_source_use_tier_registry.py b/tests/test_external_source_use_tier_registry.py new file mode 100644 index 00000000..ee40d8a8 --- /dev/null +++ b/tests/test_external_source_use_tier_registry.py @@ -0,0 +1,39 @@ +import json +import subprocess +from pathlib import Path + + +ROOT = Path(__file__).resolve().parents[1] +ARTIFACT = ROOT / "references/oracle/external_source_use_tier_registry_2026_07_20.json" +INDEX = ROOT / "references/oracle/evidence_packet_index_2026_07_19.json" + + +def test_external_source_use_tier_registry_blocks_truth_upgrade(): + data = json.loads( + subprocess.check_output( + ["python3", "scripts/external_source_use_tier_registry.py", "--date", "2026-07-20"], + cwd=ROOT, + text=True, + ) + ) + assert data["scope"] == "external_source_use_tier_registry" + assert data["claim_status"] == "ready_contract" + assert data["production_tuning_allowed"] is False + assert data["truth_matrix_allowed"] is False + assert data["summary"]["oracle_truth_ready_count"] == 0 + + +def test_external_source_use_tier_registry_has_required_tiers(): + data = json.loads(ARTIFACT.read_text(encoding="utf-8")) + tiers = {row["allowed_use_tier"] for row in data["sources"]} + assert "permissive_adapter_or_formula_observation" in tiers + assert "manual_oracle_candidate_queue" in tiers + assert "case_reference_for_user_explanation" in tiers + assert all(row["can_be_oracle_truth"] is False for row in data["sources"]) + + +def test_evidence_index_registers_external_source_use_tier_registry(): + packets = {row["packet_id"]: row for row in json.loads(INDEX.read_text(encoding="utf-8"))["packets"]} + packet = packets["external_source_use_tier_registry_2026_07_20"] + assert packet["claim_status"] == "ready_contract" + assert packet["consumer_policy"] == "research_to_commercial_contract_only" diff --git a/tests/test_high_rigor_closure_snapshot.py b/tests/test_high_rigor_closure_snapshot.py new file mode 100644 index 00000000..b3b584a1 --- /dev/null +++ b/tests/test_high_rigor_closure_snapshot.py @@ -0,0 +1,34 @@ +import json +import subprocess +from pathlib import Path + + +ROOT = Path(__file__).resolve().parents[1] +SNAPSHOT = ROOT / "references/oracle/high_rigor_closure_gate_snapshot_2026_07_20.json" +INDEX = ROOT / "references/oracle/evidence_packet_index_2026_07_19.json" + + +def test_high_rigor_closure_snapshot_generator_writes_blocked_snapshot(): + data = json.loads( + subprocess.check_output( + ["python3", "scripts/high_rigor_closure_snapshot.py", "--date", "2026-07-20"], + cwd=ROOT, + text=True, + ) + ) + assert data["scope"] == "high_rigor_closure_gate_snapshot" + assert data["created_at"] == "2026-07-20" + assert data["source_scope"] == "high_rigor_closure_gate" + assert data["overall_status"] == "blocked" + assert data["production_tuning_allowed"] is False + assert data["snapshot_hash"] + + +def test_high_rigor_closure_snapshot_artifact_and_index_are_present(): + data = json.loads(SNAPSHOT.read_text(encoding="utf-8")) + assert data["overall_status"] == "blocked" + gate_ids = {gate["gate_id"] for gate in data["gates"]} + assert {"external_numeric_oracle", "independent_negative_holdout", "kp_exact_cusp", "full_scoring_contracts"} <= gate_ids + + packets = {row["packet_id"]: row for row in json.loads(INDEX.read_text(encoding="utf-8"))["packets"]} + assert packets["high_rigor_closure_gate_snapshot_2026_07_20"]["claim_status"] == "blocked"