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.
Files changed (373) hide show
  1. package/.env.example +67 -58
  2. package/ADAPTER_START_HERE.md +56 -56
  3. package/CARRIED_HANDOFF_DEMO.md +60 -60
  4. package/EXAMPLE_PATHS.md +53 -53
  5. package/FINAL_CONTRACT.md +498 -498
  6. package/LICENSE +201 -201
  7. package/NOTICE +3 -3
  8. package/PARTNER_READY_PATH.md +71 -71
  9. package/PUBLIC_DEMO_SCRIPT.md +78 -78
  10. package/README.md +6 -1
  11. package/REAL_PAYMENT_SETUP.md +32 -3
  12. package/RELEASE_NOTES.md +14 -14
  13. package/SERVICE_CONTRACT.md +419 -419
  14. package/START_HERE.md +1 -1
  15. package/SUPABASE_RUNTIME_STATE_SETUP.md +61 -61
  16. package/TERMINOLOGY.md +50 -50
  17. package/WHY_XYTARA_XOONYA.md +63 -63
  18. package/XT1_EXECUTION_TRUTH_STANDARD.md +78 -78
  19. package/XYTARA_ADAPTER_PROTOCOL_TRUTH_MODEL.md +75 -75
  20. package/XYTARA_AUTONOMOUS_ENTRY_MODEL.md +124 -124
  21. package/XYTARA_DEFAULT_PATH_MODEL.md +84 -84
  22. package/XYTARA_EXECUTION_TRUTH_MODEL.md +171 -171
  23. package/XYTARA_PAYMENT_RAIL_TRUTH_MODEL.md +68 -68
  24. package/adapters/AUTHORING_GUIDE.md +243 -243
  25. package/adapters/ONBOARDING_POSTURE.md +61 -61
  26. package/adapters/THIRD_PARTY_SUBMISSION_PROCESS.md +84 -84
  27. package/adapters/adapter-manifest.schema.json +283 -283
  28. package/adapters/examples/example-execution-adapter.js +61 -61
  29. package/adapters/examples/example-execution-adapter.manifest.json +81 -81
  30. package/adapters/examples/example-settlement-adapter.js +55 -55
  31. package/adapters/examples/example-settlement-adapter.manifest.json +78 -78
  32. package/adapters/examples/example-third-party-acp-registration.submission-bundle.json +124 -124
  33. package/adapters/examples/example-third-party-erc8004-registration.submission-bundle.json +121 -121
  34. package/adapters/examples/example-third-party-identity-registration.certification-pack.json +22 -22
  35. package/adapters/examples/example-third-party-identity-registration.record.json +26 -26
  36. package/adapters/examples/example-third-party-identity-registration.submission-bundle.json +126 -126
  37. package/adapters/examples/example-third-party-langchain-registration.submission-bundle.json +124 -124
  38. package/adapters/examples/example-third-party-mpp-registration.submission-bundle.json +120 -120
  39. package/adapters/examples/example-third-party-registration.certification-pack.json +22 -22
  40. package/adapters/examples/example-third-party-registration.record.json +28 -28
  41. package/adapters/examples/example-third-party-registration.submission-bundle.json +126 -126
  42. package/adapters/examples/example-third-party-settlement-registration.certification-pack.json +22 -22
  43. package/adapters/examples/example-third-party-settlement-registration.record.json +26 -26
  44. package/adapters/examples/example-third-party-settlement-registration.submission-bundle.json +127 -127
  45. package/adapters/examples/langchain-reference-execution-adapter.js +81 -81
  46. package/adapters/examples/langchain-reference-execution-adapter.manifest.json +79 -79
  47. package/adapters/examples/langgraph-reference-execution-adapter.js +81 -81
  48. package/adapters/examples/langgraph-reference-execution-adapter.manifest.json +79 -79
  49. package/adapters/examples/minimal-third-party-execution-adapter.js +61 -61
  50. package/adapters/examples/minimal-third-party-execution-adapter.manifest.json +79 -79
  51. package/adapters/examples/minimal-third-party-execution-registration.record.json +26 -26
  52. package/adapters/examples/minimal-third-party-execution.certification-pack.json +22 -22
  53. package/adapters/examples/minimal-third-party-execution.submission-bundle.json +126 -126
  54. package/adapters/integration-certification-pack.schema.json +82 -82
  55. package/adapters/integration-registration-record.schema.json +114 -114
  56. package/adapters/integration-submission-bundle-set.schema.json +39 -39
  57. package/adapters/integration-submission-bundle.schema.json +34 -34
  58. package/adapters/interfaces.js +56 -56
  59. package/bin/xytara-first-run.js +244 -244
  60. package/bin/xytara-release.js +1429 -1429
  61. package/bin/xytara-run.js +186 -186
  62. package/bin/xytara.js +80 -80
  63. package/client.js +3 -3
  64. package/examples/_demo_env.js +40 -0
  65. package/examples/adapter_review_walkthrough.js +54 -53
  66. package/examples/export_carried_handoff.js +81 -80
  67. package/examples/funded_runtime_walkthrough.js +71 -70
  68. package/examples/generated.carried-handoff.json +30 -0
  69. package/examples/partner_launch_walkthrough.js +44 -43
  70. package/examples/quickstart.js +3256 -3255
  71. package/fixtures/catalog.js +1134 -1134
  72. package/index.js +395 -395
  73. package/integrations/dispatch.js +276 -276
  74. package/integrations/registry-snapshot.schema.json +36 -36
  75. package/integrations/registry.js +2261 -2261
  76. package/integrations/views.js +28 -28
  77. package/lib/a2a_lane_contract.js +104 -104
  78. package/lib/a2c_lane_contract.js +111 -111
  79. package/lib/account_auth.js +518 -518
  80. package/lib/acp_lane_contract.js +54 -54
  81. package/lib/activity_audit_contract.js +322 -322
  82. package/lib/adapter_certification_contract.js +130 -130
  83. package/lib/adapter_depth_contract.js +156 -156
  84. package/lib/adapter_pack.js +118 -118
  85. package/lib/adapter_partner_pack.js +89 -89
  86. package/lib/adapter_promotion_pack.js +89 -89
  87. package/lib/adapter_protocol_truth_contract.js +229 -229
  88. package/lib/announcement_pack.js +61 -61
  89. package/lib/artifact_distribution_lane_contract.js +54 -54
  90. package/lib/asyncapi_contract.js +150 -150
  91. package/lib/auth_interop_contract.js +80 -80
  92. package/lib/authority_binding_lifecycle_contract.js +182 -182
  93. package/lib/autonomous_entry_contract.js +409 -409
  94. package/lib/bolt_lane_contract.js +55 -55
  95. package/lib/bolt_payment_front.js +172 -172
  96. package/lib/business_cockpit.js +378 -378
  97. package/lib/capability_execution_truth.js +272 -272
  98. package/lib/capability_registry.js +633 -633
  99. package/lib/catalog_contract.js +966 -966
  100. package/lib/catalog_family_model.js +193 -193
  101. package/lib/catalog_views.js +55 -55
  102. package/lib/checkout_event_security.js +142 -142
  103. package/lib/cloudevents_contract.js +80 -80
  104. package/lib/command_flow.js +411 -406
  105. package/lib/commerce_artifacts.js +503 -503
  106. package/lib/commerce_authority.js +449 -449
  107. package/lib/commerce_cases.js +317 -317
  108. package/lib/commerce_checkout.js +509 -509
  109. package/lib/commerce_client.js +7687 -7676
  110. package/lib/commerce_coordination.js +346 -346
  111. package/lib/commerce_economics.js +4017 -4016
  112. package/lib/commerce_identity.js +578 -578
  113. package/lib/commerce_quotes.js +237 -237
  114. package/lib/commerce_reports.js +14461 -14461
  115. package/lib/commerce_runtime.js +315 -315
  116. package/lib/commerce_shell.js +257 -257
  117. package/lib/crypto_agility_matrix.js +125 -125
  118. package/lib/default_path_contract.js +412 -412
  119. package/lib/delivery_summary_contract.js +95 -95
  120. package/lib/ecosystem_entry.js +64 -64
  121. package/lib/erc8004_lane_contract.js +65 -65
  122. package/lib/event_system_lane_contract.js +75 -75
  123. package/lib/execution_truth_contract.js +234 -234
  124. package/lib/external_credit_bridge.js +142 -142
  125. package/lib/external_execution_runtime.js +132 -132
  126. package/lib/feature_control_lane_contract.js +54 -54
  127. package/lib/first_run_conversion_contract.js +290 -290
  128. package/lib/framework_lane_contract.js +89 -89
  129. package/lib/framework_provider_promotion.js +235 -235
  130. package/lib/full_catalog_contract.js +525 -525
  131. package/lib/go_live_operator_pack.js +391 -391
  132. package/lib/http_transport.js +73 -73
  133. package/lib/identity_auth.js +175 -175
  134. package/lib/identity_interop_contract.js +82 -82
  135. package/lib/integration_matrix_contract.js +102 -102
  136. package/lib/l402_lane_contract.js +55 -55
  137. package/lib/l402_payment_front.js +192 -192
  138. package/lib/launch_narrative.js +53 -53
  139. package/lib/lifecycle_continuity_contract.js +115 -115
  140. package/lib/machine_identity_registry_contract.js +199 -199
  141. package/lib/major_rails_lane_contract.js +150 -150
  142. package/lib/market_lane_contract.js +467 -467
  143. package/lib/market_lane_depth_contract.js +182 -182
  144. package/lib/market_lane_promotion_contract.js +210 -210
  145. package/lib/market_lane_trace_contract.js +278 -278
  146. package/lib/mcp_lane_contract.js +137 -137
  147. package/lib/network_transport.js +110 -110
  148. package/lib/offline_verifiability_recovery_contract.js +155 -155
  149. package/lib/openapi_contract.js +296 -296
  150. package/lib/operational_receipt_contract.js +165 -165
  151. package/lib/operator_intelligence.js +407 -407
  152. package/lib/outreach_copy_pack.js +51 -51
  153. package/lib/outreach_message_pack.js +71 -71
  154. package/lib/outreach_proof.js +71 -71
  155. package/lib/outreach_target_pack.js +60 -60
  156. package/lib/partner_intelligence.js +105 -105
  157. package/lib/payment_config.js +239 -191
  158. package/lib/payment_front_registry.js +53 -53
  159. package/lib/payment_protocol_contract.js +165 -165
  160. package/lib/payment_rail_truth_contract.js +324 -324
  161. package/lib/payment_verification.js +312 -264
  162. package/lib/phase_10_closeout_pack.js +45 -45
  163. package/lib/phase_10_completion_pack.js +76 -76
  164. package/lib/phase_10_decision_record_pack.js +54 -54
  165. package/lib/phase_10_decision_resolution_pack.js +53 -53
  166. package/lib/phase_10_demand_signal_adapters_runtime_pack.js +74 -74
  167. package/lib/phase_10_ecosystem_backlog_triage_runtime_pack.js +74 -74
  168. package/lib/phase_10_freeze_baseline_pack.js +67 -67
  169. package/lib/phase_10_freeze_review_pack.js +64 -64
  170. package/lib/phase_10_gate_pack.js +57 -57
  171. package/lib/phase_10_long_tail_continuity_pack.js +80 -80
  172. package/lib/phase_10_long_tail_ecosystem_pack.js +66 -66
  173. package/lib/phase_10_niche_extension_registry_runtime_pack.js +74 -74
  174. package/lib/phase_1_claude_mcp_pack.js +60 -60
  175. package/lib/phase_1_claude_mcp_runtime_pack.js +52 -52
  176. package/lib/phase_1_ecosystem_pack.js +67 -67
  177. package/lib/phase_1_openai_codex_pack.js +60 -60
  178. package/lib/phase_1_openai_codex_runtime_pack.js +52 -52
  179. package/lib/phase_2_base_runtime_pack.js +71 -71
  180. package/lib/phase_2_base_usdc_runtime_pack.js +72 -72
  181. package/lib/phase_2_closeout_pack.js +65 -65
  182. package/lib/phase_2_completion_pack.js +113 -113
  183. package/lib/phase_2_decision_record_pack.js +66 -66
  184. package/lib/phase_2_decision_resolution_pack.js +69 -69
  185. package/lib/phase_2_eth_runtime_pack.js +70 -70
  186. package/lib/phase_2_evm_base_runtime_pack.js +73 -73
  187. package/lib/phase_2_evm_runtime_pack.js +71 -71
  188. package/lib/phase_2_flip_preview_pack.js +60 -60
  189. package/lib/phase_2_freeze_review_pack.js +99 -99
  190. package/lib/phase_2_gate_pack.js +77 -77
  191. package/lib/phase_2_payment_rails_pack.js +71 -71
  192. package/lib/phase_2_usdc_runtime_pack.js +71 -71
  193. package/lib/phase_3_brc_runtime_pack.js +81 -81
  194. package/lib/phase_3_bsv_teranode_runtime_pack.js +83 -83
  195. package/lib/phase_3_closeout_pack.js +62 -62
  196. package/lib/phase_3_completion_pack.js +94 -94
  197. package/lib/phase_3_decision_record_pack.js +64 -64
  198. package/lib/phase_3_decision_resolution_pack.js +69 -69
  199. package/lib/phase_3_freeze_baseline_pack.js +67 -67
  200. package/lib/phase_3_freeze_review_pack.js +80 -80
  201. package/lib/phase_3_gate_pack.js +76 -76
  202. package/lib/phase_3_metanet_runtime_pack.js +81 -81
  203. package/lib/phase_3_native_bsv_pack.js +91 -91
  204. package/lib/phase_3_native_continuity_pack.js +82 -82
  205. package/lib/phase_4_attestation_runtime_pack.js +75 -75
  206. package/lib/phase_4_closeout_pack.js +45 -45
  207. package/lib/phase_4_completion_pack.js +94 -94
  208. package/lib/phase_4_decision_record_pack.js +54 -54
  209. package/lib/phase_4_decision_resolution_pack.js +45 -45
  210. package/lib/phase_4_erc8004_runtime_pack.js +76 -76
  211. package/lib/phase_4_freeze_baseline_pack.js +67 -67
  212. package/lib/phase_4_freeze_review_pack.js +68 -68
  213. package/lib/phase_4_gate_pack.js +58 -58
  214. package/lib/phase_4_identity_registry_runtime_pack.js +75 -75
  215. package/lib/phase_4_identity_trust_pack.js +73 -73
  216. package/lib/phase_4_trust_continuity_pack.js +86 -86
  217. package/lib/phase_5_antelope_runtime_pack.js +76 -76
  218. package/lib/phase_5_closeout_pack.js +44 -44
  219. package/lib/phase_5_completion_pack.js +82 -82
  220. package/lib/phase_5_constellation_dag_runtime_pack.js +76 -76
  221. package/lib/phase_5_decision_record_pack.js +54 -54
  222. package/lib/phase_5_decision_resolution_pack.js +45 -45
  223. package/lib/phase_5_digibyte_dgb_runtime_pack.js +76 -76
  224. package/lib/phase_5_freeze_baseline_pack.js +67 -67
  225. package/lib/phase_5_freeze_review_pack.js +68 -68
  226. package/lib/phase_5_gate_pack.js +58 -58
  227. package/lib/phase_5_hedera_hbar_runtime_pack.js +76 -76
  228. package/lib/phase_5_kaspa_kas_runtime_pack.js +76 -76
  229. package/lib/phase_5_major_rails_continuity_pack.js +86 -86
  230. package/lib/phase_5_major_rails_pack.js +110 -110
  231. package/lib/phase_5_metal_runtime_pack.js +76 -76
  232. package/lib/phase_5_polkadot_dot_runtime_pack.js +76 -76
  233. package/lib/phase_5_proton_xpr_runtime_pack.js +76 -76
  234. package/lib/phase_5_solana_runtime_pack.js +76 -76
  235. package/lib/phase_6_autogen_runtime_pack.js +72 -72
  236. package/lib/phase_6_closeout_pack.js +46 -46
  237. package/lib/phase_6_completion_pack.js +77 -77
  238. package/lib/phase_6_decision_record_pack.js +54 -54
  239. package/lib/phase_6_decision_resolution_pack.js +53 -53
  240. package/lib/phase_6_framework_continuity_pack.js +81 -81
  241. package/lib/phase_6_framework_runtime_pack.js +68 -68
  242. package/lib/phase_6_freeze_baseline_pack.js +68 -68
  243. package/lib/phase_6_freeze_review_pack.js +65 -65
  244. package/lib/phase_6_gate_pack.js +59 -59
  245. package/lib/phase_6_langchain_runtime_pack.js +72 -72
  246. package/lib/phase_6_langgraph_runtime_pack.js +72 -72
  247. package/lib/phase_6_semantic_kernel_runtime_pack.js +72 -72
  248. package/lib/phase_7_closeout_pack.js +45 -45
  249. package/lib/phase_7_completion_pack.js +85 -85
  250. package/lib/phase_7_decision_record_pack.js +53 -53
  251. package/lib/phase_7_decision_resolution_pack.js +53 -53
  252. package/lib/phase_7_event_system_continuity_pack.js +89 -89
  253. package/lib/phase_7_event_system_pack.js +76 -76
  254. package/lib/phase_7_freeze_baseline_pack.js +74 -74
  255. package/lib/phase_7_freeze_review_pack.js +65 -65
  256. package/lib/phase_7_gate_pack.js +58 -58
  257. package/lib/phase_7_kafka_runtime_pack.js +74 -74
  258. package/lib/phase_7_mqtt_runtime_pack.js +74 -74
  259. package/lib/phase_7_nats_runtime_pack.js +74 -74
  260. package/lib/phase_7_webhook_event_bus_runtime_pack.js +74 -74
  261. package/lib/phase_8_closeout_pack.js +46 -46
  262. package/lib/phase_8_completion_pack.js +82 -82
  263. package/lib/phase_8_decision_record_pack.js +54 -54
  264. package/lib/phase_8_decision_resolution_pack.js +53 -53
  265. package/lib/phase_8_external_receipt_import_runtime_pack.js +74 -74
  266. package/lib/phase_8_external_result_import_runtime_pack.js +74 -74
  267. package/lib/phase_8_freeze_baseline_pack.js +71 -71
  268. package/lib/phase_8_freeze_review_pack.js +64 -64
  269. package/lib/phase_8_gate_pack.js +58 -58
  270. package/lib/phase_8_proof_bridge_continuity_pack.js +86 -86
  271. package/lib/phase_8_proof_bridges_pack.js +72 -72
  272. package/lib/phase_8_proof_bundle_normalization_runtime_pack.js +74 -74
  273. package/lib/phase_9_closeout_pack.js +46 -46
  274. package/lib/phase_9_completion_pack.js +82 -82
  275. package/lib/phase_9_custody_refs_runtime_pack.js +74 -74
  276. package/lib/phase_9_decision_record_pack.js +54 -54
  277. package/lib/phase_9_decision_resolution_pack.js +53 -53
  278. package/lib/phase_9_freeze_baseline_pack.js +71 -71
  279. package/lib/phase_9_freeze_review_pack.js +64 -64
  280. package/lib/phase_9_gate_pack.js +58 -58
  281. package/lib/phase_9_operator_accounting_bridges_runtime_pack.js +74 -74
  282. package/lib/phase_9_treasury_connectivity_pack.js +72 -72
  283. package/lib/phase_9_treasury_continuity_pack.js +86 -86
  284. package/lib/phase_9_treasury_destinations_runtime_pack.js +74 -74
  285. package/lib/phase_program_pack.js +120 -120
  286. package/lib/pricing_optimization_contract.js +775 -775
  287. package/lib/protocol_lane_contract.js +117 -117
  288. package/lib/provenance_lane_contract.js +54 -54
  289. package/lib/provider_lane_contract.js +240 -240
  290. package/lib/provider_runtime_journey_contract.js +183 -183
  291. package/lib/public_surface_policy_contract.js +111 -111
  292. package/lib/publish_plan.js +51 -51
  293. package/lib/record_queries.js +48 -48
  294. package/lib/release_candidate.js +50 -50
  295. package/lib/release_center.js +1093 -1093
  296. package/lib/release_history.js +205 -205
  297. package/lib/release_manifest.js +113 -113
  298. package/lib/release_pack.js +453 -453
  299. package/lib/request_rate_limit.js +144 -144
  300. package/lib/resource_views.js +31 -31
  301. package/lib/revenue_launch_path_contract.js +326 -326
  302. package/lib/route_matchers.js +34 -34
  303. package/lib/route_params.js +19 -19
  304. package/lib/runtime_bridge.js +124 -124
  305. package/lib/runtime_operations_worker.js +282 -282
  306. package/lib/runtime_state_store.js +354 -354
  307. package/lib/settlement_lane_contract.js +111 -111
  308. package/lib/shared_signals_lane_contract.js +54 -54
  309. package/lib/signed_audit_provenance_contract.js +83 -83
  310. package/lib/soft_launch_pack.js +78 -78
  311. package/lib/stablecoin_lane_contract.js +76 -76
  312. package/lib/stripe_mpp_lane_contract.js +96 -96
  313. package/lib/stripe_mpp_payment_front.js +158 -158
  314. package/lib/telemetry_lane_contract.js +54 -54
  315. package/lib/treasury_destinations_contract.js +764 -764
  316. package/lib/treasury_egress_policy_contract.js +91 -91
  317. package/lib/treasury_lane_contract.js +84 -84
  318. package/lib/trust_portability_boundary_contract.js +72 -72
  319. package/lib/x402_facilitator.js +155 -0
  320. package/lib/x402_lane_contract.js +118 -118
  321. package/package.json +106 -105
  322. package/scripts/registry_cli.js +275 -275
  323. package/scripts/verify_adapters.js +554 -554
  324. package/scripts/verify_all.js +4962 -4962
  325. package/scripts/verify_control_plane_contracts.js +34 -34
  326. package/scripts/verify_control_plane_routes.js +70 -70
  327. package/scripts/verify_delivery_summary.js +112 -112
  328. package/scripts/verify_examples.js +19 -19
  329. package/scripts/verify_first_run_conversions.js +81 -81
  330. package/scripts/verify_framework_provider_promotion.js +152 -152
  331. package/scripts/verify_full_catalog.js +174 -174
  332. package/scripts/verify_integrations.js +620 -620
  333. package/scripts/verify_lifecycle_continuity.js +96 -96
  334. package/scripts/verify_market_lane_depth.js +94 -94
  335. package/scripts/verify_market_lane_promotion.js +103 -103
  336. package/scripts/verify_market_lane_traces.js +98 -98
  337. package/scripts/verify_market_lanes.js +102 -102
  338. package/scripts/verify_operator_observability_boundary.js +83 -83
  339. package/scripts/verify_pricing_experiment_plan.js +124 -124
  340. package/scripts/verify_provider_runtime_breadth.js +109 -109
  341. package/scripts/verify_provider_runtime_journeys.js +111 -111
  342. package/scripts/verify_revenue_launch_paths.js +105 -105
  343. package/scripts/verify_runtime_durability.js +52 -52
  344. package/scripts/verify_service.js +15410 -15250
  345. package/scripts/verify_tooling.js +1412 -1412
  346. package/scripts/verify_treasury_public_boundary.js +97 -97
  347. package/scripts/verify_x402_facilitator.js +174 -0
  348. package/server.js +11117 -11006
  349. package/.env.production.checklist +0 -77
  350. package/.env.production.template +0 -54
  351. package/.github/workflows/publish-mcp-executor.yml +0 -43
  352. package/ADAPTER_PARTNER_PATH.md +0 -47
  353. package/ADAPTER_PROMOTION_START_HERE.md +0 -44
  354. package/BOLT_BINDINGS.production.worksheet.json +0 -31
  355. package/EXECUTION_TARGETS.production.worksheet.json +0 -73
  356. package/GO_LIVE_OPERATOR_PACK.md +0 -412
  357. package/L402_BINDINGS.production.worksheet.json +0 -30
  358. package/OPERATIONS_RUNBOOK.md +0 -115
  359. package/OPERATOR_START_HERE.md +0 -63
  360. package/OUTREACH_MESSAGES.md +0 -19
  361. package/OUTREACH_START_HERE.md +0 -36
  362. package/PRODUCTION_MANUAL_CLOSEOUT_SEQUENCE.md +0 -172
  363. package/PROGRAM_COMPLETE_RELEASE.md +0 -63
  364. package/PROGRAM_STATUS.md +0 -57
  365. package/PUBLISH_PLAN.md +0 -26
  366. package/RELEASE_CHECKLIST.md +0 -16
  367. package/SOFT_LAUNCH_KIT.md +0 -47
  368. package/services/mcp-execution-target/DISCOVERY_REGISTRY_PLAYBOOK.md +0 -141
  369. package/services/mcp-execution-target/README.md +0 -319
  370. package/services/mcp-execution-target/package.json +0 -14
  371. package/services/mcp-execution-target/server.js +0 -1031
  372. package/services/mcp-execution-target/server.json +0 -16
  373. package/services/mcp-execution-target/verify.js +0 -308
