xoonya 1.27.0 → 2.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.
- package/FINAL_CONTRACT.md +6 -6
- package/PUBLISH_PLAN.md +12 -0
- package/README.md +69 -0
- package/RELEASE_CHECKLIST.md +10 -0
- package/RELEASE_NOTES.md +19 -0
- package/SERVICE_CONTRACT.md +16 -0
- package/bin/xoonya-release.js +169 -0
- package/bin/xoonya-review.js +70 -0
- package/index.js +11 -1
- package/lib/announcement_pack.js +61 -0
- package/lib/ecosystem_entry.js +64 -0
- package/lib/launch_narrative.js +53 -0
- package/lib/outreach_proof.js +71 -0
- package/lib/publish_plan.js +51 -0
- package/lib/release_candidate.js +50 -0
- package/lib/release_center.js +113 -0
- package/lib/release_history.js +72 -0
- package/lib/release_manifest.js +114 -0
- package/lib/release_pack.js +391 -0
- package/package.json +16 -2
- package/proof_sdk.js +200 -7
- package/server.js +222 -0
package/FINAL_CONTRACT.md
CHANGED
|
@@ -17,13 +17,13 @@ It exists to make machine-action evidence:
|
|
|
17
17
|
|
|
18
18
|
## Public Release Stance
|
|
19
19
|
|
|
20
|
-
This product is being prepared as a first public release
|
|
20
|
+
This product is being prepared as a first public release.
|
|
21
21
|
|
|
22
22
|
That means:
|
|
23
23
|
|
|
24
|
-
- prior
|
|
25
|
-
- useful
|
|
26
|
-
-
|
|
24
|
+
- prior proof formats are design history, not public obligations
|
|
25
|
+
- useful earlier decisions may be preserved where they strengthen the final product
|
|
26
|
+
- older helper shapes do not automatically become the public contract
|
|
27
27
|
|
|
28
28
|
The public baseline should therefore be chosen for correctness, clarity, determinism, and extensibility, not for backward compatibility with prior private repos.
|
|
29
29
|
|
|
@@ -409,7 +409,7 @@ The public API of `xoonya` should center on:
|
|
|
409
409
|
|
|
410
410
|
Optional profile helpers may be added separately.
|
|
411
411
|
|
|
412
|
-
## What Should Be Carried Forward From
|
|
412
|
+
## What Should Be Carried Forward From Earlier Proof Iterations
|
|
413
413
|
|
|
414
414
|
Keep:
|
|
415
415
|
|
|
@@ -422,7 +422,7 @@ Keep:
|
|
|
422
422
|
|
|
423
423
|
Do not freeze directly:
|
|
424
424
|
|
|
425
|
-
- historical
|
|
425
|
+
- historical implementation names
|
|
426
426
|
- historical version labels
|
|
427
427
|
- exact old byte-count decisions as sacred
|
|
428
428
|
- old rail-shaped assumptions
|
package/PUBLISH_PLAN.md
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# xoonya Publish Plan
|
|
2
|
+
|
|
3
|
+
1. Run `npm run verify:release-candidate`.
|
|
4
|
+
2. Run `npm pack --dry-run --json` and confirm the package contents.
|
|
5
|
+
3. Publish with `npm publish --access public`.
|
|
6
|
+
4. Redeploy the live service surfaces.
|
|
7
|
+
5. Verify:
|
|
8
|
+
- `/v1/release-candidate/summary`
|
|
9
|
+
- `/v1/release-center/summary`
|
|
10
|
+
- `/v1/announcement-pack/summary`
|
|
11
|
+
- `/v1/outreach-proof/summary`
|
|
12
|
+
6. Run the first public proof-side review path.
|
package/README.md
CHANGED
|
@@ -37,6 +37,70 @@ The intended production-facing proof path is now:
|
|
|
37
37
|
|
|
38
38
|
The rest of this README explains the broader route ladder, but the public starting posture should now be understandable from that one proof-side path.
|
|
39
39
|
|
|
40
|
+
For a direct one-line proof-side review of a carried handoff bundle, use the bundled CLI:
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
xoonya-review --file ./handoff.json --summary
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
For release-grade adoption posture, inspect:
|
|
47
|
+
|
|
48
|
+
- `GET /v1/release-pack`
|
|
49
|
+
- `GET /v1/release-pack/summary`
|
|
50
|
+
- `GET /v1/release-pack/comparison`
|
|
51
|
+
- `GET /v1/release-pack/comparison/summary`
|
|
52
|
+
- `GET /v1/release-pack/adoption`
|
|
53
|
+
- `GET /v1/release-pack/adoption/summary`
|
|
54
|
+
- `GET /v1/release-pack/scenarios`
|
|
55
|
+
- `GET /v1/release-pack/scenarios/summary`
|
|
56
|
+
- `GET /v1/release-pack/launch`
|
|
57
|
+
- `GET /v1/release-pack/launch/summary`
|
|
58
|
+
- `GET /v1/release-manifest`
|
|
59
|
+
- `GET /v1/release-manifest/summary`
|
|
60
|
+
- `GET /v1/release-notes`
|
|
61
|
+
- `GET /v1/release-notes/summary`
|
|
62
|
+
- `GET /v1/release-center`
|
|
63
|
+
- `GET /v1/release-center/summary`
|
|
64
|
+
- `GET /v1/release-history`
|
|
65
|
+
- `GET /v1/release-history/summary`
|
|
66
|
+
- `GET /v1/publish-plan`
|
|
67
|
+
- `GET /v1/publish-plan/summary`
|
|
68
|
+
- `GET /v1/ecosystem-entry`
|
|
69
|
+
- `GET /v1/ecosystem-entry/summary`
|
|
70
|
+
- `GET /v1/launch-narrative`
|
|
71
|
+
- `GET /v1/launch-narrative/summary`
|
|
72
|
+
- `GET /v1/outreach-proof`
|
|
73
|
+
- `GET /v1/outreach-proof/summary`
|
|
74
|
+
- `GET /v1/announcement-pack`
|
|
75
|
+
- `GET /v1/announcement-pack/summary`
|
|
76
|
+
- `GET /v1/release-candidate`
|
|
77
|
+
- `GET /v1/release-candidate/summary`
|
|
78
|
+
- `xoonya-release --summary`
|
|
79
|
+
- `xoonya-release --comparison --summary`
|
|
80
|
+
- `xoonya-release --adoption --summary`
|
|
81
|
+
- `xoonya-release --scenarios --summary`
|
|
82
|
+
- `xoonya-release --launch --summary`
|
|
83
|
+
- `xoonya-release --manifest --summary`
|
|
84
|
+
- `xoonya-release --notes --summary`
|
|
85
|
+
- `xoonya-release --center --summary`
|
|
86
|
+
- `xoonya-release --history --summary`
|
|
87
|
+
- `xoonya-release --ecosystem --summary`
|
|
88
|
+
- `xoonya-release --narrative --summary`
|
|
89
|
+
- `xoonya-release --outreach-proof --summary`
|
|
90
|
+
- `xoonya-release --announcement --summary`
|
|
91
|
+
- `xoonya-release --candidate --summary`
|
|
92
|
+
|
|
93
|
+
These surfaces package the current proof-side value story, first-contact proof-review CLI path, proof-center posture, handoff/review/governance surfaces, and integration breadth into one machine-readable launch boundary.
|
|
94
|
+
|
|
95
|
+
For explicit runtime-economics carry, the proof-side handoff boundary now also accepts a canonical `handoff_bundle` wrapper from `xytara` so the economic consequence seam stays contract-shaped across the two repos instead of being reassembled ad hoc by callers.
|
|
96
|
+
|
|
97
|
+
That same carried bundle can now also ride inside the normal result-package handoff path:
|
|
98
|
+
|
|
99
|
+
- if `xytara` sends `handoff_bundle.economic_consequence_handoff_bundle`
|
|
100
|
+
- `xoonya` will validate it through the existing bounded handoff logic
|
|
101
|
+
- normal result-package review and run surfaces will expose compact economic-conformance review data automatically
|
|
102
|
+
- direct-pay or non-metered handoffs remain unaffected
|
|
103
|
+
|
|
40
104
|
The package and service now also expose a default proof center surface so the intended proof-native path is easy to inspect directly:
|
|
41
105
|
|
|
42
106
|
- canonical event bundle v1
|
|
@@ -118,6 +182,7 @@ The package quickstart demonstrates:
|
|
|
118
182
|
- proof bundle construction
|
|
119
183
|
- proof bundle verification
|
|
120
184
|
- transaction proof-handoff follow-through
|
|
185
|
+
- proof-side bridge carry for explicit economic consequence review when runtime economics need proof-adjacent preservation
|
|
121
186
|
|
|
122
187
|
## Service Quickstart
|
|
123
188
|
|
|
@@ -179,6 +244,8 @@ Primary proof-model routes:
|
|
|
179
244
|
- `POST /v1/proof-center/bridge/receipt-wrap`
|
|
180
245
|
- `POST /v1/proof-center/bridge/validator-verify`
|
|
181
246
|
- `POST /v1/proof-center/bridge/receipt-ledger-handoff`
|
|
247
|
+
- `POST /v1/proof-center/bridge/economic-handoff`
|
|
248
|
+
- `POST /v1/proof-center/bridge/economic-conformance-pack`
|
|
182
249
|
- `POST /v1/proof-center/bridge/operator-review-pack`
|
|
183
250
|
- `POST /v1/proof-center/bridge/compatibility-pack`
|
|
184
251
|
- `POST /v1/proof-center/bridge/workflow-pack`
|
|
@@ -217,6 +284,8 @@ Primary proof-model routes:
|
|
|
217
284
|
- `POST /v1/proof-center/result-package-handoff/review/operating-interface-run`
|
|
218
285
|
- `POST /v1/proof-center/result-package-handoff/review/operating-integration`
|
|
219
286
|
- `POST /v1/proof-center/result-package-handoff/review/operating-integration-carry`
|
|
287
|
+
|
|
288
|
+
When `xytara` sends `handoff_bundle.economic_consequence_handoff_bundle`, `xoonya` now preserves a compact `economic_audit_summary` inside review output so proof-side operators can see the linked `account_ref`, `usage_meter_ref`, `credit_spend_ref`, `usage_units`, `pricing_band`, `payment_ref`, `settlement_ref`, `settlement_txid`, `settlement_finality_status`, `treasury_receipt_ref`, `proof_ref`, and `conformance_pack_ref` without re-deriving the carry by hand.
|
|
220
289
|
- `POST /v1/proof-center/result-package-handoff/review/operating-integration-run`
|
|
221
290
|
- `POST /v1/proof-center/result-package-handoff/review/operating-path`
|
|
222
291
|
- `POST /v1/proof-center/result-package-handoff/review/operating-path-carry`
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# xoonya Release Checklist
|
|
2
|
+
|
|
3
|
+
1. Run `npm run verify:release-candidate`.
|
|
4
|
+
2. Confirm `npm pack --dry-run --json` includes the public docs and both CLI entrypoints.
|
|
5
|
+
3. Redeploy the service and verify:
|
|
6
|
+
- `/v1/release-center/summary`
|
|
7
|
+
- `/v1/announcement-pack/summary`
|
|
8
|
+
- `/v1/outreach-proof/summary`
|
|
9
|
+
4. Run the first public proof-side review path.
|
|
10
|
+
5. Only then publish the npm package.
|
package/RELEASE_NOTES.md
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# xoonya 2.1.0 Release Notes
|
|
2
|
+
|
|
3
|
+
`xoonya` 2.1.0 is the public proof-spine release-candidate line.
|
|
4
|
+
|
|
5
|
+
Highlights:
|
|
6
|
+
|
|
7
|
+
- direct one-line proof-side review with `xoonya-review`
|
|
8
|
+
- release, comparison, adoption, scenario, and launch packs over HTTP and CLI
|
|
9
|
+
- release-center, announcement-pack, and release-candidate surfaces for public launch readiness
|
|
10
|
+
- canonical event, receipt, and proof-bundle model
|
|
11
|
+
- bridge and governance surfaces for reviewable proof posture
|
|
12
|
+
- stable runtime-to-proof followthrough
|
|
13
|
+
|
|
14
|
+
Recommended first checks:
|
|
15
|
+
|
|
16
|
+
1. `npm install xoonya`
|
|
17
|
+
2. `xoonya-release --candidate --summary`
|
|
18
|
+
3. `npm run verify:release-candidate`
|
|
19
|
+
4. inspect `/v1/release-candidate/summary` on the deployed service
|
package/SERVICE_CONTRACT.md
CHANGED
|
@@ -33,6 +33,8 @@ Primary proof-model routes:
|
|
|
33
33
|
- `POST /v1/proof-center/bridge/receipt-wrap`
|
|
34
34
|
- `POST /v1/proof-center/bridge/validator-verify`
|
|
35
35
|
- `POST /v1/proof-center/bridge/receipt-ledger-handoff`
|
|
36
|
+
- `POST /v1/proof-center/bridge/economic-handoff`
|
|
37
|
+
- `POST /v1/proof-center/bridge/economic-conformance-pack`
|
|
36
38
|
- `POST /v1/proof-center/bridge/operator-review-pack`
|
|
37
39
|
- `POST /v1/proof-center/bridge/compatibility-pack`
|
|
38
40
|
- `POST /v1/proof-center/bridge/workflow-pack`
|
|
@@ -81,6 +83,20 @@ The constitutional proof loop for `xoonya` is:
|
|
|
81
83
|
4. build proof bundle
|
|
82
84
|
5. verify proof bundle
|
|
83
85
|
|
|
86
|
+
Bridge-side economic carry should use:
|
|
87
|
+
|
|
88
|
+
1. pass deterministic runtime economics through `POST /v1/proof-center/bridge/economic-handoff`
|
|
89
|
+
2. prefer the canonical `handoff_bundle` wrapper emitted by `xytara`
|
|
90
|
+
3. review the preserved usage-meter and credit-spend consequence through `POST /v1/proof-center/bridge/economic-conformance-pack`
|
|
91
|
+
4. keep proof itself minimal while preserving the economic handoff as a bounded bridge/export surface
|
|
92
|
+
|
|
93
|
+
Normal result-package handoff should also accept carried economics when present:
|
|
94
|
+
|
|
95
|
+
1. send the normal result-package `handoff_bundle`
|
|
96
|
+
2. include `handoff_bundle.economic_consequence_handoff_bundle` when the transaction-side path was credit-backed and metered
|
|
97
|
+
3. expect `POST /v1/proof-center/result-package-handoff/run` and review-summary surfaces to expose compact economic-conformance review data automatically
|
|
98
|
+
4. omit that bundle entirely on direct-pay or non-metered paths without changing proof intake behavior
|
|
99
|
+
|
|
84
100
|
This loop is exercised through:
|
|
85
101
|
|
|
86
102
|
- package verification
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
|
|
4
|
+
const {
|
|
5
|
+
buildReleasePack,
|
|
6
|
+
summarizeReleasePack,
|
|
7
|
+
buildComparisonPack,
|
|
8
|
+
summarizeComparisonPack,
|
|
9
|
+
buildAdoptionPack,
|
|
10
|
+
summarizeAdoptionPack,
|
|
11
|
+
buildScenarioPack,
|
|
12
|
+
summarizeScenarioPack,
|
|
13
|
+
buildLaunchPack,
|
|
14
|
+
summarizeLaunchPack
|
|
15
|
+
} = require("../lib/release_pack");
|
|
16
|
+
const {
|
|
17
|
+
buildReleaseManifest,
|
|
18
|
+
summarizeReleaseManifest,
|
|
19
|
+
buildLaunchNotes,
|
|
20
|
+
summarizeLaunchNotes
|
|
21
|
+
} = require("../lib/release_manifest");
|
|
22
|
+
const {
|
|
23
|
+
buildReleaseCenter,
|
|
24
|
+
summarizeReleaseCenter
|
|
25
|
+
} = require("../lib/release_center");
|
|
26
|
+
const {
|
|
27
|
+
buildReleaseHistory,
|
|
28
|
+
summarizeReleaseHistory
|
|
29
|
+
} = require("../lib/release_history");
|
|
30
|
+
const {
|
|
31
|
+
buildPublishPlan,
|
|
32
|
+
summarizePublishPlan
|
|
33
|
+
} = require("../lib/publish_plan");
|
|
34
|
+
const {
|
|
35
|
+
buildEcosystemEntryPack,
|
|
36
|
+
summarizeEcosystemEntryPack
|
|
37
|
+
} = require("../lib/ecosystem_entry");
|
|
38
|
+
const {
|
|
39
|
+
buildLaunchNarrativePack,
|
|
40
|
+
summarizeLaunchNarrativePack
|
|
41
|
+
} = require("../lib/launch_narrative");
|
|
42
|
+
const {
|
|
43
|
+
buildOutreachProofPack,
|
|
44
|
+
summarizeOutreachProofPack
|
|
45
|
+
} = require("../lib/outreach_proof");
|
|
46
|
+
const {
|
|
47
|
+
buildAnnouncementPack,
|
|
48
|
+
summarizeAnnouncementPack
|
|
49
|
+
} = require("../lib/announcement_pack");
|
|
50
|
+
const {
|
|
51
|
+
buildReleaseCandidatePack,
|
|
52
|
+
summarizeReleaseCandidatePack
|
|
53
|
+
} = require("../lib/release_candidate");
|
|
54
|
+
|
|
55
|
+
function printUsage() {
|
|
56
|
+
process.stderr.write(
|
|
57
|
+
[
|
|
58
|
+
"Usage:",
|
|
59
|
+
" xoonya-release [--summary] [--comparison] [--adoption] [--scenarios] [--launch] [--manifest] [--notes] [--center] [--history] [--publish-plan] [--ecosystem] [--narrative] [--outreach-proof] [--announcement] [--candidate] [--pretty]",
|
|
60
|
+
"",
|
|
61
|
+
"Options:",
|
|
62
|
+
" --summary Emit the compact release-pack summary",
|
|
63
|
+
" --comparison Emit the launch comparison pack",
|
|
64
|
+
" --adoption Emit the machine-world adoption pack",
|
|
65
|
+
" --scenarios Emit the first-run scenario pack",
|
|
66
|
+
" --launch Emit the compact launch/operator pack",
|
|
67
|
+
" --manifest Emit the release manifest",
|
|
68
|
+
" --notes Emit the release notes artifact",
|
|
69
|
+
" --center Emit the canonical release center artifact",
|
|
70
|
+
" --history Emit the release history artifact",
|
|
71
|
+
" --publish-plan Emit the publish-day command artifact",
|
|
72
|
+
" --ecosystem Emit the ecosystem entry artifact",
|
|
73
|
+
" --narrative Emit the launch narrative artifact",
|
|
74
|
+
" --outreach-proof Emit the outreach proof artifact",
|
|
75
|
+
" --announcement Emit the announcement artifact",
|
|
76
|
+
" --candidate Emit the release candidate artifact",
|
|
77
|
+
" --pretty Pretty-print JSON output"
|
|
78
|
+
].join("\n")
|
|
79
|
+
);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
function main() {
|
|
83
|
+
const args = process.argv.slice(2);
|
|
84
|
+
if (args.includes("--help") || args.includes("-h")) {
|
|
85
|
+
printUsage();
|
|
86
|
+
process.stderr.write("\n");
|
|
87
|
+
process.exit(0);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
const summary = args.includes("--summary");
|
|
91
|
+
const comparison = args.includes("--comparison");
|
|
92
|
+
const adoption = args.includes("--adoption");
|
|
93
|
+
const scenarios = args.includes("--scenarios");
|
|
94
|
+
const launch = args.includes("--launch");
|
|
95
|
+
const manifest = args.includes("--manifest");
|
|
96
|
+
const notes = args.includes("--notes");
|
|
97
|
+
const center = args.includes("--center");
|
|
98
|
+
const history = args.includes("--history");
|
|
99
|
+
const publishPlan = args.includes("--publish-plan");
|
|
100
|
+
const ecosystem = args.includes("--ecosystem");
|
|
101
|
+
const narrative = args.includes("--narrative");
|
|
102
|
+
const outreachProof = args.includes("--outreach-proof");
|
|
103
|
+
const announcement = args.includes("--announcement");
|
|
104
|
+
const candidate = args.includes("--candidate");
|
|
105
|
+
const pretty = args.includes("--pretty") || summary;
|
|
106
|
+
let payload;
|
|
107
|
+
if (comparison && summary) {
|
|
108
|
+
payload = summarizeComparisonPack();
|
|
109
|
+
} else if (comparison) {
|
|
110
|
+
payload = buildComparisonPack();
|
|
111
|
+
} else if (adoption && summary) {
|
|
112
|
+
payload = summarizeAdoptionPack();
|
|
113
|
+
} else if (adoption) {
|
|
114
|
+
payload = buildAdoptionPack();
|
|
115
|
+
} else if (scenarios && summary) {
|
|
116
|
+
payload = summarizeScenarioPack();
|
|
117
|
+
} else if (scenarios) {
|
|
118
|
+
payload = buildScenarioPack();
|
|
119
|
+
} else if (launch && summary) {
|
|
120
|
+
payload = summarizeLaunchPack();
|
|
121
|
+
} else if (launch) {
|
|
122
|
+
payload = buildLaunchPack();
|
|
123
|
+
} else if (manifest && summary) {
|
|
124
|
+
payload = summarizeReleaseManifest();
|
|
125
|
+
} else if (manifest) {
|
|
126
|
+
payload = buildReleaseManifest();
|
|
127
|
+
} else if (notes && summary) {
|
|
128
|
+
payload = summarizeLaunchNotes();
|
|
129
|
+
} else if (notes) {
|
|
130
|
+
payload = buildLaunchNotes();
|
|
131
|
+
} else if (center && summary) {
|
|
132
|
+
payload = summarizeReleaseCenter();
|
|
133
|
+
} else if (center) {
|
|
134
|
+
payload = buildReleaseCenter();
|
|
135
|
+
} else if (history && summary) {
|
|
136
|
+
payload = summarizeReleaseHistory();
|
|
137
|
+
} else if (history) {
|
|
138
|
+
payload = buildReleaseHistory();
|
|
139
|
+
} else if (publishPlan && summary) {
|
|
140
|
+
payload = summarizePublishPlan();
|
|
141
|
+
} else if (publishPlan) {
|
|
142
|
+
payload = buildPublishPlan();
|
|
143
|
+
} else if (ecosystem && summary) {
|
|
144
|
+
payload = summarizeEcosystemEntryPack();
|
|
145
|
+
} else if (ecosystem) {
|
|
146
|
+
payload = buildEcosystemEntryPack();
|
|
147
|
+
} else if (narrative && summary) {
|
|
148
|
+
payload = summarizeLaunchNarrativePack();
|
|
149
|
+
} else if (narrative) {
|
|
150
|
+
payload = buildLaunchNarrativePack();
|
|
151
|
+
} else if (outreachProof && summary) {
|
|
152
|
+
payload = summarizeOutreachProofPack();
|
|
153
|
+
} else if (outreachProof) {
|
|
154
|
+
payload = buildOutreachProofPack();
|
|
155
|
+
} else if (announcement && summary) {
|
|
156
|
+
payload = summarizeAnnouncementPack();
|
|
157
|
+
} else if (announcement) {
|
|
158
|
+
payload = buildAnnouncementPack();
|
|
159
|
+
} else if (candidate && summary) {
|
|
160
|
+
payload = summarizeReleaseCandidatePack();
|
|
161
|
+
} else if (candidate) {
|
|
162
|
+
payload = buildReleaseCandidatePack();
|
|
163
|
+
} else {
|
|
164
|
+
payload = summary ? summarizeReleasePack() : buildReleasePack();
|
|
165
|
+
}
|
|
166
|
+
process.stdout.write(JSON.stringify(payload, null, pretty ? 2 : 0));
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
main();
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
|
|
4
|
+
const fs = require("fs");
|
|
5
|
+
const path = require("path");
|
|
6
|
+
const sdk = require("../index.js");
|
|
7
|
+
|
|
8
|
+
function parseArgs(argv) {
|
|
9
|
+
const args = {};
|
|
10
|
+
for (let index = 0; index < argv.length; index += 1) {
|
|
11
|
+
const token = argv[index];
|
|
12
|
+
if (!token.startsWith("--")) continue;
|
|
13
|
+
const key = token.slice(2);
|
|
14
|
+
const next = argv[index + 1];
|
|
15
|
+
if (!next || next.startsWith("--")) {
|
|
16
|
+
args[key] = true;
|
|
17
|
+
continue;
|
|
18
|
+
}
|
|
19
|
+
args[key] = next;
|
|
20
|
+
index += 1;
|
|
21
|
+
}
|
|
22
|
+
return args;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function printUsage() {
|
|
26
|
+
process.stdout.write([
|
|
27
|
+
"Usage: xoonya-review (--file <handoff.json> | --json <json>) [--summary] [--pretty]",
|
|
28
|
+
"",
|
|
29
|
+
"Options:",
|
|
30
|
+
" --file <path> Read the handoff payload from a JSON file",
|
|
31
|
+
" --json <json> Read the handoff payload from an inline JSON string",
|
|
32
|
+
" --summary Return the compact review summary instead of full review",
|
|
33
|
+
" --pretty Pretty-print JSON output",
|
|
34
|
+
" --help Show this help message"
|
|
35
|
+
].join("\n"));
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function loadInput(args) {
|
|
39
|
+
if (args.file) {
|
|
40
|
+
return JSON.parse(fs.readFileSync(path.resolve(process.cwd(), args.file), "utf8"));
|
|
41
|
+
}
|
|
42
|
+
if (args.json) {
|
|
43
|
+
return JSON.parse(args.json);
|
|
44
|
+
}
|
|
45
|
+
throw new Error("file_or_json_required");
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function writeOutput(payload, pretty) {
|
|
49
|
+
process.stdout.write(JSON.stringify(payload, null, pretty ? 2 : 0));
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
function main() {
|
|
53
|
+
const args = parseArgs(process.argv.slice(2));
|
|
54
|
+
if (args.help) {
|
|
55
|
+
printUsage();
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
const input = loadInput(args);
|
|
59
|
+
const payload = args.summary === true
|
|
60
|
+
? sdk.summarizeReviewedInteractionResultPackageHandoff(input)
|
|
61
|
+
: sdk.reviewInteractionResultPackageHandoff(input);
|
|
62
|
+
writeOutput(payload, args.pretty === true);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
try {
|
|
66
|
+
main();
|
|
67
|
+
} catch (error) {
|
|
68
|
+
process.stderr.write(`${error.message}\n`);
|
|
69
|
+
process.exitCode = 1;
|
|
70
|
+
}
|
package/index.js
CHANGED
|
@@ -2,5 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
module.exports = {
|
|
4
4
|
...require("./proof_sdk"),
|
|
5
|
-
...require("./integrations/registry")
|
|
5
|
+
...require("./integrations/registry"),
|
|
6
|
+
...require("./lib/release_pack"),
|
|
7
|
+
...require("./lib/release_manifest"),
|
|
8
|
+
...require("./lib/release_center"),
|
|
9
|
+
...require("./lib/release_history"),
|
|
10
|
+
...require("./lib/publish_plan"),
|
|
11
|
+
...require("./lib/ecosystem_entry"),
|
|
12
|
+
...require("./lib/launch_narrative"),
|
|
13
|
+
...require("./lib/outreach_proof"),
|
|
14
|
+
...require("./lib/announcement_pack"),
|
|
15
|
+
...require("./lib/release_candidate")
|
|
6
16
|
};
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
const packageJson = require("../package.json");
|
|
4
|
+
|
|
5
|
+
function buildAnnouncementPack() {
|
|
6
|
+
return {
|
|
7
|
+
ok: true,
|
|
8
|
+
product: packageJson.name,
|
|
9
|
+
category: "proof-announcement-pack",
|
|
10
|
+
public_quickstart: {
|
|
11
|
+
install: "npm install xoonya",
|
|
12
|
+
first_cli: "xoonya-review --file ./handoff.json --summary",
|
|
13
|
+
first_release_view: "xoonya-release --center --summary",
|
|
14
|
+
first_http: "/v1/release-center/summary"
|
|
15
|
+
},
|
|
16
|
+
release_candidate: {
|
|
17
|
+
checks: [
|
|
18
|
+
"install the package on a clean machine",
|
|
19
|
+
"run xoonya-release --center --summary",
|
|
20
|
+
"run npm run verify:all",
|
|
21
|
+
"verify /v1/release-center/summary on the deployed service",
|
|
22
|
+
"verify /v1/outreach-proof/summary on the deployed service"
|
|
23
|
+
]
|
|
24
|
+
},
|
|
25
|
+
publish_day: {
|
|
26
|
+
sequence: [
|
|
27
|
+
"publish the npm package",
|
|
28
|
+
"redeploy the service and docs surfaces",
|
|
29
|
+
"verify release-center, launch-narrative, and outreach-proof summaries live",
|
|
30
|
+
"run the first public proof-side review path",
|
|
31
|
+
"share the announcement artifact with proof operators and verification-focused builders"
|
|
32
|
+
]
|
|
33
|
+
},
|
|
34
|
+
public_message: {
|
|
35
|
+
headline: "reviewable proof continuation for machine actions that cross trust boundaries",
|
|
36
|
+
who_should_try_first: [
|
|
37
|
+
"proof operators",
|
|
38
|
+
"runtime builders needing verification followthrough",
|
|
39
|
+
"governance and audit teams"
|
|
40
|
+
]
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function summarizeAnnouncementPack() {
|
|
46
|
+
const pack = buildAnnouncementPack();
|
|
47
|
+
return {
|
|
48
|
+
ok: true,
|
|
49
|
+
product: pack.product,
|
|
50
|
+
category: pack.category,
|
|
51
|
+
rc_check_count: pack.release_candidate.checks.length,
|
|
52
|
+
publish_step_count: pack.publish_day.sequence.length,
|
|
53
|
+
first_cli: pack.public_quickstart.first_cli,
|
|
54
|
+
audience_count: pack.public_message.who_should_try_first.length
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
module.exports = {
|
|
59
|
+
buildAnnouncementPack,
|
|
60
|
+
summarizeAnnouncementPack
|
|
61
|
+
};
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
const packageJson = require("../package.json");
|
|
4
|
+
|
|
5
|
+
function buildEcosystemEntryPack() {
|
|
6
|
+
return {
|
|
7
|
+
ok: true,
|
|
8
|
+
product: packageJson.name,
|
|
9
|
+
category: "proof-ecosystem-entry",
|
|
10
|
+
audiences: [
|
|
11
|
+
{
|
|
12
|
+
audience_ref: "proof_operator",
|
|
13
|
+
why_now: "needs a direct first review path for carried runtime handoff bundles",
|
|
14
|
+
first_path_ref: "scenario.carried_handoff.review",
|
|
15
|
+
first_http_entrypoint: "/v1/proof-center/result-package-handoff/review/summary",
|
|
16
|
+
first_cli_entrypoint: "xoonya-review --file ./handoff.json --summary"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
audience_ref: "runtime_builder_needing_verification",
|
|
20
|
+
why_now: "needs a stable proof continuation after runtime output crosses trust boundaries",
|
|
21
|
+
first_path_ref: "scenario.result_package.followthrough",
|
|
22
|
+
first_http_entrypoint: "/v1/proof-center/result-package-handoff/review/summary",
|
|
23
|
+
first_cli_entrypoint: "xoonya-release --scenarios --summary"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
audience_ref: "adapter_integrator",
|
|
27
|
+
why_now: "needs a proof contract that survives changing runtimes and settlement choices",
|
|
28
|
+
first_path_ref: "scenario.default_proof.loop",
|
|
29
|
+
first_http_entrypoint: "/v1/proof-center/default-loops/summary",
|
|
30
|
+
first_cli_entrypoint: "xoonya-release --launch --summary"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
audience_ref: "governance_or_audit_team",
|
|
34
|
+
why_now: "needs handoff and governance posture before trusting proof-native followthrough",
|
|
35
|
+
first_path_ref: "scenario.carried_handoff.review",
|
|
36
|
+
first_http_entrypoint: "/v1/release-center/summary",
|
|
37
|
+
first_cli_entrypoint: "xoonya-release --center --summary"
|
|
38
|
+
}
|
|
39
|
+
],
|
|
40
|
+
public_lead_sequence: [
|
|
41
|
+
"identify the proof-side audience and first success path",
|
|
42
|
+
"show the smallest review or proof loop entrypoint",
|
|
43
|
+
"show the matching comparison and adoption summary",
|
|
44
|
+
"show the release center when trust, breadth, and maturity need one compact artifact"
|
|
45
|
+
]
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function summarizeEcosystemEntryPack() {
|
|
50
|
+
const pack = buildEcosystemEntryPack();
|
|
51
|
+
return {
|
|
52
|
+
ok: true,
|
|
53
|
+
product: pack.product,
|
|
54
|
+
category: pack.category,
|
|
55
|
+
audience_count: pack.audiences.length,
|
|
56
|
+
first_audience: pack.audiences[0] ? pack.audiences[0].audience_ref : null,
|
|
57
|
+
lead_step_count: pack.public_lead_sequence.length
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
module.exports = {
|
|
62
|
+
buildEcosystemEntryPack,
|
|
63
|
+
summarizeEcosystemEntryPack
|
|
64
|
+
};
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
const packageJson = require("../package.json");
|
|
4
|
+
|
|
5
|
+
function buildLaunchNarrativePack() {
|
|
6
|
+
return {
|
|
7
|
+
ok: true,
|
|
8
|
+
product: packageJson.name,
|
|
9
|
+
category: "proof-launch-narrative",
|
|
10
|
+
why_now: "machine actions increasingly need reviewable evidence after they cross trust boundaries, and opaque logs or narrow receipts are not enough",
|
|
11
|
+
problem_patchwork_misses: [
|
|
12
|
+
"runtime logs do not become a stable proof contract by themselves",
|
|
13
|
+
"receipt-only systems miss reviewable carry, governance posture, and proof-native followthrough",
|
|
14
|
+
"settlement-specific proof systems do not generalize cleanly across changing runtimes and rails"
|
|
15
|
+
],
|
|
16
|
+
strongest_public_claim: "reviewable proof continuation for machine actions that cross trust boundaries",
|
|
17
|
+
first_proof_to_run: {
|
|
18
|
+
path_ref: "scenario.carried_handoff.review",
|
|
19
|
+
why_this_first: "smallest strong-signal proof-side intake that shows carried runtime context, proof readiness, and operator review posture",
|
|
20
|
+
cli: "xoonya-review --file ./handoff.json --summary"
|
|
21
|
+
},
|
|
22
|
+
first_success_looks_like: [
|
|
23
|
+
"handoff bundle is accepted and review summary is intelligible",
|
|
24
|
+
"proof readiness is visible before proof-native continuation",
|
|
25
|
+
"economic and settlement carry survives into proof-side review",
|
|
26
|
+
"handoff and governance posture are inspectable instead of hidden"
|
|
27
|
+
],
|
|
28
|
+
immediate_should_care: [
|
|
29
|
+
"proof operators needing carried handoff review",
|
|
30
|
+
"runtime builders needing stable verification followthrough",
|
|
31
|
+
"adapter integrators needing a durable proof contract",
|
|
32
|
+
"audit and governance teams needing reviewable machine evidence"
|
|
33
|
+
]
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function summarizeLaunchNarrativePack() {
|
|
38
|
+
const pack = buildLaunchNarrativePack();
|
|
39
|
+
return {
|
|
40
|
+
ok: true,
|
|
41
|
+
product: pack.product,
|
|
42
|
+
category: pack.category,
|
|
43
|
+
patchwork_gap_count: pack.problem_patchwork_misses.length,
|
|
44
|
+
success_signal_count: pack.first_success_looks_like.length,
|
|
45
|
+
immediate_audience_count: pack.immediate_should_care.length,
|
|
46
|
+
first_path_ref: pack.first_proof_to_run.path_ref
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
module.exports = {
|
|
51
|
+
buildLaunchNarrativePack,
|
|
52
|
+
summarizeLaunchNarrativePack
|
|
53
|
+
};
|