xoonya 3.1.17 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (240) hide show
  1. package/README.md +97 -74
  2. package/RELEASE_NOTES.md +7 -1
  3. package/START_HERE.md +38 -134
  4. package/bin/xoonya-first-run.js +22 -10
  5. package/bin/xoonya.js +61 -29
  6. package/lib/native_verify.js +1918 -0
  7. package/package.json +19 -42
  8. package/scripts/verify_release_candidate.js +243 -116
  9. package/scripts/verify_vectors.js +351 -104
  10. package/verify.js +95 -0
  11. package/.env.example +0 -10
  12. package/CARRIED_HANDOFF_DEMO.md +0 -60
  13. package/COMPATIBILITY_NOTE.md +0 -27
  14. package/CROSS_RUNTIME_POSTURE.md +0 -77
  15. package/EXAMPLE_PATHS.md +0 -53
  16. package/FINAL_CONTRACT.md +0 -445
  17. package/PARTNER_READY_PATH.md +0 -67
  18. package/PUBLIC_DEMO_SCRIPT.md +0 -79
  19. package/SERVICE_CONTRACT.md +0 -207
  20. package/TERMINOLOGY.md +0 -55
  21. package/WHY_XYTARA_XOONYA.md +0 -43
  22. package/XNYA_CONFORMANCE_MARK.md +0 -78
  23. package/XNYA_REFERENCE_IMPLEMENTATIONS.md +0 -157
  24. package/XOONYA_DEFAULT_PATH_MODEL.md +0 -63
  25. package/XOONYA_FOLLOWTHROUGH_TRUTH_MODEL.md +0 -63
  26. package/XOONYA_NATIVE_ATOM_SPEC.md +0 -184
  27. package/XOONYA_NATIVE_PROOF_FORMAT.md +0 -570
  28. package/XOONYA_NATIVE_STANDARD_GOVERNANCE.md +0 -119
  29. package/XOONYA_PROOF_TRUTH_MODEL.md +0 -58
  30. package/bin/xoonya-release.js +0 -1367
  31. package/bin/xoonya-review.js +0 -70
  32. package/examples/integration_boundary_walkthrough.js +0 -37
  33. package/examples/package_quickstart.js +0 -1007
  34. package/examples/partner_proof_walkthrough.js +0 -68
  35. package/examples/proof_review_walkthrough.js +0 -66
  36. package/examples/review_carried_handoff.js +0 -72
  37. package/index.js +0 -31
  38. package/integrations/PROOF_INTEGRATION_PROCESS.md +0 -45
  39. package/integrations/examples/example-third-party-verifier-registration.record.json +0 -22
  40. package/integrations/registration-record.schema.json +0 -99
  41. package/integrations/registry-snapshot.schema.json +0 -36
  42. package/integrations/registry.js +0 -636
  43. package/integrations/views.js +0 -36
  44. package/lib/adapter_certification_contract.js +0 -90
  45. package/lib/announcement_pack.js +0 -61
  46. package/lib/artifact_distribution_lane_contract.js +0 -54
  47. package/lib/asyncapi_contract.js +0 -135
  48. package/lib/auth_interop_contract.js +0 -69
  49. package/lib/authority_binding_lifecycle_contract.js +0 -182
  50. package/lib/bridge_intelligence.js +0 -102
  51. package/lib/cloudevents_contract.js +0 -79
  52. package/lib/crypto_agility_matrix.js +0 -131
  53. package/lib/default_path_contract.js +0 -380
  54. package/lib/ecosystem_entry.js +0 -64
  55. package/lib/erc8004_proof_lane_contract.js +0 -64
  56. package/lib/event_system_lane_contract.js +0 -76
  57. package/lib/external_proof_import_lane_contract.js +0 -87
  58. package/lib/feature_control_lane_contract.js +0 -54
  59. package/lib/followthrough_truth_contract.js +0 -214
  60. package/lib/framework_lane_contract.js +0 -76
  61. package/lib/governance_disputes_summary.js +0 -36
  62. package/lib/governance_intelligence.js +0 -108
  63. package/lib/identity_interop_contract.js +0 -83
  64. package/lib/integration_matrix_contract.js +0 -81
  65. package/lib/launch_narrative.js +0 -53
  66. package/lib/machine_identity_registry_contract.js +0 -199
  67. package/lib/major_rails_proof_lane_contract.js +0 -87
  68. package/lib/offline_verifiability_recovery_contract.js +0 -155
  69. package/lib/openapi_contract.js +0 -227
  70. package/lib/operational_receipt_contract.js +0 -165
  71. package/lib/outreach_proof.js +0 -71
  72. package/lib/phase_10_closeout_pack.js +0 -45
  73. package/lib/phase_10_completion_pack.js +0 -76
  74. package/lib/phase_10_decision_record_pack.js +0 -54
  75. package/lib/phase_10_decision_resolution_pack.js +0 -53
  76. package/lib/phase_10_demand_signal_adapters_proof_pack.js +0 -74
  77. package/lib/phase_10_ecosystem_backlog_triage_proof_pack.js +0 -74
  78. package/lib/phase_10_freeze_baseline_pack.js +0 -67
  79. package/lib/phase_10_freeze_review_pack.js +0 -64
  80. package/lib/phase_10_gate_pack.js +0 -57
  81. package/lib/phase_10_long_tail_continuity_pack.js +0 -80
  82. package/lib/phase_10_long_tail_ecosystem_pack.js +0 -68
  83. package/lib/phase_10_niche_extension_registry_proof_pack.js +0 -74
  84. package/lib/phase_1_claude_mcp_pack.js +0 -60
  85. package/lib/phase_1_claude_mcp_proof_pack.js +0 -57
  86. package/lib/phase_1_ecosystem_pack.js +0 -51
  87. package/lib/phase_1_openai_codex_pack.js +0 -60
  88. package/lib/phase_1_openai_codex_proof_pack.js +0 -57
  89. package/lib/phase_2_base_proof_pack.js +0 -71
  90. package/lib/phase_2_base_usdc_proof_pack.js +0 -72
  91. package/lib/phase_2_closeout_pack.js +0 -65
  92. package/lib/phase_2_completion_pack.js +0 -113
  93. package/lib/phase_2_decision_record_pack.js +0 -66
  94. package/lib/phase_2_decision_resolution_pack.js +0 -69
  95. package/lib/phase_2_eth_proof_pack.js +0 -70
  96. package/lib/phase_2_evm_base_proof_pack.js +0 -73
  97. package/lib/phase_2_evm_proof_pack.js +0 -71
  98. package/lib/phase_2_flip_preview_pack.js +0 -60
  99. package/lib/phase_2_freeze_review_pack.js +0 -99
  100. package/lib/phase_2_gate_pack.js +0 -77
  101. package/lib/phase_2_payment_rails_pack.js +0 -71
  102. package/lib/phase_2_usdc_proof_pack.js +0 -71
  103. package/lib/phase_3_brc_proof_pack.js +0 -81
  104. package/lib/phase_3_bsv_teranode_proof_pack.js +0 -81
  105. package/lib/phase_3_closeout_pack.js +0 -62
  106. package/lib/phase_3_completion_pack.js +0 -92
  107. package/lib/phase_3_decision_record_pack.js +0 -64
  108. package/lib/phase_3_decision_resolution_pack.js +0 -69
  109. package/lib/phase_3_freeze_baseline_pack.js +0 -67
  110. package/lib/phase_3_freeze_review_pack.js +0 -80
  111. package/lib/phase_3_gate_pack.js +0 -76
  112. package/lib/phase_3_metanet_proof_pack.js +0 -81
  113. package/lib/phase_3_native_bsv_pack.js +0 -89
  114. package/lib/phase_3_native_continuity_pack.js +0 -82
  115. package/lib/phase_4_attestation_proof_pack.js +0 -75
  116. package/lib/phase_4_closeout_pack.js +0 -45
  117. package/lib/phase_4_completion_pack.js +0 -82
  118. package/lib/phase_4_decision_record_pack.js +0 -54
  119. package/lib/phase_4_decision_resolution_pack.js +0 -45
  120. package/lib/phase_4_erc8004_proof_pack.js +0 -76
  121. package/lib/phase_4_freeze_baseline_pack.js +0 -67
  122. package/lib/phase_4_freeze_review_pack.js +0 -68
  123. package/lib/phase_4_gate_pack.js +0 -58
  124. package/lib/phase_4_identity_registry_proof_pack.js +0 -75
  125. package/lib/phase_4_identity_trust_pack.js +0 -73
  126. package/lib/phase_4_trust_continuity_pack.js +0 -86
  127. package/lib/phase_5_antelope_proof_pack.js +0 -76
  128. package/lib/phase_5_closeout_pack.js +0 -44
  129. package/lib/phase_5_completion_pack.js +0 -82
  130. package/lib/phase_5_decision_record_pack.js +0 -54
  131. package/lib/phase_5_decision_resolution_pack.js +0 -45
  132. package/lib/phase_5_freeze_baseline_pack.js +0 -67
  133. package/lib/phase_5_freeze_review_pack.js +0 -68
  134. package/lib/phase_5_gate_pack.js +0 -58
  135. package/lib/phase_5_major_rails_continuity_pack.js +0 -86
  136. package/lib/phase_5_major_rails_pack.js +0 -74
  137. package/lib/phase_5_proton_xpr_proof_pack.js +0 -76
  138. package/lib/phase_5_solana_proof_pack.js +0 -76
  139. package/lib/phase_6_autogen_proof_pack.js +0 -74
  140. package/lib/phase_6_closeout_pack.js +0 -46
  141. package/lib/phase_6_completion_pack.js +0 -77
  142. package/lib/phase_6_decision_record_pack.js +0 -54
  143. package/lib/phase_6_decision_resolution_pack.js +0 -53
  144. package/lib/phase_6_framework_continuity_pack.js +0 -81
  145. package/lib/phase_6_framework_runtime_pack.js +0 -68
  146. package/lib/phase_6_freeze_baseline_pack.js +0 -68
  147. package/lib/phase_6_freeze_review_pack.js +0 -65
  148. package/lib/phase_6_gate_pack.js +0 -59
  149. package/lib/phase_6_langchain_proof_pack.js +0 -74
  150. package/lib/phase_6_langgraph_proof_pack.js +0 -74
  151. package/lib/phase_6_semantic_kernel_proof_pack.js +0 -74
  152. package/lib/phase_7_closeout_pack.js +0 -45
  153. package/lib/phase_7_completion_pack.js +0 -85
  154. package/lib/phase_7_decision_record_pack.js +0 -53
  155. package/lib/phase_7_decision_resolution_pack.js +0 -53
  156. package/lib/phase_7_event_system_continuity_pack.js +0 -89
  157. package/lib/phase_7_event_system_pack.js +0 -76
  158. package/lib/phase_7_freeze_baseline_pack.js +0 -74
  159. package/lib/phase_7_freeze_review_pack.js +0 -65
  160. package/lib/phase_7_gate_pack.js +0 -58
  161. package/lib/phase_7_kafka_proof_pack.js +0 -76
  162. package/lib/phase_7_mqtt_proof_pack.js +0 -76
  163. package/lib/phase_7_nats_proof_pack.js +0 -76
  164. package/lib/phase_7_webhook_event_bus_proof_pack.js +0 -76
  165. package/lib/phase_8_closeout_pack.js +0 -46
  166. package/lib/phase_8_completion_pack.js +0 -82
  167. package/lib/phase_8_decision_record_pack.js +0 -54
  168. package/lib/phase_8_decision_resolution_pack.js +0 -53
  169. package/lib/phase_8_external_receipt_import_proof_pack.js +0 -74
  170. package/lib/phase_8_external_result_import_proof_pack.js +0 -74
  171. package/lib/phase_8_freeze_baseline_pack.js +0 -71
  172. package/lib/phase_8_freeze_review_pack.js +0 -64
  173. package/lib/phase_8_gate_pack.js +0 -58
  174. package/lib/phase_8_proof_bridge_continuity_pack.js +0 -86
  175. package/lib/phase_8_proof_bridges_pack.js +0 -72
  176. package/lib/phase_8_proof_bundle_normalization_proof_pack.js +0 -74
  177. package/lib/phase_9_closeout_pack.js +0 -46
  178. package/lib/phase_9_completion_pack.js +0 -82
  179. package/lib/phase_9_custody_refs_proof_pack.js +0 -74
  180. package/lib/phase_9_decision_record_pack.js +0 -54
  181. package/lib/phase_9_decision_resolution_pack.js +0 -53
  182. package/lib/phase_9_freeze_baseline_pack.js +0 -71
  183. package/lib/phase_9_freeze_review_pack.js +0 -64
  184. package/lib/phase_9_gate_pack.js +0 -58
  185. package/lib/phase_9_operator_accounting_bridges_proof_pack.js +0 -74
  186. package/lib/phase_9_treasury_connectivity_pack.js +0 -72
  187. package/lib/phase_9_treasury_continuity_pack.js +0 -86
  188. package/lib/phase_9_treasury_destinations_proof_pack.js +0 -74
  189. package/lib/phase_program_pack.js +0 -47
  190. package/lib/proof_bridge_lane_contract.js +0 -82
  191. package/lib/proof_truth_contract.js +0 -224
  192. package/lib/provenance_lane_contract.js +0 -54
  193. package/lib/provider_lane_contract.js +0 -67
  194. package/lib/public_surface_policy_contract.js +0 -111
  195. package/lib/publish_plan.js +0 -51
  196. package/lib/release_candidate.js +0 -50
  197. package/lib/release_center.js +0 -1037
  198. package/lib/release_history.js +0 -206
  199. package/lib/release_manifest.js +0 -114
  200. package/lib/release_pack.js +0 -391
  201. package/lib/result_package_trust_lane_contract.js +0 -74
  202. package/lib/review_intelligence.js +0 -100
  203. package/lib/role_freeze.js +0 -436
  204. package/lib/shared_signals_lane_contract.js +0 -54
  205. package/lib/signed_audit_provenance_contract.js +0 -93
  206. package/lib/telemetry_lane_contract.js +0 -54
  207. package/lib/treasury_proof_lane_contract.js +0 -83
  208. package/lib/trust_intelligence.js +0 -106
  209. package/lib/trust_portability_boundary_contract.js +0 -66
  210. package/lib/trust_portability_pack.js +0 -224
  211. package/lib/verification_service_pack.js +0 -149
  212. package/proof_sdk.js +0 -6692
  213. package/reference/python/README.md +0 -35
  214. package/reference/python/requirements-optional.txt +0 -1
  215. package/reference/python/verify_vectors.py +0 -223
  216. package/reference/python/xnya_reference.py +0 -810
  217. package/reference/rust/Cargo.toml +0 -11
  218. package/reference/rust/README.md +0 -28
  219. package/reference/rust/src/lib.rs +0 -87
  220. package/scripts/registry_cli.js +0 -157
  221. package/scripts/verify_all.js +0 -603
  222. package/scripts/verify_control_plane_contracts.js +0 -34
  223. package/scripts/verify_control_plane_routes.js +0 -70
  224. package/scripts/verify_examples.js +0 -19
  225. package/scripts/verify_external_proof_import_gate.js +0 -84
  226. package/scripts/verify_external_proof_signature.js +0 -142
  227. package/scripts/verify_forgery_resistance.js +0 -281
  228. package/scripts/verify_integrations.js +0 -170
  229. package/scripts/verify_native_hybrid_design_gate.js +0 -114
  230. package/scripts/verify_paid_execute.js +0 -133
  231. package/scripts/verify_paywall_flag.js +0 -86
  232. package/scripts/verify_reference_promotion_gate.js +0 -74
  233. package/scripts/verify_reference_python.js +0 -49
  234. package/scripts/verify_reference_python_crypto.js +0 -87
  235. package/scripts/verify_reference_rust_scaffold.js +0 -50
  236. package/scripts/verify_service.js +0 -3038
  237. package/scripts/verify_tooling.js +0 -1251
  238. package/scripts/verify_trust_portability.js +0 -56
  239. package/scripts/verify_verification_services.js +0 -56
  240. package/server.js +0 -4430
