settld 0.1.2 → 0.2.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 (483) hide show
  1. package/README.md +93 -3
  2. package/SETTLD_VERSION +1 -1
  3. package/bin/settld-mcp +2 -0
  4. package/bin/settld.js +71 -0
  5. package/conformance/kernel-v0/README.md +7 -0
  6. package/conformance/kernel-v0/run.mjs +292 -4
  7. package/docs/ACCESS.md +57 -0
  8. package/docs/ADOPTION_CHECKLIST.md +44 -0
  9. package/docs/ALERTS.md +198 -0
  10. package/docs/ARCHITECTURE.md +69 -0
  11. package/docs/ARCHITECTURE_FOUNDER_GUIDE.md +284 -0
  12. package/docs/ARTIFACTS.md +60 -0
  13. package/docs/CERTIFICATION_CHECKLIST.md +33 -0
  14. package/docs/CIRCLE_SANDBOX_E2E.md +152 -0
  15. package/docs/CONFIG.md +297 -0
  16. package/docs/CONTRACTS_APIS.md +23 -0
  17. package/docs/DEPRECATION.md +31 -0
  18. package/docs/DOMAIN_MODEL.md +92 -0
  19. package/docs/EVENT_ENVELOPE.md +53 -0
  20. package/docs/FINANCE_PACK_FORMAT.md +53 -0
  21. package/docs/INCIDENT_TAXONOMY.md +30 -0
  22. package/docs/JOB_STATE_MACHINE.md +66 -0
  23. package/docs/KERNEL_COMPATIBLE.md +60 -0
  24. package/docs/KERNEL_V0.md +40 -0
  25. package/docs/KEY_ROTATION.md +80 -0
  26. package/docs/LEDGER.md +82 -0
  27. package/docs/LIVENESS.md +76 -0
  28. package/docs/MVP_BUILD_ORDER.md +36 -0
  29. package/docs/ONCALL_PLAYBOOK.md +39 -0
  30. package/docs/OPERATIONS_SIGNING.md +20 -0
  31. package/docs/OVERVIEW.md +190 -0
  32. package/docs/PERF_BASELINE.md +85 -0
  33. package/docs/PRD.md +77 -0
  34. package/docs/QUICKSTART_KERNEL_V0.md +96 -0
  35. package/docs/QUICKSTART_MCP.md +377 -0
  36. package/docs/QUICKSTART_MCP_HOSTS.md +210 -0
  37. package/docs/QUICKSTART_POLICY_PACKS.md +65 -0
  38. package/docs/QUICKSTART_PRODUCE.md +61 -0
  39. package/docs/QUICKSTART_PROFILES.md +198 -0
  40. package/docs/QUICKSTART_RELEASE_VERIFY.md +39 -0
  41. package/docs/QUICKSTART_SDK.md +125 -0
  42. package/docs/QUICKSTART_SDK_PYTHON.md +111 -0
  43. package/docs/QUICKSTART_VERIFY.md +54 -0
  44. package/docs/QUICKSTART_X402_GATEWAY.md +317 -0
  45. package/docs/README.md +33 -0
  46. package/docs/RELEASE_CHECKLIST.md +182 -0
  47. package/docs/RELEASING.md +82 -0
  48. package/docs/REPO_SETTINGS.md +37 -0
  49. package/docs/RUNBOOK.md +86 -0
  50. package/docs/SKILLS.md +42 -0
  51. package/docs/SKILL_BUNDLE_FORMAT.md +48 -0
  52. package/docs/SLO.md +131 -0
  53. package/docs/SUMMARY.md +17 -0
  54. package/docs/SUPPORT.md +31 -0
  55. package/docs/THREAT_MODEL.md +36 -0
  56. package/docs/TRUST.md +59 -0
  57. package/docs/WORKFLOW.md +35 -0
  58. package/docs/X402_BATCH_SETTLEMENT.md +126 -0
  59. package/docs/blog/2026-02-14-your-ai-agent-just-spent-500-where-is-the-receipt.md +73 -0
  60. package/docs/examples/x402-provider-payout-registry.example.json +14 -0
  61. package/docs/gitbook/README.md +64 -0
  62. package/docs/gitbook/SETUP.md +25 -0
  63. package/docs/gitbook/SUMMARY.md +15 -0
  64. package/docs/gitbook/api-reference.md +73 -0
  65. package/docs/gitbook/closepacks.md +55 -0
  66. package/docs/gitbook/conformance.md +59 -0
  67. package/docs/gitbook/core-primitives.md +85 -0
  68. package/docs/gitbook/dispute-lifecycle.md +33 -0
  69. package/docs/gitbook/faq.md +21 -0
  70. package/docs/gitbook/guides.md +49 -0
  71. package/docs/gitbook/operations-runbook.md +36 -0
  72. package/docs/gitbook/quickstart.md +103 -0
  73. package/docs/gitbook/replay-and-audit.md +30 -0
  74. package/docs/gitbook/sdk-reference.md +35 -0
  75. package/docs/gitbook/security-model.md +58 -0
  76. package/docs/integrations/README.md +15 -0
  77. package/docs/integrations/github-actions-verify.yml +31 -0
  78. package/docs/integrations/github-actions.md +34 -0
  79. package/docs/integrations/openclaw/CLAWHUB_PUBLISH_CHECKLIST.md +65 -0
  80. package/docs/integrations/openclaw/PUBLIC_QUICKSTART.md +95 -0
  81. package/docs/integrations/openclaw/settld-mcp-skill/SKILL.md +69 -0
  82. package/docs/integrations/openclaw/settld-mcp-skill/mcp-server.example.json +12 -0
  83. package/docs/kernel-compatible/capabilities.json +36 -0
  84. package/docs/marketing/agent-commerce-substrate.md +78 -0
  85. package/docs/marketing/hn-repost-2026-02-17.md +102 -0
  86. package/docs/marketing/show-hn-post.md +45 -0
  87. package/docs/ops/ARTIFACT_VERIFICATION_STATUS.md +43 -0
  88. package/docs/ops/BILLING_WEBHOOK_REPLAY.md +105 -0
  89. package/docs/ops/CI_FLAKE_BUDGET.md +31 -0
  90. package/docs/ops/DISPUTE_FINANCE_RECONCILIATION_PACKET.md +56 -0
  91. package/docs/ops/GO_LIVE_GATE_S13.md +27 -0
  92. package/docs/ops/HOSTED_BASELINE_R2.md +129 -0
  93. package/docs/ops/KERNEL_V0_SHIP_GATE.md +69 -0
  94. package/docs/ops/LIGHTHOUSE_PRODUCTION_CLOSE.md +51 -0
  95. package/docs/ops/MCP_COMPATIBILITY_MATRIX.md +30 -0
  96. package/docs/ops/MINIMUM_PRODUCTION_TOPOLOGY.md +89 -0
  97. package/docs/ops/P0_BACKEND_PROGRESS.md +150 -0
  98. package/docs/ops/PAYMENTS_ALPHA_R5.md +105 -0
  99. package/docs/ops/PILOT_ONBOARDING_RUNBOOK.md +112 -0
  100. package/docs/ops/PRODUCTION_DEPLOYMENT_CHECKLIST.md +140 -0
  101. package/docs/ops/R1_SLOS.md +66 -0
  102. package/docs/ops/RELEASE_SIGNING_INCIDENT.md +58 -0
  103. package/docs/ops/SELF_SERVE_LAUNCH_AUTOMATION.md +89 -0
  104. package/docs/ops/THROUGHPUT_DRILL_10X.md +48 -0
  105. package/docs/ops/TRUST_CONFIG_WIZARD.md +60 -0
  106. package/docs/ops/X402_PILOT_WEEKLY_METRICS.md +76 -0
  107. package/docs/ops/tool-call-disputes-holdback.md +52 -0
  108. package/docs/pilot-kit/PILOT_PACKAGE_SCORECARD_X402.md +46 -0
  109. package/docs/pilot-kit/README.md +29 -0
  110. package/docs/pilot-kit/architecture-one-pager.md +48 -0
  111. package/docs/pilot-kit/buyer-email.txt +19 -0
  112. package/docs/pilot-kit/buyer-one-pager.md +31 -0
  113. package/docs/pilot-kit/gtm-pilot-playbook.md +182 -0
  114. package/docs/pilot-kit/offline-verify.md +33 -0
  115. package/docs/pilot-kit/procurement-one-pager.md +50 -0
  116. package/docs/pilot-kit/rfp-clause.md +46 -0
  117. package/docs/pilot-kit/roi-calculator-template.csv +2 -0
  118. package/docs/pilot-kit/security-qa.md +153 -0
  119. package/docs/pilot-kit/security-summary.md +35 -0
  120. package/docs/plans/2026-02-13-mcp-spike-design.md +113 -0
  121. package/docs/plans/2026-02-20-trust-os-v1-jira-backlog.md +348 -0
  122. package/docs/plans/2026-02-21-agent-economic-actor-operating-model.md +169 -0
  123. package/docs/plans/2026-02-21-trust-os-v1-strategy.md +241 -0
  124. package/docs/research/2026-02-21-agent-spend-host-landscape.md +57 -0
  125. package/docs/spec/AcceptanceCriteria.v1.md +17 -0
  126. package/docs/spec/AcceptanceEvaluation.v1.md +10 -0
  127. package/docs/spec/AgentEvent.v1.md +47 -0
  128. package/docs/spec/AgentIdentity.v1.md +62 -0
  129. package/docs/spec/AgentPassport.v1.md +95 -0
  130. package/docs/spec/AgentReputation.v1.md +59 -0
  131. package/docs/spec/AgentReputation.v2.md +52 -0
  132. package/docs/spec/AgentRun.v1.md +47 -0
  133. package/docs/spec/AgentRunSettlement.v1.md +52 -0
  134. package/docs/spec/AgentWallet.v1.md +43 -0
  135. package/docs/spec/AgreementDelegation.v1.md +109 -0
  136. package/docs/spec/ArbitrationCase.v1.md +67 -0
  137. package/docs/spec/ArbitrationOutcomeMapping.v1.md +62 -0
  138. package/docs/spec/ArbitrationVerdict.v1.md +60 -0
  139. package/docs/spec/BundleHeadAttestation.v1.md +32 -0
  140. package/docs/spec/CANONICAL_JSON.md +31 -0
  141. package/docs/spec/CRYPTOGRAPHY.md +61 -0
  142. package/docs/spec/ClosePack.v1.md +49 -0
  143. package/docs/spec/ClosePackManifest.v1.md +24 -0
  144. package/docs/spec/DelegationGrant.v1.md +90 -0
  145. package/docs/spec/DisputeCaseLifecycle.v1.md +51 -0
  146. package/docs/spec/DisputeOpenEnvelope.v1.md +43 -0
  147. package/docs/spec/ERRORS.md +76 -0
  148. package/docs/spec/ESCROW_NETTING_INVARIANTS.md +71 -0
  149. package/docs/spec/EvidenceIndex.v1.md +20 -0
  150. package/docs/spec/ExecutionIntent.v1.md +90 -0
  151. package/docs/spec/FinancePackBundleManifest.v1.md +24 -0
  152. package/docs/spec/FundingHold.v1.md +60 -0
  153. package/docs/spec/GovernancePolicy.v1.md +34 -0
  154. package/docs/spec/GovernancePolicy.v2.md +30 -0
  155. package/docs/spec/INVARIANTS.md +389 -0
  156. package/docs/spec/InteractionDirectionMatrix.v1.md +30 -0
  157. package/docs/spec/InvoiceBundleManifest.v1.md +24 -0
  158. package/docs/spec/InvoiceClaim.v1.md +11 -0
  159. package/docs/spec/MONEY_RAIL_STATE_MACHINE.md +58 -0
  160. package/docs/spec/MarketplaceAcceptance.v2.md +46 -0
  161. package/docs/spec/MarketplaceOffer.v2.md +54 -0
  162. package/docs/spec/MeteringReport.v1.md +18 -0
  163. package/docs/spec/OperatorAction.v1.md +90 -0
  164. package/docs/spec/PRODUCER_ERRORS.md +42 -0
  165. package/docs/spec/PolicyDecision.v1.md +83 -0
  166. package/docs/spec/PricingMatrix.v1.md +20 -0
  167. package/docs/spec/PricingMatrixSignatures.v1.md +30 -0
  168. package/docs/spec/PricingMatrixSignatures.v2.md +29 -0
  169. package/docs/spec/ProduceCliOutput.v1.md +46 -0
  170. package/docs/spec/ProofBundleManifest.v1.md +24 -0
  171. package/docs/spec/README.md +109 -0
  172. package/docs/spec/REFERENCE_IMPLEMENTATIONS.md +29 -0
  173. package/docs/spec/REFERENCE_VERIFIER_BEHAVIOR.md +68 -0
  174. package/docs/spec/REMOTE_SIGNER.md +66 -0
  175. package/docs/spec/ReleaseIndex.v1.md +32 -0
  176. package/docs/spec/ReleaseIndexSignatures.v1.md +17 -0
  177. package/docs/spec/ReleaseTrust.v1.md +13 -0
  178. package/docs/spec/ReleaseTrust.v2.md +26 -0
  179. package/docs/spec/RemoteSignerRequest.v1.md +21 -0
  180. package/docs/spec/RemoteSignerResponse.v1.md +16 -0
  181. package/docs/spec/ReputationEvent.v1.md +63 -0
  182. package/docs/spec/RevocationList.v1.md +28 -0
  183. package/docs/spec/SIGNER_PROVIDER_PLUGIN.md +32 -0
  184. package/docs/spec/STRICTNESS.md +68 -0
  185. package/docs/spec/SUPPLY_CHAIN.md +33 -0
  186. package/docs/spec/SettlementAdjustment.v1.md +45 -0
  187. package/docs/spec/SettlementDecisionRecord.v1.md +48 -0
  188. package/docs/spec/SettlementDecisionRecord.v2.md +53 -0
  189. package/docs/spec/SettlementDecisionReport.v1.md +44 -0
  190. package/docs/spec/SettlementKernel.v1.md +59 -0
  191. package/docs/spec/SettlementReceipt.v1.md +63 -0
  192. package/docs/spec/SlaDefinition.v1.md +24 -0
  193. package/docs/spec/SlaEvaluation.v1.md +12 -0
  194. package/docs/spec/THREAT_MODEL.md +113 -0
  195. package/docs/spec/TOOL_PROVENANCE.md +30 -0
  196. package/docs/spec/TRUST_ANCHORS.md +84 -0
  197. package/docs/spec/TenantSettings.v1.md +90 -0
  198. package/docs/spec/TenantSettings.v2.md +99 -0
  199. package/docs/spec/TimestampProof.v1.md +25 -0
  200. package/docs/spec/ToolCallAgreement.v1.md +34 -0
  201. package/docs/spec/ToolCallEvidence.v1.md +47 -0
  202. package/docs/spec/ToolManifest.v1.md +47 -0
  203. package/docs/spec/VERIFIER_ENVIRONMENT.md +38 -0
  204. package/docs/spec/VERSIONING.md +107 -0
  205. package/docs/spec/VerificationReport.v1.md +50 -0
  206. package/docs/spec/VerifyAboutOutput.v1.md +10 -0
  207. package/docs/spec/VerifyCliOutput.v1.md +28 -0
  208. package/docs/spec/WARNINGS.md +83 -0
  209. package/docs/spec/error-codes.v1.txt +285 -0
  210. package/docs/spec/examples/agreement_delegation_v1.example.json +21 -0
  211. package/docs/spec/examples/arbitration_case_v1.example.json +26 -0
  212. package/docs/spec/examples/arbitration_verdict_v1.example.json +32 -0
  213. package/docs/spec/examples/dispute_open_envelope_v1.example.json +18 -0
  214. package/docs/spec/examples/produce_cli_output_v1.example.json +32 -0
  215. package/docs/spec/examples/release_index_signature_v1.example.json +9 -0
  216. package/docs/spec/examples/release_index_signatures_v1.example.json +14 -0
  217. package/docs/spec/examples/release_index_v1.example.json +15 -0
  218. package/docs/spec/examples/release_trust_v1.example.json +7 -0
  219. package/docs/spec/examples/release_trust_v2.example.json +22 -0
  220. package/docs/spec/examples/remote_signer_request_v1.example.json +18 -0
  221. package/docs/spec/examples/remote_signer_response_v1.example.json +8 -0
  222. package/docs/spec/examples/reputation_event_v1.example.json +29 -0
  223. package/docs/spec/examples/verification_report_v1.example.json +24 -0
  224. package/docs/spec/examples/verify_about_output_v1.example.json +29 -0
  225. package/docs/spec/examples/verify_cli_output_v1.example.json +13 -0
  226. package/docs/spec/legacy/MarketplaceAcceptance.v1.md +48 -0
  227. package/docs/spec/legacy/MarketplaceOffer.v1.md +56 -0
  228. package/docs/spec/legacy/schemas/MarketplaceAcceptance.v1.schema.json +53 -0
  229. package/docs/spec/legacy/schemas/MarketplaceOffer.v1.schema.json +61 -0
  230. package/docs/spec/producer-error-codes.v1.txt +14 -0
  231. package/docs/spec/schemas/AcceptanceCriteria.v1.schema.json +24 -0
  232. package/docs/spec/schemas/AcceptanceEvaluation.v1.schema.json +26 -0
  233. package/docs/spec/schemas/AgentEvent.v1.schema.json +49 -0
  234. package/docs/spec/schemas/AgentIdentity.v1.schema.json +129 -0
  235. package/docs/spec/schemas/AgentPassport.v1.schema.json +112 -0
  236. package/docs/spec/schemas/AgentReputation.v1.schema.json +151 -0
  237. package/docs/spec/schemas/AgentReputation.v2.schema.json +120 -0
  238. package/docs/spec/schemas/AgentRun.v1.schema.json +71 -0
  239. package/docs/spec/schemas/AgentRunSettlement.v1.schema.json +75 -0
  240. package/docs/spec/schemas/AgentWallet.v1.schema.json +54 -0
  241. package/docs/spec/schemas/AgreementDelegation.v1.schema.json +50 -0
  242. package/docs/spec/schemas/ArbitrationCase.v1.schema.json +133 -0
  243. package/docs/spec/schemas/ArbitrationVerdict.v1.schema.json +149 -0
  244. package/docs/spec/schemas/BundleHeadAttestation.v1.schema.json +21 -0
  245. package/docs/spec/schemas/ClosePackManifest.v1.schema.json +38 -0
  246. package/docs/spec/schemas/DelegationGrant.v1.schema.json +102 -0
  247. package/docs/spec/schemas/DisputeOpenEnvelope.v1.schema.json +78 -0
  248. package/docs/spec/schemas/EvidenceIndex.v1.schema.json +41 -0
  249. package/docs/spec/schemas/ExecutionIntent.v1.schema.json +85 -0
  250. package/docs/spec/schemas/FinancePackBundleManifest.v1.schema.json +38 -0
  251. package/docs/spec/schemas/FundingHold.v1.schema.json +46 -0
  252. package/docs/spec/schemas/GovernancePolicy.v1.schema.json +45 -0
  253. package/docs/spec/schemas/GovernancePolicy.v2.schema.json +70 -0
  254. package/docs/spec/schemas/InteractionDirectionMatrix.v1.schema.json +43 -0
  255. package/docs/spec/schemas/InvoiceBundleManifest.v1.schema.json +38 -0
  256. package/docs/spec/schemas/InvoiceClaim.v1.schema.json +39 -0
  257. package/docs/spec/schemas/MarketplaceAcceptance.v2.schema.json +53 -0
  258. package/docs/spec/schemas/MarketplaceOffer.v2.schema.json +61 -0
  259. package/docs/spec/schemas/MeteringReport.v1.schema.json +45 -0
  260. package/docs/spec/schemas/OperatorAction.v1.schema.json +113 -0
  261. package/docs/spec/schemas/PolicyDecision.v1.schema.json +74 -0
  262. package/docs/spec/schemas/PricingMatrix.v1.schema.json +24 -0
  263. package/docs/spec/schemas/PricingMatrixSignatures.v1.schema.json +24 -0
  264. package/docs/spec/schemas/PricingMatrixSignatures.v2.schema.json +24 -0
  265. package/docs/spec/schemas/ProduceCliOutput.v1.schema.json +107 -0
  266. package/docs/spec/schemas/ProofBundleManifest.v1.schema.json +37 -0
  267. package/docs/spec/schemas/PublicKeys.v1.schema.json +33 -0
  268. package/docs/spec/schemas/ReleaseIndex.v1.schema.json +45 -0
  269. package/docs/spec/schemas/ReleaseIndexSignature.v1.schema.json +16 -0
  270. package/docs/spec/schemas/ReleaseIndexSignatures.v1.schema.json +16 -0
  271. package/docs/spec/schemas/ReleaseTrust.v1.schema.json +15 -0
  272. package/docs/spec/schemas/ReleaseTrust.v2.schema.json +37 -0
  273. package/docs/spec/schemas/RemoteSignerPublicKeyResponse.v1.schema.json +14 -0
  274. package/docs/spec/schemas/RemoteSignerRequest.v1.schema.json +24 -0
  275. package/docs/spec/schemas/RemoteSignerResponse.v1.schema.json +10 -0
  276. package/docs/spec/schemas/RemoteSignerSignRequest.v1.schema.json +27 -0
  277. package/docs/spec/schemas/RemoteSignerSignResponse.v1.schema.json +16 -0
  278. package/docs/spec/schemas/ReputationEvent.v1.schema.json +164 -0
  279. package/docs/spec/schemas/RevocationList.v1.schema.json +51 -0
  280. package/docs/spec/schemas/SettlementAdjustment.v1.schema.json +44 -0
  281. package/docs/spec/schemas/SettlementDecisionRecord.v1.schema.json +66 -0
  282. package/docs/spec/schemas/SettlementDecisionRecord.v2.schema.json +149 -0
  283. package/docs/spec/schemas/SettlementDecisionReport.v1.schema.json +61 -0
  284. package/docs/spec/schemas/SettlementReceipt.v1.schema.json +135 -0
  285. package/docs/spec/schemas/SlaDefinition.v1.schema.json +33 -0
  286. package/docs/spec/schemas/SlaEvaluation.v1.schema.json +26 -0
  287. package/docs/spec/schemas/TenantSettings.v1.schema.json +90 -0
  288. package/docs/spec/schemas/TenantSettings.v2.schema.json +161 -0
  289. package/docs/spec/schemas/TimestampProof.v1.schema.json +17 -0
  290. package/docs/spec/schemas/ToolCallAgreement.v1.schema.json +34 -0
  291. package/docs/spec/schemas/ToolCallEvidence.v1.schema.json +45 -0
  292. package/docs/spec/schemas/ToolManifest.v1.schema.json +54 -0
  293. package/docs/spec/schemas/VerificationReport.v1.schema.json +83 -0
  294. package/docs/spec/schemas/VerifyAboutOutput.v1.schema.json +54 -0
  295. package/docs/spec/schemas/VerifyCliOutput.v1.schema.json +75 -0
  296. package/docs/spec/schemas/VerifyReleaseOutput.v1.schema.json +47 -0
  297. package/docs/spec/x402-error-codes.v1.txt +35 -0
  298. package/docs/templates/buyer-email.txt +18 -0
  299. package/docs/templates/buyer-one-pager.md +24 -0
  300. package/package.json +53 -6
  301. package/scripts/acceptance/full-stack.mjs +734 -0
  302. package/scripts/acceptance/full-stack.sh +99 -0
  303. package/scripts/audit/build-audit-packet.mjs +242 -0
  304. package/scripts/backup-pg.sh +45 -0
  305. package/scripts/backup-restore/README.md +18 -0
  306. package/scripts/backup-restore/capture-state.mjs +130 -0
  307. package/scripts/backup-restore/client.mjs +97 -0
  308. package/scripts/backup-restore/seed-workload.mjs +235 -0
  309. package/scripts/backup-restore/verify-state.mjs +139 -0
  310. package/scripts/backup-restore-test.sh +217 -0
  311. package/scripts/chaos.js +221 -0
  312. package/scripts/ci/build-launch-cutover-packet.mjs +304 -0
  313. package/scripts/ci/build-self-serve-benchmark-report.mjs +122 -0
  314. package/scripts/ci/changelog-guard.mjs +145 -0
  315. package/scripts/ci/check-kernel-v0-launch-gate.mjs +233 -0
  316. package/scripts/ci/check-secret-hygiene.mjs +78 -0
  317. package/scripts/ci/check-version-consistency.mjs +42 -0
  318. package/scripts/ci/cli-pack-smoke.mjs +160 -0
  319. package/scripts/ci/flake-budget-guard.mjs +68 -0
  320. package/scripts/ci/generate-error-codes.mjs +54 -0
  321. package/scripts/ci/lib/lighthouse-tracker.mjs +90 -0
  322. package/scripts/ci/lib/self-serve-launch-gate.mjs +89 -0
  323. package/scripts/ci/npm-pack-smoke.mjs +454 -0
  324. package/scripts/ci/run-10x-throughput-drill.mjs +318 -0
  325. package/scripts/ci/run-10x-throughput-incident-rehearsal.mjs +368 -0
  326. package/scripts/ci/run-arbitration-workspace-browser-e2e.sh +22 -0
  327. package/scripts/ci/run-circle-sandbox-smoke.mjs +237 -0
  328. package/scripts/ci/run-go-live-gate.mjs +150 -0
  329. package/scripts/ci/run-kernel-v0-ship-gate.mjs +97 -0
  330. package/scripts/ci/run-mcp-host-cert-matrix.mjs +201 -0
  331. package/scripts/ci/run-mcp-host-smoke.mjs +473 -0
  332. package/scripts/ci/run-offline-verification-parity-gate.mjs +762 -0
  333. package/scripts/ci/run-onboarding-host-success-gate.mjs +516 -0
  334. package/scripts/ci/run-onboarding-policy-slo-gate.mjs +537 -0
  335. package/scripts/ci/run-production-cutover-gate.mjs +540 -0
  336. package/scripts/ci/run-public-openclaw-npx-smoke.mjs +148 -0
  337. package/scripts/ci/run-release-promotion-guard.mjs +756 -0
  338. package/scripts/ci/run-self-serve-launch-gate.mjs +56 -0
  339. package/scripts/ci/runtime-import-smoke.mjs +58 -0
  340. package/scripts/ci/update-lighthouse-tracker.mjs +112 -0
  341. package/scripts/closepack/lib.mjs +286 -0
  342. package/scripts/collect-debug.sh +263 -0
  343. package/scripts/demo/compositional-settlement-3hop.mjs +237 -0
  344. package/scripts/demo/delivery-robot/export-ui-fixture.mjs +188 -0
  345. package/scripts/demo/delivery-robot/generate.mjs +377 -0
  346. package/scripts/demo/kernel-agent-goes-shopping.mjs +202 -0
  347. package/scripts/demo/magic-link-first-green.mjs +118 -0
  348. package/scripts/demo/magic-link-kind-smoke.mjs +577 -0
  349. package/scripts/demo/mcp-paid-exa.mjs +1110 -0
  350. package/scripts/dev/billing-doctor.sh +145 -0
  351. package/scripts/dev/billing-smoke-prod.sh +219 -0
  352. package/scripts/dev/billing-webhook-replay.sh +161 -0
  353. package/scripts/dev/env.dev.example +29 -0
  354. package/scripts/dev/env.sh +37 -0
  355. package/scripts/dev/new-sdk-key.sh +81 -0
  356. package/scripts/dev/sdk-first-run.sh +21 -0
  357. package/scripts/dev/smoke-x402-gateway.sh +115 -0
  358. package/scripts/dev/start-api.sh +24 -0
  359. package/scripts/doctor/mcp-host.mjs +120 -0
  360. package/scripts/examples/produce-and-verify-jobproof.mjs +191 -0
  361. package/scripts/examples/sdk-first-paid-rfq.py +105 -0
  362. package/scripts/examples/sdk-first-verified-run.mjs +85 -0
  363. package/scripts/examples/sdk-first-verified-run.py +99 -0
  364. package/scripts/examples/sdk-tenant-analytics.mjs +103 -0
  365. package/scripts/examples/sdk-tenant-analytics.py +118 -0
  366. package/scripts/finance-pack/bundle.mjs +284 -0
  367. package/scripts/fixtures/generate-bundle-fixtures.mjs +877 -0
  368. package/scripts/governance/export.mjs +169 -0
  369. package/scripts/load/delivery-stress.k6.js +183 -0
  370. package/scripts/load/ingest-burst.k6.js +236 -0
  371. package/scripts/load/run-delivery-load.js +66 -0
  372. package/scripts/load/webhook-receiver.js +131 -0
  373. package/scripts/magic-link/migrate-run-records-to-db.mjs +35 -0
  374. package/scripts/mcp/probe.mjs +238 -0
  375. package/scripts/mcp/settld-mcp-http-gateway.mjs +178 -0
  376. package/scripts/mcp/settld-mcp-server.mjs +1511 -0
  377. package/scripts/openapi/write.mjs +13 -0
  378. package/scripts/ops/bootstrap-tenant-conformance.mjs +185 -0
  379. package/scripts/ops/build-x402-pilot-reliability-report.mjs +489 -0
  380. package/scripts/ops/check-x402-receipt-sample.mjs +181 -0
  381. package/scripts/ops/design-partner-run-packet.mjs +466 -0
  382. package/scripts/ops/dispute-finance-reconciliation-packet.mjs +313 -0
  383. package/scripts/ops/hosted-baseline-evidence.mjs +890 -0
  384. package/scripts/ops/money-rails-chargeback-evidence.mjs +509 -0
  385. package/scripts/ops/money-rails-reconcile-evidence.mjs +180 -0
  386. package/scripts/ops/p0-seed-money-rail-operation.mjs +432 -0
  387. package/scripts/ops/run-x402-hitl-smoke.mjs +607 -0
  388. package/scripts/pilot/finance-pack.mjs +495 -0
  389. package/scripts/pilot/fixtures/robot-keypair.json +4 -0
  390. package/scripts/pilot/fixtures/server-signer.json +4 -0
  391. package/scripts/policy/cli.mjs +600 -0
  392. package/scripts/profile/cli.mjs +1324 -0
  393. package/scripts/proof-bundle/job.mjs +109 -0
  394. package/scripts/proof-bundle/lib.mjs +92 -0
  395. package/scripts/proof-bundle/month.mjs +103 -0
  396. package/scripts/provider/conformance-run.mjs +159 -0
  397. package/scripts/provider/keys-generate.mjs +135 -0
  398. package/scripts/provider/publish.mjs +420 -0
  399. package/scripts/quickstart/x402.mjs +334 -0
  400. package/scripts/register-entity-secret.mjs +102 -0
  401. package/scripts/release/build-artifacts.mjs +181 -0
  402. package/scripts/release/generate-release-index.mjs +112 -0
  403. package/scripts/release/release-index-lib.mjs +232 -0
  404. package/scripts/release/sign-release-index.mjs +85 -0
  405. package/scripts/release/validate-release-assets.mjs +170 -0
  406. package/scripts/release/verify-release.mjs +261 -0
  407. package/scripts/restore-pg.sh +34 -0
  408. package/scripts/scaffold/create-settld-paid-tool.mjs +19 -0
  409. package/scripts/sdk/smoke-python.py +30 -0
  410. package/scripts/sdk/smoke.mjs +16 -0
  411. package/scripts/settlement/x402-batch-worker.mjs +1091 -0
  412. package/scripts/setup/circle-bootstrap.mjs +310 -0
  413. package/scripts/setup/host-config.mjs +617 -0
  414. package/scripts/setup/onboard.mjs +1337 -0
  415. package/scripts/setup/openclaw-onboard.mjs +423 -0
  416. package/scripts/setup/wizard.mjs +986 -0
  417. package/scripts/slo/check.mjs +239 -0
  418. package/scripts/smoke/k8s-smoke.mjs +214 -0
  419. package/scripts/spec/generate-protocol-vectors.mjs +1019 -0
  420. package/scripts/test/check-no-generated-artifacts.sh +12 -0
  421. package/scripts/test/run.sh +59 -0
  422. package/scripts/trust/validate-trust-file.mjs +57 -0
  423. package/scripts/trust-config/rotate-settld-pay.mjs +277 -0
  424. package/scripts/trust-config/wizard.mjs +161 -0
  425. package/scripts/vendor-contract-test-lib.mjs +182 -0
  426. package/scripts/vendor-contract-test.mjs +55 -0
  427. package/scripts/vercel/build-mkdocs.sh +9 -0
  428. package/scripts/vercel/ignore-mkdocs.sh +25 -0
  429. package/scripts/vercel/install-mkdocs.sh +6 -0
  430. package/scripts/verify-pg.js +217 -0
  431. package/scripts/x402/receipt-verify.mjs +289 -0
  432. package/services/finance-sink/src/dedupe-store.js +29 -6
  433. package/services/receiver/src/dedupe-store.js +29 -5
  434. package/services/x402-gateway/Dockerfile +13 -0
  435. package/services/x402-gateway/README.md +58 -0
  436. package/services/x402-gateway/examples/upstream-mock.js +337 -0
  437. package/services/x402-gateway/src/server.js +1058 -0
  438. package/src/api/app.js +34658 -16940
  439. package/src/api/maintenance.js +70 -0
  440. package/src/api/middleware/trust-kernel.js +114 -0
  441. package/src/api/openapi.js +1778 -70
  442. package/src/api/persistence.js +456 -0
  443. package/src/api/server.js +81 -5
  444. package/src/api/store.js +1581 -62
  445. package/src/api/workers/deliveries.js +99 -4
  446. package/src/api/workers/insolvency-sweep.js +159 -0
  447. package/src/core/agent-card.js +69 -0
  448. package/src/core/agent-wallets.js +231 -0
  449. package/src/core/agreement-delegation.js +549 -0
  450. package/src/core/billing-plans.js +40 -6
  451. package/src/core/circle-reserve-adapter.js +845 -0
  452. package/src/core/event-policy.js +21 -2
  453. package/src/core/maintenance-locks.js +1 -0
  454. package/src/core/operator-action.js +303 -0
  455. package/src/core/paid-tool-manifest.js +318 -0
  456. package/src/core/policy-decision.js +322 -0
  457. package/src/core/policy-packs.js +207 -0
  458. package/src/core/profile-fingerprint.js +27 -0
  459. package/src/core/profile-simulation-reasons.js +84 -0
  460. package/src/core/profile-templates.js +242 -0
  461. package/src/core/provider-publish-conformance.js +525 -0
  462. package/src/core/provider-publish-proof.js +396 -0
  463. package/src/core/provider-quote-signature.js +170 -0
  464. package/src/core/settld-keys.js +112 -0
  465. package/src/core/settld-pay-token.js +344 -0
  466. package/src/core/settlement-kernel.js +239 -2
  467. package/src/core/settlement-verifier.js +335 -0
  468. package/src/core/tool-call-agreement.js +112 -0
  469. package/src/core/tool-call-evidence.js +144 -0
  470. package/src/core/tool-provider-signature.js +98 -0
  471. package/src/core/wallet-assignment-resolver.js +129 -0
  472. package/src/core/wallet-provider-bootstrap.js +365 -0
  473. package/src/core/x402-escalation-override.js +258 -0
  474. package/src/core/x402-gate.js +118 -0
  475. package/src/core/x402-provider-refund-decision.js +220 -0
  476. package/src/core/x402-receipt-verifier.js +708 -0
  477. package/src/core/x402-reversal-command.js +251 -0
  478. package/src/core/x402-wallet-issuer-decision.js +252 -0
  479. package/src/core/zk-verifier.js +300 -0
  480. package/src/db/migrations/029_reputation_event_index.sql +54 -0
  481. package/src/db/migrations/030_artifacts_source_event_unique_job_only.sql +15 -0
  482. package/src/db/pg.js +18 -7
  483. package/src/db/store-pg.js +1508 -111
