xoonya 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 (248) hide show
  1. package/.env.example +10 -2
  2. package/CARRIED_HANDOFF_DEMO.md +60 -60
  3. package/COMPATIBILITY_NOTE.md +27 -27
  4. package/CROSS_RUNTIME_POSTURE.md +77 -77
  5. package/EXAMPLE_PATHS.md +53 -53
  6. package/FINAL_CONTRACT.md +445 -445
  7. package/LICENSE +201 -201
  8. package/NOTICE +3 -3
  9. package/PARTNER_READY_PATH.md +67 -67
  10. package/PUBLIC_DEMO_SCRIPT.md +79 -79
  11. package/README.md +843 -808
  12. package/RELEASE_NOTES.md +10 -15
  13. package/SERVICE_CONTRACT.md +207 -207
  14. package/START_HERE.md +159 -159
  15. package/TERMINOLOGY.md +55 -55
  16. package/WHY_XYTARA_XOONYA.md +43 -43
  17. package/XNYA_CONFORMANCE_MARK.md +78 -78
  18. package/XNYA_REFERENCE_IMPLEMENTATIONS.md +157 -157
  19. package/XOONYA_DEFAULT_PATH_MODEL.md +63 -63
  20. package/XOONYA_FOLLOWTHROUGH_TRUTH_MODEL.md +63 -63
  21. package/XOONYA_NATIVE_ATOM_SPEC.md +184 -184
  22. package/XOONYA_NATIVE_PROOF_FORMAT.md +570 -527
  23. package/XOONYA_NATIVE_STANDARD_GOVERNANCE.md +119 -119
  24. package/XOONYA_PROOF_TRUTH_MODEL.md +58 -58
  25. package/bin/xoonya-first-run.js +184 -184
  26. package/bin/xoonya-release.js +1367 -1367
  27. package/bin/xoonya-review.js +70 -70
  28. package/bin/xoonya.js +82 -82
  29. package/examples/integration_boundary_walkthrough.js +37 -37
  30. package/examples/package_quickstart.js +1007 -1007
  31. package/examples/partner_proof_walkthrough.js +68 -68
  32. package/examples/proof_review_walkthrough.js +66 -66
  33. package/examples/review_carried_handoff.js +72 -72
  34. package/index.js +31 -31
  35. package/integrations/PROOF_INTEGRATION_PROCESS.md +45 -45
  36. package/integrations/examples/example-third-party-verifier-registration.record.json +22 -22
  37. package/integrations/registration-record.schema.json +99 -99
  38. package/integrations/registry-snapshot.schema.json +36 -36
  39. package/integrations/registry.js +636 -636
  40. package/integrations/views.js +36 -36
  41. package/lib/adapter_certification_contract.js +90 -90
  42. package/lib/announcement_pack.js +61 -61
  43. package/lib/artifact_distribution_lane_contract.js +54 -54
  44. package/lib/asyncapi_contract.js +135 -135
  45. package/lib/auth_interop_contract.js +69 -69
  46. package/lib/authority_binding_lifecycle_contract.js +182 -182
  47. package/lib/bridge_intelligence.js +102 -102
  48. package/lib/cloudevents_contract.js +79 -79
  49. package/lib/crypto_agility_matrix.js +125 -125
  50. package/lib/default_path_contract.js +380 -380
  51. package/lib/ecosystem_entry.js +64 -64
  52. package/lib/erc8004_proof_lane_contract.js +64 -64
  53. package/lib/event_system_lane_contract.js +76 -76
  54. package/lib/external_proof_import_lane_contract.js +87 -87
  55. package/lib/feature_control_lane_contract.js +54 -54
  56. package/lib/followthrough_truth_contract.js +214 -214
  57. package/lib/framework_lane_contract.js +76 -76
  58. package/lib/governance_disputes_summary.js +36 -36
  59. package/lib/governance_intelligence.js +108 -108
  60. package/lib/identity_interop_contract.js +83 -83
  61. package/lib/integration_matrix_contract.js +81 -81
  62. package/lib/launch_narrative.js +53 -53
  63. package/lib/machine_identity_registry_contract.js +199 -199
  64. package/lib/major_rails_proof_lane_contract.js +87 -87
  65. package/lib/offline_verifiability_recovery_contract.js +155 -155
  66. package/lib/openapi_contract.js +227 -227
  67. package/lib/operational_receipt_contract.js +165 -165
  68. package/lib/outreach_proof.js +71 -71
  69. package/lib/phase_10_closeout_pack.js +45 -45
  70. package/lib/phase_10_completion_pack.js +76 -76
  71. package/lib/phase_10_decision_record_pack.js +54 -54
  72. package/lib/phase_10_decision_resolution_pack.js +53 -53
  73. package/lib/phase_10_demand_signal_adapters_proof_pack.js +74 -74
  74. package/lib/phase_10_ecosystem_backlog_triage_proof_pack.js +74 -74
  75. package/lib/phase_10_freeze_baseline_pack.js +67 -67
  76. package/lib/phase_10_freeze_review_pack.js +64 -64
  77. package/lib/phase_10_gate_pack.js +57 -57
  78. package/lib/phase_10_long_tail_continuity_pack.js +80 -80
  79. package/lib/phase_10_long_tail_ecosystem_pack.js +68 -68
  80. package/lib/phase_10_niche_extension_registry_proof_pack.js +74 -74
  81. package/lib/phase_1_claude_mcp_pack.js +60 -60
  82. package/lib/phase_1_claude_mcp_proof_pack.js +57 -57
  83. package/lib/phase_1_ecosystem_pack.js +51 -51
  84. package/lib/phase_1_openai_codex_pack.js +60 -60
  85. package/lib/phase_1_openai_codex_proof_pack.js +57 -57
  86. package/lib/phase_2_base_proof_pack.js +71 -71
  87. package/lib/phase_2_base_usdc_proof_pack.js +72 -72
  88. package/lib/phase_2_closeout_pack.js +65 -65
  89. package/lib/phase_2_completion_pack.js +113 -113
  90. package/lib/phase_2_decision_record_pack.js +66 -66
  91. package/lib/phase_2_decision_resolution_pack.js +69 -69
  92. package/lib/phase_2_eth_proof_pack.js +70 -70
  93. package/lib/phase_2_evm_base_proof_pack.js +73 -73
  94. package/lib/phase_2_evm_proof_pack.js +71 -71
  95. package/lib/phase_2_flip_preview_pack.js +60 -60
  96. package/lib/phase_2_freeze_review_pack.js +99 -99
  97. package/lib/phase_2_gate_pack.js +77 -77
  98. package/lib/phase_2_payment_rails_pack.js +71 -71
  99. package/lib/phase_2_usdc_proof_pack.js +71 -71
  100. package/lib/phase_3_brc_proof_pack.js +81 -81
  101. package/lib/phase_3_bsv_teranode_proof_pack.js +81 -81
  102. package/lib/phase_3_closeout_pack.js +62 -62
  103. package/lib/phase_3_completion_pack.js +92 -92
  104. package/lib/phase_3_decision_record_pack.js +64 -64
  105. package/lib/phase_3_decision_resolution_pack.js +69 -69
  106. package/lib/phase_3_freeze_baseline_pack.js +67 -67
  107. package/lib/phase_3_freeze_review_pack.js +80 -80
  108. package/lib/phase_3_gate_pack.js +76 -76
  109. package/lib/phase_3_metanet_proof_pack.js +81 -81
  110. package/lib/phase_3_native_bsv_pack.js +89 -89
  111. package/lib/phase_3_native_continuity_pack.js +82 -82
  112. package/lib/phase_4_attestation_proof_pack.js +75 -75
  113. package/lib/phase_4_closeout_pack.js +45 -45
  114. package/lib/phase_4_completion_pack.js +82 -82
  115. package/lib/phase_4_decision_record_pack.js +54 -54
  116. package/lib/phase_4_decision_resolution_pack.js +45 -45
  117. package/lib/phase_4_erc8004_proof_pack.js +76 -76
  118. package/lib/phase_4_freeze_baseline_pack.js +67 -67
  119. package/lib/phase_4_freeze_review_pack.js +68 -68
  120. package/lib/phase_4_gate_pack.js +58 -58
  121. package/lib/phase_4_identity_registry_proof_pack.js +75 -75
  122. package/lib/phase_4_identity_trust_pack.js +73 -73
  123. package/lib/phase_4_trust_continuity_pack.js +86 -86
  124. package/lib/phase_5_antelope_proof_pack.js +76 -76
  125. package/lib/phase_5_closeout_pack.js +44 -44
  126. package/lib/phase_5_completion_pack.js +82 -82
  127. package/lib/phase_5_decision_record_pack.js +54 -54
  128. package/lib/phase_5_decision_resolution_pack.js +45 -45
  129. package/lib/phase_5_freeze_baseline_pack.js +67 -67
  130. package/lib/phase_5_freeze_review_pack.js +68 -68
  131. package/lib/phase_5_gate_pack.js +58 -58
  132. package/lib/phase_5_major_rails_continuity_pack.js +86 -86
  133. package/lib/phase_5_major_rails_pack.js +74 -74
  134. package/lib/phase_5_proton_xpr_proof_pack.js +76 -76
  135. package/lib/phase_5_solana_proof_pack.js +76 -76
  136. package/lib/phase_6_autogen_proof_pack.js +74 -74
  137. package/lib/phase_6_closeout_pack.js +46 -46
  138. package/lib/phase_6_completion_pack.js +77 -77
  139. package/lib/phase_6_decision_record_pack.js +54 -54
  140. package/lib/phase_6_decision_resolution_pack.js +53 -53
  141. package/lib/phase_6_framework_continuity_pack.js +81 -81
  142. package/lib/phase_6_framework_runtime_pack.js +68 -68
  143. package/lib/phase_6_freeze_baseline_pack.js +68 -68
  144. package/lib/phase_6_freeze_review_pack.js +65 -65
  145. package/lib/phase_6_gate_pack.js +59 -59
  146. package/lib/phase_6_langchain_proof_pack.js +74 -74
  147. package/lib/phase_6_langgraph_proof_pack.js +74 -74
  148. package/lib/phase_6_semantic_kernel_proof_pack.js +74 -74
  149. package/lib/phase_7_closeout_pack.js +45 -45
  150. package/lib/phase_7_completion_pack.js +85 -85
  151. package/lib/phase_7_decision_record_pack.js +53 -53
  152. package/lib/phase_7_decision_resolution_pack.js +53 -53
  153. package/lib/phase_7_event_system_continuity_pack.js +89 -89
  154. package/lib/phase_7_event_system_pack.js +76 -76
  155. package/lib/phase_7_freeze_baseline_pack.js +74 -74
  156. package/lib/phase_7_freeze_review_pack.js +65 -65
  157. package/lib/phase_7_gate_pack.js +58 -58
  158. package/lib/phase_7_kafka_proof_pack.js +76 -76
  159. package/lib/phase_7_mqtt_proof_pack.js +76 -76
  160. package/lib/phase_7_nats_proof_pack.js +76 -76
  161. package/lib/phase_7_webhook_event_bus_proof_pack.js +76 -76
  162. package/lib/phase_8_closeout_pack.js +46 -46
  163. package/lib/phase_8_completion_pack.js +82 -82
  164. package/lib/phase_8_decision_record_pack.js +54 -54
  165. package/lib/phase_8_decision_resolution_pack.js +53 -53
  166. package/lib/phase_8_external_receipt_import_proof_pack.js +74 -74
  167. package/lib/phase_8_external_result_import_proof_pack.js +74 -74
  168. package/lib/phase_8_freeze_baseline_pack.js +71 -71
  169. package/lib/phase_8_freeze_review_pack.js +64 -64
  170. package/lib/phase_8_gate_pack.js +58 -58
  171. package/lib/phase_8_proof_bridge_continuity_pack.js +86 -86
  172. package/lib/phase_8_proof_bridges_pack.js +72 -72
  173. package/lib/phase_8_proof_bundle_normalization_proof_pack.js +74 -74
  174. package/lib/phase_9_closeout_pack.js +46 -46
  175. package/lib/phase_9_completion_pack.js +82 -82
  176. package/lib/phase_9_custody_refs_proof_pack.js +74 -74
  177. package/lib/phase_9_decision_record_pack.js +54 -54
  178. package/lib/phase_9_decision_resolution_pack.js +53 -53
  179. package/lib/phase_9_freeze_baseline_pack.js +71 -71
  180. package/lib/phase_9_freeze_review_pack.js +64 -64
  181. package/lib/phase_9_gate_pack.js +58 -58
  182. package/lib/phase_9_operator_accounting_bridges_proof_pack.js +74 -74
  183. package/lib/phase_9_treasury_connectivity_pack.js +72 -72
  184. package/lib/phase_9_treasury_continuity_pack.js +86 -86
  185. package/lib/phase_9_treasury_destinations_proof_pack.js +74 -74
  186. package/lib/phase_program_pack.js +47 -47
  187. package/lib/proof_bridge_lane_contract.js +82 -82
  188. package/lib/proof_truth_contract.js +224 -224
  189. package/lib/provenance_lane_contract.js +54 -54
  190. package/lib/provider_lane_contract.js +67 -67
  191. package/lib/public_surface_policy_contract.js +111 -111
  192. package/lib/publish_plan.js +51 -51
  193. package/lib/release_candidate.js +50 -50
  194. package/lib/release_center.js +1037 -1037
  195. package/lib/release_history.js +206 -206
  196. package/lib/release_manifest.js +114 -114
  197. package/lib/release_pack.js +391 -391
  198. package/lib/result_package_trust_lane_contract.js +74 -74
  199. package/lib/review_intelligence.js +100 -100
  200. package/lib/role_freeze.js +436 -436
  201. package/lib/shared_signals_lane_contract.js +54 -54
  202. package/lib/signed_audit_provenance_contract.js +93 -93
  203. package/lib/telemetry_lane_contract.js +54 -54
  204. package/lib/treasury_proof_lane_contract.js +83 -83
  205. package/lib/trust_intelligence.js +106 -106
  206. package/lib/trust_portability_boundary_contract.js +66 -66
  207. package/lib/trust_portability_pack.js +224 -224
  208. package/lib/verification_service_pack.js +149 -149
  209. package/package.json +98 -97
  210. package/proof_sdk.js +6561 -6265
  211. package/reference/python/README.md +35 -35
  212. package/reference/python/__pycache__/xnya_reference.cpython-314.pyc +0 -0
  213. package/reference/python/requirements-optional.txt +1 -1
  214. package/reference/python/verify_vectors.py +223 -223
  215. package/reference/python/xnya_reference.py +810 -810
  216. package/reference/rust/Cargo.toml +11 -11
  217. package/reference/rust/README.md +28 -28
  218. package/reference/rust/src/lib.rs +87 -87
  219. package/scripts/registry_cli.js +157 -157
  220. package/scripts/verify_all.js +603 -603
  221. package/scripts/verify_control_plane_contracts.js +34 -34
  222. package/scripts/verify_control_plane_routes.js +70 -70
  223. package/scripts/verify_examples.js +19 -19
  224. package/scripts/verify_external_proof_import_gate.js +84 -84
  225. package/scripts/verify_forgery_resistance.js +281 -0
  226. package/scripts/verify_integrations.js +170 -170
  227. package/scripts/verify_native_hybrid_design_gate.js +114 -114
  228. package/scripts/verify_reference_promotion_gate.js +74 -74
  229. package/scripts/verify_reference_python.js +49 -49
  230. package/scripts/verify_reference_python_crypto.js +87 -87
  231. package/scripts/verify_reference_rust_scaffold.js +50 -50
  232. package/scripts/verify_release_candidate.js +131 -131
  233. package/scripts/verify_service.js +3038 -2940
  234. package/scripts/verify_tooling.js +1251 -1251
  235. package/scripts/verify_trust_portability.js +56 -56
  236. package/scripts/verify_vectors.js +192 -192
  237. package/scripts/verify_verification_services.js +56 -56
  238. package/server.js +4223 -4099
  239. package/vectors/adversarial-vectors.json +552 -552
  240. package/vectors/conformance-vectors.json +446 -446
  241. package/vectors/native-atom-vectors.json +101 -101
  242. package/vectors/native-payload-profile-vectors.json +50 -50
  243. package/OPERATIONS_RUNBOOK.md +0 -50
  244. package/OPERATOR_START_HERE.md +0 -67
  245. package/PROGRAM_COMPLETE_RELEASE.md +0 -52
  246. package/PROGRAM_STATUS.md +0 -57
  247. package/PUBLISH_PLAN.md +0 -25
  248. package/RELEASE_CHECKLIST.md +0 -16