@@ -1,170 +0,0 @@
1
- "use strict";
2
-
3
- const assert = require("assert");
4
- const stagedPartnerVerifierRegistrationRecord = require("../integrations/examples/example-third-party-verifier-registration.record.json");
5
- const root = require("../index.js");
6
-
7
- async function main() {
8
- const integrations = root.listIntegrations();
9
- assert.ok(Array.isArray(integrations), "proof integrations list missing");
10
- assert.ok(integrations.length >= 4, "proof integration breadth missing");
11
- assert.ok(integrations.some((integration) => integration.integration_id === "builtin.identity.legacy_material"), "legacy identity integration missing");
12
- assert.ok(integrations.some((integration) => integration.integration_id === "builtin.verifier.registry_profile"), "registry verifier integration missing");
13
- assert.ok(integrations.some((integration) => integration.integration_id === stagedPartnerVerifierRegistrationRecord.integration_id), "staged proof verifier integration missing");
14
- assert.ok(integrations.some((integration) => integration.certification_state === "certified"), "proof integration certification metadata missing");
15
-
16
- const summary = root.summarizeIntegrations();
17
- assert.strictEqual(summary.ok, true, "proof integration summary ok mismatch");
18
- assert.ok(summary.integration_count >= integrations.length, "proof integration count mismatch");
19
- assert.strictEqual(summary.certified_integration_count >= 5, true, "proof integration certified count mismatch");
20
- assert.strictEqual(summary.production_default_count >= 5, true, "proof integration production-default count mismatch");
21
- assert.strictEqual(summary.staged_registration_count >= 1, true, "proof integration staged registration count mismatch");
22
-
23
- const detail = root.getIntegration("builtin.verifier.economic_profile");
24
- assert.ok(detail, "proof integration detail missing");
25
- assert.strictEqual(detail.integration_class, "verification_helper_adapter", "proof integration class mismatch");
26
- assert.strictEqual(detail.integration_maturity, "production_default", "proof integration maturity mismatch");
27
-
28
- const bundledFiltered = root.listIntegrations({
29
- source: "builtin",
30
- certification_state: "certified",
31
- integration_maturity: "production_default",
32
- bundled: "true"
33
- });
34
- assert.ok(bundledFiltered.length >= 5, "proof builtin integration filtering mismatch");
35
-
36
- const stagedFiltered = root.listIntegrations({
37
- source: "third_party_example",
38
- registration_state: "staging_registered",
39
- proof_scope: "profile_verification",
40
- bundled: "false"
41
- });
42
- assert.strictEqual(stagedFiltered.length, 1, "proof staged integration filtering mismatch");
43
- assert.strictEqual(stagedFiltered[0].registration.requires_explicit_selection, true, "proof staged integration explicit-selection mismatch");
44
-
45
- const validation = root.validateIntegrationRegistration({
46
- integration_id: stagedPartnerVerifierRegistrationRecord.integration_id,
47
- integration_class: stagedPartnerVerifierRegistrationRecord.integration_class,
48
- proof_scope: stagedPartnerVerifierRegistrationRecord.proof_scope
49
- }, stagedPartnerVerifierRegistrationRecord);
50
- assert.strictEqual(validation.ok, true, "proof integration registration validation failed");
51
-
52
- const imported = root.importRegisteredIntegration({
53
- integration_id: "partner.verifier.memory_canary",
54
- integration_class: "verification_helper_adapter",
55
- display_name: "Memory Canary Verifier",
56
- description: "Imported proof-side verifier used to validate normalization.",
57
- proof_scope: "profile_verification",
58
- capabilities: ["memory_canary.verify"],
59
- public_surfaces: ["sdk"],
60
- required_inputs: ["profile"],
61
- emitted_artifacts: [],
62
- verification_targets: ["memory_canary_profile"]
63
- }, {
64
- integration_id: "partner.verifier.memory_canary",
65
- integration_class: "verification_helper_adapter",
66
- proof_scope: "profile_verification",
67
- registration_state: "local_only",
68
- integration_maturity: "reference_example",
69
- certification_state: "reference_example",
70
- bundled: false,
71
- default_selection_enabled: false,
72
- requires_explicit_selection: true,
73
- registered_at: "2026-03-20T00:00:00Z"
74
- }, {
75
- source: "verification_import_test",
76
- certification_scope: ["contract_shape"],
77
- operational_readiness: "reference"
78
- });
79
- assert.strictEqual(imported.integration_id, "partner.verifier.memory_canary", "proof imported integration id mismatch");
80
- assert.strictEqual(imported.registration.registration_state, "local_only", "proof imported integration registration state mismatch");
81
-
82
- const snapshot = root.exportIntegrationRegistrySnapshot({
83
- registration_state: "staging_registered"
84
- });
85
- assert.strictEqual(snapshot.integration_count >= 1, true, "proof integration snapshot count mismatch");
86
- assert.strictEqual(root.validateIntegrationRegistrySnapshot(snapshot).ok, true, "proof integration snapshot validation mismatch");
87
-
88
- const builtinPromotion = root.summarizeIntegrationPromotionReadiness("builtin.verifier.registry_profile");
89
- assert.strictEqual(builtinPromotion.ok, true, "proof builtin promotion readiness mismatch");
90
- assert.strictEqual(builtinPromotion.promotion_readiness.default_eligible, true, "proof builtin default eligibility mismatch");
91
- assert.strictEqual(builtinPromotion.promotion_readiness.production_default_ready, true, "proof builtin production-default readiness mismatch");
92
-
93
- const stagedPromotion = root.summarizeIntegrationPromotionReadiness("partner.verifier.lattice_notary");
94
- assert.strictEqual(stagedPromotion.ok, true, "proof staged promotion readiness mismatch");
95
- assert.strictEqual(stagedPromotion.promotion_readiness.review_ready, true, "proof staged review-ready mismatch");
96
- assert.strictEqual(stagedPromotion.promotion_readiness.default_eligible, false, "proof staged default eligibility mismatch");
97
- assert.strictEqual(stagedPromotion.promotion_readiness.production_default_ready, false, "proof staged production-default readiness mismatch");
98
- assert.ok(stagedPromotion.promotion_readiness.blockers.includes("not_certified"), "proof staged certification blocker missing");
99
-
100
- const builtinPromotionWorkflow = root.summarizeIntegrationPromotionWorkflow("builtin.verifier.registry_profile");
101
- assert.strictEqual(builtinPromotionWorkflow.ok, true, "proof builtin promotion workflow mismatch");
102
- assert.strictEqual(
103
- builtinPromotionWorkflow.next_transition.action,
104
- "maintain_production_default",
105
- "proof builtin promotion workflow next-transition mismatch"
106
- );
107
- assert.strictEqual(
108
- builtinPromotionWorkflow.promotion_recommendation.recommendation,
109
- "eligible_for_production_default",
110
- "proof builtin promotion workflow recommendation mismatch"
111
- );
112
-
113
- const stagedPromotionWorkflow = root.summarizeIntegrationPromotionWorkflow("partner.verifier.lattice_notary");
114
- assert.strictEqual(stagedPromotionWorkflow.ok, true, "proof staged promotion workflow mismatch");
115
- assert.strictEqual(
116
- stagedPromotionWorkflow.next_transition.action,
117
- "complete_certification",
118
- "proof staged promotion workflow next-transition mismatch"
119
- );
120
- assert.strictEqual(
121
- stagedPromotionWorkflow.next_transition.later_actions.includes("promote_maturity"),
122
- true,
123
- "proof staged promotion workflow later-actions mismatch"
124
- );
125
- assert.strictEqual(
126
- stagedPromotionWorkflow.promotion_recommendation.recommendation,
127
- "keep_staged_until_requirements_clear",
128
- "proof staged promotion workflow recommendation mismatch"
129
- );
130
- assert.strictEqual(
131
- stagedPromotionWorkflow.certification_gaps.missing_requirements.includes("certification_state"),
132
- true,
133
- "proof staged promotion workflow certification gap mismatch"
134
- );
135
- assert.strictEqual(
136
- stagedPromotionWorkflow.blocker_categories.some((entry) => entry.category === "certification"),
137
- true,
138
- "proof staged promotion workflow blocker-category mismatch"
139
- );
140
-
141
- const promotionWorkflowList = root.summarizeIntegrationPromotionWorkflowList({
142
- source: "third_party_example",
143
- registration_state: "staging_registered",
144
- bundled: "false"
145
- });
146
- assert.strictEqual(promotionWorkflowList.ok, true, "proof promotion workflow list mismatch");
147
- assert.strictEqual(promotionWorkflowList.integration_count >= 1, true, "proof promotion workflow list breadth mismatch");
148
- assert.strictEqual(
149
- promotionWorkflowList.next_actions.some((entry) => entry.action === "complete_certification"),
150
- true,
151
- "proof promotion workflow list next-action mismatch"
152
- );
153
- assert.strictEqual(
154
- promotionWorkflowList.recommendations.some((entry) => entry.recommendation === "keep_staged_until_requirements_clear"),
155
- true,
156
- "proof promotion workflow list recommendation mismatch"
157
- );
158
- assert.strictEqual(
159
- promotionWorkflowList.blocker_categories.some((entry) => entry.category === "certification"),
160
- true,
161
- "proof promotion workflow list blocker-category mismatch"
162
- );
163
-
164
- console.log("xoonya verify:integrations passed");
165
- }
166
-
167
- main().catch((error) => {
168
- console.error(error);
169
- process.exit(1);
170
- });
@@ -1,114 +0,0 @@
1
- "use strict";
2
-
3
- const assert = require("assert");
4
- const crypto = require("crypto");
5
- const sdk = require("..");
6
-
7
- function runNativeHybridVerification() {
8
- const readiness = sdk.summarizexoonyaNativeHybridReadinessPack();
9
- assert.strictEqual(readiness.status, "implemented", "hybrid readiness must be implemented");
10
- assert.strictEqual(readiness.implemented_hybrid_suite_count >= 1, true, "hybrid readiness must expose implemented suites");
11
- assert.strictEqual(
12
- readiness.current_decision.includes("runtime_supported"),
13
- true,
14
- "hybrid readiness must describe runtime-supported suites"
15
- );
16
-
17
- const event = sdk.canonicalizeEvent({
18
- version: "canonical-event-bundle/v1",
19
- domain_id: "hybrid.live",
20
- sequence: "1",
21
- actor_id: "agent-hybrid",
22
- adapter_source: "verify_native_hybrid_design_gate",
23
- event_type: "native.hybrid.verify",
24
- event_hash: "89".repeat(32)
25
- });
26
-
27
- const classical = crypto.generateKeyPairSync("ed25519");
28
- const pq = crypto.generateKeyPairSync("ml-dsa-65");
29
- const receipt = sdk.emitReceipt(event, {
30
- agent_identity: "agent-hybrid-signing",
31
- algorithm: "xoonya-native-hybrid-v1",
32
- identity_ref: "did:xoonya:agent-hybrid-signing",
33
- classical_signature_suite: "ed25519",
34
- pq_signature_suite: "ml-dsa-65",
35
- classical_public_key_pem: classical.publicKey.export({ type: "spki", format: "pem" }),
36
- classical_private_key_pem: classical.privateKey.export({ type: "pkcs8", format: "pem" }),
37
- pq_public_key_pem: pq.publicKey.export({ type: "spki", format: "pem" }),
38
- pq_private_key_pem: pq.privateKey.export({ type: "pkcs8", format: "pem" })
39
- });
40
-
41
- const verification = sdk.verifyProofBundle(sdk.buildProofBundle({
42
- ceb: event,
43
- receipt
44
- }));
45
- assert.strictEqual(verification.valid, true, "hybrid method must verify");
46
- assert.strictEqual(
47
- verification.verification_state,
48
- "verified_native_hybrid_signature",
49
- "hybrid method verification state mismatch"
50
- );
51
-
52
- const downgradeEvent = sdk.canonicalizeEvent({
53
- version: "canonical-event-bundle/v1",
54
- domain_id: "hybrid.downgrade",
55
- sequence: "1",
56
- actor_id: "agent-hybrid",
57
- adapter_source: "verify_native_hybrid_design_gate",
58
- event_type: "native.hybrid.downgrade",
59
- event_hash: "90".repeat(32)
60
- });
61
- const detachedReceipt = sdk.emitReceipt(downgradeEvent, {
62
- agent_identity: "agent-hybrid-signing",
63
- algorithm: "detached-assertion-v1",
64
- signature: receipt.signature
65
- });
66
- const downgradeVerification = sdk.verifyProofBundle(sdk.buildProofBundle({
67
- ceb: downgradeEvent,
68
- receipt: detachedReceipt
69
- }));
70
- assert.strictEqual(downgradeVerification.valid, false, "hybrid-looking signature must not verify as detached");
71
- assert.strictEqual(
72
- downgradeVerification.reason,
73
- "signature_method_mismatch",
74
- "hybrid-looking external signature must fail as method mismatch"
75
- );
76
-
77
- return {
78
- ok: true,
79
- product: "xoonya",
80
- category: "xoonya-native-hybrid-verification",
81
- method: "xoonya-native-hybrid-v1",
82
- readiness_status: readiness.status,
83
- implemented_hybrid_suites: readiness.implemented_hybrid_suites,
84
- verification_state: verification.verification_state,
85
- downgrade_reject_reason: downgradeVerification.reason,
86
- boundary: "registered_runtime_supported_vector_covered_hybrid_suites_may_be_claimed"
87
- };
88
- }
89
-
90
- function main() {
91
- const json = process.argv.includes("--json");
92
- const summary = runNativeHybridVerification();
93
- if (json) {
94
- process.stdout.write(`${JSON.stringify(summary, null, 2)}\n`);
95
- return;
96
- }
97
- process.stdout.write(
98
- [
99
- "xoonya verify:native-hybrid-gate passed",
100
- `method: ${summary.method}`,
101
- `readiness: ${summary.readiness_status}`,
102
- `verification state: ${summary.verification_state}`,
103
- `downgrade reject: ${summary.downgrade_reject_reason}`
104
- ].join("\n") + "\n"
105
- );
106
- }
107
-
108
- if (require.main === module) {
109
- main();
110
- }
111
-
112
- module.exports = {
113
- runNativeHybridVerification
114
- };
@@ -1,133 +0,0 @@
1
- "use strict";
2
-
3
- // Verifies the bearer-authed /execute backend that exposes xoonya's real proof
4
- // verification pay-per-call through the xytara x402 spine (xytara settles, then calls
5
- // this as an external execution target). Covers: fail-closed when the bearer env is
6
- // unset (503), 401 on missing/wrong bearer, 422 on unknown tool / unprocessable input /
7
- // private-key material, 200 with the MCP-executor-compatible output contract for a real
8
- // EdDSA JWS verification, and that existing free routes are unchanged.
9
-
10
- const assert = require("assert");
11
- const crypto = require("crypto");
12
- const http = require("http");
13
-
14
- const b64url = (buf) => Buffer.from(buf).toString("base64url");
15
- function makeJws(alg, payloadObj, signFn) {
16
- const protectedB64 = b64url(Buffer.from(JSON.stringify({ alg }), "utf8"));
17
- const payloadB64 = b64url(Buffer.from(JSON.stringify(payloadObj), "utf8"));
18
- const signingInput = `${protectedB64}.${payloadB64}`;
19
- return `${signingInput}.${b64url(signFn(Buffer.from(signingInput, "utf8")))}`;
20
- }
21
-
22
- async function post(baseUrl, path, body, headers = {}) {
23
- const res = await fetch(`${baseUrl}${path}`, {
24
- method: "POST",
25
- headers: { "content-type": "application/json", ...headers },
26
- body: JSON.stringify(body)
27
- });
28
- let json = null;
29
- try { json = await res.json(); } catch (_) { json = null; }
30
- return { status: res.status, json };
31
- }
32
-
33
- function executeBody(toolName, args, taskRef) {
34
- return { command: "xoonya proof verify", task_ref: taskRef || "adapter.xoonya.invoke", tasks: [], body: { tool_name: toolName, arguments: args }, account_id: "acct_test", quote: {}, authorization_context: null };
35
- }
36
-
37
- async function main() {
38
- const prev = {
39
- bearer: process.env.XOONYA_EXECUTOR_BEARER_TOKEN,
40
- pkm: process.env.XOONYA_ACCEPT_PRIVATE_KEY_MATERIAL
41
- };
42
- delete process.env.XOONYA_EXECUTOR_BEARER_TOKEN;
43
-
44
- delete require.cache[require.resolve("../server.js")];
45
- const { createServer } = require("../server.js");
46
- const server = createServer();
47
- await new Promise((resolve) => server.listen(0, "127.0.0.1", resolve));
48
- const baseUrl = `http://127.0.0.1:${server.address().port}`;
49
- const TOKEN = "test-executor-bearer-token";
50
- const authHdr = { authorization: `Bearer ${TOKEN}` };
51
-
52
- // Build a real EdDSA JWS + its public key for a genuine verification.
53
- const ed = crypto.generateKeyPairSync("ed25519");
54
- const edPubPem = ed.publicKey.export({ type: "spki", format: "pem" });
55
- const edJws = makeJws("EdDSA", { sub: "agent-1" }, (d) => crypto.sign(null, d, ed.privateKey));
56
-
57
- try {
58
- // 1. Fail-closed: bearer env unset -> 503, never runs unauthenticated.
59
- let r = await post(baseUrl, "/execute", executeBody("proof.verify-signature", {}), authHdr);
60
- assert.strictEqual(r.status, 503, "unset bearer env must 503");
61
- assert.strictEqual(r.json.reason, "executor_not_configured", "503 reason");
62
-
63
- process.env.XOONYA_EXECUTOR_BEARER_TOKEN = TOKEN;
64
-
65
- // 2. Missing / wrong bearer -> 401.
66
- r = await post(baseUrl, "/execute", executeBody("proof.verify-signature", {}));
67
- assert.strictEqual(r.status, 401, "missing bearer must 401");
68
- r = await post(baseUrl, "/execute", executeBody("proof.verify-signature", {}), { authorization: "Bearer wrong" });
69
- assert.strictEqual(r.status, 401, "wrong bearer must 401");
70
-
71
- // 3. Unknown tool -> 422 (don't-charge class).
72
- r = await post(baseUrl, "/execute", executeBody("proof.nope", {}), authHdr);
73
- assert.strictEqual(r.status, 422, "unknown tool must 422");
74
- assert.strictEqual(r.json.reason, "unknown_tool", "unknown_tool reason");
75
- assert.ok(Array.isArray(r.json.enabled_tools) && r.json.enabled_tools.includes("proof.verify-signature"), "enabled_tools listed");
76
-
77
- // 4. Real EdDSA JWS verification -> 200 with the MCP-executor output contract.
78
- r = await post(baseUrl, "/execute", executeBody("proof.verify-signature", { signature_verification: { jws: edJws, trusted_public_key: edPubPem } }), authHdr);
79
- assert.strictEqual(r.status, 200, "valid verification must 200");
80
- assert.strictEqual(r.json.ok, true, "200 ok");
81
- assert.strictEqual(r.json.status, "completed", "status completed");
82
- assert.strictEqual(r.json.provider_status, "completed", "provider_status completed");
83
- assert.ok(r.json.output_payload && r.json.output_payload.signature_valid === true, "real signature verified valid in output_payload");
84
- assert.ok(r.json.result && r.json.result.output && r.json.result.output.signature_valid === true, "nested result.output present (xytara lifts this)");
85
- assert.strictEqual(r.json.output_payload.trust_anchored, false, "no expected_key_ref -> not trust-anchored (honest model preserved)");
86
-
87
- // 4b. A NEGATIVE verdict (wrong key) is NOT billed: money-safety rule charges only on
88
- // a positively-successful verification. 422, not charged, verdict surfaced.
89
- const ed2 = crypto.generateKeyPairSync("ed25519");
90
- r = await post(baseUrl, "/execute", executeBody("proof.verify-signature", { signature_verification: { jws: edJws, trusted_public_key: ed2.publicKey.export({ type: "spki", format: "pem" }) } }), authHdr);
91
- assert.strictEqual(r.status, 422, "a ran-but-invalid verdict must not be charged (422)");
92
- assert.ok(r.json.verdict && r.json.verdict.signature_valid === false, "negative verdict surfaced in 422 body");
93
-
94
- // 5. Unprocessable input (no signature_verification) -> 422, not charged.
95
- r = await post(baseUrl, "/execute", executeBody("proof.verify-signature", {}), authHdr);
96
- assert.strictEqual(r.status, 422, "no sig input must 422");
97
- assert.strictEqual(r.json.reason, "no_signature_verification_input", "unprocessable reason surfaced");
98
-
99
- // 5b. The other three tools report unprocessable/negative via {valid:false} with NO
100
- // `ok` field — empty args to each must be 422 (the structural-reject bug fix), so
101
- // a paid caller is never charged for sending nothing verifiable.
102
- for (const tool of ["proof.verify-bundle", "proof.verify-envelope", "proof.verify-receipt"]) {
103
- r = await post(baseUrl, "/execute", executeBody(tool, {}), authHdr);
104
- assert.strictEqual(r.status, 422, `${tool} with empty args must 422 (not a billable 200)`);
105
- assert.strictEqual(r.json.ok, false, `${tool} empty-args must report ok:false`);
106
- }
107
- // A malformed receipt hex is likewise a structural reject -> 422, not a billed 200.
108
- r = await post(baseUrl, "/execute", executeBody("proof.verify-receipt", { opreturn_hex: "zz" }), authHdr);
109
- assert.strictEqual(r.status, 422, "non-hex receipt must 422");
110
- assert.strictEqual(r.json.reason, "non_hex", "non_hex reason surfaced");
111
-
112
- // 6. Private-key material refused -> 422 (only when the deployment rejects it).
113
- process.env.XOONYA_ACCEPT_PRIVATE_KEY_MATERIAL = "false";
114
- r = await post(baseUrl, "/execute", executeBody("proof.verify-signature", { signature_verification: { private_key: "-----BEGIN PRIVATE KEY-----\nAAAA\n-----END PRIVATE KEY-----" } }), authHdr);
115
- assert.strictEqual(r.status, 422, "private key material must 422");
116
- assert.strictEqual(r.json.reason, "private_key_material_not_accepted", "pkm reason");
117
-
118
- // 7. Non-breaking: an existing free route still answers unchanged.
119
- const health = await fetch(`${baseUrl}/health`);
120
- assert.strictEqual(health.status, 200, "free /health route unchanged");
121
-
122
- console.log("xoonya verify:paid-execute passed");
123
- } finally {
124
- await new Promise((resolve) => server.close(resolve));
125
- if (prev.bearer === undefined) delete process.env.XOONYA_EXECUTOR_BEARER_TOKEN; else process.env.XOONYA_EXECUTOR_BEARER_TOKEN = prev.bearer;
126
- if (prev.pkm === undefined) delete process.env.XOONYA_ACCEPT_PRIVATE_KEY_MATERIAL; else process.env.XOONYA_ACCEPT_PRIVATE_KEY_MATERIAL = prev.pkm;
127
- }
128
- }
129
-
130
- main().catch((error) => {
131
- console.error(error && error.message ? error.message : error);
132
- process.exitCode = 1;
133
- });
@@ -1,86 +0,0 @@
1
- "use strict";
2
-
3
- // Verifies the optional paywall flag (XOONYA_REQUIRE_PAID_VERIFICATION) for the FREE
4
- // direct verification routes. Default OFF => routes stay free (non-breaking). ON => the
5
- // five crypto-verify routes that have a metered paid equivalent return 402 pointing to
6
- // the paid x402 lane, while /execute, /health and descriptor GETs stay free.
7
-
8
- const assert = require("assert");
9
- const crypto = require("crypto");
10
- const http = require("http");
11
-
12
- const b64url = (buf) => Buffer.from(buf).toString("base64url");
13
- function makeJws(payloadObj, privateKey) {
14
- const protectedB64 = b64url(Buffer.from(JSON.stringify({ alg: "EdDSA" }), "utf8"));
15
- const payloadB64 = b64url(Buffer.from(JSON.stringify(payloadObj), "utf8"));
16
- const signingInput = `${protectedB64}.${payloadB64}`;
17
- return `${signingInput}.${b64url(crypto.sign(null, Buffer.from(signingInput, "utf8"), privateKey))}`;
18
- }
19
-
20
- async function post(baseUrl, path, body) {
21
- const res = await fetch(`${baseUrl}${path}`, { method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify(body) });
22
- let json = null; try { json = await res.json(); } catch (_) { json = null; }
23
- return { status: res.status, json };
24
- }
25
-
26
- const GATED = [
27
- ["/v1/proof-center/import-adapter/verify-signature", "proof.verify-signature"],
28
- ["/v1/proof-bundles/verify", "proof.verify-bundle"],
29
- ["/v1/proofs/verify", "proof.verify-envelope"],
30
- ["/validate", "proof.verify-receipt"],
31
- ["/v1/receipts/verify", "proof.verify-receipt"]
32
- ];
33
-
34
- async function main() {
35
- const prevFlag = process.env.XOONYA_REQUIRE_PAID_VERIFICATION;
36
- const prevBearer = process.env.XOONYA_EXECUTOR_BEARER_TOKEN;
37
- delete process.env.XOONYA_REQUIRE_PAID_VERIFICATION;
38
- process.env.XOONYA_EXECUTOR_BEARER_TOKEN = "paywall-test-bearer";
39
-
40
- delete require.cache[require.resolve("../server.js")];
41
- const { createServer } = require("../server.js");
42
- const server = createServer();
43
- await new Promise((resolve) => server.listen(0, "127.0.0.1", resolve));
44
- const baseUrl = `http://127.0.0.1:${server.address().port}`;
45
-
46
- const ed = crypto.generateKeyPairSync("ed25519");
47
- const edPubPem = ed.publicKey.export({ type: "spki", format: "pem" });
48
- const jws = makeJws({ sub: "a" }, ed.privateKey);
49
-
50
- try {
51
- // Flag OFF (default): free direct verification works unchanged (non-breaking).
52
- let r = await post(baseUrl, "/v1/proof-center/import-adapter/verify-signature", { signature_verification: { jws, trusted_public_key: edPubPem } });
53
- assert.strictEqual(r.status, 200, "flag off: verify-signature free (200)");
54
- assert.strictEqual(r.json.signature_valid, true, "flag off: real verdict returned free");
55
-
56
- // Flag ON: every gated route returns 402 pointing to the paid lane.
57
- process.env.XOONYA_REQUIRE_PAID_VERIFICATION = "true";
58
- for (const [path, tool] of GATED) {
59
- r = await post(baseUrl, path, {});
60
- assert.strictEqual(r.status, 402, `flag on: ${path} must 402`);
61
- assert.strictEqual(r.json.reason, "direct_verification_paywalled", `flag on: ${path} paywall reason`);
62
- assert.ok(r.json.paid_lane && r.json.paid_lane.task_ref === "adapter.xoonya.invoke", `flag on: ${path} points to paid lane`);
63
- assert.strictEqual(r.json.paid_lane.tool_name, tool, `flag on: ${path} names the paid tool`);
64
- }
65
- // And the paywalled route no longer performs the free verification (402, not 200).
66
- r = await post(baseUrl, "/v1/proof-center/import-adapter/verify-signature", { signature_verification: { jws, trusted_public_key: edPubPem } });
67
- assert.strictEqual(r.status, 402, "flag on: a valid request is still paywalled (no free bypass)");
68
-
69
- // Flag ON must NOT paywall /execute (the paid backend) or /health (free).
70
- const exec = await fetch(`${baseUrl}/execute`, { method: "POST", headers: { "content-type": "application/json" }, body: "{}" });
71
- assert.notStrictEqual(exec.status, 402, "/execute must not be paywalled (it IS the paid path; 401 without bearer here)");
72
- const health = await fetch(`${baseUrl}/health`);
73
- assert.strictEqual(health.status, 200, "/health stays free");
74
-
75
- console.log("xoonya verify:paywall-flag passed");
76
- } finally {
77
- await new Promise((resolve) => server.close(resolve));
78
- if (prevFlag === undefined) delete process.env.XOONYA_REQUIRE_PAID_VERIFICATION; else process.env.XOONYA_REQUIRE_PAID_VERIFICATION = prevFlag;
79
- if (prevBearer === undefined) delete process.env.XOONYA_EXECUTOR_BEARER_TOKEN; else process.env.XOONYA_EXECUTOR_BEARER_TOKEN = prevBearer;
80
- }
81
- }
82
-
83
- main().catch((error) => {
84
- console.error(error && error.message ? error.message : error);
85
- process.exitCode = 1;
86
- });
@@ -1,74 +0,0 @@
1
- "use strict";
2
-
3
- const assert = require("assert");
4
- const {
5
- buildxoonyaNativeReferenceImplementationPack,
6
- summarizexoonyaNativeReferenceImplementationPack,
7
- validatexoonyaNativeReferencePromotionEvidence
8
- } = require("../proof_sdk");
9
-
10
- function buildValidPromotionEvidence(pack, language = "python") {
11
- return {
12
- language,
13
- candidate_repository_ref: `xoonya-native-${language}@candidate`,
14
- vector_sets_passed: pack.required_vector_sets.slice(),
15
- deterministic_error_code_parity_ref: `xnya.reference.error_codes.${language}.2026-04-22`,
16
- independent_parser_ref: `xnya.reference.parser.${language}.2026-04-22`,
17
- signature_crypto_parity_ref: `xnya.reference.crypto.${language}.2026-04-22`,
18
- round_trip_ref: `xnya.reference.round_trip.${language}.2026-04-22`,
19
- conformance_mark_review_ref: `xnya.reference.conformance_mark.${language}.2026-04-22`,
20
- forbidden_claim_review_ref: `xnya.reference.claim_boundary.${language}.2026-04-22`,
21
- wraps_javascript_runtime: false
22
- };
23
- }
24
-
25
- function assertRejected(pack, evidence, expectedCode) {
26
- const validation = validatexoonyaNativeReferencePromotionEvidence(pack, evidence);
27
- assert.strictEqual(validation.promotion_allowed, false, `expected ${expectedCode} to block reference promotion`);
28
- assert.strictEqual(
29
- validation.rejection_codes.includes(expectedCode),
30
- true,
31
- `missing deterministic rejection code ${expectedCode}`
32
- );
33
- return validation;
34
- }
35
-
36
- function main() {
37
- const pack = buildxoonyaNativeReferenceImplementationPack();
38
- const summary = summarizexoonyaNativeReferenceImplementationPack();
39
- const validPythonEvidence = buildValidPromotionEvidence(pack, "python");
40
- const validPythonPromotion = validatexoonyaNativeReferencePromotionEvidence(pack, validPythonEvidence);
41
-
42
- assert.strictEqual(pack.category, "xoonya-native-reference-implementation-pack", "native reference pack category mismatch");
43
- assert.strictEqual(summary.category, "xoonya-native-reference-implementation-summary", "native reference summary category mismatch");
44
- assert.strictEqual(pack.implemented_reference_implementations.length, 1, "only JavaScript should be implemented today");
45
- assert.strictEqual(pack.deterministic_rejection_codes.length >= 11, true, "reference promotion rejection codes missing");
46
- assert.strictEqual(summary.deterministic_rejection_code_count, pack.deterministic_rejection_codes.length, "summary rejection code count mismatch");
47
- assert.strictEqual(validPythonPromotion.promotion_allowed, true, "complete Python promotion evidence should pass validation");
48
- assert.deepStrictEqual(validPythonPromotion.rejection_codes, [], "complete Python evidence should not carry rejection codes");
49
-
50
- assertRejected(pack, buildValidPromotionEvidence(pack, "javascript"), "reference_language_not_registered");
51
- assertRejected(pack, { ...validPythonEvidence, candidate_repository_ref: null }, "candidate_repository_missing");
52
- assertRejected(pack, { ...validPythonEvidence, vector_sets_passed: pack.required_vector_sets.slice(0, 1) }, "required_vector_set_missing");
53
- assertRejected(pack, { ...validPythonEvidence, deterministic_error_code_parity_ref: null }, "deterministic_error_code_parity_missing");
54
- assertRejected(pack, { ...validPythonEvidence, independent_parser_ref: null }, "independent_parser_evidence_missing");
55
- assertRejected(pack, { ...validPythonEvidence, signature_crypto_parity_ref: null }, "signature_crypto_parity_missing");
56
- assertRejected(pack, { ...validPythonEvidence, round_trip_ref: null }, "round_trip_evidence_missing");
57
- assertRejected(pack, { ...validPythonEvidence, conformance_mark_review_ref: null }, "conformance_mark_review_missing");
58
- assertRejected(pack, { ...validPythonEvidence, forbidden_claim_review_ref: null }, "forbidden_claim_review_missing");
59
- assertRejected(pack, { ...validPythonEvidence, wraps_javascript_runtime: true }, "javascript_wrapper_forbidden");
60
- assertRejected(pack, { ...validPythonEvidence, npm_token: "npm_accidental_secret" }, "secret_material_forbidden");
61
-
62
- const output = {
63
- ok: true,
64
- product: "xoonya",
65
- category: "xoonya-native-reference-promotion-gate-verification",
66
- status: "reference_promotion_requires_independent_vector_crypto_round_trip_and_mark_evidence",
67
- deterministic_rejection_code_count: pack.deterministic_rejection_codes.length,
68
- adversarial_case_count: 11,
69
- boundary: "python_and_rust_reference_claims_remain_gated_until_independent_promotion_evidence_is_complete"
70
- };
71
- process.stdout.write(`${JSON.stringify(output, null, 2)}\n`);
72
- }
73
-
74
- main();
@@ -1,49 +0,0 @@
1
- "use strict";
2
-
3
- const assert = require("assert");
4
- const path = require("path");
5
- const { spawnSync } = require("child_process");
6
-
7
- function runPython(command, args) {
8
- return spawnSync(command, args, {
9
- cwd: path.resolve(__dirname, ".."),
10
- encoding: "utf8"
11
- });
12
- }
13
-
14
- function main() {
15
- const script = path.resolve(__dirname, "..", "reference", "python", "verify_vectors.py");
16
- let result = runPython("python", [script]);
17
- if (result.error && result.error.code === "ENOENT") {
18
- result = runPython("py", ["-3", script]);
19
- }
20
- if (result.error) {
21
- throw result.error;
22
- }
23
- if (result.status !== 0) {
24
- process.stderr.write(result.stdout || "");
25
- process.stderr.write(result.stderr || "");
26
- throw new Error("Python XNYA reference vector verification failed");
27
- }
28
- const summary = JSON.parse(result.stdout);
29
- assert.strictEqual(summary.ok, true, "Python XNYA reference summary did not pass");
30
- assert.strictEqual(summary.category, "xnya-python-reference-vector-parity", "Python XNYA reference category mismatch");
31
- assert.strictEqual(summary.atom_vector_count >= 4, true, "Python XNYA atom vectors missing");
32
- assert.strictEqual(summary.atom_adversarial_count >= 9, true, "Python XNYA adversarial vectors missing");
33
- assert.strictEqual(summary.payload_profile_vector_count, 1, "Python XNYP payload vector missing");
34
- assert.strictEqual(summary.proof_bundle_vector_count >= 10, true, "Python proof bundle vectors missing");
35
- assert.strictEqual(summary.proof_bundle_verified_vector_count >= 9, true, "Python proof bundle verified vectors missing");
36
- assert.strictEqual(
37
- summary.native_signed_crypto_gated_vector_count + summary.native_signed_crypto_verified_vector_count,
38
- 1,
39
- "Python native signed crypto vector accounting mismatch"
40
- );
41
- assert.strictEqual(
42
- summary.verified_signature_suite_count === 0 || summary.verified_signature_suite_count === 1,
43
- true,
44
- "Python verified signature suite count mismatch"
45
- );
46
- process.stdout.write("xoonya verify:reference-python passed\n");
47
- }
48
-
49
- main();