xoonya 3.0.1 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (246) hide show
  1. package/.env.example +2 -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/OPERATIONS_RUNBOOK.md +50 -0
  10. package/OPERATOR_START_HERE.md +67 -0
  11. package/PARTNER_READY_PATH.md +67 -67
  12. package/PROGRAM_COMPLETE_RELEASE.md +52 -0
  13. package/PROGRAM_STATUS.md +57 -0
  14. package/PUBLIC_DEMO_SCRIPT.md +79 -79
  15. package/PUBLISH_PLAN.md +25 -0
  16. package/README.md +807 -732
  17. package/RELEASE_CHECKLIST.md +16 -0
  18. package/RELEASE_NOTES.md +15 -15
  19. package/SERVICE_CONTRACT.md +207 -195
  20. package/START_HERE.md +159 -150
  21. package/TERMINOLOGY.md +55 -55
  22. package/WHY_XYTARA_XOONYA.md +43 -43
  23. package/XNYA_CONFORMANCE_MARK.md +78 -78
  24. package/XNYA_REFERENCE_IMPLEMENTATIONS.md +157 -157
  25. package/XOONYA_DEFAULT_PATH_MODEL.md +63 -63
  26. package/XOONYA_FOLLOWTHROUGH_TRUTH_MODEL.md +63 -63
  27. package/XOONYA_NATIVE_ATOM_SPEC.md +184 -184
  28. package/XOONYA_NATIVE_PROOF_FORMAT.md +527 -527
  29. package/XOONYA_NATIVE_STANDARD_GOVERNANCE.md +119 -119
  30. package/XOONYA_PROOF_TRUTH_MODEL.md +58 -58
  31. package/bin/xoonya-first-run.js +184 -184
  32. package/bin/xoonya-release.js +1367 -1367
  33. package/bin/xoonya-review.js +70 -70
  34. package/bin/xoonya.js +82 -82
  35. package/examples/integration_boundary_walkthrough.js +37 -37
  36. package/examples/package_quickstart.js +1007 -1007
  37. package/examples/partner_proof_walkthrough.js +68 -68
  38. package/examples/proof_review_walkthrough.js +66 -66
  39. package/examples/review_carried_handoff.js +72 -72
  40. package/index.js +31 -22
  41. package/integrations/PROOF_INTEGRATION_PROCESS.md +45 -45
  42. package/integrations/examples/example-third-party-verifier-registration.record.json +22 -22
  43. package/integrations/registration-record.schema.json +99 -99
  44. package/integrations/registry-snapshot.schema.json +36 -36
  45. package/integrations/registry.js +636 -636
  46. package/integrations/views.js +36 -36
  47. package/lib/adapter_certification_contract.js +90 -0
  48. package/lib/announcement_pack.js +61 -61
  49. package/lib/artifact_distribution_lane_contract.js +54 -54
  50. package/lib/asyncapi_contract.js +135 -135
  51. package/lib/auth_interop_contract.js +69 -69
  52. package/lib/authority_binding_lifecycle_contract.js +182 -0
  53. package/lib/bridge_intelligence.js +102 -102
  54. package/lib/cloudevents_contract.js +79 -79
  55. package/lib/crypto_agility_matrix.js +125 -0
  56. package/lib/default_path_contract.js +380 -380
  57. package/lib/ecosystem_entry.js +64 -64
  58. package/lib/erc8004_proof_lane_contract.js +64 -64
  59. package/lib/event_system_lane_contract.js +76 -76
  60. package/lib/external_proof_import_lane_contract.js +87 -87
  61. package/lib/feature_control_lane_contract.js +54 -54
  62. package/lib/followthrough_truth_contract.js +214 -214
  63. package/lib/framework_lane_contract.js +76 -76
  64. package/lib/governance_disputes_summary.js +36 -36
  65. package/lib/governance_intelligence.js +108 -108
  66. package/lib/identity_interop_contract.js +83 -83
  67. package/lib/integration_matrix_contract.js +81 -81
  68. package/lib/launch_narrative.js +53 -53
  69. package/lib/machine_identity_registry_contract.js +199 -0
  70. package/lib/major_rails_proof_lane_contract.js +87 -87
  71. package/lib/offline_verifiability_recovery_contract.js +155 -0
  72. package/lib/openapi_contract.js +227 -227
  73. package/lib/operational_receipt_contract.js +165 -0
  74. package/lib/outreach_proof.js +71 -71
  75. package/lib/phase_10_closeout_pack.js +45 -45
  76. package/lib/phase_10_completion_pack.js +76 -76
  77. package/lib/phase_10_decision_record_pack.js +54 -54
  78. package/lib/phase_10_decision_resolution_pack.js +53 -53
  79. package/lib/phase_10_demand_signal_adapters_proof_pack.js +74 -74
  80. package/lib/phase_10_ecosystem_backlog_triage_proof_pack.js +74 -74
  81. package/lib/phase_10_freeze_baseline_pack.js +67 -67
  82. package/lib/phase_10_freeze_review_pack.js +64 -64
  83. package/lib/phase_10_gate_pack.js +57 -57
  84. package/lib/phase_10_long_tail_continuity_pack.js +80 -80
  85. package/lib/phase_10_long_tail_ecosystem_pack.js +68 -68
  86. package/lib/phase_10_niche_extension_registry_proof_pack.js +74 -74
  87. package/lib/phase_1_claude_mcp_pack.js +60 -60
  88. package/lib/phase_1_claude_mcp_proof_pack.js +57 -57
  89. package/lib/phase_1_ecosystem_pack.js +51 -51
  90. package/lib/phase_1_openai_codex_pack.js +60 -60
  91. package/lib/phase_1_openai_codex_proof_pack.js +57 -57
  92. package/lib/phase_2_base_proof_pack.js +71 -71
  93. package/lib/phase_2_base_usdc_proof_pack.js +72 -72
  94. package/lib/phase_2_closeout_pack.js +65 -65
  95. package/lib/phase_2_completion_pack.js +113 -113
  96. package/lib/phase_2_decision_record_pack.js +66 -66
  97. package/lib/phase_2_decision_resolution_pack.js +69 -69
  98. package/lib/phase_2_eth_proof_pack.js +70 -70
  99. package/lib/phase_2_evm_base_proof_pack.js +73 -73
  100. package/lib/phase_2_evm_proof_pack.js +71 -71
  101. package/lib/phase_2_flip_preview_pack.js +60 -60
  102. package/lib/phase_2_freeze_review_pack.js +99 -99
  103. package/lib/phase_2_gate_pack.js +77 -77
  104. package/lib/phase_2_payment_rails_pack.js +71 -71
  105. package/lib/phase_2_usdc_proof_pack.js +71 -71
  106. package/lib/phase_3_brc_proof_pack.js +81 -81
  107. package/lib/phase_3_bsv_teranode_proof_pack.js +81 -81
  108. package/lib/phase_3_closeout_pack.js +62 -62
  109. package/lib/phase_3_completion_pack.js +92 -92
  110. package/lib/phase_3_decision_record_pack.js +64 -64
  111. package/lib/phase_3_decision_resolution_pack.js +69 -69
  112. package/lib/phase_3_freeze_baseline_pack.js +67 -67
  113. package/lib/phase_3_freeze_review_pack.js +80 -80
  114. package/lib/phase_3_gate_pack.js +76 -76
  115. package/lib/phase_3_metanet_proof_pack.js +81 -81
  116. package/lib/phase_3_native_bsv_pack.js +89 -89
  117. package/lib/phase_3_native_continuity_pack.js +82 -82
  118. package/lib/phase_4_attestation_proof_pack.js +75 -75
  119. package/lib/phase_4_closeout_pack.js +45 -45
  120. package/lib/phase_4_completion_pack.js +82 -82
  121. package/lib/phase_4_decision_record_pack.js +54 -54
  122. package/lib/phase_4_decision_resolution_pack.js +45 -45
  123. package/lib/phase_4_erc8004_proof_pack.js +76 -76
  124. package/lib/phase_4_freeze_baseline_pack.js +67 -67
  125. package/lib/phase_4_freeze_review_pack.js +68 -68
  126. package/lib/phase_4_gate_pack.js +58 -58
  127. package/lib/phase_4_identity_registry_proof_pack.js +75 -75
  128. package/lib/phase_4_identity_trust_pack.js +73 -73
  129. package/lib/phase_4_trust_continuity_pack.js +86 -86
  130. package/lib/phase_5_antelope_proof_pack.js +76 -76
  131. package/lib/phase_5_closeout_pack.js +44 -44
  132. package/lib/phase_5_completion_pack.js +82 -82
  133. package/lib/phase_5_decision_record_pack.js +54 -54
  134. package/lib/phase_5_decision_resolution_pack.js +45 -45
  135. package/lib/phase_5_freeze_baseline_pack.js +67 -67
  136. package/lib/phase_5_freeze_review_pack.js +68 -68
  137. package/lib/phase_5_gate_pack.js +58 -58
  138. package/lib/phase_5_major_rails_continuity_pack.js +86 -86
  139. package/lib/phase_5_major_rails_pack.js +74 -74
  140. package/lib/phase_5_proton_xpr_proof_pack.js +76 -76
  141. package/lib/phase_5_solana_proof_pack.js +76 -76
  142. package/lib/phase_6_autogen_proof_pack.js +74 -74
  143. package/lib/phase_6_closeout_pack.js +46 -46
  144. package/lib/phase_6_completion_pack.js +77 -77
  145. package/lib/phase_6_decision_record_pack.js +54 -54
  146. package/lib/phase_6_decision_resolution_pack.js +53 -53
  147. package/lib/phase_6_framework_continuity_pack.js +81 -81
  148. package/lib/phase_6_framework_runtime_pack.js +68 -68
  149. package/lib/phase_6_freeze_baseline_pack.js +68 -68
  150. package/lib/phase_6_freeze_review_pack.js +65 -65
  151. package/lib/phase_6_gate_pack.js +59 -59
  152. package/lib/phase_6_langchain_proof_pack.js +74 -74
  153. package/lib/phase_6_langgraph_proof_pack.js +74 -74
  154. package/lib/phase_6_semantic_kernel_proof_pack.js +74 -74
  155. package/lib/phase_7_closeout_pack.js +45 -45
  156. package/lib/phase_7_completion_pack.js +85 -85
  157. package/lib/phase_7_decision_record_pack.js +53 -53
  158. package/lib/phase_7_decision_resolution_pack.js +53 -53
  159. package/lib/phase_7_event_system_continuity_pack.js +89 -89
  160. package/lib/phase_7_event_system_pack.js +76 -76
  161. package/lib/phase_7_freeze_baseline_pack.js +74 -74
  162. package/lib/phase_7_freeze_review_pack.js +65 -65
  163. package/lib/phase_7_gate_pack.js +58 -58
  164. package/lib/phase_7_kafka_proof_pack.js +76 -76
  165. package/lib/phase_7_mqtt_proof_pack.js +76 -76
  166. package/lib/phase_7_nats_proof_pack.js +76 -76
  167. package/lib/phase_7_webhook_event_bus_proof_pack.js +76 -76
  168. package/lib/phase_8_closeout_pack.js +46 -46
  169. package/lib/phase_8_completion_pack.js +82 -82
  170. package/lib/phase_8_decision_record_pack.js +54 -54
  171. package/lib/phase_8_decision_resolution_pack.js +53 -53
  172. package/lib/phase_8_external_receipt_import_proof_pack.js +74 -74
  173. package/lib/phase_8_external_result_import_proof_pack.js +74 -74
  174. package/lib/phase_8_freeze_baseline_pack.js +71 -71
  175. package/lib/phase_8_freeze_review_pack.js +64 -64
  176. package/lib/phase_8_gate_pack.js +58 -58
  177. package/lib/phase_8_proof_bridge_continuity_pack.js +86 -86
  178. package/lib/phase_8_proof_bridges_pack.js +72 -72
  179. package/lib/phase_8_proof_bundle_normalization_proof_pack.js +74 -74
  180. package/lib/phase_9_closeout_pack.js +46 -46
  181. package/lib/phase_9_completion_pack.js +82 -82
  182. package/lib/phase_9_custody_refs_proof_pack.js +74 -74
  183. package/lib/phase_9_decision_record_pack.js +54 -54
  184. package/lib/phase_9_decision_resolution_pack.js +53 -53
  185. package/lib/phase_9_freeze_baseline_pack.js +71 -71
  186. package/lib/phase_9_freeze_review_pack.js +64 -64
  187. package/lib/phase_9_gate_pack.js +58 -58
  188. package/lib/phase_9_operator_accounting_bridges_proof_pack.js +74 -74
  189. package/lib/phase_9_treasury_connectivity_pack.js +72 -72
  190. package/lib/phase_9_treasury_continuity_pack.js +86 -86
  191. package/lib/phase_9_treasury_destinations_proof_pack.js +74 -74
  192. package/lib/phase_program_pack.js +47 -47
  193. package/lib/proof_bridge_lane_contract.js +82 -82
  194. package/lib/proof_truth_contract.js +224 -224
  195. package/lib/provenance_lane_contract.js +54 -54
  196. package/lib/provider_lane_contract.js +67 -67
  197. package/lib/public_surface_policy_contract.js +111 -0
  198. package/lib/publish_plan.js +51 -51
  199. package/lib/release_candidate.js +50 -50
  200. package/lib/release_center.js +1037 -1037
  201. package/lib/release_history.js +206 -206
  202. package/lib/release_manifest.js +114 -114
  203. package/lib/release_pack.js +391 -391
  204. package/lib/result_package_trust_lane_contract.js +74 -74
  205. package/lib/review_intelligence.js +100 -100
  206. package/lib/role_freeze.js +436 -436
  207. package/lib/shared_signals_lane_contract.js +54 -54
  208. package/lib/signed_audit_provenance_contract.js +93 -0
  209. package/lib/telemetry_lane_contract.js +54 -54
  210. package/lib/treasury_proof_lane_contract.js +83 -83
  211. package/lib/trust_intelligence.js +106 -106
  212. package/lib/trust_portability_boundary_contract.js +66 -0
  213. package/lib/trust_portability_pack.js +224 -224
  214. package/lib/verification_service_pack.js +149 -149
  215. package/package.json +97 -95
  216. package/proof_sdk.js +6265 -6265
  217. package/reference/python/README.md +35 -35
  218. package/reference/python/requirements-optional.txt +1 -1
  219. package/reference/python/verify_vectors.py +223 -223
  220. package/reference/python/xnya_reference.py +810 -810
  221. package/reference/rust/Cargo.toml +11 -11
  222. package/reference/rust/README.md +28 -28
  223. package/reference/rust/src/lib.rs +87 -87
  224. package/scripts/registry_cli.js +157 -157
  225. package/scripts/verify_all.js +603 -603
  226. package/scripts/verify_control_plane_contracts.js +34 -0
  227. package/scripts/verify_control_plane_routes.js +70 -0
  228. package/scripts/verify_examples.js +19 -19
  229. package/scripts/verify_external_proof_import_gate.js +84 -84
  230. package/scripts/verify_integrations.js +170 -170
  231. package/scripts/verify_native_hybrid_design_gate.js +114 -114
  232. package/scripts/verify_reference_promotion_gate.js +74 -74
  233. package/scripts/verify_reference_python.js +49 -49
  234. package/scripts/verify_reference_python_crypto.js +87 -87
  235. package/scripts/verify_reference_rust_scaffold.js +50 -50
  236. package/scripts/verify_release_candidate.js +131 -131
  237. package/scripts/verify_service.js +2940 -2940
  238. package/scripts/verify_tooling.js +1251 -1251
  239. package/scripts/verify_trust_portability.js +56 -56
  240. package/scripts/verify_vectors.js +192 -192
  241. package/scripts/verify_verification_services.js +56 -56
  242. package/server.js +4099 -3997
  243. package/vectors/adversarial-vectors.json +552 -552
  244. package/vectors/conformance-vectors.json +446 -446
  245. package/vectors/native-atom-vectors.json +101 -101
  246. package/vectors/native-payload-profile-vectors.json +50 -50