@@ -0,0 +1,317 @@
1
+ # Quickstart: x402 Gateway (Verify Before Release)
2
+
3
+ Goal: in ~10 minutes, run a local Settld API + a mock x402 upstream + the Settld x402 gateway, then complete a `402 -> authorize -> verify -> release` flow and get a deterministic receipt trail.
4
+
5
+ ## TL;DR (one command)
6
+
7
+ ```bash
8
+ npm ci && npm run quickstart:x402
9
+ ```
10
+
11
+ Success: prints `OK`, `gateId=...`, and `gateStateUrl=...`.
12
+
13
+ By default the script keeps services running until you press Ctrl+C. To run once and exit (CI-friendly):
14
+
15
+ ```bash
16
+ npm ci && SETTLD_QUICKSTART_KEEP_ALIVE=0 npm run quickstart:x402
17
+ ```
18
+
19
+ If you already ran `npm ci` in this repo, you can skip it:
20
+
21
+ ```bash
22
+ npm run quickstart:x402
23
+ ```
24
+
25
+ Ports can be overridden if you already have something running on `3000/8402/9402`:
26
+
27
+ - `SETTLD_QUICKSTART_API_PORT`
28
+ - `SETTLD_QUICKSTART_GATEWAY_PORT`
29
+ - `SETTLD_QUICKSTART_UPSTREAM_PORT`
30
+
31
+ ## 0) Prereqs
32
+
33
+ - Node.js 20+
34
+ - Bash (for the copy/paste snippets below)
35
+ - `curl`
36
+
37
+ Optional:
38
+
39
+ - Docker Engine 20.10+ (only if you want to run the gateway via container)
40
+ - Linux: this quickstart includes Linux-safe Docker networking options (do not assume `host.docker.internal` works without configuration).
41
+
42
+ ## 1) Start a local Settld API (in-memory)
43
+
44
+ From repo root:
45
+
46
+ ```bash
47
+ npm ci
48
+ ```
49
+
50
+ Then:
51
+
52
+ ```bash
53
+ PROXY_OPS_TOKEN=tok_ops PORT=3000 npm run dev:api
54
+ ```
55
+
56
+ In another terminal, confirm:
57
+
58
+ ```bash
59
+ curl -fsS http://127.0.0.1:3000/healthz
60
+ ```
61
+
62
+ ## 2) Mint an API key (no jq required)
63
+
64
+ This mints a tenant API key using the dev ops token (`PROXY_OPS_TOKEN`). The gateway uses `SETTLD_API_KEY` (not the ops token) to call Settld.
65
+
66
+ ```bash
67
+ SETTLD_API_KEY="$(
68
+ set -euo pipefail
69
+ curl -fsS -X POST http://127.0.0.1:3000/ops/api-keys \
70
+ -H "x-proxy-ops-token: tok_ops" \
71
+ -H "authorization: Bearer tok_ops" \
72
+ -H "x-proxy-tenant-id: tenant_default" \
73
+ -H "content-type: application/json" \
74
+ -d '{"scopes":["ops_read","ops_write","finance_read","finance_write","audit_read"],"description":"x402 gateway quickstart"}' \
75
+ | node -e 'let d="";process.stdin.on("data",c=>d+=c);process.stdin.on("end",()=>{const j=JSON.parse(d);if(!j?.keyId||!j?.secret){console.error("unexpected response:",d);process.exit(1)}process.stdout.write(`${j.keyId}.${j.secret}`)})'
76
+ )"
77
+ export SETTLD_API_KEY
78
+ if [ -n "$SETTLD_API_KEY" ]; then
79
+ echo "SETTLD_API_KEY minted"
80
+ else
81
+ echo "FAILED: SETTLD_API_KEY empty" >&2
82
+ fi
83
+ ```
84
+
85
+ ## 3) Start a mock x402 upstream
86
+
87
+ The upstream will return `HTTP 402` with both `x-payment-required` and `PAYMENT-REQUIRED` until the gateway retries with a `SettldPay` authorization token.
88
+
89
+ ```bash
90
+ PORT=9402 \
91
+ SETTLD_PAY_KEYSET_URL='http://127.0.0.1:3000/.well-known/settld-keys.json' \
92
+ node services/x402-gateway/examples/upstream-mock.js
93
+ ```
94
+
95
+ If your Settld API is not on port `3000`, set `SETTLD_PAY_KEYSET_URL` to the correct `/.well-known/settld-keys.json` URL so the provider can verify SettldPay tokens offline.
96
+
97
+ In another terminal:
98
+
99
+ ```bash
100
+ curl -fsS http://127.0.0.1:9402/healthz
101
+ ```
102
+
103
+ ### Strict request binding for side-effecting tools
104
+
105
+ For side-effecting tools, set provider offer `requestBindingMode: "strict"` (or `idempotency: "side_effecting"` in manifests that feed the provider wrapper). In strict mode, provider-kit computes a canonical request fingerprint and requires the SettldPay token payload to carry a matching `requestBindingSha256`. Replaying the same token with a different path/query/body is rejected with `402` and code `SETTLD_PAY_REQUEST_BINDING_MISMATCH`.
106
+
107
+ ## 3.5) Provider signature key (demo)
108
+
109
+ This quickstart uses provider-signed responses as a minimal correctness check:
110
+
111
+ - the upstream mock signs a response hash with Ed25519
112
+ - the gateway verifies the signature before releasing funds
113
+
114
+ Export the upstream mock's dev-only public key:
115
+
116
+ ```bash
117
+ export X402_PROVIDER_PUBLIC_KEY_PEM="$(cat <<'EOF'
118
+ -----BEGIN PUBLIC KEY-----
119
+ MCowBQYDK2VwAyEA7zJ+oQLAO6F4Xewe7yJB1mv5TxsLo5bGZI7ZJPuFB6s=
120
+ -----END PUBLIC KEY-----
121
+ EOF
122
+ )"
123
+ ```
124
+
125
+ ## 4) Start the x402 gateway (thin proxy)
126
+
127
+ ### Option A: run from source (fastest)
128
+
129
+ ```bash
130
+ SETTLD_API_URL="http://127.0.0.1:3000" \
131
+ SETTLD_API_KEY="$SETTLD_API_KEY" \
132
+ UPSTREAM_URL="http://127.0.0.1:9402" \
133
+ HOLDBACK_BPS=0 \
134
+ DISPUTE_WINDOW_MS=3600000 \
135
+ X402_AUTOFUND=1 \
136
+ X402_PROVIDER_PUBLIC_KEY_PEM="$X402_PROVIDER_PUBLIC_KEY_PEM" \
137
+ PORT=8402 \
138
+ npm run dev:x402-gateway
139
+ ```
140
+
141
+ Notes:
142
+
143
+ - `X402_AUTOFUND=1` is for local demo only. It simulates funding the payer so escrow holds can be created without a real payment rail.
144
+
145
+ ### Option B: run via Docker (same config surface)
146
+
147
+ Important:
148
+
149
+ - On macOS/Windows (Docker Desktop), `host.docker.internal` works by default.
150
+ - On Linux, `host.docker.internal` is usually not defined. If you run the gateway in Docker while your Settld API + mock upstream are running on the host, use one of the Linux commands below:
151
+ - Recommended: `--add-host=host.docker.internal:host-gateway` (Docker Engine 20.10+)
152
+ - Alternative: `--network host` and use `127.0.0.1` URLs (not available on Docker Desktop; often not supported with rootless Docker)
153
+
154
+ Pull the image:
155
+
156
+ ```bash
157
+ docker pull ghcr.io/aidenlippert/settld/x402-gateway:latest
158
+ ```
159
+
160
+ If `docker pull` fails with `denied`, either:
161
+
162
+ - build locally from this repo (no dependencies; copies `src/core` + `services/x402-gateway`):
163
+
164
+ ```bash
165
+ docker build -t settld/x402-gateway:local -f services/x402-gateway/Dockerfile .
166
+ ```
167
+
168
+ and replace `ghcr.io/aidenlippert/settld/x402-gateway:latest` with `settld/x402-gateway:local` in the `docker run` commands below.
169
+
170
+ macOS/Windows (Docker Desktop):
171
+
172
+ ```bash
173
+ docker run --rm -p 8402:8402 \
174
+ -e SETTLD_API_URL="http://host.docker.internal:3000" \
175
+ -e SETTLD_API_KEY="$SETTLD_API_KEY" \
176
+ -e UPSTREAM_URL="http://host.docker.internal:9402" \
177
+ -e HOLDBACK_BPS=0 \
178
+ -e DISPUTE_WINDOW_MS=3600000 \
179
+ -e X402_AUTOFUND=1 \
180
+ -e X402_PROVIDER_PUBLIC_KEY_PEM="$X402_PROVIDER_PUBLIC_KEY_PEM" \
181
+ -e PORT=8402 \
182
+ ghcr.io/aidenlippert/settld/x402-gateway:latest
183
+ ```
184
+
185
+ Linux (recommended, bridge networking):
186
+
187
+ ```bash
188
+ docker run --rm -p 8402:8402 \
189
+ --add-host=host.docker.internal:host-gateway \
190
+ -e SETTLD_API_URL="http://host.docker.internal:3000" \
191
+ -e SETTLD_API_KEY="$SETTLD_API_KEY" \
192
+ -e UPSTREAM_URL="http://host.docker.internal:9402" \
193
+ -e HOLDBACK_BPS=0 \
194
+ -e DISPUTE_WINDOW_MS=3600000 \
195
+ -e X402_AUTOFUND=1 \
196
+ -e X402_PROVIDER_PUBLIC_KEY_PEM="$X402_PROVIDER_PUBLIC_KEY_PEM" \
197
+ -e PORT=8402 \
198
+ ghcr.io/aidenlippert/settld/x402-gateway:latest
199
+ ```
200
+
201
+ Linux alternative (host networking):
202
+
203
+ ```bash
204
+ docker run --rm --network host \
205
+ -e SETTLD_API_URL="http://127.0.0.1:3000" \
206
+ -e SETTLD_API_KEY="$SETTLD_API_KEY" \
207
+ -e UPSTREAM_URL="http://127.0.0.1:9402" \
208
+ -e HOLDBACK_BPS=0 \
209
+ -e DISPUTE_WINDOW_MS=3600000 \
210
+ -e X402_AUTOFUND=1 \
211
+ -e X402_PROVIDER_PUBLIC_KEY_PEM="$X402_PROVIDER_PUBLIC_KEY_PEM" \
212
+ -e PORT=8402 \
213
+ ghcr.io/aidenlippert/settld/x402-gateway:latest
214
+ ```
215
+
216
+ Confirm:
217
+
218
+ ```bash
219
+ curl -fsS http://127.0.0.1:8402/healthz
220
+ ```
221
+
222
+ ## 5) Drive the 402 -> verify -> release flow
223
+
224
+ ### 5.0 One-shot smoke test (copy/paste; fails fast)
225
+
226
+ This asserts the expected HTTP status codes and (with the default upstream + gateway config in this doc) checks that the released/refunded cents are consistent.
227
+
228
+ ```bash
229
+ set -euo pipefail
230
+
231
+ h402="$(curl -sS -D - -o /dev/null http://127.0.0.1:8402/resource)"
232
+ echo "$h402" | grep -qE '^HTTP/.* 402 '
233
+ echo "$h402" | grep -qi '^x-payment-required:'
234
+ amount_cents="$(echo "$h402" | tr -d '\r' | grep -i '^x-payment-required:' | sed -n 's/.*amountCents=\([0-9][0-9]*\).*/\1/p' | head -n 1)"
235
+ test -n "$amount_cents"
236
+ GATE_ID="$(echo "$h402" | awk 'tolower($1) == "x-settld-gate-id:" {print $2}' | tr -d '\r' | head -n 1)"
237
+ test -n "$GATE_ID"
238
+ echo "gateId=$GATE_ID"
239
+
240
+ h200="$(curl -sS -D - -o /dev/null http://127.0.0.1:8402/resource -H "x-settld-gate-id: $GATE_ID")"
241
+ echo "$h200" | grep -qE '^HTTP/.* 200 '
242
+
243
+ settlement_status="$(echo "$h200" | awk 'tolower($1) == "x-settld-settlement-status:" {print $2}' | tr -d '\r' | head -n 1)"
244
+ released_cents="$(echo "$h200" | awk 'tolower($1) == "x-settld-released-amount-cents:" {print $2}' | tr -d '\r' | head -n 1)"
245
+ refunded_cents="$(echo "$h200" | awk 'tolower($1) == "x-settld-refunded-amount-cents:" {print $2}' | tr -d '\r' | head -n 1)"
246
+ test "$settlement_status" = "released"
247
+ test "$released_cents" = "$amount_cents"
248
+ test "$refunded_cents" = "0"
249
+
250
+ echo "OK"
251
+ ```
252
+
253
+ Notes:
254
+
255
+ - If you set `HOLDBACK_BPS>0`, the gateway may emit `x-settld-holdback-*` headers (a follow-on settlement).
256
+
257
+ ### 5.1 First request (expect 402 + x-settld-gate-id)
258
+
259
+ ```bash
260
+ curl -isS http://127.0.0.1:8402/resource | sed -n '1,40p'
261
+ ```
262
+
263
+ Extract the gate id:
264
+
265
+ ```bash
266
+ GATE_ID="$(
267
+ curl -isS http://127.0.0.1:8402/resource \
268
+ | awk 'tolower($1) == "x-settld-gate-id:" {print $2}' \
269
+ | tr -d '\r' \
270
+ | head -n 1
271
+ )"
272
+ echo "gateId=$GATE_ID"
273
+ ```
274
+
275
+ ### 5.2 Second request (retry with gate id; gateway auto-authorizes payment)
276
+
277
+ ```bash
278
+ curl -isS http://127.0.0.1:8402/resource \
279
+ -H "x-settld-gate-id: $GATE_ID" | sed -n '1,80p'
280
+ ```
281
+
282
+ You should see:
283
+
284
+ - `HTTP 200`
285
+ - `x-settld-response-sha256: ...`
286
+ - `x-settld-verification-status: green|red`
287
+ - `x-settld-verification-codes: ...` (optional; reason codes when verification is forced red)
288
+ - `x-settld-settlement-status: released`
289
+ - `x-settld-released-amount-cents`, `x-settld-refunded-amount-cents`
290
+ - `x-settld-holdback-status`, `x-settld-holdback-amount-cents` (when `HOLDBACK_BPS>0`)
291
+
292
+ ## 6) Inspect the gate state (optional)
293
+
294
+ ```bash
295
+ curl -fsS "http://127.0.0.1:3000/x402/gate/$GATE_ID" \
296
+ -H "x-proxy-tenant-id: tenant_default" \
297
+ -H "authorization: Bearer $SETTLD_API_KEY" \
298
+ -H "x-settld-protocol: 1.0"
299
+ ```
300
+
301
+ You can also inspect the gateway signing keyset used for `SettldPay` verification:
302
+
303
+ ```bash
304
+ curl -fsS "http://127.0.0.1:3000/.well-known/settld-keys.json"
305
+ ```
306
+
307
+ ## Troubleshooting
308
+
309
+ - If the gateway never returns `x-settld-gate-id`, your upstream likely isn’t returning `402` with `x-payment-required`.
310
+ - If `/x402/gate/verify` fails with insufficient funds, you forgot `X402_AUTOFUND=1` (local demo) or you need a real funding path wired in.
311
+ - Linux + Docker: if the gateway container can’t reach `http://host.docker.internal:3000` / `:9402`, use `--add-host=host.docker.internal:host-gateway` or `--network host` (and point `SETTLD_API_URL`/`UPSTREAM_URL` at `http://127.0.0.1:...`).
312
+ - If you see `EADDRINUSE` (port already in use), pick different ports (the one-command quickstart supports `SETTLD_QUICKSTART_API_PORT`, `SETTLD_QUICKSTART_UPSTREAM_PORT`, and `SETTLD_QUICKSTART_GATEWAY_PORT`).
313
+
314
+ If you tried and failed:
315
+
316
+ - Run `./scripts/collect-debug.sh` and attach the resulting `settld-debug-*.tar.gz` to a GitHub issue using the "Quickstart failure" template:
317
+ - https://github.com/aidenlippert/settld/issues/new?template=quickstart-failure.yml
package/docs/README.md ADDED
@@ -0,0 +1,33 @@
1
+ # Settld Documentation Index
2
+
3
+ This root docs index is for GitBook sync setups using project directory `docs`.
4
+
5
+ For curated public docs, start here:
6
+
7
+ - [Settld Docs home](./gitbook/README.md)
8
+ - [Quickstart](./gitbook/quickstart.md)
9
+ - [Quickstart: Profiles CLI](./QUICKSTART_PROFILES.md)
10
+ - [Core Primitives](./gitbook/core-primitives.md)
11
+ - [API Reference](./gitbook/api-reference.md)
12
+ - [Conformance](./gitbook/conformance.md)
13
+ - [Closepacks](./gitbook/closepacks.md)
14
+ - [Guides](./gitbook/guides.md)
15
+ - [Security Model](./gitbook/security-model.md)
16
+ - [FAQ](./gitbook/faq.md)
17
+
18
+ ## Fastest onboarding path
19
+
20
+ 1. Run `settld setup` (or `./bin/settld.js setup`) with your host, tenant, and API key.
21
+ 2. Activate your host and run `npm run mcp:probe`.
22
+ 3. Run `npm run demo:mcp-paid-exa`.
23
+ 4. Verify the first receipt:
24
+
25
+ ```bash
26
+ jq -c 'first' artifacts/mcp-paid-exa/*/x402-receipts.export.jsonl > /tmp/settld-first-receipt.json
27
+ settld x402 receipt verify /tmp/settld-first-receipt.json --format json --json-out /tmp/settld-first-receipt.verify.json
28
+ ```
29
+
30
+ Reference docs:
31
+
32
+ - `docs/QUICKSTART_MCP_HOSTS.md`
33
+ - `docs/QUICKSTART_MCP.md`
@@ -0,0 +1,182 @@
1
+ # Release Checklist (v1.0.0+)
2
+
3
+ This checklist is the “no surprises” gate for shipping Settld as a product (not just a repo).
4
+
5
+ ## Preconditions
6
+
7
+ - `npm test` is green on main.
8
+ - Main-branch release gate jobs are green in `.github/workflows/tests.yml` for the release commit:
9
+ - `noo_44_47_48_regressions` (NOO-44/47/48 fail-closed regression lane)
10
+ - `kernel_v0_ship_gate`
11
+ - `production_cutover_gate`
12
+ - `offline_verification_parity_gate` (NOO-50)
13
+ - `onboarding_host_success_gate`
14
+ - Public package smoke for OpenClaw onboarding is green:
15
+ - `npm run test:ci:public-openclaw-npx-smoke`
16
+ - `CHANGELOG.md` is updated and accurate.
17
+ - Protocol v1 freeze gate is satisfied (no accidental v1 schema/vector drift).
18
+ - Minimum production topology is defined for the target environment:
19
+ - `docs/ops/MINIMUM_PRODUCTION_TOPOLOGY.md`
20
+ - Production deployment checklist is prepared for this release:
21
+ - `docs/ops/PRODUCTION_DEPLOYMENT_CHECKLIST.md`
22
+ - Staging billing smoke secrets are configured for `.github/workflows/release.yml`:
23
+ - `SETTLD_STAGING_BASE_URL`
24
+ - `SETTLD_STAGING_OPS_TOKEN`
25
+ - npm publish secret is configured for `.github/workflows/release.yml` if you want direct registry distribution:
26
+ - `NPM_TOKEN`
27
+ - Optional launch cutover packet signing inputs are configured for `.github/workflows/go-live-gate.yml` if signed packets are required:
28
+ - secret: `LAUNCH_CUTOVER_PACKET_SIGNING_PRIVATE_KEY_PEM`
29
+ - variable: `LAUNCH_CUTOVER_PACKET_SIGNATURE_KEY_ID`
30
+ - PyPI Trusted Publisher is configured for `.github/workflows/release.yml` and the `pypi` GitHub environment is allowed.
31
+ - PyPI Trusted Publisher is configured for `.github/workflows/python-pypi.yml` and the `pypi` GitHub environment is allowed (if using the Python-only lane).
32
+ - TestPyPI Trusted Publisher is configured for `.github/workflows/python-testpypi.yml` and the `testpypi` GitHub environment is allowed.
33
+
34
+ ## Required release artifacts
35
+
36
+ For a v1 freeze release, the GitHub Release MUST include:
37
+
38
+ - npm tarballs (`*.tgz`) + `npm-SHA256SUMS`
39
+ - includes `settld-*.tgz` (CLI distribution for `npx --package ... settld ...`)
40
+ - optional registry publish lane (if `NPM_TOKEN` present) publishes `settld`, `settld-api-sdk`, `@settld/provider-kit`, and `create-settld-paid-tool`
41
+ - Python distributions (`*.whl`, `*.tar.gz`) + `python-SHA256SUMS`
42
+ - `conformance-v1.tar.gz` + `conformance-v1-SHA256SUMS`
43
+ - `settld-audit-packet-v1.zip` + `settld-audit-packet-v1.zip.sha256`
44
+ - `release_index_v1.json` + `release_index_v1.sig` (signed release manifest)
45
+ - `release-promotion-guard.json` (NOO-65 promotion guard report)
46
+
47
+ Release-gate evidence should also include:
48
+
49
+ - `billing-smoke-prod.log`
50
+ - `billing-smoke-status.json`
51
+ - `npm-postpublish-smoke-<version>` artifact (when `NPM_TOKEN` is configured), containing:
52
+ - `provider-kit-npm-view-version.txt`
53
+ - `create-settld-paid-tool-npm-view-version.txt`
54
+ - `settld-npx-version.txt`
55
+ - `settld-kernel-cases.txt`
56
+ - `settld-help.txt`
57
+ - `create-settld-paid-tool-help.txt`
58
+ - `npm-postpublish-smoke.json`
59
+ - `artifacts/throughput/10x-drill-summary.json`
60
+ - `artifacts/gates/s13-go-live-gate.json`
61
+ - `artifacts/gates/s13-launch-cutover-packet.json`
62
+ - when signing is configured, packet includes `signature` with `schemaVersion=LaunchCutoverPacketSignature.v1`
63
+ - `artifacts/gates/production-cutover-gate.json`
64
+ - `artifacts/gates/offline-verification-parity-gate.json` (NOO-50)
65
+ - `artifacts/gates/onboarding-host-success-gate.json`
66
+ - `artifacts/gates/release-promotion-guard.json` (NOO-65)
67
+
68
+ See `docs/spec/SUPPLY_CHAIN.md` for the release-channel threat model and verification posture.
69
+
70
+ ## Local build + verification (recommended)
71
+
72
+ Build all artifacts locally:
73
+
74
+ ```sh
75
+ python3 -m pip install --disable-pip-version-check --no-input build
76
+ node scripts/release/build-artifacts.mjs --out dist/release-artifacts
77
+ ```
78
+
79
+ If you want to produce a locally-signed `ReleaseIndex.v1` too, provide a release signing key:
80
+
81
+ ```sh
82
+ export SETTLD_RELEASE_SIGNING_PRIVATE_KEY_PEM="$(cat /path/to/release_ed25519_private_key.pem)"
83
+ node scripts/release/build-artifacts.mjs --out dist/release-artifacts --sign-release-index
84
+ ```
85
+
86
+ Verify release checksums:
87
+
88
+ ```sh
89
+ (cd dist/release-artifacts && sha256sum -c SHA256SUMS)
90
+ ```
91
+
92
+ Validate conformance from the produced artifacts:
93
+
94
+ ```sh
95
+ (cd dist/release-artifacts && tar -xzf conformance-v1.tar.gz)
96
+ node conformance-v1/run.mjs --node-bin packages/artifact-verify/bin/settld-verify.js
97
+ ```
98
+
99
+ Validate release assets (checksums + archive contents):
100
+
101
+ ```sh
102
+ node scripts/release/validate-release-assets.mjs --dir dist/release-artifacts
103
+ ```
104
+
105
+ Verify release index signature + artifact hashes:
106
+
107
+ ```sh
108
+ node scripts/release/verify-release.mjs --dir dist/release-artifacts --format json
109
+ ```
110
+
111
+ Preferred operator CLI (same contract, packaged):
112
+
113
+ ```sh
114
+ node packages/artifact-verify/bin/settld-release.js verify --dir dist/release-artifacts --trust-file trust/release-trust.json --format json --explain
115
+ ```
116
+
117
+ ## Release candidates
118
+
119
+ Use SemVer pre-release tags for RCs (e.g. `v1.0.0-rc.1`). RCs must meet the same artifact completeness and conformance gates as final releases.
120
+
121
+ Recommended Python dry-run before final tag release:
122
+
123
+ - Trigger `.github/workflows/python-testpypi.yml` with the target `version`.
124
+ - Confirm wheel/sdist publish succeeded on TestPyPI.
125
+ - Smoke-install from TestPyPI in a clean environment.
126
+
127
+ ## Tag + release
128
+
129
+ - Create and push a tag: `vX.Y.Z`.
130
+ - The `release` workflow will:
131
+ - build and attach npm artifacts + checksums
132
+ - build and attach Python distribution artifacts + checksums
133
+ - publish Python distributions to PyPI (Trusted Publishing/OIDC)
134
+ - attach conformance pack + checksum
135
+ - attach audit packet zip + checksum
136
+
137
+ ## Kernel v0 ship gate
138
+
139
+ Before any Kernel v0 release candidate or public OSS push, run:
140
+
141
+ ```sh
142
+ node scripts/ci/run-kernel-v0-ship-gate.mjs
143
+ ```
144
+
145
+ Required report:
146
+
147
+ - `artifacts/gates/kernel-v0-ship-gate.json`
148
+
149
+ Runbook:
150
+
151
+ - `docs/ops/KERNEL_V0_SHIP_GATE.md`
152
+
153
+ ## S13 launch gate (pre-cutover)
154
+
155
+ Before production cutover, run:
156
+
157
+ ```sh
158
+ node scripts/ci/run-go-live-gate.mjs
159
+ ```
160
+
161
+ Required gate reports:
162
+
163
+ - `artifacts/throughput/10x-drill-summary.json`
164
+ - `artifacts/throughput/10x-incident-rehearsal-summary.json`
165
+ - `artifacts/gates/production-cutover-gate.json`
166
+ - `artifacts/gates/s13-go-live-gate.json`
167
+ - `artifacts/gates/s13-launch-cutover-packet.json`
168
+ - Live deploy readiness run (manual workflow): `artifacts/gates/production-cutover-gate-prod.json`
169
+
170
+ Promotion guard order (fail-closed):
171
+
172
+ 1. NOO-50 parity gate report is generated on main (`artifacts/gates/offline-verification-parity-gate.json`).
173
+ 2. S13 go-live workflow report set is generated for the same release commit (`s13-go-live-gate.json` + `s13-launch-cutover-packet.json`).
174
+ 3. Release workflow binds all required gate artifacts (kernel, production cutover, NOO-50 parity, onboarding host success, S13 go-live, S13 launch packet, hosted baseline evidence) into NOO-65.
175
+ 4. Release workflow must emit `artifacts/gates/release-promotion-guard.json` with `verdict.ok=true` before artifact publish jobs execute.
176
+
177
+ Related runbooks:
178
+
179
+ - `docs/ops/THROUGHPUT_DRILL_10X.md`
180
+ - `docs/ops/GO_LIVE_GATE_S13.md`
181
+ - `docs/ops/LIGHTHOUSE_PRODUCTION_CLOSE.md`
182
+ - `docs/ops/MCP_COMPATIBILITY_MATRIX.md`
@@ -0,0 +1,82 @@
1
+ # Releasing Settld
2
+
3
+ This repo treats the **protocol** (docs + schemas + vectors + fixtures) as an API. Releases must be repeatable and reviewable.
4
+
5
+ See `docs/spec/VERSIONING.md` for “what requires a bump”.
6
+
7
+ ## Release checklist
8
+
9
+ See `docs/RELEASE_CHECKLIST.md` for the definitive artifact completeness requirements.
10
+
11
+ 1. Ensure `npm test` is green.
12
+ 2. Ensure fixture determinism gate passes (it’s part of `npm test`).
13
+ 3. Update `CHANGELOG.md`:
14
+ - Add a new version section (Keep a Changelog format).
15
+ - Call out any protocol-surface changes explicitly.
16
+ 4. Bump tool version(s) you ship:
17
+ - `packages/artifact-verify/package.json` `version`
18
+ - `packages/api-sdk-python/pyproject.toml` `project.version` (when shipping Python SDK changes)
19
+ - `SETTLD_VERSION` (repo/service version stamp)
20
+ 5. Run packaging smoke test:
21
+ - `node scripts/ci/npm-pack-smoke.mjs`
22
+ - `node scripts/ci/cli-pack-smoke.mjs`
23
+ - `node scripts/ci/run-public-openclaw-npx-smoke.mjs`
24
+ - `python3 -m build packages/api-sdk-python --sdist --wheel --outdir /tmp/settld-python-dist-smoke`
25
+ - Optionally generate full release artifacts locally: `npm run release:artifacts`
26
+ 6. Create a tag and push it:
27
+ - Tag format: `vX.Y.Z`
28
+ - `git tag -a vX.Y.Z -m "vX.Y.Z"`
29
+ - `git push origin vX.Y.Z`
30
+
31
+ On tag push, GitHub Actions builds and publishes release artifacts (Docker image, Helm chart, npm tarballs, Python wheel/sdist artifacts, SHA256SUMS).
32
+ If `NPM_TOKEN` is configured in repo secrets, the release lane also publishes:
33
+
34
+ - `settld` (CLI, so `npx settld ...` works directly),
35
+ - `settld-api-sdk` (JS SDK used by starter templates),
36
+ - `@settld/provider-kit` (provider middleware package),
37
+ - `create-settld-paid-tool` (scaffold CLI package).
38
+ After publish, the workflow runs registry smoke checks and uploads `npm-postpublish-smoke-<version>` artifacts with command outputs + JSON summary evidence.
39
+ The `release_gate` job also runs a staging billing smoke (`dev:billing:smoke:prod`) and uploads `billing-smoke-prod.log` + `billing-smoke-status.json` as gate artifacts.
40
+
41
+ Python package publishing uses PyPI Trusted Publishing (OIDC) via either:
42
+
43
+ - the `python_publish` job in `.github/workflows/release.yml` (full release lane), or
44
+ - `.github/workflows/python-pypi.yml` (Python-only publish lane).
45
+
46
+ Before the first publish, configure a PyPI trusted publisher for this repo/workflow and allow the `pypi` GitHub environment.
47
+
48
+ ## TestPyPI dry-run lane
49
+
50
+ Use `.github/workflows/python-testpypi.yml` as a manual pre-production lane:
51
+
52
+ 1. Ensure `packages/api-sdk-python/pyproject.toml` `project.version` matches the version you plan to publish.
53
+ 2. Run the `python-testpypi` workflow via `workflow_dispatch` and pass `version`.
54
+ 3. The workflow builds wheel+sdist, asserts versioned filenames, and publishes to TestPyPI using OIDC (`testpypi` environment).
55
+ 4. Validate installability from TestPyPI before running a production tag release.
56
+
57
+ ## Python-only PyPI lane
58
+
59
+ Use `.github/workflows/python-pypi.yml` when you want to publish just the Python SDK to PyPI without waiting for other release jobs (Docker/Helm/conformance/audit).
60
+
61
+ 1. Set `packages/api-sdk-python/pyproject.toml` `project.version` to the target version.
62
+ 2. Ensure PyPI trusted publishing is configured for workflow `python-pypi.yml` and environment `pypi`.
63
+ 3. Run the `python-pypi` workflow via `workflow_dispatch`.
64
+ 4. Confirm wheel/sdist publish completed on PyPI and smoke-install in a clean venv.
65
+
66
+ ## Release authenticity
67
+
68
+ Releases also publish a signed `ReleaseIndex.v1` (`release_index_v1.json` + `release_index_v1.sig`) to make artifact authenticity verifiable.
69
+
70
+ See `docs/spec/ReleaseIndex.v1.md` and `docs/spec/SUPPLY_CHAIN.md`.
71
+
72
+ The release workflow expects a repo secret named `SETTLD_RELEASE_SIGNING_PRIVATE_KEY_PEM` containing an Ed25519 private key PEM used only for signing release indexes.
73
+
74
+ The corresponding public key (and quorum policy, if used) is pinned in `trust/release-trust.json` and should be treated as a security-sensitive change (PR + review).
75
+
76
+ ## Protocol vectors / fixtures rotation
77
+
78
+ If a change *intentionally* changes protocol meaning (schemas/spec semantics/strictness/canonicalization/hashing), do not “let it drift”:
79
+
80
+ - Update specs and schemas together.
81
+ - Rotate vectors and/or add fixtures deliberately.
82
+ - Add a clear “Protocol change” entry to `CHANGELOG.md`.
@@ -0,0 +1,37 @@
1
+ # Repo Settings (Recommended)
2
+
3
+ These are GitHub-side settings we expect for a fail-closed kernel repo.
4
+
5
+ ## Branch Protection (main)
6
+
7
+ - Require a pull request before merging.
8
+ - Require status checks to pass before merging:
9
+ - `tests / pr_issue_link_guard`
10
+ - `tests / changelog_guard`
11
+ - `tests / unit_tests`
12
+ - `tests / openapi_drift`
13
+ - `tests / npm_pack_smoke (ubuntu-latest)`
14
+ - `tests / npm_pack_smoke (macos-latest)`
15
+ - `tests / npm_pack_smoke (windows-latest)`
16
+ - `tests / cli_cross_platform (ubuntu-latest)`
17
+ - `tests / cli_cross_platform (macos-latest)`
18
+ - `tests / cli_cross_platform (windows-latest)`
19
+ - `tests / python_verifier_conformance`
20
+ - `tests / github_action_settld_verify (jobproof)`
21
+ - `tests / github_action_settld_verify (monthproof)`
22
+ - `tests / github_action_settld_verify (financepack)`
23
+ - Dismiss stale PR approvals when new commits are pushed.
24
+ - Require linear history.
25
+ - Block force pushes and deletions.
26
+ - Require conversation resolution.
27
+
28
+ Optional:
29
+
30
+ - Require signed commits.
31
+ - Require CODEOWNERS review (if/when CODEOWNERS exists).
32
+
33
+ ## Actions
34
+
35
+ - Keep secrets scoped to environments (staging/prod).
36
+ - Require manual approval for production deployments (if/when added).
37
+