@@ -1,50 +1,50 @@
1
- "use strict";
2
-
3
- const assert = require("assert");
4
- const fs = require("fs");
5
- const path = require("path");
6
-
7
- const root = path.resolve(__dirname, "..");
8
-
9
- function read(relativePath) {
10
- return fs.readFileSync(path.join(root, relativePath), "utf8");
11
- }
12
-
13
- function ensureContains(body, pattern, label) {
14
- assert.strictEqual(body.includes(pattern), true, `${label} missing ${pattern}`);
15
- }
16
-
17
- function main() {
18
- const readme = read("reference/rust/README.md");
19
- const cargo = read("reference/rust/Cargo.toml");
20
- const lib = read("reference/rust/src/lib.rs");
21
-
22
- ensureContains(readme, "not a full XNYA-compatible reference implementation yet", "rust readme boundary");
23
- ensureContains(readme, "Future promotion requires a real Rust toolchain check", "rust readme promotion gate");
24
- ensureContains(cargo, "publish = false", "rust cargo publish boundary");
25
- ensureContains(cargo, "name = \"xoonya-native-rust\"", "rust cargo name");
26
- ensureContains(lib, "pub const XNYA_MAGIC: [u8; 4] = *b\"XNYA\";", "rust magic constant");
27
- ensureContains(lib, "pub const ATOM_V1_LEN: usize = 58;", "rust atom v1 length");
28
- ensureContains(lib, "pub const ATOM_V2_LEN: usize = 70;", "rust atom v2 length");
29
- ensureContains(lib, "atom_bad_magic", "rust deterministic error code");
30
- ensureContains(lib, "atom_unsupported_length", "rust deterministic error code");
31
- ensureContains(lib, "atom_unsupported_record_type", "rust deterministic error code");
32
- ensureContains(lib, "atom_version_length_mismatch", "rust deterministic error code");
33
-
34
- const summary = {
35
- ok: true,
36
- product: "xoonya",
37
- category: "xnya-rust-reference-scaffold-check",
38
- status: "source_scaffold_packaged_not_vector_verified",
39
- checked_files: [
40
- "reference/rust/README.md",
41
- "reference/rust/Cargo.toml",
42
- "reference/rust/src/lib.rs"
43
- ],
44
- boundary: "rust_candidate_is_source_only_until_cargo_vector_parity_and_round_trip_checks_exist"
45
- };
46
- process.stdout.write(`${JSON.stringify(summary, null, 2)}\n`);
47
- }
48
-
49
- main();
50
-
1
+ "use strict";
2
+
3
+ const assert = require("assert");
4
+ const fs = require("fs");
5
+ const path = require("path");
6
+
7
+ const root = path.resolve(__dirname, "..");
8
+
9
+ function read(relativePath) {
10
+ return fs.readFileSync(path.join(root, relativePath), "utf8");
11
+ }
12
+
13
+ function ensureContains(body, pattern, label) {
14
+ assert.strictEqual(body.includes(pattern), true, `${label} missing ${pattern}`);
15
+ }
16
+
17
+ function main() {
18
+ const readme = read("reference/rust/README.md");
19
+ const cargo = read("reference/rust/Cargo.toml");
20
+ const lib = read("reference/rust/src/lib.rs");
21
+
22
+ ensureContains(readme, "not a full XNYA-compatible reference implementation yet", "rust readme boundary");
23
+ ensureContains(readme, "Future promotion requires a real Rust toolchain check", "rust readme promotion gate");
24
+ ensureContains(cargo, "publish = false", "rust cargo publish boundary");
25
+ ensureContains(cargo, "name = \"xoonya-native-rust\"", "rust cargo name");
26
+ ensureContains(lib, "pub const XNYA_MAGIC: [u8; 4] = *b\"XNYA\";", "rust magic constant");
27
+ ensureContains(lib, "pub const ATOM_V1_LEN: usize = 58;", "rust atom v1 length");
28
+ ensureContains(lib, "pub const ATOM_V2_LEN: usize = 70;", "rust atom v2 length");
29
+ ensureContains(lib, "atom_bad_magic", "rust deterministic error code");
30
+ ensureContains(lib, "atom_unsupported_length", "rust deterministic error code");
31
+ ensureContains(lib, "atom_unsupported_record_type", "rust deterministic error code");
32
+ ensureContains(lib, "atom_version_length_mismatch", "rust deterministic error code");
33
+
34
+ const summary = {
35
+ ok: true,
36
+ product: "xoonya",
37
+ category: "xnya-rust-reference-scaffold-check",
38
+ status: "source_scaffold_packaged_not_vector_verified",
39
+ checked_files: [
40
+ "reference/rust/README.md",
41
+ "reference/rust/Cargo.toml",
42
+ "reference/rust/src/lib.rs"
43
+ ],
44
+ boundary: "rust_candidate_is_source_only_until_cargo_vector_parity_and_round_trip_checks_exist"
45
+ };
46
+ process.stdout.write(`${JSON.stringify(summary, null, 2)}\n`);
47
+ }
48
+
49
+ main();
50
+
@@ -1,131 +1,131 @@
1
- "use strict";
2
-
3
- const assert = require("assert");
4
- const fs = require("fs");
5
- const path = require("path");
6
- const { execFileSync, execSync } = require("child_process");
7
- const packageJson = require("../package.json");
8
-
9
- function parsePackDryRun() {
10
- const output = execSync("npm pack --dry-run --json", {
11
- cwd: path.resolve(__dirname, ".."),
12
- encoding: "utf8"
13
- });
14
- const parsed = JSON.parse(output);
15
- return Array.isArray(parsed) ? parsed[0] : parsed;
16
- }
17
-
18
- function verifyReleaseNotes() {
19
- const notesPath = path.resolve(__dirname, "..", "RELEASE_NOTES.md");
20
- const notes = fs.readFileSync(notesPath, "utf8");
21
- assert.strictEqual(
22
- /^#\s+xoonya\s+\d+\.\d+\.\d+\s+Release Notes\s*$/m.test(notes),
23
- false,
24
- "RELEASE_NOTES.md must not duplicate the GitHub release title as a heading"
25
- );
26
- assert.strictEqual(
27
- notes.includes(`xoonya\` ${packageJson.version}`),
28
- true,
29
- "RELEASE_NOTES.md must mention the current package version"
30
- );
31
- const mentionedVersions = notes.match(/\b\d+\.\d+\.\d+\b/g) || [];
32
- assert.strictEqual(
33
- mentionedVersions.every((version) => version === packageJson.version),
34
- true,
35
- "RELEASE_NOTES.md must not mention prior package versions"
36
- );
37
- }
38
-
39
- function main() {
40
- const releaseOutput = execFileSync(process.execPath, [
41
- path.resolve(__dirname, "..", "bin", "xoonya-release.js"),
42
- "--candidate",
43
- "--summary"
44
- ], {
45
- cwd: path.resolve(__dirname, ".."),
46
- encoding: "utf8"
47
- });
48
- const releaseCandidate = JSON.parse(releaseOutput);
49
- assert.strictEqual(releaseCandidate.product, "xoonya", "release candidate product mismatch");
50
- assert.strictEqual(releaseCandidate.publish_access, "public", "release candidate publish access mismatch");
51
- assert.strictEqual(releaseCandidate.checklist_count >= 5, true, "release candidate checklist count mismatch");
52
- verifyReleaseNotes();
53
-
54
- const conformanceOutput = execFileSync(process.execPath, [
55
- path.resolve(__dirname, "..", "bin", "xoonya.js"),
56
- "conformance",
57
- "--json"
58
- ], {
59
- cwd: path.resolve(__dirname, ".."),
60
- encoding: "utf8"
61
- });
62
- const conformanceSummary = JSON.parse(conformanceOutput);
63
- assert.strictEqual(conformanceSummary.ok, true, "conformance command did not pass");
64
- assert.strictEqual(conformanceSummary.conformance_count >= 8, true, "conformance vector count too small");
65
- assert.strictEqual(conformanceSummary.adversarial_count >= 8, true, "adversarial vector count too small");
66
- assert.strictEqual(
67
- conformanceSummary.adversarial_reasons.includes("native_hybrid_pq_signature_invalid"),
68
- true,
69
- "native hybrid adversarial reason missing"
70
- );
71
- assert.deepStrictEqual(
72
- conformanceSummary.verification_methods,
73
- [
74
- "detached-assertion-v1",
75
- "did-vc-v1",
76
- "jwt-assertion-v1",
77
- "legacy-opreturn-v1",
78
- "partner-proof-envelope-v1",
79
- "sd-jwt-vc-v1",
80
- "signed-envelope-v1",
81
- "xoonya-native-anchored-v1",
82
- "xoonya-native-hybrid-v1",
83
- "xoonya-native-sha256-v1",
84
- "xoonya-native-signed-v1"
85
- ],
86
- "conformance methods mismatch"
87
- );
88
-
89
- const dryRun = parsePackDryRun();
90
- assert.strictEqual(dryRun.name, packageJson.name, "npm pack dry-run name mismatch");
91
- assert.strictEqual(dryRun.version, packageJson.version, "npm pack dry-run version mismatch");
92
- assert.strictEqual(Array.isArray(dryRun.files), true, "npm pack dry-run file list missing");
93
- assert.strictEqual(dryRun.files.some((entry) => entry.path === "bin/xoonya.js"), true, "npm pack dry-run missing xoonya cli");
94
- assert.strictEqual(dryRun.files.some((entry) => entry.path === "bin/xoonya-first-run.js"), true, "npm pack dry-run missing xoonya-first-run");
95
- assert.strictEqual(dryRun.files.some((entry) => entry.path === "bin/xoonya-review.js"), true, "npm pack dry-run missing xoonya-review");
96
- assert.strictEqual(dryRun.files.some((entry) => entry.path === "bin/xoonya-release.js"), true, "npm pack dry-run missing xoonya-release");
97
- assert.strictEqual(dryRun.files.some((entry) => entry.path === "scripts/verify_external_proof_import_gate.js"), true, "npm pack dry-run missing external proof import gate verifier script");
98
- assert.strictEqual(dryRun.files.some((entry) => entry.path === "scripts/verify_vectors.js"), true, "npm pack dry-run missing conformance verifier script");
99
- assert.strictEqual(dryRun.files.some((entry) => entry.path === "scripts/verify_reference_python.js"), true, "npm pack dry-run missing Python reference verifier script");
100
- assert.strictEqual(dryRun.files.some((entry) => entry.path === "scripts/verify_reference_python_crypto.js"), true, "npm pack dry-run missing Python crypto reference verifier script");
101
- assert.strictEqual(dryRun.files.some((entry) => entry.path === "scripts/verify_reference_promotion_gate.js"), true, "npm pack dry-run missing reference promotion gate verifier script");
102
- assert.strictEqual(dryRun.files.some((entry) => entry.path === "scripts/verify_reference_rust_scaffold.js"), true, "npm pack dry-run missing Rust reference scaffold verifier script");
103
- assert.strictEqual(dryRun.files.some((entry) => entry.path === "scripts/verify_native_hybrid_design_gate.js"), true, "npm pack dry-run missing native hybrid verifier script");
104
- assert.strictEqual(dryRun.files.some((entry) => entry.path === "scripts/verify_verification_services.js"), true, "npm pack dry-run missing verification services verifier script");
105
- assert.strictEqual(dryRun.files.some((entry) => entry.path === "scripts/verify_all.js"), true, "npm pack dry-run missing package verifier script");
106
- assert.strictEqual(dryRun.files.some((entry) => entry.path === "vectors/conformance-vectors.json"), true, "npm pack dry-run missing conformance vectors");
107
- assert.strictEqual(dryRun.files.some((entry) => entry.path === "vectors/adversarial-vectors.json"), true, "npm pack dry-run missing adversarial vectors");
108
- assert.strictEqual(dryRun.files.some((entry) => entry.path === "vectors/native-atom-vectors.json"), true, "npm pack dry-run missing native atom vectors");
109
- assert.strictEqual(dryRun.files.some((entry) => entry.path === "README.md"), true, "npm pack dry-run missing README");
110
- assert.strictEqual(dryRun.files.some((entry) => entry.path === "XOONYA_NATIVE_ATOM_SPEC.md"), true, "npm pack dry-run missing native atom spec");
111
- assert.strictEqual(dryRun.files.some((entry) => entry.path === "XOONYA_NATIVE_STANDARD_GOVERNANCE.md"), true, "npm pack dry-run missing native governance doc");
112
- assert.strictEqual(dryRun.files.some((entry) => entry.path === "XNYA_CONFORMANCE_MARK.md"), true, "npm pack dry-run missing XNYA conformance mark doc");
113
- assert.strictEqual(dryRun.files.some((entry) => entry.path === "XNYA_REFERENCE_IMPLEMENTATIONS.md"), true, "npm pack dry-run missing XNYA reference implementations doc");
114
- assert.strictEqual(dryRun.files.some((entry) => entry.path === "reference/python/xnya_reference.py"), true, "npm pack dry-run missing Python XNYA candidate reference");
115
- assert.strictEqual(dryRun.files.some((entry) => entry.path === "reference/python/verify_vectors.py"), true, "npm pack dry-run missing Python XNYA vector verifier");
116
- assert.strictEqual(dryRun.files.some((entry) => entry.path === "reference/python/requirements-optional.txt"), true, "npm pack dry-run missing Python optional requirements");
117
- assert.strictEqual(dryRun.files.some((entry) => entry.path === "reference/rust/Cargo.toml"), true, "npm pack dry-run missing Rust candidate Cargo manifest");
118
- assert.strictEqual(dryRun.files.some((entry) => entry.path === "reference/rust/src/lib.rs"), true, "npm pack dry-run missing Rust candidate source");
119
- assert.strictEqual(dryRun.files.some((entry) => entry.path === "reference/rust/README.md"), true, "npm pack dry-run missing Rust candidate boundary doc");
120
- assert.strictEqual(dryRun.files.some((entry) => entry.path === "RELEASE_NOTES.md"), true, "npm pack dry-run missing release notes");
121
- assert.strictEqual(dryRun.files.some((entry) => entry.path === "START_HERE.md"), true, "npm pack dry-run missing start-here");
122
- assert.strictEqual(dryRun.files.some((entry) => entry.path === "SERVICE_CONTRACT.md"), true, "npm pack dry-run missing service contract");
123
- assert.strictEqual(dryRun.files.some((entry) => entry.path === "OPERATOR_START_HERE.md"), false, "npm pack dry-run should not ship operator start-here");
124
- assert.strictEqual(dryRun.files.some((entry) => entry.path === "OPERATIONS_RUNBOOK.md"), false, "npm pack dry-run should not ship operations runbook");
125
- assert.strictEqual(dryRun.files.some((entry) => entry.path === "PUBLISH_PLAN.md"), false, "npm pack dry-run should not ship publish plan");
126
- assert.strictEqual(dryRun.files.length >= 10, true, "npm pack dry-run file count too small");
127
-
128
- console.log("xoonya verify:release-candidate passed");
129
- }
130
-
131
- main();
1
+ "use strict";
2
+
3
+ const assert = require("assert");
4
+ const fs = require("fs");
5
+ const path = require("path");
6
+ const { execFileSync, execSync } = require("child_process");
7
+ const packageJson = require("../package.json");
8
+
9
+ function parsePackDryRun() {
10
+ const output = execSync("npm pack --dry-run --json", {
11
+ cwd: path.resolve(__dirname, ".."),
12
+ encoding: "utf8"
13
+ });
14
+ const parsed = JSON.parse(output);
15
+ return Array.isArray(parsed) ? parsed[0] : parsed;
16
+ }
17
+
18
+ function verifyReleaseNotes() {
19
+ const notesPath = path.resolve(__dirname, "..", "RELEASE_NOTES.md");
20
+ const notes = fs.readFileSync(notesPath, "utf8");
21
+ assert.strictEqual(
22
+ /^#\s+xoonya\s+\d+\.\d+\.\d+\s+Release Notes\s*$/m.test(notes),
23
+ false,
24
+ "RELEASE_NOTES.md must not duplicate the GitHub release title as a heading"
25
+ );
26
+ assert.strictEqual(
27
+ notes.includes(`xoonya\` ${packageJson.version}`),
28
+ true,
29
+ "RELEASE_NOTES.md must mention the current package version"
30
+ );
31
+ const mentionedVersions = notes.match(/\b\d+\.\d+\.\d+\b/g) || [];
32
+ assert.strictEqual(
33
+ mentionedVersions.every((version) => version === packageJson.version),
34
+ true,
35
+ "RELEASE_NOTES.md must not mention prior package versions"
36
+ );
37
+ }
38
+
39
+ function main() {
40
+ const releaseOutput = execFileSync(process.execPath, [
41
+ path.resolve(__dirname, "..", "bin", "xoonya-release.js"),
42
+ "--candidate",
43
+ "--summary"
44
+ ], {
45
+ cwd: path.resolve(__dirname, ".."),
46
+ encoding: "utf8"
47
+ });
48
+ const releaseCandidate = JSON.parse(releaseOutput);
49
+ assert.strictEqual(releaseCandidate.product, "xoonya", "release candidate product mismatch");
50
+ assert.strictEqual(releaseCandidate.publish_access, "public", "release candidate publish access mismatch");
51
+ assert.strictEqual(releaseCandidate.checklist_count >= 5, true, "release candidate checklist count mismatch");
52
+ verifyReleaseNotes();
53
+
54
+ const conformanceOutput = execFileSync(process.execPath, [
55
+ path.resolve(__dirname, "..", "bin", "xoonya.js"),
56
+ "conformance",
57
+ "--json"
58
+ ], {
59
+ cwd: path.resolve(__dirname, ".."),
60
+ encoding: "utf8"
61
+ });
62
+ const conformanceSummary = JSON.parse(conformanceOutput);
63
+ assert.strictEqual(conformanceSummary.ok, true, "conformance command did not pass");
64
+ assert.strictEqual(conformanceSummary.conformance_count >= 8, true, "conformance vector count too small");
65
+ assert.strictEqual(conformanceSummary.adversarial_count >= 8, true, "adversarial vector count too small");
66
+ assert.strictEqual(
67
+ conformanceSummary.adversarial_reasons.includes("native_hybrid_pq_signature_invalid"),
68
+ true,
69
+ "native hybrid adversarial reason missing"
70
+ );
71
+ assert.deepStrictEqual(
72
+ conformanceSummary.verification_methods,
73
+ [
74
+ "detached-assertion-v1",
75
+ "did-vc-v1",
76
+ "jwt-assertion-v1",
77
+ "legacy-opreturn-v1",
78
+ "partner-proof-envelope-v1",
79
+ "sd-jwt-vc-v1",
80
+ "signed-envelope-v1",
81
+ "xoonya-native-anchored-v1",
82
+ "xoonya-native-hybrid-v1",
83
+ "xoonya-native-sha256-v1",
84
+ "xoonya-native-signed-v1"
85
+ ],
86
+ "conformance methods mismatch"
87
+ );
88
+
89
+ const dryRun = parsePackDryRun();
90
+ assert.strictEqual(dryRun.name, packageJson.name, "npm pack dry-run name mismatch");
91
+ assert.strictEqual(dryRun.version, packageJson.version, "npm pack dry-run version mismatch");
92
+ assert.strictEqual(Array.isArray(dryRun.files), true, "npm pack dry-run file list missing");
93
+ assert.strictEqual(dryRun.files.some((entry) => entry.path === "bin/xoonya.js"), true, "npm pack dry-run missing xoonya cli");
94
+ assert.strictEqual(dryRun.files.some((entry) => entry.path === "bin/xoonya-first-run.js"), true, "npm pack dry-run missing xoonya-first-run");
95
+ assert.strictEqual(dryRun.files.some((entry) => entry.path === "bin/xoonya-review.js"), true, "npm pack dry-run missing xoonya-review");
96
+ assert.strictEqual(dryRun.files.some((entry) => entry.path === "bin/xoonya-release.js"), true, "npm pack dry-run missing xoonya-release");
97
+ assert.strictEqual(dryRun.files.some((entry) => entry.path === "scripts/verify_external_proof_import_gate.js"), true, "npm pack dry-run missing external proof import gate verifier script");
98
+ assert.strictEqual(dryRun.files.some((entry) => entry.path === "scripts/verify_vectors.js"), true, "npm pack dry-run missing conformance verifier script");
99
+ assert.strictEqual(dryRun.files.some((entry) => entry.path === "scripts/verify_reference_python.js"), true, "npm pack dry-run missing Python reference verifier script");
100
+ assert.strictEqual(dryRun.files.some((entry) => entry.path === "scripts/verify_reference_python_crypto.js"), true, "npm pack dry-run missing Python crypto reference verifier script");
101
+ assert.strictEqual(dryRun.files.some((entry) => entry.path === "scripts/verify_reference_promotion_gate.js"), true, "npm pack dry-run missing reference promotion gate verifier script");
102
+ assert.strictEqual(dryRun.files.some((entry) => entry.path === "scripts/verify_reference_rust_scaffold.js"), true, "npm pack dry-run missing Rust reference scaffold verifier script");
103
+ assert.strictEqual(dryRun.files.some((entry) => entry.path === "scripts/verify_native_hybrid_design_gate.js"), true, "npm pack dry-run missing native hybrid verifier script");
104
+ assert.strictEqual(dryRun.files.some((entry) => entry.path === "scripts/verify_verification_services.js"), true, "npm pack dry-run missing verification services verifier script");
105
+ assert.strictEqual(dryRun.files.some((entry) => entry.path === "scripts/verify_all.js"), true, "npm pack dry-run missing package verifier script");
106
+ assert.strictEqual(dryRun.files.some((entry) => entry.path === "vectors/conformance-vectors.json"), true, "npm pack dry-run missing conformance vectors");
107
+ assert.strictEqual(dryRun.files.some((entry) => entry.path === "vectors/adversarial-vectors.json"), true, "npm pack dry-run missing adversarial vectors");
108
+ assert.strictEqual(dryRun.files.some((entry) => entry.path === "vectors/native-atom-vectors.json"), true, "npm pack dry-run missing native atom vectors");
109
+ assert.strictEqual(dryRun.files.some((entry) => entry.path === "README.md"), true, "npm pack dry-run missing README");
110
+ assert.strictEqual(dryRun.files.some((entry) => entry.path === "XOONYA_NATIVE_ATOM_SPEC.md"), true, "npm pack dry-run missing native atom spec");
111
+ assert.strictEqual(dryRun.files.some((entry) => entry.path === "XOONYA_NATIVE_STANDARD_GOVERNANCE.md"), true, "npm pack dry-run missing native governance doc");
112
+ assert.strictEqual(dryRun.files.some((entry) => entry.path === "XNYA_CONFORMANCE_MARK.md"), true, "npm pack dry-run missing XNYA conformance mark doc");
113
+ assert.strictEqual(dryRun.files.some((entry) => entry.path === "XNYA_REFERENCE_IMPLEMENTATIONS.md"), true, "npm pack dry-run missing XNYA reference implementations doc");
114
+ assert.strictEqual(dryRun.files.some((entry) => entry.path === "reference/python/xnya_reference.py"), true, "npm pack dry-run missing Python XNYA candidate reference");
115
+ assert.strictEqual(dryRun.files.some((entry) => entry.path === "reference/python/verify_vectors.py"), true, "npm pack dry-run missing Python XNYA vector verifier");
116
+ assert.strictEqual(dryRun.files.some((entry) => entry.path === "reference/python/requirements-optional.txt"), true, "npm pack dry-run missing Python optional requirements");
117
+ assert.strictEqual(dryRun.files.some((entry) => entry.path === "reference/rust/Cargo.toml"), true, "npm pack dry-run missing Rust candidate Cargo manifest");
118
+ assert.strictEqual(dryRun.files.some((entry) => entry.path === "reference/rust/src/lib.rs"), true, "npm pack dry-run missing Rust candidate source");
119
+ assert.strictEqual(dryRun.files.some((entry) => entry.path === "reference/rust/README.md"), true, "npm pack dry-run missing Rust candidate boundary doc");
120
+ assert.strictEqual(dryRun.files.some((entry) => entry.path === "RELEASE_NOTES.md"), true, "npm pack dry-run missing release notes");
121
+ assert.strictEqual(dryRun.files.some((entry) => entry.path === "START_HERE.md"), true, "npm pack dry-run missing start-here");
122
+ assert.strictEqual(dryRun.files.some((entry) => entry.path === "SERVICE_CONTRACT.md"), true, "npm pack dry-run missing service contract");
123
+ assert.strictEqual(dryRun.files.some((entry) => entry.path === "OPERATOR_START_HERE.md"), false, "npm pack dry-run should not ship operator start-here");
124
+ assert.strictEqual(dryRun.files.some((entry) => entry.path === "OPERATIONS_RUNBOOK.md"), false, "npm pack dry-run should not ship operations runbook");
125
+ assert.strictEqual(dryRun.files.some((entry) => entry.path === "PUBLISH_PLAN.md"), false, "npm pack dry-run should not ship publish plan");
126
+ assert.strictEqual(dryRun.files.length >= 10, true, "npm pack dry-run file count too small");
127
+
128
+ console.log("xoonya verify:release-candidate passed");
129
+ }
130
+
131
+ main();