@@ -1,1412 +1,1412 @@
1
- "use strict";
2
-
3
- const assert = require("assert");
4
- const { execFileSync, spawn } = require("child_process");
5
- const path = require("path");
6
-
7
- function runCli(args) {
8
- const output = execFileSync(process.execPath, [
9
- path.resolve(__dirname, "registry_cli.js"),
10
- ...args
11
- ], {
12
- cwd: path.resolve(__dirname, ".."),
13
- encoding: "utf8"
14
- });
15
- return JSON.parse(output);
16
- }
17
-
18
- async function waitForHealth(url, timeoutMs = 10000) {
19
- const startedAt = Date.now();
20
- while (Date.now() - startedAt < timeoutMs) {
21
- try {
22
- const response = await fetch(`${url}/health`);
23
- if (response.ok) {
24
- return;
25
- }
26
- } catch (_) {
27
- // keep waiting for the server to come up
28
- }
29
- await new Promise((resolve) => setTimeout(resolve, 200));
30
- }
31
- throw new Error("tooling_server_health_timeout");
32
- }
33
-
34
- async function main() {
35
- const protocolValidation = runCli(["validate-bundle", "--example", "protocol"]);
36
- assert.strictEqual(protocolValidation.ok, true, "protocol bundle validation via cli mismatch");
37
-
38
- const settlementValidation = runCli(["validate-bundle", "--example", "settlement"]);
39
- assert.strictEqual(settlementValidation.ok, true, "settlement bundle validation via cli mismatch");
40
-
41
- const identityValidation = runCli(["validate-bundle", "--example", "identity"]);
42
- assert.strictEqual(identityValidation.ok, true, "identity bundle validation via cli mismatch");
43
-
44
- const bundleSet = runCli(["export-bundle-set", "--notes", "tooling smoke"]);
45
- assert.strictEqual(bundleSet.bundle_count >= 3, true, "bundle-set export via cli mismatch");
46
- assert.strictEqual(bundleSet.notes, "tooling smoke", "bundle-set notes mismatch");
47
-
48
- const snapshotOutput = runCli(["export-snapshot"]);
49
- assert.strictEqual(snapshotOutput.snapshot.integration_count >= 3, true, "snapshot export via cli mismatch");
50
- assert.strictEqual(snapshotOutput.snapshot.filters.snapshot_source, "submission_bundle", "snapshot export source mismatch");
51
-
52
- const bundleReview = runCli(["review-bundle", "--example", "protocol"]);
53
- assert.strictEqual(bundleReview.review.ok, true, "bundle review via cli mismatch");
54
- assert.strictEqual(bundleReview.review.integration.integration_id, "partner.protocol.acme_mcp", "bundle review integration mismatch");
55
- assert.strictEqual(bundleReview.review.review_summary.warning_count >= 1, true, "bundle review warning coverage missing");
56
-
57
- const identityBundleReview = runCli(["review-bundle", "--example", "identity"]);
58
- assert.strictEqual(identityBundleReview.review.ok, true, "identity bundle review via cli mismatch");
59
- assert.strictEqual(identityBundleReview.review.integration.integration_id, "partner.identity.attest_registry", "identity bundle review integration mismatch");
60
-
61
- const bundleSetReview = runCli(["review-bundle-set", "--notes", "tooling smoke"]);
62
- assert.strictEqual(bundleSetReview.review.ok, true, "bundle-set review via cli mismatch");
63
- assert.strictEqual(bundleSetReview.review.bundle_count >= 3, true, "bundle-set review count mismatch");
64
-
65
- const snapshotReview = runCli(["review-snapshot"]);
66
- assert.strictEqual(snapshotReview.review.ok, true, "snapshot review via cli mismatch");
67
- assert.strictEqual(snapshotReview.review.integration_count >= 3, true, "snapshot review integration count mismatch");
68
-
69
- const promotionReadiness = runCli(["promotion-readiness", "--integration", "partner.protocol.acme_mcp"]);
70
- assert.strictEqual(promotionReadiness.review.ok, true, "promotion readiness via cli mismatch");
71
- assert.strictEqual(promotionReadiness.review.integration_id, "partner.protocol.acme_mcp", "promotion readiness integration mismatch");
72
- assert.strictEqual(promotionReadiness.review.promotion_readiness.review_ready, true, "promotion readiness review-ready mismatch");
73
- assert.strictEqual(promotionReadiness.review.promotion_readiness.production_default_ready, false, "promotion readiness production-default mismatch");
74
-
75
- const identityPromotionReadiness = runCli(["promotion-readiness", "--integration", "partner.identity.attest_registry"]);
76
- assert.strictEqual(identityPromotionReadiness.review.ok, true, "identity promotion readiness via cli mismatch");
77
- assert.strictEqual(identityPromotionReadiness.review.integration_id, "partner.identity.attest_registry", "identity promotion readiness integration mismatch");
78
-
79
- const promotionWorkflow = runCli(["promotion-workflow", "--integration", "partner.protocol.acme_mcp"]);
80
- assert.strictEqual(promotionWorkflow.review.ok, true, "promotion workflow via cli mismatch");
81
- assert.strictEqual(promotionWorkflow.review.next_transition.action, "complete_certification", "promotion workflow next-transition mismatch");
82
- assert.strictEqual(
83
- promotionWorkflow.review.next_transition.later_actions.includes("promote_maturity"),
84
- true,
85
- "promotion workflow later-actions mismatch"
86
- );
87
- assert.strictEqual(
88
- promotionWorkflow.review.promotion_recommendation.recommendation,
89
- "keep_staged_until_requirements_clear",
90
- "promotion workflow recommendation mismatch"
91
- );
92
- assert.strictEqual(
93
- promotionWorkflow.review.certification_gaps.missing_requirements.includes("certification_state"),
94
- true,
95
- "promotion workflow certification gap mismatch"
96
- );
97
-
98
- const promotionWorkflowSummary = runCli(["promotion-workflow-summary", "--source", "third_party_example", "--bundled", "false"]);
99
- assert.strictEqual(promotionWorkflowSummary.review.ok, true, "promotion workflow summary via cli mismatch");
100
- assert.strictEqual(promotionWorkflowSummary.review.integration_count >= 3, true, "promotion workflow summary breadth mismatch");
101
- assert.strictEqual(
102
- promotionWorkflowSummary.review.next_actions.some((entry) => entry.action === "complete_certification"),
103
- true,
104
- "promotion workflow summary next-action mismatch"
105
- );
106
- assert.strictEqual(
107
- promotionWorkflowSummary.review.blocker_categories.some(
108
- (entry) => entry.category === "certification" && entry.severity === "high" && entry.owner === "review_operator"
109
- ),
110
- true,
111
- "promotion workflow summary blocker severity/owner mismatch"
112
- );
113
- assert.strictEqual(
114
- promotionWorkflowSummary.review.owner_queue.some((entry) => entry.owner === "review_operator"),
115
- true,
116
- "promotion workflow summary owner queue mismatch"
117
- );
118
- assert.strictEqual(
119
- promotionWorkflowSummary.review.severity_queue.some((entry) => entry.severity === "high"),
120
- true,
121
- "promotion workflow summary severity queue mismatch"
122
- );
123
- assert.strictEqual(
124
- promotionWorkflowSummary.review.next_action_queues.some((entry) => entry.action === "complete_certification" && entry.count >= 3),
125
- true,
126
- "promotion workflow summary next-action queue mismatch"
127
- );
128
-
129
- const promotionActionPreview = runCli([
130
- "promotion-action-preview",
131
- "--integration", "partner.protocol.acme_mcp",
132
- "--action", "complete_certification"
133
- ]);
134
- assert.strictEqual(promotionActionPreview.review.ok, true, "promotion action preview via cli mismatch");
135
- assert.strictEqual(promotionActionPreview.review.valid_now, true, "promotion action preview validity mismatch");
136
- assert.strictEqual(promotionActionPreview.review.action.stage, "certification", "promotion action preview stage mismatch");
137
-
138
- const promotionActionSet = runCli(["promotion-action-set", "--integration", "partner.protocol.acme_mcp"]);
139
- assert.strictEqual(promotionActionSet.review.ok, true, "promotion action-set via cli mismatch");
140
- assert.strictEqual(
141
- promotionActionSet.review.actions.some((entry) => entry.request.action === "complete_certification" && entry.valid_now === true),
142
- true,
143
- "promotion action-set cli valid action mismatch"
144
- );
145
-
146
- const promotionActionSetSummary = runCli(["promotion-action-set-summary", "--source", "third_party_example", "--bundled", "false"]);
147
- assert.strictEqual(promotionActionSetSummary.review.ok, true, "promotion action-set summary via cli mismatch");
148
- assert.strictEqual(promotionActionSetSummary.review.integration_count >= 3, true, "promotion action-set summary breadth mismatch");
149
- assert.strictEqual(
150
- promotionActionSetSummary.review.valid_actions.some((entry) => entry.action === "complete_certification"),
151
- true,
152
- "promotion action-set summary valid-action mismatch"
153
- );
154
-
155
- const cliPort = 4337;
156
- const cliBaseUrl = `http://127.0.0.1:${cliPort}`;
157
- const server = spawn(process.execPath, [path.resolve(__dirname, "..", "server.js")], {
158
- cwd: path.resolve(__dirname, ".."),
159
- env: {
160
- ...process.env,
161
- XYTARA_HOST: "127.0.0.1",
162
- XYTARA_PORT: String(cliPort),
163
- XYTARA_PAYMENT_VERIFICATION_MODE: "local_signed",
164
- XYTARA_WALLET_REGISTRY_JSON: JSON.stringify([
165
- {
166
- wallet_id: "tooling-wallet",
167
- secret: "tooling-wallet-secret",
168
- account_id: "acct_tooling_cli",
169
- enabled: true
170
- }
171
- ]),
172
- XYTARA_BSV_TERANODE_MERCHANT_ADDRESS: "1MerchantBsvAddressExample",
173
- XYTARA_BSV_TERANODE_SETTLEMENT_RUNTIME_MODE: "mock"
174
- },
175
- stdio: "ignore"
176
- });
177
-
178
- try {
179
- await waitForHealth(cliBaseUrl);
180
- const cliRunOutput = execFileSync(process.execPath, [
181
- path.resolve(__dirname, "..", "bin", "xytara-run.js"),
182
- "--url", cliBaseUrl,
183
- "--account", "acct_tooling_cli",
184
- "--command", "tooling-cli-run",
185
- "--task", "trust.verify",
186
- "--body-json", JSON.stringify({ subject_id: "tooling-cli" }),
187
- "--wallet-id", "tooling-wallet",
188
- "--wallet-secret", "tooling-wallet-secret",
189
- "--txid", "tooling-cli-bsv-txid"
190
- ], {
191
- cwd: path.resolve(__dirname, ".."),
192
- encoding: "utf8"
193
- });
194
- const cliRun = JSON.parse(cliRunOutput);
195
- assert.strictEqual(typeof cliRun.transaction.transaction_id, "string", "xytara-run cli transaction missing");
196
- assert.strictEqual(cliRun.transaction.payment.wallet_id, "tooling-wallet", "xytara-run cli wallet mismatch");
197
- assert.strictEqual(cliRun.transaction.settlement.txid, "tooling-cli-bsv-txid", "xytara-run cli txid mismatch");
198
-
199
- const releaseOutput = execFileSync(process.execPath, [
200
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
201
- "--summary"
202
- ], {
203
- cwd: path.resolve(__dirname, ".."),
204
- encoding: "utf8"
205
- });
206
- const releaseSummary = JSON.parse(releaseOutput);
207
- assert.strictEqual(releaseSummary.product, "xytara", "xytara-release cli product mismatch");
208
- assert.strictEqual(releaseSummary.release_cli, "xytara-release --summary", "xytara-release cli release command mismatch");
209
- assert.strictEqual(releaseSummary.install_command, "npm install xytara", "xytara-release cli install command mismatch");
210
- const comparisonOutput = execFileSync(process.execPath, [
211
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
212
- "--comparison",
213
- "--summary"
214
- ], {
215
- cwd: path.resolve(__dirname, ".."),
216
- encoding: "utf8"
217
- });
218
- const comparisonSummary = JSON.parse(comparisonOutput);
219
- assert.strictEqual(comparisonSummary.product, "xytara", "xytara comparison cli product mismatch");
220
- assert.strictEqual(comparisonSummary.comparison_count >= 3, true, "xytara comparison cli count mismatch");
221
- const adoptionOutput = execFileSync(process.execPath, [
222
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
223
- "--adoption",
224
- "--summary"
225
- ], {
226
- cwd: path.resolve(__dirname, ".."),
227
- encoding: "utf8"
228
- });
229
- const adoptionSummary = JSON.parse(adoptionOutput);
230
- assert.strictEqual(adoptionSummary.product, "xytara", "xytara adoption cli product mismatch");
231
- assert.strictEqual(adoptionSummary.target_count >= 4, true, "xytara adoption cli count mismatch");
232
- const scenarioOutput = execFileSync(process.execPath, [
233
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
234
- "--scenarios",
235
- "--summary"
236
- ], {
237
- cwd: path.resolve(__dirname, ".."),
238
- encoding: "utf8"
239
- });
240
- const scenarioSummary = JSON.parse(scenarioOutput);
241
- assert.strictEqual(scenarioSummary.product, "xytara", "xytara scenario cli product mismatch");
242
- assert.strictEqual(scenarioSummary.scenario_count >= 3, true, "xytara scenario cli count mismatch");
243
- const launchOutput = execFileSync(process.execPath, [
244
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
245
- "--launch",
246
- "--summary"
247
- ], {
248
- cwd: path.resolve(__dirname, ".."),
249
- encoding: "utf8"
250
- });
251
- const launchSummary = JSON.parse(launchOutput);
252
- assert.strictEqual(launchSummary.product, "xytara", "xytara launch cli product mismatch");
253
- assert.strictEqual(launchSummary.operator_check_count >= 6, true, "xytara launch cli check count mismatch");
254
- const manifestOutput = execFileSync(process.execPath, [
255
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
256
- "--manifest",
257
- "--summary"
258
- ], {
259
- cwd: path.resolve(__dirname, ".."),
260
- encoding: "utf8"
261
- });
262
- const manifestSummary = JSON.parse(manifestOutput);
263
- assert.strictEqual(manifestSummary.product, "xytara", "xytara manifest cli product mismatch");
264
- assert.strictEqual(manifestSummary.release_track, "public_release", "xytara manifest cli track mismatch");
265
- const notesOutput = execFileSync(process.execPath, [
266
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
267
- "--notes",
268
- "--summary"
269
- ], {
270
- cwd: path.resolve(__dirname, ".."),
271
- encoding: "utf8"
272
- });
273
- const notesSummary = JSON.parse(notesOutput);
274
- assert.strictEqual(notesSummary.product, "xytara", "xytara notes cli product mismatch");
275
- assert.strictEqual(notesSummary.operator_check_count >= 5, true, "xytara notes cli check count mismatch");
276
- const centerOutput = execFileSync(process.execPath, [
277
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
278
- "--center",
279
- "--summary"
280
- ], {
281
- cwd: path.resolve(__dirname, ".."),
282
- encoding: "utf8"
283
- });
284
- const centerSummary = JSON.parse(centerOutput);
285
- assert.strictEqual(centerSummary.product, "xytara", "xytara center cli product mismatch");
286
- assert.strictEqual(centerSummary.category, "machine-commerce-release-center", "xytara center cli category mismatch");
287
- assert.strictEqual(centerSummary.verification_surface_count >= 6, true, "xytara center cli verification count mismatch");
288
- const historyOutput = execFileSync(process.execPath, [
289
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
290
- "--history",
291
- "--summary"
292
- ], {
293
- cwd: path.resolve(__dirname, ".."),
294
- encoding: "utf8"
295
- });
296
- const historySummary = JSON.parse(historyOutput);
297
- assert.strictEqual(historySummary.product, "xytara", "xytara history cli product mismatch");
298
- assert.strictEqual(historySummary.category, "machine-commerce-release-history", "xytara history cli category mismatch");
299
- assert.strictEqual(historySummary.release_count >= 2, true, "xytara history cli release count mismatch");
300
- const adapterPackOutput = execFileSync(process.execPath, [
301
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
302
- "--adapters",
303
- "--summary"
304
- ], {
305
- cwd: path.resolve(__dirname, ".."),
306
- encoding: "utf8"
307
- });
308
- const adapterPackSummary = JSON.parse(adapterPackOutput);
309
- assert.strictEqual(adapterPackSummary.product, "xytara", "xytara adapter pack cli product mismatch");
310
- assert.strictEqual(adapterPackSummary.category, "machine-commerce-adapter-pack", "xytara adapter pack cli category mismatch");
311
- assert.strictEqual(adapterPackSummary.starter_class_count >= 5, true, "xytara adapter pack cli class count mismatch");
312
- const adapterPromotionOutput = execFileSync(process.execPath, [
313
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
314
- "--adapter-promotion",
315
- "--summary"
316
- ], {
317
- cwd: path.resolve(__dirname, ".."),
318
- encoding: "utf8"
319
- });
320
- const adapterPromotionSummary = JSON.parse(adapterPromotionOutput);
321
- assert.strictEqual(adapterPromotionSummary.product, "xytara", "xytara adapter promotion cli product mismatch");
322
- assert.strictEqual(adapterPromotionSummary.category, "machine-commerce-adapter-promotion-pack", "xytara adapter promotion cli category mismatch");
323
- assert.strictEqual(adapterPromotionSummary.maturity_step_count >= 5, true, "xytara adapter promotion cli maturity count mismatch");
324
- const adapterPartnerOutput = execFileSync(process.execPath, [
325
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
326
- "--adapter-partners",
327
- "--summary"
328
- ], {
329
- cwd: path.resolve(__dirname, ".."),
330
- encoding: "utf8"
331
- });
332
- const adapterPartnerSummary = JSON.parse(adapterPartnerOutput);
333
- assert.strictEqual(adapterPartnerSummary.product, "xytara", "xytara adapter partner cli product mismatch");
334
- assert.strictEqual(adapterPartnerSummary.category, "machine-commerce-adapter-partner-pack", "xytara adapter partner cli category mismatch");
335
- assert.strictEqual(adapterPartnerSummary.maturity_step_count >= 5, true, "xytara adapter partner cli maturity count mismatch");
336
- const softLaunchOutput = execFileSync(process.execPath, [
337
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
338
- "--soft-launch",
339
- "--summary"
340
- ], {
341
- cwd: path.resolve(__dirname, ".."),
342
- encoding: "utf8"
343
- });
344
- const softLaunchSummary = JSON.parse(softLaunchOutput);
345
- assert.strictEqual(softLaunchSummary.product, "xytara", "xytara soft launch cli product mismatch");
346
- assert.strictEqual(softLaunchSummary.category, "machine-commerce-soft-launch-pack", "xytara soft launch cli category mismatch");
347
- assert.strictEqual(softLaunchSummary.outreach_step_count >= 5, true, "xytara soft launch cli outreach count mismatch");
348
- const outreachCopyOutput = execFileSync(process.execPath, [
349
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
350
- "--outreach-copy",
351
- "--summary"
352
- ], {
353
- cwd: path.resolve(__dirname, ".."),
354
- encoding: "utf8"
355
- });
356
- const outreachCopySummary = JSON.parse(outreachCopyOutput);
357
- assert.strictEqual(outreachCopySummary.product, "xytara", "xytara outreach copy cli product mismatch");
358
- assert.strictEqual(outreachCopySummary.category, "machine-commerce-outreach-copy-pack", "xytara outreach copy cli category mismatch");
359
- assert.strictEqual(outreachCopySummary.link_count >= 4, true, "xytara outreach copy cli link count mismatch");
360
- const outreachTargetsOutput = execFileSync(process.execPath, [
361
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
362
- "--outreach-targets",
363
- "--summary"
364
- ], {
365
- cwd: path.resolve(__dirname, ".."),
366
- encoding: "utf8"
367
- });
368
- const outreachTargetsSummary = JSON.parse(outreachTargetsOutput);
369
- assert.strictEqual(outreachTargetsSummary.product, "xytara", "xytara outreach targets cli product mismatch");
370
- assert.strictEqual(outreachTargetsSummary.category, "machine-commerce-outreach-target-pack", "xytara outreach targets cli category mismatch");
371
- assert.strictEqual(outreachTargetsSummary.target_count >= 4, true, "xytara outreach targets cli count mismatch");
372
- const outreachMessagesOutput = execFileSync(process.execPath, [
373
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
374
- "--outreach-messages",
375
- "--summary"
376
- ], {
377
- cwd: path.resolve(__dirname, ".."),
378
- encoding: "utf8"
379
- });
380
- const outreachMessagesSummary = JSON.parse(outreachMessagesOutput);
381
- assert.strictEqual(outreachMessagesSummary.product, "xytara", "xytara outreach messages cli product mismatch");
382
- assert.strictEqual(outreachMessagesSummary.category, "machine-commerce-outreach-message-pack", "xytara outreach messages cli category mismatch");
383
- assert.strictEqual(outreachMessagesSummary.message_count >= 4, true, "xytara outreach messages cli count mismatch");
384
- const phaseProgramOutput = execFileSync(process.execPath, [
385
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
386
- "--phases",
387
- "--summary"
388
- ], {
389
- cwd: path.resolve(__dirname, ".."),
390
- encoding: "utf8"
391
- });
392
- const phaseProgramSummary = JSON.parse(phaseProgramOutput);
393
- assert.strictEqual(phaseProgramSummary.product, "xytara", "xytara phase program cli product mismatch");
394
- assert.strictEqual(phaseProgramSummary.category, "machine-commerce-phase-program-pack", "xytara phase program cli category mismatch");
395
- assert.strictEqual(phaseProgramSummary.phase_count >= 10, true, "xytara phase program cli phase count mismatch");
396
- assert.strictEqual(phaseProgramSummary.current_phase, "program_closed", "xytara phase program current phase mismatch");
397
- const phase1Output = execFileSync(process.execPath, [
398
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
399
- "--phase-1",
400
- "--summary"
401
- ], {
402
- cwd: path.resolve(__dirname, ".."),
403
- encoding: "utf8"
404
- });
405
- const phase1Summary = JSON.parse(phase1Output);
406
- assert.strictEqual(phase1Summary.product, "xytara", "xytara phase 1 cli product mismatch");
407
- assert.strictEqual(phase1Summary.category, "machine-commerce-phase-1-ecosystem-pack", "xytara phase 1 cli category mismatch");
408
- assert.strictEqual(phase1Summary.ecosystem_count >= 2, true, "xytara phase 1 cli ecosystem count mismatch");
409
- const phase1OpenaiCodexOutput = execFileSync(process.execPath, [
410
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
411
- "--phase-1-openai-codex",
412
- "--summary"
413
- ], {
414
- cwd: path.resolve(__dirname, ".."),
415
- encoding: "utf8"
416
- });
417
- const phase1OpenaiCodexSummary = JSON.parse(phase1OpenaiCodexOutput);
418
- assert.strictEqual(phase1OpenaiCodexSummary.product, "xytara", "xytara phase 1 openai/codex cli product mismatch");
419
- assert.strictEqual(phase1OpenaiCodexSummary.category, "machine-commerce-phase-1-openai-codex-pack", "xytara phase 1 openai/codex cli category mismatch");
420
- assert.strictEqual(phase1OpenaiCodexSummary.surface_count >= 4, true, "xytara phase 1 openai/codex cli surface count mismatch");
421
- const phase1OpenaiCodexRuntimeOutput = execFileSync(process.execPath, [
422
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
423
- "--phase-1-openai-codex-runtime",
424
- "--summary"
425
- ], {
426
- cwd: path.resolve(__dirname, ".."),
427
- encoding: "utf8"
428
- });
429
- const phase1OpenaiCodexRuntimeSummary = JSON.parse(phase1OpenaiCodexRuntimeOutput);
430
- assert.strictEqual(phase1OpenaiCodexRuntimeSummary.product, "xytara", "xytara phase 1 openai/codex runtime cli product mismatch");
431
- assert.strictEqual(phase1OpenaiCodexRuntimeSummary.category, "machine-commerce-phase-1-openai-codex-runtime-pack", "xytara phase 1 openai/codex runtime cli category mismatch");
432
- assert.strictEqual(phase1OpenaiCodexRuntimeSummary.http_step_count >= 3, true, "xytara phase 1 openai/codex runtime cli step count mismatch");
433
- const phase1ClaudeMcpOutput = execFileSync(process.execPath, [
434
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
435
- "--phase-1-claude-mcp",
436
- "--summary"
437
- ], {
438
- cwd: path.resolve(__dirname, ".."),
439
- encoding: "utf8"
440
- });
441
- const phase1ClaudeMcpSummary = JSON.parse(phase1ClaudeMcpOutput);
442
- assert.strictEqual(phase1ClaudeMcpSummary.product, "xytara", "xytara phase 1 claude/mcp cli product mismatch");
443
- assert.strictEqual(phase1ClaudeMcpSummary.category, "machine-commerce-phase-1-claude-mcp-pack", "xytara phase 1 claude/mcp cli category mismatch");
444
- assert.strictEqual(phase1ClaudeMcpSummary.surface_count >= 4, true, "xytara phase 1 claude/mcp cli surface count mismatch");
445
- const phase1ClaudeMcpRuntimeOutput = execFileSync(process.execPath, [
446
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
447
- "--phase-1-claude-mcp-runtime",
448
- "--summary"
449
- ], {
450
- cwd: path.resolve(__dirname, ".."),
451
- encoding: "utf8"
452
- });
453
- const phase1ClaudeMcpRuntimeSummary = JSON.parse(phase1ClaudeMcpRuntimeOutput);
454
- assert.strictEqual(phase1ClaudeMcpRuntimeSummary.product, "xytara", "xytara phase 1 claude/mcp runtime cli product mismatch");
455
- assert.strictEqual(phase1ClaudeMcpRuntimeSummary.category, "machine-commerce-phase-1-claude-mcp-runtime-pack", "xytara phase 1 claude/mcp runtime cli category mismatch");
456
- assert.strictEqual(phase1ClaudeMcpRuntimeSummary.http_step_count >= 3, true, "xytara phase 1 claude/mcp runtime cli step count mismatch");
457
- const phase2Output = execFileSync(process.execPath, [
458
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
459
- "--phase-2",
460
- "--summary"
461
- ], {
462
- cwd: path.resolve(__dirname, ".."),
463
- encoding: "utf8"
464
- });
465
- const phase2Summary = JSON.parse(phase2Output);
466
- assert.strictEqual(phase2Summary.product, "xytara", "xytara phase 2 cli product mismatch");
467
- assert.strictEqual(phase2Summary.category, "machine-commerce-phase-2-payment-rails-pack", "xytara phase 2 cli category mismatch");
468
- assert.strictEqual(phase2Summary.ecosystem_count >= 4, true, "xytara phase 2 cli ecosystem count mismatch");
469
- assert.strictEqual(phase2Summary.settlement_mode_count >= 1, true, "xytara phase 2 cli settlement mode count mismatch");
470
- const phase2CompletionOutput = execFileSync(process.execPath, [
471
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
472
- "--phase-2-completion",
473
- "--summary"
474
- ], {
475
- cwd: path.resolve(__dirname, ".."),
476
- encoding: "utf8"
477
- });
478
- const phase2CompletionSummary = JSON.parse(phase2CompletionOutput);
479
- assert.strictEqual(phase2CompletionSummary.product, "xytara", "xytara phase 2 completion cli product mismatch");
480
- assert.strictEqual(phase2CompletionSummary.category, "machine-commerce-phase-2-completion-pack", "xytara phase 2 completion cli category mismatch");
481
- assert.strictEqual(phase2CompletionSummary.completion_check_count >= 5, true, "xytara phase 2 completion cli check count mismatch");
482
- const phase2FreezeReviewOutput = execFileSync(process.execPath, [
483
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
484
- "--phase-2-freeze-review",
485
- "--summary"
486
- ], {
487
- cwd: path.resolve(__dirname, ".."),
488
- encoding: "utf8"
489
- });
490
- const phase2FreezeReviewSummary = JSON.parse(phase2FreezeReviewOutput);
491
- assert.strictEqual(phase2FreezeReviewSummary.product, "xytara", "xytara phase 2 freeze review cli product mismatch");
492
- assert.strictEqual(phase2FreezeReviewSummary.category, "machine-commerce-phase-2-freeze-review-pack", "xytara phase 2 freeze review cli category mismatch");
493
- assert.strictEqual(phase2FreezeReviewSummary.blocker_count, 0, "xytara phase 2 freeze review blocker count mismatch");
494
- const phase2GateOutput = execFileSync(process.execPath, [
495
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
496
- "--phase-2-gate",
497
- "--summary"
498
- ], {
499
- cwd: path.resolve(__dirname, ".."),
500
- encoding: "utf8"
501
- });
502
- const phase2GateSummary = JSON.parse(phase2GateOutput);
503
- assert.strictEqual(phase2GateSummary.product, "xytara", "xytara phase 2 gate cli product mismatch");
504
- assert.strictEqual(phase2GateSummary.category, "machine-commerce-phase-2-gate-pack", "xytara phase 2 gate cli category mismatch");
505
- assert.strictEqual(phase2GateSummary.unsatisfied_gate_count, 0, "xytara phase 2 gate unsatisfied count mismatch");
506
- assert.strictEqual(phase2GateSummary.ready_for_next_phase, true, "xytara phase 2 gate ready state mismatch");
507
- const phase2CloseoutOutput = execFileSync(process.execPath, [
508
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
509
- "--phase-2-closeout",
510
- "--summary"
511
- ], {
512
- cwd: path.resolve(__dirname, ".."),
513
- encoding: "utf8"
514
- });
515
- const phase2CloseoutSummary = JSON.parse(phase2CloseoutOutput);
516
- assert.strictEqual(phase2CloseoutSummary.product, "xytara", "xytara phase 2 closeout cli product mismatch");
517
- assert.strictEqual(phase2CloseoutSummary.category, "machine-commerce-phase-2-closeout-pack", "xytara phase 2 closeout cli category mismatch");
518
- assert.strictEqual(phase2CloseoutSummary.blocking_action_count, 0, "xytara phase 2 closeout blocking action count mismatch");
519
- assert.strictEqual(phase2CloseoutSummary.current_decision, "ready_for_phase_3", "xytara phase 2 closeout decision mismatch");
520
- const phase2DecisionRecordOutput = execFileSync(process.execPath, [
521
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
522
- "--phase-2-decision-record",
523
- "--summary"
524
- ], {
525
- cwd: path.resolve(__dirname, ".."),
526
- encoding: "utf8"
527
- });
528
- const phase2DecisionRecordSummary = JSON.parse(phase2DecisionRecordOutput);
529
- assert.strictEqual(phase2DecisionRecordSummary.product, "xytara", "xytara phase 2 decision-record cli product mismatch");
530
- assert.strictEqual(phase2DecisionRecordSummary.category, "machine-commerce-phase-2-decision-record-pack", "xytara phase 2 decision-record cli category mismatch");
531
- assert.strictEqual(phase2DecisionRecordSummary.pending_record_count, 0, "xytara phase 2 decision-record pending count mismatch");
532
- assert.strictEqual(phase2DecisionRecordSummary.freeze_decision_status, "recorded", "xytara phase 2 freeze decision status mismatch");
533
- assert.strictEqual(phase2DecisionRecordSummary.gate_review_status, "recorded", "xytara phase 2 gate review status mismatch");
534
- const phase2DecisionResolutionOutput = execFileSync(process.execPath, [
535
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
536
- "--phase-2-decision-resolution",
537
- "--summary"
538
- ], {
539
- cwd: path.resolve(__dirname, ".."),
540
- encoding: "utf8"
541
- });
542
- const phase2DecisionResolutionSummary = JSON.parse(phase2DecisionResolutionOutput);
543
- assert.strictEqual(phase2DecisionResolutionSummary.product, "xytara", "xytara phase 2 decision-resolution cli product mismatch");
544
- assert.strictEqual(phase2DecisionResolutionSummary.category, "machine-commerce-phase-2-decision-resolution-pack", "xytara phase 2 decision-resolution cli category mismatch");
545
- assert.strictEqual(phase2DecisionResolutionSummary.transition_count >= 2, true, "xytara phase 2 decision-resolution transition count mismatch");
546
- const phase2FlipPreviewOutput = execFileSync(process.execPath, [
547
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
548
- "--phase-2-flip-preview",
549
- "--summary"
550
- ], {
551
- cwd: path.resolve(__dirname, ".."),
552
- encoding: "utf8"
553
- });
554
- const phase2FlipPreviewSummary = JSON.parse(phase2FlipPreviewOutput);
555
- assert.strictEqual(phase2FlipPreviewSummary.product, "xytara", "xytara phase 2 flip-preview cli product mismatch");
556
- assert.strictEqual(phase2FlipPreviewSummary.category, "machine-commerce-phase-2-flip-preview-pack", "xytara phase 2 flip-preview cli category mismatch");
557
- assert.strictEqual(phase2FlipPreviewSummary.ready_for_next_phase, true, "xytara phase 2 flip-preview ready state mismatch");
558
- const phase2EvmBaseOutput = execFileSync(process.execPath, [
559
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
560
- "--phase-2-evm-base-runtime",
561
- "--summary"
562
- ], {
563
- cwd: path.resolve(__dirname, ".."),
564
- encoding: "utf8"
565
- });
566
- const phase2EvmBaseSummary = JSON.parse(phase2EvmBaseOutput);
567
- assert.strictEqual(phase2EvmBaseSummary.product, "xytara", "xytara phase 2 evm/base cli product mismatch");
568
- assert.strictEqual(phase2EvmBaseSummary.category, "machine-commerce-phase-2-evm-base-runtime-pack", "xytara phase 2 evm/base cli category mismatch");
569
- assert.strictEqual(phase2EvmBaseSummary.http_step_count >= 3, true, "xytara phase 2 evm/base cli step count mismatch");
570
- const phase2BaseUsdcOutput = execFileSync(process.execPath, [
571
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
572
- "--phase-2-base-usdc-runtime",
573
- "--summary"
574
- ], {
575
- cwd: path.resolve(__dirname, ".."),
576
- encoding: "utf8"
577
- });
578
- const phase2BaseUsdcSummary = JSON.parse(phase2BaseUsdcOutput);
579
- assert.strictEqual(phase2BaseUsdcSummary.product, "xytara", "xytara phase 2 base/usdc cli product mismatch");
580
- assert.strictEqual(phase2BaseUsdcSummary.category, "machine-commerce-phase-2-base-usdc-runtime-pack", "xytara phase 2 base/usdc cli category mismatch");
581
- assert.strictEqual(phase2BaseUsdcSummary.http_step_count >= 3, true, "xytara phase 2 base/usdc cli step count mismatch");
582
- assert.strictEqual(phase2BaseUsdcSummary.signal_count >= 3, true, "xytara phase 2 base/usdc cli signal count mismatch");
583
- const phase2EthOutput = execFileSync(process.execPath, [
584
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
585
- "--phase-2-eth-runtime",
586
- "--summary"
587
- ], {
588
- cwd: path.resolve(__dirname, ".."),
589
- encoding: "utf8"
590
- });
591
- const phase2EthSummary = JSON.parse(phase2EthOutput);
592
- assert.strictEqual(phase2EthSummary.product, "xytara", "xytara phase 2 eth cli product mismatch");
593
- assert.strictEqual(phase2EthSummary.category, "machine-commerce-phase-2-eth-runtime-pack", "xytara phase 2 eth cli category mismatch");
594
- assert.strictEqual(phase2EthSummary.operator_surface_count >= 2, true, "xytara phase 2 eth cli operator surface count mismatch");
595
- const phase2EvmOutput = execFileSync(process.execPath, [
596
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
597
- "--phase-2-evm-runtime",
598
- "--summary"
599
- ], {
600
- cwd: path.resolve(__dirname, ".."),
601
- encoding: "utf8"
602
- });
603
- const phase2EvmSummary = JSON.parse(phase2EvmOutput);
604
- assert.strictEqual(phase2EvmSummary.product, "xytara", "xytara phase 2 evm cli product mismatch");
605
- assert.strictEqual(phase2EvmSummary.category, "machine-commerce-phase-2-evm-runtime-pack", "xytara phase 2 evm cli category mismatch");
606
- assert.strictEqual(phase2EvmSummary.settlement_mode_count >= 1, true, "xytara phase 2 evm cli settlement mode count mismatch");
607
- const phase2BaseOutput = execFileSync(process.execPath, [
608
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
609
- "--phase-2-base-runtime",
610
- "--summary"
611
- ], {
612
- cwd: path.resolve(__dirname, ".."),
613
- encoding: "utf8"
614
- });
615
- const phase2BaseSummary = JSON.parse(phase2BaseOutput);
616
- assert.strictEqual(phase2BaseSummary.product, "xytara", "xytara phase 2 base cli product mismatch");
617
- assert.strictEqual(phase2BaseSummary.category, "machine-commerce-phase-2-base-runtime-pack", "xytara phase 2 base cli category mismatch");
618
- assert.strictEqual(phase2BaseSummary.operator_surface_count >= 2, true, "xytara phase 2 base cli operator surface count mismatch");
619
- const phase2UsdcOutput = execFileSync(process.execPath, [
620
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
621
- "--phase-2-usdc-runtime",
622
- "--summary"
623
- ], {
624
- cwd: path.resolve(__dirname, ".."),
625
- encoding: "utf8"
626
- });
627
- const phase2UsdcSummary = JSON.parse(phase2UsdcOutput);
628
- assert.strictEqual(phase2UsdcSummary.product, "xytara", "xytara phase 2 usdc cli product mismatch");
629
- assert.strictEqual(phase2UsdcSummary.category, "machine-commerce-phase-2-usdc-runtime-pack", "xytara phase 2 usdc cli category mismatch");
630
- assert.strictEqual(phase2UsdcSummary.operator_surface_count >= 2, true, "xytara phase 2 usdc cli operator surface count mismatch");
631
- const phase3Output = execFileSync(process.execPath, [
632
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
633
- "--phase-3",
634
- "--summary"
635
- ], {
636
- cwd: path.resolve(__dirname, ".."),
637
- encoding: "utf8"
638
- });
639
- const phase3Summary = JSON.parse(phase3Output);
640
- assert.strictEqual(phase3Summary.product, "xytara", "xytara phase 3 cli product mismatch");
641
- assert.strictEqual(phase3Summary.category, "machine-commerce-phase-3-native-bsv-pack", "xytara phase 3 cli category mismatch");
642
- assert.strictEqual(phase3Summary.ecosystem_count >= 4, true, "xytara phase 3 cli ecosystem count mismatch");
643
- const phase3NativeContinuityOutput = execFileSync(process.execPath, [
644
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
645
- "--phase-3-native-continuity",
646
- "--summary"
647
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
648
- const phase3NativeContinuitySummary = JSON.parse(phase3NativeContinuityOutput);
649
- assert.strictEqual(phase3NativeContinuitySummary.category, "machine-commerce-phase-3-native-continuity-pack", "xytara phase 3 native continuity cli category mismatch");
650
- assert.strictEqual(phase3NativeContinuitySummary.signal_count >= 4, true, "xytara phase 3 native continuity signal count mismatch");
651
- const phase3FreezeBaselineOutput = execFileSync(process.execPath, [
652
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
653
- "--phase-3-freeze-baseline",
654
- "--summary"
655
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
656
- const phase3FreezeBaselineSummary = JSON.parse(phase3FreezeBaselineOutput);
657
- assert.strictEqual(phase3FreezeBaselineSummary.category, "machine-commerce-phase-3-freeze-baseline-pack", "xytara phase 3 freeze baseline cli category mismatch");
658
- assert.strictEqual(phase3FreezeBaselineSummary.baseline_status, "recorded", "xytara phase 3 freeze baseline status mismatch");
659
- const phase3CompletionOutput = execFileSync(process.execPath, [
660
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
661
- "--phase-3-completion",
662
- "--summary"
663
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
664
- const phase3CompletionSummary = JSON.parse(phase3CompletionOutput);
665
- assert.strictEqual(phase3CompletionSummary.category, "machine-commerce-phase-3-completion-pack", "xytara phase 3 completion cli category mismatch");
666
- assert.strictEqual(phase3CompletionSummary.completion_check_count >= 5, true, "xytara phase 3 completion cli check count mismatch");
667
- const phase3FreezeReviewOutput = execFileSync(process.execPath, [
668
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
669
- "--phase-3-freeze-review",
670
- "--summary"
671
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
672
- const phase3FreezeReviewSummary = JSON.parse(phase3FreezeReviewOutput);
673
- assert.strictEqual(phase3FreezeReviewSummary.category, "machine-commerce-phase-3-freeze-review-pack", "xytara phase 3 freeze review cli category mismatch");
674
- assert.strictEqual(phase3FreezeReviewSummary.blocker_count, 0, "xytara phase 3 freeze review blocker count mismatch");
675
- const phase3GateOutput = execFileSync(process.execPath, [
676
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
677
- "--phase-3-gate",
678
- "--summary"
679
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
680
- const phase3GateSummary = JSON.parse(phase3GateOutput);
681
- assert.strictEqual(phase3GateSummary.category, "machine-commerce-phase-3-gate-pack", "xytara phase 3 gate cli category mismatch");
682
- assert.strictEqual(phase3GateSummary.unsatisfied_gate_count, 0, "xytara phase 3 gate unsatisfied count mismatch");
683
- const phase3CloseoutOutput = execFileSync(process.execPath, [
684
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
685
- "--phase-3-closeout",
686
- "--summary"
687
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
688
- const phase3CloseoutSummary = JSON.parse(phase3CloseoutOutput);
689
- assert.strictEqual(phase3CloseoutSummary.category, "machine-commerce-phase-3-closeout-pack", "xytara phase 3 closeout cli category mismatch");
690
- assert.strictEqual(phase3CloseoutSummary.blocking_action_count, 0, "xytara phase 3 closeout blocking action count mismatch");
691
- const phase3DecisionRecordOutput = execFileSync(process.execPath, [
692
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
693
- "--phase-3-decision-record",
694
- "--summary"
695
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
696
- const phase3DecisionRecordSummary = JSON.parse(phase3DecisionRecordOutput);
697
- assert.strictEqual(phase3DecisionRecordSummary.category, "machine-commerce-phase-3-decision-record-pack", "xytara phase 3 decision-record cli category mismatch");
698
- assert.strictEqual(phase3DecisionRecordSummary.pending_record_count, 0, "xytara phase 3 decision-record pending count mismatch");
699
- const phase3DecisionResolutionOutput = execFileSync(process.execPath, [
700
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
701
- "--phase-3-decision-resolution",
702
- "--summary"
703
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
704
- const phase3DecisionResolutionSummary = JSON.parse(phase3DecisionResolutionOutput);
705
- assert.strictEqual(phase3DecisionResolutionSummary.category, "machine-commerce-phase-3-decision-resolution-pack", "xytara phase 3 decision-resolution cli category mismatch");
706
- assert.strictEqual(phase3DecisionResolutionSummary.transition_count >= 2, true, "xytara phase 3 decision-resolution transition count mismatch");
707
- const phase3BsvTeranodeOutput = execFileSync(process.execPath, [
708
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
709
- "--phase-3-bsv-teranode-runtime",
710
- "--summary"
711
- ], {
712
- cwd: path.resolve(__dirname, ".."),
713
- encoding: "utf8"
714
- });
715
- const phase3BsvTeranodeSummary = JSON.parse(phase3BsvTeranodeOutput);
716
- assert.strictEqual(phase3BsvTeranodeSummary.product, "xytara", "xytara phase 3 bsv/teranode cli product mismatch");
717
- assert.strictEqual(phase3BsvTeranodeSummary.category, "machine-commerce-phase-3-bsv-teranode-runtime-pack", "xytara phase 3 bsv/teranode cli category mismatch");
718
- assert.strictEqual(phase3BsvTeranodeSummary.http_step_count >= 3, true, "xytara phase 3 bsv/teranode cli step count mismatch");
719
- const phase3MetanetOutput = execFileSync(process.execPath, [
720
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
721
- "--phase-3-metanet-runtime",
722
- "--summary"
723
- ], {
724
- cwd: path.resolve(__dirname, ".."),
725
- encoding: "utf8"
726
- });
727
- const phase3MetanetSummary = JSON.parse(phase3MetanetOutput);
728
- assert.strictEqual(phase3MetanetSummary.product, "xytara", "xytara phase 3 metanet cli product mismatch");
729
- assert.strictEqual(phase3MetanetSummary.category, "machine-commerce-phase-3-metanet-runtime-pack", "xytara phase 3 metanet cli category mismatch");
730
- assert.strictEqual(phase3MetanetSummary.http_step_count >= 3, true, "xytara phase 3 metanet cli step count mismatch");
731
- const phase3BrcOutput = execFileSync(process.execPath, [
732
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
733
- "--phase-3-brc-runtime",
734
- "--summary"
735
- ], {
736
- cwd: path.resolve(__dirname, ".."),
737
- encoding: "utf8"
738
- });
739
- const phase3BrcSummary = JSON.parse(phase3BrcOutput);
740
- assert.strictEqual(phase3BrcSummary.product, "xytara", "xytara phase 3 brc cli product mismatch");
741
- assert.strictEqual(phase3BrcSummary.category, "machine-commerce-phase-3-brc-runtime-pack", "xytara phase 3 brc cli category mismatch");
742
- assert.strictEqual(phase3BrcSummary.http_step_count >= 3, true, "xytara phase 3 brc cli step count mismatch");
743
- const phase4Output = execFileSync(process.execPath, [
744
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
745
- "--phase-4",
746
- "--summary"
747
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
748
- const phase4Summary = JSON.parse(phase4Output);
749
- assert.strictEqual(phase4Summary.category, "machine-commerce-phase-4-identity-trust-pack", "xytara phase 4 cli category mismatch");
750
- assert.strictEqual(phase4Summary.erc8004_mode_count >= 3, true, "xytara phase 4 cli erc8004 mode count mismatch");
751
- const phase5Output = execFileSync(process.execPath, [
752
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
753
- "--phase-5",
754
- "--summary"
755
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
756
- const phase5Summary = JSON.parse(phase5Output);
757
- assert.strictEqual(phase5Summary.category, "machine-commerce-phase-5-major-rails-pack", "xytara phase 5 cli category mismatch");
758
- const phase5ContinuityOutput = execFileSync(process.execPath, [
759
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
760
- "--phase-5-major-rails-continuity",
761
- "--summary"
762
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
763
- const phase5ContinuitySummary = JSON.parse(phase5ContinuityOutput);
764
- assert.strictEqual(phase5ContinuitySummary.category, "machine-commerce-phase-5-major-rails-continuity-pack", "xytara phase 5 continuity cli category mismatch");
765
- const phase5CompletionOutput = execFileSync(process.execPath, [
766
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
767
- "--phase-5-completion",
768
- "--summary"
769
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
770
- const phase5CompletionSummary = JSON.parse(phase5CompletionOutput);
771
- assert.strictEqual(phase5CompletionSummary.category, "machine-commerce-phase-5-completion-pack", "xytara phase 5 completion cli category mismatch");
772
- const phase5FreezeBaselineOutput = execFileSync(process.execPath, [
773
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
774
- "--phase-5-freeze-baseline",
775
- "--summary"
776
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
777
- const phase5FreezeBaselineSummary = JSON.parse(phase5FreezeBaselineOutput);
778
- assert.strictEqual(phase5FreezeBaselineSummary.category, "machine-commerce-phase-5-freeze-baseline-pack", "xytara phase 5 freeze baseline cli category mismatch");
779
- const phase5GateOutput = execFileSync(process.execPath, [
780
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
781
- "--phase-5-gate",
782
- "--summary"
783
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
784
- const phase5GateSummary = JSON.parse(phase5GateOutput);
785
- assert.strictEqual(phase5GateSummary.category, "machine-commerce-phase-5-gate-pack", "xytara phase 5 gate cli category mismatch");
786
- assert.strictEqual(phase5GateSummary.decision, "ready_for_phase_6", "xytara phase 5 gate decision mismatch");
787
- const phase5SolanaOutput = execFileSync(process.execPath, [
788
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
789
- "--phase-5-solana-runtime",
790
- "--summary"
791
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
792
- const phase5SolanaSummary = JSON.parse(phase5SolanaOutput);
793
- assert.strictEqual(phase5SolanaSummary.category, "machine-commerce-phase-5-solana-runtime-pack", "xytara phase 5 solana cli category mismatch");
794
- assert.strictEqual(phase5SolanaSummary.finality_stage_count >= 3, true, "xytara phase 5 solana cli finality count mismatch");
795
- const phase5AntelopeOutput = execFileSync(process.execPath, [
796
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
797
- "--phase-5-antelope-runtime",
798
- "--summary"
799
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
800
- const phase5AntelopeSummary = JSON.parse(phase5AntelopeOutput);
801
- assert.strictEqual(phase5AntelopeSummary.category, "machine-commerce-phase-5-antelope-runtime-pack", "xytara phase 5 antelope cli category mismatch");
802
- assert.strictEqual(phase5AntelopeSummary.finality_stage_count >= 3, true, "xytara phase 5 antelope cli finality count mismatch");
803
- const phase5ProtonXprOutput = execFileSync(process.execPath, [
804
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
805
- "--phase-5-proton-xpr-runtime",
806
- "--summary"
807
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
808
- const phase5ProtonXprSummary = JSON.parse(phase5ProtonXprOutput);
809
- assert.strictEqual(phase5ProtonXprSummary.category, "machine-commerce-phase-5-proton-xpr-runtime-pack", "xytara phase 5 proton xpr cli category mismatch");
810
- assert.strictEqual(phase5ProtonXprSummary.finality_stage_count >= 3, true, "xytara phase 5 proton xpr cli finality count mismatch");
811
- const phase5MetalOutput = execFileSync(process.execPath, [
812
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
813
- "--phase-5-metal-runtime",
814
- "--summary"
815
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
816
- const phase5MetalSummary = JSON.parse(phase5MetalOutput);
817
- assert.strictEqual(phase5MetalSummary.category, "machine-commerce-phase-5-metal-runtime-pack", "xytara phase 5 metal cli category mismatch");
818
- assert.strictEqual(phase5MetalSummary.finality_stage_count >= 3, true, "xytara phase 5 metal cli finality count mismatch");
819
- const phase6Output = execFileSync(process.execPath, [
820
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
821
- "--phase-6",
822
- "--summary"
823
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
824
- const phase6Summary = JSON.parse(phase6Output);
825
- assert.strictEqual(phase6Summary.category, "machine-commerce-phase-6-framework-runtime-pack", "xytara phase 6 cli category mismatch");
826
- assert.strictEqual(phase6Summary.runtime_mode_count >= 3, true, "xytara phase 6 cli runtime mode count mismatch");
827
- const phase6LanggraphOutput = execFileSync(process.execPath, [
828
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
829
- "--phase-6-langgraph-runtime",
830
- "--summary"
831
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
832
- const phase6LanggraphSummary = JSON.parse(phase6LanggraphOutput);
833
- assert.strictEqual(phase6LanggraphSummary.category, "machine-commerce-phase-6-langgraph-runtime-pack", "xytara phase 6 langgraph cli category mismatch");
834
- assert.strictEqual(phase6LanggraphSummary.runtime_mode_count >= 3, true, "xytara phase 6 langgraph cli runtime mode count mismatch");
835
- const phase6LangchainOutput = execFileSync(process.execPath, [
836
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
837
- "--phase-6-langchain-runtime",
838
- "--summary"
839
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
840
- const phase6LangchainSummary = JSON.parse(phase6LangchainOutput);
841
- assert.strictEqual(phase6LangchainSummary.category, "machine-commerce-phase-6-langchain-runtime-pack", "xytara phase 6 langchain cli category mismatch");
842
- assert.strictEqual(phase6LangchainSummary.runtime_mode_count >= 3, true, "xytara phase 6 langchain cli runtime mode count mismatch");
843
- const phase6AutogenOutput = execFileSync(process.execPath, [
844
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
845
- "--phase-6-autogen-runtime",
846
- "--summary"
847
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
848
- const phase6AutogenSummary = JSON.parse(phase6AutogenOutput);
849
- assert.strictEqual(phase6AutogenSummary.category, "machine-commerce-phase-6-autogen-runtime-pack", "xytara phase 6 autogen cli category mismatch");
850
- assert.strictEqual(phase6AutogenSummary.runtime_mode_count >= 3, true, "xytara phase 6 autogen cli runtime mode count mismatch");
851
- const phase6SemanticKernelOutput = execFileSync(process.execPath, [
852
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
853
- "--phase-6-semantic-kernel-runtime",
854
- "--summary"
855
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
856
- const phase6SemanticKernelSummary = JSON.parse(phase6SemanticKernelOutput);
857
- assert.strictEqual(phase6SemanticKernelSummary.category, "machine-commerce-phase-6-semantic-kernel-runtime-pack", "xytara phase 6 semantic kernel cli category mismatch");
858
- assert.strictEqual(phase6SemanticKernelSummary.runtime_mode_count >= 3, true, "xytara phase 6 semantic kernel cli runtime mode count mismatch");
859
- const phase6ContinuityOutput = execFileSync(process.execPath, [
860
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
861
- "--phase-6-framework-continuity",
862
- "--summary"
863
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
864
- const phase6ContinuitySummary = JSON.parse(phase6ContinuityOutput);
865
- assert.strictEqual(phase6ContinuitySummary.category, "machine-commerce-phase-6-framework-continuity-pack", "xytara phase 6 continuity cli category mismatch");
866
- const phase6CompletionOutput = execFileSync(process.execPath, [
867
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
868
- "--phase-6-completion",
869
- "--summary"
870
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
871
- const phase6CompletionSummary = JSON.parse(phase6CompletionOutput);
872
- assert.strictEqual(phase6CompletionSummary.category, "machine-commerce-phase-6-completion-pack", "xytara phase 6 completion cli category mismatch");
873
- assert.strictEqual(phase6CompletionSummary.unsatisfied_criteria_count, 0, "xytara phase 6 completion cli state mismatch");
874
- const phase6FreezeBaselineOutput = execFileSync(process.execPath, [
875
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
876
- "--phase-6-freeze-baseline",
877
- "--summary"
878
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
879
- const phase6FreezeBaselineSummary = JSON.parse(phase6FreezeBaselineOutput);
880
- assert.strictEqual(phase6FreezeBaselineSummary.category, "machine-commerce-phase-6-freeze-baseline-pack", "xytara phase 6 freeze baseline cli category mismatch");
881
- const phase6GateOutput = execFileSync(process.execPath, [
882
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
883
- "--phase-6-gate",
884
- "--summary"
885
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
886
- const phase6GateSummary = JSON.parse(phase6GateOutput);
887
- assert.strictEqual(phase6GateSummary.category, "machine-commerce-phase-6-gate-pack", "xytara phase 6 gate cli category mismatch");
888
- assert.strictEqual(phase6GateSummary.decision, "ready_for_phase_7", "xytara phase 6 gate cli decision mismatch");
889
- const phase7Output = execFileSync(process.execPath, [
890
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
891
- "--phase-7",
892
- "--summary"
893
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
894
- const phase7Summary = JSON.parse(phase7Output);
895
- assert.strictEqual(phase7Summary.category, "machine-commerce-phase-7-event-system-pack", "xytara phase 7 cli category mismatch");
896
- assert.strictEqual(phase7Summary.lane_count >= 4, true, "xytara phase 7 cli lane count mismatch");
897
- const phase7KafkaOutput = execFileSync(process.execPath, [
898
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
899
- "--phase-7-kafka-runtime",
900
- "--summary"
901
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
902
- const phase7KafkaSummary = JSON.parse(phase7KafkaOutput);
903
- assert.strictEqual(phase7KafkaSummary.category, "machine-commerce-phase-7-kafka-runtime-pack", "xytara phase 7 kafka cli category mismatch");
904
- const phase7NatsOutput = execFileSync(process.execPath, [
905
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
906
- "--phase-7-nats-runtime",
907
- "--summary"
908
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
909
- const phase7NatsSummary = JSON.parse(phase7NatsOutput);
910
- assert.strictEqual(phase7NatsSummary.category, "machine-commerce-phase-7-nats-runtime-pack", "xytara phase 7 nats cli category mismatch");
911
- const phase7MqttOutput = execFileSync(process.execPath, [
912
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
913
- "--phase-7-mqtt-runtime",
914
- "--summary"
915
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
916
- const phase7MqttSummary = JSON.parse(phase7MqttOutput);
917
- assert.strictEqual(phase7MqttSummary.category, "machine-commerce-phase-7-mqtt-runtime-pack", "xytara phase 7 mqtt cli category mismatch");
918
- const phase7WebhookEventBusOutput = execFileSync(process.execPath, [
919
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
920
- "--phase-7-webhook-event-bus-runtime",
921
- "--summary"
922
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
923
- const phase7WebhookEventBusSummary = JSON.parse(phase7WebhookEventBusOutput);
924
- assert.strictEqual(
925
- phase7WebhookEventBusSummary.category,
926
- "machine-commerce-phase-7-webhook-event-bus-runtime-pack",
927
- "xytara phase 7 webhook event bus cli category mismatch"
928
- );
929
- const phase7ContinuityOutput = execFileSync(process.execPath, [
930
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
931
- "--phase-7-event-system-continuity",
932
- "--summary"
933
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
934
- const phase7ContinuitySummary = JSON.parse(phase7ContinuityOutput);
935
- assert.strictEqual(phase7ContinuitySummary.category, "machine-commerce-phase-7-event-system-continuity-pack", "xytara phase 7 continuity cli category mismatch");
936
- const phase7CompletionOutput = execFileSync(process.execPath, [
937
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
938
- "--phase-7-completion",
939
- "--summary"
940
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
941
- const phase7CompletionSummary = JSON.parse(phase7CompletionOutput);
942
- assert.strictEqual(phase7CompletionSummary.category, "machine-commerce-phase-7-completion-pack", "xytara phase 7 completion cli category mismatch");
943
- assert.strictEqual(phase7CompletionSummary.unsatisfied_criteria_count, 0, "xytara phase 7 completion cli state mismatch");
944
- const phase7FreezeBaselineOutput = execFileSync(process.execPath, [
945
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
946
- "--phase-7-freeze-baseline",
947
- "--summary"
948
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
949
- const phase7FreezeBaselineSummary = JSON.parse(phase7FreezeBaselineOutput);
950
- assert.strictEqual(phase7FreezeBaselineSummary.category, "machine-commerce-phase-7-freeze-baseline-pack", "xytara phase 7 freeze baseline cli category mismatch");
951
- const phase7FreezeReviewOutput = execFileSync(process.execPath, [
952
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
953
- "--phase-7-freeze-review",
954
- "--summary"
955
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
956
- const phase7FreezeReviewSummary = JSON.parse(phase7FreezeReviewOutput);
957
- assert.strictEqual(phase7FreezeReviewSummary.category, "machine-commerce-phase-7-freeze-review-pack", "xytara phase 7 freeze review cli category mismatch");
958
- const phase7GateOutput = execFileSync(process.execPath, [
959
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
960
- "--phase-7-gate",
961
- "--summary"
962
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
963
- const phase7GateSummary = JSON.parse(phase7GateOutput);
964
- assert.strictEqual(phase7GateSummary.category, "machine-commerce-phase-7-gate-pack", "xytara phase 7 gate cli category mismatch");
965
- assert.strictEqual(phase7GateSummary.decision, "ready_for_phase_8", "xytara phase 7 gate cli decision mismatch");
966
- assert.strictEqual(phase7GateSummary.unsatisfied_gate_count, 0, "xytara phase 7 gate cli state mismatch");
967
- const phase7CloseoutOutput = execFileSync(process.execPath, [
968
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
969
- "--phase-7-closeout",
970
- "--summary"
971
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
972
- const phase7CloseoutSummary = JSON.parse(phase7CloseoutOutput);
973
- assert.strictEqual(phase7CloseoutSummary.category, "machine-commerce-phase-7-closeout-pack", "xytara phase 7 closeout cli category mismatch");
974
- const phase7DecisionRecordOutput = execFileSync(process.execPath, [
975
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
976
- "--phase-7-decision-record",
977
- "--summary"
978
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
979
- const phase7DecisionRecordSummary = JSON.parse(phase7DecisionRecordOutput);
980
- assert.strictEqual(phase7DecisionRecordSummary.category, "machine-commerce-phase-7-decision-record-pack", "xytara phase 7 decision-record cli category mismatch");
981
- assert.strictEqual(phase7DecisionRecordSummary.pending_record_count, 0, "xytara phase 7 decision-record cli state mismatch");
982
- const phase8Output = execFileSync(process.execPath, [
983
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
984
- "--phase-8",
985
- "--summary"
986
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
987
- const phase8Summary = JSON.parse(phase8Output);
988
- assert.strictEqual(phase8Summary.category, "machine-commerce-phase-8-proof-bridges-pack", "xytara phase 8 cli category mismatch");
989
- const phase8ProofBridgeContinuityOutput = execFileSync(process.execPath, [
990
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
991
- "--phase-8-proof-bridge-continuity",
992
- "--summary"
993
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
994
- const phase8ProofBridgeContinuitySummary = JSON.parse(phase8ProofBridgeContinuityOutput);
995
- assert.strictEqual(phase8ProofBridgeContinuitySummary.category, "machine-commerce-phase-8-proof-bridge-continuity-pack", "xytara phase 8 proof-bridge continuity cli category mismatch");
996
- const phase8CompletionOutput = execFileSync(process.execPath, [
997
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
998
- "--phase-8-completion",
999
- "--summary"
1000
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1001
- const phase8CompletionSummary = JSON.parse(phase8CompletionOutput);
1002
- assert.strictEqual(phase8CompletionSummary.category, "machine-commerce-phase-8-completion-pack", "xytara phase 8 completion cli category mismatch");
1003
- assert.strictEqual(phase8CompletionSummary.unsatisfied_criteria_count, 0, "xytara phase 8 completion cli state mismatch");
1004
- const phase8FreezeBaselineOutput = execFileSync(process.execPath, [
1005
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1006
- "--phase-8-freeze-baseline",
1007
- "--summary"
1008
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1009
- const phase8FreezeBaselineSummary = JSON.parse(phase8FreezeBaselineOutput);
1010
- assert.strictEqual(phase8FreezeBaselineSummary.category, "machine-commerce-phase-8-freeze-baseline-pack", "xytara phase 8 freeze baseline cli category mismatch");
1011
- assert.strictEqual(phase8FreezeBaselineSummary.baseline_status, "recorded", "xytara phase 8 freeze baseline status mismatch");
1012
- const phase8FreezeReviewOutput = execFileSync(process.execPath, [
1013
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1014
- "--phase-8-freeze-review",
1015
- "--summary"
1016
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1017
- const phase8FreezeReviewSummary = JSON.parse(phase8FreezeReviewOutput);
1018
- assert.strictEqual(phase8FreezeReviewSummary.category, "machine-commerce-phase-8-freeze-review-pack", "xytara phase 8 freeze review cli category mismatch");
1019
- const phase8GateOutput = execFileSync(process.execPath, [
1020
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1021
- "--phase-8-gate",
1022
- "--summary"
1023
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1024
- const phase8GateSummary = JSON.parse(phase8GateOutput);
1025
- assert.strictEqual(phase8GateSummary.category, "machine-commerce-phase-8-gate-pack", "xytara phase 8 gate cli category mismatch");
1026
- assert.strictEqual(phase8GateSummary.decision, "ready_for_phase_9", "xytara phase 8 gate cli decision mismatch");
1027
- assert.strictEqual(phase8GateSummary.unsatisfied_gate_count, 0, "xytara phase 8 gate cli state mismatch");
1028
- const phase8CloseoutOutput = execFileSync(process.execPath, [
1029
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1030
- "--phase-8-closeout",
1031
- "--summary"
1032
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1033
- const phase8CloseoutSummary = JSON.parse(phase8CloseoutOutput);
1034
- assert.strictEqual(phase8CloseoutSummary.category, "machine-commerce-phase-8-closeout-pack", "xytara phase 8 closeout cli category mismatch");
1035
- const phase8DecisionRecordOutput = execFileSync(process.execPath, [
1036
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1037
- "--phase-8-decision-record",
1038
- "--summary"
1039
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1040
- const phase8DecisionRecordSummary = JSON.parse(phase8DecisionRecordOutput);
1041
- assert.strictEqual(phase8DecisionRecordSummary.category, "machine-commerce-phase-8-decision-record-pack", "xytara phase 8 decision-record cli category mismatch");
1042
- assert.strictEqual(phase8DecisionRecordSummary.pending_record_count, 0, "xytara phase 8 decision-record cli state mismatch");
1043
- const phase8DecisionResolutionOutput = execFileSync(process.execPath, [
1044
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1045
- "--phase-8-decision-resolution",
1046
- "--summary"
1047
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1048
- const phase8DecisionResolutionSummary = JSON.parse(phase8DecisionResolutionOutput);
1049
- assert.strictEqual(phase8DecisionResolutionSummary.category, "machine-commerce-phase-8-decision-resolution-pack", "xytara phase 8 decision-resolution cli category mismatch");
1050
- const phase8ExternalResultImportOutput = execFileSync(process.execPath, [
1051
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1052
- "--phase-8-external-result-import-runtime",
1053
- "--summary"
1054
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1055
- const phase8ExternalResultImportSummary = JSON.parse(phase8ExternalResultImportOutput);
1056
- assert.strictEqual(phase8ExternalResultImportSummary.category, "machine-commerce-phase-8-external-result-import-runtime-pack", "xytara phase 8 external-result-import cli category mismatch");
1057
- const phase8ExternalReceiptImportOutput = execFileSync(process.execPath, [
1058
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1059
- "--phase-8-external-receipt-import-runtime",
1060
- "--summary"
1061
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1062
- const phase8ExternalReceiptImportSummary = JSON.parse(phase8ExternalReceiptImportOutput);
1063
- assert.strictEqual(phase8ExternalReceiptImportSummary.category, "machine-commerce-phase-8-external-receipt-import-runtime-pack", "xytara phase 8 external-receipt-import cli category mismatch");
1064
- const phase8BundleNormalizationOutput = execFileSync(process.execPath, [
1065
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1066
- "--phase-8-proof-bundle-normalization-runtime",
1067
- "--summary"
1068
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1069
- const phase8BundleNormalizationSummary = JSON.parse(phase8BundleNormalizationOutput);
1070
- assert.strictEqual(phase8BundleNormalizationSummary.category, "machine-commerce-phase-8-proof-bundle-normalization-runtime-pack", "xytara phase 8 proof-bundle-normalization cli category mismatch");
1071
- const phase9Output = execFileSync(process.execPath, [
1072
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1073
- "--phase-9",
1074
- "--summary"
1075
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1076
- const phase9Summary = JSON.parse(phase9Output);
1077
- assert.strictEqual(phase9Summary.category, "machine-commerce-phase-9-treasury-connectivity-pack", "xytara phase 9 cli category mismatch");
1078
- assert.strictEqual(phase9Summary.destination_mode_count >= 3, true, "xytara phase 9 destination mode count mismatch");
1079
- assert.strictEqual(phase9Summary.custody_mode_count >= 3, true, "xytara phase 9 custody mode count mismatch");
1080
- assert.strictEqual(phase9Summary.accounting_mode_count >= 3, true, "xytara phase 9 accounting mode count mismatch");
1081
- const phase9TreasuryContinuityOutput = execFileSync(process.execPath, [
1082
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1083
- "--phase-9-treasury-continuity",
1084
- "--summary"
1085
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1086
- const phase9TreasuryContinuitySummary = JSON.parse(phase9TreasuryContinuityOutput);
1087
- assert.strictEqual(phase9TreasuryContinuitySummary.category, "machine-commerce-phase-9-treasury-continuity-pack", "xytara phase 9 treasury continuity cli category mismatch");
1088
- const phase9CompletionOutput = execFileSync(process.execPath, [
1089
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1090
- "--phase-9-completion",
1091
- "--summary"
1092
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1093
- const phase9CompletionSummary = JSON.parse(phase9CompletionOutput);
1094
- assert.strictEqual(phase9CompletionSummary.category, "machine-commerce-phase-9-completion-pack", "xytara phase 9 completion cli category mismatch");
1095
- assert.strictEqual(phase9CompletionSummary.unsatisfied_criteria_count, 0, "xytara phase 9 completion cli state mismatch");
1096
- const phase9FreezeBaselineOutput = execFileSync(process.execPath, [
1097
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1098
- "--phase-9-freeze-baseline",
1099
- "--summary"
1100
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1101
- const phase9FreezeBaselineSummary = JSON.parse(phase9FreezeBaselineOutput);
1102
- assert.strictEqual(phase9FreezeBaselineSummary.category, "machine-commerce-phase-9-freeze-baseline-pack", "xytara phase 9 freeze baseline cli category mismatch");
1103
- assert.strictEqual(phase9FreezeBaselineSummary.baseline_status, "recorded", "xytara phase 9 freeze baseline cli status mismatch");
1104
- const phase9FreezeReviewOutput = execFileSync(process.execPath, [
1105
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1106
- "--phase-9-freeze-review",
1107
- "--summary"
1108
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1109
- const phase9FreezeReviewSummary = JSON.parse(phase9FreezeReviewOutput);
1110
- assert.strictEqual(phase9FreezeReviewSummary.category, "machine-commerce-phase-9-freeze-review-pack", "xytara phase 9 freeze review cli category mismatch");
1111
- assert.strictEqual(phase9FreezeReviewSummary.unsatisfied_resolution_count, 0, "xytara phase 9 freeze review cli state mismatch");
1112
- const phase9GateOutput = execFileSync(process.execPath, [
1113
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1114
- "--phase-9-gate",
1115
- "--summary"
1116
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1117
- const phase9GateSummary = JSON.parse(phase9GateOutput);
1118
- assert.strictEqual(phase9GateSummary.category, "machine-commerce-phase-9-gate-pack", "xytara phase 9 gate cli category mismatch");
1119
- assert.strictEqual(phase9GateSummary.decision, "ready_for_phase_10", "xytara phase 9 gate cli decision mismatch");
1120
- assert.strictEqual(phase9GateSummary.unsatisfied_gate_count, 0, "xytara phase 9 gate cli state mismatch");
1121
- const phase9CloseoutOutput = execFileSync(process.execPath, [
1122
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1123
- "--phase-9-closeout",
1124
- "--summary"
1125
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1126
- const phase9CloseoutSummary = JSON.parse(phase9CloseoutOutput);
1127
- assert.strictEqual(phase9CloseoutSummary.category, "machine-commerce-phase-9-closeout-pack", "xytara phase 9 closeout cli category mismatch");
1128
- const phase9DecisionRecordOutput = execFileSync(process.execPath, [
1129
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1130
- "--phase-9-decision-record",
1131
- "--summary"
1132
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1133
- const phase9DecisionRecordSummary = JSON.parse(phase9DecisionRecordOutput);
1134
- assert.strictEqual(phase9DecisionRecordSummary.category, "machine-commerce-phase-9-decision-record-pack", "xytara phase 9 decision-record cli category mismatch");
1135
- assert.strictEqual(phase9DecisionRecordSummary.pending_record_count, 0, "xytara phase 9 decision-record cli state mismatch");
1136
- const phase9DecisionResolutionOutput = execFileSync(process.execPath, [
1137
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1138
- "--phase-9-decision-resolution",
1139
- "--summary"
1140
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1141
- const phase9DecisionResolutionSummary = JSON.parse(phase9DecisionResolutionOutput);
1142
- assert.strictEqual(phase9DecisionResolutionSummary.category, "machine-commerce-phase-9-decision-resolution-pack", "xytara phase 9 decision-resolution cli category mismatch");
1143
- const phase9TreasuryDestinationsOutput = execFileSync(process.execPath, [
1144
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1145
- "--phase-9-treasury-destinations-runtime",
1146
- "--summary"
1147
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1148
- const phase9TreasuryDestinationsSummary = JSON.parse(phase9TreasuryDestinationsOutput);
1149
- assert.strictEqual(
1150
- phase9TreasuryDestinationsSummary.category,
1151
- "machine-commerce-phase-9-treasury-destinations-runtime-pack",
1152
- "xytara phase 9 treasury-destinations cli category mismatch"
1153
- );
1154
- assert.strictEqual(phase9TreasuryDestinationsSummary.destination_mode_count >= 3, true, "xytara phase 9 treasury-destinations destination count mismatch");
1155
- const phase9CustodyRefsOutput = execFileSync(process.execPath, [
1156
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1157
- "--phase-9-custody-refs-runtime",
1158
- "--summary"
1159
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1160
- const phase9CustodyRefsSummary = JSON.parse(phase9CustodyRefsOutput);
1161
- assert.strictEqual(phase9CustodyRefsSummary.category, "machine-commerce-phase-9-custody-refs-runtime-pack", "xytara phase 9 custody-refs cli category mismatch");
1162
- assert.strictEqual(phase9CustodyRefsSummary.custody_mode_count >= 3, true, "xytara phase 9 custody mode count mismatch");
1163
- const phase9OperatorAccountingBridgesOutput = execFileSync(process.execPath, [
1164
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1165
- "--phase-9-operator-accounting-bridges-runtime",
1166
- "--summary"
1167
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1168
- const phase9OperatorAccountingBridgesSummary = JSON.parse(phase9OperatorAccountingBridgesOutput);
1169
- assert.strictEqual(
1170
- phase9OperatorAccountingBridgesSummary.category,
1171
- "machine-commerce-phase-9-operator-accounting-bridges-runtime-pack",
1172
- "xytara phase 9 operator-accounting-bridges cli category mismatch"
1173
- );
1174
- assert.strictEqual(phase9OperatorAccountingBridgesSummary.accounting_mode_count >= 3, true, "xytara phase 9 accounting bridge mode count mismatch");
1175
- const phase10Output = execFileSync(process.execPath, [
1176
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1177
- "--phase-10",
1178
- "--summary"
1179
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1180
- const phase10Summary = JSON.parse(phase10Output);
1181
- assert.strictEqual(phase10Summary.category, "machine-commerce-phase-10-long-tail-ecosystem-pack", "xytara phase 10 cli category mismatch");
1182
- assert.strictEqual(phase10Summary.lane_count >= 3, true, "xytara phase 10 lane count mismatch");
1183
- assert.strictEqual(phase10Summary.extension_mode_count >= 3, true, "xytara phase 10 extension mode count mismatch");
1184
- const phase10DemandSignalAdaptersOutput = execFileSync(process.execPath, [
1185
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1186
- "--phase-10-demand-signal-adapters-runtime",
1187
- "--summary"
1188
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1189
- const phase10DemandSignalAdaptersSummary = JSON.parse(phase10DemandSignalAdaptersOutput);
1190
- assert.strictEqual(
1191
- phase10DemandSignalAdaptersSummary.category,
1192
- "machine-commerce-phase-10-demand-signal-adapters-runtime-pack",
1193
- "xytara phase 10 demand-signal-adapters cli category mismatch"
1194
- );
1195
- assert.strictEqual(phase10DemandSignalAdaptersSummary.demand_mode_count >= 3, true, "xytara phase 10 demand mode count mismatch");
1196
- const phase10NicheExtensionRegistryOutput = execFileSync(process.execPath, [
1197
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1198
- "--phase-10-niche-extension-registry-runtime",
1199
- "--summary"
1200
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1201
- const phase10NicheExtensionRegistrySummary = JSON.parse(phase10NicheExtensionRegistryOutput);
1202
- assert.strictEqual(
1203
- phase10NicheExtensionRegistrySummary.category,
1204
- "machine-commerce-phase-10-niche-extension-registry-runtime-pack",
1205
- "xytara phase 10 niche-extension-registry cli category mismatch"
1206
- );
1207
- assert.strictEqual(phase10NicheExtensionRegistrySummary.demand_mode_count >= 3, true, "xytara phase 10 niche-extension-registry demand mode count mismatch");
1208
- const phase10EcosystemBacklogTriageOutput = execFileSync(process.execPath, [
1209
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1210
- "--phase-10-ecosystem-backlog-triage-runtime",
1211
- "--summary"
1212
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1213
- const phase10EcosystemBacklogTriageSummary = JSON.parse(phase10EcosystemBacklogTriageOutput);
1214
- assert.strictEqual(
1215
- phase10EcosystemBacklogTriageSummary.category,
1216
- "machine-commerce-phase-10-ecosystem-backlog-triage-runtime-pack",
1217
- "xytara phase 10 ecosystem-backlog-triage cli category mismatch"
1218
- );
1219
- assert.strictEqual(phase10EcosystemBacklogTriageSummary.demand_mode_count >= 3, true, "xytara phase 10 ecosystem-backlog-triage demand mode count mismatch");
1220
- const phase10LongTailContinuityOutput = execFileSync(process.execPath, [
1221
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1222
- "--phase-10-long-tail-continuity",
1223
- "--summary"
1224
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1225
- const phase10LongTailContinuitySummary = JSON.parse(phase10LongTailContinuityOutput);
1226
- assert.strictEqual(phase10LongTailContinuitySummary.category, "machine-commerce-phase-10-long-tail-continuity-pack", "xytara phase 10 long-tail continuity cli category mismatch");
1227
- const phase10CompletionOutput = execFileSync(process.execPath, [
1228
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1229
- "--phase-10-completion",
1230
- "--summary"
1231
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1232
- const phase10CompletionSummary = JSON.parse(phase10CompletionOutput);
1233
- assert.strictEqual(phase10CompletionSummary.category, "machine-commerce-phase-10-completion-pack", "xytara phase 10 completion cli category mismatch");
1234
- assert.strictEqual(phase10CompletionSummary.unsatisfied_criteria_count, 0, "xytara phase 10 completion unsatisfied criteria mismatch");
1235
- const phase10FreezeBaselineOutput = execFileSync(process.execPath, [
1236
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1237
- "--phase-10-freeze-baseline",
1238
- "--summary"
1239
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1240
- const phase10FreezeBaselineSummary = JSON.parse(phase10FreezeBaselineOutput);
1241
- assert.strictEqual(phase10FreezeBaselineSummary.category, "machine-commerce-phase-10-freeze-baseline-pack", "xytara phase 10 freeze baseline cli category mismatch");
1242
- assert.strictEqual(phase10FreezeBaselineSummary.baseline_status, "recorded", "xytara phase 10 freeze baseline status mismatch");
1243
- const phase10FreezeReviewOutput = execFileSync(process.execPath, [
1244
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1245
- "--phase-10-freeze-review",
1246
- "--summary"
1247
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1248
- const phase10FreezeReviewSummary = JSON.parse(phase10FreezeReviewOutput);
1249
- assert.strictEqual(phase10FreezeReviewSummary.category, "machine-commerce-phase-10-freeze-review-pack", "xytara phase 10 freeze review cli category mismatch");
1250
- const phase10GateOutput = execFileSync(process.execPath, [
1251
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1252
- "--phase-10-gate",
1253
- "--summary"
1254
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1255
- const phase10GateSummary = JSON.parse(phase10GateOutput);
1256
- assert.strictEqual(phase10GateSummary.category, "machine-commerce-phase-10-gate-pack", "xytara phase 10 gate cli category mismatch");
1257
- assert.strictEqual(phase10GateSummary.decision, "ready_for_program_closeout", "xytara phase 10 gate decision mismatch");
1258
- assert.strictEqual(phase10GateSummary.unsatisfied_gate_count, 0, "xytara phase 10 gate unsatisfied count mismatch");
1259
- const phase10CloseoutOutput = execFileSync(process.execPath, [
1260
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1261
- "--phase-10-closeout",
1262
- "--summary"
1263
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1264
- const phase10CloseoutSummary = JSON.parse(phase10CloseoutOutput);
1265
- assert.strictEqual(phase10CloseoutSummary.category, "machine-commerce-phase-10-closeout-pack", "xytara phase 10 closeout cli category mismatch");
1266
- const phase10DecisionRecordOutput = execFileSync(process.execPath, [
1267
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1268
- "--phase-10-decision-record",
1269
- "--summary"
1270
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1271
- const phase10DecisionRecordSummary = JSON.parse(phase10DecisionRecordOutput);
1272
- assert.strictEqual(phase10DecisionRecordSummary.category, "machine-commerce-phase-10-decision-record-pack", "xytara phase 10 decision-record cli category mismatch");
1273
- assert.strictEqual(phase10DecisionRecordSummary.pending_record_count, 0, "xytara phase 10 decision-record pending count mismatch");
1274
- const phase10DecisionResolutionOutput = execFileSync(process.execPath, [
1275
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1276
- "--phase-10-decision-resolution",
1277
- "--summary"
1278
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1279
- const phase10DecisionResolutionSummary = JSON.parse(phase10DecisionResolutionOutput);
1280
- assert.strictEqual(phase10DecisionResolutionSummary.category, "machine-commerce-phase-10-decision-resolution-pack", "xytara phase 10 decision-resolution cli category mismatch");
1281
- const phase4Erc8004Output = execFileSync(process.execPath, [
1282
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1283
- "--phase-4-erc8004-runtime",
1284
- "--summary"
1285
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1286
- const phase4Erc8004Summary = JSON.parse(phase4Erc8004Output);
1287
- assert.strictEqual(phase4Erc8004Summary.category, "machine-commerce-phase-4-erc8004-runtime-pack", "xytara phase 4 erc8004 cli category mismatch");
1288
- assert.strictEqual(phase4Erc8004Summary.http_step_count >= 3, true, "xytara phase 4 erc8004 cli step count mismatch");
1289
- assert.strictEqual(phase4Erc8004Summary.erc8004_mode_count >= 3, true, "xytara phase 4 erc8004 cli mode count mismatch");
1290
- const phase4IdentityRegistryOutput = execFileSync(process.execPath, [
1291
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1292
- "--phase-4-identity-registry-runtime",
1293
- "--summary"
1294
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1295
- const phase4IdentityRegistrySummary = JSON.parse(phase4IdentityRegistryOutput);
1296
- assert.strictEqual(phase4IdentityRegistrySummary.category, "machine-commerce-phase-4-identity-registry-runtime-pack", "xytara phase 4 identity registry cli category mismatch");
1297
- assert.strictEqual(phase4IdentityRegistrySummary.http_step_count >= 3, true, "xytara phase 4 identity registry cli step count mismatch");
1298
- assert.strictEqual(phase4IdentityRegistrySummary.resolution_mode_count >= 3, true, "xytara phase 4 identity registry cli resolution count mismatch");
1299
- const phase4AttestationOutput = execFileSync(process.execPath, [
1300
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1301
- "--phase-4-attestation-runtime",
1302
- "--summary"
1303
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1304
- const phase4AttestationSummary = JSON.parse(phase4AttestationOutput);
1305
- assert.strictEqual(phase4AttestationSummary.category, "machine-commerce-phase-4-attestation-runtime-pack", "xytara phase 4 attestation cli category mismatch");
1306
- assert.strictEqual(phase4AttestationSummary.http_step_count >= 3, true, "xytara phase 4 attestation cli step count mismatch");
1307
- assert.strictEqual(phase4AttestationSummary.review_mode_count >= 3, true, "xytara phase 4 attestation cli review count mismatch");
1308
- const phase4TrustContinuityOutput = execFileSync(process.execPath, [
1309
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1310
- "--phase-4-trust-continuity",
1311
- "--summary"
1312
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1313
- const phase4TrustContinuitySummary = JSON.parse(phase4TrustContinuityOutput);
1314
- assert.strictEqual(phase4TrustContinuitySummary.category, "machine-commerce-phase-4-trust-continuity-pack", "xytara phase 4 trust continuity cli category mismatch");
1315
- const phase4CompletionOutput = execFileSync(process.execPath, [
1316
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1317
- "--phase-4-completion",
1318
- "--summary"
1319
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1320
- const phase4CompletionSummary = JSON.parse(phase4CompletionOutput);
1321
- assert.strictEqual(phase4CompletionSummary.category, "machine-commerce-phase-4-completion-pack", "xytara phase 4 completion cli category mismatch");
1322
- const phase4FreezeBaselineOutput = execFileSync(process.execPath, [
1323
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1324
- "--phase-4-freeze-baseline",
1325
- "--summary"
1326
- ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1327
- const phase4FreezeBaselineSummary = JSON.parse(phase4FreezeBaselineOutput);
1328
- assert.strictEqual(phase4FreezeBaselineSummary.category, "machine-commerce-phase-4-freeze-baseline-pack", "xytara phase 4 freeze baseline cli category mismatch");
1329
- assert.strictEqual(phase4FreezeBaselineSummary.baseline_status, "recorded", "xytara phase 4 freeze baseline status mismatch");
1330
- const publishPlanOutput = execFileSync(process.execPath, [
1331
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1332
- "--publish-plan",
1333
- "--summary"
1334
- ], {
1335
- cwd: path.resolve(__dirname, ".."),
1336
- encoding: "utf8"
1337
- });
1338
- const publishPlanSummary = JSON.parse(publishPlanOutput);
1339
- assert.strictEqual(publishPlanSummary.product, "xytara", "xytara publish plan cli product mismatch");
1340
- assert.strictEqual(publishPlanSummary.category, "machine-commerce-publish-plan", "xytara publish plan cli category mismatch");
1341
- assert.strictEqual(publishPlanSummary.publish_step_count >= 5, true, "xytara publish plan cli step count mismatch");
1342
- const ecosystemOutput = execFileSync(process.execPath, [
1343
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1344
- "--ecosystem",
1345
- "--summary"
1346
- ], {
1347
- cwd: path.resolve(__dirname, ".."),
1348
- encoding: "utf8"
1349
- });
1350
- const ecosystemSummary = JSON.parse(ecosystemOutput);
1351
- assert.strictEqual(ecosystemSummary.product, "xytara", "xytara ecosystem cli product mismatch");
1352
- assert.strictEqual(ecosystemSummary.category, "machine-commerce-ecosystem-entry", "xytara ecosystem cli category mismatch");
1353
- assert.strictEqual(ecosystemSummary.audience_count >= 4, true, "xytara ecosystem cli audience count mismatch");
1354
- const narrativeOutput = execFileSync(process.execPath, [
1355
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1356
- "--narrative",
1357
- "--summary"
1358
- ], {
1359
- cwd: path.resolve(__dirname, ".."),
1360
- encoding: "utf8"
1361
- });
1362
- const narrativeSummary = JSON.parse(narrativeOutput);
1363
- assert.strictEqual(narrativeSummary.product, "xytara", "xytara narrative cli product mismatch");
1364
- assert.strictEqual(narrativeSummary.category, "machine-commerce-launch-narrative", "xytara narrative cli category mismatch");
1365
- assert.strictEqual(narrativeSummary.immediate_audience_count >= 4, true, "xytara narrative cli audience count mismatch");
1366
- const outreachProofOutput = execFileSync(process.execPath, [
1367
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1368
- "--outreach-proof",
1369
- "--summary"
1370
- ], {
1371
- cwd: path.resolve(__dirname, ".."),
1372
- encoding: "utf8"
1373
- });
1374
- const outreachProofSummary = JSON.parse(outreachProofOutput);
1375
- assert.strictEqual(outreachProofSummary.product, "xytara", "xytara outreach proof cli product mismatch");
1376
- assert.strictEqual(outreachProofSummary.category, "machine-commerce-outreach-proof", "xytara outreach proof cli category mismatch");
1377
- assert.strictEqual(outreachProofSummary.live_rail_count >= 3, true, "xytara outreach proof cli rail count mismatch");
1378
- const announcementOutput = execFileSync(process.execPath, [
1379
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1380
- "--announcement",
1381
- "--summary"
1382
- ], {
1383
- cwd: path.resolve(__dirname, ".."),
1384
- encoding: "utf8"
1385
- });
1386
- const announcementSummary = JSON.parse(announcementOutput);
1387
- assert.strictEqual(announcementSummary.product, "xytara", "xytara announcement cli product mismatch");
1388
- assert.strictEqual(announcementSummary.category, "machine-commerce-announcement-pack", "xytara announcement cli category mismatch");
1389
- assert.strictEqual(announcementSummary.publish_step_count >= 5, true, "xytara announcement cli publish step mismatch");
1390
- const releaseCandidateOutput = execFileSync(process.execPath, [
1391
- path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1392
- "--candidate",
1393
- "--summary"
1394
- ], {
1395
- cwd: path.resolve(__dirname, ".."),
1396
- encoding: "utf8"
1397
- });
1398
- const releaseCandidateSummary = JSON.parse(releaseCandidateOutput);
1399
- assert.strictEqual(releaseCandidateSummary.product, "xytara", "xytara release candidate cli product mismatch");
1400
- assert.strictEqual(releaseCandidateSummary.category, "machine-commerce-release-candidate", "xytara release candidate cli category mismatch");
1401
- assert.strictEqual(releaseCandidateSummary.checklist_count >= 5, true, "xytara release candidate cli checklist mismatch");
1402
- } finally {
1403
- server.kill();
1404
- }
1405
-
1406
- console.log("xytara verify:tooling passed");
1407
- }
1408
-
1409
- main().catch((error) => {
1410
- console.error(error);
1411
- process.exit(1);
1412
- });
1
+ "use strict";
2
+
3
+ const assert = require("assert");
4
+ const { execFileSync, spawn } = require("child_process");
5
+ const path = require("path");
6
+
7
+ function runCli(args) {
8
+ const output = execFileSync(process.execPath, [
9
+ path.resolve(__dirname, "registry_cli.js"),
10
+ ...args
11
+ ], {
12
+ cwd: path.resolve(__dirname, ".."),
13
+ encoding: "utf8"
14
+ });
15
+ return JSON.parse(output);
16
+ }
17
+
18
+ async function waitForHealth(url, timeoutMs = 10000) {
19
+ const startedAt = Date.now();
20
+ while (Date.now() - startedAt < timeoutMs) {
21
+ try {
22
+ const response = await fetch(`${url}/health`);
23
+ if (response.ok) {
24
+ return;
25
+ }
26
+ } catch (_) {
27
+ // keep waiting for the server to come up
28
+ }
29
+ await new Promise((resolve) => setTimeout(resolve, 200));
30
+ }
31
+ throw new Error("tooling_server_health_timeout");
32
+ }
33
+
34
+ async function main() {
35
+ const protocolValidation = runCli(["validate-bundle", "--example", "protocol"]);
36
+ assert.strictEqual(protocolValidation.ok, true, "protocol bundle validation via cli mismatch");
37
+
38
+ const settlementValidation = runCli(["validate-bundle", "--example", "settlement"]);
39
+ assert.strictEqual(settlementValidation.ok, true, "settlement bundle validation via cli mismatch");
40
+
41
+ const identityValidation = runCli(["validate-bundle", "--example", "identity"]);
42
+ assert.strictEqual(identityValidation.ok, true, "identity bundle validation via cli mismatch");
43
+
44
+ const bundleSet = runCli(["export-bundle-set", "--notes", "tooling smoke"]);
45
+ assert.strictEqual(bundleSet.bundle_count >= 3, true, "bundle-set export via cli mismatch");
46
+ assert.strictEqual(bundleSet.notes, "tooling smoke", "bundle-set notes mismatch");
47
+
48
+ const snapshotOutput = runCli(["export-snapshot"]);
49
+ assert.strictEqual(snapshotOutput.snapshot.integration_count >= 3, true, "snapshot export via cli mismatch");
50
+ assert.strictEqual(snapshotOutput.snapshot.filters.snapshot_source, "submission_bundle", "snapshot export source mismatch");
51
+
52
+ const bundleReview = runCli(["review-bundle", "--example", "protocol"]);
53
+ assert.strictEqual(bundleReview.review.ok, true, "bundle review via cli mismatch");
54
+ assert.strictEqual(bundleReview.review.integration.integration_id, "partner.protocol.acme_mcp", "bundle review integration mismatch");
55
+ assert.strictEqual(bundleReview.review.review_summary.warning_count >= 1, true, "bundle review warning coverage missing");
56
+
57
+ const identityBundleReview = runCli(["review-bundle", "--example", "identity"]);
58
+ assert.strictEqual(identityBundleReview.review.ok, true, "identity bundle review via cli mismatch");
59
+ assert.strictEqual(identityBundleReview.review.integration.integration_id, "partner.identity.attest_registry", "identity bundle review integration mismatch");
60
+
61
+ const bundleSetReview = runCli(["review-bundle-set", "--notes", "tooling smoke"]);
62
+ assert.strictEqual(bundleSetReview.review.ok, true, "bundle-set review via cli mismatch");
63
+ assert.strictEqual(bundleSetReview.review.bundle_count >= 3, true, "bundle-set review count mismatch");
64
+
65
+ const snapshotReview = runCli(["review-snapshot"]);
66
+ assert.strictEqual(snapshotReview.review.ok, true, "snapshot review via cli mismatch");
67
+ assert.strictEqual(snapshotReview.review.integration_count >= 3, true, "snapshot review integration count mismatch");
68
+
69
+ const promotionReadiness = runCli(["promotion-readiness", "--integration", "partner.protocol.acme_mcp"]);
70
+ assert.strictEqual(promotionReadiness.review.ok, true, "promotion readiness via cli mismatch");
71
+ assert.strictEqual(promotionReadiness.review.integration_id, "partner.protocol.acme_mcp", "promotion readiness integration mismatch");
72
+ assert.strictEqual(promotionReadiness.review.promotion_readiness.review_ready, true, "promotion readiness review-ready mismatch");
73
+ assert.strictEqual(promotionReadiness.review.promotion_readiness.production_default_ready, false, "promotion readiness production-default mismatch");
74
+
75
+ const identityPromotionReadiness = runCli(["promotion-readiness", "--integration", "partner.identity.attest_registry"]);
76
+ assert.strictEqual(identityPromotionReadiness.review.ok, true, "identity promotion readiness via cli mismatch");
77
+ assert.strictEqual(identityPromotionReadiness.review.integration_id, "partner.identity.attest_registry", "identity promotion readiness integration mismatch");
78
+
79
+ const promotionWorkflow = runCli(["promotion-workflow", "--integration", "partner.protocol.acme_mcp"]);
80
+ assert.strictEqual(promotionWorkflow.review.ok, true, "promotion workflow via cli mismatch");
81
+ assert.strictEqual(promotionWorkflow.review.next_transition.action, "complete_certification", "promotion workflow next-transition mismatch");
82
+ assert.strictEqual(
83
+ promotionWorkflow.review.next_transition.later_actions.includes("promote_maturity"),
84
+ true,
85
+ "promotion workflow later-actions mismatch"
86
+ );
87
+ assert.strictEqual(
88
+ promotionWorkflow.review.promotion_recommendation.recommendation,
89
+ "keep_staged_until_requirements_clear",
90
+ "promotion workflow recommendation mismatch"
91
+ );
92
+ assert.strictEqual(
93
+ promotionWorkflow.review.certification_gaps.missing_requirements.includes("certification_state"),
94
+ true,
95
+ "promotion workflow certification gap mismatch"
96
+ );
97
+
98
+ const promotionWorkflowSummary = runCli(["promotion-workflow-summary", "--source", "third_party_example", "--bundled", "false"]);
99
+ assert.strictEqual(promotionWorkflowSummary.review.ok, true, "promotion workflow summary via cli mismatch");
100
+ assert.strictEqual(promotionWorkflowSummary.review.integration_count >= 3, true, "promotion workflow summary breadth mismatch");
101
+ assert.strictEqual(
102
+ promotionWorkflowSummary.review.next_actions.some((entry) => entry.action === "complete_certification"),
103
+ true,
104
+ "promotion workflow summary next-action mismatch"
105
+ );
106
+ assert.strictEqual(
107
+ promotionWorkflowSummary.review.blocker_categories.some(
108
+ (entry) => entry.category === "certification" && entry.severity === "high" && entry.owner === "review_operator"
109
+ ),
110
+ true,
111
+ "promotion workflow summary blocker severity/owner mismatch"
112
+ );
113
+ assert.strictEqual(
114
+ promotionWorkflowSummary.review.owner_queue.some((entry) => entry.owner === "review_operator"),
115
+ true,
116
+ "promotion workflow summary owner queue mismatch"
117
+ );
118
+ assert.strictEqual(
119
+ promotionWorkflowSummary.review.severity_queue.some((entry) => entry.severity === "high"),
120
+ true,
121
+ "promotion workflow summary severity queue mismatch"
122
+ );
123
+ assert.strictEqual(
124
+ promotionWorkflowSummary.review.next_action_queues.some((entry) => entry.action === "complete_certification" && entry.count >= 3),
125
+ true,
126
+ "promotion workflow summary next-action queue mismatch"
127
+ );
128
+
129
+ const promotionActionPreview = runCli([
130
+ "promotion-action-preview",
131
+ "--integration", "partner.protocol.acme_mcp",
132
+ "--action", "complete_certification"
133
+ ]);
134
+ assert.strictEqual(promotionActionPreview.review.ok, true, "promotion action preview via cli mismatch");
135
+ assert.strictEqual(promotionActionPreview.review.valid_now, true, "promotion action preview validity mismatch");
136
+ assert.strictEqual(promotionActionPreview.review.action.stage, "certification", "promotion action preview stage mismatch");
137
+
138
+ const promotionActionSet = runCli(["promotion-action-set", "--integration", "partner.protocol.acme_mcp"]);
139
+ assert.strictEqual(promotionActionSet.review.ok, true, "promotion action-set via cli mismatch");
140
+ assert.strictEqual(
141
+ promotionActionSet.review.actions.some((entry) => entry.request.action === "complete_certification" && entry.valid_now === true),
142
+ true,
143
+ "promotion action-set cli valid action mismatch"
144
+ );
145
+
146
+ const promotionActionSetSummary = runCli(["promotion-action-set-summary", "--source", "third_party_example", "--bundled", "false"]);
147
+ assert.strictEqual(promotionActionSetSummary.review.ok, true, "promotion action-set summary via cli mismatch");
148
+ assert.strictEqual(promotionActionSetSummary.review.integration_count >= 3, true, "promotion action-set summary breadth mismatch");
149
+ assert.strictEqual(
150
+ promotionActionSetSummary.review.valid_actions.some((entry) => entry.action === "complete_certification"),
151
+ true,
152
+ "promotion action-set summary valid-action mismatch"
153
+ );
154
+
155
+ const cliPort = 4337;
156
+ const cliBaseUrl = `http://127.0.0.1:${cliPort}`;
157
+ const server = spawn(process.execPath, [path.resolve(__dirname, "..", "server.js")], {
158
+ cwd: path.resolve(__dirname, ".."),
159
+ env: {
160
+ ...process.env,
161
+ XYTARA_HOST: "127.0.0.1",
162
+ XYTARA_PORT: String(cliPort),
163
+ XYTARA_PAYMENT_VERIFICATION_MODE: "local_signed",
164
+ XYTARA_WALLET_REGISTRY_JSON: JSON.stringify([
165
+ {
166
+ wallet_id: "tooling-wallet",
167
+ secret: "tooling-wallet-secret",
168
+ account_id: "acct_tooling_cli",
169
+ enabled: true
170
+ }
171
+ ]),
172
+ XYTARA_BSV_TERANODE_MERCHANT_ADDRESS: "1MerchantBsvAddressExample",
173
+ XYTARA_BSV_TERANODE_SETTLEMENT_RUNTIME_MODE: "mock"
174
+ },
175
+ stdio: "ignore"
176
+ });
177
+
178
+ try {
179
+ await waitForHealth(cliBaseUrl);
180
+ const cliRunOutput = execFileSync(process.execPath, [
181
+ path.resolve(__dirname, "..", "bin", "xytara-run.js"),
182
+ "--url", cliBaseUrl,
183
+ "--account", "acct_tooling_cli",
184
+ "--command", "tooling-cli-run",
185
+ "--task", "trust.verify",
186
+ "--body-json", JSON.stringify({ subject_id: "tooling-cli" }),
187
+ "--wallet-id", "tooling-wallet",
188
+ "--wallet-secret", "tooling-wallet-secret",
189
+ "--txid", "tooling-cli-bsv-txid"
190
+ ], {
191
+ cwd: path.resolve(__dirname, ".."),
192
+ encoding: "utf8"
193
+ });
194
+ const cliRun = JSON.parse(cliRunOutput);
195
+ assert.strictEqual(typeof cliRun.transaction.transaction_id, "string", "xytara-run cli transaction missing");
196
+ assert.strictEqual(cliRun.transaction.payment.wallet_id, "tooling-wallet", "xytara-run cli wallet mismatch");
197
+ assert.strictEqual(cliRun.transaction.settlement.txid, "tooling-cli-bsv-txid", "xytara-run cli txid mismatch");
198
+
199
+ const releaseOutput = execFileSync(process.execPath, [
200
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
201
+ "--summary"
202
+ ], {
203
+ cwd: path.resolve(__dirname, ".."),
204
+ encoding: "utf8"
205
+ });
206
+ const releaseSummary = JSON.parse(releaseOutput);
207
+ assert.strictEqual(releaseSummary.product, "xytara", "xytara-release cli product mismatch");
208
+ assert.strictEqual(releaseSummary.release_cli, "xytara-release --summary", "xytara-release cli release command mismatch");
209
+ assert.strictEqual(releaseSummary.install_command, "npm install xytara", "xytara-release cli install command mismatch");
210
+ const comparisonOutput = execFileSync(process.execPath, [
211
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
212
+ "--comparison",
213
+ "--summary"
214
+ ], {
215
+ cwd: path.resolve(__dirname, ".."),
216
+ encoding: "utf8"
217
+ });
218
+ const comparisonSummary = JSON.parse(comparisonOutput);
219
+ assert.strictEqual(comparisonSummary.product, "xytara", "xytara comparison cli product mismatch");
220
+ assert.strictEqual(comparisonSummary.comparison_count >= 3, true, "xytara comparison cli count mismatch");
221
+ const adoptionOutput = execFileSync(process.execPath, [
222
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
223
+ "--adoption",
224
+ "--summary"
225
+ ], {
226
+ cwd: path.resolve(__dirname, ".."),
227
+ encoding: "utf8"
228
+ });
229
+ const adoptionSummary = JSON.parse(adoptionOutput);
230
+ assert.strictEqual(adoptionSummary.product, "xytara", "xytara adoption cli product mismatch");
231
+ assert.strictEqual(adoptionSummary.target_count >= 4, true, "xytara adoption cli count mismatch");
232
+ const scenarioOutput = execFileSync(process.execPath, [
233
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
234
+ "--scenarios",
235
+ "--summary"
236
+ ], {
237
+ cwd: path.resolve(__dirname, ".."),
238
+ encoding: "utf8"
239
+ });
240
+ const scenarioSummary = JSON.parse(scenarioOutput);
241
+ assert.strictEqual(scenarioSummary.product, "xytara", "xytara scenario cli product mismatch");
242
+ assert.strictEqual(scenarioSummary.scenario_count >= 3, true, "xytara scenario cli count mismatch");
243
+ const launchOutput = execFileSync(process.execPath, [
244
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
245
+ "--launch",
246
+ "--summary"
247
+ ], {
248
+ cwd: path.resolve(__dirname, ".."),
249
+ encoding: "utf8"
250
+ });
251
+ const launchSummary = JSON.parse(launchOutput);
252
+ assert.strictEqual(launchSummary.product, "xytara", "xytara launch cli product mismatch");
253
+ assert.strictEqual(launchSummary.operator_check_count >= 6, true, "xytara launch cli check count mismatch");
254
+ const manifestOutput = execFileSync(process.execPath, [
255
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
256
+ "--manifest",
257
+ "--summary"
258
+ ], {
259
+ cwd: path.resolve(__dirname, ".."),
260
+ encoding: "utf8"
261
+ });
262
+ const manifestSummary = JSON.parse(manifestOutput);
263
+ assert.strictEqual(manifestSummary.product, "xytara", "xytara manifest cli product mismatch");
264
+ assert.strictEqual(manifestSummary.release_track, "public_release", "xytara manifest cli track mismatch");
265
+ const notesOutput = execFileSync(process.execPath, [
266
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
267
+ "--notes",
268
+ "--summary"
269
+ ], {
270
+ cwd: path.resolve(__dirname, ".."),
271
+ encoding: "utf8"
272
+ });
273
+ const notesSummary = JSON.parse(notesOutput);
274
+ assert.strictEqual(notesSummary.product, "xytara", "xytara notes cli product mismatch");
275
+ assert.strictEqual(notesSummary.operator_check_count >= 5, true, "xytara notes cli check count mismatch");
276
+ const centerOutput = execFileSync(process.execPath, [
277
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
278
+ "--center",
279
+ "--summary"
280
+ ], {
281
+ cwd: path.resolve(__dirname, ".."),
282
+ encoding: "utf8"
283
+ });
284
+ const centerSummary = JSON.parse(centerOutput);
285
+ assert.strictEqual(centerSummary.product, "xytara", "xytara center cli product mismatch");
286
+ assert.strictEqual(centerSummary.category, "machine-commerce-release-center", "xytara center cli category mismatch");
287
+ assert.strictEqual(centerSummary.verification_surface_count >= 6, true, "xytara center cli verification count mismatch");
288
+ const historyOutput = execFileSync(process.execPath, [
289
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
290
+ "--history",
291
+ "--summary"
292
+ ], {
293
+ cwd: path.resolve(__dirname, ".."),
294
+ encoding: "utf8"
295
+ });
296
+ const historySummary = JSON.parse(historyOutput);
297
+ assert.strictEqual(historySummary.product, "xytara", "xytara history cli product mismatch");
298
+ assert.strictEqual(historySummary.category, "machine-commerce-release-history", "xytara history cli category mismatch");
299
+ assert.strictEqual(historySummary.release_count >= 2, true, "xytara history cli release count mismatch");
300
+ const adapterPackOutput = execFileSync(process.execPath, [
301
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
302
+ "--adapters",
303
+ "--summary"
304
+ ], {
305
+ cwd: path.resolve(__dirname, ".."),
306
+ encoding: "utf8"
307
+ });
308
+ const adapterPackSummary = JSON.parse(adapterPackOutput);
309
+ assert.strictEqual(adapterPackSummary.product, "xytara", "xytara adapter pack cli product mismatch");
310
+ assert.strictEqual(adapterPackSummary.category, "machine-commerce-adapter-pack", "xytara adapter pack cli category mismatch");
311
+ assert.strictEqual(adapterPackSummary.starter_class_count >= 5, true, "xytara adapter pack cli class count mismatch");
312
+ const adapterPromotionOutput = execFileSync(process.execPath, [
313
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
314
+ "--adapter-promotion",
315
+ "--summary"
316
+ ], {
317
+ cwd: path.resolve(__dirname, ".."),
318
+ encoding: "utf8"
319
+ });
320
+ const adapterPromotionSummary = JSON.parse(adapterPromotionOutput);
321
+ assert.strictEqual(adapterPromotionSummary.product, "xytara", "xytara adapter promotion cli product mismatch");
322
+ assert.strictEqual(adapterPromotionSummary.category, "machine-commerce-adapter-promotion-pack", "xytara adapter promotion cli category mismatch");
323
+ assert.strictEqual(adapterPromotionSummary.maturity_step_count >= 5, true, "xytara adapter promotion cli maturity count mismatch");
324
+ const adapterPartnerOutput = execFileSync(process.execPath, [
325
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
326
+ "--adapter-partners",
327
+ "--summary"
328
+ ], {
329
+ cwd: path.resolve(__dirname, ".."),
330
+ encoding: "utf8"
331
+ });
332
+ const adapterPartnerSummary = JSON.parse(adapterPartnerOutput);
333
+ assert.strictEqual(adapterPartnerSummary.product, "xytara", "xytara adapter partner cli product mismatch");
334
+ assert.strictEqual(adapterPartnerSummary.category, "machine-commerce-adapter-partner-pack", "xytara adapter partner cli category mismatch");
335
+ assert.strictEqual(adapterPartnerSummary.maturity_step_count >= 5, true, "xytara adapter partner cli maturity count mismatch");
336
+ const softLaunchOutput = execFileSync(process.execPath, [
337
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
338
+ "--soft-launch",
339
+ "--summary"
340
+ ], {
341
+ cwd: path.resolve(__dirname, ".."),
342
+ encoding: "utf8"
343
+ });
344
+ const softLaunchSummary = JSON.parse(softLaunchOutput);
345
+ assert.strictEqual(softLaunchSummary.product, "xytara", "xytara soft launch cli product mismatch");
346
+ assert.strictEqual(softLaunchSummary.category, "machine-commerce-soft-launch-pack", "xytara soft launch cli category mismatch");
347
+ assert.strictEqual(softLaunchSummary.outreach_step_count >= 5, true, "xytara soft launch cli outreach count mismatch");
348
+ const outreachCopyOutput = execFileSync(process.execPath, [
349
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
350
+ "--outreach-copy",
351
+ "--summary"
352
+ ], {
353
+ cwd: path.resolve(__dirname, ".."),
354
+ encoding: "utf8"
355
+ });
356
+ const outreachCopySummary = JSON.parse(outreachCopyOutput);
357
+ assert.strictEqual(outreachCopySummary.product, "xytara", "xytara outreach copy cli product mismatch");
358
+ assert.strictEqual(outreachCopySummary.category, "machine-commerce-outreach-copy-pack", "xytara outreach copy cli category mismatch");
359
+ assert.strictEqual(outreachCopySummary.link_count >= 4, true, "xytara outreach copy cli link count mismatch");
360
+ const outreachTargetsOutput = execFileSync(process.execPath, [
361
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
362
+ "--outreach-targets",
363
+ "--summary"
364
+ ], {
365
+ cwd: path.resolve(__dirname, ".."),
366
+ encoding: "utf8"
367
+ });
368
+ const outreachTargetsSummary = JSON.parse(outreachTargetsOutput);
369
+ assert.strictEqual(outreachTargetsSummary.product, "xytara", "xytara outreach targets cli product mismatch");
370
+ assert.strictEqual(outreachTargetsSummary.category, "machine-commerce-outreach-target-pack", "xytara outreach targets cli category mismatch");
371
+ assert.strictEqual(outreachTargetsSummary.target_count >= 4, true, "xytara outreach targets cli count mismatch");
372
+ const outreachMessagesOutput = execFileSync(process.execPath, [
373
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
374
+ "--outreach-messages",
375
+ "--summary"
376
+ ], {
377
+ cwd: path.resolve(__dirname, ".."),
378
+ encoding: "utf8"
379
+ });
380
+ const outreachMessagesSummary = JSON.parse(outreachMessagesOutput);
381
+ assert.strictEqual(outreachMessagesSummary.product, "xytara", "xytara outreach messages cli product mismatch");
382
+ assert.strictEqual(outreachMessagesSummary.category, "machine-commerce-outreach-message-pack", "xytara outreach messages cli category mismatch");
383
+ assert.strictEqual(outreachMessagesSummary.message_count >= 4, true, "xytara outreach messages cli count mismatch");
384
+ const phaseProgramOutput = execFileSync(process.execPath, [
385
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
386
+ "--phases",
387
+ "--summary"
388
+ ], {
389
+ cwd: path.resolve(__dirname, ".."),
390
+ encoding: "utf8"
391
+ });
392
+ const phaseProgramSummary = JSON.parse(phaseProgramOutput);
393
+ assert.strictEqual(phaseProgramSummary.product, "xytara", "xytara phase program cli product mismatch");
394
+ assert.strictEqual(phaseProgramSummary.category, "machine-commerce-phase-program-pack", "xytara phase program cli category mismatch");
395
+ assert.strictEqual(phaseProgramSummary.phase_count >= 10, true, "xytara phase program cli phase count mismatch");
396
+ assert.strictEqual(phaseProgramSummary.current_phase, "program_closed", "xytara phase program current phase mismatch");
397
+ const phase1Output = execFileSync(process.execPath, [
398
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
399
+ "--phase-1",
400
+ "--summary"
401
+ ], {
402
+ cwd: path.resolve(__dirname, ".."),
403
+ encoding: "utf8"
404
+ });
405
+ const phase1Summary = JSON.parse(phase1Output);
406
+ assert.strictEqual(phase1Summary.product, "xytara", "xytara phase 1 cli product mismatch");
407
+ assert.strictEqual(phase1Summary.category, "machine-commerce-phase-1-ecosystem-pack", "xytara phase 1 cli category mismatch");
408
+ assert.strictEqual(phase1Summary.ecosystem_count >= 2, true, "xytara phase 1 cli ecosystem count mismatch");
409
+ const phase1OpenaiCodexOutput = execFileSync(process.execPath, [
410
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
411
+ "--phase-1-openai-codex",
412
+ "--summary"
413
+ ], {
414
+ cwd: path.resolve(__dirname, ".."),
415
+ encoding: "utf8"
416
+ });
417
+ const phase1OpenaiCodexSummary = JSON.parse(phase1OpenaiCodexOutput);
418
+ assert.strictEqual(phase1OpenaiCodexSummary.product, "xytara", "xytara phase 1 openai/codex cli product mismatch");
419
+ assert.strictEqual(phase1OpenaiCodexSummary.category, "machine-commerce-phase-1-openai-codex-pack", "xytara phase 1 openai/codex cli category mismatch");
420
+ assert.strictEqual(phase1OpenaiCodexSummary.surface_count >= 4, true, "xytara phase 1 openai/codex cli surface count mismatch");
421
+ const phase1OpenaiCodexRuntimeOutput = execFileSync(process.execPath, [
422
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
423
+ "--phase-1-openai-codex-runtime",
424
+ "--summary"
425
+ ], {
426
+ cwd: path.resolve(__dirname, ".."),
427
+ encoding: "utf8"
428
+ });
429
+ const phase1OpenaiCodexRuntimeSummary = JSON.parse(phase1OpenaiCodexRuntimeOutput);
430
+ assert.strictEqual(phase1OpenaiCodexRuntimeSummary.product, "xytara", "xytara phase 1 openai/codex runtime cli product mismatch");
431
+ assert.strictEqual(phase1OpenaiCodexRuntimeSummary.category, "machine-commerce-phase-1-openai-codex-runtime-pack", "xytara phase 1 openai/codex runtime cli category mismatch");
432
+ assert.strictEqual(phase1OpenaiCodexRuntimeSummary.http_step_count >= 3, true, "xytara phase 1 openai/codex runtime cli step count mismatch");
433
+ const phase1ClaudeMcpOutput = execFileSync(process.execPath, [
434
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
435
+ "--phase-1-claude-mcp",
436
+ "--summary"
437
+ ], {
438
+ cwd: path.resolve(__dirname, ".."),
439
+ encoding: "utf8"
440
+ });
441
+ const phase1ClaudeMcpSummary = JSON.parse(phase1ClaudeMcpOutput);
442
+ assert.strictEqual(phase1ClaudeMcpSummary.product, "xytara", "xytara phase 1 claude/mcp cli product mismatch");
443
+ assert.strictEqual(phase1ClaudeMcpSummary.category, "machine-commerce-phase-1-claude-mcp-pack", "xytara phase 1 claude/mcp cli category mismatch");
444
+ assert.strictEqual(phase1ClaudeMcpSummary.surface_count >= 4, true, "xytara phase 1 claude/mcp cli surface count mismatch");
445
+ const phase1ClaudeMcpRuntimeOutput = execFileSync(process.execPath, [
446
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
447
+ "--phase-1-claude-mcp-runtime",
448
+ "--summary"
449
+ ], {
450
+ cwd: path.resolve(__dirname, ".."),
451
+ encoding: "utf8"
452
+ });
453
+ const phase1ClaudeMcpRuntimeSummary = JSON.parse(phase1ClaudeMcpRuntimeOutput);
454
+ assert.strictEqual(phase1ClaudeMcpRuntimeSummary.product, "xytara", "xytara phase 1 claude/mcp runtime cli product mismatch");
455
+ assert.strictEqual(phase1ClaudeMcpRuntimeSummary.category, "machine-commerce-phase-1-claude-mcp-runtime-pack", "xytara phase 1 claude/mcp runtime cli category mismatch");
456
+ assert.strictEqual(phase1ClaudeMcpRuntimeSummary.http_step_count >= 3, true, "xytara phase 1 claude/mcp runtime cli step count mismatch");
457
+ const phase2Output = execFileSync(process.execPath, [
458
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
459
+ "--phase-2",
460
+ "--summary"
461
+ ], {
462
+ cwd: path.resolve(__dirname, ".."),
463
+ encoding: "utf8"
464
+ });
465
+ const phase2Summary = JSON.parse(phase2Output);
466
+ assert.strictEqual(phase2Summary.product, "xytara", "xytara phase 2 cli product mismatch");
467
+ assert.strictEqual(phase2Summary.category, "machine-commerce-phase-2-payment-rails-pack", "xytara phase 2 cli category mismatch");
468
+ assert.strictEqual(phase2Summary.ecosystem_count >= 4, true, "xytara phase 2 cli ecosystem count mismatch");
469
+ assert.strictEqual(phase2Summary.settlement_mode_count >= 1, true, "xytara phase 2 cli settlement mode count mismatch");
470
+ const phase2CompletionOutput = execFileSync(process.execPath, [
471
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
472
+ "--phase-2-completion",
473
+ "--summary"
474
+ ], {
475
+ cwd: path.resolve(__dirname, ".."),
476
+ encoding: "utf8"
477
+ });
478
+ const phase2CompletionSummary = JSON.parse(phase2CompletionOutput);
479
+ assert.strictEqual(phase2CompletionSummary.product, "xytara", "xytara phase 2 completion cli product mismatch");
480
+ assert.strictEqual(phase2CompletionSummary.category, "machine-commerce-phase-2-completion-pack", "xytara phase 2 completion cli category mismatch");
481
+ assert.strictEqual(phase2CompletionSummary.completion_check_count >= 5, true, "xytara phase 2 completion cli check count mismatch");
482
+ const phase2FreezeReviewOutput = execFileSync(process.execPath, [
483
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
484
+ "--phase-2-freeze-review",
485
+ "--summary"
486
+ ], {
487
+ cwd: path.resolve(__dirname, ".."),
488
+ encoding: "utf8"
489
+ });
490
+ const phase2FreezeReviewSummary = JSON.parse(phase2FreezeReviewOutput);
491
+ assert.strictEqual(phase2FreezeReviewSummary.product, "xytara", "xytara phase 2 freeze review cli product mismatch");
492
+ assert.strictEqual(phase2FreezeReviewSummary.category, "machine-commerce-phase-2-freeze-review-pack", "xytara phase 2 freeze review cli category mismatch");
493
+ assert.strictEqual(phase2FreezeReviewSummary.blocker_count, 0, "xytara phase 2 freeze review blocker count mismatch");
494
+ const phase2GateOutput = execFileSync(process.execPath, [
495
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
496
+ "--phase-2-gate",
497
+ "--summary"
498
+ ], {
499
+ cwd: path.resolve(__dirname, ".."),
500
+ encoding: "utf8"
501
+ });
502
+ const phase2GateSummary = JSON.parse(phase2GateOutput);
503
+ assert.strictEqual(phase2GateSummary.product, "xytara", "xytara phase 2 gate cli product mismatch");
504
+ assert.strictEqual(phase2GateSummary.category, "machine-commerce-phase-2-gate-pack", "xytara phase 2 gate cli category mismatch");
505
+ assert.strictEqual(phase2GateSummary.unsatisfied_gate_count, 0, "xytara phase 2 gate unsatisfied count mismatch");
506
+ assert.strictEqual(phase2GateSummary.ready_for_next_phase, true, "xytara phase 2 gate ready state mismatch");
507
+ const phase2CloseoutOutput = execFileSync(process.execPath, [
508
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
509
+ "--phase-2-closeout",
510
+ "--summary"
511
+ ], {
512
+ cwd: path.resolve(__dirname, ".."),
513
+ encoding: "utf8"
514
+ });
515
+ const phase2CloseoutSummary = JSON.parse(phase2CloseoutOutput);
516
+ assert.strictEqual(phase2CloseoutSummary.product, "xytara", "xytara phase 2 closeout cli product mismatch");
517
+ assert.strictEqual(phase2CloseoutSummary.category, "machine-commerce-phase-2-closeout-pack", "xytara phase 2 closeout cli category mismatch");
518
+ assert.strictEqual(phase2CloseoutSummary.blocking_action_count, 0, "xytara phase 2 closeout blocking action count mismatch");
519
+ assert.strictEqual(phase2CloseoutSummary.current_decision, "ready_for_phase_3", "xytara phase 2 closeout decision mismatch");
520
+ const phase2DecisionRecordOutput = execFileSync(process.execPath, [
521
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
522
+ "--phase-2-decision-record",
523
+ "--summary"
524
+ ], {
525
+ cwd: path.resolve(__dirname, ".."),
526
+ encoding: "utf8"
527
+ });
528
+ const phase2DecisionRecordSummary = JSON.parse(phase2DecisionRecordOutput);
529
+ assert.strictEqual(phase2DecisionRecordSummary.product, "xytara", "xytara phase 2 decision-record cli product mismatch");
530
+ assert.strictEqual(phase2DecisionRecordSummary.category, "machine-commerce-phase-2-decision-record-pack", "xytara phase 2 decision-record cli category mismatch");
531
+ assert.strictEqual(phase2DecisionRecordSummary.pending_record_count, 0, "xytara phase 2 decision-record pending count mismatch");
532
+ assert.strictEqual(phase2DecisionRecordSummary.freeze_decision_status, "recorded", "xytara phase 2 freeze decision status mismatch");
533
+ assert.strictEqual(phase2DecisionRecordSummary.gate_review_status, "recorded", "xytara phase 2 gate review status mismatch");
534
+ const phase2DecisionResolutionOutput = execFileSync(process.execPath, [
535
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
536
+ "--phase-2-decision-resolution",
537
+ "--summary"
538
+ ], {
539
+ cwd: path.resolve(__dirname, ".."),
540
+ encoding: "utf8"
541
+ });
542
+ const phase2DecisionResolutionSummary = JSON.parse(phase2DecisionResolutionOutput);
543
+ assert.strictEqual(phase2DecisionResolutionSummary.product, "xytara", "xytara phase 2 decision-resolution cli product mismatch");
544
+ assert.strictEqual(phase2DecisionResolutionSummary.category, "machine-commerce-phase-2-decision-resolution-pack", "xytara phase 2 decision-resolution cli category mismatch");
545
+ assert.strictEqual(phase2DecisionResolutionSummary.transition_count >= 2, true, "xytara phase 2 decision-resolution transition count mismatch");
546
+ const phase2FlipPreviewOutput = execFileSync(process.execPath, [
547
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
548
+ "--phase-2-flip-preview",
549
+ "--summary"
550
+ ], {
551
+ cwd: path.resolve(__dirname, ".."),
552
+ encoding: "utf8"
553
+ });
554
+ const phase2FlipPreviewSummary = JSON.parse(phase2FlipPreviewOutput);
555
+ assert.strictEqual(phase2FlipPreviewSummary.product, "xytara", "xytara phase 2 flip-preview cli product mismatch");
556
+ assert.strictEqual(phase2FlipPreviewSummary.category, "machine-commerce-phase-2-flip-preview-pack", "xytara phase 2 flip-preview cli category mismatch");
557
+ assert.strictEqual(phase2FlipPreviewSummary.ready_for_next_phase, true, "xytara phase 2 flip-preview ready state mismatch");
558
+ const phase2EvmBaseOutput = execFileSync(process.execPath, [
559
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
560
+ "--phase-2-evm-base-runtime",
561
+ "--summary"
562
+ ], {
563
+ cwd: path.resolve(__dirname, ".."),
564
+ encoding: "utf8"
565
+ });
566
+ const phase2EvmBaseSummary = JSON.parse(phase2EvmBaseOutput);
567
+ assert.strictEqual(phase2EvmBaseSummary.product, "xytara", "xytara phase 2 evm/base cli product mismatch");
568
+ assert.strictEqual(phase2EvmBaseSummary.category, "machine-commerce-phase-2-evm-base-runtime-pack", "xytara phase 2 evm/base cli category mismatch");
569
+ assert.strictEqual(phase2EvmBaseSummary.http_step_count >= 3, true, "xytara phase 2 evm/base cli step count mismatch");
570
+ const phase2BaseUsdcOutput = execFileSync(process.execPath, [
571
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
572
+ "--phase-2-base-usdc-runtime",
573
+ "--summary"
574
+ ], {
575
+ cwd: path.resolve(__dirname, ".."),
576
+ encoding: "utf8"
577
+ });
578
+ const phase2BaseUsdcSummary = JSON.parse(phase2BaseUsdcOutput);
579
+ assert.strictEqual(phase2BaseUsdcSummary.product, "xytara", "xytara phase 2 base/usdc cli product mismatch");
580
+ assert.strictEqual(phase2BaseUsdcSummary.category, "machine-commerce-phase-2-base-usdc-runtime-pack", "xytara phase 2 base/usdc cli category mismatch");
581
+ assert.strictEqual(phase2BaseUsdcSummary.http_step_count >= 3, true, "xytara phase 2 base/usdc cli step count mismatch");
582
+ assert.strictEqual(phase2BaseUsdcSummary.signal_count >= 3, true, "xytara phase 2 base/usdc cli signal count mismatch");
583
+ const phase2EthOutput = execFileSync(process.execPath, [
584
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
585
+ "--phase-2-eth-runtime",
586
+ "--summary"
587
+ ], {
588
+ cwd: path.resolve(__dirname, ".."),
589
+ encoding: "utf8"
590
+ });
591
+ const phase2EthSummary = JSON.parse(phase2EthOutput);
592
+ assert.strictEqual(phase2EthSummary.product, "xytara", "xytara phase 2 eth cli product mismatch");
593
+ assert.strictEqual(phase2EthSummary.category, "machine-commerce-phase-2-eth-runtime-pack", "xytara phase 2 eth cli category mismatch");
594
+ assert.strictEqual(phase2EthSummary.operator_surface_count >= 2, true, "xytara phase 2 eth cli operator surface count mismatch");
595
+ const phase2EvmOutput = execFileSync(process.execPath, [
596
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
597
+ "--phase-2-evm-runtime",
598
+ "--summary"
599
+ ], {
600
+ cwd: path.resolve(__dirname, ".."),
601
+ encoding: "utf8"
602
+ });
603
+ const phase2EvmSummary = JSON.parse(phase2EvmOutput);
604
+ assert.strictEqual(phase2EvmSummary.product, "xytara", "xytara phase 2 evm cli product mismatch");
605
+ assert.strictEqual(phase2EvmSummary.category, "machine-commerce-phase-2-evm-runtime-pack", "xytara phase 2 evm cli category mismatch");
606
+ assert.strictEqual(phase2EvmSummary.settlement_mode_count >= 1, true, "xytara phase 2 evm cli settlement mode count mismatch");
607
+ const phase2BaseOutput = execFileSync(process.execPath, [
608
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
609
+ "--phase-2-base-runtime",
610
+ "--summary"
611
+ ], {
612
+ cwd: path.resolve(__dirname, ".."),
613
+ encoding: "utf8"
614
+ });
615
+ const phase2BaseSummary = JSON.parse(phase2BaseOutput);
616
+ assert.strictEqual(phase2BaseSummary.product, "xytara", "xytara phase 2 base cli product mismatch");
617
+ assert.strictEqual(phase2BaseSummary.category, "machine-commerce-phase-2-base-runtime-pack", "xytara phase 2 base cli category mismatch");
618
+ assert.strictEqual(phase2BaseSummary.operator_surface_count >= 2, true, "xytara phase 2 base cli operator surface count mismatch");
619
+ const phase2UsdcOutput = execFileSync(process.execPath, [
620
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
621
+ "--phase-2-usdc-runtime",
622
+ "--summary"
623
+ ], {
624
+ cwd: path.resolve(__dirname, ".."),
625
+ encoding: "utf8"
626
+ });
627
+ const phase2UsdcSummary = JSON.parse(phase2UsdcOutput);
628
+ assert.strictEqual(phase2UsdcSummary.product, "xytara", "xytara phase 2 usdc cli product mismatch");
629
+ assert.strictEqual(phase2UsdcSummary.category, "machine-commerce-phase-2-usdc-runtime-pack", "xytara phase 2 usdc cli category mismatch");
630
+ assert.strictEqual(phase2UsdcSummary.operator_surface_count >= 2, true, "xytara phase 2 usdc cli operator surface count mismatch");
631
+ const phase3Output = execFileSync(process.execPath, [
632
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
633
+ "--phase-3",
634
+ "--summary"
635
+ ], {
636
+ cwd: path.resolve(__dirname, ".."),
637
+ encoding: "utf8"
638
+ });
639
+ const phase3Summary = JSON.parse(phase3Output);
640
+ assert.strictEqual(phase3Summary.product, "xytara", "xytara phase 3 cli product mismatch");
641
+ assert.strictEqual(phase3Summary.category, "machine-commerce-phase-3-native-bsv-pack", "xytara phase 3 cli category mismatch");
642
+ assert.strictEqual(phase3Summary.ecosystem_count >= 4, true, "xytara phase 3 cli ecosystem count mismatch");
643
+ const phase3NativeContinuityOutput = execFileSync(process.execPath, [
644
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
645
+ "--phase-3-native-continuity",
646
+ "--summary"
647
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
648
+ const phase3NativeContinuitySummary = JSON.parse(phase3NativeContinuityOutput);
649
+ assert.strictEqual(phase3NativeContinuitySummary.category, "machine-commerce-phase-3-native-continuity-pack", "xytara phase 3 native continuity cli category mismatch");
650
+ assert.strictEqual(phase3NativeContinuitySummary.signal_count >= 4, true, "xytara phase 3 native continuity signal count mismatch");
651
+ const phase3FreezeBaselineOutput = execFileSync(process.execPath, [
652
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
653
+ "--phase-3-freeze-baseline",
654
+ "--summary"
655
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
656
+ const phase3FreezeBaselineSummary = JSON.parse(phase3FreezeBaselineOutput);
657
+ assert.strictEqual(phase3FreezeBaselineSummary.category, "machine-commerce-phase-3-freeze-baseline-pack", "xytara phase 3 freeze baseline cli category mismatch");
658
+ assert.strictEqual(phase3FreezeBaselineSummary.baseline_status, "recorded", "xytara phase 3 freeze baseline status mismatch");
659
+ const phase3CompletionOutput = execFileSync(process.execPath, [
660
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
661
+ "--phase-3-completion",
662
+ "--summary"
663
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
664
+ const phase3CompletionSummary = JSON.parse(phase3CompletionOutput);
665
+ assert.strictEqual(phase3CompletionSummary.category, "machine-commerce-phase-3-completion-pack", "xytara phase 3 completion cli category mismatch");
666
+ assert.strictEqual(phase3CompletionSummary.completion_check_count >= 5, true, "xytara phase 3 completion cli check count mismatch");
667
+ const phase3FreezeReviewOutput = execFileSync(process.execPath, [
668
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
669
+ "--phase-3-freeze-review",
670
+ "--summary"
671
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
672
+ const phase3FreezeReviewSummary = JSON.parse(phase3FreezeReviewOutput);
673
+ assert.strictEqual(phase3FreezeReviewSummary.category, "machine-commerce-phase-3-freeze-review-pack", "xytara phase 3 freeze review cli category mismatch");
674
+ assert.strictEqual(phase3FreezeReviewSummary.blocker_count, 0, "xytara phase 3 freeze review blocker count mismatch");
675
+ const phase3GateOutput = execFileSync(process.execPath, [
676
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
677
+ "--phase-3-gate",
678
+ "--summary"
679
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
680
+ const phase3GateSummary = JSON.parse(phase3GateOutput);
681
+ assert.strictEqual(phase3GateSummary.category, "machine-commerce-phase-3-gate-pack", "xytara phase 3 gate cli category mismatch");
682
+ assert.strictEqual(phase3GateSummary.unsatisfied_gate_count, 0, "xytara phase 3 gate unsatisfied count mismatch");
683
+ const phase3CloseoutOutput = execFileSync(process.execPath, [
684
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
685
+ "--phase-3-closeout",
686
+ "--summary"
687
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
688
+ const phase3CloseoutSummary = JSON.parse(phase3CloseoutOutput);
689
+ assert.strictEqual(phase3CloseoutSummary.category, "machine-commerce-phase-3-closeout-pack", "xytara phase 3 closeout cli category mismatch");
690
+ assert.strictEqual(phase3CloseoutSummary.blocking_action_count, 0, "xytara phase 3 closeout blocking action count mismatch");
691
+ const phase3DecisionRecordOutput = execFileSync(process.execPath, [
692
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
693
+ "--phase-3-decision-record",
694
+ "--summary"
695
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
696
+ const phase3DecisionRecordSummary = JSON.parse(phase3DecisionRecordOutput);
697
+ assert.strictEqual(phase3DecisionRecordSummary.category, "machine-commerce-phase-3-decision-record-pack", "xytara phase 3 decision-record cli category mismatch");
698
+ assert.strictEqual(phase3DecisionRecordSummary.pending_record_count, 0, "xytara phase 3 decision-record pending count mismatch");
699
+ const phase3DecisionResolutionOutput = execFileSync(process.execPath, [
700
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
701
+ "--phase-3-decision-resolution",
702
+ "--summary"
703
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
704
+ const phase3DecisionResolutionSummary = JSON.parse(phase3DecisionResolutionOutput);
705
+ assert.strictEqual(phase3DecisionResolutionSummary.category, "machine-commerce-phase-3-decision-resolution-pack", "xytara phase 3 decision-resolution cli category mismatch");
706
+ assert.strictEqual(phase3DecisionResolutionSummary.transition_count >= 2, true, "xytara phase 3 decision-resolution transition count mismatch");
707
+ const phase3BsvTeranodeOutput = execFileSync(process.execPath, [
708
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
709
+ "--phase-3-bsv-teranode-runtime",
710
+ "--summary"
711
+ ], {
712
+ cwd: path.resolve(__dirname, ".."),
713
+ encoding: "utf8"
714
+ });
715
+ const phase3BsvTeranodeSummary = JSON.parse(phase3BsvTeranodeOutput);
716
+ assert.strictEqual(phase3BsvTeranodeSummary.product, "xytara", "xytara phase 3 bsv/teranode cli product mismatch");
717
+ assert.strictEqual(phase3BsvTeranodeSummary.category, "machine-commerce-phase-3-bsv-teranode-runtime-pack", "xytara phase 3 bsv/teranode cli category mismatch");
718
+ assert.strictEqual(phase3BsvTeranodeSummary.http_step_count >= 3, true, "xytara phase 3 bsv/teranode cli step count mismatch");
719
+ const phase3MetanetOutput = execFileSync(process.execPath, [
720
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
721
+ "--phase-3-metanet-runtime",
722
+ "--summary"
723
+ ], {
724
+ cwd: path.resolve(__dirname, ".."),
725
+ encoding: "utf8"
726
+ });
727
+ const phase3MetanetSummary = JSON.parse(phase3MetanetOutput);
728
+ assert.strictEqual(phase3MetanetSummary.product, "xytara", "xytara phase 3 metanet cli product mismatch");
729
+ assert.strictEqual(phase3MetanetSummary.category, "machine-commerce-phase-3-metanet-runtime-pack", "xytara phase 3 metanet cli category mismatch");
730
+ assert.strictEqual(phase3MetanetSummary.http_step_count >= 3, true, "xytara phase 3 metanet cli step count mismatch");
731
+ const phase3BrcOutput = execFileSync(process.execPath, [
732
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
733
+ "--phase-3-brc-runtime",
734
+ "--summary"
735
+ ], {
736
+ cwd: path.resolve(__dirname, ".."),
737
+ encoding: "utf8"
738
+ });
739
+ const phase3BrcSummary = JSON.parse(phase3BrcOutput);
740
+ assert.strictEqual(phase3BrcSummary.product, "xytara", "xytara phase 3 brc cli product mismatch");
741
+ assert.strictEqual(phase3BrcSummary.category, "machine-commerce-phase-3-brc-runtime-pack", "xytara phase 3 brc cli category mismatch");
742
+ assert.strictEqual(phase3BrcSummary.http_step_count >= 3, true, "xytara phase 3 brc cli step count mismatch");
743
+ const phase4Output = execFileSync(process.execPath, [
744
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
745
+ "--phase-4",
746
+ "--summary"
747
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
748
+ const phase4Summary = JSON.parse(phase4Output);
749
+ assert.strictEqual(phase4Summary.category, "machine-commerce-phase-4-identity-trust-pack", "xytara phase 4 cli category mismatch");
750
+ assert.strictEqual(phase4Summary.erc8004_mode_count >= 3, true, "xytara phase 4 cli erc8004 mode count mismatch");
751
+ const phase5Output = execFileSync(process.execPath, [
752
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
753
+ "--phase-5",
754
+ "--summary"
755
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
756
+ const phase5Summary = JSON.parse(phase5Output);
757
+ assert.strictEqual(phase5Summary.category, "machine-commerce-phase-5-major-rails-pack", "xytara phase 5 cli category mismatch");
758
+ const phase5ContinuityOutput = execFileSync(process.execPath, [
759
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
760
+ "--phase-5-major-rails-continuity",
761
+ "--summary"
762
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
763
+ const phase5ContinuitySummary = JSON.parse(phase5ContinuityOutput);
764
+ assert.strictEqual(phase5ContinuitySummary.category, "machine-commerce-phase-5-major-rails-continuity-pack", "xytara phase 5 continuity cli category mismatch");
765
+ const phase5CompletionOutput = execFileSync(process.execPath, [
766
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
767
+ "--phase-5-completion",
768
+ "--summary"
769
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
770
+ const phase5CompletionSummary = JSON.parse(phase5CompletionOutput);
771
+ assert.strictEqual(phase5CompletionSummary.category, "machine-commerce-phase-5-completion-pack", "xytara phase 5 completion cli category mismatch");
772
+ const phase5FreezeBaselineOutput = execFileSync(process.execPath, [
773
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
774
+ "--phase-5-freeze-baseline",
775
+ "--summary"
776
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
777
+ const phase5FreezeBaselineSummary = JSON.parse(phase5FreezeBaselineOutput);
778
+ assert.strictEqual(phase5FreezeBaselineSummary.category, "machine-commerce-phase-5-freeze-baseline-pack", "xytara phase 5 freeze baseline cli category mismatch");
779
+ const phase5GateOutput = execFileSync(process.execPath, [
780
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
781
+ "--phase-5-gate",
782
+ "--summary"
783
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
784
+ const phase5GateSummary = JSON.parse(phase5GateOutput);
785
+ assert.strictEqual(phase5GateSummary.category, "machine-commerce-phase-5-gate-pack", "xytara phase 5 gate cli category mismatch");
786
+ assert.strictEqual(phase5GateSummary.decision, "ready_for_phase_6", "xytara phase 5 gate decision mismatch");
787
+ const phase5SolanaOutput = execFileSync(process.execPath, [
788
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
789
+ "--phase-5-solana-runtime",
790
+ "--summary"
791
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
792
+ const phase5SolanaSummary = JSON.parse(phase5SolanaOutput);
793
+ assert.strictEqual(phase5SolanaSummary.category, "machine-commerce-phase-5-solana-runtime-pack", "xytara phase 5 solana cli category mismatch");
794
+ assert.strictEqual(phase5SolanaSummary.finality_stage_count >= 3, true, "xytara phase 5 solana cli finality count mismatch");
795
+ const phase5AntelopeOutput = execFileSync(process.execPath, [
796
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
797
+ "--phase-5-antelope-runtime",
798
+ "--summary"
799
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
800
+ const phase5AntelopeSummary = JSON.parse(phase5AntelopeOutput);
801
+ assert.strictEqual(phase5AntelopeSummary.category, "machine-commerce-phase-5-antelope-runtime-pack", "xytara phase 5 antelope cli category mismatch");
802
+ assert.strictEqual(phase5AntelopeSummary.finality_stage_count >= 3, true, "xytara phase 5 antelope cli finality count mismatch");
803
+ const phase5ProtonXprOutput = execFileSync(process.execPath, [
804
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
805
+ "--phase-5-proton-xpr-runtime",
806
+ "--summary"
807
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
808
+ const phase5ProtonXprSummary = JSON.parse(phase5ProtonXprOutput);
809
+ assert.strictEqual(phase5ProtonXprSummary.category, "machine-commerce-phase-5-proton-xpr-runtime-pack", "xytara phase 5 proton xpr cli category mismatch");
810
+ assert.strictEqual(phase5ProtonXprSummary.finality_stage_count >= 3, true, "xytara phase 5 proton xpr cli finality count mismatch");
811
+ const phase5MetalOutput = execFileSync(process.execPath, [
812
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
813
+ "--phase-5-metal-runtime",
814
+ "--summary"
815
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
816
+ const phase5MetalSummary = JSON.parse(phase5MetalOutput);
817
+ assert.strictEqual(phase5MetalSummary.category, "machine-commerce-phase-5-metal-runtime-pack", "xytara phase 5 metal cli category mismatch");
818
+ assert.strictEqual(phase5MetalSummary.finality_stage_count >= 3, true, "xytara phase 5 metal cli finality count mismatch");
819
+ const phase6Output = execFileSync(process.execPath, [
820
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
821
+ "--phase-6",
822
+ "--summary"
823
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
824
+ const phase6Summary = JSON.parse(phase6Output);
825
+ assert.strictEqual(phase6Summary.category, "machine-commerce-phase-6-framework-runtime-pack", "xytara phase 6 cli category mismatch");
826
+ assert.strictEqual(phase6Summary.runtime_mode_count >= 3, true, "xytara phase 6 cli runtime mode count mismatch");
827
+ const phase6LanggraphOutput = execFileSync(process.execPath, [
828
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
829
+ "--phase-6-langgraph-runtime",
830
+ "--summary"
831
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
832
+ const phase6LanggraphSummary = JSON.parse(phase6LanggraphOutput);
833
+ assert.strictEqual(phase6LanggraphSummary.category, "machine-commerce-phase-6-langgraph-runtime-pack", "xytara phase 6 langgraph cli category mismatch");
834
+ assert.strictEqual(phase6LanggraphSummary.runtime_mode_count >= 3, true, "xytara phase 6 langgraph cli runtime mode count mismatch");
835
+ const phase6LangchainOutput = execFileSync(process.execPath, [
836
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
837
+ "--phase-6-langchain-runtime",
838
+ "--summary"
839
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
840
+ const phase6LangchainSummary = JSON.parse(phase6LangchainOutput);
841
+ assert.strictEqual(phase6LangchainSummary.category, "machine-commerce-phase-6-langchain-runtime-pack", "xytara phase 6 langchain cli category mismatch");
842
+ assert.strictEqual(phase6LangchainSummary.runtime_mode_count >= 3, true, "xytara phase 6 langchain cli runtime mode count mismatch");
843
+ const phase6AutogenOutput = execFileSync(process.execPath, [
844
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
845
+ "--phase-6-autogen-runtime",
846
+ "--summary"
847
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
848
+ const phase6AutogenSummary = JSON.parse(phase6AutogenOutput);
849
+ assert.strictEqual(phase6AutogenSummary.category, "machine-commerce-phase-6-autogen-runtime-pack", "xytara phase 6 autogen cli category mismatch");
850
+ assert.strictEqual(phase6AutogenSummary.runtime_mode_count >= 3, true, "xytara phase 6 autogen cli runtime mode count mismatch");
851
+ const phase6SemanticKernelOutput = execFileSync(process.execPath, [
852
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
853
+ "--phase-6-semantic-kernel-runtime",
854
+ "--summary"
855
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
856
+ const phase6SemanticKernelSummary = JSON.parse(phase6SemanticKernelOutput);
857
+ assert.strictEqual(phase6SemanticKernelSummary.category, "machine-commerce-phase-6-semantic-kernel-runtime-pack", "xytara phase 6 semantic kernel cli category mismatch");
858
+ assert.strictEqual(phase6SemanticKernelSummary.runtime_mode_count >= 3, true, "xytara phase 6 semantic kernel cli runtime mode count mismatch");
859
+ const phase6ContinuityOutput = execFileSync(process.execPath, [
860
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
861
+ "--phase-6-framework-continuity",
862
+ "--summary"
863
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
864
+ const phase6ContinuitySummary = JSON.parse(phase6ContinuityOutput);
865
+ assert.strictEqual(phase6ContinuitySummary.category, "machine-commerce-phase-6-framework-continuity-pack", "xytara phase 6 continuity cli category mismatch");
866
+ const phase6CompletionOutput = execFileSync(process.execPath, [
867
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
868
+ "--phase-6-completion",
869
+ "--summary"
870
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
871
+ const phase6CompletionSummary = JSON.parse(phase6CompletionOutput);
872
+ assert.strictEqual(phase6CompletionSummary.category, "machine-commerce-phase-6-completion-pack", "xytara phase 6 completion cli category mismatch");
873
+ assert.strictEqual(phase6CompletionSummary.unsatisfied_criteria_count, 0, "xytara phase 6 completion cli state mismatch");
874
+ const phase6FreezeBaselineOutput = execFileSync(process.execPath, [
875
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
876
+ "--phase-6-freeze-baseline",
877
+ "--summary"
878
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
879
+ const phase6FreezeBaselineSummary = JSON.parse(phase6FreezeBaselineOutput);
880
+ assert.strictEqual(phase6FreezeBaselineSummary.category, "machine-commerce-phase-6-freeze-baseline-pack", "xytara phase 6 freeze baseline cli category mismatch");
881
+ const phase6GateOutput = execFileSync(process.execPath, [
882
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
883
+ "--phase-6-gate",
884
+ "--summary"
885
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
886
+ const phase6GateSummary = JSON.parse(phase6GateOutput);
887
+ assert.strictEqual(phase6GateSummary.category, "machine-commerce-phase-6-gate-pack", "xytara phase 6 gate cli category mismatch");
888
+ assert.strictEqual(phase6GateSummary.decision, "ready_for_phase_7", "xytara phase 6 gate cli decision mismatch");
889
+ const phase7Output = execFileSync(process.execPath, [
890
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
891
+ "--phase-7",
892
+ "--summary"
893
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
894
+ const phase7Summary = JSON.parse(phase7Output);
895
+ assert.strictEqual(phase7Summary.category, "machine-commerce-phase-7-event-system-pack", "xytara phase 7 cli category mismatch");
896
+ assert.strictEqual(phase7Summary.lane_count >= 4, true, "xytara phase 7 cli lane count mismatch");
897
+ const phase7KafkaOutput = execFileSync(process.execPath, [
898
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
899
+ "--phase-7-kafka-runtime",
900
+ "--summary"
901
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
902
+ const phase7KafkaSummary = JSON.parse(phase7KafkaOutput);
903
+ assert.strictEqual(phase7KafkaSummary.category, "machine-commerce-phase-7-kafka-runtime-pack", "xytara phase 7 kafka cli category mismatch");
904
+ const phase7NatsOutput = execFileSync(process.execPath, [
905
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
906
+ "--phase-7-nats-runtime",
907
+ "--summary"
908
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
909
+ const phase7NatsSummary = JSON.parse(phase7NatsOutput);
910
+ assert.strictEqual(phase7NatsSummary.category, "machine-commerce-phase-7-nats-runtime-pack", "xytara phase 7 nats cli category mismatch");
911
+ const phase7MqttOutput = execFileSync(process.execPath, [
912
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
913
+ "--phase-7-mqtt-runtime",
914
+ "--summary"
915
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
916
+ const phase7MqttSummary = JSON.parse(phase7MqttOutput);
917
+ assert.strictEqual(phase7MqttSummary.category, "machine-commerce-phase-7-mqtt-runtime-pack", "xytara phase 7 mqtt cli category mismatch");
918
+ const phase7WebhookEventBusOutput = execFileSync(process.execPath, [
919
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
920
+ "--phase-7-webhook-event-bus-runtime",
921
+ "--summary"
922
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
923
+ const phase7WebhookEventBusSummary = JSON.parse(phase7WebhookEventBusOutput);
924
+ assert.strictEqual(
925
+ phase7WebhookEventBusSummary.category,
926
+ "machine-commerce-phase-7-webhook-event-bus-runtime-pack",
927
+ "xytara phase 7 webhook event bus cli category mismatch"
928
+ );
929
+ const phase7ContinuityOutput = execFileSync(process.execPath, [
930
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
931
+ "--phase-7-event-system-continuity",
932
+ "--summary"
933
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
934
+ const phase7ContinuitySummary = JSON.parse(phase7ContinuityOutput);
935
+ assert.strictEqual(phase7ContinuitySummary.category, "machine-commerce-phase-7-event-system-continuity-pack", "xytara phase 7 continuity cli category mismatch");
936
+ const phase7CompletionOutput = execFileSync(process.execPath, [
937
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
938
+ "--phase-7-completion",
939
+ "--summary"
940
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
941
+ const phase7CompletionSummary = JSON.parse(phase7CompletionOutput);
942
+ assert.strictEqual(phase7CompletionSummary.category, "machine-commerce-phase-7-completion-pack", "xytara phase 7 completion cli category mismatch");
943
+ assert.strictEqual(phase7CompletionSummary.unsatisfied_criteria_count, 0, "xytara phase 7 completion cli state mismatch");
944
+ const phase7FreezeBaselineOutput = execFileSync(process.execPath, [
945
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
946
+ "--phase-7-freeze-baseline",
947
+ "--summary"
948
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
949
+ const phase7FreezeBaselineSummary = JSON.parse(phase7FreezeBaselineOutput);
950
+ assert.strictEqual(phase7FreezeBaselineSummary.category, "machine-commerce-phase-7-freeze-baseline-pack", "xytara phase 7 freeze baseline cli category mismatch");
951
+ const phase7FreezeReviewOutput = execFileSync(process.execPath, [
952
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
953
+ "--phase-7-freeze-review",
954
+ "--summary"
955
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
956
+ const phase7FreezeReviewSummary = JSON.parse(phase7FreezeReviewOutput);
957
+ assert.strictEqual(phase7FreezeReviewSummary.category, "machine-commerce-phase-7-freeze-review-pack", "xytara phase 7 freeze review cli category mismatch");
958
+ const phase7GateOutput = execFileSync(process.execPath, [
959
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
960
+ "--phase-7-gate",
961
+ "--summary"
962
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
963
+ const phase7GateSummary = JSON.parse(phase7GateOutput);
964
+ assert.strictEqual(phase7GateSummary.category, "machine-commerce-phase-7-gate-pack", "xytara phase 7 gate cli category mismatch");
965
+ assert.strictEqual(phase7GateSummary.decision, "ready_for_phase_8", "xytara phase 7 gate cli decision mismatch");
966
+ assert.strictEqual(phase7GateSummary.unsatisfied_gate_count, 0, "xytara phase 7 gate cli state mismatch");
967
+ const phase7CloseoutOutput = execFileSync(process.execPath, [
968
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
969
+ "--phase-7-closeout",
970
+ "--summary"
971
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
972
+ const phase7CloseoutSummary = JSON.parse(phase7CloseoutOutput);
973
+ assert.strictEqual(phase7CloseoutSummary.category, "machine-commerce-phase-7-closeout-pack", "xytara phase 7 closeout cli category mismatch");
974
+ const phase7DecisionRecordOutput = execFileSync(process.execPath, [
975
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
976
+ "--phase-7-decision-record",
977
+ "--summary"
978
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
979
+ const phase7DecisionRecordSummary = JSON.parse(phase7DecisionRecordOutput);
980
+ assert.strictEqual(phase7DecisionRecordSummary.category, "machine-commerce-phase-7-decision-record-pack", "xytara phase 7 decision-record cli category mismatch");
981
+ assert.strictEqual(phase7DecisionRecordSummary.pending_record_count, 0, "xytara phase 7 decision-record cli state mismatch");
982
+ const phase8Output = execFileSync(process.execPath, [
983
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
984
+ "--phase-8",
985
+ "--summary"
986
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
987
+ const phase8Summary = JSON.parse(phase8Output);
988
+ assert.strictEqual(phase8Summary.category, "machine-commerce-phase-8-proof-bridges-pack", "xytara phase 8 cli category mismatch");
989
+ const phase8ProofBridgeContinuityOutput = execFileSync(process.execPath, [
990
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
991
+ "--phase-8-proof-bridge-continuity",
992
+ "--summary"
993
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
994
+ const phase8ProofBridgeContinuitySummary = JSON.parse(phase8ProofBridgeContinuityOutput);
995
+ assert.strictEqual(phase8ProofBridgeContinuitySummary.category, "machine-commerce-phase-8-proof-bridge-continuity-pack", "xytara phase 8 proof-bridge continuity cli category mismatch");
996
+ const phase8CompletionOutput = execFileSync(process.execPath, [
997
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
998
+ "--phase-8-completion",
999
+ "--summary"
1000
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1001
+ const phase8CompletionSummary = JSON.parse(phase8CompletionOutput);
1002
+ assert.strictEqual(phase8CompletionSummary.category, "machine-commerce-phase-8-completion-pack", "xytara phase 8 completion cli category mismatch");
1003
+ assert.strictEqual(phase8CompletionSummary.unsatisfied_criteria_count, 0, "xytara phase 8 completion cli state mismatch");
1004
+ const phase8FreezeBaselineOutput = execFileSync(process.execPath, [
1005
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1006
+ "--phase-8-freeze-baseline",
1007
+ "--summary"
1008
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1009
+ const phase8FreezeBaselineSummary = JSON.parse(phase8FreezeBaselineOutput);
1010
+ assert.strictEqual(phase8FreezeBaselineSummary.category, "machine-commerce-phase-8-freeze-baseline-pack", "xytara phase 8 freeze baseline cli category mismatch");
1011
+ assert.strictEqual(phase8FreezeBaselineSummary.baseline_status, "recorded", "xytara phase 8 freeze baseline status mismatch");
1012
+ const phase8FreezeReviewOutput = execFileSync(process.execPath, [
1013
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1014
+ "--phase-8-freeze-review",
1015
+ "--summary"
1016
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1017
+ const phase8FreezeReviewSummary = JSON.parse(phase8FreezeReviewOutput);
1018
+ assert.strictEqual(phase8FreezeReviewSummary.category, "machine-commerce-phase-8-freeze-review-pack", "xytara phase 8 freeze review cli category mismatch");
1019
+ const phase8GateOutput = execFileSync(process.execPath, [
1020
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1021
+ "--phase-8-gate",
1022
+ "--summary"
1023
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1024
+ const phase8GateSummary = JSON.parse(phase8GateOutput);
1025
+ assert.strictEqual(phase8GateSummary.category, "machine-commerce-phase-8-gate-pack", "xytara phase 8 gate cli category mismatch");
1026
+ assert.strictEqual(phase8GateSummary.decision, "ready_for_phase_9", "xytara phase 8 gate cli decision mismatch");
1027
+ assert.strictEqual(phase8GateSummary.unsatisfied_gate_count, 0, "xytara phase 8 gate cli state mismatch");
1028
+ const phase8CloseoutOutput = execFileSync(process.execPath, [
1029
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1030
+ "--phase-8-closeout",
1031
+ "--summary"
1032
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1033
+ const phase8CloseoutSummary = JSON.parse(phase8CloseoutOutput);
1034
+ assert.strictEqual(phase8CloseoutSummary.category, "machine-commerce-phase-8-closeout-pack", "xytara phase 8 closeout cli category mismatch");
1035
+ const phase8DecisionRecordOutput = execFileSync(process.execPath, [
1036
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1037
+ "--phase-8-decision-record",
1038
+ "--summary"
1039
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1040
+ const phase8DecisionRecordSummary = JSON.parse(phase8DecisionRecordOutput);
1041
+ assert.strictEqual(phase8DecisionRecordSummary.category, "machine-commerce-phase-8-decision-record-pack", "xytara phase 8 decision-record cli category mismatch");
1042
+ assert.strictEqual(phase8DecisionRecordSummary.pending_record_count, 0, "xytara phase 8 decision-record cli state mismatch");
1043
+ const phase8DecisionResolutionOutput = execFileSync(process.execPath, [
1044
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1045
+ "--phase-8-decision-resolution",
1046
+ "--summary"
1047
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1048
+ const phase8DecisionResolutionSummary = JSON.parse(phase8DecisionResolutionOutput);
1049
+ assert.strictEqual(phase8DecisionResolutionSummary.category, "machine-commerce-phase-8-decision-resolution-pack", "xytara phase 8 decision-resolution cli category mismatch");
1050
+ const phase8ExternalResultImportOutput = execFileSync(process.execPath, [
1051
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1052
+ "--phase-8-external-result-import-runtime",
1053
+ "--summary"
1054
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1055
+ const phase8ExternalResultImportSummary = JSON.parse(phase8ExternalResultImportOutput);
1056
+ assert.strictEqual(phase8ExternalResultImportSummary.category, "machine-commerce-phase-8-external-result-import-runtime-pack", "xytara phase 8 external-result-import cli category mismatch");
1057
+ const phase8ExternalReceiptImportOutput = execFileSync(process.execPath, [
1058
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1059
+ "--phase-8-external-receipt-import-runtime",
1060
+ "--summary"
1061
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1062
+ const phase8ExternalReceiptImportSummary = JSON.parse(phase8ExternalReceiptImportOutput);
1063
+ assert.strictEqual(phase8ExternalReceiptImportSummary.category, "machine-commerce-phase-8-external-receipt-import-runtime-pack", "xytara phase 8 external-receipt-import cli category mismatch");
1064
+ const phase8BundleNormalizationOutput = execFileSync(process.execPath, [
1065
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1066
+ "--phase-8-proof-bundle-normalization-runtime",
1067
+ "--summary"
1068
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1069
+ const phase8BundleNormalizationSummary = JSON.parse(phase8BundleNormalizationOutput);
1070
+ assert.strictEqual(phase8BundleNormalizationSummary.category, "machine-commerce-phase-8-proof-bundle-normalization-runtime-pack", "xytara phase 8 proof-bundle-normalization cli category mismatch");
1071
+ const phase9Output = execFileSync(process.execPath, [
1072
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1073
+ "--phase-9",
1074
+ "--summary"
1075
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1076
+ const phase9Summary = JSON.parse(phase9Output);
1077
+ assert.strictEqual(phase9Summary.category, "machine-commerce-phase-9-treasury-connectivity-pack", "xytara phase 9 cli category mismatch");
1078
+ assert.strictEqual(phase9Summary.destination_mode_count >= 3, true, "xytara phase 9 destination mode count mismatch");
1079
+ assert.strictEqual(phase9Summary.custody_mode_count >= 3, true, "xytara phase 9 custody mode count mismatch");
1080
+ assert.strictEqual(phase9Summary.accounting_mode_count >= 3, true, "xytara phase 9 accounting mode count mismatch");
1081
+ const phase9TreasuryContinuityOutput = execFileSync(process.execPath, [
1082
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1083
+ "--phase-9-treasury-continuity",
1084
+ "--summary"
1085
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1086
+ const phase9TreasuryContinuitySummary = JSON.parse(phase9TreasuryContinuityOutput);
1087
+ assert.strictEqual(phase9TreasuryContinuitySummary.category, "machine-commerce-phase-9-treasury-continuity-pack", "xytara phase 9 treasury continuity cli category mismatch");
1088
+ const phase9CompletionOutput = execFileSync(process.execPath, [
1089
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1090
+ "--phase-9-completion",
1091
+ "--summary"
1092
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1093
+ const phase9CompletionSummary = JSON.parse(phase9CompletionOutput);
1094
+ assert.strictEqual(phase9CompletionSummary.category, "machine-commerce-phase-9-completion-pack", "xytara phase 9 completion cli category mismatch");
1095
+ assert.strictEqual(phase9CompletionSummary.unsatisfied_criteria_count, 0, "xytara phase 9 completion cli state mismatch");
1096
+ const phase9FreezeBaselineOutput = execFileSync(process.execPath, [
1097
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1098
+ "--phase-9-freeze-baseline",
1099
+ "--summary"
1100
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1101
+ const phase9FreezeBaselineSummary = JSON.parse(phase9FreezeBaselineOutput);
1102
+ assert.strictEqual(phase9FreezeBaselineSummary.category, "machine-commerce-phase-9-freeze-baseline-pack", "xytara phase 9 freeze baseline cli category mismatch");
1103
+ assert.strictEqual(phase9FreezeBaselineSummary.baseline_status, "recorded", "xytara phase 9 freeze baseline cli status mismatch");
1104
+ const phase9FreezeReviewOutput = execFileSync(process.execPath, [
1105
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1106
+ "--phase-9-freeze-review",
1107
+ "--summary"
1108
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1109
+ const phase9FreezeReviewSummary = JSON.parse(phase9FreezeReviewOutput);
1110
+ assert.strictEqual(phase9FreezeReviewSummary.category, "machine-commerce-phase-9-freeze-review-pack", "xytara phase 9 freeze review cli category mismatch");
1111
+ assert.strictEqual(phase9FreezeReviewSummary.unsatisfied_resolution_count, 0, "xytara phase 9 freeze review cli state mismatch");
1112
+ const phase9GateOutput = execFileSync(process.execPath, [
1113
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1114
+ "--phase-9-gate",
1115
+ "--summary"
1116
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1117
+ const phase9GateSummary = JSON.parse(phase9GateOutput);
1118
+ assert.strictEqual(phase9GateSummary.category, "machine-commerce-phase-9-gate-pack", "xytara phase 9 gate cli category mismatch");
1119
+ assert.strictEqual(phase9GateSummary.decision, "ready_for_phase_10", "xytara phase 9 gate cli decision mismatch");
1120
+ assert.strictEqual(phase9GateSummary.unsatisfied_gate_count, 0, "xytara phase 9 gate cli state mismatch");
1121
+ const phase9CloseoutOutput = execFileSync(process.execPath, [
1122
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1123
+ "--phase-9-closeout",
1124
+ "--summary"
1125
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1126
+ const phase9CloseoutSummary = JSON.parse(phase9CloseoutOutput);
1127
+ assert.strictEqual(phase9CloseoutSummary.category, "machine-commerce-phase-9-closeout-pack", "xytara phase 9 closeout cli category mismatch");
1128
+ const phase9DecisionRecordOutput = execFileSync(process.execPath, [
1129
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1130
+ "--phase-9-decision-record",
1131
+ "--summary"
1132
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1133
+ const phase9DecisionRecordSummary = JSON.parse(phase9DecisionRecordOutput);
1134
+ assert.strictEqual(phase9DecisionRecordSummary.category, "machine-commerce-phase-9-decision-record-pack", "xytara phase 9 decision-record cli category mismatch");
1135
+ assert.strictEqual(phase9DecisionRecordSummary.pending_record_count, 0, "xytara phase 9 decision-record cli state mismatch");
1136
+ const phase9DecisionResolutionOutput = execFileSync(process.execPath, [
1137
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1138
+ "--phase-9-decision-resolution",
1139
+ "--summary"
1140
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1141
+ const phase9DecisionResolutionSummary = JSON.parse(phase9DecisionResolutionOutput);
1142
+ assert.strictEqual(phase9DecisionResolutionSummary.category, "machine-commerce-phase-9-decision-resolution-pack", "xytara phase 9 decision-resolution cli category mismatch");
1143
+ const phase9TreasuryDestinationsOutput = execFileSync(process.execPath, [
1144
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1145
+ "--phase-9-treasury-destinations-runtime",
1146
+ "--summary"
1147
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1148
+ const phase9TreasuryDestinationsSummary = JSON.parse(phase9TreasuryDestinationsOutput);
1149
+ assert.strictEqual(
1150
+ phase9TreasuryDestinationsSummary.category,
1151
+ "machine-commerce-phase-9-treasury-destinations-runtime-pack",
1152
+ "xytara phase 9 treasury-destinations cli category mismatch"
1153
+ );
1154
+ assert.strictEqual(phase9TreasuryDestinationsSummary.destination_mode_count >= 3, true, "xytara phase 9 treasury-destinations destination count mismatch");
1155
+ const phase9CustodyRefsOutput = execFileSync(process.execPath, [
1156
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1157
+ "--phase-9-custody-refs-runtime",
1158
+ "--summary"
1159
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1160
+ const phase9CustodyRefsSummary = JSON.parse(phase9CustodyRefsOutput);
1161
+ assert.strictEqual(phase9CustodyRefsSummary.category, "machine-commerce-phase-9-custody-refs-runtime-pack", "xytara phase 9 custody-refs cli category mismatch");
1162
+ assert.strictEqual(phase9CustodyRefsSummary.custody_mode_count >= 3, true, "xytara phase 9 custody mode count mismatch");
1163
+ const phase9OperatorAccountingBridgesOutput = execFileSync(process.execPath, [
1164
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1165
+ "--phase-9-operator-accounting-bridges-runtime",
1166
+ "--summary"
1167
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1168
+ const phase9OperatorAccountingBridgesSummary = JSON.parse(phase9OperatorAccountingBridgesOutput);
1169
+ assert.strictEqual(
1170
+ phase9OperatorAccountingBridgesSummary.category,
1171
+ "machine-commerce-phase-9-operator-accounting-bridges-runtime-pack",
1172
+ "xytara phase 9 operator-accounting-bridges cli category mismatch"
1173
+ );
1174
+ assert.strictEqual(phase9OperatorAccountingBridgesSummary.accounting_mode_count >= 3, true, "xytara phase 9 accounting bridge mode count mismatch");
1175
+ const phase10Output = execFileSync(process.execPath, [
1176
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1177
+ "--phase-10",
1178
+ "--summary"
1179
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1180
+ const phase10Summary = JSON.parse(phase10Output);
1181
+ assert.strictEqual(phase10Summary.category, "machine-commerce-phase-10-long-tail-ecosystem-pack", "xytara phase 10 cli category mismatch");
1182
+ assert.strictEqual(phase10Summary.lane_count >= 3, true, "xytara phase 10 lane count mismatch");
1183
+ assert.strictEqual(phase10Summary.extension_mode_count >= 3, true, "xytara phase 10 extension mode count mismatch");
1184
+ const phase10DemandSignalAdaptersOutput = execFileSync(process.execPath, [
1185
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1186
+ "--phase-10-demand-signal-adapters-runtime",
1187
+ "--summary"
1188
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1189
+ const phase10DemandSignalAdaptersSummary = JSON.parse(phase10DemandSignalAdaptersOutput);
1190
+ assert.strictEqual(
1191
+ phase10DemandSignalAdaptersSummary.category,
1192
+ "machine-commerce-phase-10-demand-signal-adapters-runtime-pack",
1193
+ "xytara phase 10 demand-signal-adapters cli category mismatch"
1194
+ );
1195
+ assert.strictEqual(phase10DemandSignalAdaptersSummary.demand_mode_count >= 3, true, "xytara phase 10 demand mode count mismatch");
1196
+ const phase10NicheExtensionRegistryOutput = execFileSync(process.execPath, [
1197
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1198
+ "--phase-10-niche-extension-registry-runtime",
1199
+ "--summary"
1200
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1201
+ const phase10NicheExtensionRegistrySummary = JSON.parse(phase10NicheExtensionRegistryOutput);
1202
+ assert.strictEqual(
1203
+ phase10NicheExtensionRegistrySummary.category,
1204
+ "machine-commerce-phase-10-niche-extension-registry-runtime-pack",
1205
+ "xytara phase 10 niche-extension-registry cli category mismatch"
1206
+ );
1207
+ assert.strictEqual(phase10NicheExtensionRegistrySummary.demand_mode_count >= 3, true, "xytara phase 10 niche-extension-registry demand mode count mismatch");
1208
+ const phase10EcosystemBacklogTriageOutput = execFileSync(process.execPath, [
1209
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1210
+ "--phase-10-ecosystem-backlog-triage-runtime",
1211
+ "--summary"
1212
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1213
+ const phase10EcosystemBacklogTriageSummary = JSON.parse(phase10EcosystemBacklogTriageOutput);
1214
+ assert.strictEqual(
1215
+ phase10EcosystemBacklogTriageSummary.category,
1216
+ "machine-commerce-phase-10-ecosystem-backlog-triage-runtime-pack",
1217
+ "xytara phase 10 ecosystem-backlog-triage cli category mismatch"
1218
+ );
1219
+ assert.strictEqual(phase10EcosystemBacklogTriageSummary.demand_mode_count >= 3, true, "xytara phase 10 ecosystem-backlog-triage demand mode count mismatch");
1220
+ const phase10LongTailContinuityOutput = execFileSync(process.execPath, [
1221
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1222
+ "--phase-10-long-tail-continuity",
1223
+ "--summary"
1224
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1225
+ const phase10LongTailContinuitySummary = JSON.parse(phase10LongTailContinuityOutput);
1226
+ assert.strictEqual(phase10LongTailContinuitySummary.category, "machine-commerce-phase-10-long-tail-continuity-pack", "xytara phase 10 long-tail continuity cli category mismatch");
1227
+ const phase10CompletionOutput = execFileSync(process.execPath, [
1228
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1229
+ "--phase-10-completion",
1230
+ "--summary"
1231
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1232
+ const phase10CompletionSummary = JSON.parse(phase10CompletionOutput);
1233
+ assert.strictEqual(phase10CompletionSummary.category, "machine-commerce-phase-10-completion-pack", "xytara phase 10 completion cli category mismatch");
1234
+ assert.strictEqual(phase10CompletionSummary.unsatisfied_criteria_count, 0, "xytara phase 10 completion unsatisfied criteria mismatch");
1235
+ const phase10FreezeBaselineOutput = execFileSync(process.execPath, [
1236
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1237
+ "--phase-10-freeze-baseline",
1238
+ "--summary"
1239
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1240
+ const phase10FreezeBaselineSummary = JSON.parse(phase10FreezeBaselineOutput);
1241
+ assert.strictEqual(phase10FreezeBaselineSummary.category, "machine-commerce-phase-10-freeze-baseline-pack", "xytara phase 10 freeze baseline cli category mismatch");
1242
+ assert.strictEqual(phase10FreezeBaselineSummary.baseline_status, "recorded", "xytara phase 10 freeze baseline status mismatch");
1243
+ const phase10FreezeReviewOutput = execFileSync(process.execPath, [
1244
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1245
+ "--phase-10-freeze-review",
1246
+ "--summary"
1247
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1248
+ const phase10FreezeReviewSummary = JSON.parse(phase10FreezeReviewOutput);
1249
+ assert.strictEqual(phase10FreezeReviewSummary.category, "machine-commerce-phase-10-freeze-review-pack", "xytara phase 10 freeze review cli category mismatch");
1250
+ const phase10GateOutput = execFileSync(process.execPath, [
1251
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1252
+ "--phase-10-gate",
1253
+ "--summary"
1254
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1255
+ const phase10GateSummary = JSON.parse(phase10GateOutput);
1256
+ assert.strictEqual(phase10GateSummary.category, "machine-commerce-phase-10-gate-pack", "xytara phase 10 gate cli category mismatch");
1257
+ assert.strictEqual(phase10GateSummary.decision, "ready_for_program_closeout", "xytara phase 10 gate decision mismatch");
1258
+ assert.strictEqual(phase10GateSummary.unsatisfied_gate_count, 0, "xytara phase 10 gate unsatisfied count mismatch");
1259
+ const phase10CloseoutOutput = execFileSync(process.execPath, [
1260
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1261
+ "--phase-10-closeout",
1262
+ "--summary"
1263
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1264
+ const phase10CloseoutSummary = JSON.parse(phase10CloseoutOutput);
1265
+ assert.strictEqual(phase10CloseoutSummary.category, "machine-commerce-phase-10-closeout-pack", "xytara phase 10 closeout cli category mismatch");
1266
+ const phase10DecisionRecordOutput = execFileSync(process.execPath, [
1267
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1268
+ "--phase-10-decision-record",
1269
+ "--summary"
1270
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1271
+ const phase10DecisionRecordSummary = JSON.parse(phase10DecisionRecordOutput);
1272
+ assert.strictEqual(phase10DecisionRecordSummary.category, "machine-commerce-phase-10-decision-record-pack", "xytara phase 10 decision-record cli category mismatch");
1273
+ assert.strictEqual(phase10DecisionRecordSummary.pending_record_count, 0, "xytara phase 10 decision-record pending count mismatch");
1274
+ const phase10DecisionResolutionOutput = execFileSync(process.execPath, [
1275
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1276
+ "--phase-10-decision-resolution",
1277
+ "--summary"
1278
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1279
+ const phase10DecisionResolutionSummary = JSON.parse(phase10DecisionResolutionOutput);
1280
+ assert.strictEqual(phase10DecisionResolutionSummary.category, "machine-commerce-phase-10-decision-resolution-pack", "xytara phase 10 decision-resolution cli category mismatch");
1281
+ const phase4Erc8004Output = execFileSync(process.execPath, [
1282
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1283
+ "--phase-4-erc8004-runtime",
1284
+ "--summary"
1285
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1286
+ const phase4Erc8004Summary = JSON.parse(phase4Erc8004Output);
1287
+ assert.strictEqual(phase4Erc8004Summary.category, "machine-commerce-phase-4-erc8004-runtime-pack", "xytara phase 4 erc8004 cli category mismatch");
1288
+ assert.strictEqual(phase4Erc8004Summary.http_step_count >= 3, true, "xytara phase 4 erc8004 cli step count mismatch");
1289
+ assert.strictEqual(phase4Erc8004Summary.erc8004_mode_count >= 3, true, "xytara phase 4 erc8004 cli mode count mismatch");
1290
+ const phase4IdentityRegistryOutput = execFileSync(process.execPath, [
1291
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1292
+ "--phase-4-identity-registry-runtime",
1293
+ "--summary"
1294
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1295
+ const phase4IdentityRegistrySummary = JSON.parse(phase4IdentityRegistryOutput);
1296
+ assert.strictEqual(phase4IdentityRegistrySummary.category, "machine-commerce-phase-4-identity-registry-runtime-pack", "xytara phase 4 identity registry cli category mismatch");
1297
+ assert.strictEqual(phase4IdentityRegistrySummary.http_step_count >= 3, true, "xytara phase 4 identity registry cli step count mismatch");
1298
+ assert.strictEqual(phase4IdentityRegistrySummary.resolution_mode_count >= 3, true, "xytara phase 4 identity registry cli resolution count mismatch");
1299
+ const phase4AttestationOutput = execFileSync(process.execPath, [
1300
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1301
+ "--phase-4-attestation-runtime",
1302
+ "--summary"
1303
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1304
+ const phase4AttestationSummary = JSON.parse(phase4AttestationOutput);
1305
+ assert.strictEqual(phase4AttestationSummary.category, "machine-commerce-phase-4-attestation-runtime-pack", "xytara phase 4 attestation cli category mismatch");
1306
+ assert.strictEqual(phase4AttestationSummary.http_step_count >= 3, true, "xytara phase 4 attestation cli step count mismatch");
1307
+ assert.strictEqual(phase4AttestationSummary.review_mode_count >= 3, true, "xytara phase 4 attestation cli review count mismatch");
1308
+ const phase4TrustContinuityOutput = execFileSync(process.execPath, [
1309
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1310
+ "--phase-4-trust-continuity",
1311
+ "--summary"
1312
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1313
+ const phase4TrustContinuitySummary = JSON.parse(phase4TrustContinuityOutput);
1314
+ assert.strictEqual(phase4TrustContinuitySummary.category, "machine-commerce-phase-4-trust-continuity-pack", "xytara phase 4 trust continuity cli category mismatch");
1315
+ const phase4CompletionOutput = execFileSync(process.execPath, [
1316
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1317
+ "--phase-4-completion",
1318
+ "--summary"
1319
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1320
+ const phase4CompletionSummary = JSON.parse(phase4CompletionOutput);
1321
+ assert.strictEqual(phase4CompletionSummary.category, "machine-commerce-phase-4-completion-pack", "xytara phase 4 completion cli category mismatch");
1322
+ const phase4FreezeBaselineOutput = execFileSync(process.execPath, [
1323
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1324
+ "--phase-4-freeze-baseline",
1325
+ "--summary"
1326
+ ], { cwd: path.resolve(__dirname, ".."), encoding: "utf8" });
1327
+ const phase4FreezeBaselineSummary = JSON.parse(phase4FreezeBaselineOutput);
1328
+ assert.strictEqual(phase4FreezeBaselineSummary.category, "machine-commerce-phase-4-freeze-baseline-pack", "xytara phase 4 freeze baseline cli category mismatch");
1329
+ assert.strictEqual(phase4FreezeBaselineSummary.baseline_status, "recorded", "xytara phase 4 freeze baseline status mismatch");
1330
+ const publishPlanOutput = execFileSync(process.execPath, [
1331
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1332
+ "--publish-plan",
1333
+ "--summary"
1334
+ ], {
1335
+ cwd: path.resolve(__dirname, ".."),
1336
+ encoding: "utf8"
1337
+ });
1338
+ const publishPlanSummary = JSON.parse(publishPlanOutput);
1339
+ assert.strictEqual(publishPlanSummary.product, "xytara", "xytara publish plan cli product mismatch");
1340
+ assert.strictEqual(publishPlanSummary.category, "machine-commerce-publish-plan", "xytara publish plan cli category mismatch");
1341
+ assert.strictEqual(publishPlanSummary.publish_step_count >= 5, true, "xytara publish plan cli step count mismatch");
1342
+ const ecosystemOutput = execFileSync(process.execPath, [
1343
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1344
+ "--ecosystem",
1345
+ "--summary"
1346
+ ], {
1347
+ cwd: path.resolve(__dirname, ".."),
1348
+ encoding: "utf8"
1349
+ });
1350
+ const ecosystemSummary = JSON.parse(ecosystemOutput);
1351
+ assert.strictEqual(ecosystemSummary.product, "xytara", "xytara ecosystem cli product mismatch");
1352
+ assert.strictEqual(ecosystemSummary.category, "machine-commerce-ecosystem-entry", "xytara ecosystem cli category mismatch");
1353
+ assert.strictEqual(ecosystemSummary.audience_count >= 4, true, "xytara ecosystem cli audience count mismatch");
1354
+ const narrativeOutput = execFileSync(process.execPath, [
1355
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1356
+ "--narrative",
1357
+ "--summary"
1358
+ ], {
1359
+ cwd: path.resolve(__dirname, ".."),
1360
+ encoding: "utf8"
1361
+ });
1362
+ const narrativeSummary = JSON.parse(narrativeOutput);
1363
+ assert.strictEqual(narrativeSummary.product, "xytara", "xytara narrative cli product mismatch");
1364
+ assert.strictEqual(narrativeSummary.category, "machine-commerce-launch-narrative", "xytara narrative cli category mismatch");
1365
+ assert.strictEqual(narrativeSummary.immediate_audience_count >= 4, true, "xytara narrative cli audience count mismatch");
1366
+ const outreachProofOutput = execFileSync(process.execPath, [
1367
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1368
+ "--outreach-proof",
1369
+ "--summary"
1370
+ ], {
1371
+ cwd: path.resolve(__dirname, ".."),
1372
+ encoding: "utf8"
1373
+ });
1374
+ const outreachProofSummary = JSON.parse(outreachProofOutput);
1375
+ assert.strictEqual(outreachProofSummary.product, "xytara", "xytara outreach proof cli product mismatch");
1376
+ assert.strictEqual(outreachProofSummary.category, "machine-commerce-outreach-proof", "xytara outreach proof cli category mismatch");
1377
+ assert.strictEqual(outreachProofSummary.live_rail_count >= 3, true, "xytara outreach proof cli rail count mismatch");
1378
+ const announcementOutput = execFileSync(process.execPath, [
1379
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1380
+ "--announcement",
1381
+ "--summary"
1382
+ ], {
1383
+ cwd: path.resolve(__dirname, ".."),
1384
+ encoding: "utf8"
1385
+ });
1386
+ const announcementSummary = JSON.parse(announcementOutput);
1387
+ assert.strictEqual(announcementSummary.product, "xytara", "xytara announcement cli product mismatch");
1388
+ assert.strictEqual(announcementSummary.category, "machine-commerce-announcement-pack", "xytara announcement cli category mismatch");
1389
+ assert.strictEqual(announcementSummary.publish_step_count >= 5, true, "xytara announcement cli publish step mismatch");
1390
+ const releaseCandidateOutput = execFileSync(process.execPath, [
1391
+ path.resolve(__dirname, "..", "bin", "xytara-release.js"),
1392
+ "--candidate",
1393
+ "--summary"
1394
+ ], {
1395
+ cwd: path.resolve(__dirname, ".."),
1396
+ encoding: "utf8"
1397
+ });
1398
+ const releaseCandidateSummary = JSON.parse(releaseCandidateOutput);
1399
+ assert.strictEqual(releaseCandidateSummary.product, "xytara", "xytara release candidate cli product mismatch");
1400
+ assert.strictEqual(releaseCandidateSummary.category, "machine-commerce-release-candidate", "xytara release candidate cli category mismatch");
1401
+ assert.strictEqual(releaseCandidateSummary.checklist_count >= 5, true, "xytara release candidate cli checklist mismatch");
1402
+ } finally {
1403
+ server.kill();
1404
+ }
1405
+
1406
+ console.log("xytara verify:tooling passed");
1407
+ }
1408
+
1409
+ main().catch((error) => {
1410
+ console.error(error);
1411
+ process.exit(1);
1412
+ });