xoonya 1.13.0 → 1.14.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.
package/README.md CHANGED
@@ -136,12 +136,17 @@ Primary proof-model routes:
136
136
  - `POST /v1/proof-center/result-package-handoff/review/extension-boundary`
137
137
  - `POST /v1/proof-center/result-package-handoff/review/default-continuation`
138
138
  - `POST /v1/proof-center/result-package-handoff/review/default-boundary`
139
+ - `POST /v1/proof-center/result-package-handoff/review/contract-summary`
140
+ - `POST /v1/proof-center/result-package-handoff/review/contract-boundary`
141
+ - `POST /v1/proof-center/result-package-handoff/review/contract-carry`
139
142
  - `POST /v1/proof-center/result-package-handoff/run`
140
143
 
141
144
  The result-package review surface now also returns a durability summary so the preserved execution, economic, and proof-facing context is easier to inspect before proof-native execution.
142
145
  It also now exposes an extension-readiness summary so the stable post-review proof boundary is easier to treat as a reusable seam.
143
146
  It now also exposes a reusable-default continuation summary so that same stable post-review boundary is easier to reuse as a standard proof-side default path.
144
147
  It now also exposes a compact reusable-default boundary summary so the proof-side default seam can be treated as a stable public boundary, not just a recommended path.
148
+ It now also exposes composition-contract summaries so the proof-side default seam can be treated more clearly as a stable public contract across review and run.
149
+ It now also exposes compact contract-carry summaries so the stable proof-side contract context is easier to inspect directly without expanding proof scope.
145
150
  - `POST /v1/events/canonicalize`
146
151
  - `POST /v1/events/hash`
147
152
  - `POST /v1/receipts/emit`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xoonya",
3
- "version": "1.13.0",
3
+ "version": "1.14.0",
4
4
  "description": "Deterministic proof SDK for canonical events, receipts, proof bundles, and verification.",
5
5
  "main": "index.js",
6
6
  "type": "commonjs",
package/proof_sdk.js CHANGED
@@ -1455,6 +1455,65 @@ function summarizeReviewReusableDefaultBoundary(input) {
1455
1455
  };
1456
1456
  }
1457
1457
 
1458
+ function summarizeReviewCompositionContract(input) {
1459
+ const reusableDefault = summarizeReviewReusableDefaultContinuation(input);
1460
+ return {
1461
+ ok: reusableDefault.ok === true,
1462
+ handoff_kind: reusableDefault.handoff_kind || null,
1463
+ result_package_ref: reusableDefault.result_package_ref || null,
1464
+ reusable_default_ref: reusableDefault.reusable_default_ref || null,
1465
+ composition_contract_ref: reusableDefault.reusable_default_ref
1466
+ ? `contract.${reusableDefault.reusable_default_ref}`
1467
+ : null,
1468
+ public_contract_ids: [
1469
+ "review_default_continuation",
1470
+ "review_summary",
1471
+ "proof_run"
1472
+ ],
1473
+ stable_contract_context: {
1474
+ execution_context_ready: reusableDefault.stable_default_context && reusableDefault.stable_default_context.execution_context_ready === true,
1475
+ economic_context_ready: reusableDefault.stable_default_context && reusableDefault.stable_default_context.economic_context_ready === true,
1476
+ proof_context_ready: reusableDefault.stable_default_context && reusableDefault.stable_default_context.proof_context_ready === true
1477
+ },
1478
+ helper_only_summary_ids: [
1479
+ "review_extension_readiness",
1480
+ "review_extension_boundary"
1481
+ ],
1482
+ contract_ready: reusableDefault.default_followthrough && reusableDefault.default_followthrough.reusable_by_default === true,
1483
+ next_surface: reusableDefault.default_followthrough && reusableDefault.default_followthrough.run_surface
1484
+ ? reusableDefault.default_followthrough.run_surface
1485
+ : null
1486
+ };
1487
+ }
1488
+
1489
+ function summarizeReviewCompositionContractBoundary(input) {
1490
+ const contract = summarizeReviewCompositionContract(input);
1491
+ return {
1492
+ ok: contract.ok === true,
1493
+ handoff_kind: contract.handoff_kind || null,
1494
+ result_package_ref: contract.result_package_ref || null,
1495
+ composition_contract_ref: contract.composition_contract_ref || null,
1496
+ stable_boundary_ids: [
1497
+ "review_contract_summary",
1498
+ "proof_run"
1499
+ ],
1500
+ contract_ready: contract.contract_ready === true,
1501
+ next_surface: contract.next_surface || null
1502
+ };
1503
+ }
1504
+
1505
+ function summarizeReviewCompositionContractCarry(input) {
1506
+ const contract = summarizeReviewCompositionContract(input);
1507
+ return {
1508
+ ok: contract.ok === true,
1509
+ composition_contract_ref: contract.composition_contract_ref || null,
1510
+ stable_contract_carry: contract.stable_contract_context || {},
1511
+ public_contract_ids: Array.isArray(contract.public_contract_ids) ? contract.public_contract_ids : [],
1512
+ contract_ready: contract.contract_ready === true,
1513
+ next_surface: contract.next_surface || null
1514
+ };
1515
+ }
1516
+
1458
1517
  function runDefaultProofLoop(loopRef, input) {
1459
1518
  const loop = getDefaultProofLoop(loopRef);
1460
1519
  if (!loop) {
@@ -1515,6 +1574,9 @@ module.exports = {
1515
1574
  summarizeReviewExtensionBoundary,
1516
1575
  summarizeReviewReusableDefaultContinuation,
1517
1576
  summarizeReviewReusableDefaultBoundary,
1577
+ summarizeReviewCompositionContract,
1578
+ summarizeReviewCompositionContractBoundary,
1579
+ summarizeReviewCompositionContractCarry,
1518
1580
  runInteractionResultPackageHandoff,
1519
1581
  runInteractionSpineProofHandoff,
1520
1582
  runTransactionProofHandoff,
package/server.js CHANGED
@@ -248,6 +248,39 @@ async function routeRequest(req, res) {
248
248
  return;
249
249
  }
250
250
 
251
+ if (req.method === 'POST' && url.pathname === '/v1/proof-center/result-package-handoff/review/contract-summary') {
252
+ try {
253
+ const body = await readJsonBody(req);
254
+ const result = proofSdk.summarizeReviewCompositionContract(body);
255
+ sendJson(res, 200, result);
256
+ } catch (error) {
257
+ sendJson(res, 400, { ok: false, reason: error.message });
258
+ }
259
+ return;
260
+ }
261
+
262
+ if (req.method === 'POST' && url.pathname === '/v1/proof-center/result-package-handoff/review/contract-boundary') {
263
+ try {
264
+ const body = await readJsonBody(req);
265
+ const result = proofSdk.summarizeReviewCompositionContractBoundary(body);
266
+ sendJson(res, 200, result);
267
+ } catch (error) {
268
+ sendJson(res, 400, { ok: false, reason: error.message });
269
+ }
270
+ return;
271
+ }
272
+
273
+ if (req.method === 'POST' && url.pathname === '/v1/proof-center/result-package-handoff/review/contract-carry') {
274
+ try {
275
+ const body = await readJsonBody(req);
276
+ const result = proofSdk.summarizeReviewCompositionContractCarry(body);
277
+ sendJson(res, 200, result);
278
+ } catch (error) {
279
+ sendJson(res, 400, { ok: false, reason: error.message });
280
+ }
281
+ return;
282
+ }
283
+
251
284
  if (req.method === 'POST' && url.pathname === '/v1/receipts/verify') {
252
285
  try {
253
286
  const body = await readJsonBody(req);