settld 0.1.1 → 0.1.5

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 (441) hide show
  1. package/README.md +61 -3
  2. package/SETTLD_VERSION +1 -1
  3. package/bin/settld-mcp +2 -0
  4. package/bin/settld.js +13 -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 +140 -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 +337 -0
  36. package/docs/QUICKSTART_MCP_HOSTS.md +143 -0
  37. package/docs/QUICKSTART_PRODUCE.md +61 -0
  38. package/docs/QUICKSTART_RELEASE_VERIFY.md +39 -0
  39. package/docs/QUICKSTART_SDK.md +125 -0
  40. package/docs/QUICKSTART_SDK_PYTHON.md +111 -0
  41. package/docs/QUICKSTART_VERIFY.md +54 -0
  42. package/docs/QUICKSTART_X402_GATEWAY.md +317 -0
  43. package/docs/README.md +15 -0
  44. package/docs/RELEASE_CHECKLIST.md +156 -0
  45. package/docs/RELEASING.md +81 -0
  46. package/docs/REPO_SETTINGS.md +37 -0
  47. package/docs/RUNBOOK.md +86 -0
  48. package/docs/SKILLS.md +42 -0
  49. package/docs/SKILL_BUNDLE_FORMAT.md +48 -0
  50. package/docs/SLO.md +70 -0
  51. package/docs/SUMMARY.md +16 -0
  52. package/docs/SUPPORT.md +31 -0
  53. package/docs/THREAT_MODEL.md +36 -0
  54. package/docs/TRUST.md +59 -0
  55. package/docs/WORKFLOW.md +35 -0
  56. package/docs/X402_BATCH_SETTLEMENT.md +126 -0
  57. package/docs/blog/2026-02-14-your-ai-agent-just-spent-500-where-is-the-receipt.md +73 -0
  58. package/docs/examples/x402-provider-payout-registry.example.json +14 -0
  59. package/docs/gitbook/README.md +52 -0
  60. package/docs/gitbook/SETUP.md +25 -0
  61. package/docs/gitbook/SUMMARY.md +15 -0
  62. package/docs/gitbook/api-reference.md +73 -0
  63. package/docs/gitbook/closepacks.md +55 -0
  64. package/docs/gitbook/conformance.md +59 -0
  65. package/docs/gitbook/core-primitives.md +85 -0
  66. package/docs/gitbook/dispute-lifecycle.md +33 -0
  67. package/docs/gitbook/faq.md +21 -0
  68. package/docs/gitbook/guides.md +49 -0
  69. package/docs/gitbook/operations-runbook.md +36 -0
  70. package/docs/gitbook/quickstart.md +104 -0
  71. package/docs/gitbook/replay-and-audit.md +30 -0
  72. package/docs/gitbook/sdk-reference.md +35 -0
  73. package/docs/gitbook/security-model.md +58 -0
  74. package/docs/integrations/README.md +14 -0
  75. package/docs/integrations/github-actions-verify.yml +31 -0
  76. package/docs/integrations/github-actions.md +34 -0
  77. package/docs/integrations/openclaw/CLAWHUB_PUBLISH_CHECKLIST.md +65 -0
  78. package/docs/integrations/openclaw/settld-mcp-skill/SKILL.md +69 -0
  79. package/docs/integrations/openclaw/settld-mcp-skill/mcp-server.example.json +12 -0
  80. package/docs/kernel-compatible/capabilities.json +36 -0
  81. package/docs/marketing/agent-commerce-substrate.md +78 -0
  82. package/docs/marketing/hn-repost-2026-02-17.md +102 -0
  83. package/docs/marketing/show-hn-post.md +45 -0
  84. package/docs/ops/ARTIFACT_VERIFICATION_STATUS.md +43 -0
  85. package/docs/ops/BILLING_WEBHOOK_REPLAY.md +105 -0
  86. package/docs/ops/CI_FLAKE_BUDGET.md +31 -0
  87. package/docs/ops/GO_LIVE_GATE_S13.md +27 -0
  88. package/docs/ops/HOSTED_BASELINE_R2.md +129 -0
  89. package/docs/ops/KERNEL_V0_SHIP_GATE.md +67 -0
  90. package/docs/ops/LIGHTHOUSE_PRODUCTION_CLOSE.md +51 -0
  91. package/docs/ops/MCP_COMPATIBILITY_MATRIX.md +28 -0
  92. package/docs/ops/MINIMUM_PRODUCTION_TOPOLOGY.md +89 -0
  93. package/docs/ops/P0_BACKEND_PROGRESS.md +150 -0
  94. package/docs/ops/PAYMENTS_ALPHA_R5.md +105 -0
  95. package/docs/ops/PILOT_ONBOARDING_RUNBOOK.md +112 -0
  96. package/docs/ops/PRODUCTION_DEPLOYMENT_CHECKLIST.md +103 -0
  97. package/docs/ops/R1_SLOS.md +66 -0
  98. package/docs/ops/RELEASE_SIGNING_INCIDENT.md +58 -0
  99. package/docs/ops/SELF_SERVE_LAUNCH_AUTOMATION.md +89 -0
  100. package/docs/ops/THROUGHPUT_DRILL_10X.md +48 -0
  101. package/docs/ops/TRUST_CONFIG_WIZARD.md +47 -0
  102. package/docs/ops/X402_PILOT_WEEKLY_METRICS.md +76 -0
  103. package/docs/ops/tool-call-disputes-holdback.md +52 -0
  104. package/docs/pilot-kit/PILOT_PACKAGE_SCORECARD_X402.md +46 -0
  105. package/docs/pilot-kit/README.md +29 -0
  106. package/docs/pilot-kit/architecture-one-pager.md +48 -0
  107. package/docs/pilot-kit/buyer-email.txt +19 -0
  108. package/docs/pilot-kit/buyer-one-pager.md +31 -0
  109. package/docs/pilot-kit/gtm-pilot-playbook.md +182 -0
  110. package/docs/pilot-kit/offline-verify.md +33 -0
  111. package/docs/pilot-kit/procurement-one-pager.md +50 -0
  112. package/docs/pilot-kit/rfp-clause.md +46 -0
  113. package/docs/pilot-kit/roi-calculator-template.csv +2 -0
  114. package/docs/pilot-kit/security-qa.md +153 -0
  115. package/docs/pilot-kit/security-summary.md +35 -0
  116. package/docs/plans/2026-02-13-mcp-spike-design.md +113 -0
  117. package/docs/spec/AcceptanceCriteria.v1.md +17 -0
  118. package/docs/spec/AcceptanceEvaluation.v1.md +10 -0
  119. package/docs/spec/AgentEvent.v1.md +47 -0
  120. package/docs/spec/AgentIdentity.v1.md +62 -0
  121. package/docs/spec/AgentPassport.v1.md +95 -0
  122. package/docs/spec/AgentReputation.v1.md +59 -0
  123. package/docs/spec/AgentReputation.v2.md +52 -0
  124. package/docs/spec/AgentRun.v1.md +47 -0
  125. package/docs/spec/AgentRunSettlement.v1.md +52 -0
  126. package/docs/spec/AgentWallet.v1.md +43 -0
  127. package/docs/spec/AgreementDelegation.v1.md +109 -0
  128. package/docs/spec/ArbitrationCase.v1.md +67 -0
  129. package/docs/spec/ArbitrationVerdict.v1.md +60 -0
  130. package/docs/spec/BundleHeadAttestation.v1.md +32 -0
  131. package/docs/spec/CANONICAL_JSON.md +31 -0
  132. package/docs/spec/CRYPTOGRAPHY.md +61 -0
  133. package/docs/spec/ClosePack.v1.md +49 -0
  134. package/docs/spec/ClosePackManifest.v1.md +24 -0
  135. package/docs/spec/DelegationGrant.v1.md +90 -0
  136. package/docs/spec/DisputeOpenEnvelope.v1.md +43 -0
  137. package/docs/spec/ERRORS.md +76 -0
  138. package/docs/spec/ESCROW_NETTING_INVARIANTS.md +71 -0
  139. package/docs/spec/EvidenceIndex.v1.md +20 -0
  140. package/docs/spec/ExecutionIntent.v1.md +90 -0
  141. package/docs/spec/FinancePackBundleManifest.v1.md +24 -0
  142. package/docs/spec/FundingHold.v1.md +60 -0
  143. package/docs/spec/GovernancePolicy.v1.md +34 -0
  144. package/docs/spec/GovernancePolicy.v2.md +30 -0
  145. package/docs/spec/INVARIANTS.md +389 -0
  146. package/docs/spec/InteractionDirectionMatrix.v1.md +30 -0
  147. package/docs/spec/InvoiceBundleManifest.v1.md +24 -0
  148. package/docs/spec/InvoiceClaim.v1.md +11 -0
  149. package/docs/spec/MONEY_RAIL_STATE_MACHINE.md +58 -0
  150. package/docs/spec/MarketplaceAcceptance.v2.md +46 -0
  151. package/docs/spec/MarketplaceOffer.v2.md +54 -0
  152. package/docs/spec/MeteringReport.v1.md +18 -0
  153. package/docs/spec/PRODUCER_ERRORS.md +42 -0
  154. package/docs/spec/PricingMatrix.v1.md +20 -0
  155. package/docs/spec/PricingMatrixSignatures.v1.md +30 -0
  156. package/docs/spec/PricingMatrixSignatures.v2.md +29 -0
  157. package/docs/spec/ProduceCliOutput.v1.md +46 -0
  158. package/docs/spec/ProofBundleManifest.v1.md +24 -0
  159. package/docs/spec/README.md +104 -0
  160. package/docs/spec/REFERENCE_IMPLEMENTATIONS.md +29 -0
  161. package/docs/spec/REFERENCE_VERIFIER_BEHAVIOR.md +68 -0
  162. package/docs/spec/REMOTE_SIGNER.md +66 -0
  163. package/docs/spec/ReleaseIndex.v1.md +32 -0
  164. package/docs/spec/ReleaseIndexSignatures.v1.md +17 -0
  165. package/docs/spec/ReleaseTrust.v1.md +13 -0
  166. package/docs/spec/ReleaseTrust.v2.md +26 -0
  167. package/docs/spec/RemoteSignerRequest.v1.md +21 -0
  168. package/docs/spec/RemoteSignerResponse.v1.md +16 -0
  169. package/docs/spec/ReputationEvent.v1.md +63 -0
  170. package/docs/spec/RevocationList.v1.md +28 -0
  171. package/docs/spec/SIGNER_PROVIDER_PLUGIN.md +32 -0
  172. package/docs/spec/STRICTNESS.md +68 -0
  173. package/docs/spec/SUPPLY_CHAIN.md +33 -0
  174. package/docs/spec/SettlementAdjustment.v1.md +45 -0
  175. package/docs/spec/SettlementDecisionRecord.v1.md +48 -0
  176. package/docs/spec/SettlementDecisionRecord.v2.md +51 -0
  177. package/docs/spec/SettlementDecisionReport.v1.md +44 -0
  178. package/docs/spec/SettlementKernel.v1.md +59 -0
  179. package/docs/spec/SettlementReceipt.v1.md +63 -0
  180. package/docs/spec/SlaDefinition.v1.md +24 -0
  181. package/docs/spec/SlaEvaluation.v1.md +12 -0
  182. package/docs/spec/THREAT_MODEL.md +113 -0
  183. package/docs/spec/TOOL_PROVENANCE.md +30 -0
  184. package/docs/spec/TRUST_ANCHORS.md +84 -0
  185. package/docs/spec/TenantSettings.v1.md +90 -0
  186. package/docs/spec/TenantSettings.v2.md +99 -0
  187. package/docs/spec/TimestampProof.v1.md +25 -0
  188. package/docs/spec/ToolCallAgreement.v1.md +34 -0
  189. package/docs/spec/ToolCallEvidence.v1.md +47 -0
  190. package/docs/spec/ToolManifest.v1.md +47 -0
  191. package/docs/spec/VERIFIER_ENVIRONMENT.md +38 -0
  192. package/docs/spec/VERSIONING.md +107 -0
  193. package/docs/spec/VerificationReport.v1.md +50 -0
  194. package/docs/spec/VerifyAboutOutput.v1.md +10 -0
  195. package/docs/spec/VerifyCliOutput.v1.md +28 -0
  196. package/docs/spec/WARNINGS.md +83 -0
  197. package/docs/spec/error-codes.v1.txt +285 -0
  198. package/docs/spec/examples/agreement_delegation_v1.example.json +21 -0
  199. package/docs/spec/examples/arbitration_case_v1.example.json +26 -0
  200. package/docs/spec/examples/arbitration_verdict_v1.example.json +32 -0
  201. package/docs/spec/examples/dispute_open_envelope_v1.example.json +18 -0
  202. package/docs/spec/examples/produce_cli_output_v1.example.json +32 -0
  203. package/docs/spec/examples/release_index_signature_v1.example.json +9 -0
  204. package/docs/spec/examples/release_index_signatures_v1.example.json +14 -0
  205. package/docs/spec/examples/release_index_v1.example.json +15 -0
  206. package/docs/spec/examples/release_trust_v1.example.json +7 -0
  207. package/docs/spec/examples/release_trust_v2.example.json +22 -0
  208. package/docs/spec/examples/remote_signer_request_v1.example.json +18 -0
  209. package/docs/spec/examples/remote_signer_response_v1.example.json +8 -0
  210. package/docs/spec/examples/reputation_event_v1.example.json +29 -0
  211. package/docs/spec/examples/verification_report_v1.example.json +24 -0
  212. package/docs/spec/examples/verify_about_output_v1.example.json +29 -0
  213. package/docs/spec/examples/verify_cli_output_v1.example.json +13 -0
  214. package/docs/spec/legacy/MarketplaceAcceptance.v1.md +48 -0
  215. package/docs/spec/legacy/MarketplaceOffer.v1.md +56 -0
  216. package/docs/spec/legacy/schemas/MarketplaceAcceptance.v1.schema.json +53 -0
  217. package/docs/spec/legacy/schemas/MarketplaceOffer.v1.schema.json +61 -0
  218. package/docs/spec/producer-error-codes.v1.txt +14 -0
  219. package/docs/spec/schemas/AcceptanceCriteria.v1.schema.json +24 -0
  220. package/docs/spec/schemas/AcceptanceEvaluation.v1.schema.json +26 -0
  221. package/docs/spec/schemas/AgentEvent.v1.schema.json +49 -0
  222. package/docs/spec/schemas/AgentIdentity.v1.schema.json +129 -0
  223. package/docs/spec/schemas/AgentPassport.v1.schema.json +112 -0
  224. package/docs/spec/schemas/AgentReputation.v1.schema.json +151 -0
  225. package/docs/spec/schemas/AgentReputation.v2.schema.json +120 -0
  226. package/docs/spec/schemas/AgentRun.v1.schema.json +71 -0
  227. package/docs/spec/schemas/AgentRunSettlement.v1.schema.json +75 -0
  228. package/docs/spec/schemas/AgentWallet.v1.schema.json +54 -0
  229. package/docs/spec/schemas/AgreementDelegation.v1.schema.json +50 -0
  230. package/docs/spec/schemas/ArbitrationCase.v1.schema.json +133 -0
  231. package/docs/spec/schemas/ArbitrationVerdict.v1.schema.json +149 -0
  232. package/docs/spec/schemas/BundleHeadAttestation.v1.schema.json +21 -0
  233. package/docs/spec/schemas/ClosePackManifest.v1.schema.json +38 -0
  234. package/docs/spec/schemas/DelegationGrant.v1.schema.json +102 -0
  235. package/docs/spec/schemas/DisputeOpenEnvelope.v1.schema.json +78 -0
  236. package/docs/spec/schemas/EvidenceIndex.v1.schema.json +41 -0
  237. package/docs/spec/schemas/ExecutionIntent.v1.schema.json +85 -0
  238. package/docs/spec/schemas/FinancePackBundleManifest.v1.schema.json +38 -0
  239. package/docs/spec/schemas/FundingHold.v1.schema.json +46 -0
  240. package/docs/spec/schemas/GovernancePolicy.v1.schema.json +45 -0
  241. package/docs/spec/schemas/GovernancePolicy.v2.schema.json +70 -0
  242. package/docs/spec/schemas/InteractionDirectionMatrix.v1.schema.json +43 -0
  243. package/docs/spec/schemas/InvoiceBundleManifest.v1.schema.json +38 -0
  244. package/docs/spec/schemas/InvoiceClaim.v1.schema.json +39 -0
  245. package/docs/spec/schemas/MarketplaceAcceptance.v2.schema.json +53 -0
  246. package/docs/spec/schemas/MarketplaceOffer.v2.schema.json +61 -0
  247. package/docs/spec/schemas/MeteringReport.v1.schema.json +45 -0
  248. package/docs/spec/schemas/PricingMatrix.v1.schema.json +24 -0
  249. package/docs/spec/schemas/PricingMatrixSignatures.v1.schema.json +24 -0
  250. package/docs/spec/schemas/PricingMatrixSignatures.v2.schema.json +24 -0
  251. package/docs/spec/schemas/ProduceCliOutput.v1.schema.json +107 -0
  252. package/docs/spec/schemas/ProofBundleManifest.v1.schema.json +37 -0
  253. package/docs/spec/schemas/PublicKeys.v1.schema.json +33 -0
  254. package/docs/spec/schemas/ReleaseIndex.v1.schema.json +45 -0
  255. package/docs/spec/schemas/ReleaseIndexSignature.v1.schema.json +16 -0
  256. package/docs/spec/schemas/ReleaseIndexSignatures.v1.schema.json +16 -0
  257. package/docs/spec/schemas/ReleaseTrust.v1.schema.json +15 -0
  258. package/docs/spec/schemas/ReleaseTrust.v2.schema.json +37 -0
  259. package/docs/spec/schemas/RemoteSignerPublicKeyResponse.v1.schema.json +14 -0
  260. package/docs/spec/schemas/RemoteSignerRequest.v1.schema.json +24 -0
  261. package/docs/spec/schemas/RemoteSignerResponse.v1.schema.json +10 -0
  262. package/docs/spec/schemas/RemoteSignerSignRequest.v1.schema.json +27 -0
  263. package/docs/spec/schemas/RemoteSignerSignResponse.v1.schema.json +16 -0
  264. package/docs/spec/schemas/ReputationEvent.v1.schema.json +164 -0
  265. package/docs/spec/schemas/RevocationList.v1.schema.json +51 -0
  266. package/docs/spec/schemas/SettlementAdjustment.v1.schema.json +44 -0
  267. package/docs/spec/schemas/SettlementDecisionRecord.v1.schema.json +66 -0
  268. package/docs/spec/schemas/SettlementDecisionRecord.v2.schema.json +148 -0
  269. package/docs/spec/schemas/SettlementDecisionReport.v1.schema.json +61 -0
  270. package/docs/spec/schemas/SettlementReceipt.v1.schema.json +135 -0
  271. package/docs/spec/schemas/SlaDefinition.v1.schema.json +33 -0
  272. package/docs/spec/schemas/SlaEvaluation.v1.schema.json +26 -0
  273. package/docs/spec/schemas/TenantSettings.v1.schema.json +90 -0
  274. package/docs/spec/schemas/TenantSettings.v2.schema.json +161 -0
  275. package/docs/spec/schemas/TimestampProof.v1.schema.json +17 -0
  276. package/docs/spec/schemas/ToolCallAgreement.v1.schema.json +34 -0
  277. package/docs/spec/schemas/ToolCallEvidence.v1.schema.json +45 -0
  278. package/docs/spec/schemas/ToolManifest.v1.schema.json +54 -0
  279. package/docs/spec/schemas/VerificationReport.v1.schema.json +83 -0
  280. package/docs/spec/schemas/VerifyAboutOutput.v1.schema.json +54 -0
  281. package/docs/spec/schemas/VerifyCliOutput.v1.schema.json +75 -0
  282. package/docs/spec/schemas/VerifyReleaseOutput.v1.schema.json +47 -0
  283. package/docs/spec/x402-error-codes.v1.txt +21 -0
  284. package/docs/templates/buyer-email.txt +18 -0
  285. package/docs/templates/buyer-one-pager.md +24 -0
  286. package/package.json +40 -6
  287. package/scripts/acceptance/full-stack.mjs +734 -0
  288. package/scripts/acceptance/full-stack.sh +99 -0
  289. package/scripts/audit/build-audit-packet.mjs +242 -0
  290. package/scripts/backup-pg.sh +45 -0
  291. package/scripts/backup-restore/README.md +18 -0
  292. package/scripts/backup-restore/capture-state.mjs +130 -0
  293. package/scripts/backup-restore/client.mjs +97 -0
  294. package/scripts/backup-restore/seed-workload.mjs +235 -0
  295. package/scripts/backup-restore/verify-state.mjs +139 -0
  296. package/scripts/backup-restore-test.sh +217 -0
  297. package/scripts/chaos.js +221 -0
  298. package/scripts/ci/build-launch-cutover-packet.mjs +148 -0
  299. package/scripts/ci/build-self-serve-benchmark-report.mjs +122 -0
  300. package/scripts/ci/changelog-guard.mjs +145 -0
  301. package/scripts/ci/check-kernel-v0-launch-gate.mjs +233 -0
  302. package/scripts/ci/check-secret-hygiene.mjs +78 -0
  303. package/scripts/ci/check-version-consistency.mjs +42 -0
  304. package/scripts/ci/cli-pack-smoke.mjs +160 -0
  305. package/scripts/ci/flake-budget-guard.mjs +68 -0
  306. package/scripts/ci/generate-error-codes.mjs +54 -0
  307. package/scripts/ci/lib/lighthouse-tracker.mjs +90 -0
  308. package/scripts/ci/lib/self-serve-launch-gate.mjs +89 -0
  309. package/scripts/ci/npm-pack-smoke.mjs +454 -0
  310. package/scripts/ci/run-10x-throughput-drill.mjs +246 -0
  311. package/scripts/ci/run-10x-throughput-incident-rehearsal.mjs +325 -0
  312. package/scripts/ci/run-arbitration-workspace-browser-e2e.sh +22 -0
  313. package/scripts/ci/run-circle-sandbox-smoke.mjs +237 -0
  314. package/scripts/ci/run-go-live-gate.mjs +150 -0
  315. package/scripts/ci/run-kernel-v0-ship-gate.mjs +97 -0
  316. package/scripts/ci/run-mcp-host-smoke.mjs +275 -0
  317. package/scripts/ci/run-self-serve-launch-gate.mjs +56 -0
  318. package/scripts/ci/runtime-import-smoke.mjs +58 -0
  319. package/scripts/ci/update-lighthouse-tracker.mjs +112 -0
  320. package/scripts/closepack/lib.mjs +286 -0
  321. package/scripts/collect-debug.sh +263 -0
  322. package/scripts/demo/compositional-settlement-3hop.mjs +237 -0
  323. package/scripts/demo/delivery-robot/export-ui-fixture.mjs +188 -0
  324. package/scripts/demo/delivery-robot/generate.mjs +377 -0
  325. package/scripts/demo/kernel-agent-goes-shopping.mjs +202 -0
  326. package/scripts/demo/magic-link-first-green.mjs +118 -0
  327. package/scripts/demo/magic-link-kind-smoke.mjs +577 -0
  328. package/scripts/demo/mcp-paid-exa.mjs +1110 -0
  329. package/scripts/dev/billing-doctor.sh +145 -0
  330. package/scripts/dev/billing-smoke-prod.sh +219 -0
  331. package/scripts/dev/billing-webhook-replay.sh +161 -0
  332. package/scripts/dev/env.dev.example +29 -0
  333. package/scripts/dev/env.sh +37 -0
  334. package/scripts/dev/new-sdk-key.sh +81 -0
  335. package/scripts/dev/sdk-first-run.sh +21 -0
  336. package/scripts/dev/smoke-x402-gateway.sh +115 -0
  337. package/scripts/dev/start-api.sh +24 -0
  338. package/scripts/examples/produce-and-verify-jobproof.mjs +191 -0
  339. package/scripts/examples/sdk-first-paid-rfq.py +105 -0
  340. package/scripts/examples/sdk-first-verified-run.mjs +85 -0
  341. package/scripts/examples/sdk-first-verified-run.py +99 -0
  342. package/scripts/examples/sdk-tenant-analytics.mjs +103 -0
  343. package/scripts/examples/sdk-tenant-analytics.py +118 -0
  344. package/scripts/finance-pack/bundle.mjs +284 -0
  345. package/scripts/fixtures/generate-bundle-fixtures.mjs +877 -0
  346. package/scripts/governance/export.mjs +169 -0
  347. package/scripts/load/delivery-stress.k6.js +183 -0
  348. package/scripts/load/ingest-burst.k6.js +236 -0
  349. package/scripts/load/run-delivery-load.js +66 -0
  350. package/scripts/load/webhook-receiver.js +131 -0
  351. package/scripts/magic-link/migrate-run-records-to-db.mjs +35 -0
  352. package/scripts/mcp/probe.mjs +238 -0
  353. package/scripts/mcp/settld-mcp-http-gateway.mjs +178 -0
  354. package/scripts/mcp/settld-mcp-server.mjs +1201 -0
  355. package/scripts/openapi/write.mjs +13 -0
  356. package/scripts/ops/bootstrap-tenant-conformance.mjs +185 -0
  357. package/scripts/ops/build-x402-pilot-reliability-report.mjs +489 -0
  358. package/scripts/ops/check-x402-receipt-sample.mjs +181 -0
  359. package/scripts/ops/design-partner-run-packet.mjs +466 -0
  360. package/scripts/ops/hosted-baseline-evidence.mjs +681 -0
  361. package/scripts/ops/money-rails-chargeback-evidence.mjs +509 -0
  362. package/scripts/ops/money-rails-reconcile-evidence.mjs +180 -0
  363. package/scripts/ops/p0-seed-money-rail-operation.mjs +432 -0
  364. package/scripts/pilot/finance-pack.mjs +495 -0
  365. package/scripts/pilot/fixtures/robot-keypair.json +4 -0
  366. package/scripts/pilot/fixtures/server-signer.json +4 -0
  367. package/scripts/proof-bundle/job.mjs +109 -0
  368. package/scripts/proof-bundle/lib.mjs +92 -0
  369. package/scripts/proof-bundle/month.mjs +103 -0
  370. package/scripts/provider/conformance-run.mjs +159 -0
  371. package/scripts/provider/keys-generate.mjs +135 -0
  372. package/scripts/provider/publish.mjs +420 -0
  373. package/scripts/quickstart/x402.mjs +334 -0
  374. package/scripts/release/build-artifacts.mjs +181 -0
  375. package/scripts/release/generate-release-index.mjs +112 -0
  376. package/scripts/release/release-index-lib.mjs +232 -0
  377. package/scripts/release/sign-release-index.mjs +85 -0
  378. package/scripts/release/validate-release-assets.mjs +170 -0
  379. package/scripts/release/verify-release.mjs +261 -0
  380. package/scripts/restore-pg.sh +34 -0
  381. package/scripts/scaffold/create-settld-paid-tool.mjs +19 -0
  382. package/scripts/sdk/smoke-python.py +30 -0
  383. package/scripts/sdk/smoke.mjs +16 -0
  384. package/scripts/settlement/x402-batch-worker.mjs +1091 -0
  385. package/scripts/slo/check.mjs +178 -0
  386. package/scripts/smoke/k8s-smoke.mjs +214 -0
  387. package/scripts/spec/generate-protocol-vectors.mjs +931 -0
  388. package/scripts/test/check-no-generated-artifacts.sh +12 -0
  389. package/scripts/test/run.sh +45 -0
  390. package/scripts/trust/validate-trust-file.mjs +57 -0
  391. package/scripts/trust-config/rotate-settld-pay.mjs +277 -0
  392. package/scripts/trust-config/wizard.mjs +161 -0
  393. package/scripts/vendor-contract-test-lib.mjs +182 -0
  394. package/scripts/vendor-contract-test.mjs +55 -0
  395. package/scripts/vercel/build-mkdocs.sh +9 -0
  396. package/scripts/vercel/ignore-mkdocs.sh +25 -0
  397. package/scripts/vercel/install-mkdocs.sh +6 -0
  398. package/scripts/verify-pg.js +217 -0
  399. package/scripts/x402/receipt-verify.mjs +289 -0
  400. package/services/finance-sink/src/dedupe-store.js +29 -6
  401. package/services/receiver/src/dedupe-store.js +29 -5
  402. package/services/x402-gateway/Dockerfile +13 -0
  403. package/services/x402-gateway/README.md +58 -0
  404. package/services/x402-gateway/examples/upstream-mock.js +337 -0
  405. package/services/x402-gateway/src/server.js +947 -0
  406. package/src/api/app.js +32517 -16877
  407. package/src/api/maintenance.js +70 -0
  408. package/src/api/openapi.js +1130 -17
  409. package/src/api/persistence.js +272 -0
  410. package/src/api/server.js +81 -5
  411. package/src/api/store.js +1248 -6
  412. package/src/api/workers/deliveries.js +99 -4
  413. package/src/api/workers/insolvency-sweep.js +159 -0
  414. package/src/core/agent-card.js +69 -0
  415. package/src/core/agent-wallets.js +97 -0
  416. package/src/core/agreement-delegation.js +549 -0
  417. package/src/core/billing-plans.js +40 -6
  418. package/src/core/circle-reserve-adapter.js +845 -0
  419. package/src/core/maintenance-locks.js +1 -0
  420. package/src/core/paid-tool-manifest.js +318 -0
  421. package/src/core/provider-publish-conformance.js +525 -0
  422. package/src/core/provider-publish-proof.js +396 -0
  423. package/src/core/provider-quote-signature.js +170 -0
  424. package/src/core/settld-keys.js +112 -0
  425. package/src/core/settld-pay-token.js +344 -0
  426. package/src/core/settlement-kernel.js +213 -2
  427. package/src/core/settlement-verifier.js +335 -0
  428. package/src/core/tool-call-agreement.js +112 -0
  429. package/src/core/tool-call-evidence.js +144 -0
  430. package/src/core/tool-provider-signature.js +98 -0
  431. package/src/core/x402-escalation-override.js +258 -0
  432. package/src/core/x402-gate.js +118 -0
  433. package/src/core/x402-provider-refund-decision.js +220 -0
  434. package/src/core/x402-receipt-verifier.js +708 -0
  435. package/src/core/x402-reversal-command.js +251 -0
  436. package/src/core/x402-wallet-issuer-decision.js +252 -0
  437. package/src/core/zk-verifier.js +300 -0
  438. package/src/db/migrations/029_reputation_event_index.sql +54 -0
  439. package/src/db/migrations/030_artifacts_source_event_unique_job_only.sql +15 -0
  440. package/src/db/pg.js +18 -7
  441. package/src/db/store-pg.js +838 -72
