xytara 3.1.0 → 3.1.2
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 +67 -58
- package/ADAPTER_START_HERE.md +56 -56
- package/CARRIED_HANDOFF_DEMO.md +60 -60
- package/EXAMPLE_PATHS.md +53 -53
- package/FINAL_CONTRACT.md +498 -498
- package/LICENSE +201 -201
- package/NOTICE +3 -3
- package/PARTNER_READY_PATH.md +71 -71
- package/PUBLIC_DEMO_SCRIPT.md +78 -78
- package/README.md +6 -1
- package/REAL_PAYMENT_SETUP.md +32 -3
- package/RELEASE_NOTES.md +14 -14
- package/SERVICE_CONTRACT.md +419 -419
- package/START_HERE.md +1 -1
- package/SUPABASE_RUNTIME_STATE_SETUP.md +61 -61
- package/TERMINOLOGY.md +50 -50
- package/WHY_XYTARA_XOONYA.md +63 -63
- package/XT1_EXECUTION_TRUTH_STANDARD.md +78 -78
- package/XYTARA_ADAPTER_PROTOCOL_TRUTH_MODEL.md +75 -75
- package/XYTARA_AUTONOMOUS_ENTRY_MODEL.md +124 -124
- package/XYTARA_DEFAULT_PATH_MODEL.md +84 -84
- package/XYTARA_EXECUTION_TRUTH_MODEL.md +171 -171
- package/XYTARA_PAYMENT_RAIL_TRUTH_MODEL.md +68 -68
- package/adapters/AUTHORING_GUIDE.md +243 -243
- package/adapters/ONBOARDING_POSTURE.md +61 -61
- package/adapters/THIRD_PARTY_SUBMISSION_PROCESS.md +84 -84
- package/adapters/adapter-manifest.schema.json +283 -283
- package/adapters/examples/example-execution-adapter.js +61 -61
- package/adapters/examples/example-execution-adapter.manifest.json +81 -81
- package/adapters/examples/example-settlement-adapter.js +55 -55
- package/adapters/examples/example-settlement-adapter.manifest.json +78 -78
- package/adapters/examples/example-third-party-acp-registration.submission-bundle.json +124 -124
- package/adapters/examples/example-third-party-erc8004-registration.submission-bundle.json +121 -121
- package/adapters/examples/example-third-party-identity-registration.certification-pack.json +22 -22
- package/adapters/examples/example-third-party-identity-registration.record.json +26 -26
- package/adapters/examples/example-third-party-identity-registration.submission-bundle.json +126 -126
- package/adapters/examples/example-third-party-langchain-registration.submission-bundle.json +124 -124
- package/adapters/examples/example-third-party-mpp-registration.submission-bundle.json +120 -120
- package/adapters/examples/example-third-party-registration.certification-pack.json +22 -22
- package/adapters/examples/example-third-party-registration.record.json +28 -28
- package/adapters/examples/example-third-party-registration.submission-bundle.json +126 -126
- package/adapters/examples/example-third-party-settlement-registration.certification-pack.json +22 -22
- package/adapters/examples/example-third-party-settlement-registration.record.json +26 -26
- package/adapters/examples/example-third-party-settlement-registration.submission-bundle.json +127 -127
- package/adapters/examples/langchain-reference-execution-adapter.js +81 -81
- package/adapters/examples/langchain-reference-execution-adapter.manifest.json +79 -79
- package/adapters/examples/langgraph-reference-execution-adapter.js +81 -81
- package/adapters/examples/langgraph-reference-execution-adapter.manifest.json +79 -79
- package/adapters/examples/minimal-third-party-execution-adapter.js +61 -61
- package/adapters/examples/minimal-third-party-execution-adapter.manifest.json +79 -79
- package/adapters/examples/minimal-third-party-execution-registration.record.json +26 -26
- package/adapters/examples/minimal-third-party-execution.certification-pack.json +22 -22
- package/adapters/examples/minimal-third-party-execution.submission-bundle.json +126 -126
- package/adapters/integration-certification-pack.schema.json +82 -82
- package/adapters/integration-registration-record.schema.json +114 -114
- package/adapters/integration-submission-bundle-set.schema.json +39 -39
- package/adapters/integration-submission-bundle.schema.json +34 -34
- package/adapters/interfaces.js +56 -56
- package/bin/xytara-first-run.js +244 -244
- package/bin/xytara-release.js +1429 -1429
- package/bin/xytara-run.js +186 -186
- package/bin/xytara.js +80 -80
- package/client.js +3 -3
- package/examples/_demo_env.js +40 -0
- package/examples/adapter_review_walkthrough.js +54 -53
- package/examples/export_carried_handoff.js +81 -80
- package/examples/funded_runtime_walkthrough.js +71 -70
- package/examples/generated.carried-handoff.json +30 -0
- package/examples/partner_launch_walkthrough.js +44 -43
- package/examples/quickstart.js +3256 -3255
- package/fixtures/catalog.js +1134 -1134
- package/index.js +395 -395
- package/integrations/dispatch.js +276 -276
- package/integrations/registry-snapshot.schema.json +36 -36
- package/integrations/registry.js +2261 -2261
- package/integrations/views.js +28 -28
- package/lib/a2a_lane_contract.js +104 -104
- package/lib/a2c_lane_contract.js +111 -111
- package/lib/account_auth.js +518 -518
- package/lib/acp_lane_contract.js +54 -54
- package/lib/activity_audit_contract.js +322 -322
- package/lib/adapter_certification_contract.js +130 -130
- package/lib/adapter_depth_contract.js +156 -156
- package/lib/adapter_pack.js +118 -118
- package/lib/adapter_partner_pack.js +89 -89
- package/lib/adapter_promotion_pack.js +89 -89
- package/lib/adapter_protocol_truth_contract.js +229 -229
- package/lib/announcement_pack.js +61 -61
- package/lib/artifact_distribution_lane_contract.js +54 -54
- package/lib/asyncapi_contract.js +150 -150
- package/lib/auth_interop_contract.js +80 -80
- package/lib/authority_binding_lifecycle_contract.js +182 -182
- package/lib/autonomous_entry_contract.js +409 -409
- package/lib/bolt_lane_contract.js +55 -55
- package/lib/bolt_payment_front.js +172 -172
- package/lib/business_cockpit.js +378 -378
- package/lib/capability_execution_truth.js +272 -272
- package/lib/capability_registry.js +633 -633
- package/lib/catalog_contract.js +966 -966
- package/lib/catalog_family_model.js +193 -193
- package/lib/catalog_views.js +55 -55
- package/lib/checkout_event_security.js +142 -142
- package/lib/cloudevents_contract.js +80 -80
- package/lib/command_flow.js +411 -406
- package/lib/commerce_artifacts.js +503 -503
- package/lib/commerce_authority.js +449 -449
- package/lib/commerce_cases.js +317 -317
- package/lib/commerce_checkout.js +509 -509
- package/lib/commerce_client.js +7687 -7676
- package/lib/commerce_coordination.js +346 -346
- package/lib/commerce_economics.js +4017 -4016
- package/lib/commerce_identity.js +578 -578
- package/lib/commerce_quotes.js +237 -237
- package/lib/commerce_reports.js +14461 -14461
- package/lib/commerce_runtime.js +315 -315
- package/lib/commerce_shell.js +257 -257
- package/lib/crypto_agility_matrix.js +125 -125
- package/lib/default_path_contract.js +412 -412
- package/lib/delivery_summary_contract.js +95 -95
- package/lib/ecosystem_entry.js +64 -64
- package/lib/erc8004_lane_contract.js +65 -65
- package/lib/event_system_lane_contract.js +75 -75
- package/lib/execution_truth_contract.js +234 -234
- package/lib/external_credit_bridge.js +142 -142
- package/lib/external_execution_runtime.js +132 -132
- package/lib/feature_control_lane_contract.js +54 -54
- package/lib/first_run_conversion_contract.js +290 -290
- package/lib/framework_lane_contract.js +89 -89
- package/lib/framework_provider_promotion.js +235 -235
- package/lib/full_catalog_contract.js +525 -525
- package/lib/go_live_operator_pack.js +391 -391
- package/lib/http_transport.js +73 -73
- package/lib/identity_auth.js +175 -175
- package/lib/identity_interop_contract.js +82 -82
- package/lib/integration_matrix_contract.js +102 -102
- package/lib/l402_lane_contract.js +55 -55
- package/lib/l402_payment_front.js +192 -192
- package/lib/launch_narrative.js +53 -53
- package/lib/lifecycle_continuity_contract.js +115 -115
- package/lib/machine_identity_registry_contract.js +199 -199
- package/lib/major_rails_lane_contract.js +150 -150
- package/lib/market_lane_contract.js +467 -467
- package/lib/market_lane_depth_contract.js +182 -182
- package/lib/market_lane_promotion_contract.js +210 -210
- package/lib/market_lane_trace_contract.js +278 -278
- package/lib/mcp_lane_contract.js +137 -137
- package/lib/network_transport.js +110 -110
- package/lib/offline_verifiability_recovery_contract.js +155 -155
- package/lib/openapi_contract.js +296 -296
- package/lib/operational_receipt_contract.js +165 -165
- package/lib/operator_intelligence.js +407 -407
- package/lib/outreach_copy_pack.js +51 -51
- package/lib/outreach_message_pack.js +71 -71
- package/lib/outreach_proof.js +71 -71
- package/lib/outreach_target_pack.js +60 -60
- package/lib/partner_intelligence.js +105 -105
- package/lib/payment_config.js +239 -191
- package/lib/payment_front_registry.js +53 -53
- package/lib/payment_protocol_contract.js +165 -165
- package/lib/payment_rail_truth_contract.js +324 -324
- package/lib/payment_verification.js +312 -264
- 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_runtime_pack.js +74 -74
- package/lib/phase_10_ecosystem_backlog_triage_runtime_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 +66 -66
- package/lib/phase_10_niche_extension_registry_runtime_pack.js +74 -74
- package/lib/phase_1_claude_mcp_pack.js +60 -60
- package/lib/phase_1_claude_mcp_runtime_pack.js +52 -52
- package/lib/phase_1_ecosystem_pack.js +67 -67
- package/lib/phase_1_openai_codex_pack.js +60 -60
- package/lib/phase_1_openai_codex_runtime_pack.js +52 -52
- package/lib/phase_2_base_runtime_pack.js +71 -71
- package/lib/phase_2_base_usdc_runtime_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_runtime_pack.js +70 -70
- package/lib/phase_2_evm_base_runtime_pack.js +73 -73
- package/lib/phase_2_evm_runtime_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_runtime_pack.js +71 -71
- package/lib/phase_3_brc_runtime_pack.js +81 -81
- package/lib/phase_3_bsv_teranode_runtime_pack.js +83 -83
- package/lib/phase_3_closeout_pack.js +62 -62
- package/lib/phase_3_completion_pack.js +94 -94
- 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_runtime_pack.js +81 -81
- package/lib/phase_3_native_bsv_pack.js +91 -91
- package/lib/phase_3_native_continuity_pack.js +82 -82
- package/lib/phase_4_attestation_runtime_pack.js +75 -75
- package/lib/phase_4_closeout_pack.js +45 -45
- package/lib/phase_4_completion_pack.js +94 -94
- 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_runtime_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_runtime_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_runtime_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_constellation_dag_runtime_pack.js +76 -76
- package/lib/phase_5_decision_record_pack.js +54 -54
- package/lib/phase_5_decision_resolution_pack.js +45 -45
- package/lib/phase_5_digibyte_dgb_runtime_pack.js +76 -76
- 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_hedera_hbar_runtime_pack.js +76 -76
- package/lib/phase_5_kaspa_kas_runtime_pack.js +76 -76
- package/lib/phase_5_major_rails_continuity_pack.js +86 -86
- package/lib/phase_5_major_rails_pack.js +110 -110
- package/lib/phase_5_metal_runtime_pack.js +76 -76
- package/lib/phase_5_polkadot_dot_runtime_pack.js +76 -76
- package/lib/phase_5_proton_xpr_runtime_pack.js +76 -76
- package/lib/phase_5_solana_runtime_pack.js +76 -76
- package/lib/phase_6_autogen_runtime_pack.js +72 -72
- 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_runtime_pack.js +72 -72
- package/lib/phase_6_langgraph_runtime_pack.js +72 -72
- package/lib/phase_6_semantic_kernel_runtime_pack.js +72 -72
- 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_runtime_pack.js +74 -74
- package/lib/phase_7_mqtt_runtime_pack.js +74 -74
- package/lib/phase_7_nats_runtime_pack.js +74 -74
- package/lib/phase_7_webhook_event_bus_runtime_pack.js +74 -74
- 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_runtime_pack.js +74 -74
- package/lib/phase_8_external_result_import_runtime_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_runtime_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_runtime_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_runtime_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_runtime_pack.js +74 -74
- package/lib/phase_program_pack.js +120 -120
- package/lib/pricing_optimization_contract.js +775 -775
- package/lib/protocol_lane_contract.js +117 -117
- package/lib/provenance_lane_contract.js +54 -54
- package/lib/provider_lane_contract.js +240 -240
- package/lib/provider_runtime_journey_contract.js +183 -183
- package/lib/public_surface_policy_contract.js +111 -111
- package/lib/publish_plan.js +51 -51
- package/lib/record_queries.js +48 -48
- package/lib/release_candidate.js +50 -50
- package/lib/release_center.js +1093 -1093
- package/lib/release_history.js +205 -205
- package/lib/release_manifest.js +113 -113
- package/lib/release_pack.js +453 -453
- package/lib/request_rate_limit.js +144 -144
- package/lib/resource_views.js +31 -31
- package/lib/revenue_launch_path_contract.js +326 -326
- package/lib/route_matchers.js +34 -34
- package/lib/route_params.js +19 -19
- package/lib/runtime_bridge.js +124 -124
- package/lib/runtime_operations_worker.js +282 -282
- package/lib/runtime_state_store.js +354 -354
- package/lib/settlement_lane_contract.js +111 -111
- package/lib/shared_signals_lane_contract.js +54 -54
- package/lib/signed_audit_provenance_contract.js +83 -83
- package/lib/soft_launch_pack.js +78 -78
- package/lib/stablecoin_lane_contract.js +76 -76
- package/lib/stripe_mpp_lane_contract.js +96 -96
- package/lib/stripe_mpp_payment_front.js +158 -158
- package/lib/telemetry_lane_contract.js +54 -54
- package/lib/treasury_destinations_contract.js +764 -764
- package/lib/treasury_egress_policy_contract.js +91 -91
- package/lib/treasury_lane_contract.js +84 -84
- package/lib/trust_portability_boundary_contract.js +72 -72
- package/lib/x402_facilitator.js +155 -0
- package/lib/x402_lane_contract.js +118 -118
- package/package.json +106 -105
- package/scripts/registry_cli.js +275 -275
- package/scripts/verify_adapters.js +554 -554
- package/scripts/verify_all.js +4962 -4962
- package/scripts/verify_control_plane_contracts.js +34 -34
- package/scripts/verify_control_plane_routes.js +70 -70
- package/scripts/verify_delivery_summary.js +112 -112
- package/scripts/verify_examples.js +19 -19
- package/scripts/verify_first_run_conversions.js +81 -81
- package/scripts/verify_framework_provider_promotion.js +152 -152
- package/scripts/verify_full_catalog.js +174 -174
- package/scripts/verify_integrations.js +620 -620
- package/scripts/verify_lifecycle_continuity.js +96 -96
- package/scripts/verify_market_lane_depth.js +94 -94
- package/scripts/verify_market_lane_promotion.js +103 -103
- package/scripts/verify_market_lane_traces.js +98 -98
- package/scripts/verify_market_lanes.js +102 -102
- package/scripts/verify_operator_observability_boundary.js +83 -83
- package/scripts/verify_pricing_experiment_plan.js +124 -124
- package/scripts/verify_provider_runtime_breadth.js +109 -109
- package/scripts/verify_provider_runtime_journeys.js +111 -111
- package/scripts/verify_revenue_launch_paths.js +105 -105
- package/scripts/verify_runtime_durability.js +52 -52
- package/scripts/verify_service.js +15410 -15250
- package/scripts/verify_tooling.js +1412 -1412
- package/scripts/verify_treasury_public_boundary.js +97 -97
- package/scripts/verify_x402_facilitator.js +174 -0
- package/server.js +11117 -11006
- package/.env.production.checklist +0 -77
- package/.env.production.template +0 -54
- package/.github/workflows/publish-mcp-executor.yml +0 -43
- package/ADAPTER_PARTNER_PATH.md +0 -47
- package/ADAPTER_PROMOTION_START_HERE.md +0 -44
- package/BOLT_BINDINGS.production.worksheet.json +0 -31
- package/EXECUTION_TARGETS.production.worksheet.json +0 -73
- package/GO_LIVE_OPERATOR_PACK.md +0 -412
- package/L402_BINDINGS.production.worksheet.json +0 -30
- package/OPERATIONS_RUNBOOK.md +0 -115
- package/OPERATOR_START_HERE.md +0 -63
- package/OUTREACH_MESSAGES.md +0 -19
- package/OUTREACH_START_HERE.md +0 -36
- package/PRODUCTION_MANUAL_CLOSEOUT_SEQUENCE.md +0 -172
- package/PROGRAM_COMPLETE_RELEASE.md +0 -63
- package/PROGRAM_STATUS.md +0 -57
- package/PUBLISH_PLAN.md +0 -26
- package/RELEASE_CHECKLIST.md +0 -16
- package/SOFT_LAUNCH_KIT.md +0 -47
- package/services/mcp-execution-target/DISCOVERY_REGISTRY_PLAYBOOK.md +0 -141
- package/services/mcp-execution-target/README.md +0 -319
- package/services/mcp-execution-target/package.json +0 -14
- package/services/mcp-execution-target/server.js +0 -1031
- package/services/mcp-execution-target/server.json +0 -16
- package/services/mcp-execution-target/verify.js +0 -308
|
@@ -1,96 +1,96 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
const assert = require("assert");
|
|
4
|
-
const { once } = require("events");
|
|
5
|
-
const { createServer } = require("../server");
|
|
6
|
-
const {
|
|
7
|
-
buildLifecycleContinuityPack,
|
|
8
|
-
summarizeLifecycleContinuityPack
|
|
9
|
-
} = require("../lib/lifecycle_continuity_contract");
|
|
10
|
-
|
|
11
|
-
async function getJson(baseUrl, pathname) {
|
|
12
|
-
const response = await fetch(`${baseUrl}${pathname}`);
|
|
13
|
-
return {
|
|
14
|
-
status: response.status,
|
|
15
|
-
json: await response.json()
|
|
16
|
-
};
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
function assertSummary(summary) {
|
|
20
|
-
assert.strictEqual(summary.ok, true, "lifecycle continuity summary ok flag missing");
|
|
21
|
-
assert.strictEqual(summary.lifecycle_stage_count >= 13, true, "lifecycle continuity stage count missing");
|
|
22
|
-
assert.strictEqual(summary.fully_surfaced_lifecycle_count >= 12, true, "lifecycle continuity fully surfaced count missing");
|
|
23
|
-
assert.strictEqual(summary.first_party_callable_lifecycle_count >= 10, true, "lifecycle continuity first-party callable count missing");
|
|
24
|
-
assert.strictEqual(summary.proof_followthrough_lifecycle_count >= 3, true, "lifecycle continuity proof followthrough count missing");
|
|
25
|
-
assert.strictEqual(summary.dispute_followthrough_lifecycle_count >= 2, true, "lifecycle continuity dispute followthrough count missing");
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
function assertPack(pack) {
|
|
29
|
-
assert.strictEqual(pack.ok, true, "lifecycle continuity pack ok flag missing");
|
|
30
|
-
assert.strictEqual(pack.category, "machine-commerce-lifecycle-continuity-pack", "lifecycle continuity pack category mismatch");
|
|
31
|
-
assert.strictEqual(Array.isArray(pack.lifecycle_stages), true, "lifecycle continuity stages missing");
|
|
32
|
-
assert.strictEqual(pack.lifecycle_stages.length >= 13, true, "lifecycle continuity stage list missing");
|
|
33
|
-
assert.strictEqual(
|
|
34
|
-
pack.lifecycle_stages.some((entry) => entry.lifecycle_stage === "verify" && entry.proof_followthrough === true),
|
|
35
|
-
true,
|
|
36
|
-
"lifecycle continuity verify followthrough missing"
|
|
37
|
-
);
|
|
38
|
-
assert.strictEqual(
|
|
39
|
-
pack.lifecycle_stages.some((entry) => entry.lifecycle_stage === "dispute_open" && entry.proof_followthrough === true),
|
|
40
|
-
true,
|
|
41
|
-
"lifecycle continuity dispute-open followthrough missing"
|
|
42
|
-
);
|
|
43
|
-
assert.strictEqual(
|
|
44
|
-
pack.lifecycle_stages.some((entry) => entry.lifecycle_stage === "dispute_fetch" && entry.proof_followthrough === true),
|
|
45
|
-
true,
|
|
46
|
-
"lifecycle continuity dispute-fetch followthrough missing"
|
|
47
|
-
);
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
async function main() {
|
|
51
|
-
const pack = buildLifecycleContinuityPack();
|
|
52
|
-
const summary = summarizeLifecycleContinuityPack();
|
|
53
|
-
assertPack(pack);
|
|
54
|
-
assertSummary(summary);
|
|
55
|
-
|
|
56
|
-
const server = createServer();
|
|
57
|
-
server.listen(0, "127.0.0.1");
|
|
58
|
-
await once(server, "listening");
|
|
59
|
-
|
|
60
|
-
const address = server.address();
|
|
61
|
-
const baseUrl = `http://127.0.0.1:${address.port}`;
|
|
62
|
-
|
|
63
|
-
try {
|
|
64
|
-
const packResponse = await getJson(baseUrl, "/v1/lifecycle-continuity");
|
|
65
|
-
assert.strictEqual(packResponse.status, 200, "lifecycle continuity pack route failed");
|
|
66
|
-
assertPack(packResponse.json);
|
|
67
|
-
|
|
68
|
-
const summaryResponse = await getJson(baseUrl, "/v1/lifecycle-continuity/summary");
|
|
69
|
-
assert.strictEqual(summaryResponse.status, 200, "lifecycle continuity summary route failed");
|
|
70
|
-
assertSummary(summaryResponse.json);
|
|
71
|
-
|
|
72
|
-
const verifyDetail = await getJson(baseUrl, "/v1/lifecycle-continuity/verify");
|
|
73
|
-
assert.strictEqual(verifyDetail.status, 200, "lifecycle continuity verify detail route failed");
|
|
74
|
-
assert.strictEqual(verifyDetail.json.stage.lifecycle_stage, "verify", "lifecycle continuity verify detail mismatch");
|
|
75
|
-
assert.strictEqual(verifyDetail.json.stage.proof_followthrough, true, "lifecycle continuity verify detail followthrough missing");
|
|
76
|
-
} finally {
|
|
77
|
-
await new Promise((resolve) => server.close(resolve));
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
console.log(JSON.stringify({
|
|
81
|
-
ok: true,
|
|
82
|
-
product: "xytara",
|
|
83
|
-
category: "machine-commerce-lifecycle-continuity-verification",
|
|
84
|
-
verification_version: "xytara-lifecycle-continuity-verification-v1",
|
|
85
|
-
lifecycle_stage_count: summary.lifecycle_stage_count,
|
|
86
|
-
fully_surfaced_lifecycle_count: summary.fully_surfaced_lifecycle_count,
|
|
87
|
-
proof_followthrough_lifecycle_count: summary.proof_followthrough_lifecycle_count,
|
|
88
|
-
dispute_followthrough_lifecycle_count: summary.dispute_followthrough_lifecycle_count,
|
|
89
|
-
boundary: "lifecycle_continuity_should_be_publicly_inspectable_with_xoonya_followthrough_explicit"
|
|
90
|
-
}, null, 2));
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
main().catch((error) => {
|
|
94
|
-
console.error(error && error.stack ? error.stack : error);
|
|
95
|
-
process.exit(1);
|
|
96
|
-
});
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
const assert = require("assert");
|
|
4
|
+
const { once } = require("events");
|
|
5
|
+
const { createServer } = require("../server");
|
|
6
|
+
const {
|
|
7
|
+
buildLifecycleContinuityPack,
|
|
8
|
+
summarizeLifecycleContinuityPack
|
|
9
|
+
} = require("../lib/lifecycle_continuity_contract");
|
|
10
|
+
|
|
11
|
+
async function getJson(baseUrl, pathname) {
|
|
12
|
+
const response = await fetch(`${baseUrl}${pathname}`);
|
|
13
|
+
return {
|
|
14
|
+
status: response.status,
|
|
15
|
+
json: await response.json()
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function assertSummary(summary) {
|
|
20
|
+
assert.strictEqual(summary.ok, true, "lifecycle continuity summary ok flag missing");
|
|
21
|
+
assert.strictEqual(summary.lifecycle_stage_count >= 13, true, "lifecycle continuity stage count missing");
|
|
22
|
+
assert.strictEqual(summary.fully_surfaced_lifecycle_count >= 12, true, "lifecycle continuity fully surfaced count missing");
|
|
23
|
+
assert.strictEqual(summary.first_party_callable_lifecycle_count >= 10, true, "lifecycle continuity first-party callable count missing");
|
|
24
|
+
assert.strictEqual(summary.proof_followthrough_lifecycle_count >= 3, true, "lifecycle continuity proof followthrough count missing");
|
|
25
|
+
assert.strictEqual(summary.dispute_followthrough_lifecycle_count >= 2, true, "lifecycle continuity dispute followthrough count missing");
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function assertPack(pack) {
|
|
29
|
+
assert.strictEqual(pack.ok, true, "lifecycle continuity pack ok flag missing");
|
|
30
|
+
assert.strictEqual(pack.category, "machine-commerce-lifecycle-continuity-pack", "lifecycle continuity pack category mismatch");
|
|
31
|
+
assert.strictEqual(Array.isArray(pack.lifecycle_stages), true, "lifecycle continuity stages missing");
|
|
32
|
+
assert.strictEqual(pack.lifecycle_stages.length >= 13, true, "lifecycle continuity stage list missing");
|
|
33
|
+
assert.strictEqual(
|
|
34
|
+
pack.lifecycle_stages.some((entry) => entry.lifecycle_stage === "verify" && entry.proof_followthrough === true),
|
|
35
|
+
true,
|
|
36
|
+
"lifecycle continuity verify followthrough missing"
|
|
37
|
+
);
|
|
38
|
+
assert.strictEqual(
|
|
39
|
+
pack.lifecycle_stages.some((entry) => entry.lifecycle_stage === "dispute_open" && entry.proof_followthrough === true),
|
|
40
|
+
true,
|
|
41
|
+
"lifecycle continuity dispute-open followthrough missing"
|
|
42
|
+
);
|
|
43
|
+
assert.strictEqual(
|
|
44
|
+
pack.lifecycle_stages.some((entry) => entry.lifecycle_stage === "dispute_fetch" && entry.proof_followthrough === true),
|
|
45
|
+
true,
|
|
46
|
+
"lifecycle continuity dispute-fetch followthrough missing"
|
|
47
|
+
);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
async function main() {
|
|
51
|
+
const pack = buildLifecycleContinuityPack();
|
|
52
|
+
const summary = summarizeLifecycleContinuityPack();
|
|
53
|
+
assertPack(pack);
|
|
54
|
+
assertSummary(summary);
|
|
55
|
+
|
|
56
|
+
const server = createServer();
|
|
57
|
+
server.listen(0, "127.0.0.1");
|
|
58
|
+
await once(server, "listening");
|
|
59
|
+
|
|
60
|
+
const address = server.address();
|
|
61
|
+
const baseUrl = `http://127.0.0.1:${address.port}`;
|
|
62
|
+
|
|
63
|
+
try {
|
|
64
|
+
const packResponse = await getJson(baseUrl, "/v1/lifecycle-continuity");
|
|
65
|
+
assert.strictEqual(packResponse.status, 200, "lifecycle continuity pack route failed");
|
|
66
|
+
assertPack(packResponse.json);
|
|
67
|
+
|
|
68
|
+
const summaryResponse = await getJson(baseUrl, "/v1/lifecycle-continuity/summary");
|
|
69
|
+
assert.strictEqual(summaryResponse.status, 200, "lifecycle continuity summary route failed");
|
|
70
|
+
assertSummary(summaryResponse.json);
|
|
71
|
+
|
|
72
|
+
const verifyDetail = await getJson(baseUrl, "/v1/lifecycle-continuity/verify");
|
|
73
|
+
assert.strictEqual(verifyDetail.status, 200, "lifecycle continuity verify detail route failed");
|
|
74
|
+
assert.strictEqual(verifyDetail.json.stage.lifecycle_stage, "verify", "lifecycle continuity verify detail mismatch");
|
|
75
|
+
assert.strictEqual(verifyDetail.json.stage.proof_followthrough, true, "lifecycle continuity verify detail followthrough missing");
|
|
76
|
+
} finally {
|
|
77
|
+
await new Promise((resolve) => server.close(resolve));
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
console.log(JSON.stringify({
|
|
81
|
+
ok: true,
|
|
82
|
+
product: "xytara",
|
|
83
|
+
category: "machine-commerce-lifecycle-continuity-verification",
|
|
84
|
+
verification_version: "xytara-lifecycle-continuity-verification-v1",
|
|
85
|
+
lifecycle_stage_count: summary.lifecycle_stage_count,
|
|
86
|
+
fully_surfaced_lifecycle_count: summary.fully_surfaced_lifecycle_count,
|
|
87
|
+
proof_followthrough_lifecycle_count: summary.proof_followthrough_lifecycle_count,
|
|
88
|
+
dispute_followthrough_lifecycle_count: summary.dispute_followthrough_lifecycle_count,
|
|
89
|
+
boundary: "lifecycle_continuity_should_be_publicly_inspectable_with_xoonya_followthrough_explicit"
|
|
90
|
+
}, null, 2));
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
main().catch((error) => {
|
|
94
|
+
console.error(error && error.stack ? error.stack : error);
|
|
95
|
+
process.exit(1);
|
|
96
|
+
});
|
|
@@ -1,94 +1,94 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
const assert = require("assert");
|
|
4
|
-
const { createServer } = require("../server");
|
|
5
|
-
|
|
6
|
-
async function getJson(baseUrl, path) {
|
|
7
|
-
const response = await fetch(`${baseUrl}${path}`);
|
|
8
|
-
return {
|
|
9
|
-
status: response.status,
|
|
10
|
-
json: await response.json()
|
|
11
|
-
};
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
async function main() {
|
|
15
|
-
const previousExecutionTargets = process.env.XYTARA_EXECUTION_TARGETS_JSON;
|
|
16
|
-
process.env.XYTARA_EXECUTION_TARGETS_JSON = JSON.stringify([
|
|
17
|
-
{
|
|
18
|
-
target_id: "verify-market-lane-depth-mcp-target",
|
|
19
|
-
task_ref: "adapter.mcp.invoke",
|
|
20
|
-
endpoint_url: "http://127.0.0.1:65535/execute",
|
|
21
|
-
provider: "xytara_mcp_executor",
|
|
22
|
-
tool_name: "summarize",
|
|
23
|
-
auth_token: "verify-market-lane-depth-bearer",
|
|
24
|
-
timeout_ms: 1500,
|
|
25
|
-
enabled: true
|
|
26
|
-
},
|
|
27
|
-
{
|
|
28
|
-
target_id: "verify-market-lane-depth-zones-target",
|
|
29
|
-
task_ref: "adapter.mcp.invoke",
|
|
30
|
-
endpoint_url: "http://127.0.0.1:65535/execute",
|
|
31
|
-
provider: "xytara_mcp_executor",
|
|
32
|
-
tool_name: "zones.lookup",
|
|
33
|
-
auth_token: "verify-market-lane-depth-bearer",
|
|
34
|
-
timeout_ms: 1500,
|
|
35
|
-
enabled: true
|
|
36
|
-
}
|
|
37
|
-
]);
|
|
38
|
-
const server = createServer();
|
|
39
|
-
await new Promise((resolve) => server.listen(0, "127.0.0.1", resolve));
|
|
40
|
-
const address = server.address();
|
|
41
|
-
const baseUrl = `http://127.0.0.1:${address.port}`;
|
|
42
|
-
|
|
43
|
-
try {
|
|
44
|
-
const pack = await getJson(baseUrl, "/v1/full-catalog/market-lanes/depth");
|
|
45
|
-
assert.strictEqual(pack.status, 200, "market lane depth route failed");
|
|
46
|
-
assert.strictEqual(pack.json.category, "machine-commerce-market-lane-depth-pack", "market lane depth category mismatch");
|
|
47
|
-
assert.strictEqual(pack.json.market_lane_depth_count >= 3, true, "market lane depth count missing");
|
|
48
|
-
assert.strictEqual(
|
|
49
|
-
pack.json.market_lane_depths.some((entry) => entry.market_class === "compute" && entry.provider_live_anchor_count >= 1),
|
|
50
|
-
true,
|
|
51
|
-
"compute provider-live depth missing"
|
|
52
|
-
);
|
|
53
|
-
assert.strictEqual(
|
|
54
|
-
pack.json.market_lane_depths.some((entry) => entry.market_class === "messaging" && entry.callable_surface_count >= 6),
|
|
55
|
-
true,
|
|
56
|
-
"messaging callable depth missing"
|
|
57
|
-
);
|
|
58
|
-
assert.strictEqual(
|
|
59
|
-
pack.json.market_lane_depths.some((entry) => entry.market_class === "treasury_payments" && entry.activation_profile_count >= 3),
|
|
60
|
-
true,
|
|
61
|
-
"treasury activation depth missing"
|
|
62
|
-
);
|
|
63
|
-
|
|
64
|
-
const summary = await getJson(baseUrl, "/v1/full-catalog/market-lanes/depth/summary");
|
|
65
|
-
assert.strictEqual(summary.status, 200, "market lane depth summary route failed");
|
|
66
|
-
assert.strictEqual(summary.json.market_lane_depth_count >= 3, true, "market lane depth summary count missing");
|
|
67
|
-
assert.strictEqual(summary.json.provider_live_anchor_lane_count >= 1, true, "market lane depth provider-live count missing");
|
|
68
|
-
assert.strictEqual(summary.json.first_party_callable_lane_count >= 3, true, "market lane depth callable count missing");
|
|
69
|
-
|
|
70
|
-
const compute = await getJson(baseUrl, "/v1/full-catalog/market-lanes/depth/compute");
|
|
71
|
-
assert.strictEqual(compute.status, 200, "market lane depth compute detail route failed");
|
|
72
|
-
assert.strictEqual(compute.json.depth.depth_state, "provider_live_path_deepened", "compute depth state mismatch");
|
|
73
|
-
assert.strictEqual(compute.json.depth.promotion_gates.auth_ready, true, "compute auth gate missing");
|
|
74
|
-
|
|
75
|
-
const messaging = await getJson(baseUrl, "/v1/full-catalog/market-lanes/depth/messaging");
|
|
76
|
-
assert.strictEqual(messaging.status, 200, "market lane depth messaging detail route failed");
|
|
77
|
-
assert.strictEqual(messaging.json.depth.promotion_gates.event_mesh_ready, true, "messaging event-mesh gate missing");
|
|
78
|
-
|
|
79
|
-
const treasury = await getJson(baseUrl, "/v1/full-catalog/market-lanes/depth/treasury_payments");
|
|
80
|
-
assert.strictEqual(treasury.status, 200, "market lane depth treasury detail route failed");
|
|
81
|
-
assert.strictEqual(treasury.json.depth.promotion_gates.settlement_family_ready, true, "treasury settlement-family gate missing");
|
|
82
|
-
|
|
83
|
-
console.log("xytara verify:market-lane-depth passed");
|
|
84
|
-
} finally {
|
|
85
|
-
await new Promise((resolve) => server.close(resolve));
|
|
86
|
-
if (previousExecutionTargets === undefined) delete process.env.XYTARA_EXECUTION_TARGETS_JSON;
|
|
87
|
-
else process.env.XYTARA_EXECUTION_TARGETS_JSON = previousExecutionTargets;
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
main().catch((error) => {
|
|
92
|
-
console.error(error);
|
|
93
|
-
process.exit(1);
|
|
94
|
-
});
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
const assert = require("assert");
|
|
4
|
+
const { createServer } = require("../server");
|
|
5
|
+
|
|
6
|
+
async function getJson(baseUrl, path) {
|
|
7
|
+
const response = await fetch(`${baseUrl}${path}`);
|
|
8
|
+
return {
|
|
9
|
+
status: response.status,
|
|
10
|
+
json: await response.json()
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
async function main() {
|
|
15
|
+
const previousExecutionTargets = process.env.XYTARA_EXECUTION_TARGETS_JSON;
|
|
16
|
+
process.env.XYTARA_EXECUTION_TARGETS_JSON = JSON.stringify([
|
|
17
|
+
{
|
|
18
|
+
target_id: "verify-market-lane-depth-mcp-target",
|
|
19
|
+
task_ref: "adapter.mcp.invoke",
|
|
20
|
+
endpoint_url: "http://127.0.0.1:65535/execute",
|
|
21
|
+
provider: "xytara_mcp_executor",
|
|
22
|
+
tool_name: "summarize",
|
|
23
|
+
auth_token: "verify-market-lane-depth-bearer",
|
|
24
|
+
timeout_ms: 1500,
|
|
25
|
+
enabled: true
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
target_id: "verify-market-lane-depth-zones-target",
|
|
29
|
+
task_ref: "adapter.mcp.invoke",
|
|
30
|
+
endpoint_url: "http://127.0.0.1:65535/execute",
|
|
31
|
+
provider: "xytara_mcp_executor",
|
|
32
|
+
tool_name: "zones.lookup",
|
|
33
|
+
auth_token: "verify-market-lane-depth-bearer",
|
|
34
|
+
timeout_ms: 1500,
|
|
35
|
+
enabled: true
|
|
36
|
+
}
|
|
37
|
+
]);
|
|
38
|
+
const server = createServer();
|
|
39
|
+
await new Promise((resolve) => server.listen(0, "127.0.0.1", resolve));
|
|
40
|
+
const address = server.address();
|
|
41
|
+
const baseUrl = `http://127.0.0.1:${address.port}`;
|
|
42
|
+
|
|
43
|
+
try {
|
|
44
|
+
const pack = await getJson(baseUrl, "/v1/full-catalog/market-lanes/depth");
|
|
45
|
+
assert.strictEqual(pack.status, 200, "market lane depth route failed");
|
|
46
|
+
assert.strictEqual(pack.json.category, "machine-commerce-market-lane-depth-pack", "market lane depth category mismatch");
|
|
47
|
+
assert.strictEqual(pack.json.market_lane_depth_count >= 3, true, "market lane depth count missing");
|
|
48
|
+
assert.strictEqual(
|
|
49
|
+
pack.json.market_lane_depths.some((entry) => entry.market_class === "compute" && entry.provider_live_anchor_count >= 1),
|
|
50
|
+
true,
|
|
51
|
+
"compute provider-live depth missing"
|
|
52
|
+
);
|
|
53
|
+
assert.strictEqual(
|
|
54
|
+
pack.json.market_lane_depths.some((entry) => entry.market_class === "messaging" && entry.callable_surface_count >= 6),
|
|
55
|
+
true,
|
|
56
|
+
"messaging callable depth missing"
|
|
57
|
+
);
|
|
58
|
+
assert.strictEqual(
|
|
59
|
+
pack.json.market_lane_depths.some((entry) => entry.market_class === "treasury_payments" && entry.activation_profile_count >= 3),
|
|
60
|
+
true,
|
|
61
|
+
"treasury activation depth missing"
|
|
62
|
+
);
|
|
63
|
+
|
|
64
|
+
const summary = await getJson(baseUrl, "/v1/full-catalog/market-lanes/depth/summary");
|
|
65
|
+
assert.strictEqual(summary.status, 200, "market lane depth summary route failed");
|
|
66
|
+
assert.strictEqual(summary.json.market_lane_depth_count >= 3, true, "market lane depth summary count missing");
|
|
67
|
+
assert.strictEqual(summary.json.provider_live_anchor_lane_count >= 1, true, "market lane depth provider-live count missing");
|
|
68
|
+
assert.strictEqual(summary.json.first_party_callable_lane_count >= 3, true, "market lane depth callable count missing");
|
|
69
|
+
|
|
70
|
+
const compute = await getJson(baseUrl, "/v1/full-catalog/market-lanes/depth/compute");
|
|
71
|
+
assert.strictEqual(compute.status, 200, "market lane depth compute detail route failed");
|
|
72
|
+
assert.strictEqual(compute.json.depth.depth_state, "provider_live_path_deepened", "compute depth state mismatch");
|
|
73
|
+
assert.strictEqual(compute.json.depth.promotion_gates.auth_ready, true, "compute auth gate missing");
|
|
74
|
+
|
|
75
|
+
const messaging = await getJson(baseUrl, "/v1/full-catalog/market-lanes/depth/messaging");
|
|
76
|
+
assert.strictEqual(messaging.status, 200, "market lane depth messaging detail route failed");
|
|
77
|
+
assert.strictEqual(messaging.json.depth.promotion_gates.event_mesh_ready, true, "messaging event-mesh gate missing");
|
|
78
|
+
|
|
79
|
+
const treasury = await getJson(baseUrl, "/v1/full-catalog/market-lanes/depth/treasury_payments");
|
|
80
|
+
assert.strictEqual(treasury.status, 200, "market lane depth treasury detail route failed");
|
|
81
|
+
assert.strictEqual(treasury.json.depth.promotion_gates.settlement_family_ready, true, "treasury settlement-family gate missing");
|
|
82
|
+
|
|
83
|
+
console.log("xytara verify:market-lane-depth passed");
|
|
84
|
+
} finally {
|
|
85
|
+
await new Promise((resolve) => server.close(resolve));
|
|
86
|
+
if (previousExecutionTargets === undefined) delete process.env.XYTARA_EXECUTION_TARGETS_JSON;
|
|
87
|
+
else process.env.XYTARA_EXECUTION_TARGETS_JSON = previousExecutionTargets;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
main().catch((error) => {
|
|
92
|
+
console.error(error);
|
|
93
|
+
process.exit(1);
|
|
94
|
+
});
|
|
@@ -1,103 +1,103 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
const assert = require("assert");
|
|
4
|
-
const { createServer } = require("../server");
|
|
5
|
-
const {
|
|
6
|
-
buildMarketLanePromotionPack,
|
|
7
|
-
validateMarketLanePromotionEvidence
|
|
8
|
-
} = require("../lib/market_lane_promotion_contract");
|
|
9
|
-
|
|
10
|
-
async function getJson(baseUrl, path) {
|
|
11
|
-
const response = await fetch(`${baseUrl}${path}`);
|
|
12
|
-
return {
|
|
13
|
-
status: response.status,
|
|
14
|
-
json: await response.json()
|
|
15
|
-
};
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
async function main() {
|
|
19
|
-
const previousExecutionTargets = process.env.XYTARA_EXECUTION_TARGETS_JSON;
|
|
20
|
-
process.env.XYTARA_EXECUTION_TARGETS_JSON = JSON.stringify([
|
|
21
|
-
{
|
|
22
|
-
target_id: "verify-market-lane-promotion-mcp-target",
|
|
23
|
-
task_ref: "adapter.mcp.invoke",
|
|
24
|
-
endpoint_url: "http://127.0.0.1:65535/execute",
|
|
25
|
-
provider: "xytara_mcp_executor",
|
|
26
|
-
tool_name: "summarize",
|
|
27
|
-
auth_token: "verify-market-lane-promotion-bearer",
|
|
28
|
-
timeout_ms: 1500,
|
|
29
|
-
enabled: true
|
|
30
|
-
}
|
|
31
|
-
]);
|
|
32
|
-
const server = createServer();
|
|
33
|
-
await new Promise((resolve) => server.listen(0, "127.0.0.1", resolve));
|
|
34
|
-
const address = server.address();
|
|
35
|
-
const baseUrl = `http://127.0.0.1:${address.port}`;
|
|
36
|
-
|
|
37
|
-
try {
|
|
38
|
-
const pack = await getJson(baseUrl, "/v1/full-catalog/market-lanes/promotion");
|
|
39
|
-
assert.strictEqual(pack.status, 200, "market lane promotion route failed");
|
|
40
|
-
assert.strictEqual(pack.json.category, "machine-commerce-market-lane-promotion-pack", "market lane promotion category mismatch");
|
|
41
|
-
assert.strictEqual(pack.json.market_lane_promotion_count >= 3, true, "market lane promotion count missing");
|
|
42
|
-
assert.strictEqual(pack.json.provider_live_ready_count >= 1, true, "market lane promotion provider-live count missing");
|
|
43
|
-
assert.strictEqual(pack.json.bounded_live_ready_count >= 2, true, "market lane promotion bounded-live count missing");
|
|
44
|
-
|
|
45
|
-
const summary = await getJson(baseUrl, "/v1/full-catalog/market-lanes/promotion/summary");
|
|
46
|
-
assert.strictEqual(summary.status, 200, "market lane promotion summary route failed");
|
|
47
|
-
assert.strictEqual(summary.json.market_lane_promotion_count >= 3, true, "market lane promotion summary count missing");
|
|
48
|
-
assert.strictEqual(summary.json.deterministic_rejection_code_count >= 8, true, "market lane promotion rejection code count missing");
|
|
49
|
-
|
|
50
|
-
const compute = await getJson(baseUrl, "/v1/full-catalog/market-lanes/promotion/compute");
|
|
51
|
-
assert.strictEqual(compute.status, 200, "market lane promotion compute detail route failed");
|
|
52
|
-
assert.strictEqual(compute.json.promotion.promotion_state, "provider_live_promotion_ready", "compute promotion state mismatch");
|
|
53
|
-
assert.strictEqual(compute.json.promotion.provider_live_anchor_required, true, "compute provider-live requirement missing");
|
|
54
|
-
|
|
55
|
-
const messaging = await getJson(baseUrl, "/v1/full-catalog/market-lanes/promotion/messaging");
|
|
56
|
-
assert.strictEqual(messaging.status, 200, "market lane promotion messaging detail route failed");
|
|
57
|
-
assert.strictEqual(messaging.json.promotion.gate_assertions.event_mesh_ready, true, "messaging event mesh promotion gate missing");
|
|
58
|
-
|
|
59
|
-
const treasury = await getJson(baseUrl, "/v1/full-catalog/market-lanes/promotion/treasury_payments");
|
|
60
|
-
assert.strictEqual(treasury.status, 200, "market lane promotion treasury detail route failed");
|
|
61
|
-
assert.strictEqual(treasury.json.promotion.gate_assertions.settlement_family_ready, true, "treasury settlement-family promotion gate missing");
|
|
62
|
-
|
|
63
|
-
const promotionPack = buildMarketLanePromotionPack();
|
|
64
|
-
const validEvidence = {
|
|
65
|
-
market_class: "compute",
|
|
66
|
-
operator_evidence_ref: "ops.market_lane.compute.promotion.2026-04-24",
|
|
67
|
-
claim_boundary_ack: compute.json.promotion.claim_boundary,
|
|
68
|
-
gate_assertions: Object.fromEntries(compute.json.promotion.promotion_requirements.map((requirement) => [requirement, true])),
|
|
69
|
-
provider_live_anchor_ref: "ops.market_lane.compute.provider_anchor.2026-04-24",
|
|
70
|
-
trace_evidence_ref: "ops.market_lane.compute.trace.2026-04-24"
|
|
71
|
-
};
|
|
72
|
-
const validValidation = validateMarketLanePromotionEvidence(promotionPack, validEvidence);
|
|
73
|
-
assert.strictEqual(validValidation.promotion_allowed, true, "complete market lane promotion evidence should validate");
|
|
74
|
-
|
|
75
|
-
const invalidValidation = validateMarketLanePromotionEvidence(promotionPack, {
|
|
76
|
-
market_class: "compute",
|
|
77
|
-
operator_evidence_ref: "",
|
|
78
|
-
claim_boundary_ack: "",
|
|
79
|
-
gate_assertions: { auth_ready: true },
|
|
80
|
-
provider_live_anchor_ref: "",
|
|
81
|
-
trace_evidence_ref: "",
|
|
82
|
-
bearer_token: "bearer not-allowed"
|
|
83
|
-
});
|
|
84
|
-
assert.strictEqual(invalidValidation.promotion_allowed, false, "invalid market lane promotion evidence should be rejected");
|
|
85
|
-
assert.strictEqual(invalidValidation.rejection_codes.includes("operator_evidence_missing"), true, "missing operator evidence rejection missing");
|
|
86
|
-
assert.strictEqual(invalidValidation.rejection_codes.includes("claim_boundary_ack_missing"), true, "missing claim boundary rejection missing");
|
|
87
|
-
assert.strictEqual(invalidValidation.rejection_codes.includes("required_gate_assertion_missing"), true, "missing gate assertion rejection missing");
|
|
88
|
-
assert.strictEqual(invalidValidation.rejection_codes.includes("provider_anchor_evidence_missing"), true, "missing provider anchor rejection missing");
|
|
89
|
-
assert.strictEqual(invalidValidation.rejection_codes.includes("trace_evidence_missing"), true, "missing trace evidence rejection missing");
|
|
90
|
-
assert.strictEqual(invalidValidation.rejection_codes.includes("secret_material_forbidden"), true, "secret material rejection missing");
|
|
91
|
-
|
|
92
|
-
console.log("xytara verify:market-lane-promotion passed");
|
|
93
|
-
} finally {
|
|
94
|
-
await new Promise((resolve) => server.close(resolve));
|
|
95
|
-
if (previousExecutionTargets === undefined) delete process.env.XYTARA_EXECUTION_TARGETS_JSON;
|
|
96
|
-
else process.env.XYTARA_EXECUTION_TARGETS_JSON = previousExecutionTargets;
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
main().catch((error) => {
|
|
101
|
-
console.error(error);
|
|
102
|
-
process.exit(1);
|
|
103
|
-
});
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
const assert = require("assert");
|
|
4
|
+
const { createServer } = require("../server");
|
|
5
|
+
const {
|
|
6
|
+
buildMarketLanePromotionPack,
|
|
7
|
+
validateMarketLanePromotionEvidence
|
|
8
|
+
} = require("../lib/market_lane_promotion_contract");
|
|
9
|
+
|
|
10
|
+
async function getJson(baseUrl, path) {
|
|
11
|
+
const response = await fetch(`${baseUrl}${path}`);
|
|
12
|
+
return {
|
|
13
|
+
status: response.status,
|
|
14
|
+
json: await response.json()
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
async function main() {
|
|
19
|
+
const previousExecutionTargets = process.env.XYTARA_EXECUTION_TARGETS_JSON;
|
|
20
|
+
process.env.XYTARA_EXECUTION_TARGETS_JSON = JSON.stringify([
|
|
21
|
+
{
|
|
22
|
+
target_id: "verify-market-lane-promotion-mcp-target",
|
|
23
|
+
task_ref: "adapter.mcp.invoke",
|
|
24
|
+
endpoint_url: "http://127.0.0.1:65535/execute",
|
|
25
|
+
provider: "xytara_mcp_executor",
|
|
26
|
+
tool_name: "summarize",
|
|
27
|
+
auth_token: "verify-market-lane-promotion-bearer",
|
|
28
|
+
timeout_ms: 1500,
|
|
29
|
+
enabled: true
|
|
30
|
+
}
|
|
31
|
+
]);
|
|
32
|
+
const server = createServer();
|
|
33
|
+
await new Promise((resolve) => server.listen(0, "127.0.0.1", resolve));
|
|
34
|
+
const address = server.address();
|
|
35
|
+
const baseUrl = `http://127.0.0.1:${address.port}`;
|
|
36
|
+
|
|
37
|
+
try {
|
|
38
|
+
const pack = await getJson(baseUrl, "/v1/full-catalog/market-lanes/promotion");
|
|
39
|
+
assert.strictEqual(pack.status, 200, "market lane promotion route failed");
|
|
40
|
+
assert.strictEqual(pack.json.category, "machine-commerce-market-lane-promotion-pack", "market lane promotion category mismatch");
|
|
41
|
+
assert.strictEqual(pack.json.market_lane_promotion_count >= 3, true, "market lane promotion count missing");
|
|
42
|
+
assert.strictEqual(pack.json.provider_live_ready_count >= 1, true, "market lane promotion provider-live count missing");
|
|
43
|
+
assert.strictEqual(pack.json.bounded_live_ready_count >= 2, true, "market lane promotion bounded-live count missing");
|
|
44
|
+
|
|
45
|
+
const summary = await getJson(baseUrl, "/v1/full-catalog/market-lanes/promotion/summary");
|
|
46
|
+
assert.strictEqual(summary.status, 200, "market lane promotion summary route failed");
|
|
47
|
+
assert.strictEqual(summary.json.market_lane_promotion_count >= 3, true, "market lane promotion summary count missing");
|
|
48
|
+
assert.strictEqual(summary.json.deterministic_rejection_code_count >= 8, true, "market lane promotion rejection code count missing");
|
|
49
|
+
|
|
50
|
+
const compute = await getJson(baseUrl, "/v1/full-catalog/market-lanes/promotion/compute");
|
|
51
|
+
assert.strictEqual(compute.status, 200, "market lane promotion compute detail route failed");
|
|
52
|
+
assert.strictEqual(compute.json.promotion.promotion_state, "provider_live_promotion_ready", "compute promotion state mismatch");
|
|
53
|
+
assert.strictEqual(compute.json.promotion.provider_live_anchor_required, true, "compute provider-live requirement missing");
|
|
54
|
+
|
|
55
|
+
const messaging = await getJson(baseUrl, "/v1/full-catalog/market-lanes/promotion/messaging");
|
|
56
|
+
assert.strictEqual(messaging.status, 200, "market lane promotion messaging detail route failed");
|
|
57
|
+
assert.strictEqual(messaging.json.promotion.gate_assertions.event_mesh_ready, true, "messaging event mesh promotion gate missing");
|
|
58
|
+
|
|
59
|
+
const treasury = await getJson(baseUrl, "/v1/full-catalog/market-lanes/promotion/treasury_payments");
|
|
60
|
+
assert.strictEqual(treasury.status, 200, "market lane promotion treasury detail route failed");
|
|
61
|
+
assert.strictEqual(treasury.json.promotion.gate_assertions.settlement_family_ready, true, "treasury settlement-family promotion gate missing");
|
|
62
|
+
|
|
63
|
+
const promotionPack = buildMarketLanePromotionPack();
|
|
64
|
+
const validEvidence = {
|
|
65
|
+
market_class: "compute",
|
|
66
|
+
operator_evidence_ref: "ops.market_lane.compute.promotion.2026-04-24",
|
|
67
|
+
claim_boundary_ack: compute.json.promotion.claim_boundary,
|
|
68
|
+
gate_assertions: Object.fromEntries(compute.json.promotion.promotion_requirements.map((requirement) => [requirement, true])),
|
|
69
|
+
provider_live_anchor_ref: "ops.market_lane.compute.provider_anchor.2026-04-24",
|
|
70
|
+
trace_evidence_ref: "ops.market_lane.compute.trace.2026-04-24"
|
|
71
|
+
};
|
|
72
|
+
const validValidation = validateMarketLanePromotionEvidence(promotionPack, validEvidence);
|
|
73
|
+
assert.strictEqual(validValidation.promotion_allowed, true, "complete market lane promotion evidence should validate");
|
|
74
|
+
|
|
75
|
+
const invalidValidation = validateMarketLanePromotionEvidence(promotionPack, {
|
|
76
|
+
market_class: "compute",
|
|
77
|
+
operator_evidence_ref: "",
|
|
78
|
+
claim_boundary_ack: "",
|
|
79
|
+
gate_assertions: { auth_ready: true },
|
|
80
|
+
provider_live_anchor_ref: "",
|
|
81
|
+
trace_evidence_ref: "",
|
|
82
|
+
bearer_token: "bearer not-allowed"
|
|
83
|
+
});
|
|
84
|
+
assert.strictEqual(invalidValidation.promotion_allowed, false, "invalid market lane promotion evidence should be rejected");
|
|
85
|
+
assert.strictEqual(invalidValidation.rejection_codes.includes("operator_evidence_missing"), true, "missing operator evidence rejection missing");
|
|
86
|
+
assert.strictEqual(invalidValidation.rejection_codes.includes("claim_boundary_ack_missing"), true, "missing claim boundary rejection missing");
|
|
87
|
+
assert.strictEqual(invalidValidation.rejection_codes.includes("required_gate_assertion_missing"), true, "missing gate assertion rejection missing");
|
|
88
|
+
assert.strictEqual(invalidValidation.rejection_codes.includes("provider_anchor_evidence_missing"), true, "missing provider anchor rejection missing");
|
|
89
|
+
assert.strictEqual(invalidValidation.rejection_codes.includes("trace_evidence_missing"), true, "missing trace evidence rejection missing");
|
|
90
|
+
assert.strictEqual(invalidValidation.rejection_codes.includes("secret_material_forbidden"), true, "secret material rejection missing");
|
|
91
|
+
|
|
92
|
+
console.log("xytara verify:market-lane-promotion passed");
|
|
93
|
+
} finally {
|
|
94
|
+
await new Promise((resolve) => server.close(resolve));
|
|
95
|
+
if (previousExecutionTargets === undefined) delete process.env.XYTARA_EXECUTION_TARGETS_JSON;
|
|
96
|
+
else process.env.XYTARA_EXECUTION_TARGETS_JSON = previousExecutionTargets;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
main().catch((error) => {
|
|
101
|
+
console.error(error);
|
|
102
|
+
process.exit(1);
|
|
103
|
+
});
|