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,60 @@
1
+ # Artifacts
2
+
3
+ Settld artifacts are immutable, verifiable JSON documents (often later delivered via webhook/S3) derived from an event-sourced job stream.
4
+
5
+ ## Finance Finality: "Effective" Artifacts
6
+
7
+ For finance and audit workflows, the *economically final* artifact is determined by settlement:
8
+
9
+ - If a job is settled, the effective artifact is the one whose `sourceEventId` equals the `SETTLED` event id.
10
+ - If a job is not settled, the effective artifact is anchored to the proof event selected for the latest completion anchor.
11
+
12
+ API:
13
+
14
+ - `GET /jobs/:jobId/artifacts/effective?type=WorkCertificate.v1`
15
+
16
+ This endpoint exists so downstream systems do **not** reinvent "which certificate counts" (and accidentally treat ids as chronology).
17
+
18
+ ## Listing Artifacts (Storage Listing)
19
+
20
+ API:
21
+
22
+ - `GET /jobs/:jobId/artifacts`
23
+ - Optional filters: `type=…`, `sourceEventId=…`
24
+ - Pagination: `limit=…` with either `offset=…` (simple) or `cursor=…` (seek).
25
+
26
+ Important: this endpoint is a *storage listing*. It is **not** a job timeline. Artifact creation time may lag source-event time due to worker retries, backfills, or delayed processing.
27
+
28
+ ### Ordering Contract (Postgres)
29
+
30
+ For the Postgres store, artifact listing uses:
31
+
32
+ - `ORDER BY created_at DESC, artifact_id DESC`
33
+
34
+ This ordering is deterministic, but it is based on artifact persistence time (`created_at`), not source event time.
35
+
36
+ ### Cursor Pagination (Postgres-only)
37
+
38
+ Cursor pagination is supported only when running with the Postgres-backed store.
39
+
40
+ Cursor semantics:
41
+
42
+ - The cursor is an opaque `base64url`-encoded JSON payload.
43
+ - It is a seek cursor over `(created_at, artifact_id)` matching the ordering above.
44
+
45
+ Moving dataset semantics:
46
+
47
+ - While you are paging, new artifacts may be inserted at the "top" (newer `created_at`).
48
+ - A cursor walk does not guarantee you will see inserts that occur after you started paging.
49
+ - If you need the latest artifacts, restart from the top (no cursor) or use `/artifacts/effective` for finance truth.
50
+
51
+ Cursor payload format (v1):
52
+
53
+ ```json
54
+ {
55
+ "v": 1,
56
+ "order": "created_at_desc_artifact_id_desc",
57
+ "createdAt": "2026-01-01T00:00:00.000000Z",
58
+ "artifactId": "workcert_job_123_evt_456"
59
+ }
60
+ ```
@@ -0,0 +1,33 @@
1
+ # Skill Certification Checklist (v0)
2
+
3
+ ## Static checks
4
+
5
+ - Declares required capabilities (no undeclared API calls).
6
+ - Declares safety constraints (force/speed/contact).
7
+ - Declares privacy profile (sensors, retention).
8
+ - No forbidden syscalls / no network egress from skill runtime (policy decision).
9
+ - Deterministic policy graph passes schema validation.
10
+
11
+ ## Simulation
12
+
13
+ - Passes baseline navigation/manipulation tests.
14
+ - Passes “edge” scenarios (clutter, lighting changes, occlusion).
15
+ - Timeouts and abort paths behave safely.
16
+ - Evidence triggers fire on impacts/uncertainty/assist start.
17
+
18
+ ## Hardware-in-loop (lab apartment)
19
+
20
+ - Repeated runs meet completion + incident thresholds.
21
+ - Operator assist path is usable and logs actions correctly.
22
+ - Local policy enforcement clamps unsafe command attempts.
23
+
24
+ ## Privacy review
25
+
26
+ - Media capture respects privacy mode and zones.
27
+ - Evidence is minimal by default; only triggered bundles retained.
28
+
29
+ ## Release controls
30
+
31
+ - Tier gating: `lab_cert` → limited environments; `field_cert` → broader.
32
+ - Rollback plan and regression monitoring.
33
+
@@ -0,0 +1,152 @@
1
+ # Circle Sandbox E2E (Reserve Adapter)
2
+
3
+ This guide is for validating the x402 reserve path against Circle sandbox before enabling production mode.
4
+
5
+ ## Goal
6
+
7
+ Prove the reserve contract used by `POST /x402/gate/authorize-payment`:
8
+
9
+ 1. Reserve succeeds before token mint.
10
+ 2. Reserve failure does not mint a token.
11
+ 3. Reserve rollback path restores internal wallet state.
12
+
13
+ ## Production safety defaults
14
+
15
+ The API is configured to fail closed in production-like environments:
16
+
17
+ - `X402_REQUIRE_EXTERNAL_RESERVE` defaults to `true` when `SETTLD_ENV=production|prod`, `NODE_ENV=production`, or `RAILWAY_ENVIRONMENT_NAME=production|prod`.
18
+ - `X402_CIRCLE_RESERVE_MODE` defaults to `production` in production-like environments.
19
+ - In local/test environments, defaults remain:
20
+ - `X402_REQUIRE_EXTERNAL_RESERVE=false`
21
+ - `X402_CIRCLE_RESERVE_MODE=stub`
22
+
23
+ To force explicit behavior in any environment, set both env vars directly.
24
+
25
+ ## Required env
26
+
27
+ Set these for sandbox runs:
28
+
29
+ - `CIRCLE_E2E=1` (enables sandbox e2e tests)
30
+ - `CIRCLE_API_KEY` (sandbox key)
31
+ - `CIRCLE_BASE_URL=https://api-sandbox.circle.com`
32
+ - `CIRCLE_BLOCKCHAIN` (for example `BASE-SEPOLIA`)
33
+ - `CIRCLE_WALLET_ID_SPEND`
34
+ - `CIRCLE_WALLET_ID_ESCROW`
35
+ - `CIRCLE_TOKEN_ID_USDC`
36
+
37
+ Fastest way to generate these from your Circle account:
38
+
39
+ ```bash
40
+ settld setup circle --api-key 'TEST_API_KEY:...' --mode auto --out-env ./.tmp/circle.env
41
+ ```
42
+
43
+ Then load them:
44
+
45
+ ```bash
46
+ set -a; source ./.tmp/circle.env; set +a
47
+ ```
48
+
49
+ If your environment uses a different naming convention, map these into the adapter config before running tests.
50
+
51
+ ## Suggested test flow
52
+
53
+ 1. Verify spend wallet has sufficient USDC.
54
+ 2. Call reserve (`spend -> escrow`) with idempotency key = gate id.
55
+ 3. Poll transaction status until terminal/safe state.
56
+ 4. Attempt rollback:
57
+ - cancel when still cancellable, or
58
+ - compensating transfer (`escrow -> spend`) when already confirmed.
59
+ 5. Verify resulting balances + persisted reserve status.
60
+
61
+ ## Run command
62
+
63
+ After adapter wiring is complete:
64
+
65
+ ```bash
66
+ CIRCLE_E2E=1 node --test test/circle-sandbox-reserve-e2e.test.js
67
+ ```
68
+
69
+ ## Run full paid MCP demo in Circle mode
70
+
71
+ The demo now supports explicit reserve rail mode:
72
+
73
+ ```bash
74
+ SETTLD_DEMO_CIRCLE_MODE=sandbox \
75
+ X402_REQUIRE_EXTERNAL_RESERVE=1 \
76
+ node scripts/demo/mcp-paid-exa.mjs --circle=sandbox
77
+ ```
78
+
79
+ Artifacts include:
80
+
81
+ - `summary.json` with `circleMode`, `circleReserveId`, `reserveTransitions`, and `payoutDestination`.
82
+ - `reserve-state.json` with reserve details, transition timeline, and configured Circle rail metadata.
83
+
84
+ ## Run paid MCP demo + batch settlement in Circle mode
85
+
86
+ This runs the same demo flow and then executes the batch payout worker against the generated artifact root:
87
+
88
+ ```bash
89
+ SETTLD_DEMO_CIRCLE_MODE=sandbox \
90
+ SETTLD_DEMO_RUN_BATCH_SETTLEMENT=1 \
91
+ SETTLD_DEMO_BATCH_PROVIDER_WALLET_ID="$CIRCLE_WALLET_ID_ESCROW" \
92
+ X402_REQUIRE_EXTERNAL_RESERVE=1 \
93
+ node scripts/demo/mcp-paid-exa.mjs --circle=sandbox
94
+ ```
95
+
96
+ Additional artifacts:
97
+
98
+ - `batch-payout-registry.json`
99
+ - `batch-worker-state.json`
100
+ - `batch-settlement.json`
101
+
102
+ ## Run sandbox-gated batch settlement E2E test
103
+
104
+ ```bash
105
+ CIRCLE_E2E=1 CIRCLE_BATCH_E2E=1 node --test test/circle-sandbox-batch-settlement-e2e.test.js
106
+ ```
107
+
108
+ This test:
109
+
110
+ 1. Runs the paid MCP demo in sandbox mode with batch settlement enabled.
111
+ 2. Confirms payout submission state is recorded.
112
+ 3. Reruns the worker and verifies payout idempotency (no duplicate submit).
113
+
114
+ ## Run the full Circle sandbox smoke gate
115
+
116
+ This command is the recommended "no-regression" check. It runs:
117
+
118
+ 1. Optional faucet top-ups for spend/escrow wallets (can be disabled with `CIRCLE_SKIP_TOPUP=1`).
119
+ 2. `test/circle-sandbox-reserve-e2e.test.js`
120
+ 3. `test/circle-sandbox-batch-settlement-e2e.test.js`
121
+
122
+ ```bash
123
+ npm run test:x402:circle:sandbox:smoke
124
+ ```
125
+
126
+ Smoke output artifact:
127
+
128
+ - `artifacts/gates/x402-circle-sandbox-smoke.json`
129
+
130
+ ## GitHub Actions smoke workflow
131
+
132
+ The repo includes `.github/workflows/x402-circle-sandbox-smoke.yml` for manual/nightly runs.
133
+
134
+ Required repo secrets:
135
+
136
+ - `CIRCLE_SANDBOX_API_KEY`
137
+ - `CIRCLE_SANDBOX_WALLET_ID_SPEND`
138
+ - `CIRCLE_SANDBOX_WALLET_ID_ESCROW`
139
+ - `CIRCLE_SANDBOX_TOKEN_ID_USDC`
140
+ - `CIRCLE_SANDBOX_ENTITY_SECRET_HEX`
141
+
142
+ Optional repo secrets:
143
+
144
+ - `CIRCLE_SANDBOX_BASE_URL` (defaults to `https://api.circle.com`)
145
+ - `CIRCLE_SANDBOX_BLOCKCHAIN` (defaults to `BASE-SEPOLIA`)
146
+
147
+ ## Pass criteria
148
+
149
+ - Reserve call returns a stable `reserveId`.
150
+ - Repeated reserve calls with same gate id are idempotent.
151
+ - Failed reserves return `X402_RESERVE_FAILED` and leave no stranded internal escrow lock.
152
+ - Rollback returns funds to spend wallet (cancel or compensation).
package/docs/CONFIG.md ADDED
@@ -0,0 +1,297 @@
1
+ # Settld Configuration (Runtime)
2
+
3
+ This repo is intentionally “ops-first”: **safe defaults**, explicit hardening toggles, and predictable failure modes.
4
+
5
+ ## Store / durability
6
+
7
+ - `STORE` (`memory` | `pg`, default: `memory`)
8
+ - `DATABASE_URL` (required when `STORE=pg`)
9
+ - `PROXY_PG_SCHEMA` (default: `public`)
10
+ - `PROXY_PG_LOG_SLOW_MS` (default: `0` = disabled)
11
+ When nonzero, logs slow queries as `pg.query.slow` with duration + a best-effort query label (never logs query args).
12
+ - `PROXY_MIGRATE_ON_STARTUP` (`1` | `0`, default: `1`)
13
+ When `1`, Settld runs SQL migrations on startup (PG advisory-lock protected so concurrent instances are safe). Set `0` if you run migrations out-of-band.
14
+ - `PROXY_DATA_DIR` (memory mode durability via file tx-log; default: unset = purely in-memory)
15
+
16
+ ## HTTP limits
17
+
18
+ - `PROXY_MAX_BODY_BYTES` (default: `1000000`)
19
+ - `PROXY_INGEST_MAX_EVENTS` (default: `200`)
20
+
21
+ ## Protocol / versioning
22
+
23
+ Settld exposes a protocol version contract via `x-settld-protocol` and enforces compatibility windows.
24
+
25
+ - `PROXY_PROTOCOL_MIN` (default: current, e.g. `1.0`)
26
+ Requests below this return `426` with `code: PROTOCOL_TOO_OLD`.
27
+
28
+ - `PROXY_PROTOCOL_MAX` (default: current, e.g. `1.0`)
29
+ Requests above this return `400` with `code: PROTOCOL_TOO_NEW`.
30
+
31
+ - `PROXY_PROTOCOL_DEPRECATIONS` (optional file path)
32
+ JSON map of protocol version -> cutoff date; requests past cutoff return `426` with `code: PROTOCOL_DEPRECATED`.
33
+ Example:
34
+
35
+ ```json
36
+ { "1.0": { "cutoff": "2026-12-31T00:00:00.000Z" } }
37
+ ```
38
+
39
+ Production enforcement:
40
+
41
+ - When `NODE_ENV=production`, `/ingest/proxy` and `POST /{jobs|robots|operators}/:id/events` require the request header `x-settld-protocol` (else `400` with `code: PROTOCOL_VERSION_REQUIRED`).
42
+
43
+ ## Rate limiting
44
+
45
+ - `PROXY_RATE_LIMIT_RPM` (default: `0` = disabled)
46
+ - `PROXY_RATE_LIMIT_BURST` (default: `PROXY_RATE_LIMIT_RPM`)
47
+ - `PROXY_RATE_LIMIT_PER_KEY_RPM` (default: `0` = disabled)
48
+ Applies an additional token bucket per authenticated API key (`auth.keyId`) after tenant-level limiting.
49
+ - `PROXY_RATE_LIMIT_PER_KEY_BURST` (default: `PROXY_RATE_LIMIT_PER_KEY_RPM`)
50
+
51
+ ## Outbox reclaim / worker loop
52
+
53
+ - `PROXY_RECLAIM_AFTER_SECONDS` (default: `60`)
54
+ Reclaim “claimed but not processed” outbox rows after this window.
55
+
56
+ - `PROXY_PG_WORKER_STATEMENT_TIMEOUT_MS` (default: `0` = disabled; PG only)
57
+ Sets `statement_timeout` for worker-transaction queries (outbox claims + delivery claims + outbox processors) to prevent “hung query” pileups.
58
+
59
+ - `PROXY_AUTOTICK` (`1` enables a default loop)
60
+ - `PROXY_AUTOTICK_INTERVAL_MS` (default: `0`, or `250` when `PROXY_AUTOTICK=1`)
61
+ - `PROXY_AUTOTICK_MAX_MESSAGES` (default: `100`)
62
+
63
+ Delivery/worker tuning:
64
+
65
+ - `PROXY_WORKER_CONCURRENCY_ARTIFACTS` (default: `1`)
66
+ Max concurrent artifact build groups (grouped by `tenantId + jobId`).
67
+
68
+ - `PROXY_WORKER_CONCURRENCY_DELIVERIES` (default: `1`)
69
+ Max concurrent delivery scope groups (grouped by `scopeKey`; preserves ordering within each scope).
70
+
71
+ - `PROXY_DELIVERY_HTTP_TIMEOUT_MS` (default: `0` = disabled)
72
+ Abort outbound delivery HTTP requests after this timeout and retry with backoff.
73
+
74
+ ## Ops / API auth
75
+
76
+ - `PROXY_OPS_TOKENS`
77
+ Format: `token:scope1,scope2;token2:scopeA` (scopes include `ops_read`, `ops_write`, `audit_read`, `finance_write`, …)
78
+
79
+ - `PROXY_OPS_TOKEN` (legacy)
80
+ If `PROXY_OPS_TOKENS` is empty, this single token grants full ops access.
81
+
82
+ - `PROXY_AUTH_KEY_TOUCH_MIN_SECONDS` (default: `60`)
83
+ Throttle how often `last_used_at` is updated for API keys (reduces DB write amplification).
84
+
85
+ ## Ingest auth
86
+
87
+ - `PROXY_INGEST_TOKEN` (optional)
88
+ When set, `/ingest/proxy` requires header `x-proxy-ingest-token` to match.
89
+
90
+ ## Export destinations (deliveries)
91
+
92
+ - `PROXY_EXPORT_DESTINATIONS` (JSON)
93
+ Maps `tenantId -> destinations[]`.
94
+
95
+ Webhook destination (preferred, secrets via ref):
96
+
97
+ ```json
98
+ {
99
+ "tenant_default": [
100
+ { "destinationId": "dst_webhook", "kind": "webhook", "url": "https://example.com/hook", "secretRef": "file:/var/run/secrets/webhook_secret" }
101
+ ]
102
+ }
103
+ ```
104
+
105
+ S3 destination (preferred, credentials via ref):
106
+
107
+ ```json
108
+ {
109
+ "tenant_default": [
110
+ {
111
+ "destinationId": "dst_s3",
112
+ "kind": "s3",
113
+ "endpoint": "https://s3.amazonaws.com",
114
+ "bucket": "my-bucket",
115
+ "region": "us-east-1",
116
+ "accessKeyIdRef": "file:/var/run/secrets/aws_access_key_id",
117
+ "secretAccessKeyRef": "file:/var/run/secrets/aws_secret_access_key"
118
+ }
119
+ ]
120
+ }
121
+ ```
122
+
123
+ Hardening note:
124
+
125
+ - Inline secrets (`secret`, `accessKeyId`, `secretAccessKey`) are rejected when `NODE_ENV=production` unless `PROXY_ALLOW_INLINE_SECRETS=1`.
126
+
127
+ ## Evidence store
128
+
129
+ - `PROXY_EVIDENCE_STORE` (`fs` | `memory` | `s3` | `minio`, default: `fs`)
130
+ - `PROXY_EVIDENCE_DIR` (fs store root; default: tmp dir when not using `PROXY_DATA_DIR`)
131
+
132
+ S3/minio evidence store config:
133
+
134
+ - `PROXY_EVIDENCE_S3_ENDPOINT`
135
+ - `PROXY_EVIDENCE_S3_REGION` (default: `us-east-1`)
136
+ - `PROXY_EVIDENCE_S3_BUCKET`
137
+ - `PROXY_EVIDENCE_S3_ACCESS_KEY_ID` (or `AWS_ACCESS_KEY_ID`)
138
+ - `PROXY_EVIDENCE_S3_SECRET_ACCESS_KEY` (or `AWS_SECRET_ACCESS_KEY`)
139
+ - `PROXY_EVIDENCE_S3_FORCE_PATH_STYLE` (default: `1`)
140
+
141
+ Evidence download security:
142
+
143
+ - `PROXY_EVIDENCE_SIGNING_SECRET` (optional; default derived from server signer)
144
+ - `PROXY_EVIDENCE_PRESIGN_MAX_SECONDS` (default: `300`, max: `3600`)
145
+ - `PROXY_EVIDENCE_RETENTION_MAX_DAYS` (default: `365`)
146
+ Tenant cap for `contract.policies.evidencePolicy.retentionDays`.
147
+ - `PROXY_EVIDENCE_RETENTION_MAX_DAYS_BY_TENANT` (JSON map, optional)
148
+ Per-tenant override for `PROXY_EVIDENCE_RETENTION_MAX_DAYS`.
149
+
150
+ ## Secrets provider
151
+
152
+ - `PROXY_ENABLE_ENV_SECRETS` (`1` enables `env:NAME` refs; default: disabled unless `NODE_ENV=development`)
153
+ - `PROXY_SECRETS_CACHE_TTL_SECONDS` (default: `30`)
154
+
155
+ Supported refs:
156
+
157
+ - `env:NAME` (dev-only unless explicitly enabled)
158
+ - `file:/absolute/path` (k8s secret mounts)
159
+
160
+ ## URL safety overrides (dev only)
161
+
162
+ These exist to make local development possible (e.g. MinIO on `localhost`). Do not enable in production.
163
+
164
+ - `PROXY_ALLOW_HTTP_URLS` (`1` allows `http://` where URL safety checks apply)
165
+ - `PROXY_ALLOW_PRIVATE_URLS` (`1` allows private IP ranges)
166
+ - `PROXY_ALLOW_LOOPBACK_URLS` (`1` allows `localhost` / loopback)
167
+
168
+ ## Retention / cleanup
169
+
170
+ Retention is tenant-configurable via in-memory config and capped by these runtime env vars.
171
+
172
+ - `PROXY_RETENTION_INGEST_RECORDS_DAYS` (default: `0` = no expiry)
173
+ Sets `expires_at` for `ingest_records`.
174
+
175
+ - `PROXY_RETENTION_INGEST_RECORDS_MAX_DAYS` (default: `0` = no platform cap)
176
+ When set, tenant `0` means “use the cap”.
177
+
178
+ - `PROXY_RETENTION_DELIVERIES_DAYS` (default: `0` = no expiry)
179
+ Expiration for delivered deliveries.
180
+
181
+ - `PROXY_RETENTION_DELIVERIES_MAX_DAYS` (default: `0` = no platform cap)
182
+
183
+ - `PROXY_RETENTION_DELIVERY_DLQ_DAYS` (default: `PROXY_RETENTION_DELIVERIES_DAYS`)
184
+ Expiration for failed (DLQ) deliveries.
185
+
186
+ - `PROXY_RETENTION_DELIVERY_DLQ_MAX_DAYS` (default: `PROXY_RETENTION_DELIVERIES_MAX_DAYS`)
187
+
188
+ Cleanup execution (PG mode):
189
+
190
+ - `PROXY_RETENTION_CLEANUP_BATCH_SIZE` (default: `500`)
191
+ Max rows per table per cleanup run.
192
+
193
+ - `PROXY_RETENTION_CLEANUP_MAX_MILLIS` (default: `1500`)
194
+ Wall-clock budget for a single cleanup run (enforced via PG `statement_timeout`).
195
+
196
+ - `PROXY_RETENTION_CLEANUP_DRY_RUN` (`1` prints would-delete counts; no deletes)
197
+
198
+ Finance reconciliation scheduling:
199
+
200
+ - `PROXY_FINANCE_RECONCILE_ENABLED` (default: `1`)
201
+ Enables periodic finance reconciliation maintenance ticks.
202
+
203
+ - `PROXY_FINANCE_RECONCILE_INTERVAL_SECONDS` (default: `300`)
204
+ Minimum interval between automatic reconciliation runs.
205
+
206
+ - `PROXY_FINANCE_RECONCILE_MAX_TENANTS` (default: `50`)
207
+ Max tenants scanned per automatic run.
208
+
209
+ - `PROXY_FINANCE_RECONCILE_MAX_PERIODS_PER_TENANT` (default: `2`)
210
+ Max GL periods reconciled per tenant in one run.
211
+
212
+ Money-rail reconciliation scheduling:
213
+
214
+ - `PROXY_MONEY_RAIL_RECONCILE_ENABLED` (default: `1`)
215
+ Enables periodic money-rail reconciliation maintenance ticks.
216
+
217
+ - `PROXY_MONEY_RAIL_RECONCILE_INTERVAL_SECONDS` (default: `300`)
218
+ Minimum interval between automatic money-rail reconciliation runs.
219
+
220
+ - `PROXY_MONEY_RAIL_RECONCILE_MAX_TENANTS` (default: `50`)
221
+ Max tenants scanned per automatic run.
222
+
223
+ - `PROXY_MONEY_RAIL_RECONCILE_MAX_PERIODS_PER_TENANT` (default: `2`)
224
+ Max payout periods reconciled per tenant in one run.
225
+
226
+ - `PROXY_MONEY_RAIL_RECONCILE_MAX_PROVIDERS_PER_TENANT` (default: `10`)
227
+ Max money-rail providers reconciled per tenant in one run.
228
+
229
+ Maintenance runner (recommended in prod):
230
+
231
+ - `PROXY_MAINTENANCE_INTERVAL_SECONDS` (default: `300`)
232
+ Sleep between cleanup runs in `src/api/maintenance.js`.
233
+
234
+ ## Quotas / backpressure
235
+
236
+ On quota breach, requests return `429` with `code: TENANT_QUOTA_EXCEEDED`.
237
+
238
+ - `PROXY_QUOTA_MAX_OPEN_JOBS` (default: `0` = unlimited)
239
+ - `PROXY_QUOTA_PLATFORM_MAX_OPEN_JOBS` (default: `0` = no platform cap)
240
+
241
+ - `PROXY_QUOTA_MAX_PENDING_DELIVERIES` (default: `0` = unlimited)
242
+ - `PROXY_QUOTA_PLATFORM_MAX_PENDING_DELIVERIES` (default: `0` = no platform cap)
243
+
244
+ - `PROXY_QUOTA_MAX_INGEST_DLQ_DEPTH` (default: `0` = unlimited)
245
+ - `PROXY_QUOTA_PLATFORM_MAX_INGEST_DLQ_DEPTH` (default: `0` = no platform cap)
246
+
247
+ - `PROXY_QUOTA_MAX_EVIDENCE_REFS_PER_JOB` (default: `0` = unlimited)
248
+ - `PROXY_QUOTA_PLATFORM_MAX_EVIDENCE_REFS_PER_JOB` (default: `0` = no platform cap)
249
+
250
+ - `PROXY_QUOTA_MAX_ARTIFACTS_PER_JOB_TYPE` (default: `0` = unlimited)
251
+ - `PROXY_QUOTA_PLATFORM_MAX_ARTIFACTS_PER_JOB_TYPE` (default: `0` = no platform cap)
252
+
253
+ ## Outbox poison-pill
254
+
255
+ - `PROXY_OUTBOX_MAX_ATTEMPTS` (default: `25`)
256
+ After this many attempts, outbox work is marked done with a DLQ error marker.
257
+
258
+ ## Evidence ingest constraints (optional hardening)
259
+
260
+ - `PROXY_EVIDENCE_CONTENT_TYPE_ALLOWLIST` (comma-separated)
261
+ If set, `EVIDENCE_CAPTURED.payload.contentType` must be in the allowlist.
262
+
263
+ - `PROXY_EVIDENCE_REQUIRE_SIZE_BYTES` (`1` requires `EVIDENCE_CAPTURED.payload.sizeBytes`)
264
+ - `PROXY_EVIDENCE_MAX_SIZE_BYTES` (default: `0` = unlimited)
265
+
266
+ ## Backups / restore (Postgres)
267
+
268
+ These helper scripts assume you have Postgres client tools installed (`pg_dump`, `pg_restore`, `psql`).
269
+
270
+ - Backup:
271
+
272
+ ```sh
273
+ DATABASE_URL=postgres://... PROXY_PG_SCHEMA=public OUT_DIR=./backups bash scripts/backup-pg.sh
274
+ ```
275
+
276
+ - Restore (to a fresh DB is recommended):
277
+
278
+ ```sh
279
+ DATABASE_URL=postgres://... PROXY_PG_SCHEMA=public bash scripts/restore-pg.sh ./backups/backup_*/db.dump
280
+ ```
281
+
282
+ - Verify a restored DB:
283
+
284
+ ```sh
285
+ DATABASE_URL=postgres://... PROXY_PG_SCHEMA=public node scripts/verify-pg.js
286
+ ```
287
+
288
+ Verification knobs:
289
+
290
+ - `VERIFY_MAX_STREAMS` (default: `100`)
291
+ - `VERIFY_MAX_ARTIFACTS` (default: `100`)
292
+ - `VERIFY_MAX_LEDGER_ENTRIES` (default: `0` = all)
293
+
294
+ RPO/RTO (practical):
295
+
296
+ - RPO is the time between successful backups.
297
+ - RTO is `restore time + verification time` and scales with DB size.
@@ -0,0 +1,23 @@
1
+ # Contracts APIs (Legacy vs Contracts-as-Code)
2
+
3
+ Settld exposes two separate “contracts” API families on purpose.
4
+
5
+ ## Legacy: `/ops/contracts` (policy upsert)
6
+
7
+ - Semantics: mutable upsert of “policy templates” (JSON `policies.*` blobs).
8
+ - Compatibility: kept for existing integrations and tests.
9
+ - Output: legacy `contract` records with `contractVersion` incrementing per upsert.
10
+
11
+ Use this when you want to keep the existing quoting/booking contract behavior.
12
+
13
+ ## Contracts-as-Code: `/ops/contracts-v2` (hash-addressed documents)
14
+
15
+ - Semantics: immutable, hash-addressed `ContractDocument.v1` documents with optional signatures and an activation step.
16
+ - Output: v2 contract records that carry `contractHash`, `policyHash`, and `compilerId`.
17
+ - Jobs pin hashes at booking-time (so later edits cannot retroactively change what governed the job).
18
+
19
+ Use this when you need audit-grade pinning (hashes), signing, and deterministic compilation.
20
+
21
+ ## Capabilities
22
+
23
+ `GET /capabilities` advertises which contract APIs and schema/compiler versions the server supports.
@@ -0,0 +1,31 @@
1
+ # Deprecation Policy
2
+
3
+ Settld is infrastructure. We don’t break integrators casually.
4
+
5
+ ## Protocol versions (`x-settld-protocol`)
6
+
7
+ - Format: `major.minor` (example: `1.0`)
8
+ - Server advertises:
9
+ - `x-settld-protocol` (current)
10
+ - `x-settld-supported-protocols` (comma-separated)
11
+
12
+ ### Minimum windows
13
+
14
+ - Breaking change requires a protocol bump.
15
+ - Deprecated protocol versions remain supported for **at least 6 months**, except for urgent security fixes.
16
+
17
+ ### Enforcing deprecation cutoffs
18
+
19
+ If configured, the server rejects deprecated versions past cutoff via `PROXY_PROTOCOL_DEPRECATIONS` and reason code `PROTOCOL_DEPRECATED`.
20
+
21
+ ## APIs
22
+
23
+ When an API family is deprecated:
24
+ - it will be called out in `CHANGELOG.md`
25
+ - it may emit a warning header in non-test mode
26
+ - it will have a published replacement
27
+
28
+ Current split:
29
+ - Legacy contracts: `/ops/contracts` (mutable policy upsert; back-compat)
30
+ - Contracts v2: `/ops/contracts-v2` (contracts-as-code; hash-addressed + compiled)
31
+
@@ -0,0 +1,92 @@
1
+ # Settld Domain Model (v0)
2
+
3
+ ## Actors
4
+
5
+ - **Requester**: Household or Business that pays and grants scoped access.
6
+ - **Owner**: supplies executors and receives payouts.
7
+ - **Executor**: endpoint with capabilities, health, and safety profile.
8
+ - **Operator**: remote assist + exception handling; actions are audited.
9
+ - **Developer**: publishes skills.
10
+ - **Trust Counterparty**: insurance/guarantee/claims partner.
11
+
12
+ ## First-class entities
13
+
14
+ ### Job
15
+
16
+ Purchasable outcome with SLA and constraints.
17
+
18
+ Key fields:
19
+
20
+ - `templateId` (e.g., `reset_lite`)
21
+ - constraints (rooms allowed, privacy mode, fragile items, pets, etc.)
22
+ - scheduling window
23
+ - price quote + risk premium
24
+ - selected executor + operator coverage (optional)
25
+ - state machine status
26
+
27
+ ### Task Template
28
+
29
+ Defines:
30
+
31
+ - required skills
32
+ - environment requirements (managed vs home)
33
+ - SLA expectations
34
+ - pricing inputs and guardrails
35
+
36
+ ### Skill
37
+
38
+ Signed bundle:
39
+
40
+ - metadata (name, version, developer, description)
41
+ - required capabilities + safety constraints
42
+ - deterministic policy graph (BT/SM) and tests
43
+ - optional model artifacts
44
+ - certification tier
45
+
46
+ ### Capability
47
+
48
+ Runtime-agnostic API surface (e.g., `ExecuteWorkflow`, `CallTool`, `CollectEvidence`, `ObserveROI`).
49
+
50
+ Executors advertise:
51
+
52
+ - mobility/manipulation properties
53
+ - allowed speed/force envelopes
54
+ - autonomy/teleop allowed flags
55
+ - sensor modes (privacy implications)
56
+
57
+ ### Access Plan
58
+
59
+ Time-bounded, revocable credential set and instructions to access the space:
60
+
61
+ - credential scope + expiry
62
+ - revocation path
63
+ - entry/exit safe behaviors
64
+
65
+ ### Incident / Claim
66
+
67
+ Incident: operationally detected anomaly or requester-reported issue.
68
+
69
+ Claim: workflow for remediation/payout:
70
+
71
+ - triage, classify, evidence bundle attach
72
+ - approve small payouts quickly, escalate large claims
73
+ - ledger adjustments (refunds, owner clawbacks, reserve draws)
74
+
75
+ ### Ledger
76
+
77
+ Double-entry system of record for money movement:
78
+
79
+ - escrow/holds
80
+ - payout splits (owner, Settld fee, operator fee, developer royalty, reserve)
81
+ - refunds, chargebacks, tips
82
+
83
+ Invariant: every journal entry balances to zero.
84
+
85
+ ## Trust scores (initially naive)
86
+
87
+ Used for dispatch, pricing, and environment gating:
88
+
89
+ - executor trust score
90
+ - owner trust score
91
+ - building trust score
92
+ - skill trust score / certification tier