sync: import rectification and vedastro contract updates
This commit is contained in:
@@ -42,8 +42,12 @@
|
||||
"tests/test_cross_project_contract.py",
|
||||
"tests/test_cross_project_sync_status.py",
|
||||
"scripts/active_rectification_questions.py",
|
||||
"scripts/active_rectification_event_engine.py",
|
||||
"scripts/active_rectification_events.py",
|
||||
"scripts/birth_time_rectifier.py",
|
||||
"scripts/candidate_time_sensitivity_scan.py",
|
||||
"scripts/rectification_technique_contract.py",
|
||||
"scripts/rectification_three_engine_packet.py",
|
||||
"references/oracle/rectification_technique_usage_audit_2026_07_19.json",
|
||||
"references/oracle/rectification_missing_layer_integration_plan_2026_07_19.json",
|
||||
"tests/test_active_rectification_api.py",
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
{
|
||||
"boundary": "This probe validates only the divisional degree transformation. It does not establish complete D2/D4/D9/D10 sign, ayanamsa, node, timezone, or hosted-endpoint chart parity.",
|
||||
"chart_sign_contract": "blocked",
|
||||
"contract_status": "degree_mapping_verified",
|
||||
"input_total_degrees": 3.5,
|
||||
"privacy": {
|
||||
"api_key_persisted": false
|
||||
},
|
||||
"rows": {
|
||||
"D10": {
|
||||
"local_degree": 5.0,
|
||||
"matches_local": true,
|
||||
"official_degree": 5.0,
|
||||
"official_status": "Pass",
|
||||
"raw_hash": "c18c8f9033f6267d71326618350439669a298bf54df92250fe448450519ff9e0",
|
||||
"request_body_hash": "0d5e0c96f6afce151b23960ab1a932ad81b68bd1d3cac568cb84811744317798",
|
||||
"response_payload_hash": "355368858f2631e02e2a5dde2287a1909dae13deef6f9a4702baea32091f1807"
|
||||
},
|
||||
"D2": {
|
||||
"local_degree": 7.0,
|
||||
"matches_local": true,
|
||||
"official_degree": 7.0,
|
||||
"official_status": "Pass",
|
||||
"raw_hash": "265db56c75e04db854f8455c10dc87bf1b546e50bdaca078cd452382b3ddba8e",
|
||||
"request_body_hash": "3270b71182f85800fece09c4a0dd2119287a692bd99bb8c1946b2c172cefe33f",
|
||||
"response_payload_hash": "0132659fbfdc9e3f0ba0a07e8d2d9ce91ef2d1d8498b0ec92c236456c8df404f"
|
||||
},
|
||||
"D4": {
|
||||
"local_degree": 14.0,
|
||||
"matches_local": true,
|
||||
"official_degree": 14.0,
|
||||
"official_status": "Pass",
|
||||
"raw_hash": "ec3b79e9919862585115b48d69e0766debe7bc7e42bd8c5cd398af3b1d6ead19",
|
||||
"request_body_hash": "6e052dd18d79a9a974b78d052f431ae165778b1987db8d8a0ecd4d3cbfe3b6ff",
|
||||
"response_payload_hash": "e3d32cc6ce7be7882dbbb732e998ad443148d4edb1a7ca356d63a3d83c74197d"
|
||||
},
|
||||
"D9": {
|
||||
"local_degree": 1.5,
|
||||
"matches_local": true,
|
||||
"official_degree": 1.5,
|
||||
"official_status": "Pass",
|
||||
"raw_hash": "0f126a7e7e1995922a0a406e74c884e00ebcdc2e325d655c5ec8c18be7ec4358",
|
||||
"request_body_hash": "187825c5229aed9e695f3bb59eb5704a854c3d272bd83094c20e9da4575e4380",
|
||||
"response_payload_hash": "3e10867dac0b9a0f78c6d0c5a40e7436c3292ac334604bc015d3382bfea4d834"
|
||||
}
|
||||
},
|
||||
"scope": "vedastro_divisional_degree_contract_probe"
|
||||
}
|
||||
@@ -6,8 +6,8 @@
|
||||
},
|
||||
"capability_catalog": {
|
||||
"capability_count": 641,
|
||||
"catalog_hash": "b88d1067eb967b06de945a7773858ff1cc34f4145487216752df2857b4b3b927",
|
||||
"installed_package_version": "1.23.25",
|
||||
"catalog_hash": "bf10eb7ccd9e660a1d82d98a055119d6bab45f5a69dd6a6b96d1832418e513a8",
|
||||
"installed_package_version": "1.23.26",
|
||||
"module_name": "vedastro",
|
||||
"source": "vedastro_python_bridge",
|
||||
"status": "captured"
|
||||
@@ -17,7 +17,7 @@
|
||||
"field_statuses": {
|
||||
"VedAstro.D1.longitude": "blocked"
|
||||
},
|
||||
"generated_at": "2026-07-17T09:40:11.856902+00:00",
|
||||
"generated_at": "2026-07-21T12:09:41.148914+00:00",
|
||||
"method_contract": {
|
||||
"all_planet_data_matches_nirayana": false,
|
||||
"all_planet_longitude_matches_nirayana": false,
|
||||
@@ -27,25 +27,25 @@
|
||||
"all_planet_vs_nirayana": 0.0
|
||||
},
|
||||
"Mars": {
|
||||
"all_planet_data_vs_nirayana": -0.000277778,
|
||||
"all_planet_vs_nirayana": 0.0
|
||||
"all_planet_data_vs_nirayana": 0.467777778,
|
||||
"all_planet_vs_nirayana": 0.468055556
|
||||
},
|
||||
"Mercury": {
|
||||
"all_planet_data_vs_nirayana": -0.047777778,
|
||||
"all_planet_vs_nirayana": -0.0475
|
||||
"all_planet_data_vs_nirayana": -0.000277778,
|
||||
"all_planet_vs_nirayana": 0.0
|
||||
},
|
||||
"Moon": {
|
||||
"all_planet_data_vs_nirayana": -0.0,
|
||||
"all_planet_vs_nirayana": 0.0
|
||||
},
|
||||
"Saturn": {
|
||||
"all_planet_data_vs_nirayana": 0.004722222,
|
||||
"all_planet_vs_nirayana": 0.005
|
||||
},
|
||||
"Sun": {
|
||||
"all_planet_data_vs_nirayana": -0.000277778,
|
||||
"all_planet_vs_nirayana": 0.0
|
||||
},
|
||||
"Sun": {
|
||||
"all_planet_data_vs_nirayana": 0.670555556,
|
||||
"all_planet_vs_nirayana": 0.670833333
|
||||
},
|
||||
"Venus": {
|
||||
"all_planet_data_vs_nirayana": -0.000277778,
|
||||
"all_planet_vs_nirayana": 0.0
|
||||
@@ -82,11 +82,11 @@
|
||||
},
|
||||
"PlanetNirayanaLongitude": {
|
||||
"Jupiter": 87.27222222222223,
|
||||
"Mars": 5.854722222222223,
|
||||
"Mercury": 291.17333333333335,
|
||||
"Mars": 5.386666666666667,
|
||||
"Mercury": 291.12583333333333,
|
||||
"Moon": 344.5113888888889,
|
||||
"Saturn": 207.92194444444445,
|
||||
"Sun": 312.51222222222225,
|
||||
"Saturn": 207.92694444444444,
|
||||
"Sun": 311.8413888888889,
|
||||
"Venus": 267.93611111111113
|
||||
}
|
||||
},
|
||||
@@ -460,7 +460,7 @@
|
||||
"request_body_hash": "d45c4facf45e6f530e114d7b5bd12565ed98ce7c5ffe612c9f5d6ad54b0d4c1e",
|
||||
"request_url_host": "api.vedastro.org",
|
||||
"response_headers": {
|
||||
"date": "Fri, 17 Jul 2026 09:39:59 GMT",
|
||||
"date": "Tue, 21 Jul 2026 12:09:27 GMT",
|
||||
"server": "Kestrel"
|
||||
},
|
||||
"response_input_hash": "c0b951e8e79edf0dfc7f21f0eea8d9233baa2e7b155c0e8dd0a078c26081d83c",
|
||||
@@ -825,7 +825,7 @@
|
||||
"request_body_hash": "f65f499ed5198e9a908f8162c7416ee1900cce776985f3431fbe585d465bb966",
|
||||
"request_url_host": "api.vedastro.org",
|
||||
"response_headers": {
|
||||
"date": "Fri, 17 Jul 2026 09:39:55 GMT",
|
||||
"date": "Tue, 21 Jul 2026 12:09:24 GMT",
|
||||
"server": "Kestrel"
|
||||
},
|
||||
"response_input_hash": "6d0ccc01163f52882b4729126b6040173b861530facc71c3c5bb4fbee775b7f9",
|
||||
@@ -1184,7 +1184,7 @@
|
||||
"request_body_hash": "5d06bcab5ad35cc9bab8d6045c9cc94a5401355efde5fb2fcebec588ff37a82a",
|
||||
"request_url_host": "api.vedastro.org",
|
||||
"response_headers": {
|
||||
"date": "Fri, 17 Jul 2026 09:39:57 GMT",
|
||||
"date": "Tue, 21 Jul 2026 12:09:25 GMT",
|
||||
"server": "Kestrel"
|
||||
},
|
||||
"response_input_hash": "4521a381ebbf2462fd932e411bdf604872ac57f76389687af8f5ad47af16c733",
|
||||
@@ -1543,7 +1543,7 @@
|
||||
"request_body_hash": "ecb534474630f8b3c71299279668ac78bdcb0b41b856e692880f17094526a8f6",
|
||||
"request_url_host": "api.vedastro.org",
|
||||
"response_headers": {
|
||||
"date": "Fri, 17 Jul 2026 09:39:53 GMT",
|
||||
"date": "Tue, 21 Jul 2026 12:09:22 GMT",
|
||||
"server": "Kestrel"
|
||||
},
|
||||
"response_input_hash": "93089694d5e0a5ce4817f42d69ec654682bec1dab9ec623ff76323380467830d",
|
||||
@@ -1914,7 +1914,7 @@
|
||||
"request_body_hash": "a7c609c106c29384f57d221eef233095f98f868725f95810aaf834ab05dc3e4c",
|
||||
"request_url_host": "api.vedastro.org",
|
||||
"response_headers": {
|
||||
"date": "Fri, 17 Jul 2026 09:40:02 GMT",
|
||||
"date": "Tue, 21 Jul 2026 12:09:31 GMT",
|
||||
"server": "Kestrel"
|
||||
},
|
||||
"response_input_hash": "bfb4d685797ba0b90d2951c29843f10831bc085535ca6abcb6b9e0a86bc8fcbb",
|
||||
@@ -2274,7 +2274,7 @@
|
||||
"request_body_hash": "ca1c489fb000c6c0fce82847290ae225bac0080b5c068b16b5b96b57d36bccdb",
|
||||
"request_url_host": "api.vedastro.org",
|
||||
"response_headers": {
|
||||
"date": "Fri, 17 Jul 2026 09:39:51 GMT",
|
||||
"date": "Tue, 21 Jul 2026 12:09:21 GMT",
|
||||
"server": "Kestrel"
|
||||
},
|
||||
"response_input_hash": "cb72a68310596f5f4533b7562dd9b13e03e7b229257d1c231e7f4590bd9cc135",
|
||||
@@ -2650,7 +2650,7 @@
|
||||
"request_body_hash": "db1bf8a8aa52b1b9a30c8affd606cb6ac4a8c803244efb2910e3a17fe40e8d01",
|
||||
"request_url_host": "api.vedastro.org",
|
||||
"response_headers": {
|
||||
"date": "Fri, 17 Jul 2026 09:40:01 GMT",
|
||||
"date": "Tue, 21 Jul 2026 12:09:30 GMT",
|
||||
"server": "Kestrel"
|
||||
},
|
||||
"response_input_hash": "fb49f3bab33f8326366dc58078f631f561da0471f6775d2facdbe60afbb685b3",
|
||||
@@ -2698,7 +2698,7 @@
|
||||
"request_body_hash": "d45c4facf45e6f530e114d7b5bd12565ed98ce7c5ffe612c9f5d6ad54b0d4c1e",
|
||||
"request_url_host": "api.vedastro.org",
|
||||
"response_headers": {
|
||||
"date": "Fri, 17 Jul 2026 09:40:09 GMT",
|
||||
"date": "Tue, 21 Jul 2026 12:09:38 GMT",
|
||||
"server": "Kestrel"
|
||||
},
|
||||
"response_input_hash": "e61e2eda72b1dba9b72fce2d8237ea677b3fdb45ac591ec7f370f9e2d2d54647",
|
||||
@@ -2733,22 +2733,22 @@
|
||||
],
|
||||
"Type": "SingleCall"
|
||||
},
|
||||
"normalized_value": 5.854722222222223,
|
||||
"normalized_value": 5.386666666666667,
|
||||
"payload": {
|
||||
"PlanetNirayanaLongitude": {
|
||||
"DegreeMinuteSecond": "5° 51' 17",
|
||||
"TotalDegrees": "5.854722222222223"
|
||||
"DegreeMinuteSecond": "5° 23' 12",
|
||||
"TotalDegrees": "5.386666666666667"
|
||||
}
|
||||
},
|
||||
"raw_hash": "59f8be1c9e661688e5c5400363a4eb6a5f00947e8147a95a7ba18d4b01fb2b08",
|
||||
"raw_hash": "5c9e2922439e94e0df2fabfc0c6de87afe52756f3ba67846ce583ea1464e00a7",
|
||||
"request_body_hash": "f65f499ed5198e9a908f8162c7416ee1900cce776985f3431fbe585d465bb966",
|
||||
"request_url_host": "api.vedastro.org",
|
||||
"response_headers": {
|
||||
"date": "Fri, 17 Jul 2026 09:40:06 GMT",
|
||||
"date": "Tue, 21 Jul 2026 12:09:35 GMT",
|
||||
"server": "Kestrel"
|
||||
},
|
||||
"response_input_hash": "8af9e6b535c04fb7c9918ade07b7ad91348080a769cf39878951d543fc63cd1f",
|
||||
"response_payload_hash": "292052d508cb637199bc3b5ee80b002b8c7d5982f5830b6585b5c47e7aa66ead",
|
||||
"response_payload_hash": "ffe42426ce86977e771f7afe0e9655f9805e34cd012391b6b73568c1a456e0f9",
|
||||
"status": "Pass"
|
||||
},
|
||||
"Mercury": {
|
||||
@@ -2779,22 +2779,22 @@
|
||||
],
|
||||
"Type": "SingleCall"
|
||||
},
|
||||
"normalized_value": 291.17333333333335,
|
||||
"normalized_value": 291.12583333333333,
|
||||
"payload": {
|
||||
"PlanetNirayanaLongitude": {
|
||||
"DegreeMinuteSecond": "291° 10' 24",
|
||||
"TotalDegrees": "291.17333333333335"
|
||||
"DegreeMinuteSecond": "291° 7' 33",
|
||||
"TotalDegrees": "291.12583333333333"
|
||||
}
|
||||
},
|
||||
"raw_hash": "c9868d178e0142c417e77387e906ec8671297fa0cda260ef8a0bfd142d823a97",
|
||||
"raw_hash": "65629974eebe9e80f5ad0891f3a92089ccf51726dd006427153fb1d97b92a9fd",
|
||||
"request_body_hash": "5d06bcab5ad35cc9bab8d6045c9cc94a5401355efde5fb2fcebec588ff37a82a",
|
||||
"request_url_host": "api.vedastro.org",
|
||||
"response_headers": {
|
||||
"date": "Fri, 17 Jul 2026 09:40:07 GMT",
|
||||
"date": "Tue, 21 Jul 2026 12:09:36 GMT",
|
||||
"server": "Kestrel"
|
||||
},
|
||||
"response_input_hash": "c0ef28b19014505b62ba3078efd5491940aea6a0a0e6a40d3c36d5da5a6652ff",
|
||||
"response_payload_hash": "90f55fdf61c751832b22d8d45a99cfb987f0591e1ce75907fd8a2ee78b768476",
|
||||
"response_payload_hash": "985edf2ca075cc9bee89e989d435ca5b5e90965156bfc22afc70638079bd5169",
|
||||
"status": "Pass"
|
||||
},
|
||||
"Moon": {
|
||||
@@ -2836,7 +2836,7 @@
|
||||
"request_body_hash": "ecb534474630f8b3c71299279668ac78bdcb0b41b856e692880f17094526a8f6",
|
||||
"request_url_host": "api.vedastro.org",
|
||||
"response_headers": {
|
||||
"date": "Fri, 17 Jul 2026 09:40:05 GMT",
|
||||
"date": "Tue, 21 Jul 2026 12:09:34 GMT",
|
||||
"server": "Kestrel"
|
||||
},
|
||||
"response_input_hash": "e4df625ac24adb3bbc5d5eccdae52d7b2baabcf7243af20c06e7e6e58a036015",
|
||||
@@ -2871,22 +2871,22 @@
|
||||
],
|
||||
"Type": "SingleCall"
|
||||
},
|
||||
"normalized_value": 207.92194444444445,
|
||||
"normalized_value": 207.92694444444444,
|
||||
"payload": {
|
||||
"PlanetNirayanaLongitude": {
|
||||
"DegreeMinuteSecond": "207° 55' 19",
|
||||
"TotalDegrees": "207.92194444444445"
|
||||
"DegreeMinuteSecond": "207° 55' 37",
|
||||
"TotalDegrees": "207.92694444444444"
|
||||
}
|
||||
},
|
||||
"raw_hash": "00a810322b43e0dca99e9e314da1f9c7f049063d647168f3efa9a8115932423f",
|
||||
"raw_hash": "281751b85dabb7f5e6abbf7b74f567a6e2fa6cfceb724a3a7de46297de03e88e",
|
||||
"request_body_hash": "a7c609c106c29384f57d221eef233095f98f868725f95810aaf834ab05dc3e4c",
|
||||
"request_url_host": "api.vedastro.org",
|
||||
"response_headers": {
|
||||
"date": "Fri, 17 Jul 2026 09:40:11 GMT",
|
||||
"date": "Tue, 21 Jul 2026 12:09:41 GMT",
|
||||
"server": "Kestrel"
|
||||
},
|
||||
"response_input_hash": "61e79349787305a7ad2700e59b0193047d234f7b4428ebd9518e1882b7d2bc98",
|
||||
"response_payload_hash": "f49e0a274793b50f20fb283184fefb06ee3d32a49bf8d25219b96a6b74e1aac7",
|
||||
"response_payload_hash": "3a20bc9fb70a0ae28b55301ff7c4aea6b06d1ab279bcd29271cb99f73545772f",
|
||||
"status": "Pass"
|
||||
},
|
||||
"Sun": {
|
||||
@@ -2917,22 +2917,22 @@
|
||||
],
|
||||
"Type": "SingleCall"
|
||||
},
|
||||
"normalized_value": 312.51222222222225,
|
||||
"normalized_value": 311.8413888888889,
|
||||
"payload": {
|
||||
"PlanetNirayanaLongitude": {
|
||||
"DegreeMinuteSecond": "312° 30' 44",
|
||||
"TotalDegrees": "312.51222222222225"
|
||||
"DegreeMinuteSecond": "311° 50' 29",
|
||||
"TotalDegrees": "311.8413888888889"
|
||||
}
|
||||
},
|
||||
"raw_hash": "55573bed79d0af387142867e45f8a430e6d25e87496fa411eb44ebf1cd72a24c",
|
||||
"raw_hash": "efc6004f4d98a75bf96ec8576c0d923174ba2c794af7f097ff78eee9d29cfaa2",
|
||||
"request_body_hash": "ca1c489fb000c6c0fce82847290ae225bac0080b5c068b16b5b96b57d36bccdb",
|
||||
"request_url_host": "api.vedastro.org",
|
||||
"response_headers": {
|
||||
"date": "Fri, 17 Jul 2026 09:40:03 GMT",
|
||||
"date": "Tue, 21 Jul 2026 12:09:32 GMT",
|
||||
"server": "Kestrel"
|
||||
},
|
||||
"response_input_hash": "bd722e1cb9e24693ba6c8671c7a723999db97f978413ad2c8921d66e8323f7d8",
|
||||
"response_payload_hash": "21857d79a7fa6fab10ab3b2698779f605d379d372ad18b22766a8a491dfc70ca",
|
||||
"response_payload_hash": "e9f4f8ae0f5c9892ecfa7bb286ab7907634e537c7984a5511f9a234c49c2f729",
|
||||
"status": "Pass"
|
||||
},
|
||||
"Venus": {
|
||||
@@ -2974,7 +2974,7 @@
|
||||
"request_body_hash": "db1bf8a8aa52b1b9a30c8affd606cb6ac4a8c803244efb2910e3a17fe40e8d01",
|
||||
"request_url_host": "api.vedastro.org",
|
||||
"response_headers": {
|
||||
"date": "Fri, 17 Jul 2026 09:40:10 GMT",
|
||||
"date": "Tue, 21 Jul 2026 12:09:40 GMT",
|
||||
"server": "Kestrel"
|
||||
},
|
||||
"response_input_hash": "290d41983b8413973c02ebfc840f77597a249e167fb8b2bfa85d02da9dd677bb",
|
||||
@@ -3022,7 +3022,7 @@
|
||||
"request_body_hash": "638d6d846cae88f0137456c4dab1cd619992a04e43cab576be290c0d65fa275f",
|
||||
"request_url_host": "api.vedastro.org",
|
||||
"response_headers": {
|
||||
"date": "Fri, 17 Jul 2026 09:39:45 GMT",
|
||||
"date": "Tue, 21 Jul 2026 12:09:13 GMT",
|
||||
"server": "Kestrel"
|
||||
},
|
||||
"response_input_hash": "1e529077a4b6ea7cafb4e5ac9ec67577dbe0e1d87e20c509a9adc4eb50dcf7f1",
|
||||
@@ -3067,7 +3067,7 @@
|
||||
"request_body_hash": "638d6d846cae88f0137456c4dab1cd619992a04e43cab576be290c0d65fa275f",
|
||||
"request_url_host": "api.vedastro.org",
|
||||
"response_headers": {
|
||||
"date": "Fri, 17 Jul 2026 09:39:46 GMT",
|
||||
"date": "Tue, 21 Jul 2026 12:09:14 GMT",
|
||||
"server": "Kestrel"
|
||||
},
|
||||
"response_input_hash": "1e529077a4b6ea7cafb4e5ac9ec67577dbe0e1d87e20c509a9adc4eb50dcf7f1",
|
||||
@@ -3112,7 +3112,7 @@
|
||||
"request_body_hash": "638d6d846cae88f0137456c4dab1cd619992a04e43cab576be290c0d65fa275f",
|
||||
"request_url_host": "api.vedastro.org",
|
||||
"response_headers": {
|
||||
"date": "Fri, 17 Jul 2026 09:39:47 GMT",
|
||||
"date": "Tue, 21 Jul 2026 12:09:16 GMT",
|
||||
"server": "Kestrel"
|
||||
},
|
||||
"response_input_hash": "1e529077a4b6ea7cafb4e5ac9ec67577dbe0e1d87e20c509a9adc4eb50dcf7f1",
|
||||
@@ -3144,26 +3144,26 @@
|
||||
},
|
||||
"interpreted_utc": "1955-02-24T11:15:00+00:00",
|
||||
"normalized": {
|
||||
"Jupiter": 87.27222222222223,
|
||||
"Mars": 5.854722222222223,
|
||||
"Mercury": 291.12583333333333,
|
||||
"Moon": 344.5113888888889,
|
||||
"Saturn": 207.92694444444444,
|
||||
"Sun": 312.51222222222225,
|
||||
"Venus": 267.93611111111113
|
||||
"Jupiter": 87.31472222222222,
|
||||
"Mars": 5.386666666666667,
|
||||
"Mercury": 291.17333333333335,
|
||||
"Moon": 335.0911111111111,
|
||||
"Saturn": 207.92194444444445,
|
||||
"Sun": 311.8413888888889,
|
||||
"Venus": 267.1788888888889
|
||||
},
|
||||
"payload": {
|
||||
"AllPlanetLongitude": "Sun - 312.51222222222225, Moon - 344.5113888888889, Mars - 5.854722222222223, Mercury - 291.12583333333333, Jupiter - 87.27222222222223, Venus - 267.93611111111113, Saturn - 207.92694444444444, Ketu - 69.2688888888889, Rahu - 249.26916666666668"
|
||||
"AllPlanetLongitude": "Sun - 311.8413888888889, Moon - 335.0911111111111, Mars - 5.386666666666667, Mercury - 291.17333333333335, Jupiter - 87.31472222222222, Venus - 267.1788888888889, Saturn - 207.92194444444445, Ketu - 69.30444444444444, Rahu - 249.30444444444444"
|
||||
},
|
||||
"raw_hash": "d87b7025392efd7411ae56db4e46c199deba565a68bebbab0a9b318727113291",
|
||||
"raw_hash": "ef8dfad6e8da61e6a3409f5058787d7d8bc5f43592bf9a05e9db1cb0b158f031",
|
||||
"request_body_hash": "b4f6d47f9a2223d7ef81457c8e3e6ba1abcf9238900f8472baf5f31eb359068e",
|
||||
"request_url_host": "api.vedastro.org",
|
||||
"response_headers": {
|
||||
"date": "Fri, 17 Jul 2026 09:39:50 GMT",
|
||||
"date": "Tue, 21 Jul 2026 12:09:20 GMT",
|
||||
"server": "Kestrel"
|
||||
},
|
||||
"response_input_hash": "09057eb68ad30572d165a46d258b5f93d8e39fd22814c50dc79864be6cd7c721",
|
||||
"response_payload_hash": "21bbebeffe2ec586d45286161abe89bc2dfdda7329133ce4d0c8156a082831da",
|
||||
"response_payload_hash": "03b1f1d8cdbcdd5a67a6abf8b8c2b48659848dd91c2b08dcb54f13bea0ed8e18",
|
||||
"status": "Pass"
|
||||
}
|
||||
],
|
||||
@@ -3206,7 +3206,7 @@
|
||||
"request_body_hash": "66a847008737bce56835e50795db663c435b0bcb9de05657e0680fe9f9a414a4",
|
||||
"request_url_host": "api.vedastro.org",
|
||||
"response_headers": {
|
||||
"date": "Fri, 17 Jul 2026 09:39:49 GMT",
|
||||
"date": "Tue, 21 Jul 2026 12:09:17 GMT",
|
||||
"server": "Kestrel"
|
||||
},
|
||||
"response_input_hash": "26ace2c3732b246f0d503110cd3d6e312bea411d52a63771bca192aeefea1769",
|
||||
@@ -3226,7 +3226,7 @@
|
||||
},
|
||||
"time_contract": {
|
||||
"equivalent_local_utc": true,
|
||||
"positive_offset_control_distinct": false,
|
||||
"positive_offset_control_distinct": true,
|
||||
"raw_hash_stable": true,
|
||||
"repeat_normalized_stable": true
|
||||
},
|
||||
|
||||
@@ -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": 122,
|
||||
"packet_count": 125,
|
||||
"blocked_or_partial_count": 52,
|
||||
"human_review_required_count": 3
|
||||
},
|
||||
@@ -985,6 +985,30 @@
|
||||
"claim_status": "open_queue",
|
||||
"consumer_policy": "research_observation_only",
|
||||
"claim_boundary": "Round4 triage confirms round3 was non-exhaustive: 858 unindexed WorkBuddy filename-signal files were detected and 20 high-value candidates were classified; no truth upgrade or bulk-copy permission."
|
||||
},
|
||||
{
|
||||
"packet_id": "workbuddy_round4_formalization_registry_2026_07_21",
|
||||
"path": "references/oracle/workbuddy_round4_formalization_registry_2026_07_21.json",
|
||||
"domain": "fragment_migration",
|
||||
"claim_status": "ready_contract",
|
||||
"consumer_policy": "research_observation_only",
|
||||
"claim_boundary": "Maps round4 WorkBuddy candidates into formal registry/test targets for event judgment, birth-time rectification, Muhurta and Tajika/Saham; no runtime import, truth upgrade or bulk-copy permission."
|
||||
},
|
||||
{
|
||||
"packet_id": "workbuddy_round4_usage_closure_queue_2026_07_21",
|
||||
"path": "references/oracle/workbuddy_round4_usage_closure_queue_2026_07_21.json",
|
||||
"domain": "fragment_migration",
|
||||
"claim_status": "open_queue",
|
||||
"consumer_policy": "research_observation_only",
|
||||
"claim_boundary": "Tracks all round4 migrate_to_registry/test candidates: 9 formalized, 2 pending oracle closure, 1 pending invocation audit; no truth upgrade."
|
||||
},
|
||||
{
|
||||
"packet_id": "vedastro_divisional_degree_contract_probe_2026_07_21",
|
||||
"path": "references/oracle/artifacts/vedastro_divisional_degree_contract_probe.json",
|
||||
"domain": "vedastro_contract_probe",
|
||||
"claim_status": "observation_only",
|
||||
"consumer_policy": "research_observation_only",
|
||||
"claim_boundary": "Validates only VedAstro DivisionalLongitude degree transformation for a fixed scalar input; does not establish hosted chart sign, ayanamsa, node, timezone, or full D2/D4/D9/D10 parity."
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -0,0 +1,93 @@
|
||||
{
|
||||
"scope": "workbuddy_round4_formalization_registry",
|
||||
"created_at": "2026-07-21",
|
||||
"claim_status": "ready_contract",
|
||||
"source_ledger": "references/oracle/workbuddy_round4_candidate_ledger_2026_07_21.json",
|
||||
"truth_matrix_allowed": false,
|
||||
"production_tuning_allowed": false,
|
||||
"boundary": "Converts prioritized WorkBuddy round4 candidates into formal research registry/test targets. This is not a runtime import, not a truth upgrade, and not permission to bulk-copy WorkBuddy code or prose.",
|
||||
"formalized_domains": [
|
||||
{
|
||||
"domain": "event_judgment",
|
||||
"formalization_type": "registry",
|
||||
"runtime_copy_allowed": false,
|
||||
"claim_upgrade": "none",
|
||||
"round4_candidate_ids": [
|
||||
"wb_round4_event_judgment_examples",
|
||||
"wb_round4_event_judgment_career",
|
||||
"wb_round4_event_judgment_wealth",
|
||||
"wb_round4_event_judgment_skeleton"
|
||||
],
|
||||
"formal_outputs": [
|
||||
"references/oracle/event_judgment_fragment_rule_family_registry_2026_07_21.json",
|
||||
"tests/test_fragment_migration_registries.py"
|
||||
],
|
||||
"next_required_closure": "Expand rule-family rows only where they map to existing chart evidence families; keep Vimshottari + Narayana and Functional Benefic/Malefic as mandatory gates."
|
||||
},
|
||||
{
|
||||
"domain": "birth_time_rectification",
|
||||
"formalization_type": "registry_and_test_contract",
|
||||
"runtime_copy_allowed": false,
|
||||
"claim_upgrade": "none",
|
||||
"round4_candidate_ids": [
|
||||
"wb_round4_birth_time_rectification_cases",
|
||||
"wb_round4_birth_time_rectification_advanced"
|
||||
],
|
||||
"formal_outputs": [
|
||||
"references/oracle/research_birth_time_journey_ui_contract_2026_07_21.json",
|
||||
"tests/test_fragment_migration_registries.py",
|
||||
"tests/test_active_rectification_api.py"
|
||||
],
|
||||
"next_required_closure": "Use WorkBuddy cases only as UI journey/claim-boundary fixtures unless public, independently labeled birth-time cases are attached."
|
||||
},
|
||||
{
|
||||
"domain": "muhurta",
|
||||
"formalization_type": "registry",
|
||||
"runtime_copy_allowed": false,
|
||||
"claim_upgrade": "none",
|
||||
"round4_candidate_ids": [
|
||||
"wb_round4_muhurta_complete_guide"
|
||||
],
|
||||
"formal_outputs": [
|
||||
"references/oracle/muhurta_full_system_gap_registry_2026_07_19.json",
|
||||
"references/oracle/muhurta_factor_scoring_readiness_2026_07_19.json",
|
||||
"references/oracle/muhurta_oss_factor_scoring_queue_2026_07_19.json",
|
||||
"tests/test_muhurta_factor_scoring_readiness.py"
|
||||
],
|
||||
"next_required_closure": "Tarabala, Chandrabala, Rahu Kalam and Abhijit may remain observation factors; do not emit择日 verdict until numeric worked examples and weighting policy are closed."
|
||||
},
|
||||
{
|
||||
"domain": "tajika_saham",
|
||||
"formalization_type": "registry_and_test_contract",
|
||||
"runtime_copy_allowed": false,
|
||||
"claim_upgrade": "none",
|
||||
"round4_candidate_ids": [
|
||||
"wb_round4_sahams_execution_guide",
|
||||
"wb_round4_tajika_yoga_complete_guide",
|
||||
"wb_round4_saham_rules",
|
||||
"wb_round4_tajika_annual_oracle_cases",
|
||||
"wb_round4_tajika_steve_jobs_1984_first_packet"
|
||||
],
|
||||
"formal_outputs": [
|
||||
"references/oracle/prashna_tajika_saham_gulika_sphuta_oracle_packet_2026_07_19.json",
|
||||
"references/saham_rules.json",
|
||||
"references/oracle/tajika_annual_oracle_cases.json",
|
||||
"tests/test_tajika.py",
|
||||
"tests/test_tajika_annual_closure_status.py"
|
||||
],
|
||||
"next_required_closure": "Saham formula schema can be tested; annual/Tajika truth remains partial or blocked until public numeric worked examples match local calculation field by field."
|
||||
}
|
||||
],
|
||||
"excluded_round4_candidates": [
|
||||
{
|
||||
"candidate_id": "wb_round4_user_1993_shadbala_pending_packet",
|
||||
"decision": "forbidden_private_or_obsolete",
|
||||
"reason": "Private/person-specific pending packet."
|
||||
},
|
||||
{
|
||||
"candidate_id": "wb_round4_handan_shadbala_pending_packet",
|
||||
"decision": "forbidden_private_or_obsolete",
|
||||
"reason": "Private/source-insufficient pending packet."
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,105 @@
|
||||
{
|
||||
"scope": "workbuddy_round4_usage_closure_queue",
|
||||
"created_at": "2026-07-21",
|
||||
"claim_status": "open_queue",
|
||||
"source_ledger": "references/oracle/workbuddy_round4_candidate_ledger_2026_07_21.json",
|
||||
"formalization_registry": "references/oracle/workbuddy_round4_formalization_registry_2026_07_21.json",
|
||||
"truth_matrix_allowed": false,
|
||||
"production_tuning_allowed": false,
|
||||
"boundary": "Tracks whether every WorkBuddy round4 migrate_to_registry/test candidate has been converted into a formal registry/test, or remains explicitly deferred. No row upgrades oracle truth.",
|
||||
"summary": {
|
||||
"round4_migrate_candidate_count": 12,
|
||||
"formalized_count": 9,
|
||||
"deferred_pending_oracle_count": 2,
|
||||
"deferred_pending_invocation_audit_count": 1
|
||||
},
|
||||
"candidate_status": [
|
||||
{
|
||||
"candidate_id": "wb_round4_event_judgment_examples",
|
||||
"domain": "event_judgment",
|
||||
"usage_status": "formalized",
|
||||
"claim_upgrade": "none",
|
||||
"formal_output": "references/oracle/event_judgment_fragment_rule_family_registry_2026_07_21.json"
|
||||
},
|
||||
{
|
||||
"candidate_id": "wb_round4_birth_time_rectification_cases",
|
||||
"domain": "birth_time_rectification",
|
||||
"usage_status": "formalized",
|
||||
"claim_upgrade": "none",
|
||||
"formal_output": "references/oracle/workbuddy_round4_formalization_registry_2026_07_21.json"
|
||||
},
|
||||
{
|
||||
"candidate_id": "wb_round4_birth_time_rectification_advanced",
|
||||
"domain": "birth_time_rectification",
|
||||
"usage_status": "formalized",
|
||||
"claim_upgrade": "none",
|
||||
"formal_output": "references/oracle/workbuddy_round4_formalization_registry_2026_07_21.json"
|
||||
},
|
||||
{
|
||||
"candidate_id": "wb_round4_event_judgment_career",
|
||||
"domain": "event_judgment",
|
||||
"usage_status": "formalized",
|
||||
"claim_upgrade": "none",
|
||||
"formal_output": "references/oracle/event_judgment_fragment_rule_family_registry_2026_07_21.json"
|
||||
},
|
||||
{
|
||||
"candidate_id": "wb_round4_event_judgment_wealth",
|
||||
"domain": "event_judgment",
|
||||
"usage_status": "formalized",
|
||||
"claim_upgrade": "none",
|
||||
"formal_output": "references/oracle/event_judgment_fragment_rule_family_registry_2026_07_21.json"
|
||||
},
|
||||
{
|
||||
"candidate_id": "wb_round4_event_judgment_skeleton",
|
||||
"domain": "event_judgment",
|
||||
"usage_status": "formalized",
|
||||
"claim_upgrade": "none",
|
||||
"formal_output": "references/oracle/event_judgment_fragment_rule_family_registry_2026_07_21.json"
|
||||
},
|
||||
{
|
||||
"candidate_id": "wb_round4_kp_practical_event_timing",
|
||||
"domain": "kp_precision_timing",
|
||||
"usage_status": "deferred_pending_invocation_audit",
|
||||
"claim_upgrade": "none",
|
||||
"formal_output": "references/oracle/kp_precision_timing_gap_registry_2026_07_19.json",
|
||||
"next_action": "Attach exact KP cusp/star/sub/sub-sub API invocation and public worked-example oracle before using for event timing."
|
||||
},
|
||||
{
|
||||
"candidate_id": "wb_round4_muhurta_complete_guide",
|
||||
"domain": "muhurta",
|
||||
"usage_status": "formalized",
|
||||
"claim_upgrade": "none",
|
||||
"formal_output": "references/oracle/muhurta_factor_scoring_readiness_2026_07_19.json"
|
||||
},
|
||||
{
|
||||
"candidate_id": "wb_round4_tajika_yoga_complete_guide",
|
||||
"domain": "tajika_saham",
|
||||
"usage_status": "formalized",
|
||||
"claim_upgrade": "none",
|
||||
"formal_output": "references/oracle/prashna_tajika_saham_gulika_sphuta_oracle_packet_2026_07_19.json"
|
||||
},
|
||||
{
|
||||
"candidate_id": "wb_round4_saham_rules",
|
||||
"domain": "tajika_saham",
|
||||
"usage_status": "formalized",
|
||||
"claim_upgrade": "none",
|
||||
"formal_output": "references/saham_rules.json"
|
||||
},
|
||||
{
|
||||
"candidate_id": "wb_round4_pyjhora_steve_jobs_shadbala_stdout",
|
||||
"domain": "shadbala_oracle",
|
||||
"usage_status": "deferred_pending_oracle",
|
||||
"claim_upgrade": "none",
|
||||
"formal_output": "references/oracle/shadbala_component_closure_queue_v2_2026_07_19.json",
|
||||
"next_action": "Parse stdout into component-level same-unit rows only if source, settings, and hash match the existing Shadbala closure queue."
|
||||
},
|
||||
{
|
||||
"candidate_id": "wb_round4_tajika_steve_jobs_1984_first_packet",
|
||||
"domain": "tajika_oracle",
|
||||
"usage_status": "deferred_pending_oracle",
|
||||
"claim_upgrade": "none",
|
||||
"formal_output": "references/oracle/tajika_annual_oracle_cases.json",
|
||||
"next_action": "Verify provenance fields and numeric annual/Tajika values before upgrading from candidate packet to oracle packet."
|
||||
}
|
||||
]
|
||||
}
|
||||
+237
-670
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,78 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Capture official VedAstro divisional-degree evidence without overclaiming chart parity."""
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import json
|
||||
from pathlib import Path
|
||||
from typing import Any
|
||||
|
||||
from scripts.vedastro_contract_probe import _post
|
||||
from scripts import varga
|
||||
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
DIVISIONS = (2, 4, 9, 10)
|
||||
|
||||
|
||||
def probe(*, total_degrees: float, timeout: float) -> dict[str, Any]:
|
||||
rows: dict[str, dict[str, Any]] = {}
|
||||
all_match = True
|
||||
for division in DIVISIONS:
|
||||
official = _post(
|
||||
"DivisionalLongitude",
|
||||
{"totalDegrees": total_degrees, "divisionalNo": division},
|
||||
timeout,
|
||||
)
|
||||
payload = official.get("payload") or {}
|
||||
value = (payload.get("DivisionalLongitude") or {}).get("TotalDegrees")
|
||||
local = varga.calc_varga(total_degrees, division)["degree_in_sign"]
|
||||
try:
|
||||
official_degree = float(value)
|
||||
except (TypeError, ValueError):
|
||||
official_degree = None
|
||||
matches_local = official.get("status") == "Pass" and official_degree == local
|
||||
all_match = all_match and matches_local
|
||||
rows[f"D{division}"] = {
|
||||
"official_status": official.get("status"),
|
||||
"official_degree": official_degree,
|
||||
"local_degree": local,
|
||||
"matches_local": matches_local,
|
||||
"request_body_hash": official.get("request_body_hash"),
|
||||
"response_payload_hash": official.get("response_payload_hash"),
|
||||
"raw_hash": official.get("raw_hash"),
|
||||
}
|
||||
return {
|
||||
"scope": "vedastro_divisional_degree_contract_probe",
|
||||
"input_total_degrees": total_degrees,
|
||||
"contract_status": "degree_mapping_verified" if all_match else "blocked",
|
||||
"chart_sign_contract": "blocked",
|
||||
"boundary": (
|
||||
"This probe validates only the divisional degree transformation. "
|
||||
"It does not establish complete D2/D4/D9/D10 sign, ayanamsa, node, "
|
||||
"timezone, or hosted-endpoint chart parity."
|
||||
),
|
||||
"rows": rows,
|
||||
"privacy": {"api_key_persisted": False},
|
||||
}
|
||||
|
||||
|
||||
def main() -> int:
|
||||
parser = argparse.ArgumentParser(description=__doc__)
|
||||
parser.add_argument("--total-degrees", type=float, default=3.5)
|
||||
parser.add_argument("--timeout", type=float, default=20.0)
|
||||
parser.add_argument(
|
||||
"--output",
|
||||
type=Path,
|
||||
default=ROOT / "references" / "oracle" / "artifacts" / "vedastro_divisional_degree_contract_probe.json",
|
||||
)
|
||||
args = parser.parse_args()
|
||||
report = probe(total_degrees=args.total_degrees, timeout=args.timeout)
|
||||
args.output.parent.mkdir(parents=True, exist_ok=True)
|
||||
args.output.write_text(json.dumps(report, ensure_ascii=False, indent=2, sort_keys=True) + "\n", encoding="utf-8")
|
||||
print(json.dumps({"contract_status": report["contract_status"], "output": str(args.output)}, ensure_ascii=False))
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
raise SystemExit(main())
|
||||
@@ -78,7 +78,7 @@ def test_sade_sati_uses_real_saturn_transit_for_reference_date() -> None:
|
||||
assert result["provenance"]["reference_date"] == "2026-07-11"
|
||||
|
||||
|
||||
def test_jupiter_transit_is_available_from_the_native_oracle() -> None:
|
||||
def test_jupiter_transit_uses_the_canonical_transit_contract() -> None:
|
||||
result = calculation_service.compute_transit_longitude(
|
||||
planet="Jupiter",
|
||||
reference_date="2026-07-11",
|
||||
@@ -89,6 +89,7 @@ def test_jupiter_transit_is_available_from_the_native_oracle() -> None:
|
||||
assert result["planet"] == "Jupiter"
|
||||
assert 0 <= result["longitude"] < 360
|
||||
assert result["data_layer"] == "true_transit_positions"
|
||||
assert result["ayanamsa"] == "lahiri"
|
||||
|
||||
|
||||
def test_timezone_inference_fails_closed(monkeypatch: pytest.MonkeyPatch) -> None:
|
||||
|
||||
@@ -45,6 +45,12 @@ def test_sync_policy_encodes_research_first_commercial_mature_rule() -> None:
|
||||
"service_role_runtime",
|
||||
}
|
||||
assert "references/cross_project_contract/fixture_manifest.v1.json" in policy["shared_files"]
|
||||
assert {
|
||||
"scripts/active_rectification_event_engine.py",
|
||||
"scripts/active_rectification_events.py",
|
||||
"scripts/rectification_technique_contract.py",
|
||||
"scripts/rectification_three_engine_packet.py",
|
||||
} <= set(policy["shared_files"])
|
||||
|
||||
|
||||
def test_sync_status_passes_when_shared_files_match(tmp_path: Path) -> None:
|
||||
|
||||
@@ -1,51 +1,50 @@
|
||||
from scripts.rectification_three_engine_packet import build_packet, case_hash
|
||||
from __future__ import annotations
|
||||
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
CASE = {"year": 1990, "month": 1, "day": 1, "hour": 12, "minute": 0, "lat": 0.0, "lon": 0.0, "tz": 0.0}
|
||||
SCRIPTS = Path(__file__).resolve().parents[1] / "scripts"
|
||||
if str(SCRIPTS) not in sys.path:
|
||||
sys.path.insert(0, str(SCRIPTS))
|
||||
|
||||
|
||||
def test_packet_is_private_and_never_confirms(monkeypatch) -> None:
|
||||
monkeypatch.setattr("scripts.rectification_three_engine_packet._local_d1", lambda _: {"Sun": "Aries"})
|
||||
monkeypatch.setattr("scripts.rectification_three_engine_packet._pyjhora_d1", lambda _: {"Sun": "Aries"})
|
||||
monkeypatch.setattr("scripts.rectification_three_engine_packet._jyotishganit_d1", lambda _: {"Sun": "Aries"})
|
||||
packet = build_packet(CASE)
|
||||
assert packet["case_hash"] == case_hash(CASE)
|
||||
assert "year" not in str(packet)
|
||||
assert packet["can_confirm"] is False
|
||||
assert packet["vedastro"]["status"] == "requires_gateway_raw_archive"
|
||||
def test_packet_queues_a_privacy_safe_vedastro_receipt(monkeypatch) -> None:
|
||||
import rectification_three_engine_packet as packet
|
||||
|
||||
|
||||
def test_high_rigor_packet_queues_safe_vedastro_receipt_without_raw(monkeypatch) -> None:
|
||||
monkeypatch.setattr("scripts.rectification_three_engine_packet._local_d1", lambda _: {"Sun": "Aries"})
|
||||
monkeypatch.setattr("scripts.rectification_three_engine_packet._pyjhora_d1", lambda _: {"Sun": "Aries"})
|
||||
monkeypatch.setattr("scripts.rectification_three_engine_packet._jyotishganit_d1", lambda _: {"Sun": "Aries"})
|
||||
monkeypatch.setattr(packet, "_local_d1", lambda _case: {"Sun": "Aries"})
|
||||
monkeypatch.setattr(packet, "_pyjhora_d1", lambda _case: {"Sun": "Aries"})
|
||||
monkeypatch.setattr(packet, "_jyotishganit_d1", lambda _case: {"Sun": "Aries"})
|
||||
monkeypatch.setattr(
|
||||
"scripts.vedastro_gateway.enqueue_gateway_job",
|
||||
packet,
|
||||
"_enqueue_vedastro_gateway_job",
|
||||
lambda *_args, **_kwargs: {
|
||||
"job_id": "vgw_safe_receipt",
|
||||
"scope": "vedastro_gateway_job_receipt",
|
||||
"status": "queued",
|
||||
"poll_path": "/api/vedastro_gateway/jobs/vgw_safe_receipt",
|
||||
"request": CASE,
|
||||
"result": {"official_raw_response": {"private": "never expose"}},
|
||||
"job_id": "rectification-job",
|
||||
"poll_path": "/api/vedastro_gateway/jobs/rectification-job",
|
||||
"raw_response_archive": {
|
||||
"status": "pending",
|
||||
"official_raw_response_available": False,
|
||||
},
|
||||
"boundary": "VedAstro raw response remains server-side; this receipt never returns request data or raw evidence.",
|
||||
},
|
||||
)
|
||||
|
||||
packet = build_packet(CASE, enqueue_vedastro_gateway=True)
|
||||
|
||||
assert packet["vedastro"] == {
|
||||
"scope": "vedastro_gateway_job_receipt",
|
||||
"status": "queued",
|
||||
"job_id": "vgw_safe_receipt",
|
||||
"poll_path": "/api/vedastro_gateway/jobs/vgw_safe_receipt",
|
||||
"raw_response_archive": {
|
||||
"status": "pending",
|
||||
"official_raw_response_available": False,
|
||||
result = packet.build_packet(
|
||||
{
|
||||
"year": 1993,
|
||||
"month": 4,
|
||||
"day": 17,
|
||||
"hour": 14,
|
||||
"minute": 29,
|
||||
"lat": 36.683333,
|
||||
"lon": 114.35,
|
||||
"tz": 8,
|
||||
},
|
||||
"boundary": "VedAstro raw response remains server-side; this receipt never returns request data or raw evidence.",
|
||||
}
|
||||
assert "year" not in str(packet)
|
||||
assert "private" not in str(packet)
|
||||
enqueue_vedastro_gateway=True,
|
||||
)
|
||||
|
||||
assert result["vedastro"]["status"] == "queued"
|
||||
assert result["can_confirm"] is False
|
||||
assert "1993" not in str(result["vedastro"])
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from scripts import vedastro_divisional_contract_probe as probe
|
||||
|
||||
|
||||
def test_probe_marks_degree_mapping_only_when_official_values_match(monkeypatch) -> None:
|
||||
def fake_post(calculator, body, _timeout):
|
||||
division = body["divisionalNo"]
|
||||
return {
|
||||
"calculator": calculator,
|
||||
"status": "Pass",
|
||||
"payload": {
|
||||
"DivisionalLongitude": {"TotalDegrees": str(3.5 * division % 30)}
|
||||
},
|
||||
}
|
||||
|
||||
monkeypatch.setattr(probe, "_post", fake_post)
|
||||
result = probe.probe(total_degrees=3.5, timeout=1)
|
||||
|
||||
assert result["contract_status"] == "degree_mapping_verified"
|
||||
assert result["chart_sign_contract"] == "blocked"
|
||||
assert result["rows"]["D9"]["matches_local"] is True
|
||||
@@ -0,0 +1,38 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
import subprocess
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
SCRIPTS = ROOT / "scripts"
|
||||
if str(SCRIPTS) not in sys.path:
|
||||
sys.path.insert(0, str(SCRIPTS))
|
||||
|
||||
import varga # noqa: E402
|
||||
|
||||
|
||||
def test_vedastro_bridge_divisional_longitudes_match_local_degree_mapping() -> None:
|
||||
for division in (2, 4, 9, 10):
|
||||
completed = subprocess.run(
|
||||
[
|
||||
sys.executable,
|
||||
str(SCRIPTS / "vedastro_python_bridge.py"),
|
||||
"--method",
|
||||
"DivisionalLongitude",
|
||||
"--params-json",
|
||||
json.dumps({"args": [3.5, division]}),
|
||||
],
|
||||
cwd=ROOT,
|
||||
text=True,
|
||||
capture_output=True,
|
||||
check=False,
|
||||
)
|
||||
assert completed.returncode == 0, completed.stderr
|
||||
payload = json.loads(completed.stdout)
|
||||
assert payload["status"] == "ok"
|
||||
assert float(payload["result"]["TotalDegrees"]) == varga.calc_varga(
|
||||
3.5, division
|
||||
)["degree_in_sign"]
|
||||
@@ -0,0 +1,55 @@
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
REGISTRY = ROOT / "references/oracle/workbuddy_round4_formalization_registry_2026_07_21.json"
|
||||
INDEX = ROOT / "references/oracle/evidence_packet_index_2026_07_19.json"
|
||||
ROUND4 = ROOT / "references/oracle/workbuddy_round4_candidate_ledger_2026_07_21.json"
|
||||
|
||||
|
||||
def test_round4_formalization_promotes_four_domains_without_truth_upgrade():
|
||||
data = json.loads(REGISTRY.read_text(encoding="utf-8"))
|
||||
assert data["scope"] == "workbuddy_round4_formalization_registry"
|
||||
assert data["claim_status"] == "ready_contract"
|
||||
assert data["truth_matrix_allowed"] is False
|
||||
assert data["source_ledger"] == str(ROUND4.relative_to(ROOT))
|
||||
domains = {row["domain"]: row for row in data["formalized_domains"]}
|
||||
assert {
|
||||
"event_judgment",
|
||||
"birth_time_rectification",
|
||||
"muhurta",
|
||||
"tajika_saham",
|
||||
} <= set(domains)
|
||||
for domain in domains.values():
|
||||
assert domain["formalization_type"] in {"registry", "test_contract", "registry_and_test_contract"}
|
||||
assert domain["runtime_copy_allowed"] is False
|
||||
assert domain["claim_upgrade"] == "none"
|
||||
assert domain["round4_candidate_ids"]
|
||||
assert domain["formal_outputs"]
|
||||
|
||||
|
||||
def test_round4_formalization_links_specific_high_value_candidates():
|
||||
data = json.loads(REGISTRY.read_text(encoding="utf-8"))
|
||||
linked = {
|
||||
cid
|
||||
for domain in data["formalized_domains"]
|
||||
for cid in domain["round4_candidate_ids"]
|
||||
}
|
||||
assert "wb_round4_event_judgment_examples" in linked
|
||||
assert "wb_round4_birth_time_rectification_cases" in linked
|
||||
assert "wb_round4_muhurta_complete_guide" in linked
|
||||
assert "wb_round4_saham_rules" in linked
|
||||
round4 = json.loads(ROUND4.read_text(encoding="utf-8"))
|
||||
round4_ids = {entry["candidate_id"] for entry in round4["entries"]}
|
||||
assert linked <= round4_ids
|
||||
|
||||
|
||||
def test_round4_formalization_is_indexed():
|
||||
packets = {
|
||||
row["packet_id"]: row
|
||||
for row in json.loads(INDEX.read_text(encoding="utf-8"))["packets"]
|
||||
}
|
||||
packet = packets["workbuddy_round4_formalization_registry_2026_07_21"]
|
||||
assert packet["claim_status"] == "ready_contract"
|
||||
assert packet["consumer_policy"] == "research_observation_only"
|
||||
@@ -0,0 +1,59 @@
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
ROUND4 = ROOT / "references/oracle/workbuddy_round4_candidate_ledger_2026_07_21.json"
|
||||
FORMAL = ROOT / "references/oracle/workbuddy_round4_formalization_registry_2026_07_21.json"
|
||||
QUEUE = ROOT / "references/oracle/workbuddy_round4_usage_closure_queue_2026_07_21.json"
|
||||
INDEX = ROOT / "references/oracle/evidence_packet_index_2026_07_19.json"
|
||||
|
||||
|
||||
def test_every_round4_migrate_candidate_has_usage_status():
|
||||
round4 = json.loads(ROUND4.read_text(encoding="utf-8"))
|
||||
queue = json.loads(QUEUE.read_text(encoding="utf-8"))
|
||||
migrate_ids = {
|
||||
entry["candidate_id"]
|
||||
for entry in round4["entries"]
|
||||
if entry["decision"] in {"migrate_to_registry", "migrate_to_test"}
|
||||
}
|
||||
queued_ids = {row["candidate_id"] for row in queue["candidate_status"]}
|
||||
assert migrate_ids <= queued_ids
|
||||
|
||||
|
||||
def test_usage_queue_separates_used_from_deferred_without_truth_upgrade():
|
||||
queue = json.loads(QUEUE.read_text(encoding="utf-8"))
|
||||
assert queue["claim_status"] == "open_queue"
|
||||
assert queue["truth_matrix_allowed"] is False
|
||||
statuses = {row["usage_status"] for row in queue["candidate_status"]}
|
||||
assert {"formalized", "deferred_pending_oracle"} <= statuses
|
||||
for row in queue["candidate_status"]:
|
||||
assert row["usage_status"] in {
|
||||
"formalized",
|
||||
"deferred_pending_oracle",
|
||||
"deferred_pending_invocation_audit",
|
||||
}
|
||||
assert row["claim_upgrade"] == "none"
|
||||
|
||||
|
||||
def test_formalized_ids_are_consistent_with_formalization_registry():
|
||||
formal = json.loads(FORMAL.read_text(encoding="utf-8"))
|
||||
formalized_ids = {
|
||||
cid
|
||||
for domain in formal["formalized_domains"]
|
||||
for cid in domain["round4_candidate_ids"]
|
||||
}
|
||||
queue = json.loads(QUEUE.read_text(encoding="utf-8"))
|
||||
for row in queue["candidate_status"]:
|
||||
if row["usage_status"] == "formalized":
|
||||
assert row["candidate_id"] in formalized_ids
|
||||
|
||||
|
||||
def test_usage_queue_is_indexed():
|
||||
packets = {
|
||||
row["packet_id"]: row
|
||||
for row in json.loads(INDEX.read_text(encoding="utf-8"))["packets"]
|
||||
}
|
||||
packet = packets["workbuddy_round4_usage_closure_queue_2026_07_21"]
|
||||
assert packet["claim_status"] == "open_queue"
|
||||
assert packet["consumer_policy"] == "research_observation_only"
|
||||
Reference in New Issue
Block a user