xoonya 3.0.0 → 3.1.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.
- package/.env.example +2 -2
- package/CARRIED_HANDOFF_DEMO.md +60 -60
- package/COMPATIBILITY_NOTE.md +27 -27
- package/CROSS_RUNTIME_POSTURE.md +77 -77
- package/EXAMPLE_PATHS.md +53 -53
- package/FINAL_CONTRACT.md +445 -445
- package/LICENSE +201 -201
- package/NOTICE +3 -3
- package/OPERATIONS_RUNBOOK.md +50 -0
- package/OPERATOR_START_HERE.md +67 -0
- package/PARTNER_READY_PATH.md +67 -67
- package/PROGRAM_COMPLETE_RELEASE.md +52 -0
- package/PROGRAM_STATUS.md +57 -0
- package/PUBLIC_DEMO_SCRIPT.md +79 -79
- package/PUBLISH_PLAN.md +25 -0
- package/README.md +807 -732
- package/RELEASE_CHECKLIST.md +16 -0
- package/RELEASE_NOTES.md +15 -15
- package/SERVICE_CONTRACT.md +207 -195
- package/START_HERE.md +159 -150
- package/TERMINOLOGY.md +55 -55
- package/WHY_XYTARA_XOONYA.md +43 -43
- package/XNYA_CONFORMANCE_MARK.md +78 -78
- package/XNYA_REFERENCE_IMPLEMENTATIONS.md +157 -157
- package/XOONYA_DEFAULT_PATH_MODEL.md +63 -63
- package/XOONYA_FOLLOWTHROUGH_TRUTH_MODEL.md +63 -63
- package/XOONYA_NATIVE_ATOM_SPEC.md +184 -184
- package/XOONYA_NATIVE_PROOF_FORMAT.md +527 -527
- package/XOONYA_NATIVE_STANDARD_GOVERNANCE.md +119 -119
- package/XOONYA_PROOF_TRUTH_MODEL.md +58 -58
- package/bin/xoonya-first-run.js +184 -184
- package/bin/xoonya-release.js +1367 -1367
- package/bin/xoonya-review.js +70 -70
- package/bin/xoonya.js +82 -82
- package/examples/integration_boundary_walkthrough.js +37 -37
- package/examples/package_quickstart.js +1007 -1007
- package/examples/partner_proof_walkthrough.js +68 -68
- package/examples/proof_review_walkthrough.js +66 -66
- package/examples/review_carried_handoff.js +72 -72
- package/index.js +31 -22
- package/integrations/PROOF_INTEGRATION_PROCESS.md +45 -45
- package/integrations/examples/example-third-party-verifier-registration.record.json +22 -22
- package/integrations/registration-record.schema.json +99 -99
- package/integrations/registry-snapshot.schema.json +36 -36
- package/integrations/registry.js +636 -636
- package/integrations/views.js +36 -36
- package/lib/adapter_certification_contract.js +90 -0
- package/lib/announcement_pack.js +61 -61
- package/lib/artifact_distribution_lane_contract.js +54 -54
- package/lib/asyncapi_contract.js +135 -135
- package/lib/auth_interop_contract.js +69 -69
- package/lib/authority_binding_lifecycle_contract.js +182 -0
- package/lib/bridge_intelligence.js +102 -102
- package/lib/cloudevents_contract.js +79 -79
- package/lib/crypto_agility_matrix.js +125 -0
- package/lib/default_path_contract.js +380 -380
- package/lib/ecosystem_entry.js +64 -64
- package/lib/erc8004_proof_lane_contract.js +64 -64
- package/lib/event_system_lane_contract.js +76 -76
- package/lib/external_proof_import_lane_contract.js +87 -87
- package/lib/feature_control_lane_contract.js +54 -54
- package/lib/followthrough_truth_contract.js +214 -214
- package/lib/framework_lane_contract.js +76 -76
- package/lib/governance_disputes_summary.js +36 -36
- package/lib/governance_intelligence.js +108 -108
- package/lib/identity_interop_contract.js +83 -83
- package/lib/integration_matrix_contract.js +81 -81
- package/lib/launch_narrative.js +53 -53
- package/lib/machine_identity_registry_contract.js +199 -0
- package/lib/major_rails_proof_lane_contract.js +87 -87
- package/lib/offline_verifiability_recovery_contract.js +155 -0
- package/lib/openapi_contract.js +227 -227
- package/lib/operational_receipt_contract.js +165 -0
- package/lib/outreach_proof.js +71 -71
- package/lib/phase_10_closeout_pack.js +45 -45
- package/lib/phase_10_completion_pack.js +76 -76
- package/lib/phase_10_decision_record_pack.js +54 -54
- package/lib/phase_10_decision_resolution_pack.js +53 -53
- package/lib/phase_10_demand_signal_adapters_proof_pack.js +74 -74
- package/lib/phase_10_ecosystem_backlog_triage_proof_pack.js +74 -74
- package/lib/phase_10_freeze_baseline_pack.js +67 -67
- package/lib/phase_10_freeze_review_pack.js +64 -64
- package/lib/phase_10_gate_pack.js +57 -57
- package/lib/phase_10_long_tail_continuity_pack.js +80 -80
- package/lib/phase_10_long_tail_ecosystem_pack.js +68 -68
- package/lib/phase_10_niche_extension_registry_proof_pack.js +74 -74
- package/lib/phase_1_claude_mcp_pack.js +60 -60
- package/lib/phase_1_claude_mcp_proof_pack.js +57 -57
- package/lib/phase_1_ecosystem_pack.js +51 -51
- package/lib/phase_1_openai_codex_pack.js +60 -60
- package/lib/phase_1_openai_codex_proof_pack.js +57 -57
- package/lib/phase_2_base_proof_pack.js +71 -71
- package/lib/phase_2_base_usdc_proof_pack.js +72 -72
- package/lib/phase_2_closeout_pack.js +65 -65
- package/lib/phase_2_completion_pack.js +113 -113
- package/lib/phase_2_decision_record_pack.js +66 -66
- package/lib/phase_2_decision_resolution_pack.js +69 -69
- package/lib/phase_2_eth_proof_pack.js +70 -70
- package/lib/phase_2_evm_base_proof_pack.js +73 -73
- package/lib/phase_2_evm_proof_pack.js +71 -71
- package/lib/phase_2_flip_preview_pack.js +60 -60
- package/lib/phase_2_freeze_review_pack.js +99 -99
- package/lib/phase_2_gate_pack.js +77 -77
- package/lib/phase_2_payment_rails_pack.js +71 -71
- package/lib/phase_2_usdc_proof_pack.js +71 -71
- package/lib/phase_3_brc_proof_pack.js +81 -81
- package/lib/phase_3_bsv_teranode_proof_pack.js +81 -81
- package/lib/phase_3_closeout_pack.js +62 -62
- package/lib/phase_3_completion_pack.js +92 -92
- package/lib/phase_3_decision_record_pack.js +64 -64
- package/lib/phase_3_decision_resolution_pack.js +69 -69
- package/lib/phase_3_freeze_baseline_pack.js +67 -67
- package/lib/phase_3_freeze_review_pack.js +80 -80
- package/lib/phase_3_gate_pack.js +76 -76
- package/lib/phase_3_metanet_proof_pack.js +81 -81
- package/lib/phase_3_native_bsv_pack.js +89 -89
- package/lib/phase_3_native_continuity_pack.js +82 -82
- package/lib/phase_4_attestation_proof_pack.js +75 -75
- package/lib/phase_4_closeout_pack.js +45 -45
- package/lib/phase_4_completion_pack.js +82 -82
- package/lib/phase_4_decision_record_pack.js +54 -54
- package/lib/phase_4_decision_resolution_pack.js +45 -45
- package/lib/phase_4_erc8004_proof_pack.js +76 -76
- package/lib/phase_4_freeze_baseline_pack.js +67 -67
- package/lib/phase_4_freeze_review_pack.js +68 -68
- package/lib/phase_4_gate_pack.js +58 -58
- package/lib/phase_4_identity_registry_proof_pack.js +75 -75
- package/lib/phase_4_identity_trust_pack.js +73 -73
- package/lib/phase_4_trust_continuity_pack.js +86 -86
- package/lib/phase_5_antelope_proof_pack.js +76 -76
- package/lib/phase_5_closeout_pack.js +44 -44
- package/lib/phase_5_completion_pack.js +82 -82
- package/lib/phase_5_decision_record_pack.js +54 -54
- package/lib/phase_5_decision_resolution_pack.js +45 -45
- package/lib/phase_5_freeze_baseline_pack.js +67 -67
- package/lib/phase_5_freeze_review_pack.js +68 -68
- package/lib/phase_5_gate_pack.js +58 -58
- package/lib/phase_5_major_rails_continuity_pack.js +86 -86
- package/lib/phase_5_major_rails_pack.js +74 -74
- package/lib/phase_5_proton_xpr_proof_pack.js +76 -76
- package/lib/phase_5_solana_proof_pack.js +76 -76
- package/lib/phase_6_autogen_proof_pack.js +74 -74
- package/lib/phase_6_closeout_pack.js +46 -46
- package/lib/phase_6_completion_pack.js +77 -77
- package/lib/phase_6_decision_record_pack.js +54 -54
- package/lib/phase_6_decision_resolution_pack.js +53 -53
- package/lib/phase_6_framework_continuity_pack.js +81 -81
- package/lib/phase_6_framework_runtime_pack.js +68 -68
- package/lib/phase_6_freeze_baseline_pack.js +68 -68
- package/lib/phase_6_freeze_review_pack.js +65 -65
- package/lib/phase_6_gate_pack.js +59 -59
- package/lib/phase_6_langchain_proof_pack.js +74 -74
- package/lib/phase_6_langgraph_proof_pack.js +74 -74
- package/lib/phase_6_semantic_kernel_proof_pack.js +74 -74
- package/lib/phase_7_closeout_pack.js +45 -45
- package/lib/phase_7_completion_pack.js +85 -85
- package/lib/phase_7_decision_record_pack.js +53 -53
- package/lib/phase_7_decision_resolution_pack.js +53 -53
- package/lib/phase_7_event_system_continuity_pack.js +89 -89
- package/lib/phase_7_event_system_pack.js +76 -76
- package/lib/phase_7_freeze_baseline_pack.js +74 -74
- package/lib/phase_7_freeze_review_pack.js +65 -65
- package/lib/phase_7_gate_pack.js +58 -58
- package/lib/phase_7_kafka_proof_pack.js +76 -76
- package/lib/phase_7_mqtt_proof_pack.js +76 -76
- package/lib/phase_7_nats_proof_pack.js +76 -76
- package/lib/phase_7_webhook_event_bus_proof_pack.js +76 -76
- package/lib/phase_8_closeout_pack.js +46 -46
- package/lib/phase_8_completion_pack.js +82 -82
- package/lib/phase_8_decision_record_pack.js +54 -54
- package/lib/phase_8_decision_resolution_pack.js +53 -53
- package/lib/phase_8_external_receipt_import_proof_pack.js +74 -74
- package/lib/phase_8_external_result_import_proof_pack.js +74 -74
- package/lib/phase_8_freeze_baseline_pack.js +71 -71
- package/lib/phase_8_freeze_review_pack.js +64 -64
- package/lib/phase_8_gate_pack.js +58 -58
- package/lib/phase_8_proof_bridge_continuity_pack.js +86 -86
- package/lib/phase_8_proof_bridges_pack.js +72 -72
- package/lib/phase_8_proof_bundle_normalization_proof_pack.js +74 -74
- package/lib/phase_9_closeout_pack.js +46 -46
- package/lib/phase_9_completion_pack.js +82 -82
- package/lib/phase_9_custody_refs_proof_pack.js +74 -74
- package/lib/phase_9_decision_record_pack.js +54 -54
- package/lib/phase_9_decision_resolution_pack.js +53 -53
- package/lib/phase_9_freeze_baseline_pack.js +71 -71
- package/lib/phase_9_freeze_review_pack.js +64 -64
- package/lib/phase_9_gate_pack.js +58 -58
- package/lib/phase_9_operator_accounting_bridges_proof_pack.js +74 -74
- package/lib/phase_9_treasury_connectivity_pack.js +72 -72
- package/lib/phase_9_treasury_continuity_pack.js +86 -86
- package/lib/phase_9_treasury_destinations_proof_pack.js +74 -74
- package/lib/phase_program_pack.js +47 -47
- package/lib/proof_bridge_lane_contract.js +82 -82
- package/lib/proof_truth_contract.js +224 -224
- package/lib/provenance_lane_contract.js +54 -54
- package/lib/provider_lane_contract.js +67 -67
- package/lib/public_surface_policy_contract.js +111 -0
- package/lib/publish_plan.js +51 -51
- package/lib/release_candidate.js +50 -50
- package/lib/release_center.js +1037 -1037
- package/lib/release_history.js +206 -206
- package/lib/release_manifest.js +114 -114
- package/lib/release_pack.js +391 -391
- package/lib/result_package_trust_lane_contract.js +74 -74
- package/lib/review_intelligence.js +100 -100
- package/lib/role_freeze.js +436 -436
- package/lib/shared_signals_lane_contract.js +54 -54
- package/lib/signed_audit_provenance_contract.js +93 -0
- package/lib/telemetry_lane_contract.js +54 -54
- package/lib/treasury_proof_lane_contract.js +83 -83
- package/lib/trust_intelligence.js +106 -106
- package/lib/trust_portability_boundary_contract.js +66 -0
- package/lib/trust_portability_pack.js +224 -224
- package/lib/verification_service_pack.js +149 -149
- package/package.json +97 -95
- package/proof_sdk.js +6265 -6265
- package/reference/python/README.md +35 -35
- package/reference/python/requirements-optional.txt +1 -1
- package/reference/python/verify_vectors.py +223 -223
- package/reference/python/xnya_reference.py +810 -810
- package/reference/rust/Cargo.toml +11 -11
- package/reference/rust/README.md +28 -28
- package/reference/rust/src/lib.rs +87 -87
- package/scripts/registry_cli.js +157 -157
- package/scripts/verify_all.js +603 -603
- package/scripts/verify_control_plane_contracts.js +34 -0
- package/scripts/verify_control_plane_routes.js +70 -0
- package/scripts/verify_examples.js +19 -19
- package/scripts/verify_external_proof_import_gate.js +84 -84
- package/scripts/verify_integrations.js +170 -170
- package/scripts/verify_native_hybrid_design_gate.js +114 -114
- package/scripts/verify_reference_promotion_gate.js +74 -74
- package/scripts/verify_reference_python.js +49 -49
- package/scripts/verify_reference_python_crypto.js +87 -87
- package/scripts/verify_reference_rust_scaffold.js +50 -50
- package/scripts/verify_release_candidate.js +131 -131
- package/scripts/verify_service.js +2940 -2940
- package/scripts/verify_tooling.js +1251 -1251
- package/scripts/verify_trust_portability.js +56 -56
- package/scripts/verify_vectors.js +192 -192
- package/scripts/verify_verification_services.js +56 -56
- package/server.js +4099 -3997
- package/vectors/adversarial-vectors.json +552 -552
- package/vectors/conformance-vectors.json +446 -446
- package/vectors/native-atom-vectors.json +101 -101
- package/vectors/native-payload-profile-vectors.json +50 -50
|
@@ -1,74 +1,74 @@
|
|
|
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
|
+
"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 +1,49 @@
|
|
|
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();
|
|
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();
|
|
@@ -1,87 +1,87 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
const assert = require("assert");
|
|
4
|
-
const fs = require("fs");
|
|
5
|
-
const os = require("os");
|
|
6
|
-
const path = require("path");
|
|
7
|
-
const { spawnSync } = require("child_process");
|
|
8
|
-
|
|
9
|
-
const rootDir = path.resolve(__dirname, "..");
|
|
10
|
-
|
|
11
|
-
function run(command, args, options = {}) {
|
|
12
|
-
return spawnSync(command, args, {
|
|
13
|
-
cwd: rootDir,
|
|
14
|
-
encoding: "utf8",
|
|
15
|
-
...options
|
|
16
|
-
});
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
function findPython() {
|
|
20
|
-
const direct = run("python", ["--version"]);
|
|
21
|
-
if (!direct.error && direct.status === 0) {
|
|
22
|
-
return { command: "python", prefixArgs: [] };
|
|
23
|
-
}
|
|
24
|
-
const launcher = run("py", ["-3", "--version"]);
|
|
25
|
-
if (!launcher.error && launcher.status === 0) {
|
|
26
|
-
return { command: "py", prefixArgs: ["-3"] };
|
|
27
|
-
}
|
|
28
|
-
throw new Error("Python 3 is required for the XNYA Python crypto reference check");
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
function venvPythonPath(venvDir) {
|
|
32
|
-
return process.platform === "win32"
|
|
33
|
-
? path.join(venvDir, "Scripts", "python.exe")
|
|
34
|
-
: path.join(venvDir, "bin", "python");
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
function assertOk(result, label) {
|
|
38
|
-
if (result.error) {
|
|
39
|
-
throw result.error;
|
|
40
|
-
}
|
|
41
|
-
if (result.status !== 0) {
|
|
42
|
-
process.stderr.write(result.stdout || "");
|
|
43
|
-
process.stderr.write(result.stderr || "");
|
|
44
|
-
throw new Error(`${label} failed`);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
function main() {
|
|
49
|
-
const python = findPython();
|
|
50
|
-
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "xoonya-python-crypto-"));
|
|
51
|
-
const keepVenv = process.env.XOONYA_KEEP_REFERENCE_PYTHON_CRYPTO_VENV === "1";
|
|
52
|
-
try {
|
|
53
|
-
const venvDir = path.join(tempDir, "venv");
|
|
54
|
-
assertOk(
|
|
55
|
-
run(python.command, [...python.prefixArgs, "-m", "venv", venvDir]),
|
|
56
|
-
"Python venv creation"
|
|
57
|
-
);
|
|
58
|
-
const venvPython = venvPythonPath(venvDir);
|
|
59
|
-
assertOk(
|
|
60
|
-
run(venvPython, [
|
|
61
|
-
"-m",
|
|
62
|
-
"pip",
|
|
63
|
-
"install",
|
|
64
|
-
"--disable-pip-version-check",
|
|
65
|
-
"-r",
|
|
66
|
-
path.join(rootDir, "reference", "python", "requirements-optional.txt")
|
|
67
|
-
]),
|
|
68
|
-
"Python optional crypto dependency install"
|
|
69
|
-
);
|
|
70
|
-
const result = run(venvPython, [path.join(rootDir, "reference", "python", "verify_vectors.py")]);
|
|
71
|
-
assertOk(result, "Python crypto-enabled XNYA vector verification");
|
|
72
|
-
const summary = JSON.parse(result.stdout);
|
|
73
|
-
assert.strictEqual(summary.ok, true, "Python crypto-enabled XNYA summary did not pass");
|
|
74
|
-
assert.strictEqual(summary.native_signed_crypto_verified_vector_count, 1, "Python Ed25519 vector was not verified");
|
|
75
|
-
assert.strictEqual(summary.verified_signature_suite_count, 1, "Python verified signature suite count mismatch");
|
|
76
|
-
assert.strictEqual(summary.native_signature_crypto_dependency_missing_count, 0, "Python crypto dependency should be present in isolated venv");
|
|
77
|
-
process.stdout.write("xoonya verify:reference-python-crypto passed\n");
|
|
78
|
-
} finally {
|
|
79
|
-
if (!keepVenv) {
|
|
80
|
-
fs.rmSync(tempDir, { recursive: true, force: true });
|
|
81
|
-
} else {
|
|
82
|
-
process.stdout.write(`kept Python crypto venv at ${tempDir}\n`);
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
main();
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
const assert = require("assert");
|
|
4
|
+
const fs = require("fs");
|
|
5
|
+
const os = require("os");
|
|
6
|
+
const path = require("path");
|
|
7
|
+
const { spawnSync } = require("child_process");
|
|
8
|
+
|
|
9
|
+
const rootDir = path.resolve(__dirname, "..");
|
|
10
|
+
|
|
11
|
+
function run(command, args, options = {}) {
|
|
12
|
+
return spawnSync(command, args, {
|
|
13
|
+
cwd: rootDir,
|
|
14
|
+
encoding: "utf8",
|
|
15
|
+
...options
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function findPython() {
|
|
20
|
+
const direct = run("python", ["--version"]);
|
|
21
|
+
if (!direct.error && direct.status === 0) {
|
|
22
|
+
return { command: "python", prefixArgs: [] };
|
|
23
|
+
}
|
|
24
|
+
const launcher = run("py", ["-3", "--version"]);
|
|
25
|
+
if (!launcher.error && launcher.status === 0) {
|
|
26
|
+
return { command: "py", prefixArgs: ["-3"] };
|
|
27
|
+
}
|
|
28
|
+
throw new Error("Python 3 is required for the XNYA Python crypto reference check");
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function venvPythonPath(venvDir) {
|
|
32
|
+
return process.platform === "win32"
|
|
33
|
+
? path.join(venvDir, "Scripts", "python.exe")
|
|
34
|
+
: path.join(venvDir, "bin", "python");
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function assertOk(result, label) {
|
|
38
|
+
if (result.error) {
|
|
39
|
+
throw result.error;
|
|
40
|
+
}
|
|
41
|
+
if (result.status !== 0) {
|
|
42
|
+
process.stderr.write(result.stdout || "");
|
|
43
|
+
process.stderr.write(result.stderr || "");
|
|
44
|
+
throw new Error(`${label} failed`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function main() {
|
|
49
|
+
const python = findPython();
|
|
50
|
+
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "xoonya-python-crypto-"));
|
|
51
|
+
const keepVenv = process.env.XOONYA_KEEP_REFERENCE_PYTHON_CRYPTO_VENV === "1";
|
|
52
|
+
try {
|
|
53
|
+
const venvDir = path.join(tempDir, "venv");
|
|
54
|
+
assertOk(
|
|
55
|
+
run(python.command, [...python.prefixArgs, "-m", "venv", venvDir]),
|
|
56
|
+
"Python venv creation"
|
|
57
|
+
);
|
|
58
|
+
const venvPython = venvPythonPath(venvDir);
|
|
59
|
+
assertOk(
|
|
60
|
+
run(venvPython, [
|
|
61
|
+
"-m",
|
|
62
|
+
"pip",
|
|
63
|
+
"install",
|
|
64
|
+
"--disable-pip-version-check",
|
|
65
|
+
"-r",
|
|
66
|
+
path.join(rootDir, "reference", "python", "requirements-optional.txt")
|
|
67
|
+
]),
|
|
68
|
+
"Python optional crypto dependency install"
|
|
69
|
+
);
|
|
70
|
+
const result = run(venvPython, [path.join(rootDir, "reference", "python", "verify_vectors.py")]);
|
|
71
|
+
assertOk(result, "Python crypto-enabled XNYA vector verification");
|
|
72
|
+
const summary = JSON.parse(result.stdout);
|
|
73
|
+
assert.strictEqual(summary.ok, true, "Python crypto-enabled XNYA summary did not pass");
|
|
74
|
+
assert.strictEqual(summary.native_signed_crypto_verified_vector_count, 1, "Python Ed25519 vector was not verified");
|
|
75
|
+
assert.strictEqual(summary.verified_signature_suite_count, 1, "Python verified signature suite count mismatch");
|
|
76
|
+
assert.strictEqual(summary.native_signature_crypto_dependency_missing_count, 0, "Python crypto dependency should be present in isolated venv");
|
|
77
|
+
process.stdout.write("xoonya verify:reference-python-crypto passed\n");
|
|
78
|
+
} finally {
|
|
79
|
+
if (!keepVenv) {
|
|
80
|
+
fs.rmSync(tempDir, { recursive: true, force: true });
|
|
81
|
+
} else {
|
|
82
|
+
process.stdout.write(`kept Python crypto venv at ${tempDir}\n`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
main();
|
|
@@ -1,50 +1,50 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
const assert = require("assert");
|
|
4
|
-
const fs = require("fs");
|
|
5
|
-
const path = require("path");
|
|
6
|
-
|
|
7
|
-
const root = path.resolve(__dirname, "..");
|
|
8
|
-
|
|
9
|
-
function read(relativePath) {
|
|
10
|
-
return fs.readFileSync(path.join(root, relativePath), "utf8");
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
function ensureContains(body, pattern, label) {
|
|
14
|
-
assert.strictEqual(body.includes(pattern), true, `${label} missing ${pattern}`);
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
function main() {
|
|
18
|
-
const readme = read("reference/rust/README.md");
|
|
19
|
-
const cargo = read("reference/rust/Cargo.toml");
|
|
20
|
-
const lib = read("reference/rust/src/lib.rs");
|
|
21
|
-
|
|
22
|
-
ensureContains(readme, "not a full XNYA-compatible reference implementation yet", "rust readme boundary");
|
|
23
|
-
ensureContains(readme, "Future promotion requires a real Rust toolchain check", "rust readme promotion gate");
|
|
24
|
-
ensureContains(cargo, "publish = false", "rust cargo publish boundary");
|
|
25
|
-
ensureContains(cargo, "name = \"xoonya-native-rust\"", "rust cargo name");
|
|
26
|
-
ensureContains(lib, "pub const XNYA_MAGIC: [u8; 4] = *b\"XNYA\";", "rust magic constant");
|
|
27
|
-
ensureContains(lib, "pub const ATOM_V1_LEN: usize = 58;", "rust atom v1 length");
|
|
28
|
-
ensureContains(lib, "pub const ATOM_V2_LEN: usize = 70;", "rust atom v2 length");
|
|
29
|
-
ensureContains(lib, "atom_bad_magic", "rust deterministic error code");
|
|
30
|
-
ensureContains(lib, "atom_unsupported_length", "rust deterministic error code");
|
|
31
|
-
ensureContains(lib, "atom_unsupported_record_type", "rust deterministic error code");
|
|
32
|
-
ensureContains(lib, "atom_version_length_mismatch", "rust deterministic error code");
|
|
33
|
-
|
|
34
|
-
const summary = {
|
|
35
|
-
ok: true,
|
|
36
|
-
product: "xoonya",
|
|
37
|
-
category: "xnya-rust-reference-scaffold-check",
|
|
38
|
-
status: "source_scaffold_packaged_not_vector_verified",
|
|
39
|
-
checked_files: [
|
|
40
|
-
"reference/rust/README.md",
|
|
41
|
-
"reference/rust/Cargo.toml",
|
|
42
|
-
"reference/rust/src/lib.rs"
|
|
43
|
-
],
|
|
44
|
-
boundary: "rust_candidate_is_source_only_until_cargo_vector_parity_and_round_trip_checks_exist"
|
|
45
|
-
};
|
|
46
|
-
process.stdout.write(`${JSON.stringify(summary, null, 2)}\n`);
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
main();
|
|
50
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
const assert = require("assert");
|
|
4
|
+
const fs = require("fs");
|
|
5
|
+
const path = require("path");
|
|
6
|
+
|
|
7
|
+
const root = path.resolve(__dirname, "..");
|
|
8
|
+
|
|
9
|
+
function read(relativePath) {
|
|
10
|
+
return fs.readFileSync(path.join(root, relativePath), "utf8");
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
function ensureContains(body, pattern, label) {
|
|
14
|
+
assert.strictEqual(body.includes(pattern), true, `${label} missing ${pattern}`);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function main() {
|
|
18
|
+
const readme = read("reference/rust/README.md");
|
|
19
|
+
const cargo = read("reference/rust/Cargo.toml");
|
|
20
|
+
const lib = read("reference/rust/src/lib.rs");
|
|
21
|
+
|
|
22
|
+
ensureContains(readme, "not a full XNYA-compatible reference implementation yet", "rust readme boundary");
|
|
23
|
+
ensureContains(readme, "Future promotion requires a real Rust toolchain check", "rust readme promotion gate");
|
|
24
|
+
ensureContains(cargo, "publish = false", "rust cargo publish boundary");
|
|
25
|
+
ensureContains(cargo, "name = \"xoonya-native-rust\"", "rust cargo name");
|
|
26
|
+
ensureContains(lib, "pub const XNYA_MAGIC: [u8; 4] = *b\"XNYA\";", "rust magic constant");
|
|
27
|
+
ensureContains(lib, "pub const ATOM_V1_LEN: usize = 58;", "rust atom v1 length");
|
|
28
|
+
ensureContains(lib, "pub const ATOM_V2_LEN: usize = 70;", "rust atom v2 length");
|
|
29
|
+
ensureContains(lib, "atom_bad_magic", "rust deterministic error code");
|
|
30
|
+
ensureContains(lib, "atom_unsupported_length", "rust deterministic error code");
|
|
31
|
+
ensureContains(lib, "atom_unsupported_record_type", "rust deterministic error code");
|
|
32
|
+
ensureContains(lib, "atom_version_length_mismatch", "rust deterministic error code");
|
|
33
|
+
|
|
34
|
+
const summary = {
|
|
35
|
+
ok: true,
|
|
36
|
+
product: "xoonya",
|
|
37
|
+
category: "xnya-rust-reference-scaffold-check",
|
|
38
|
+
status: "source_scaffold_packaged_not_vector_verified",
|
|
39
|
+
checked_files: [
|
|
40
|
+
"reference/rust/README.md",
|
|
41
|
+
"reference/rust/Cargo.toml",
|
|
42
|
+
"reference/rust/src/lib.rs"
|
|
43
|
+
],
|
|
44
|
+
boundary: "rust_candidate_is_source_only_until_cargo_vector_parity_and_round_trip_checks_exist"
|
|
45
|
+
};
|
|
46
|
+
process.stdout.write(`${JSON.stringify(summary, null, 2)}\n`);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
main();
|
|
50
|
+
|