xoonya 2.11.0 → 2.12.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/RELEASE_NOTES.md CHANGED
@@ -1,11 +1,12 @@
1
- # xoonya 2.11.0 Release Notes
1
+ `xoonya` 2.12.1 is the proof-release truth patch line for aligned npm, GitHub, website, code, documentation, and public-copy surfaces.
2
2
 
3
- `xoonya` 2.11.0 is the lowercase-brand-convention line for aligned npm, GitHub, website, code, documentation, and public-copy surfaces.
3
+ This patch keeps the synchronized public-release bundle intact and refreshes the packaged release notes so the published tarball follows the normal release-note format and stays easy to scan later.
4
4
 
5
5
  Highlights:
6
6
 
7
7
  - normalizes visible `xoonya`, `xytara`, and `naxytra` product references to the lowercase convention across package docs, native-standard copy, CLI release surfaces, server routes, and verifier call sites
8
- - preserves XNYA-compatible conformance, native reference implementation boundaries, external proof import boundaries, and the PQ/hybrid design gate
8
+ - preserves XNYA-compatible conformance, native reference implementation boundaries, external proof import boundaries, trust-portability surfaces, and the PQ/hybrid design gate
9
+ - keeps verification services, trust-portability surfaces, and reference-implementation posture aligned with the same synchronized public release line
9
10
  - keeps `RELEASE_NOTES.md` scoped to the current release so npm and GitHub release notes stay clean
10
11
  - keeps the canonical `https://naxytra.com/xoonya` public product URL and single naxytra website positioning intact
11
12
  - verifies the lowercase convention through the release candidate, full package verifier, umbrella pre-deploy gates, and clean-consumer release smoke