@@ -1,63 +1,63 @@
1
- # xoonya Followthrough Truth Model
2
-
3
- `xoonya` cannot reach a truthful `3.0.0` if its followthrough story is left as scattered bridge, governance, trust-portability, and verification endpoints.
4
-
5
- For the public launch line, it needs one frozen answer to:
6
-
7
- - what proof-side followthrough is publicly claimable
8
- - what trust portability is real and bounded
9
- - what bridge carry is real and bounded
10
- - what governance and dispute posture is real and bounded
11
- - what must remain outside the public `xoonya` claim boundary
12
-
13
- ## Core Rule
14
-
15
- All public followthrough claims must stay inside one bounded proof-side truth:
16
-
17
- `verify -> carry -> review -> govern -> preserve continuity`
18
-
19
- `xoonya` may expose many helper routes.
20
- It may not imply unbounded scope.
21
-
22
- ## Covered Followthrough Families
23
-
24
- The frozen `3.0.0` followthrough truth model covers:
25
-
26
- - verification services
27
- - trust portability
28
- - bridge followthrough
29
- - governance followthrough
30
-
31
- ## What This Model Allows Us To Claim
32
-
33
- We can publicly claim:
34
-
35
- - proof bundles, receipts, and handoffs can be verified and replayed through real public surfaces
36
- - trust can remain portable across the listed identity, delegation, delivery, and settlement-linked review lanes
37
- - bridge carry can preserve operator and compatibility review without becoming the runtime owner
38
- - governance can preserve disputes, signoff, interpretation, and handoff continuity without pretending to be universal legal truth
39
-
40
- ## What This Model Does Not Allow Us To Claim
41
-
42
- We do not publicly claim:
43
-
44
- - unbounded runtime execution truth
45
- - universal external chain truth
46
- - universal custody truth
47
- - universal identity truth
48
- - universal legal or regulatory judgment truth
49
-
50
- ## Machine-Readable Surfaces
51
-
52
- - `GET /v1/followthrough-truth`
53
- - `GET /v1/followthrough-truth/summary`
54
- - `GET /v1/followthrough-truth/:profile_id`
55
-
56
- ## Launch Standard
57
-
58
- For `3.0.0`, this model is considered real only if:
59
-
60
- - each listed profile has callable first-party surfaces
61
- - each listed profile stays attached to proof truth and proof review
62
- - each listed profile has an explicit claim boundary
63
- - no launch copy overstates `xoonya` beyond these frozen followthrough profiles
1
+ # xoonya Followthrough Truth Model
2
+
3
+ `xoonya` cannot reach a truthful `3.0.0` if its followthrough story is left as scattered bridge, governance, trust-portability, and verification endpoints.
4
+
5
+ For the public launch line, it needs one frozen answer to:
6
+
7
+ - what proof-side followthrough is publicly claimable
8
+ - what trust portability is real and bounded
9
+ - what bridge carry is real and bounded
10
+ - what governance and dispute posture is real and bounded
11
+ - what must remain outside the public `xoonya` claim boundary
12
+
13
+ ## Core Rule
14
+
15
+ All public followthrough claims must stay inside one bounded proof-side truth:
16
+
17
+ `verify -> carry -> review -> govern -> preserve continuity`
18
+
19
+ `xoonya` may expose many helper routes.
20
+ It may not imply unbounded scope.
21
+
22
+ ## Covered Followthrough Families
23
+
24
+ The frozen `3.0.0` followthrough truth model covers:
25
+
26
+ - verification services
27
+ - trust portability
28
+ - bridge followthrough
29
+ - governance followthrough
30
+
31
+ ## What This Model Allows Us To Claim
32
+
33
+ We can publicly claim:
34
+
35
+ - proof bundles, receipts, and handoffs can be verified and replayed through real public surfaces
36
+ - trust can remain portable across the listed identity, delegation, delivery, and settlement-linked review lanes
37
+ - bridge carry can preserve operator and compatibility review without becoming the runtime owner
38
+ - governance can preserve disputes, signoff, interpretation, and handoff continuity without pretending to be universal legal truth
39
+
40
+ ## What This Model Does Not Allow Us To Claim
41
+
42
+ We do not publicly claim:
43
+
44
+ - unbounded runtime execution truth
45
+ - universal external chain truth
46
+ - universal custody truth
47
+ - universal identity truth
48
+ - universal legal or regulatory judgment truth
49
+
50
+ ## Machine-Readable Surfaces
51
+
52
+ - `GET /v1/followthrough-truth`
53
+ - `GET /v1/followthrough-truth/summary`
54
+ - `GET /v1/followthrough-truth/:profile_id`
55
+
56
+ ## Launch Standard
57
+
58
+ For `3.0.0`, this model is considered real only if:
59
+
60
+ - each listed profile has callable first-party surfaces
61
+ - each listed profile stays attached to proof truth and proof review
62
+ - each listed profile has an explicit claim boundary
63
+ - no launch copy overstates `xoonya` beyond these frozen followthrough profiles
@@ -1,184 +1,184 @@
1
- # xoonya Native Atom Specification
2
-
3
- Status: formal spec pack active
4
-
5
- Spec version: `xoonya-native-atom-spec/v1`
6
-
7
- ## Decision
8
-
9
- The canonical xoonya Native atom magic is `XNYA`.
10
-
11
- No other magic value is part of the xoonya Native atom standard. Implementations that use a different discriminator are separate formats and must not claim xoonya Native atom compatibility.
12
-
13
- `XNYA` is four bytes, not three, because a fixed 4-byte ASCII discriminator is easier to index, validate, debug, and defend than a shorter clever header.
14
-
15
- ## Repository Strategy
16
-
17
- The native atom spec ships inside the `xoonya` package first.
18
-
19
- This is intentional:
20
-
21
- - there is one public website and one xoonya package surface today
22
- - the verifier implementation and conformance vectors live beside the spec
23
- - builders should not need another repo to understand the native proof path
24
-
25
- A separate standards repo can be created later if external adoption, independent governance, or standards-body work needs it. Until then, separate extraction would add coordination overhead before the standard has enough external pressure to justify it.
26
-
27
- ## Atom Purpose
28
-
29
- The xoonya Native atom is a fixed-size commitment record.
30
-
31
- It answers:
32
-
33
- > Which typed machine identity committed to which payload hash under which frozen xoonya Native version line?
34
-
35
- It does not contain:
36
-
37
- - signatures
38
- - timestamps
39
- - prices
40
- - balances
41
- - settlement references
42
- - custody references
43
- - chain identifiers
44
- - runtime metadata
45
- - policy decisions
46
- - governance outcomes
47
-
48
- Those belong in canonical payloads, proof envelopes, profiles, and runtime consumers.
49
-
50
- ## Version 1
51
-
52
- Atom version: `xoonya-native-atom/v1`
53
-
54
- Fixed size: `58` bytes
55
-
56
- Purpose: classical minimal identity and payload commitment.
57
-
58
- Layout:
59
-
60
- ```text
61
- MAGIC(4) | VERSION(1) | TYPE(1) | AGENT_ID(20) | PAYLOAD_HASH(32)
62
- ```
63
-
64
- Fields:
65
-
66
- | Field | Size | Rule |
67
- | --- | ---: | --- |
68
- | `MAGIC` | 4 | ASCII `XNYA` |
69
- | `VERSION` | 1 | `0x01` |
70
- | `TYPE` | 1 | `0x01`, `0x02`, or `0x03` |
71
- | `AGENT_ID` | 20 | `HASH160("xoonya:agent:v1:" || identity_material)` |
72
- | `PAYLOAD_HASH` | 32 | `SHA256("xoonya:payload:v1:" || payload_bytes)` or all-zero sentinel when absent |
73
-
74
- ## Version 2
75
-
76
- Atom version: `xoonya-native-atom/v2`
77
-
78
- Fixed size: `70` bytes
79
-
80
- Purpose: PQ-horizon identity commitment with 32-byte agent digest.
81
-
82
- Layout:
83
-
84
- ```text
85
- MAGIC(4) | VERSION(1) | TYPE(1) | AGENT_ID(32) | PAYLOAD_HASH(32)
86
- ```
87
-
88
- Fields:
89
-
90
- | Field | Size | Rule |
91
- | --- | ---: | --- |
92
- | `MAGIC` | 4 | ASCII `XNYA` |
93
- | `VERSION` | 1 | `0x02` |
94
- | `TYPE` | 1 | `0x01`, `0x02`, or `0x03` |
95
- | `AGENT_ID` | 32 | `SHA256("xoonya:agent:v2:" || identity_material)` |
96
- | `PAYLOAD_HASH` | 32 | `SHA256("xoonya:payload:v2:" || payload_bytes)` or all-zero sentinel when absent |
97
-
98
- ## Record Types
99
-
100
- | Code | Name | Meaning |
101
- | --- | --- | --- |
102
- | `0x01` | register | registration or first commitment |
103
- | `0x02` | update | update or lifecycle continuation |
104
- | `0x03` | revoke | revoke or lifecycle close |
105
-
106
- The atom does not define lifecycle policy. Profiles define evidence semantics above the atom.
107
-
108
- ## Identity Material
109
-
110
- `identity_material = type_prefix || raw_identity_bytes`
111
-
112
- Initial type registry:
113
-
114
- | Prefix | ID | Canonical Material |
115
- | --- | --- | --- |
116
- | `0x01` | `secp256k1-public-key` | compressed SEC1 public key |
117
- | `0x02` | `device-identifier` | raw device identifier bytes |
118
- | `0x03` | `did-string` | UTF-8 DID string, no BOM, no normalization |
119
- | `0x04` | `opaque-agent-key` | opaque agent key bytes |
120
- | `0x05` | `dilithium-public-key` | suite-defined PQ public key bytes |
121
- | `0x06` | `falcon-public-key` | suite-defined PQ public key bytes |
122
- | `0x07` | `sphincs-plus-public-key` | suite-defined PQ public key bytes |
123
-
124
- Implementations must not lowercase, normalize, trim, parse, or reinterpret `raw_identity_bytes` after canonicalization by the type-specific producer.
125
-
126
- ## Payload Sentinel Rule
127
-
128
- If there is no payload, `PAYLOAD_HASH` is exactly 32 zero bytes.
129
-
130
- If payload bytes are present, implementations must compute the domain-separated payload hash and must not accept a present payload as the all-zero sentinel.
131
-
132
- ## Validation Rules
133
-
134
- Validators must reject:
135
-
136
- - non-hex display input
137
- - byte length other than 58 or 70
138
- - bad magic
139
- - version/length mismatch
140
- - unsupported type
141
- - unsupported identity type prefix when identity material is supplied
142
- - agent ID mismatch when identity material is supplied
143
- - payload hash mismatch when payload bytes are supplied
144
- - ambiguous all-zero payload hash for a present payload
145
-
146
- Validation must be deterministic: the same bytes produce the same accept/reject reason.
147
-
148
- ## Deterministic Error Codes
149
-
150
- Validators should return stable machine-readable error codes alongside any human-readable reason.
151
-
152
- Current reject codes:
153
-
154
- | Code | Meaning |
155
- | --- | --- |
156
- | `atom_hex_not_hex` | Input is not hex display form. |
157
- | `atom_unsupported_length` | Byte length is not a supported XNYA atom length. |
158
- | `atom_bad_magic` | Magic is not `XNYA`. |
159
- | `atom_unsupported_record_type` | Record type is not `0x01`, `0x02`, or `0x03`. |
160
- | `atom_version_length_mismatch` | Version byte and atom length do not match. |
161
- | `identity_unsupported_type_prefix` | Supplied identity material uses an unregistered prefix. |
162
- | `identity_missing_raw_bytes` | Supplied identity material contains only the type prefix. |
163
- | `agent_id_mismatch` | Supplied identity material does not derive the atom agent id. |
164
- | `payload_hash_mismatch` | Supplied payload bytes do not derive the atom payload hash. |
165
-
166
- Error-code stability matters because third-party validators and agents should be able to compare failures without parsing prose.
167
-
168
- ## Version Freeze Rule
169
-
170
- Once a version line is published:
171
-
172
- - field order must not change
173
- - field sizes must not change
174
- - hash derivation must not change
175
- - validation semantics must not change
176
- - reserved behavior must not be silently introduced
177
-
178
- Any breaking change requires a new version line.
179
-
180
- ## V3 Contingency
181
-
182
- `xoonya-native-atom/v3-contingency` is not an implementation target.
183
-
184
- It is reserved for a material digest-family shift, such as a practical break in SHA-256 assumptions. If it is ever needed, it should remain fixed length, deterministic, and semantic-free.
1
+ # xoonya Native Atom Specification
2
+
3
+ Status: formal spec pack active
4
+
5
+ Spec version: `xoonya-native-atom-spec/v1`
6
+
7
+ ## Decision
8
+
9
+ The canonical xoonya Native atom magic is `XNYA`.
10
+
11
+ No other magic value is part of the xoonya Native atom standard. Implementations that use a different discriminator are separate formats and must not claim xoonya Native atom compatibility.
12
+
13
+ `XNYA` is four bytes, not three, because a fixed 4-byte ASCII discriminator is easier to index, validate, debug, and defend than a shorter clever header.
14
+
15
+ ## Repository Strategy
16
+
17
+ The native atom spec ships inside the `xoonya` package first.
18
+
19
+ This is intentional:
20
+
21
+ - there is one public website and one xoonya package surface today
22
+ - the verifier implementation and conformance vectors live beside the spec
23
+ - builders should not need another repo to understand the native proof path
24
+
25
+ A separate standards repo can be created later if external adoption, independent governance, or standards-body work needs it. Until then, separate extraction would add coordination overhead before the standard has enough external pressure to justify it.
26
+
27
+ ## Atom Purpose
28
+
29
+ The xoonya Native atom is a fixed-size commitment record.
30
+
31
+ It answers:
32
+
33
+ > Which typed machine identity committed to which payload hash under which frozen xoonya Native version line?
34
+
35
+ It does not contain:
36
+
37
+ - signatures
38
+ - timestamps
39
+ - prices
40
+ - balances
41
+ - settlement references
42
+ - custody references
43
+ - chain identifiers
44
+ - runtime metadata
45
+ - policy decisions
46
+ - governance outcomes
47
+
48
+ Those belong in canonical payloads, proof envelopes, profiles, and runtime consumers.
49
+
50
+ ## Version 1
51
+
52
+ Atom version: `xoonya-native-atom/v1`
53
+
54
+ Fixed size: `58` bytes
55
+
56
+ Purpose: classical minimal identity and payload commitment.
57
+
58
+ Layout:
59
+
60
+ ```text
61
+ MAGIC(4) | VERSION(1) | TYPE(1) | AGENT_ID(20) | PAYLOAD_HASH(32)
62
+ ```
63
+
64
+ Fields:
65
+
66
+ | Field | Size | Rule |
67
+ | --- | ---: | --- |
68
+ | `MAGIC` | 4 | ASCII `XNYA` |
69
+ | `VERSION` | 1 | `0x01` |
70
+ | `TYPE` | 1 | `0x01`, `0x02`, or `0x03` |
71
+ | `AGENT_ID` | 20 | `HASH160("xoonya:agent:v1:" || identity_material)` |
72
+ | `PAYLOAD_HASH` | 32 | `SHA256("xoonya:payload:v1:" || payload_bytes)` or all-zero sentinel when absent |
73
+
74
+ ## Version 2
75
+
76
+ Atom version: `xoonya-native-atom/v2`
77
+
78
+ Fixed size: `70` bytes
79
+
80
+ Purpose: PQ-horizon identity commitment with 32-byte agent digest.
81
+
82
+ Layout:
83
+
84
+ ```text
85
+ MAGIC(4) | VERSION(1) | TYPE(1) | AGENT_ID(32) | PAYLOAD_HASH(32)
86
+ ```
87
+
88
+ Fields:
89
+
90
+ | Field | Size | Rule |
91
+ | --- | ---: | --- |
92
+ | `MAGIC` | 4 | ASCII `XNYA` |
93
+ | `VERSION` | 1 | `0x02` |
94
+ | `TYPE` | 1 | `0x01`, `0x02`, or `0x03` |
95
+ | `AGENT_ID` | 32 | `SHA256("xoonya:agent:v2:" || identity_material)` |
96
+ | `PAYLOAD_HASH` | 32 | `SHA256("xoonya:payload:v2:" || payload_bytes)` or all-zero sentinel when absent |
97
+
98
+ ## Record Types
99
+
100
+ | Code | Name | Meaning |
101
+ | --- | --- | --- |
102
+ | `0x01` | register | registration or first commitment |
103
+ | `0x02` | update | update or lifecycle continuation |
104
+ | `0x03` | revoke | revoke or lifecycle close |
105
+
106
+ The atom does not define lifecycle policy. Profiles define evidence semantics above the atom.
107
+
108
+ ## Identity Material
109
+
110
+ `identity_material = type_prefix || raw_identity_bytes`
111
+
112
+ Initial type registry:
113
+
114
+ | Prefix | ID | Canonical Material |
115
+ | --- | --- | --- |
116
+ | `0x01` | `secp256k1-public-key` | compressed SEC1 public key |
117
+ | `0x02` | `device-identifier` | raw device identifier bytes |
118
+ | `0x03` | `did-string` | UTF-8 DID string, no BOM, no normalization |
119
+ | `0x04` | `opaque-agent-key` | opaque agent key bytes |
120
+ | `0x05` | `dilithium-public-key` | suite-defined PQ public key bytes |
121
+ | `0x06` | `falcon-public-key` | suite-defined PQ public key bytes |
122
+ | `0x07` | `sphincs-plus-public-key` | suite-defined PQ public key bytes |
123
+
124
+ Implementations must not lowercase, normalize, trim, parse, or reinterpret `raw_identity_bytes` after canonicalization by the type-specific producer.
125
+
126
+ ## Payload Sentinel Rule
127
+
128
+ If there is no payload, `PAYLOAD_HASH` is exactly 32 zero bytes.
129
+
130
+ If payload bytes are present, implementations must compute the domain-separated payload hash and must not accept a present payload as the all-zero sentinel.
131
+
132
+ ## Validation Rules
133
+
134
+ Validators must reject:
135
+
136
+ - non-hex display input
137
+ - byte length other than 58 or 70
138
+ - bad magic
139
+ - version/length mismatch
140
+ - unsupported type
141
+ - unsupported identity type prefix when identity material is supplied
142
+ - agent ID mismatch when identity material is supplied
143
+ - payload hash mismatch when payload bytes are supplied
144
+ - ambiguous all-zero payload hash for a present payload
145
+
146
+ Validation must be deterministic: the same bytes produce the same accept/reject reason.
147
+
148
+ ## Deterministic Error Codes
149
+
150
+ Validators should return stable machine-readable error codes alongside any human-readable reason.
151
+
152
+ Current reject codes:
153
+
154
+ | Code | Meaning |
155
+ | --- | --- |
156
+ | `atom_hex_not_hex` | Input is not hex display form. |
157
+ | `atom_unsupported_length` | Byte length is not a supported XNYA atom length. |
158
+ | `atom_bad_magic` | Magic is not `XNYA`. |
159
+ | `atom_unsupported_record_type` | Record type is not `0x01`, `0x02`, or `0x03`. |
160
+ | `atom_version_length_mismatch` | Version byte and atom length do not match. |
161
+ | `identity_unsupported_type_prefix` | Supplied identity material uses an unregistered prefix. |
162
+ | `identity_missing_raw_bytes` | Supplied identity material contains only the type prefix. |
163
+ | `agent_id_mismatch` | Supplied identity material does not derive the atom agent id. |
164
+ | `payload_hash_mismatch` | Supplied payload bytes do not derive the atom payload hash. |
165
+
166
+ Error-code stability matters because third-party validators and agents should be able to compare failures without parsing prose.
167
+
168
+ ## Version Freeze Rule
169
+
170
+ Once a version line is published:
171
+
172
+ - field order must not change
173
+ - field sizes must not change
174
+ - hash derivation must not change
175
+ - validation semantics must not change
176
+ - reserved behavior must not be silently introduced
177
+
178
+ Any breaking change requires a new version line.
179
+
180
+ ## V3 Contingency
181
+
182
+ `xoonya-native-atom/v3-contingency` is not an implementation target.
183
+
184
+ It is reserved for a material digest-family shift, such as a practical break in SHA-256 assumptions. If it is ever needed, it should remain fixed length, deterministic, and semantic-free.