@@ -0,0 +1,32 @@
1
+ # Signer provider plugins (tooling contract)
2
+
3
+ Signer provider plugins extend `settld-produce` with custom key custody and signing implementations (KMS/HSM/Vault/remote approval flows) without changing bundle protocol objects.
4
+
5
+ This is a **tooling** contract (not protocol v1). Verifiers remain unchanged.
6
+
7
+ ## CLI usage
8
+
9
+ `settld-produce --signer plugin --signer-plugin <path|package> [--signer-plugin-export createSignerProvider] [--signer-plugin-config <json>] --gov-key-id <id> --server-key-id <id> ...`
10
+
11
+ ## Plugin contract
12
+
13
+ Your plugin must export a function (default name: `createSignerProvider`):
14
+
15
+ - Signature: `async createSignerProvider({ config, env }) -> provider`
16
+
17
+ Where `provider` is an object implementing:
18
+
19
+ - `async getPublicKeyPem({ keyId }) -> publicKeyPem`
20
+ - `async sign({ keyId, algorithm, messageBytes, purpose, context }) -> { signatureBase64, signerReceipt? }`
21
+
22
+ Notes:
23
+
24
+ - `messageBytes` are the exact bytes to sign (typically 32 bytes: sha256 of canonical JSON).
25
+ - `purpose` is required and must be enforced by the provider (refuse unknown purposes).
26
+ - Do not log or return private key material.
27
+
28
+ ## Packaging guidance
29
+
30
+ - If `--signer-plugin` is a path, it is resolved relative to the current working directory.
31
+ - If `--signer-plugin` is a package name, it must be resolvable via Node module resolution (installed in the environment where `settld-produce` runs).
32
+
@@ -0,0 +1,68 @@
1
+ # Strict vs Non-Strict Verification
2
+
3
+ This document defines the **compatibility contract** for verifier behavior.
4
+
5
+ ## Definitions
6
+
7
+ - **Strict mode**: missing/invalid protocol surfaces are hard failures.
8
+ - **Non-strict mode**: verifier performs best-effort verification and emits **warnings** for legacy or incomplete bundles, but still rejects tampering (e.g., manifest hash mismatch, file hash mismatch).
9
+
10
+ ## Contract matrix (v1 protocol era)
11
+
12
+ ### Proof bundles (JobProofBundle.v1, MonthProofBundle.v1)
13
+
14
+ | Surface | Strict | Non-strict |
15
+ |---|---:|---:|
16
+ | `manifest.json` present + `manifestHash` correct | required (fail) | required (fail) |
17
+ | `manifest.json` file hashes correct | required (fail) | required (fail) |
18
+ | trusted governance root keys provided out-of-band | required (fail) | best-effort (warn + continue) |
19
+ | `governance/policy.json` present | required (fail) | best-effort (warn + continue) |
20
+ | `governance/policy.json` version | **must be `GovernancePolicy.v2`** (fail) | allow `GovernancePolicy.v1` (warn + continue) |
21
+ | `governance/policy.json` signature (governance root) | required (fail) | not required (no check) |
22
+ | `governance/revocations.json` present + signature | required (fail) | not required (no check) |
23
+ | `attestation/bundle_head_attestation.json` present + valid | required (fail) | best-effort (warn + continue) |
24
+ | `verify/verification_report.json` present + signed | required (fail) | best-effort (warn + continue if missing; verify if present) |
25
+
26
+ ### Finance packs (FinancePackBundle.v1)
27
+
28
+ | Surface | Strict | Non-strict |
29
+ |---|---:|---:|
30
+ | `manifest.json` present + `manifestHash` correct | required (fail) | required (fail) |
31
+ | `manifest.json` file hashes correct | required (fail) | required (fail) |
32
+ | trusted governance root keys provided out-of-band | required (fail) | best-effort (warn + continue) |
33
+ | `governance/policy.json` present | required (fail) | best-effort (warn + continue) |
34
+ | `governance/policy.json` version | **must be `GovernancePolicy.v2`** (fail) | allow `GovernancePolicy.v1` (warn + continue) |
35
+ | `governance/policy.json` signature (governance root) | required (fail) | not required (no check) |
36
+ | `governance/revocations.json` present + signature | required (fail) | not required (no check) |
37
+ | `attestation/bundle_head_attestation.json` present + valid | required (fail) | best-effort (warn + continue) |
38
+ | `verify/verification_report.json` present + signed | required (fail) | best-effort (warn + continue if missing; verify if present) |
39
+
40
+ ### Invoice bundles (InvoiceBundle.v1)
41
+
42
+ | Surface | Strict | Non-strict |
43
+ |---|---:|---:|
44
+ | `manifest.json` present + `manifestHash` correct | required (fail) | required (fail) |
45
+ | `manifest.json` file hashes correct | required (fail) | required (fail) |
46
+ | trusted governance root keys provided out-of-band | required (fail) | best-effort (warn + continue) |
47
+ | `governance/policy.json` present | required (fail) | best-effort (warn + continue) |
48
+ | `governance/policy.json` version | **must be `GovernancePolicy.v2`** (fail) | allow `GovernancePolicy.v1` (warn + continue) |
49
+ | `governance/policy.json` signature (governance root) | required (fail) | not required (no check) |
50
+ | `governance/revocations.json` present + signature | required (fail) | not required (no check) |
51
+ | `attestation/bundle_head_attestation.json` present + valid | required (fail) | best-effort (warn + continue) |
52
+ | `verify/verification_report.json` present + signed | required (fail) | best-effort (warn + continue if missing; verify if present) |
53
+ | `pricing/pricing_matrix_signatures.json` present + valid buyer signature(s) (`PricingMatrixSignatures.v2` required; `PricingMatrixSignatures.v1` legacy accepted only non-strict with `WARN_PRICING_SIGNATURE_V1_BYTES_LEGACY`) | required (fail) | best-effort (warn + continue if missing) |
54
+
55
+ ### Close packs (ClosePack.v1)
56
+
57
+ | Surface | Strict | Non-strict |
58
+ |---|---:|---:|
59
+ | ClosePack `manifest.json` present + `manifestHash` correct | required (fail) | required (fail) |
60
+ | ClosePack manifest file hashes correct | required (fail) | required (fail) |
61
+ | trusted governance root keys provided out-of-band | required (fail) | best-effort (warn + continue) |
62
+ | ClosePack governance policy surfaces | required (fail) | best-effort (warn + continue) |
63
+ | ClosePack head attestation present + valid | required (fail) | best-effort (warn + continue) |
64
+ | ClosePack verification report present + signed | required (fail) | best-effort (warn + continue if missing; verify if present) |
65
+ | embedded `payload/invoice_bundle/**` strictly verifies under same posture | required (fail) | required (fail) |
66
+ | `evidence/evidence_index.json` present + matches deterministic recomputation | required (fail) | required (fail) |
67
+ | SLA evaluation surfaces (`sla/*`) | optional; if present must recompute + match | optional; missing emits `CLOSE_PACK_SLA_SURFACES_MISSING_LENIENT` |
68
+ | acceptance evaluation surfaces (`acceptance/*`) | optional; if present must recompute + match | optional; missing emits `CLOSE_PACK_ACCEPTANCE_SURFACES_MISSING_LENIENT` |
@@ -0,0 +1,33 @@
1
+ # Supply chain: releases
2
+
3
+ This doc describes what Settld release authenticity *does* and *does not* guarantee.
4
+
5
+ ## Threat model (release channel)
6
+
7
+ ### Assets
8
+
9
+ - Authenticity of published release artifacts (`*.tgz`, conformance pack, audit packet, etc.)
10
+ - Integrity of the mapping: “this tool install corresponds to this commit/release”
11
+
12
+ ### Attacks prevented (assuming release signing key not compromised)
13
+
14
+ - Artifact swap: attacker replaces one or more release artifacts after build
15
+ - Checksum swap: attacker replaces artifacts *and* checksums together
16
+ - CI compromise without release key access: attacker can run arbitrary steps but cannot forge a valid `ReleaseIndex.v1` signature
17
+
18
+ ### Attacks not prevented
19
+
20
+ - Release signing key compromise (attacker can sign malicious artifacts)
21
+ - Compromised dependency supply chain *before* release build (mitigated by lockfiles/SBOM, not eliminated)
22
+
23
+ ## Operational response
24
+
25
+ If the release signing key is suspected compromised:
26
+
27
+ - Rotate the release signing key and publish an updated `ReleaseTrust.v2` (and revoke the compromised key).
28
+ - Publish a security advisory describing impacted releases and mitigation steps.
29
+
30
+ ## How to verify a release (high-level)
31
+
32
+ 1. Verify `release_index_v1.sig` against `release_index_v1.json` using a trusted `ReleaseTrust.v2`.
33
+ 2. Verify each artifact’s `sha256` matches the index.
@@ -0,0 +1,45 @@
1
+ # SettlementAdjustment.v1
2
+
3
+ `SettlementAdjustment.v1` is a deterministic, idempotent adjustment artifact that applies a single escrow operation against funds held in a related `FundingHold.v1`.
4
+
5
+ Sprint 21 uses exactly one adjustment per `agreementHash` for tool-call holdback disputes.
6
+
7
+ ## Fields
8
+
9
+ Required:
10
+
11
+ - `schemaVersion` (const: `SettlementAdjustment.v1`)
12
+ - `adjustmentId` (deterministic ID; for tool-call holdback: `sadj_agmt_${agreementHash}_holdback`)
13
+ - `tenantId`
14
+ - `agreementHash` (sha256 hex)
15
+ - `receiptHash` (sha256 hex)
16
+ - `holdHash` (sha256 hex)
17
+ - `kind` (`holdback_release|holdback_refund`)
18
+ - `amountCents` (non-negative int; must be `<= heldAmountCents` at application time)
19
+ - `currency`
20
+ - `createdAt` (ISO datetime)
21
+ - `adjustmentHash` (sha256 hex; computed from immutable core)
22
+
23
+ Optional:
24
+
25
+ - `verdictRef`:
26
+ - `caseId`
27
+ - `verdictHash` (sha256 hex)
28
+ - `metadata` (implementation-defined JSON object)
29
+
30
+ ## Hashing
31
+
32
+ `adjustmentHash` is computed as sha256 of the RFC 8785 canonical JSON of the core object excluding:
33
+
34
+ - `adjustmentHash`
35
+ - `metadata`
36
+
37
+ ## Invariants
38
+
39
+ - Adjustments must operate on held escrow funds only (no negative balances, no external clawbacks).
40
+ - Persistence must enforce uniqueness for `adjustmentId` per tenant; duplicates must be treated as idempotent retries returning the existing adjustment.
41
+
42
+ ## Schema
43
+
44
+ See `docs/spec/schemas/SettlementAdjustment.v1.schema.json`.
45
+
@@ -0,0 +1,48 @@
1
+ # SettlementDecisionRecord.v1
2
+
3
+ `SettlementDecisionRecord.v1` is the canonical decision artifact for an `AgentRunSettlement.v1` state transition.
4
+
5
+ It binds one settlement decision to:
6
+
7
+ - the settlement principal (`settlementId`, `runId`, `tenantId`),
8
+ - the governing policy/verifier references,
9
+ - and the execution lineage (`runLastEventId`, `runLastChainHash`, `resolutionEventId`).
10
+
11
+ ## Purpose
12
+
13
+ - make settlement decisions replayable and attributable;
14
+ - bind payout/refund decisions to specific run/settlement lineage;
15
+ - provide a stable hash (`decisionHash`) for downstream receipt binding.
16
+
17
+ ## Required fields
18
+
19
+ - `schemaVersion` (const: `SettlementDecisionRecord.v1`)
20
+ - `decisionId`
21
+ - `tenantId`
22
+ - `runId`
23
+ - `settlementId`
24
+ - `decisionStatus`
25
+ - `decisionMode`
26
+ - `policyRef`
27
+ - `verifierRef`
28
+ - `workRef`
29
+ - `decidedAt`
30
+ - `decisionHash`
31
+
32
+ Optional fields:
33
+
34
+ - `agreementId`
35
+ - `decisionReason`
36
+ - `verificationStatus`
37
+
38
+ ## Canonicalization and hashing
39
+
40
+ `decisionHash` is computed over canonical JSON after removing `decisionHash` from the object:
41
+
42
+ 1. canonicalize JSON with RFC 8785 (JCS),
43
+ 2. hash canonical UTF-8 bytes using `sha256`,
44
+ 3. encode as lowercase hex.
45
+
46
+ ## Schema
47
+
48
+ See `schemas/SettlementDecisionRecord.v1.schema.json`.
@@ -0,0 +1,51 @@
1
+ # SettlementDecisionRecord.v2
2
+
3
+ `SettlementDecisionRecord.v2` is the canonical decision artifact for an `AgentRunSettlement.v1` state transition.
4
+
5
+ It is identical in semantic intent to `SettlementDecisionRecord.v1`, but adds **replay-critical policy pinning** so decisions can be re-evaluated deterministically from protocol artifacts alone.
6
+
7
+ ## Purpose
8
+
9
+ - make settlement decisions replayable and attributable;
10
+ - bind payout/refund decisions to specific run/settlement lineage;
11
+ - provide a stable hash (`decisionHash`) for downstream receipt binding;
12
+ - pin the **exact policy hash used** during evaluation (`policyHashUsed`).
13
+
14
+ ## Required fields
15
+
16
+ - `schemaVersion` (const: `SettlementDecisionRecord.v2`)
17
+ - all required fields from `SettlementDecisionRecord.v1`
18
+ - `policyHashUsed` (sha256 hex, lowercase)
19
+
20
+ Optional fields:
21
+
22
+ - all optional fields from `SettlementDecisionRecord.v1`
23
+ - `policyNormalizationVersion` (string; OPTIONAL; v2 emitters SHOULD include this to pin the normalization algorithm used to compute `policyHashUsed`)
24
+ - `verificationMethodHashUsed` (sha256 hex, lowercase; OPTIONAL; omit when absent)
25
+ - `bindings` (object; OPTIONAL) - settlement receipt trail bindings for gateway-style flows:
26
+ - `authorizationRef`
27
+ - `token` (`kid`, `sha256`, `expiresAt`)
28
+ - `request` (`sha256`)
29
+ - `response` (`status`, `sha256`)
30
+ - `providerSig` (`required`, `present`, `verified`, `providerKeyId`, `error`)
31
+ - `reserve` (`adapter`, `mode`, `reserveId`, `status`)
32
+ - `policyDecisionFingerprint` (`fingerprintVersion`, `policyId`, `policyVersion`, `policyHash`, `verificationMethodHash`, `evaluationHash`)
33
+
34
+ ## Policy pinning rules
35
+
36
+ - `policyHashUsed` MUST be the hash of the normalized policy object actually evaluated.
37
+ - If the evaluated policy is carried inline (for example, in an agreement payload), `policyHashUsed` MUST match the normalized inline policy payload.
38
+ - If the policy is resolved from a policy registry, `policyHashUsed` MUST match the policy payload referenced by the registry entry.
39
+ - `verificationMethodHashUsed` SHOULD be set when verifier selection depends on an explicit verification method payload.
40
+
41
+ ## Canonicalization and hashing
42
+
43
+ `decisionHash` is computed over canonical JSON after removing `decisionHash` from the object:
44
+
45
+ 1. canonicalize JSON with RFC 8785 (JCS),
46
+ 2. hash canonical UTF-8 bytes using `sha256`,
47
+ 3. encode as lowercase hex.
48
+
49
+ ## Schema
50
+
51
+ See `schemas/SettlementDecisionRecord.v2.schema.json`.
@@ -0,0 +1,44 @@
1
+ # SettlementDecisionReport.v1
2
+
3
+ `SettlementDecisionReport.v1` is a canonical JSON object that records a buyer’s **Approve/Hold** decision for a specific `InvoiceBundle.v1`.
4
+
5
+ It is intended to be archived alongside the invoice bundle zip and re-verified later **offline** (without access to the hosted service).
6
+
7
+ ## Purpose
8
+
9
+ - Provide a portable, cryptographically verifiable receipt of a buyer decision.
10
+ - Bind the decision to a specific invoice bundle instance (mix-and-match defense).
11
+ - Capture the effective hosted verification posture and result summary the decision was made under.
12
+
13
+ ## Core fields
14
+
15
+ - `schemaVersion = "SettlementDecisionReport.v1"`
16
+ - `decision`: `"approve"` or `"hold"`
17
+ - `decidedAt`: ISO timestamp of the decision action
18
+ - `invoiceBundle` (binding target):
19
+ - `manifestHash`: invoice bundle manifest hash
20
+ - `headAttestationHash`: invoice bundle head attestation hash
21
+ - `policy`: effective policy snapshot (requiredMode / failOnWarnings / allowAmberApprovals / requiredPricingMatrixSignerKeyIds / etc.)
22
+ - `verification`: summary slice of the hosted verification output (stable codes)
23
+ - `tool`: `{ name, version, commit }` (best-effort provenance for the hosted verifier build)
24
+ - `actor` (optional): service-level claims about who clicked approve/hold (e.g., email, auth method)
25
+
26
+ ## Report hash + signature
27
+
28
+ - `reportHash` is computed over the canonical JSON object with `reportHash`, `signature`, `signerKeyId`, and `signedAt` removed.
29
+ - If the report is signed, it includes:
30
+ - `signature` (base64 Ed25519 signature)
31
+ - `signerKeyId`
32
+ - `signedAt`
33
+
34
+ Signature algorithm:
35
+
36
+ - The signed message is the bytes of the 32-byte sha256 digest (`reportHash` hex decoded).
37
+ - Algorithm: Ed25519.
38
+
39
+ ## Trust anchors (out-of-band)
40
+
41
+ To verify a settlement decision report, the verifier needs trusted buyer decision signer public keys out-of-band.
42
+
43
+ See `TRUST_ANCHORS.md`.
44
+
@@ -0,0 +1,59 @@
1
+ # SettlementKernel.v1
2
+
3
+ `SettlementKernel.v1` defines the binding invariants between `AgentRunSettlement.v1`, `SettlementDecisionRecord.v1|v2`, and `SettlementReceipt.v1`.
4
+
5
+ The kernel is considered valid only when artifact hash integrity, identity binding, and temporal ordering all hold.
6
+
7
+ ## Kernel invariants
8
+
9
+ - Settlement object exists and has the expected `runId`.
10
+ - `decisionRecord` exists and has a valid `decisionHash` (`sha256` over canonical JSON without `decisionHash`).
11
+ - `decisionRecord.runId` and `decisionRecord.settlementId` match settlement.
12
+ - `settlementReceipt` exists and has a valid `receiptHash` (`sha256` over canonical JSON without `receiptHash`).
13
+ - `settlementReceipt.runId` and `settlementReceipt.settlementId` match settlement.
14
+ - `settlementReceipt.decisionRef` must exist and bind to `decisionRecord` (`decisionId` + `decisionHash`).
15
+ - Temporal ordering must hold:
16
+ - `decisionRecord.decidedAt` is valid ISO date-time.
17
+ - `settlementReceipt.createdAt` is valid ISO date-time.
18
+ - `settlementReceipt.settledAt`, when present, is valid ISO date-time.
19
+ - `settlementReceipt.createdAt >= decisionRecord.decidedAt`.
20
+ - `settlementReceipt.settledAt >= decisionRecord.decidedAt` (when present).
21
+ - `settlementReceipt.settledAt >= settlementReceipt.createdAt` (when present).
22
+
23
+ ## Verification error code semantics
24
+
25
+ When kernel verification fails, implementations return one or more stable codes:
26
+
27
+ - `settlement_missing`
28
+ - `settlement_run_id_mismatch`
29
+ - `decision_record_missing`
30
+ - `decision_record_hash_invalid`
31
+ - `decision_record_hash_mismatch`
32
+ - `decision_record_run_id_mismatch`
33
+ - `decision_record_settlement_id_mismatch`
34
+ - `settlement_receipt_missing`
35
+ - `settlement_receipt_hash_invalid`
36
+ - `settlement_receipt_hash_mismatch`
37
+ - `settlement_receipt_run_id_mismatch`
38
+ - `settlement_receipt_settlement_id_mismatch`
39
+ - `settlement_receipt_decision_ref_missing`
40
+ - `settlement_receipt_decision_id_mismatch`
41
+ - `settlement_receipt_decision_hash_mismatch`
42
+ - `decision_record_decided_at_invalid`
43
+ - `settlement_receipt_created_at_invalid`
44
+ - `settlement_receipt_settled_at_invalid`
45
+ - `settlement_receipt_before_decision`
46
+ - `settlement_receipt_settled_before_decision`
47
+ - `settlement_receipt_settled_before_created`
48
+
49
+ ## API-level enforcement
50
+
51
+ - Settlement mutation routes reject invalid bindings with:
52
+ - HTTP `409`
53
+ - error code `SETTLEMENT_KERNEL_BINDING_INVALID`
54
+ - `details.errors[]` containing kernel verification codes above.
55
+
56
+ - `/ops/network/command-center` exposes settlement-kernel health via:
57
+ - `commandCenter.settlement.kernelVerificationErrorCount`
58
+ - `commandCenter.settlement.kernelVerificationErrorCountsByCode[]`
59
+ - alert type `settlement_kernel_verification_error_code` when configured thresholds are breached.
@@ -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
+