package/index.js CHANGED
@@ -3,6 +3,8 @@
3
3
  module.exports = {
4
4
  ...require("./proof_sdk"),
5
5
  ...require("./integrations/registry"),
6
+ ...require("./lib/verification_service_pack"),
7
+ ...require("./lib/trust_portability_pack"),
6
8
  ...require("./lib/release_pack"),
7
9
  ...require("./lib/release_manifest"),
8
10
  ...require("./lib/release_center"),
@@ -10,6 +10,17 @@ function buildReleaseHistory() {
10
10
  current_version: packageJson.version,
11
11
  release_track: "public_release",
12
12
  history: [
13
+ {
14
+ version: "2.12.1",
15
+ channel: "public_release",
16
+ maturity_posture: "release_note_patch",
17
+ headline: "release-note patch for the 2.12.0 proof-release truth line",
18
+ milestone_refs: [
19
+ "release_notes_format_refresh",
20
+ "packaged_tarball_note_alignment",
21
+ "synchronized_public_release_history"
22
+ ]
23
+ },
13
24
  {
14
25
  version: "2.11.0",
15
26
  channel: "public_release",
@@ -0,0 +1,224 @@
1
+ "use strict";
2
+
3
+ const packageJson = require("../package.json");
4
+ const {
5
+ buildAuthInteropContract,
6
+ summarizeAuthInteropContract
7
+ } = require("./auth_interop_contract");
8
+ const {
9
+ buildIdentityInteropContract,
10
+ summarizeIdentityInteropContract
11
+ } = require("./identity_interop_contract");
12
+ const {
13
+ buildResultPackageTrustLanePack,
14
+ summarizeResultPackageTrustLanePack
15
+ } = require("./result_package_trust_lane_contract");
16
+ const {
17
+ buildPhase4TrustContinuityPack,
18
+ summarizePhase4TrustContinuityPack
19
+ } = require("./phase_4_trust_continuity_pack");
20
+ const {
21
+ buildPhase4IdentityRegistryProofPack,
22
+ summarizePhase4IdentityRegistryProofPack
23
+ } = require("./phase_4_identity_registry_proof_pack");
24
+ const {
25
+ buildVerificationServicesPack,
26
+ summarizeVerificationServicesPack
27
+ } = require("./verification_service_pack");
28
+
29
+ function buildTrustPortabilityPack() {
30
+ const authInterop = buildAuthInteropContract();
31
+ const authInteropSummary = summarizeAuthInteropContract();
32
+ const identityInterop = buildIdentityInteropContract();
33
+ const identityInteropSummary = summarizeIdentityInteropContract();
34
+ const resultPackageTrust = buildResultPackageTrustLanePack();
35
+ const resultPackageTrustSummary = summarizeResultPackageTrustLanePack();
36
+ const phase4TrustContinuity = buildPhase4TrustContinuityPack();
37
+ const phase4TrustContinuitySummary = summarizePhase4TrustContinuityPack();
38
+ const phase4IdentityRegistry = buildPhase4IdentityRegistryProofPack();
39
+ const phase4IdentityRegistrySummary = summarizePhase4IdentityRegistryProofPack();
40
+ const verificationServices = buildVerificationServicesPack();
41
+ const verificationServicesSummary = summarizeVerificationServicesPack();
42
+ const servicesById = Object.fromEntries(
43
+ (verificationServices.verification_services || []).map((entry) => [entry.service_id, entry])
44
+ );
45
+
46
+ const profiles = [
47
+ {
48
+ profile_id: "agent_identity_portability",
49
+ profile_label: "agent identity portability",
50
+ portability_axis: "agent_identity",
51
+ claim_status: "bounded_live",
52
+ portability_state: "identity_attestation_registry_and_bundle_linkage_present",
53
+ callable_surfaces: [
54
+ "/v1/identity-interop",
55
+ "/v1/phases/phase-4/identity-registry/proof/summary",
56
+ "/v1/receipts/verify"
57
+ ],
58
+ supporting_surfaces: [
59
+ "/v1/identity-interop/summary",
60
+ "/v1/phases/phase-4/trust-continuity/summary",
61
+ "/v1/proof-center/verification-services/summary"
62
+ ],
63
+ supporting_counts: {
64
+ identity_interop_profile_count: identityInteropSummary.profile_count,
65
+ identity_registry_resolution_mode_count: phase4IdentityRegistrySummary.resolution_mode_count,
66
+ verification_service_count: verificationServicesSummary.service_count
67
+ },
68
+ expected_portability_outcome: "identity refs remain reviewable and portable across proof bundles, registry proof, and carried receipts",
69
+ claim_boundary: "identity_portability_binds_reviewable_identity_refs_and_registry_resolution_without_becoming_global_login_or_external_issuer_truth"
70
+ },
71
+ {
72
+ profile_id: "delegation_capability_portability",
73
+ profile_label: "delegation/capability portability",
74
+ portability_axis: "delegation_capabilities",
75
+ claim_status: "bounded_live",
76
+ portability_state: "auth_interop_bridge_handoff_and_review_followthrough_present",
77
+ callable_surfaces: [
78
+ "/v1/auth-profiles",
79
+ "/v1/proof-center/bridge/economic-handoff",
80
+ "/v1/proof-center/result-package-handoff/review/handoff-intake"
81
+ ],
82
+ supporting_surfaces: [
83
+ "/v1/auth-profiles/summary",
84
+ "/v1/proof-center/bridge/summary",
85
+ "/v1/result-package-trust/summary"
86
+ ],
87
+ supporting_counts: {
88
+ auth_interop_profile_count: authInteropSummary.profile_count,
89
+ bridge_flow_count: Array.isArray(resultPackageTrust.first_run_flows) ? resultPackageTrust.first_run_flows.length : 0,
90
+ delivery_verify_callable_surface_count: Array.isArray(servicesById.delivery_verify && servicesById.delivery_verify.callable_surfaces)
91
+ ? servicesById.delivery_verify.callable_surfaces.length
92
+ : 0
93
+ },
94
+ expected_portability_outcome: "delegated capability context can cross runtime-to-proof handoff while staying reviewable and bounded",
95
+ claim_boundary: "delegation_portability_preserves_handoff_capability_context_without_becoming_session_authority_or_runtime_execution_truth"
96
+ },
97
+ {
98
+ profile_id: "delivery_history_portability",
99
+ profile_label: "delivery history portability",
100
+ portability_axis: "delivery_history",
101
+ claim_status: "bounded_live",
102
+ portability_state: "result_package_delivery_review_and_followthrough_present",
103
+ callable_surfaces: [
104
+ "/v1/result-package-trust",
105
+ "/v1/proof-center/result-package-handoff/review/summary",
106
+ "/v1/proof-center/transaction-handoff/run"
107
+ ],
108
+ supporting_surfaces: [
109
+ "/v1/result-package-trust/summary",
110
+ "/v1/phases/phase-4/trust-continuity/summary",
111
+ "/v1/proof-center/verification-services/summary"
112
+ ],
113
+ supporting_counts: {
114
+ proof_readiness_state: resultPackageTrustSummary.proof_readiness_state,
115
+ trust_continuity_signal_count: phase4TrustContinuitySummary.signal_count,
116
+ delivery_verify_callable_surface_count: Array.isArray(servicesById.delivery_verify && servicesById.delivery_verify.callable_surfaces)
117
+ ? servicesById.delivery_verify.callable_surfaces.length
118
+ : 0
119
+ },
120
+ expected_portability_outcome: "delivery history stays inspectable through carried result packages, handoff review, and delivery verification surfaces",
121
+ claim_boundary: "delivery_history_portability_preserves_reviewable_result_package_continuity_not_runtime_success_truth_beyond_carried_evidence"
122
+ },
123
+ {
124
+ profile_id: "settlement_linked_trust_portability",
125
+ profile_label: "settlement-linked trust portability",
126
+ portability_axis: "settlement_linked_trust",
127
+ claim_status: "bounded_live",
128
+ portability_state: "bridge_anchor_and_settlement_verification_followthrough_present",
129
+ callable_surfaces: [
130
+ "/v1/proof-center/bridge/validator-verify",
131
+ "/v1/proof-center/bridge/economic-handoff",
132
+ "/v1/proof-center/native-anchor-profile/summary"
133
+ ],
134
+ supporting_surfaces: [
135
+ "/v1/proof-center/bridge/summary",
136
+ "/v1/proof-center/verification-services/summary",
137
+ "/v1/phases/phase-4/trust-continuity/summary"
138
+ ],
139
+ supporting_counts: {
140
+ settlement_verify_callable_surface_count: Array.isArray(servicesById.settlement_verify && servicesById.settlement_verify.callable_surfaces)
141
+ ? servicesById.settlement_verify.callable_surfaces.length
142
+ : 0,
143
+ anchor_verify_callable_surface_count: Array.isArray(servicesById.anchor_finality_verify && servicesById.anchor_finality_verify.callable_surfaces)
144
+ ? servicesById.anchor_finality_verify.callable_surfaces.length
145
+ : 0,
146
+ phase_4_review_mode_count: phase4TrustContinuitySummary.review_mode_count
147
+ },
148
+ expected_portability_outcome: "trust continuity can remain attached to settlement evidence, anchor context, and carried economic handoff without overclaiming chain truth",
149
+ claim_boundary: "settlement_linked_trust_portability_binds_reviewable_settlement_and_anchor_context_without_claiming_external_chain_or_custody_truth"
150
+ }
151
+ ];
152
+
153
+ return {
154
+ ok: true,
155
+ product: packageJson.name,
156
+ category: "xoonya-trust-portability-pack",
157
+ pack_version: "xoonya-trust-portability-pack-v1",
158
+ doctrine: "cross_venue_identity_delegation_delivery_and_settlement_linked_trust_portability",
159
+ portability_profiles: profiles,
160
+ supporting_contracts: {
161
+ auth_interop_summary: authInteropSummary,
162
+ identity_interop_summary: identityInteropSummary,
163
+ result_package_trust_summary: resultPackageTrustSummary,
164
+ phase_4_trust_continuity_summary: phase4TrustContinuitySummary,
165
+ phase_4_identity_registry_proof_summary: phase4IdentityRegistrySummary,
166
+ verification_service_summary: verificationServicesSummary
167
+ },
168
+ first_run_flow: {
169
+ flow_ref: "cross_venue_trust_portability_review",
170
+ recommended_reason: "show that identity, delegation, delivery history, and settlement-linked trust remain portable across proof-facing surfaces",
171
+ http_sequence: [
172
+ "/v1/proof-center/trust-portability/summary",
173
+ "/v1/identity-interop/summary",
174
+ "/v1/result-package-trust/summary",
175
+ "/v1/proof-center/verification-services/summary"
176
+ ]
177
+ },
178
+ public_claim_boundaries: [
179
+ "trust_portability_is_reviewable_followthrough_not_global_identity_or_login_truth",
180
+ "delegation_portability_stays_bound_to_listed_auth_and_handoff_surfaces",
181
+ "delivery_history_portability_stays_bound_to_carried_result_package_and_review_surfaces",
182
+ "settlement_linked_trust_portability_does_not_claim_external_chain_or_custody_truth"
183
+ ],
184
+ linked_surfaces: {
185
+ auth_interop_ref: "/v1/auth-profiles",
186
+ auth_interop_summary_ref: "/v1/auth-profiles/summary",
187
+ identity_interop_ref: "/v1/identity-interop",
188
+ identity_interop_summary_ref: "/v1/identity-interop/summary",
189
+ result_package_trust_ref: "/v1/result-package-trust",
190
+ result_package_trust_summary_ref: "/v1/result-package-trust/summary",
191
+ phase_4_trust_continuity_ref: "/v1/phases/phase-4/trust-continuity",
192
+ phase_4_trust_continuity_summary_ref: "/v1/phases/phase-4/trust-continuity/summary",
193
+ phase_4_identity_registry_proof_ref: "/v1/phases/phase-4/identity-registry/proof",
194
+ phase_4_identity_registry_proof_summary_ref: "/v1/phases/phase-4/identity-registry/proof/summary",
195
+ verification_services_ref: "/v1/proof-center/verification-services",
196
+ verification_services_summary_ref: "/v1/proof-center/verification-services/summary"
197
+ }
198
+ };
199
+ }
200
+
201
+ function getTrustPortabilityProfile(profileId) {
202
+ return buildTrustPortabilityPack().portability_profiles.find((entry) => entry.profile_id === profileId) || null;
203
+ }
204
+
205
+ function summarizeTrustPortabilityPack() {
206
+ const pack = buildTrustPortabilityPack();
207
+ return {
208
+ ok: true,
209
+ product: pack.product,
210
+ category: "xoonya-trust-portability-summary",
211
+ summary_version: "xoonya-trust-portability-summary-v1",
212
+ profile_count: pack.portability_profiles.length,
213
+ bounded_live_profile_count: pack.portability_profiles.filter((entry) => entry.claim_status === "bounded_live").length,
214
+ callable_profile_count: pack.portability_profiles.filter((entry) => Array.isArray(entry.callable_surfaces) && entry.callable_surfaces.length >= 2).length,
215
+ portability_axis_count: Array.from(new Set(pack.portability_profiles.map((entry) => entry.portability_axis))).length,
216
+ linked_surfaces: pack.linked_surfaces
217
+ };
218
+ }
219
+
220
+ module.exports = {
221
+ buildTrustPortabilityPack,
222
+ getTrustPortabilityProfile,
223
+ summarizeTrustPortabilityPack
224
+ };
@@ -0,0 +1,149 @@
1
+ "use strict";
2
+
3
+ const packageJson = require("../package.json");
4
+ const proofSdk = require("../proof_sdk");
5
+
6
+ function buildVerificationServicesPack() {
7
+ const proofCenter = proofSdk.summarizeDefaultProofCenter();
8
+ const resultPackageCenter = proofSdk.summarizeInteractionResultPackageHandoffCenter();
9
+ const transactionHandoff = proofSdk.summarizeTransactionProofHandoffCenter();
10
+ const interactionHandoff = proofSdk.summarizeInteractionSpineProofHandoffCenter();
11
+ const governance = proofSdk.summarizeGovernanceCenter();
12
+ const nativeAnchor = proofSdk.summarizexoonyaNativeAnchorProfile();
13
+ const bridge = proofSdk.summarizeBridgeCenter();
14
+
15
+ const services = [
16
+ {
17
+ service_id: "bundle_verify",
18
+ service_label: "bundle verify",
19
+ verification_kind: "bundle_verify",
20
+ claim_status: "live",
21
+ callable_surfaces: ["/v1/proof-bundles/verify", "/v1/proof-center/default-loops/run"],
22
+ supporting_surfaces: ["/v1/proof-center/summary", "/v1/proof-center/default-loops/summary"],
23
+ verification_methods: proofCenter.verification_methods,
24
+ claim_boundary: "verifies_xoonya_bundle_contract_and_registered_methods_not_external_issuer_truth"
25
+ },
26
+ {
27
+ service_id: "delivery_verify",
28
+ service_label: "delivery verify",
29
+ verification_kind: "delivery_verify",
30
+ claim_status: "bounded_live",
31
+ callable_surfaces: [
32
+ "/v1/proof-center/transaction-handoff/run",
33
+ "/v1/proof-center/interaction-spine-handoff/run",
34
+ "/v1/proof-center/result-package-handoff/review/summary"
35
+ ],
36
+ supporting_surfaces: [
37
+ "/v1/proof-center/transaction-handoff/summary",
38
+ "/v1/proof-center/interaction-spine-handoff/summary",
39
+ "/v1/proof-center/result-package-handoff/summary"
40
+ ],
41
+ supporting_counts: {
42
+ transaction_source_count: transactionHandoff.transaction_handoff_source_count,
43
+ interaction_source_count: interactionHandoff.interaction_spine_source_count,
44
+ result_package_source_count: resultPackageCenter.result_package_source_count
45
+ },
46
+ claim_boundary: "delivery_verification_confirms_bundle_continuity_and_handoff_shape_not_runtime_success_beyond_carried_evidence"
47
+ },
48
+ {
49
+ service_id: "settlement_verify",
50
+ service_label: "settlement verify",
51
+ verification_kind: "settlement_verify",
52
+ claim_status: "bounded_live",
53
+ callable_surfaces: ["/v1/proof-center/bridge/validator-verify"],
54
+ supporting_surfaces: ["/v1/proof-center/bridge/summary", "/v1/proof-center/native-anchor-profile/summary"],
55
+ supporting_counts: {
56
+ bridge_profile_count: bridge.profile_count,
57
+ anchor_binding_count: nativeAnchor.anchor_ref_type_count
58
+ },
59
+ claim_boundary: "settlement_verification_binds_settlement_evidence_and_anchor_context_without_claiming_external_chain_truth_by_default"
60
+ },
61
+ {
62
+ service_id: "dispute_replay",
63
+ service_label: "dispute replay",
64
+ verification_kind: "dispute_replay",
65
+ claim_status: "bounded_live",
66
+ callable_surfaces: [
67
+ "/v1/proof-center/governance/disputes/summary",
68
+ "/v1/proof-center/governance/disputes/case-review",
69
+ "/v1/proof-center/governance/disputes/case-bundle",
70
+ "/v1/proof-center/governance/disputes/resolution-pack"
71
+ ],
72
+ supporting_surfaces: ["/v1/proof-center/governance/summary", "/v1/proof-center/governance/review-link"],
73
+ supporting_counts: {
74
+ workflow_count: governance.workflow_count,
75
+ dispute_surface_count: 4
76
+ },
77
+ claim_boundary: "dispute_replay_preserves_reviewable_evidence_and_resolution_shape_not_external_legal_judgment_truth"
78
+ },
79
+ {
80
+ service_id: "identity_link_verify",
81
+ service_label: "identity-link verify",
82
+ verification_kind: "identity_link_verify",
83
+ claim_status: "bounded_live",
84
+ callable_surfaces: ["/v1/receipts/verify", "/v1/proof-center/native-anchor-profile/summary"],
85
+ supporting_surfaces: ["/v1/identity-interop/summary", "/v1/proof-center/result-package-handoff/review/handoff-intake"],
86
+ supporting_counts: {
87
+ verification_method_count: proofCenter.verification_method_count,
88
+ native_methods_present: nativeAnchor.required_method_count
89
+ },
90
+ claim_boundary: "identity_link_verification_binds_identity_refs_inside_the_bundle_without_becoming_login_session_or_global_identity_truth"
91
+ },
92
+ {
93
+ service_id: "anchor_finality_verify",
94
+ service_label: "anchor/finality verify",
95
+ verification_kind: "anchor_finality_verify",
96
+ claim_status: "bounded_live",
97
+ callable_surfaces: ["/v1/proof-center/native-anchor-profile/summary"],
98
+ supporting_surfaces: ["/v1/proof-center/native-anchor-profile", "/v1/proof-center/bridge/summary"],
99
+ supporting_counts: {
100
+ anchor_ref_type_count: nativeAnchor.anchor_ref_type_count,
101
+ bridge_profile_count: bridge.profile_count
102
+ },
103
+ claim_boundary: "anchor_and_finality_verification_confirms_xoonya_binding_and_declared_anchor_refs_not_external_provider_or_chain_truth"
104
+ }
105
+ ];
106
+
107
+ return {
108
+ ok: true,
109
+ product: packageJson.name,
110
+ category: "xoonya-verification-services-pack",
111
+ pack_version: "xoonya-verification-services-pack-v1",
112
+ doctrine: "native_optional_external_methods_supported_verification_and_replay_are_first_class_services",
113
+ service_count: services.length,
114
+ verification_services: services,
115
+ public_claim_boundaries: [
116
+ "keep_external_identity_and_signature_truth_outside_xoonya_without_external_verifier_evidence",
117
+ "keep_native_optional_not_mandatory",
118
+ "keep_anchor_and_finality_checks_bound_to_xoonya_binding_not_external_chain_truth",
119
+ "keep_dispute_replay_as_reviewable_evidence_not_universal_judgment_truth"
120
+ ],
121
+ linked_surfaces: {
122
+ proof_center_ref: "/v1/proof-center",
123
+ proof_center_summary_ref: "/v1/proof-center/summary",
124
+ bridge_summary_ref: "/v1/proof-center/bridge/summary",
125
+ governance_summary_ref: "/v1/proof-center/governance/summary",
126
+ native_anchor_profile_ref: "/v1/proof-center/native-anchor-profile",
127
+ result_package_handoff_summary_ref: "/v1/proof-center/result-package-handoff/summary"
128
+ }
129
+ };
130
+ }
131
+
132
+ function summarizeVerificationServicesPack() {
133
+ const pack = buildVerificationServicesPack();
134
+ return {
135
+ ok: true,
136
+ product: pack.product,
137
+ category: "xoonya-verification-services-summary",
138
+ summary_version: "xoonya-verification-services-summary-v1",
139
+ service_count: pack.service_count,
140
+ live_service_count: pack.verification_services.filter((entry) => entry.claim_status === "live").length,
141
+ bounded_live_service_count: pack.verification_services.filter((entry) => entry.claim_status === "bounded_live").length,
142
+ linked_surfaces: pack.linked_surfaces
143
+ };
144
+ }
145
+
146
+ module.exports = {
147
+ buildVerificationServicesPack,
148
+ summarizeVerificationServicesPack
149
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xoonya",
3
- "version": "2.11.0",
3
+ "version": "2.12.1",
4
4
  "description": "Deterministic proof and review engine for receipts, handoffs, governance, and verification.",
5
5
  "main": "index.js",
6
6
  "bin": {
@@ -80,11 +80,13 @@
80
80
  "verify:reference-promotion-gate": "node scripts/verify_reference_promotion_gate.js",
81
81
  "verify:reference-rust-scaffold": "node scripts/verify_reference_rust_scaffold.js",
82
82
  "verify:native-hybrid-gate": "node scripts/verify_native_hybrid_design_gate.js",
83
+ "verify:verification-services": "node scripts/verify_verification_services.js",
84
+ "verify:trust-portability": "node scripts/verify_trust_portability.js",
83
85
  "verify:vectors": "node scripts/verify_vectors.js",
84
86
  "verify:examples": "node scripts/verify_examples.js",
85
87
  "verify:service": "node scripts/verify_service.js",
86
88
  "verify:release-candidate": "node scripts/verify_release_candidate.js",
87
- "verify:all": "node scripts/verify_all.js && node scripts/verify_external_proof_import_gate.js && node scripts/verify_integrations.js && node scripts/verify_tooling.js && node scripts/verify_vectors.js && node scripts/verify_reference_python.js && node scripts/verify_reference_promotion_gate.js && node scripts/verify_reference_rust_scaffold.js && node scripts/verify_native_hybrid_design_gate.js && node scripts/verify_examples.js && node scripts/verify_service.js",
89
+ "verify:all": "node scripts/verify_all.js && node scripts/verify_external_proof_import_gate.js && node scripts/verify_integrations.js && node scripts/verify_tooling.js && node scripts/verify_vectors.js && node scripts/verify_reference_python.js && node scripts/verify_reference_promotion_gate.js && node scripts/verify_reference_rust_scaffold.js && node scripts/verify_native_hybrid_design_gate.js && node scripts/verify_verification_services.js && node scripts/verify_trust_portability.js && node scripts/verify_examples.js && node scripts/verify_service.js",
88
90
  "prepublishOnly": "npm run verify:release-candidate"
89
91
  }
90
92
  }
@@ -18,12 +18,10 @@ function parsePackDryRun() {
18
18
  function verifyReleaseNotes() {
19
19
  const notesPath = path.resolve(__dirname, "..", "RELEASE_NOTES.md");
20
20
  const notes = fs.readFileSync(notesPath, "utf8");
21
- const headings = (notes.match(/^#\s+xoonya\s+\d+\.\d+\.\d+\s+Release Notes\s*$/gm) || [])
22
- .map((heading) => heading.trim());
23
- assert.deepStrictEqual(
24
- headings,
25
- [`# xoonya ${packageJson.version} Release Notes`],
26
- "RELEASE_NOTES.md must contain only the current xoonya release heading"
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"
27
25
  );
28
26
  assert.strictEqual(
29
27
  notes.includes(`xoonya\` ${packageJson.version}`),
@@ -102,6 +100,7 @@ function main() {
102
100
  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");
103
101
  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");
104
102
  assert.strictEqual(dryRun.files.some((entry) => entry.path === "scripts/verify_native_hybrid_design_gate.js"), true, "npm pack dry-run missing native hybrid design-gate verifier script");
103
+ assert.strictEqual(dryRun.files.some((entry) => entry.path === "scripts/verify_verification_services.js"), true, "npm pack dry-run missing verification services verifier script");
105
104
  assert.strictEqual(dryRun.files.some((entry) => entry.path === "scripts/verify_all.js"), true, "npm pack dry-run missing package verifier script");
106
105
  assert.strictEqual(dryRun.files.some((entry) => entry.path === "vectors/conformance-vectors.json"), true, "npm pack dry-run missing conformance vectors");
107
106
  assert.strictEqual(dryRun.files.some((entry) => entry.path === "vectors/adversarial-vectors.json"), true, "npm pack dry-run missing adversarial vectors");
@@ -105,6 +105,22 @@ async function main() {
105
105
  assert.strictEqual(identityInteropSummaryResponse.json.product, 'xoonya', 'identity interop summary product missing');
106
106
  assert.strictEqual(identityInteropSummaryResponse.json.profile_count >= 4, true, 'identity interop summary count missing');
107
107
 
108
+ const trustPortabilityResponse = await getJson(baseUrl, '/v1/proof-center/trust-portability');
109
+ assert.strictEqual(trustPortabilityResponse.status, 200, 'trust portability route failed');
110
+ assert.strictEqual(trustPortabilityResponse.json.product, 'xoonya', 'trust portability product missing');
111
+ assert.strictEqual(trustPortabilityResponse.json.category, 'xoonya-trust-portability-pack', 'trust portability category missing');
112
+ assert.strictEqual(Array.isArray(trustPortabilityResponse.json.portability_profiles), true, 'trust portability profiles missing');
113
+ assert.strictEqual(trustPortabilityResponse.json.portability_profiles.length >= 4, true, 'trust portability profile count missing');
114
+
115
+ const trustPortabilitySummaryResponse = await getJson(baseUrl, '/v1/proof-center/trust-portability/summary');
116
+ assert.strictEqual(trustPortabilitySummaryResponse.status, 200, 'trust portability summary route failed');
117
+ assert.strictEqual(trustPortabilitySummaryResponse.json.product, 'xoonya', 'trust portability summary product missing');
118
+ assert.strictEqual(trustPortabilitySummaryResponse.json.profile_count >= 4, true, 'trust portability summary profile count missing');
119
+
120
+ const trustPortabilityDetailResponse = await getJson(baseUrl, '/v1/proof-center/trust-portability/agent_identity_portability');
121
+ assert.strictEqual(trustPortabilityDetailResponse.status, 200, 'trust portability detail route failed');
122
+ assert.strictEqual(trustPortabilityDetailResponse.json.profile.profile_id, 'agent_identity_portability', 'trust portability detail profile missing');
123
+
108
124
  const providerLaneResponse = await getJson(baseUrl, '/v1/providers');
109
125
  assert.strictEqual(providerLaneResponse.status, 200, 'provider lane route failed');
110
126
  assert.strictEqual(providerLaneResponse.json.product, 'xoonya', 'provider lane product missing');
@@ -191,6 +207,16 @@ async function main() {
191
207
  assert.strictEqual(proofBridgeLaneSummaryResponse.json.product, 'xoonya', 'proof bridge lane summary product missing');
192
208
  assert.strictEqual(proofBridgeLaneSummaryResponse.json.first_run_flow_count >= 2, true, 'proof bridge lane summary flow count missing');
193
209
 
210
+ const verificationServicesResponse = await getJson(baseUrl, '/v1/proof-center/verification-services');
211
+ assert.strictEqual(verificationServicesResponse.status, 200, 'verification services route failed');
212
+ assert.strictEqual(verificationServicesResponse.json.category, 'xoonya-verification-services-pack', 'verification services category missing');
213
+ assert.strictEqual(verificationServicesResponse.json.service_count >= 6, true, 'verification services count missing');
214
+
215
+ const verificationServicesSummaryResponse = await getJson(baseUrl, '/v1/proof-center/verification-services/summary');
216
+ assert.strictEqual(verificationServicesSummaryResponse.status, 200, 'verification services summary route failed');
217
+ assert.strictEqual(verificationServicesSummaryResponse.json.category, 'xoonya-verification-services-summary', 'verification services summary category missing');
218
+ assert.strictEqual(verificationServicesSummaryResponse.json.service_count >= 6, true, 'verification services summary count missing');
219
+
194
220
  const externalProofImportResponse = await getJson(baseUrl, '/v1/external-proof-import');
195
221
  assert.strictEqual(externalProofImportResponse.status, 200, 'external proof import lane route failed');
196
222
  assert.strictEqual(externalProofImportResponse.json.product, 'xoonya', 'external proof import lane product missing');
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+
3
+ const assert = require("assert");
4
+ const { createServer } = require("../server.js");
5
+
6
+ async function getJson(baseUrl, path) {
7
+ const response = await fetch(`${baseUrl}${path}`);
8
+ return {
9
+ status: response.status,
10
+ json: await response.json()
11
+ };
12
+ }
13
+
14
+ async function main() {
15
+ const server = createServer();
16
+ await new Promise((resolve) => server.listen(0, "127.0.0.1", resolve));
17
+ const address = server.address();
18
+ const baseUrl = `http://127.0.0.1:${address.port}`;
19
+
20
+ try {
21
+ const pack = await getJson(baseUrl, "/v1/proof-center/trust-portability");
22
+ assert.strictEqual(pack.status, 200, "trust portability route failed");
23
+ assert.strictEqual(pack.json.category, "xoonya-trust-portability-pack", "trust portability category mismatch");
24
+ assert.strictEqual(pack.json.portability_profiles.length >= 4, true, "trust portability profile count mismatch");
25
+ assert.strictEqual(
26
+ pack.json.portability_profiles.some((entry) => entry.profile_id === "agent_identity_portability" && entry.callable_surfaces.includes("/v1/identity-interop")),
27
+ true,
28
+ "agent identity portability profile missing identity-interop surface"
29
+ );
30
+ assert.strictEqual(
31
+ pack.json.portability_profiles.some((entry) => entry.profile_id === "delivery_history_portability" && entry.supporting_surfaces.includes("/v1/result-package-trust/summary")),
32
+ true,
33
+ "delivery history portability profile missing result-package-trust support"
34
+ );
35
+
36
+ const summary = await getJson(baseUrl, "/v1/proof-center/trust-portability/summary");
37
+ assert.strictEqual(summary.status, 200, "trust portability summary route failed");
38
+ assert.strictEqual(summary.json.profile_count >= 4, true, "trust portability summary profile count mismatch");
39
+ assert.strictEqual(summary.json.bounded_live_profile_count >= 4, true, "trust portability bounded-live count mismatch");
40
+ assert.strictEqual(summary.json.callable_profile_count >= 4, true, "trust portability callable profile count mismatch");
41
+
42
+ const detail = await getJson(baseUrl, "/v1/proof-center/trust-portability/agent_identity_portability");
43
+ assert.strictEqual(detail.status, 200, "trust portability detail route failed");
44
+ assert.strictEqual(detail.json.profile.profile_id, "agent_identity_portability", "trust portability detail profile mismatch");
45
+ assert.strictEqual(detail.json.profile.claim_status, "bounded_live", "trust portability detail claim status mismatch");
46
+ } finally {
47
+ await new Promise((resolve) => server.close(resolve));
48
+ }
49
+
50
+ console.log("xoonya verify:trust-portability passed");
51
+ }
52
+
53
+ main().catch((error) => {
54
+ console.error(error);
55
+ process.exit(1);
56
+ });
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+
3
+ const assert = require("assert");
4
+ const { createServer } = require("../server.js");
5
+
6
+ async function getJson(baseUrl, path) {
7
+ const response = await fetch(`${baseUrl}${path}`);
8
+ return {
9
+ status: response.status,
10
+ json: await response.json()
11
+ };
12
+ }
13
+
14
+ async function main() {
15
+ const server = createServer();
16
+ await new Promise((resolve) => server.listen(0, "127.0.0.1", resolve));
17
+ const address = server.address();
18
+ const baseUrl = `http://127.0.0.1:${address.port}`;
19
+
20
+ try {
21
+ const pack = await getJson(baseUrl, "/v1/proof-center/verification-services");
22
+ assert.strictEqual(pack.status, 200, "verification services route failed");
23
+ assert.strictEqual(pack.json.category, "xoonya-verification-services-pack", "verification services category mismatch");
24
+ assert.strictEqual(pack.json.service_count >= 6, true, "verification services count mismatch");
25
+ assert.strictEqual(
26
+ pack.json.verification_services.some((entry) => entry.service_id === "bundle_verify" && entry.callable_surfaces.includes("/v1/proof-bundles/verify")),
27
+ true,
28
+ "bundle verify service missing proof-bundles verify surface"
29
+ );
30
+ assert.strictEqual(
31
+ pack.json.verification_services.some((entry) => entry.service_id === "dispute_replay" && entry.callable_surfaces.includes("/v1/proof-center/governance/disputes/case-bundle")),
32
+ true,
33
+ "dispute replay service missing case bundle surface"
34
+ );
35
+ assert.strictEqual(
36
+ pack.json.verification_services.some((entry) => entry.service_id === "identity_link_verify" && entry.supporting_surfaces.includes("/v1/identity-interop/summary")),
37
+ true,
38
+ "identity-link verification service missing identity interop support"
39
+ );
40
+
41
+ const summary = await getJson(baseUrl, "/v1/proof-center/verification-services/summary");
42
+ assert.strictEqual(summary.status, 200, "verification services summary route failed");
43
+ assert.strictEqual(summary.json.service_count >= 6, true, "verification services summary count mismatch");
44
+ assert.strictEqual(summary.json.live_service_count >= 1, true, "verification services summary live count missing");
45
+ assert.strictEqual(summary.json.bounded_live_service_count >= 5, true, "verification services summary bounded-live count missing");
46
+ } finally {
47
+ await new Promise((resolve) => server.close(resolve));
48
+ }
49
+
50
+ console.log("xoonya verify:verification-services passed");
51
+ }
52
+
53
+ main().catch((error) => {
54
+ console.error(error);
55
+ process.exit(1);
56
+ });
package/server.js CHANGED
@@ -76,6 +76,15 @@ const {
76
76
  buildBridgeIntelligencePack,
77
77
  summarizeBridgeIntelligencePack
78
78
  } = require('./lib/bridge_intelligence');
79
+ const {
80
+ buildVerificationServicesPack,
81
+ summarizeVerificationServicesPack
82
+ } = require('./lib/verification_service_pack');
83
+ const {
84
+ buildTrustPortabilityPack,
85
+ getTrustPortabilityProfile,
86
+ summarizeTrustPortabilityPack
87
+ } = require('./lib/trust_portability_pack');
79
88
  const {
80
89
  buildOpenApiDocument,
81
90
  summarizeOpenApiDocument,
@@ -761,6 +770,32 @@ async function routeRequest(req, res) {
761
770
  return;
762
771
  }
763
772
 
773
+ if (req.method === 'GET' && url.pathname === '/v1/proof-center/trust-portability') {
774
+ sendJson(res, 200, buildTrustPortabilityPack());
775
+ return;
776
+ }
777
+
778
+ if (req.method === 'GET' && url.pathname === '/v1/proof-center/trust-portability/summary') {
779
+ sendJson(res, 200, summarizeTrustPortabilityPack());
780
+ return;
781
+ }
782
+
783
+ if (req.method === 'GET' && url.pathname.startsWith('/v1/proof-center/trust-portability/')) {
784
+ const profileId = url.pathname.slice('/v1/proof-center/trust-portability/'.length);
785
+ const profile = getTrustPortabilityProfile(profileId);
786
+ if (!profile) {
787
+ sendJson(res, 404, { ok: false, error: 'trust_portability_profile_not_found' });
788
+ return;
789
+ }
790
+ sendJson(res, 200, {
791
+ ok: true,
792
+ product: 'xoonya',
793
+ category: 'xoonya-trust-portability-detail',
794
+ profile
795
+ });
796
+ return;
797
+ }
798
+
764
799
  if (req.method === 'GET' && url.pathname === '/v1/providers') {
765
800
  sendJson(res, 200, buildProviderLanePack());
766
801
  return;
@@ -2526,6 +2561,16 @@ async function routeRequest(req, res) {
2526
2561
  return;
2527
2562
  }
2528
2563
 
2564
+ if (req.method === 'GET' && url.pathname === '/v1/proof-center/verification-services') {
2565
+ sendJson(res, 200, buildVerificationServicesPack());
2566
+ return;
2567
+ }
2568
+
2569
+ if (req.method === 'GET' && url.pathname === '/v1/proof-center/verification-services/summary') {
2570
+ sendJson(res, 200, summarizeVerificationServicesPack());
2571
+ return;
2572
+ }
2573
+
2529
2574
  if (req.method === 'GET' && url.pathname === '/v1/proof-center/bridge/profile-support') {
2530
2575
  sendJson(res, 200, proofSdk.buildBridgeProfileSupport());
2531
2576
  return;