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,63 @@
1
+ # SettlementReceipt.v1
2
+
3
+ `SettlementReceipt.v1` is the canonical settlement-finality artifact for one `AgentRunSettlement.v1` transition.
4
+
5
+ It binds money movement and finality to a `SettlementDecisionRecord` (`v1` or `v2`) through `decisionRef`.
6
+
7
+ ## Purpose
8
+
9
+ - provide an immutable receipt of what settled (`released|refunded`, amounts, rate);
10
+ - capture finality mode/state (`internal_ledger`, `pending|final`);
11
+ - make downstream audit/reputation updates hash-addressable via `receiptHash`.
12
+
13
+ ## Required fields
14
+
15
+ - `schemaVersion` (const: `SettlementReceipt.v1`)
16
+ - `receiptId`
17
+ - `tenantId`
18
+ - `runId`
19
+ - `settlementId`
20
+ - `decisionRef` (`decisionId`, `decisionHash`)
21
+ - `status`
22
+ - `amountCents`
23
+ - `releasedAmountCents`
24
+ - `refundedAmountCents`
25
+ - `releaseRatePct`
26
+ - `currency`
27
+ - `runStatus`
28
+ - `resolutionEventId`
29
+ - `finalityProvider`
30
+ - `finalityState`
31
+ - `settledAt`
32
+ - `createdAt`
33
+ - `receiptHash`
34
+
35
+ Optional fields:
36
+
37
+ - `bindings` (object) mirroring decision-time authorization/request/response binding context:
38
+ - `authorizationRef`
39
+ - `token` (`kid`, `sha256`, `expiresAt`)
40
+ - `request` (`sha256`)
41
+ - `response` (`status`, `sha256`)
42
+ - `providerSig` (`required`, `present`, `verified`, `providerKeyId`, `error`)
43
+ - `reserve` (`adapter`, `mode`, `reserveId`, `status`)
44
+ - `policyDecisionFingerprint` (`fingerprintVersion`, `policyId`, `policyVersion`, `policyHash`, `verificationMethodHash`, `evaluationHash`)
45
+
46
+ ## Internal finality semantics (`Kernel v0`)
47
+
48
+ - `finalityProvider` is `internal_ledger`.
49
+ - `finalityState` is:
50
+ - `pending` while settlement is still `locked`,
51
+ - `final` after one-way resolution to `released|refunded`.
52
+
53
+ ## Canonicalization and hashing
54
+
55
+ `receiptHash` is computed over canonical JSON after removing `receiptHash`:
56
+
57
+ 1. canonicalize JSON with RFC 8785 (JCS),
58
+ 2. hash canonical UTF-8 bytes using `sha256`,
59
+ 3. encode as lowercase hex.
60
+
61
+ ## Schema
62
+
63
+ See `schemas/SettlementReceipt.v1.schema.json`.
@@ -0,0 +1,24 @@
1
+ # SlaDefinition.v1
2
+
3
+ `SlaDefinition.v1` defines a deterministic, offline-evaluable set of SLA rules for a JobProof-derived job stream.
4
+
5
+ In ClosePack bundles, it is stored at `sla/sla_definition.json`.
6
+
7
+ ## Rules (v1)
8
+
9
+ Rules are a bounded DSL; each rule has:
10
+
11
+ - `ruleId` — stable identifier (string).
12
+ - `kind` — one of:
13
+ - `MUST_START_WITHIN_WINDOW`
14
+ - `MAX_EXECUTION_MS`
15
+ - `MAX_STALL_MS`
16
+ - `PROOF_ZONE_COVERAGE_MIN_PCT`
17
+
18
+ Rule semantics are evaluated over:
19
+
20
+ - the embedded JobProof event stream (via the embedded Invoice bundle)
21
+ - the derived job state / proof result emitted in the stream (`PROOF_EVALUATED`), when present
22
+
23
+ No network fetches and no evidence bytes are required.
24
+
@@ -0,0 +1,12 @@
1
+ # SlaEvaluation.v1
2
+
3
+ `SlaEvaluation.v1` is a deterministic evaluation of `SlaDefinition.v1` against a specific JobProof instance.
4
+
5
+ In ClosePack bundles, it is stored at `sla/sla_evaluation.json`.
6
+
7
+ ## Determinism contract
8
+
9
+ If `sla/sla_definition.json` and `sla/sla_evaluation.json` are present, verifiers recompute the evaluation from the embedded JobProof event stream and require **exact match** (canonical JSON) in strict mode.
10
+
11
+ The evaluation must not depend on external systems or evidence bytes.
12
+
@@ -0,0 +1,113 @@
1
+ # Threat Model (v1)
2
+
3
+ This document describes **in-scope threats**, **mitigations**, and **residual risks** for Settld’s bundle protocol and verifier.
4
+
5
+ It is evidence-backed: each mitigation points to the spec and to executable tests/conformance cases.
6
+
7
+ ## Assets (what we protect)
8
+
9
+ - **Payload integrity**: bundle payload files are immutable once committed.
10
+ - **Bundle completeness**: a verifier can detect selective omission or selective inclusion attacks.
11
+ - **Manifest integrity anchor**: `manifestHash` is the primary content commitment.
12
+ - **Attestation integrity anchor**: `attestationHash` (bundle head attestation) binds receipts to “this exact bundle.”
13
+ - **Signer authorization**: only allowed signers (per governance policy) can sign head attestations and verification reports.
14
+ - **Key lifecycle correctness**: rotation/revocation windows are enforced per policy + timeline rules.
15
+ - **Trust anchor correctness**: governance roots/time authorities are injected out-of-band and validated.
16
+ - **Verifier correctness**: canonicalization + hashing are deterministic and cross-implementation portable.
17
+
18
+ ## Adversaries / threat actors
19
+
20
+ - **Malicious producer**: creates a bundle intended to mislead downstream users/auditors.
21
+ - **Malicious distributor**: tampers with, reorders, or swaps bundle contents in transit/storage.
22
+ - **Compromised key**: a signing key is stolen or misused.
23
+ - **Malicious verifier environment**: compromised filesystem, dependency, or runtime; attacker attempts to trick hashing/reading.
24
+ - **Confused-deputy CI**: pipelines unintentionally verify in a permissive posture or ignore warnings.
25
+
26
+ ## Threats → mitigations (explicit mapping)
27
+
28
+ ### T1: Payload tampering (modify payload files after bundling)
29
+
30
+ - **Mitigation**: manifest enumerates file hashes; verifier re-hashes and compares.
31
+ - Spec: `ProofBundleManifest.v1.md`, `FinancePackBundleManifest.v1.md`
32
+ - Enforcement:
33
+ - Job/Month proof: `packages/artifact-verify/src/job-proof-bundle.js:39` (manifest file hashing)
34
+ - FinancePack: `packages/artifact-verify/src/finance-pack-bundle.js:40` (manifest file hashing)
35
+ - Evidence:
36
+ - Conformance: `conformance/v1/cases.json` case `*_strict_fail_manifest_tamper`
37
+ - Fixtures: `test/verify-fixture-bundles.test.js` (CLI matrix strict-fail tamper cases)
38
+
39
+ ### T2: Mix-and-match (swap a valid report/attestation from bundle A onto bundle B)
40
+
41
+ - **Mitigation**: verification report is bound to both `manifestHash` and `bundleHeadAttestation.attestationHash`.
42
+ - Spec: `VerificationReport.v1.md`, `BundleHeadAttestation.v1.md`
43
+ - Enforcement:
44
+ - Proof report subject manifest binding: `packages/artifact-verify/src/job-proof-bundle.js:148`–`174`
45
+ - Proof report head attestation binding: `packages/artifact-verify/src/job-proof-bundle.js:176`–`184`
46
+ - Evidence:
47
+ - Fixtures: `test/verify-fixture-bundles.test.js` includes strict binding mismatch cases
48
+
49
+ ### T3: Replay (present old but valid artifacts after key revocation / outside validity)
50
+
51
+ - **Mitigation**: key validity windows + prospective revocation timeline enforcement; optional trustworthy `timestampProof` influences effective signing time.
52
+ - Spec: `RevocationList.v1.md`, `TimestampProof.v1.md`, `GovernancePolicy.v2.md`
53
+ - Enforcement:
54
+ - Head attestation timeline enforcement: `packages/artifact-verify/src/job-proof-bundle.js:1152`–`1163`
55
+ - Verification report timeline enforcement (proof bundles): `packages/artifact-verify/src/job-proof-bundle.js:215`–`233`
56
+ - Evidence:
57
+ - Tests: `test/job-proof-bundle-verify-strict-revocation-timeproof.test.js`
58
+
59
+ ### T4: Downgrade (force non-strict / accept legacy surfaces silently)
60
+
61
+ - **Mitigation**: strict/non-strict is explicit; non-strict “warn + continue” is coded with stable warning codes; `--fail-on-warnings` can harden non-strict deployments.
62
+ - Spec: `STRICTNESS.md`, `WARNINGS.md`, `VerifyCliOutput.v1.md`
63
+ - Enforcement:
64
+ - Missing report strict vs warn: `docs/spec/STRICTNESS.md` and verifier implementations.
65
+ - CLI warning gating: `packages/artifact-verify/bin/settld-verify.js:112`–`121`
66
+ - Evidence:
67
+ - Conformance: `conformance/v1/cases.json` case `financepack_strict_fail_on_warnings_tool_version_unknown`
68
+
69
+ ### T5: Trust-root substitution (attacker provides wrong governance root keys)
70
+
71
+ - **Mitigation**: verifier requires out-of-band trust roots in strict mode; wrong roots fail signature/trust checks.
72
+ - Spec: `TRUST_ANCHORS.md`
73
+ - Enforcement:
74
+ - Strict requires trusted governance root keys: `packages/artifact-verify/src/job-proof-bundle.js:1338` and `packages/artifact-verify/src/finance-pack-bundle.js:539`
75
+ - Evidence:
76
+ - Conformance: `conformance/v1/cases.json` cases `financepack_strict_fail_trust_roots_missing` and `financepack_strict_fail_trust_roots_wrong`
77
+
78
+ ### T6: Path traversal / symlink exfiltration (verifier reads outside-bundle files)
79
+
80
+ - **Mitigation**: manifest entry paths are validated as bundle-relative; `..` and absolute paths are rejected; symlinks are forbidden for manifest-listed files.
81
+ - Spec: `REFERENCE_VERIFIER_BEHAVIOR.md`
82
+ - Enforcement:
83
+ - Pre-validate manifest entries before any hash-binding: `packages/artifact-verify/src/bundle-path.js:13`–`53`
84
+ - Enforced pre-validation order:
85
+ - Proof bundles: `packages/artifact-verify/src/job-proof-bundle.js:1247`–`1250`
86
+ - FinancePack: `packages/artifact-verify/src/finance-pack-bundle.js:460`–`463`
87
+ - Symlink refusal:
88
+ - Proof bundles: `packages/artifact-verify/src/job-proof-bundle.js:75`
89
+ - FinancePack: `packages/artifact-verify/src/finance-pack-bundle.js:71`
90
+ - Evidence:
91
+ - Conformance: `conformance/v1/cases.json` cases `security_manifest_path_traversal`, `security_manifest_duplicate_paths`, `security_bundle_symlink_outside`
92
+
93
+ ### T7: Algorithm confusion / weak algorithms
94
+
95
+ - **Mitigation**: governance policy carries an allowed-algorithm list; verifier rejects policies that don’t allow required algorithms.
96
+ - Spec: `GovernancePolicy.v2.md`, `CRYPTOGRAPHY.md`
97
+ - Enforcement:
98
+ - Allowed algorithms check: `packages/artifact-verify/src/governance-policy.js:10`–`17` and policy signature verification paths.
99
+ - Evidence:
100
+ - Unit/fixture coverage through strict verification test suite.
101
+
102
+ ## Assumptions (must be true for guarantees to hold)
103
+
104
+ - The verifier process can read bundle files and trust anchors from a reasonably honest filesystem (see `VERIFIER_ENVIRONMENT.md`).
105
+ - Trusted governance roots and (optionally) time authorities are distributed out-of-band and are pinned/managed per `TRUST_ANCHORS.md`.
106
+ - Signature private keys are protected; if keys are compromised, the protocol relies on revocation/rotation to limit blast radius.
107
+
108
+ ## Residual risks (explicitly not solved yet)
109
+
110
+ - **Compromised build pipeline / dependency supply chain**: a malicious verifier build can lie. Mitigation lives in release discipline + SBOM + reproducible builds (outside v1 protocol core).
111
+ - **Compromised OS or kernel**: an attacker controlling the runtime can tamper with file reads.
112
+ - **UI/operational misuse**: running non-strict without gating warnings may be unacceptable in regulated workflows (see `VERIFIER_ENVIRONMENT.md`).
113
+
@@ -0,0 +1,30 @@
1
+ # Tool provenance (version + commit)
2
+
3
+ Settld surfaces tool identity in:
4
+
5
+ - `VerificationReport.v1.tool` (producer/receipt provenance)
6
+ - `VerifyCliOutput.v1.tool` (verifier CLI provenance)
7
+
8
+ ## Commit derivation (best-effort)
9
+
10
+ When a commit/build identifier is not explicitly provided by the caller, tools try these environment variables in order:
11
+
12
+ 1. `SETTLD_COMMIT_SHA`
13
+ 2. `PROXY_BUILD` (Docker build arg often mapped from `GIT_SHA`)
14
+ 3. `GIT_SHA`
15
+ 4. `GITHUB_SHA`
16
+
17
+ Accepted values: lowercase hex `[0-9a-f]{7,64}` (normalized to lowercase).
18
+
19
+ If no valid value is available, tools omit `tool.commit` (or set it to `null` in CLI output) and producers emit `TOOL_COMMIT_UNKNOWN`.
20
+
21
+ ## Version derivation (best-effort)
22
+
23
+ When a version is not explicitly provided by the caller, tools try:
24
+
25
+ 1. `SETTLD_VERSION` (if set in the environment)
26
+ 2. Repo/service version stamp from `SETTLD_VERSION` file (when present in the working directory)
27
+ 3. Package `package.json` version (for published tools like `settld-verify`)
28
+
29
+ If no value is available, tools omit `tool.version` (or set it to `null` in CLI output) and producers emit `TOOL_VERSION_UNKNOWN`.
30
+
@@ -0,0 +1,84 @@
1
+ # Trust anchors (out-of-band)
2
+
3
+ Strict verification requires **trusted root keys** that are *not* bundled inside artifacts.
4
+
5
+ This is intentional: bundling trust anchors inside the thing being verified would create a trust-loop.
6
+
7
+ ## Release authenticity trust (separate domain)
8
+
9
+ Settld release authenticity (verifying the tool distribution artifacts themselves) uses a **separate trust domain** from bundle verification.
10
+
11
+ - Release trust roots live in `trust/release-trust.json` (see `ReleaseTrust.v2.md`).
12
+ - Release verification CLI: `settld-release verify --dir <release-assets-dir> --trust-file trust/release-trust.json --format json`
13
+
14
+ Do not mix release signing keys with bundle/governance signing keys (different purpose, different blast radius).
15
+
16
+ ## Governance roots (required for strict)
17
+
18
+ `GovernancePolicy.v2` and `RevocationList.v1` are signed by governance root keys that must be trusted out-of-band.
19
+
20
+ Verifier input mechanism:
21
+
22
+ - `SETTLD_TRUSTED_GOVERNANCE_ROOT_KEYS_JSON`
23
+ - JSON object mapping `keyId -> publicKeyPem`
24
+ - required for strict verification
25
+
26
+ Recommended operational posture:
27
+
28
+ - Store the trust roots JSON (or a `trust.json` file that contains it) in version control.
29
+ - Distribute updates via PR + review (treat as a security-sensitive change).
30
+ - Pin tool versions in CI (see `docs/spec/VERSIONING.md`) so a verification receipt can be mapped to a stable tool build.
31
+ - For regulated workflows: run strict mode and gate on warnings (`--fail-on-warnings`) when policy requires it (see `STRICTNESS.md` and `WARNINGS.md`).
32
+
33
+ ## Buyer pricing signer keys (required for strict InvoiceBundle pricing terms)
34
+
35
+ Invoice bundles may include buyer-approved pricing terms via `pricing/pricing_matrix_signatures.json` (`PricingMatrixSignatures.*`).
36
+
37
+ Verifier input mechanism:
38
+
39
+ - `SETTLD_TRUSTED_PRICING_SIGNER_KEYS_JSON`
40
+ - JSON object mapping `keyId -> publicKeyPem`
41
+ - required to validate buyer pricing signatures in strict mode
42
+
43
+ Optional restriction:
44
+
45
+ - `SETTLD_TRUSTED_PRICING_SIGNER_KEY_IDS_JSON`
46
+ - JSON array of allowed `keyId` strings
47
+ - when set and non-empty, only signatures by these key IDs are treated as trusted (even if additional keys are present in `SETTLD_TRUSTED_PRICING_SIGNER_KEYS_JSON`)
48
+
49
+ Do not overload governance roots: pricing signer trust is a separate trust set with a distinct purpose and blast radius.
50
+
51
+ ## Buyer decision signer keys (required to verify SettlementDecisionReport)
52
+
53
+ Buyer approval/hold receipts (`SettlementDecisionReport.v1`) are signed and must be verified under a buyer-controlled trust set.
54
+
55
+ Verifier input mechanism:
56
+
57
+ - `SETTLD_TRUSTED_SETTLEMENT_DECISION_SIGNER_KEYS_JSON`
58
+ - JSON object mapping `keyId -> publicKeyPem`
59
+ - required to validate settlement decision report signatures
60
+
61
+ ## Time authorities (required only when needed)
62
+
63
+ Bundles may include `timestampProof` objects that require a verifier-trusted time authority key.
64
+
65
+ Verifier input mechanism:
66
+
67
+ - `SETTLD_TRUSTED_TIME_AUTHORITY_KEYS_JSON`
68
+ - JSON object mapping `keyId -> publicKeyPem`
69
+ - required only when verifying a timestamp proof that must be trusted in strict mode
70
+
71
+ ## Fixture corpus convention
72
+
73
+ The committed end-to-end fixtures under `test/fixtures/bundles/v1/**` include a `trust.json` file that contains the trusted keys used by tests.
74
+
75
+ The CLI fixture harness reads that file and injects the corresponding env vars when running `settld-verify` against fixtures.
76
+
77
+ ## Rotation workflow (example)
78
+
79
+ 1. Add the new root key to your trust file (do not remove the old one yet).
80
+ 2. Roll out the trust file change to CI/verifier environments.
81
+ 3. Begin signing new governance policy streams with the new root key.
82
+ 4. Once all verifiers are updated and the old root is no longer needed, remove the old root key from the trust file.
83
+
84
+ If you remove a trust root key too early, strict verification will fail with trust-related errors (see `ERRORS.md`).
@@ -0,0 +1,90 @@
1
+ # TenantSettings.v1
2
+
3
+ `TenantSettings.v1` is the **tenant-scoped configuration contract** for Settld Verify Cloud / Magic Link.
4
+
5
+ This version is legacy and is superseded by `TenantSettings.v2` (which adds artifact storage controls and archival export sinks).
6
+
7
+ It controls:
8
+
9
+ - default verification posture (`auto|strict|compat`)
10
+ - tenant-specific governance trust roots (for strict verification without deploy-time env config)
11
+ - tenant-specific pricing signer keys (for strict verification of buyer-approved pricing terms)
12
+ - retention and quota limits
13
+ - buyer policy controls for vendor submissions
14
+ - buyer portal authentication + RBAC (service-level)
15
+ - buyer decision authentication controls (service-level)
16
+ - buyer decision signing configuration (service-level)
17
+ - webhook configuration
18
+
19
+ ## Schema
20
+
21
+ See `schemas/TenantSettings.v1.schema.json`.
22
+
23
+ ## Vendor / contract policy controls (service-level)
24
+
25
+ `vendorPolicies` and `contractPolicies` are **service-level** enforcement knobs for Verify Cloud. They do **not** change `InvoiceBundle.v1`.
26
+
27
+ Policy selection precedence:
28
+
29
+ 1. `contractPolicies[contractId]` (if `contractId` is present on the run)
30
+ 2. `vendorPolicies[vendorId]` (if `vendorId` is present on the run)
31
+ 3. no policy
32
+
33
+ Policy fields:
34
+
35
+ - `requiredMode`: `auto|strict|compat` override for how the hosted verifier runs (independent of uploader requested mode).
36
+ - `failOnWarnings`: if true, hosted output is failed when any warnings are present (same as CLI `--fail-on-warnings` posture).
37
+ - `allowAmberApprovals`: if false, buyers cannot record **Approve** decisions when status is Amber.
38
+ - `requireProducerReceiptPresent`: if true, hosted output fails if `verify/verification_report.json` is missing (even in compat mode).
39
+ - `requiredPricingMatrixSignerKeyIds`: when set, hosted verification fails unless `pricing/pricing_matrix_signatures.json` includes at least one trusted signature whose `signerKeyId` is allowlisted by this policy.
40
+ - `retentionDays`: optional per-policy retention override for runs matching that vendor/contract.
41
+
42
+ ## Decision authentication (service-level)
43
+
44
+ `decisionAuthEmailDomains` configures optional **email OTP gating** for buyer decision actions (`Approve`/`Hold`) on Magic Links.
45
+
46
+ - If empty (default): decision capture is unauthenticated and relies on typed actor name+email.
47
+ - If non-empty: decision capture requires an email OTP, and the email domain MUST match one of the configured domains.
48
+
49
+ This is a service control plane feature (not part of the frozen `InvoiceBundle.v1` protocol).
50
+
51
+ ## Buyer portal authentication + RBAC (service-level)
52
+
53
+ Verify Cloud supports **buyer portal** access without sharing the tenant API key.
54
+
55
+ This is a service control plane feature (not part of the frozen `InvoiceBundle.v1` protocol).
56
+
57
+ ### Authentication
58
+
59
+ `buyerAuthEmailDomains` configures **email OTP login** for buyer users.
60
+
61
+ - If empty (default): buyer portal OTP login is disabled.
62
+ - If non-empty: buyers can request an OTP and establish a session if their email domain matches one of the configured domains.
63
+
64
+ ### Roles
65
+
66
+ `buyerUserRoles` is an optional mapping from **buyer email → role**:
67
+
68
+ - `admin`: manage settings, ingest keys, policies, exports, billing
69
+ - `approver`: view inbox, export audit packet/CSV, approve/hold (via signed `SettlementDecisionReport.v1`)
70
+ - `viewer`: view inbox only
71
+
72
+ If an email is not listed in `buyerUserRoles`, it is treated as `viewer`.
73
+
74
+ ## Pricing signer trust (service-level)
75
+
76
+ `pricingSignerKeysJson` is an optional tenant-scoped trust set for **buyer pricing signer keys**.
77
+
78
+ It is used to populate `SETTLD_TRUSTED_PRICING_SIGNER_KEYS_JSON` for hosted verification runs so that
79
+ `pricing/pricing_matrix_signatures.json` can be validated in strict mode.
80
+
81
+ `trustedPricingSignerKeyIds` is an optional allowlist of key IDs. When set and non-empty, Verify Cloud MUST treat only those key IDs as trusted pricing signers (even if additional keys exist in `pricingSignerKeysJson`).
82
+
83
+ ## Settlement decision signing (service-level)
84
+
85
+ `settlementDecisionSigner` configures how Verify Cloud signs buyer approval/hold receipts (`SettlementDecisionReport.v1`).
86
+
87
+ Supported modes:
88
+
89
+ - local PEM private key (pilot posture)
90
+ - delegated remote signer (hardened key custody)
@@ -0,0 +1,99 @@
1
+ # TenantSettings.v2
2
+
3
+ `TenantSettings.v2` is the **tenant-scoped configuration contract** for Settld Verify Cloud / Magic Link.
4
+
5
+ It is a backwards-compatible evolution of `TenantSettings.v1` that adds:
6
+
7
+ - per-tenant artifact storage cost controls (`artifactStorage`)
8
+ - tenant-configurable archival export sink (`archiveExportSink`)
9
+ - buyer notification delivery config (`buyerNotifications`)
10
+ - automatic settlement decision policy controls (`autoDecision`)
11
+ - payment trigger delivery controls (`paymentTriggers`)
12
+ - tenant-scoped request rate limits (`rateLimits`)
13
+
14
+ ## Schema
15
+
16
+ See `schemas/TenantSettings.v2.schema.json`.
17
+
18
+ ## Vendor / contract policy controls (service-level)
19
+
20
+ Unchanged from `TenantSettings.v1`:
21
+
22
+ - `vendorPolicies` and `contractPolicies` are Verify Cloud enforcement knobs and do **not** change `InvoiceBundle.v1`.
23
+
24
+ ## Artifact storage controls (service-level)
25
+
26
+ `artifactStorage` controls what Verify Cloud persists under `MAGIC_LINK_DATA_DIR`.
27
+
28
+ Fields:
29
+
30
+ - `storeBundleZip` (default `true`): persist `zips/<token>.zip` so a buyer can download the exact bytes that were verified.
31
+ - `storePdf` (default `true`): persist `pdf/<token>.pdf` when an invoice claim is present.
32
+ - `precomputeMonthlyAuditPackets` (default `false`): allow the service to cache monthly audit packet zips for export sinks (still safe to generate on-demand).
33
+
34
+ These are service controls (not part of the frozen `InvoiceBundle.v1` protocol).
35
+
36
+ ## Archival export sink (service-level)
37
+
38
+ `archiveExportSink` configures an optional monthly archival push of:
39
+
40
+ - monthly audit packet ZIP (`/v1/tenants/:tenant/audit-packet?month=…`)
41
+ - monthly CSV export (`/v1/tenants/:tenant/export.csv?month=…`)
42
+
43
+ Supported sink types:
44
+
45
+ - `s3`: S3-compatible object storage.
46
+
47
+ Secrets (e.g. `secretAccessKey`) are encrypted at rest when `MAGIC_LINK_SETTINGS_KEY_HEX` is configured.
48
+
49
+ ## Buyer notifications (service-level)
50
+
51
+ `buyerNotifications` configures post-verification delivery of buyer links.
52
+
53
+ Fields:
54
+
55
+ - `emails`: recipient list (normalized lowercase emails).
56
+ - `deliveryMode`: `smtp|webhook|record`.
57
+ - `webhookUrl`: required when `deliveryMode=webhook`.
58
+ - `webhookSecret`: optional HMAC secret for webhook delivery (encrypted at rest when settings key is configured).
59
+
60
+ Notification delivery is idempotent per run token.
61
+
62
+ ## Auto-decision policy (service-level)
63
+
64
+ `autoDecision` configures optional automatic buyer decisions immediately after verification completes.
65
+
66
+ Fields:
67
+
68
+ - `enabled`: turn policy automation on/off.
69
+ - `approveOnGreen`: auto-approve `green` runs.
70
+ - `approveOnAmber`: auto-approve `amber` runs.
71
+ - `holdOnRed`: auto-hold `red` runs.
72
+ - `templateIds`: optional template allowlist. When set, auto-decision only applies to listed SLA template IDs.
73
+ - `actorName` / `actorEmail`: actor identity stamped into `SettlementDecisionReport.v1` for automated decisions.
74
+
75
+ Automated decisions are best-effort and respect idempotency/lockout (`DECISION_ALREADY_RECORDED`).
76
+
77
+ ## Payment triggers (service-level)
78
+
79
+ `paymentTriggers` configures optional outbound delivery when an artifact is approved.
80
+
81
+ Fields:
82
+
83
+ - `enabled`: enable/disable payment trigger delivery.
84
+ - `deliveryMode`: `record|webhook`.
85
+ - `webhookUrl`: required when `enabled=true` and `deliveryMode=webhook`.
86
+ - `webhookSecret`: optional HMAC signing secret (encrypted at rest when settings key is configured).
87
+
88
+ Delivery is idempotent per approved decision report hash.
89
+
90
+ ## Tenant rate limits (service-level)
91
+
92
+ `rateLimits` configures tenant + IP window limits:
93
+
94
+ - `uploadsPerHour` (default `100`)
95
+ - `verificationViewsPerHour` (default `1000`)
96
+ - `decisionsPerHour` (default `300`)
97
+ - `otpRequestsPerHour` (default `300`)
98
+
99
+ Exceeded limits return `429` with a `Retry-After` header.
@@ -0,0 +1,25 @@
1
+ # TimestampProof.v1
2
+
3
+ This document defines a **trustworthy signing time** proof that can be embedded inside signed protocol documents (e.g. `BundleHeadAttestation.v1` and `VerificationReport.v1`).
4
+
5
+ ## Semantics
6
+
7
+ `TimestampProof.v1` is an **independent attestation of time** over a specific message hash. It exists so strict verification can support “historical acceptance” under prospective revocation rules without trusting a signer-controlled timestamp field.
8
+
9
+ v1 supports one proof kind:
10
+
11
+ - `kind = "ed25519_time_authority"` — an Ed25519 signature by a trusted time authority key.
12
+
13
+ Fields:
14
+
15
+ - `timestamp`: the asserted timestamp (RFC3339 / ISO string).
16
+ - `messageHash`: `sha256` hex of the canonical JSON bytes of the signed document’s **core payload**, computed **without** the `timestampProof` field.
17
+ - `signerKeyId` / `signature`: the time authority signature.
18
+
19
+ ## Trust model (strict verification)
20
+
21
+ Strict verification MUST treat the time as trustworthy only if:
22
+
23
+ - the proof verifies cryptographically, and
24
+ - the proof’s signer key is trusted out-of-band by the verifier (a “time authority” trust anchor).
25
+
@@ -0,0 +1,34 @@
1
+ # ToolCallAgreement.v1
2
+
3
+ `ToolCallAgreement.v1` binds a payable tool invocation to deterministic settlement terms.
4
+
5
+ The output is a hash-addressable agreement (`agreementHash`) that can be referenced by downstream holds, disputes, and receipts without trusting an online service.
6
+
7
+ ## Fields
8
+
9
+ Required:
10
+
11
+ - `schemaVersion` (const: `ToolCallAgreement.v1`)
12
+ - `toolId` (string)
13
+ - `manifestHash` (sha256 hex; hash of the referenced `ToolManifest.v1`)
14
+ - `callId` (string; tool-call correlation id)
15
+ - `inputHash` (sha256 hex; hash of canonical JSON of the tool-call input payload)
16
+ - `acceptanceCriteria` (object or `null`)
17
+ - `settlementTerms` (object or `null`)
18
+ - `payerAgentId` (string or `null`)
19
+ - `payeeAgentId` (string or `null`)
20
+ - `createdAt` (ISO 8601 date-time)
21
+ - `agreementHash` (sha256 hex)
22
+
23
+ ## Canonicalization + hashing
24
+
25
+ 1. Canonicalize using RFC 8785 (JCS).
26
+ 2. The `agreementHash` is `sha256` over UTF-8 bytes of canonical JSON of the **agreement core**:
27
+ - the full `ToolCallAgreement.v1` object **excluding** the `agreementHash` field.
28
+
29
+ Implementations must treat the nullable fields (`acceptanceCriteria`, `settlementTerms`, `payerAgentId`, `payeeAgentId`) as present with explicit `null` when absent so `agreementHash` does not depend on “omitted vs null” representation.
30
+
31
+ ## Schema
32
+
33
+ See `docs/spec/schemas/ToolCallAgreement.v1.schema.json`.
34
+
@@ -0,0 +1,47 @@
1
+ # ToolCallEvidence.v1
2
+
3
+ `ToolCallEvidence.v1` records the outcome of a tool invocation (`outputHash`, optional references/metrics) and binds it to a `ToolCallAgreement.v1` via `agreementHash`.
4
+
5
+ The output is a hash-addressable evidence record (`evidenceHash`) that can be optionally signed by an agent key.
6
+
7
+ ## Fields
8
+
9
+ Required:
10
+
11
+ - `schemaVersion` (const: `ToolCallEvidence.v1`)
12
+ - `agreementHash` (sha256 hex; points to `ToolCallAgreement.v1`)
13
+ - `callId` (string; must match the agreement `callId`)
14
+ - `inputHash` (sha256 hex; must match the agreement `inputHash`)
15
+ - `outputHash` (sha256 hex; hash of canonical JSON of the tool-call output payload)
16
+ - `outputRef` (string or `null`; optional pointer to stored output)
17
+ - `metrics` (object or `null`; optional timing/quality metrics)
18
+ - `startedAt` (ISO 8601 date-time)
19
+ - `completedAt` (ISO 8601 date-time)
20
+ - `createdAt` (ISO 8601 date-time)
21
+ - `evidenceHash` (sha256 hex)
22
+
23
+ Optional:
24
+
25
+ - `signature` (object): Ed25519 signature over `evidenceHash`
26
+ - `algorithm` (const: `ed25519`)
27
+ - `signerKeyId` (string)
28
+ - `evidenceHash` (sha256 hex; must equal the parent `evidenceHash`)
29
+ - `signature` (base64)
30
+
31
+ ## Canonicalization + hashing
32
+
33
+ 1. Canonicalize using RFC 8785 (JCS).
34
+ 2. The `evidenceHash` is `sha256` over UTF-8 bytes of canonical JSON of the **evidence core**:
35
+ - the full `ToolCallEvidence.v1` object excluding `evidenceHash` and `signature`.
36
+
37
+ Implementations must treat the nullable fields (`outputRef`, `metrics`) as present with explicit `null` when absent so `evidenceHash` does not depend on “omitted vs null” representation.
38
+
39
+ ## Signing
40
+
41
+ - When present, `signature.signature` is an Ed25519 signature over the **bytes** of `evidenceHash` (hex), base64-encoded.
42
+ - Verifiers should ensure `signature.evidenceHash` matches the enclosing `evidenceHash` before verifying the signature.
43
+
44
+ ## Schema
45
+
46
+ See `docs/spec/schemas/ToolCallEvidence.v1.schema.json`.
47
+