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,53 @@
1
+ # Event Envelope & Black Box Rules (v0.2)
2
+
3
+ Settld’s “black box” is an append-only, hash-chained event stream. The API rejects events that fail envelope, causality, or signer-policy validation.
4
+
5
+ ## Envelope
6
+
7
+ Each stored event uses this shape:
8
+
9
+ - `v`: envelope version (currently `1`)
10
+ - `id`: event id (`evt_...`)
11
+ - `at`: ISO-8601 timestamp
12
+ - `streamId`: aggregate stream id (e.g. a job id)
13
+ - `type`: event type (e.g. `BOOKED`, `EN_ROUTE`)
14
+ - `actor`: `{ type, id }` (who initiated the action)
15
+ - `payload`: JSON payload (nullable)
16
+ - `payloadHash`: `sha256(canonical(eventPayload))`
17
+ - `prevChainHash`: previous event’s `chainHash` (or `null` for genesis)
18
+ - `chainHash`: `sha256(canonical(chainLink))`
19
+ - `signature`: base64 Ed25519 signature (nullable)
20
+ - `signerKeyId`: key id of the signer (nullable)
21
+
22
+ ## Canonical hashing
23
+
24
+ Canonical JSON rules (implemented in `src/core/canonical-json.js`):
25
+
26
+ - Object keys are sorted deterministically.
27
+ - No `undefined`, non-finite numbers, or `-0`.
28
+ - Only JSON values (plain objects/arrays/strings/numbers/booleans/null).
29
+
30
+ Hashes:
31
+
32
+ - `payloadHash = sha256( canonicalJson({ v, id, at, streamId, type, actor, payload }) )`
33
+ - `chainHash = sha256( canonicalJson({ v, prevChainHash, payloadHash }) )`
34
+
35
+ Signatures:
36
+
37
+ - `signature = Ed25519.sign(payloadHash)`
38
+ - Verification uses the signer’s public key looked up by `signerKeyId`.
39
+
40
+ ## Append-time acceptance rules
41
+
42
+ The server rejects an append if any of the following are true:
43
+
44
+ - The envelope is missing required fields for the append mode (draft vs finalized).
45
+ - `prevChainHash` does not match the current stream head (optimistic concurrency).
46
+ - The hash chain or signature verification fails.
47
+ - The event violates signature policy (who must sign what).
48
+ - The event would cause an illegal job state transition.
49
+
50
+ ## Concurrency & idempotency
51
+
52
+ - **Optimistic concurrency**: draft events must include `x-proxy-expected-prev-chain-hash`, and the server returns `409` on mismatch.
53
+ - **Idempotency**: mutation endpoints accept `x-idempotency-key`; replays return the original response (and don’t append twice).
@@ -0,0 +1,53 @@
1
+ # FinancePackBundle.v1 Format (Finance-Grade)
2
+
3
+ This document defines the on-disk format for `FinancePackBundle.v1` and its strict-verification invariants.
4
+
5
+ ## Directory Layout
6
+
7
+ ```
8
+ settld.json
9
+ manifest.json
10
+ attestation/bundle_head_attestation.json
11
+ month/...
12
+ finance/...
13
+ verify/verification_report.json
14
+ ```
15
+
16
+ Notes:
17
+ - `month/` is a full embedded `MonthProofBundle.v1` directory tree.
18
+ - `attestation/bundle_head_attestation.json` is a signed `BundleHeadAttestation.v1` committing to the FinancePack manifestHash and MonthProof anchor.
19
+ - `verify/verification_report.json` is a signed, machine-ingestible `VerificationReport.v1`.
20
+
21
+ ## `manifest.json` (FinancePackBundleManifest.v1)
22
+
23
+ `manifest.json` includes:
24
+ - `files[]`: sha256 hashes for the **non-verify** bundle files
25
+ - `manifestHash`: sha256 over canonical JSON of the manifest object **excluding** `manifestHash`
26
+
27
+ ### Hashing Contract (`hashing.schemaVersion = FinancePackBundleManifestHash.v1`)
28
+
29
+ - `fileOrder = path_asc`
30
+ - `excludes = ["verify/**"]` (all `verify/*` derived outputs are intentionally excluded)
31
+
32
+ Rationale: `VerificationReport.v1` needs to refer to `manifestHash`, so including `verify/*` in the manifest would create circular hashing.
33
+
34
+ ## `verify/verification_report.json` (VerificationReport.v1)
35
+
36
+ `VerificationReport.v1` is canonical JSON with:
37
+ - `tool`: identifies the generator/verifier version for auditability
38
+ - `signer`: provenance for the report signer (including governance event ref when available)
39
+ - `subject.manifestHash`: must equal the bundle `manifestHash`
40
+ - `reportHash`: sha256 over canonical JSON of the report core (excluding signature fields)
41
+ - `signature`: Ed25519 signature over `reportHash`
42
+
43
+ Strict verification requires the report to be present **and signed**.
44
+
45
+ If the tool version cannot be determined, the report will include a warning code `TOOL_VERSION_UNKNOWN`.
46
+
47
+ ## Strict Verification Invariants
48
+
49
+ In strict mode (`settld-verify --strict --finance-pack ...`):
50
+ - The embedded `MonthProofBundle.v1` must strictly verify.
51
+ - `attestation/bundle_head_attestation.json` must exist and have a valid signature.
52
+ - `verify/verification_report.json` must exist, have a valid `reportHash`, and have a valid signature.
53
+ - `VerificationReport.v1.subject.manifestHash` must match the computed bundle `manifestHash`.
@@ -0,0 +1,30 @@
1
+ # Incident Taxonomy (v0.4)
2
+
3
+ Incidents are classified events that anchor evidence and claims workflows.
4
+
5
+ ## Types (enforced)
6
+
7
+ Defined in `src/core/incidents.js`:
8
+
9
+ - `DAMAGE_PROPERTY`
10
+ - `PRIVACY_VIOLATION`
11
+ - `SAFETY_NEAR_MISS`
12
+ - `FAILURE_TO_COMPLETE`
13
+ - `ACCESS_FAILURE`
14
+ - `THEFT_ALLEGATION`
15
+ - `ROBOT_STUCK`
16
+ - `UNEXPECTED_HUMAN_CONTACT`
17
+
18
+ ## Severity (enforced)
19
+
20
+ Integer scale `1..5`:
21
+
22
+ - `1` — minor anomaly / near-miss
23
+ - `3` — material anomaly; evidence likely required
24
+ - `5` — severe safety/property risk
25
+
26
+ ## Event linkage
27
+
28
+ - Incidents are created by `INCIDENT_DETECTED` (robot) or `INCIDENT_REPORTED` (operator or server-on-behalf-of-customer).
29
+ - Evidence (`EVIDENCE_CAPTURED`) must reference an existing `incidentId`.
30
+ - Claims (`CLAIM_OPENED`) must reference an existing `incidentId`.
@@ -0,0 +1,66 @@
1
+ # Job State Machine (v0.6)
2
+
3
+ Jobs are explicit workflows. Every transition emits an event; the event log is replayable.
4
+
5
+ ## States
6
+
7
+ - `CREATED`
8
+ - `QUOTED`
9
+ - `BOOKED`
10
+ - `MATCHED`
11
+ - `RESERVED`
12
+ - `EN_ROUTE`
13
+ - `ACCESS_GRANTED`
14
+ - `EXECUTING`
15
+ - `ASSISTED` (sub-state during execution)
16
+ - `STALLED` (execution liveness failure)
17
+ - `ABORTING_SAFE_EXIT` (forced by access revoke/expiry)
18
+ - `COMPLETED`
19
+ - `ABORTED`
20
+ - `SETTLED`
21
+
22
+ ## Terminality
23
+
24
+ - Terminal execution: `COMPLETED` or `ABORTED`
25
+ - Terminal financial: `SETTLED`
26
+
27
+ ## Diagram (simplified)
28
+
29
+ ```mermaid
30
+ stateDiagram-v2
31
+ [*] --> CREATED
32
+ CREATED --> QUOTED
33
+ QUOTED --> BOOKED
34
+ BOOKED --> MATCHED
35
+ MATCHED --> RESERVED
36
+ RESERVED --> EN_ROUTE
37
+ EN_ROUTE --> ACCESS_GRANTED
38
+ ACCESS_GRANTED --> EXECUTING
39
+
40
+ EXECUTING --> ASSISTED
41
+ ASSISTED --> EXECUTING
42
+
43
+ EXECUTING --> STALLED
44
+ ASSISTED --> STALLED
45
+ STALLED --> EXECUTING
46
+
47
+ EXECUTING --> ABORTING_SAFE_EXIT
48
+ ASSISTED --> ABORTING_SAFE_EXIT
49
+ STALLED --> ABORTING_SAFE_EXIT
50
+ ABORTING_SAFE_EXIT --> ABORTED
51
+
52
+ EXECUTING --> COMPLETED
53
+ EXECUTING --> ABORTED
54
+
55
+ COMPLETED --> SETTLED
56
+ ABORTED --> SETTLED
57
+
58
+ SETTLED --> [*]
59
+ ```
60
+
61
+ ## Policy hooks
62
+
63
+ - Access revocation at any time → agent must transition to safe exit behavior (recorded as events).
64
+ - Missing heartbeats → server appends `JOB_EXECUTION_STALLED` and escalates per tier/coverage policy.
65
+ - Jobs can be rescheduled via `JOB_RESCHEDULED`, which resets dispatch and clears access planning.
66
+ - Incidents/claims can occur in parallel; they do not necessarily change the main job status (modeled as parallel tracks in the event log).
@@ -0,0 +1,60 @@
1
+ # Kernel Compatible Policy (v0)
2
+
3
+ This policy defines when a capability implementation can be listed as "Kernel Compatible".
4
+
5
+ ## Eligibility Requirements
6
+
7
+ A capability must satisfy all three checks:
8
+
9
+ 1. Kernel conformance passes for supported flow(s).
10
+ 2. Closepack export verifies offline.
11
+ 3. At least one deterministic verifier case passes.
12
+
13
+ Required commands (or equivalent CI jobs):
14
+
15
+ ```sh
16
+ ./bin/settld.js conformance kernel --ops-token tok_ops
17
+ ./bin/settld.js closepack export --agreement-hash <sha256> --out /tmp/<agreementHash>.zip --ops-token tok_ops
18
+ ./bin/settld.js closepack verify /tmp/<agreementHash>.zip
19
+ ```
20
+
21
+ ## Listing Contract
22
+
23
+ Each listed capability entry must provide:
24
+
25
+ - `id` (stable identifier)
26
+ - `name`
27
+ - `repoPath` (or external repository URL)
28
+ - `deterministicVerifierRef`
29
+ - `conformanceCaseIds` (array)
30
+ - `closepackVerified` (boolean)
31
+ - `lastVerifiedAt` (ISO timestamp)
32
+
33
+ Canonical listing file:
34
+
35
+ - `docs/kernel-compatible/capabilities.json`
36
+
37
+ Hosted/static mirror:
38
+
39
+ - `dashboard/public/kernel-compatible/capabilities.json`
40
+
41
+ ## Badge Rules
42
+
43
+ - Badge text: `Kernel Compatible (v0)`
44
+ - Badge can be shown only while latest verification is passing.
45
+ - Badge must be removed within 24h if conformance or closepack verification regresses.
46
+
47
+ ## Revocation Conditions
48
+
49
+ Listing is revoked when:
50
+
51
+ - conformance fails on latest stable release,
52
+ - closepack verify returns `ok=false`,
53
+ - deterministic verifier case is removed or fails repeatedly,
54
+ - artifact-chain replay mismatches are unresolved.
55
+
56
+ ## Submission Flow (No Meeting Required)
57
+
58
+ 1. Open a PR updating `docs/kernel-compatible/capabilities.json`.
59
+ 2. Include machine-readable evidence paths or CI links for conformance and closepack verify.
60
+ 3. Maintainer verifies evidence and merges if checks pass.
@@ -0,0 +1,40 @@
1
+ # Kernel v0
2
+
3
+ Kernel v0 is the protocol/control-plane surface for payable capability calls:
4
+
5
+ `agreement -> hold -> evidence -> decision -> receipt -> dispute -> verdict -> adjustment`
6
+
7
+ This page is the public contract for what is enforced now vs what is explicitly out of scope.
8
+
9
+ ## Enforced In Kernel v0
10
+
11
+ - Deterministic IDs and idempotency on core financial artifacts (holdback adjustment IDs, dispute envelopes, replay artifacts).
12
+ - Tool-call holdback maintenance race hardening (open arbitration cases block auto-release).
13
+ - Signed dispute-open envelope for party-initiated disputes (`DisputeOpenEnvelope.v1`).
14
+ - Deterministic holdback adjustment issuance on verdict (`holdback_release` or `holdback_refund`).
15
+ - Replay evaluate and closepack export/verify for independent verification.
16
+ - `SettlementDecisionRecord.v2` emission default, with `policyHashUsed` and policy normalization pinning.
17
+ - Append-only `ReputationEvent.v1` facts with windowed query support (`/ops/reputation/facts`).
18
+
19
+ ## Explicitly Not Enforced Yet
20
+
21
+ - Public money-rail GA behavior (chargebacks/refunds/KYB lifecycle) for all tenants.
22
+ - Hosted marketplace ranking policies on top of reputation facts.
23
+ - Universal deterministic verifier coverage across all capability types.
24
+ - Hosted click-to-try playground SLOs for untrusted anonymous traffic.
25
+
26
+ ## Verification Entry Points
27
+
28
+ - Kernel conformance:
29
+ - `./bin/settld.js conformance kernel --ops-token tok_ops`
30
+ - Closepack export and offline verify:
31
+ - `./bin/settld.js closepack export --agreement-hash <sha256> --out /tmp/<agreementHash>.zip --ops-token tok_ops`
32
+ - `./bin/settld.js closepack verify /tmp/<agreementHash>.zip`
33
+ - Tool-call replay evaluate:
34
+ - `GET /ops/tool-calls/replay-evaluate?agreementHash=<sha256>`
35
+
36
+ ## Stability Policy
37
+
38
+ - Kernel v0 aims for additive protocol evolution.
39
+ - Existing object versions remain verifiable (no flag day replacement of historical artifacts).
40
+ - New replay-critical requirements ship in versioned objects (for example, `SettlementDecisionRecord.v2`).
@@ -0,0 +1,80 @@
1
+ # SettldPay Key Rotation Runbook
2
+
3
+ This runbook covers rotation for the SettldPay Ed25519 signing key used by:
4
+
5
+ - `POST /x402/gate/authorize-payment` token minting
6
+ - `GET /.well-known/settld-keys.json` public key discovery
7
+
8
+ ## Current model
9
+
10
+ - Tokens include `kid` and are signed with the active server signer key.
11
+ - Verifiers resolve keys via `/.well-known/settld-keys.json`.
12
+ - For file-backed deployments (`STORE=memory` with `PROXY_DATA_DIR`), key material is persisted in:
13
+ - `${PROXY_DATA_DIR}/server-signer.json` (active signer compatibility file)
14
+ - `${PROXY_DATA_DIR}/settld-pay-keyset-store.json` (active + previous key history)
15
+ - API supports published fallback keys via:
16
+ - `SETTLD_PAY_FALLBACK_KEYS` (JSON array of `{ keyId?, publicKeyPem }`)
17
+ - `SETTLD_PAY_FALLBACK_PUBLIC_KEY_PEM`
18
+ - `SETTLD_PAY_FALLBACK_KEY_ID`
19
+
20
+ ## Automated rotation command
21
+
22
+ Run:
23
+
24
+ ```bash
25
+ npm run keys:rotate -- --data-dir ./data --report artifacts/key-rotation/rotation-report.json --keep-previous 3
26
+ ```
27
+
28
+ What it does:
29
+
30
+ 1. Generates a new Ed25519 keypair.
31
+ 2. Promotes it to active signer.
32
+ 3. Moves the prior active key into `previous[]` (published fallback set).
33
+ 4. Updates both key files in `--data-dir`.
34
+ 5. Prints:
35
+ - new active `kid`
36
+ - active JWKS entry
37
+ - provider notification snippet text
38
+ 6. Optionally writes a rotation report JSON artifact (`--report`).
39
+
40
+ ## Planned rotation (normal)
41
+
42
+ 1. Run `npm run keys:rotate ...` (or equivalent process in your deployment pipeline).
43
+ 2. Deploy signer with new private key (but do not remove old key yet).
44
+ 3. Publish keyset including both:
45
+ - new active key
46
+ - previous key as fallback
47
+ 4. Switch signing to the new key.
48
+ 5. Keep old key published for at least:
49
+ - `max token TTL` (default 5m), plus
50
+ - cache margin for well-known keyset refresh (recommend >=24h for external verifiers).
51
+ 6. After the overlap window, remove old key from fallback list.
52
+
53
+ ## Emergency rotation (key compromise)
54
+
55
+ 1. Stop signing with the compromised key immediately.
56
+ 2. Switch signer to a new keypair.
57
+ 3. Publish a refreshed keyset with the compromised key removed from active use.
58
+ 4. Notify providers/operators to refresh keyset immediately.
59
+ 5. Review recent `authorize-payment` and verify flows for suspicious token use.
60
+
61
+ ## Verification checks
62
+
63
+ Before/after rotation, run:
64
+
65
+ ```bash
66
+ node --test test/settld-pay-token.test.js
67
+ node --test test/api-e2e-x402-authorize-payment.test.js
68
+ ```
69
+
70
+ And manually confirm:
71
+
72
+ ```bash
73
+ curl -fsS http://127.0.0.1:3000/.well-known/settld-keys.json
74
+ ```
75
+
76
+ Response should include:
77
+
78
+ - active `kid`
79
+ - fallback `kid`(s) during overlap
80
+ - `kty=OKP`, `crv=Ed25519`, and `x` set for each key
package/docs/LEDGER.md ADDED
@@ -0,0 +1,82 @@
1
+ # Ledger (v0.4)
2
+
3
+ Settld treats settlement as a double-entry ledger: every journal entry must balance to zero.
4
+
5
+ ## Posting sign convention
6
+
7
+ - Positive `amountCents` = debit
8
+ - Negative `amountCents` = credit
9
+ - Every journal entry satisfies `sum(postings.amountCents) === 0`
10
+
11
+ ## Chart of accounts (current prototype)
12
+
13
+ Defined in `src/api/store.js`:
14
+
15
+ - `acct_cash` — payment processor clearing cash
16
+ - `acct_customer_escrow` — customer escrow liability
17
+ - `acct_platform_revenue` — platform revenue
18
+ - `acct_owner_payable` — owner payout liability
19
+ - `acct_operator_payable` — operator payout liability
20
+ - `acct_developer_royalty_payable` — developer royalties liability
21
+ - `acct_insurance_reserve` — insurance reserve
22
+ - `acct_claims_expense` — claims expense (prototype)
23
+ - `acct_claims_payable` — claims payable liability
24
+
25
+ ## Job lifecycle postings (current)
26
+
27
+ ### `BOOKED`
28
+
29
+ Captures funds into escrow (prototype model):
30
+
31
+ - Debit `acct_cash` for `amountCents`
32
+ - Credit `acct_customer_escrow` for `amountCents`
33
+
34
+ ### `SETTLED` (job was `COMPLETED`)
35
+
36
+ Moves escrow into revenue + payables + reserve:
37
+
38
+ - Debit `acct_customer_escrow` for `amountCents`
39
+ - Credit:
40
+ - `acct_platform_revenue`
41
+ - `acct_owner_payable`
42
+ - `acct_operator_payable` (only if assist occurred)
43
+ - `acct_developer_royalty_payable` (equals sum of licensed skill fees)
44
+ - `acct_insurance_reserve`
45
+
46
+ Splits are deterministic and integer-cent safe (see `src/core/ledger-postings.js`).
47
+
48
+ ### `SETTLED` (job was `ABORTED`)
49
+
50
+ Full refund from escrow:
51
+
52
+ - Debit `acct_customer_escrow` for `amountCents`
53
+ - Credit `acct_cash` for `amountCents`
54
+
55
+ ## Claims postings (v0.4)
56
+
57
+ Claims are modeled as their own workflow, but postings stay deterministic and derived from events.
58
+
59
+ ### `JOB_ADJUSTED` (claim was approved)
60
+
61
+ Creates a payable for the approved total (payout + refund), and offsets it via:
62
+
63
+ - **Payouts** (`payoutCents`):
64
+ - Debit `acct_claims_expense`
65
+ - Credit `acct_claims_payable`
66
+ - **Refunds** (`refundCents`, completed jobs only):
67
+ - Debit proportional reversals of:
68
+ - `acct_platform_revenue`
69
+ - `acct_owner_payable`
70
+ - `acct_operator_payable` (if assist)
71
+ - `acct_developer_royalty_payable` (if licensed skills)
72
+ - `acct_insurance_reserve`
73
+ - Credit `acct_claims_payable`
74
+
75
+ Refund reversals are computed as a deterministic pro-rata split of the original settlement allocation (see `src/core/ledger-postings.js`).
76
+
77
+ ### `CLAIM_PAID`
78
+
79
+ Moves funds out of cash and clears the liability:
80
+
81
+ - Debit `acct_claims_payable` for `amountCents`
82
+ - Credit `acct_cash` for `amountCents`
@@ -0,0 +1,76 @@
1
+ # Execution Liveness (v0.6)
2
+
3
+ Settld treats “job liveness” as an event-sourced contract:
4
+
5
+ - Robots emit signed heartbeats into the job stream.
6
+ - The server detects missing heartbeats and appends a signed `JOB_EXECUTION_STALLED` event (validated at append-time).
7
+ - When heartbeats resume, the server can append `JOB_EXECUTION_RESUMED` to return the job to `EXECUTING`.
8
+
9
+ ## Events
10
+
11
+ ### `JOB_HEARTBEAT` (robot-signed)
12
+
13
+ Constraints:
14
+
15
+ - Only allowed during `EXECUTING`, `ASSISTED`, `STALLED`, or `ABORTING_SAFE_EXIT`.
16
+ - `payload.t` must equal `event.at` (single source of time).
17
+ - `payload.robotId` must match `event.actor.id`.
18
+
19
+ Payload:
20
+
21
+ ```json
22
+ {
23
+ "jobId": "job_123",
24
+ "robotId": "rob_1",
25
+ "t": "2026-01-26T00:00:00.000Z",
26
+ "stage": "TASK",
27
+ "progress": 3,
28
+ "assistRequested": false
29
+ }
30
+ ```
31
+
32
+ ### `JOB_EXECUTION_STALLED` (server-signed)
33
+
34
+ Constraints:
35
+
36
+ - Only allowed during `EXECUTING` or `ASSISTED`.
37
+ - Must be past the tier policy `stallAfterMs` threshold for the projected `lastHeartbeatAt` (append-time enforced).
38
+ - Includes a policy snapshot so stalls are auditable even if defaults evolve later.
39
+
40
+ Payload (reference-only, no media):
41
+
42
+ ```json
43
+ {
44
+ "jobId": "job_123",
45
+ "robotId": "rob_1",
46
+ "detectedAt": "2026-01-26T00:05:00.000Z",
47
+ "reason": "NO_HEARTBEAT",
48
+ "lastHeartbeatAt": "2026-01-26T00:01:00.000Z",
49
+ "policy": { "heartbeatIntervalMs": 60000, "stallAfterMs": 180000 }
50
+ }
51
+ ```
52
+
53
+ ### `JOB_EXECUTION_RESUMED` (robot- or server-signed)
54
+
55
+ Constraints:
56
+
57
+ - Only allowed from `STALLED`.
58
+ - If server-signed, the server must have observed a post-stall heartbeat (append-time enforced).
59
+
60
+ ## Policy
61
+
62
+ The current default policy is tier-driven and deterministic:
63
+
64
+ - `heartbeatIntervalMs` per environment tier
65
+ - `stallAfterMs = 3 * heartbeatIntervalMs`
66
+
67
+ See `src/core/liveness.js`.
68
+
69
+ ## Ops hook (“liveness tick”)
70
+
71
+ The server uses an internal tick (`api.tickLiveness()`) to scan active jobs and append stall/resume events through the normal append pipeline (no direct state mutation).
72
+
73
+ Outbox side-effects (stubs for now):
74
+
75
+ - `JOB_STATUS_CHANGED` when a stall/resume changes the job status
76
+ - `ESCALATION_NEEDED` when `requiresOperatorCoverage` is true
@@ -0,0 +1,36 @@
1
+ # MVP Build Order (sprint-sized)
2
+
3
+ This is the recommended implementation order for a narrow “managed environment” wedge.
4
+
5
+ ## Sprint 1: Core spine
6
+
7
+ - Define job state machine + transition validation.
8
+ - Append-only event log with hash chaining.
9
+ - In-memory prototype API (create job, append event, replay).
10
+ - Minimal robot registration and heartbeat.
11
+
12
+ ## Sprint 2: Booking + dispatch
13
+
14
+ - Quote object + booking workflow (hold/escrow stub).
15
+ - Deterministic matching scorer (capability + trust tiers).
16
+ - Reservation + idempotency keys.
17
+ - Basic replanning hooks (robot unavailable → re-match).
18
+
19
+ ## Sprint 3: Assist + incident workflow
20
+
21
+ - Operator assist start/end events.
22
+ - Incident taxonomy and automatic evidence bundling triggers.
23
+ - Job timeline replay view (ops API endpoints).
24
+
25
+ ## Sprint 4: Ledger correctness
26
+
27
+ - Double-entry ledger with settlement splits.
28
+ - Refund and partial completion accounting.
29
+ - Reconciliation reports (per job, per owner).
30
+
31
+ ## Sprint 5: Skill packaging & certification tooling (internal)
32
+
33
+ - Skill bundle format + verification.
34
+ - Capability API stubs + robot adapter interface.
35
+ - Certification checklist automation (static + sim harness hooks).
36
+
@@ -0,0 +1,39 @@
1
+ # On-call Playbook (v0)
2
+
3
+ ## Top priorities
4
+
5
+ 1. Human safety
6
+ 2. Property safety
7
+ 3. Privacy compliance
8
+ 4. Service reliability
9
+ 5. Financial correctness
10
+
11
+ ## Standard incident response
12
+
13
+ 1. Identify affected job(s) and current state.
14
+ 2. If robot is active:
15
+ - move to safe state (stop / exit / dock) via operator console,
16
+ - revoke access plan if needed.
17
+ 3. Preserve evidence bundle (ensure it is generated and immutable).
18
+ 4. Communicate:
19
+ - requester notification (status + next step),
20
+ - owner/operator notification if dispatch needed.
21
+ 5. Classify incident and open claim if thresholds are met.
22
+ 6. Post-incident:
23
+ - tag failure mode,
24
+ - file regression test requirements,
25
+ - add monitoring/alert improvements.
26
+
27
+ ## “Stop the world” triggers
28
+
29
+ - repeated safety incidents from a robot model or skill version
30
+ - privacy policy violations (camera/sensor misuse)
31
+ - ledger imbalance or payout correctness bug
32
+
33
+ ## Debug checklist
34
+
35
+ - job timeline replay (events, transitions)
36
+ - agent heartbeats and last known telemetry
37
+ - operator action log
38
+ - evidence bundle frames (minimal necessary)
39
+
@@ -0,0 +1,20 @@
1
+ # Operations: Signing in production
2
+
3
+ Settld supports producing strictly verifiable bundles without storing private keys on disk by using a remote signer.
4
+
5
+ ## Recommended posture (hardened)
6
+
7
+ - Use `settld-produce --signer remote` and keep private keys inside an HSM/KMS-backed signing service.
8
+ - Keep `trust.json` (public trust anchors) in version control and rotate via PR.
9
+ - In CI, use strict verification and archive `VerifyCliOutput.v1` JSON.
10
+
11
+ ## Remote signer
12
+
13
+ See `docs/spec/REMOTE_SIGNER.md` for the RemoteSigner API contract.
14
+
15
+ ## Key rotation (high level)
16
+
17
+ 1. Add new key to signer service.
18
+ 2. Update trust anchors (governance root keys and/or time authorities) via PR.
19
+ 3. Produce bundles signed by the new key while allowing overlap.
20
+ 4. Deprecate old keys per your internal policy (and/or publish revocations as governance requires).