xoonya 3.0.1 → 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,170 +1,170 @@
|
|
|
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
|
+
"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 +1,114 @@
|
|
|
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
|
+
"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
|
+
};
|