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.
- package/README.md +61 -3
- package/SETTLD_VERSION +1 -1
- package/bin/settld-mcp +2 -0
- package/bin/settld.js +13 -0
- package/conformance/kernel-v0/README.md +7 -0
- package/conformance/kernel-v0/run.mjs +292 -4
- package/docs/ACCESS.md +57 -0
- package/docs/ADOPTION_CHECKLIST.md +44 -0
- package/docs/ALERTS.md +198 -0
- package/docs/ARCHITECTURE.md +69 -0
- package/docs/ARCHITECTURE_FOUNDER_GUIDE.md +284 -0
- package/docs/ARTIFACTS.md +60 -0
- package/docs/CERTIFICATION_CHECKLIST.md +33 -0
- package/docs/CIRCLE_SANDBOX_E2E.md +140 -0
- package/docs/CONFIG.md +297 -0
- package/docs/CONTRACTS_APIS.md +23 -0
- package/docs/DEPRECATION.md +31 -0
- package/docs/DOMAIN_MODEL.md +92 -0
- package/docs/EVENT_ENVELOPE.md +53 -0
- package/docs/FINANCE_PACK_FORMAT.md +53 -0
- package/docs/INCIDENT_TAXONOMY.md +30 -0
- package/docs/JOB_STATE_MACHINE.md +66 -0
- package/docs/KERNEL_COMPATIBLE.md +60 -0
- package/docs/KERNEL_V0.md +40 -0
- package/docs/KEY_ROTATION.md +80 -0
- package/docs/LEDGER.md +82 -0
- package/docs/LIVENESS.md +76 -0
- package/docs/MVP_BUILD_ORDER.md +36 -0
- package/docs/ONCALL_PLAYBOOK.md +39 -0
- package/docs/OPERATIONS_SIGNING.md +20 -0
- package/docs/OVERVIEW.md +190 -0
- package/docs/PERF_BASELINE.md +85 -0
- package/docs/PRD.md +77 -0
- package/docs/QUICKSTART_KERNEL_V0.md +96 -0
- package/docs/QUICKSTART_MCP.md +337 -0
- package/docs/QUICKSTART_MCP_HOSTS.md +143 -0
- package/docs/QUICKSTART_PRODUCE.md +61 -0
- package/docs/QUICKSTART_RELEASE_VERIFY.md +39 -0
- package/docs/QUICKSTART_SDK.md +125 -0
- package/docs/QUICKSTART_SDK_PYTHON.md +111 -0
- package/docs/QUICKSTART_VERIFY.md +54 -0
- package/docs/QUICKSTART_X402_GATEWAY.md +317 -0
- package/docs/README.md +15 -0
- package/docs/RELEASE_CHECKLIST.md +156 -0
- package/docs/RELEASING.md +81 -0
- package/docs/REPO_SETTINGS.md +37 -0
- package/docs/RUNBOOK.md +86 -0
- package/docs/SKILLS.md +42 -0
- package/docs/SKILL_BUNDLE_FORMAT.md +48 -0
- package/docs/SLO.md +70 -0
- package/docs/SUMMARY.md +16 -0
- package/docs/SUPPORT.md +31 -0
- package/docs/THREAT_MODEL.md +36 -0
- package/docs/TRUST.md +59 -0
- package/docs/WORKFLOW.md +35 -0
- package/docs/X402_BATCH_SETTLEMENT.md +126 -0
- package/docs/blog/2026-02-14-your-ai-agent-just-spent-500-where-is-the-receipt.md +73 -0
- package/docs/examples/x402-provider-payout-registry.example.json +14 -0
- package/docs/gitbook/README.md +52 -0
- package/docs/gitbook/SETUP.md +25 -0
- package/docs/gitbook/SUMMARY.md +15 -0
- package/docs/gitbook/api-reference.md +73 -0
- package/docs/gitbook/closepacks.md +55 -0
- package/docs/gitbook/conformance.md +59 -0
- package/docs/gitbook/core-primitives.md +85 -0
- package/docs/gitbook/dispute-lifecycle.md +33 -0
- package/docs/gitbook/faq.md +21 -0
- package/docs/gitbook/guides.md +49 -0
- package/docs/gitbook/operations-runbook.md +36 -0
- package/docs/gitbook/quickstart.md +104 -0
- package/docs/gitbook/replay-and-audit.md +30 -0
- package/docs/gitbook/sdk-reference.md +35 -0
- package/docs/gitbook/security-model.md +58 -0
- package/docs/integrations/README.md +14 -0
- package/docs/integrations/github-actions-verify.yml +31 -0
- package/docs/integrations/github-actions.md +34 -0
- package/docs/integrations/openclaw/CLAWHUB_PUBLISH_CHECKLIST.md +65 -0
- package/docs/integrations/openclaw/settld-mcp-skill/SKILL.md +69 -0
- package/docs/integrations/openclaw/settld-mcp-skill/mcp-server.example.json +12 -0
- package/docs/kernel-compatible/capabilities.json +36 -0
- package/docs/marketing/agent-commerce-substrate.md +78 -0
- package/docs/marketing/hn-repost-2026-02-17.md +102 -0
- package/docs/marketing/show-hn-post.md +45 -0
- package/docs/ops/ARTIFACT_VERIFICATION_STATUS.md +43 -0
- package/docs/ops/BILLING_WEBHOOK_REPLAY.md +105 -0
- package/docs/ops/CI_FLAKE_BUDGET.md +31 -0
- package/docs/ops/GO_LIVE_GATE_S13.md +27 -0
- package/docs/ops/HOSTED_BASELINE_R2.md +129 -0
- package/docs/ops/KERNEL_V0_SHIP_GATE.md +67 -0
- package/docs/ops/LIGHTHOUSE_PRODUCTION_CLOSE.md +51 -0
- package/docs/ops/MCP_COMPATIBILITY_MATRIX.md +28 -0
- package/docs/ops/MINIMUM_PRODUCTION_TOPOLOGY.md +89 -0
- package/docs/ops/P0_BACKEND_PROGRESS.md +150 -0
- package/docs/ops/PAYMENTS_ALPHA_R5.md +105 -0
- package/docs/ops/PILOT_ONBOARDING_RUNBOOK.md +112 -0
- package/docs/ops/PRODUCTION_DEPLOYMENT_CHECKLIST.md +103 -0
- package/docs/ops/R1_SLOS.md +66 -0
- package/docs/ops/RELEASE_SIGNING_INCIDENT.md +58 -0
- package/docs/ops/SELF_SERVE_LAUNCH_AUTOMATION.md +89 -0
- package/docs/ops/THROUGHPUT_DRILL_10X.md +48 -0
- package/docs/ops/TRUST_CONFIG_WIZARD.md +47 -0
- package/docs/ops/X402_PILOT_WEEKLY_METRICS.md +76 -0
- package/docs/ops/tool-call-disputes-holdback.md +52 -0
- package/docs/pilot-kit/PILOT_PACKAGE_SCORECARD_X402.md +46 -0
- package/docs/pilot-kit/README.md +29 -0
- package/docs/pilot-kit/architecture-one-pager.md +48 -0
- package/docs/pilot-kit/buyer-email.txt +19 -0
- package/docs/pilot-kit/buyer-one-pager.md +31 -0
- package/docs/pilot-kit/gtm-pilot-playbook.md +182 -0
- package/docs/pilot-kit/offline-verify.md +33 -0
- package/docs/pilot-kit/procurement-one-pager.md +50 -0
- package/docs/pilot-kit/rfp-clause.md +46 -0
- package/docs/pilot-kit/roi-calculator-template.csv +2 -0
- package/docs/pilot-kit/security-qa.md +153 -0
- package/docs/pilot-kit/security-summary.md +35 -0
- package/docs/plans/2026-02-13-mcp-spike-design.md +113 -0
- package/docs/spec/AcceptanceCriteria.v1.md +17 -0
- package/docs/spec/AcceptanceEvaluation.v1.md +10 -0
- package/docs/spec/AgentEvent.v1.md +47 -0
- package/docs/spec/AgentIdentity.v1.md +62 -0
- package/docs/spec/AgentPassport.v1.md +95 -0
- package/docs/spec/AgentReputation.v1.md +59 -0
- package/docs/spec/AgentReputation.v2.md +52 -0
- package/docs/spec/AgentRun.v1.md +47 -0
- package/docs/spec/AgentRunSettlement.v1.md +52 -0
- package/docs/spec/AgentWallet.v1.md +43 -0
- package/docs/spec/AgreementDelegation.v1.md +109 -0
- package/docs/spec/ArbitrationCase.v1.md +67 -0
- package/docs/spec/ArbitrationVerdict.v1.md +60 -0
- package/docs/spec/BundleHeadAttestation.v1.md +32 -0
- package/docs/spec/CANONICAL_JSON.md +31 -0
- package/docs/spec/CRYPTOGRAPHY.md +61 -0
- package/docs/spec/ClosePack.v1.md +49 -0
- package/docs/spec/ClosePackManifest.v1.md +24 -0
- package/docs/spec/DelegationGrant.v1.md +90 -0
- package/docs/spec/DisputeOpenEnvelope.v1.md +43 -0
- package/docs/spec/ERRORS.md +76 -0
- package/docs/spec/ESCROW_NETTING_INVARIANTS.md +71 -0
- package/docs/spec/EvidenceIndex.v1.md +20 -0
- package/docs/spec/ExecutionIntent.v1.md +90 -0
- package/docs/spec/FinancePackBundleManifest.v1.md +24 -0
- package/docs/spec/FundingHold.v1.md +60 -0
- package/docs/spec/GovernancePolicy.v1.md +34 -0
- package/docs/spec/GovernancePolicy.v2.md +30 -0
- package/docs/spec/INVARIANTS.md +389 -0
- package/docs/spec/InteractionDirectionMatrix.v1.md +30 -0
- package/docs/spec/InvoiceBundleManifest.v1.md +24 -0
- package/docs/spec/InvoiceClaim.v1.md +11 -0
- package/docs/spec/MONEY_RAIL_STATE_MACHINE.md +58 -0
- package/docs/spec/MarketplaceAcceptance.v2.md +46 -0
- package/docs/spec/MarketplaceOffer.v2.md +54 -0
- package/docs/spec/MeteringReport.v1.md +18 -0
- package/docs/spec/PRODUCER_ERRORS.md +42 -0
- package/docs/spec/PricingMatrix.v1.md +20 -0
- package/docs/spec/PricingMatrixSignatures.v1.md +30 -0
- package/docs/spec/PricingMatrixSignatures.v2.md +29 -0
- package/docs/spec/ProduceCliOutput.v1.md +46 -0
- package/docs/spec/ProofBundleManifest.v1.md +24 -0
- package/docs/spec/README.md +104 -0
- package/docs/spec/REFERENCE_IMPLEMENTATIONS.md +29 -0
- package/docs/spec/REFERENCE_VERIFIER_BEHAVIOR.md +68 -0
- package/docs/spec/REMOTE_SIGNER.md +66 -0
- package/docs/spec/ReleaseIndex.v1.md +32 -0
- package/docs/spec/ReleaseIndexSignatures.v1.md +17 -0
- package/docs/spec/ReleaseTrust.v1.md +13 -0
- package/docs/spec/ReleaseTrust.v2.md +26 -0
- package/docs/spec/RemoteSignerRequest.v1.md +21 -0
- package/docs/spec/RemoteSignerResponse.v1.md +16 -0
- package/docs/spec/ReputationEvent.v1.md +63 -0
- package/docs/spec/RevocationList.v1.md +28 -0
- package/docs/spec/SIGNER_PROVIDER_PLUGIN.md +32 -0
- package/docs/spec/STRICTNESS.md +68 -0
- package/docs/spec/SUPPLY_CHAIN.md +33 -0
- package/docs/spec/SettlementAdjustment.v1.md +45 -0
- package/docs/spec/SettlementDecisionRecord.v1.md +48 -0
- package/docs/spec/SettlementDecisionRecord.v2.md +51 -0
- package/docs/spec/SettlementDecisionReport.v1.md +44 -0
- package/docs/spec/SettlementKernel.v1.md +59 -0
- package/docs/spec/SettlementReceipt.v1.md +63 -0
- package/docs/spec/SlaDefinition.v1.md +24 -0
- package/docs/spec/SlaEvaluation.v1.md +12 -0
- package/docs/spec/THREAT_MODEL.md +113 -0
- package/docs/spec/TOOL_PROVENANCE.md +30 -0
- package/docs/spec/TRUST_ANCHORS.md +84 -0
- package/docs/spec/TenantSettings.v1.md +90 -0
- package/docs/spec/TenantSettings.v2.md +99 -0
- package/docs/spec/TimestampProof.v1.md +25 -0
- package/docs/spec/ToolCallAgreement.v1.md +34 -0
- package/docs/spec/ToolCallEvidence.v1.md +47 -0
- package/docs/spec/ToolManifest.v1.md +47 -0
- package/docs/spec/VERIFIER_ENVIRONMENT.md +38 -0
- package/docs/spec/VERSIONING.md +107 -0
- package/docs/spec/VerificationReport.v1.md +50 -0
- package/docs/spec/VerifyAboutOutput.v1.md +10 -0
- package/docs/spec/VerifyCliOutput.v1.md +28 -0
- package/docs/spec/WARNINGS.md +83 -0
- package/docs/spec/error-codes.v1.txt +285 -0
- package/docs/spec/examples/agreement_delegation_v1.example.json +21 -0
- package/docs/spec/examples/arbitration_case_v1.example.json +26 -0
- package/docs/spec/examples/arbitration_verdict_v1.example.json +32 -0
- package/docs/spec/examples/dispute_open_envelope_v1.example.json +18 -0
- package/docs/spec/examples/produce_cli_output_v1.example.json +32 -0
- package/docs/spec/examples/release_index_signature_v1.example.json +9 -0
- package/docs/spec/examples/release_index_signatures_v1.example.json +14 -0
- package/docs/spec/examples/release_index_v1.example.json +15 -0
- package/docs/spec/examples/release_trust_v1.example.json +7 -0
- package/docs/spec/examples/release_trust_v2.example.json +22 -0
- package/docs/spec/examples/remote_signer_request_v1.example.json +18 -0
- package/docs/spec/examples/remote_signer_response_v1.example.json +8 -0
- package/docs/spec/examples/reputation_event_v1.example.json +29 -0
- package/docs/spec/examples/verification_report_v1.example.json +24 -0
- package/docs/spec/examples/verify_about_output_v1.example.json +29 -0
- package/docs/spec/examples/verify_cli_output_v1.example.json +13 -0
- package/docs/spec/legacy/MarketplaceAcceptance.v1.md +48 -0
- package/docs/spec/legacy/MarketplaceOffer.v1.md +56 -0
- package/docs/spec/legacy/schemas/MarketplaceAcceptance.v1.schema.json +53 -0
- package/docs/spec/legacy/schemas/MarketplaceOffer.v1.schema.json +61 -0
- package/docs/spec/producer-error-codes.v1.txt +14 -0
- package/docs/spec/schemas/AcceptanceCriteria.v1.schema.json +24 -0
- package/docs/spec/schemas/AcceptanceEvaluation.v1.schema.json +26 -0
- package/docs/spec/schemas/AgentEvent.v1.schema.json +49 -0
- package/docs/spec/schemas/AgentIdentity.v1.schema.json +129 -0
- package/docs/spec/schemas/AgentPassport.v1.schema.json +112 -0
- package/docs/spec/schemas/AgentReputation.v1.schema.json +151 -0
- package/docs/spec/schemas/AgentReputation.v2.schema.json +120 -0
- package/docs/spec/schemas/AgentRun.v1.schema.json +71 -0
- package/docs/spec/schemas/AgentRunSettlement.v1.schema.json +75 -0
- package/docs/spec/schemas/AgentWallet.v1.schema.json +54 -0
- package/docs/spec/schemas/AgreementDelegation.v1.schema.json +50 -0
- package/docs/spec/schemas/ArbitrationCase.v1.schema.json +133 -0
- package/docs/spec/schemas/ArbitrationVerdict.v1.schema.json +149 -0
- package/docs/spec/schemas/BundleHeadAttestation.v1.schema.json +21 -0
- package/docs/spec/schemas/ClosePackManifest.v1.schema.json +38 -0
- package/docs/spec/schemas/DelegationGrant.v1.schema.json +102 -0
- package/docs/spec/schemas/DisputeOpenEnvelope.v1.schema.json +78 -0
- package/docs/spec/schemas/EvidenceIndex.v1.schema.json +41 -0
- package/docs/spec/schemas/ExecutionIntent.v1.schema.json +85 -0
- package/docs/spec/schemas/FinancePackBundleManifest.v1.schema.json +38 -0
- package/docs/spec/schemas/FundingHold.v1.schema.json +46 -0
- package/docs/spec/schemas/GovernancePolicy.v1.schema.json +45 -0
- package/docs/spec/schemas/GovernancePolicy.v2.schema.json +70 -0
- package/docs/spec/schemas/InteractionDirectionMatrix.v1.schema.json +43 -0
- package/docs/spec/schemas/InvoiceBundleManifest.v1.schema.json +38 -0
- package/docs/spec/schemas/InvoiceClaim.v1.schema.json +39 -0
- package/docs/spec/schemas/MarketplaceAcceptance.v2.schema.json +53 -0
- package/docs/spec/schemas/MarketplaceOffer.v2.schema.json +61 -0
- package/docs/spec/schemas/MeteringReport.v1.schema.json +45 -0
- package/docs/spec/schemas/PricingMatrix.v1.schema.json +24 -0
- package/docs/spec/schemas/PricingMatrixSignatures.v1.schema.json +24 -0
- package/docs/spec/schemas/PricingMatrixSignatures.v2.schema.json +24 -0
- package/docs/spec/schemas/ProduceCliOutput.v1.schema.json +107 -0
- package/docs/spec/schemas/ProofBundleManifest.v1.schema.json +37 -0
- package/docs/spec/schemas/PublicKeys.v1.schema.json +33 -0
- package/docs/spec/schemas/ReleaseIndex.v1.schema.json +45 -0
- package/docs/spec/schemas/ReleaseIndexSignature.v1.schema.json +16 -0
- package/docs/spec/schemas/ReleaseIndexSignatures.v1.schema.json +16 -0
- package/docs/spec/schemas/ReleaseTrust.v1.schema.json +15 -0
- package/docs/spec/schemas/ReleaseTrust.v2.schema.json +37 -0
- package/docs/spec/schemas/RemoteSignerPublicKeyResponse.v1.schema.json +14 -0
- package/docs/spec/schemas/RemoteSignerRequest.v1.schema.json +24 -0
- package/docs/spec/schemas/RemoteSignerResponse.v1.schema.json +10 -0
- package/docs/spec/schemas/RemoteSignerSignRequest.v1.schema.json +27 -0
- package/docs/spec/schemas/RemoteSignerSignResponse.v1.schema.json +16 -0
- package/docs/spec/schemas/ReputationEvent.v1.schema.json +164 -0
- package/docs/spec/schemas/RevocationList.v1.schema.json +51 -0
- package/docs/spec/schemas/SettlementAdjustment.v1.schema.json +44 -0
- package/docs/spec/schemas/SettlementDecisionRecord.v1.schema.json +66 -0
- package/docs/spec/schemas/SettlementDecisionRecord.v2.schema.json +148 -0
- package/docs/spec/schemas/SettlementDecisionReport.v1.schema.json +61 -0
- package/docs/spec/schemas/SettlementReceipt.v1.schema.json +135 -0
- package/docs/spec/schemas/SlaDefinition.v1.schema.json +33 -0
- package/docs/spec/schemas/SlaEvaluation.v1.schema.json +26 -0
- package/docs/spec/schemas/TenantSettings.v1.schema.json +90 -0
- package/docs/spec/schemas/TenantSettings.v2.schema.json +161 -0
- package/docs/spec/schemas/TimestampProof.v1.schema.json +17 -0
- package/docs/spec/schemas/ToolCallAgreement.v1.schema.json +34 -0
- package/docs/spec/schemas/ToolCallEvidence.v1.schema.json +45 -0
- package/docs/spec/schemas/ToolManifest.v1.schema.json +54 -0
- package/docs/spec/schemas/VerificationReport.v1.schema.json +83 -0
- package/docs/spec/schemas/VerifyAboutOutput.v1.schema.json +54 -0
- package/docs/spec/schemas/VerifyCliOutput.v1.schema.json +75 -0
- package/docs/spec/schemas/VerifyReleaseOutput.v1.schema.json +47 -0
- package/docs/spec/x402-error-codes.v1.txt +21 -0
- package/docs/templates/buyer-email.txt +18 -0
- package/docs/templates/buyer-one-pager.md +24 -0
- package/package.json +40 -6
- package/scripts/acceptance/full-stack.mjs +734 -0
- package/scripts/acceptance/full-stack.sh +99 -0
- package/scripts/audit/build-audit-packet.mjs +242 -0
- package/scripts/backup-pg.sh +45 -0
- package/scripts/backup-restore/README.md +18 -0
- package/scripts/backup-restore/capture-state.mjs +130 -0
- package/scripts/backup-restore/client.mjs +97 -0
- package/scripts/backup-restore/seed-workload.mjs +235 -0
- package/scripts/backup-restore/verify-state.mjs +139 -0
- package/scripts/backup-restore-test.sh +217 -0
- package/scripts/chaos.js +221 -0
- package/scripts/ci/build-launch-cutover-packet.mjs +148 -0
- package/scripts/ci/build-self-serve-benchmark-report.mjs +122 -0
- package/scripts/ci/changelog-guard.mjs +145 -0
- package/scripts/ci/check-kernel-v0-launch-gate.mjs +233 -0
- package/scripts/ci/check-secret-hygiene.mjs +78 -0
- package/scripts/ci/check-version-consistency.mjs +42 -0
- package/scripts/ci/cli-pack-smoke.mjs +160 -0
- package/scripts/ci/flake-budget-guard.mjs +68 -0
- package/scripts/ci/generate-error-codes.mjs +54 -0
- package/scripts/ci/lib/lighthouse-tracker.mjs +90 -0
- package/scripts/ci/lib/self-serve-launch-gate.mjs +89 -0
- package/scripts/ci/npm-pack-smoke.mjs +454 -0
- package/scripts/ci/run-10x-throughput-drill.mjs +246 -0
- package/scripts/ci/run-10x-throughput-incident-rehearsal.mjs +325 -0
- package/scripts/ci/run-arbitration-workspace-browser-e2e.sh +22 -0
- package/scripts/ci/run-circle-sandbox-smoke.mjs +237 -0
- package/scripts/ci/run-go-live-gate.mjs +150 -0
- package/scripts/ci/run-kernel-v0-ship-gate.mjs +97 -0
- package/scripts/ci/run-mcp-host-smoke.mjs +275 -0
- package/scripts/ci/run-self-serve-launch-gate.mjs +56 -0
- package/scripts/ci/runtime-import-smoke.mjs +58 -0
- package/scripts/ci/update-lighthouse-tracker.mjs +112 -0
- package/scripts/closepack/lib.mjs +286 -0
- package/scripts/collect-debug.sh +263 -0
- package/scripts/demo/compositional-settlement-3hop.mjs +237 -0
- package/scripts/demo/delivery-robot/export-ui-fixture.mjs +188 -0
- package/scripts/demo/delivery-robot/generate.mjs +377 -0
- package/scripts/demo/kernel-agent-goes-shopping.mjs +202 -0
- package/scripts/demo/magic-link-first-green.mjs +118 -0
- package/scripts/demo/magic-link-kind-smoke.mjs +577 -0
- package/scripts/demo/mcp-paid-exa.mjs +1110 -0
- package/scripts/dev/billing-doctor.sh +145 -0
- package/scripts/dev/billing-smoke-prod.sh +219 -0
- package/scripts/dev/billing-webhook-replay.sh +161 -0
- package/scripts/dev/env.dev.example +29 -0
- package/scripts/dev/env.sh +37 -0
- package/scripts/dev/new-sdk-key.sh +81 -0
- package/scripts/dev/sdk-first-run.sh +21 -0
- package/scripts/dev/smoke-x402-gateway.sh +115 -0
- package/scripts/dev/start-api.sh +24 -0
- package/scripts/examples/produce-and-verify-jobproof.mjs +191 -0
- package/scripts/examples/sdk-first-paid-rfq.py +105 -0
- package/scripts/examples/sdk-first-verified-run.mjs +85 -0
- package/scripts/examples/sdk-first-verified-run.py +99 -0
- package/scripts/examples/sdk-tenant-analytics.mjs +103 -0
- package/scripts/examples/sdk-tenant-analytics.py +118 -0
- package/scripts/finance-pack/bundle.mjs +284 -0
- package/scripts/fixtures/generate-bundle-fixtures.mjs +877 -0
- package/scripts/governance/export.mjs +169 -0
- package/scripts/load/delivery-stress.k6.js +183 -0
- package/scripts/load/ingest-burst.k6.js +236 -0
- package/scripts/load/run-delivery-load.js +66 -0
- package/scripts/load/webhook-receiver.js +131 -0
- package/scripts/magic-link/migrate-run-records-to-db.mjs +35 -0
- package/scripts/mcp/probe.mjs +238 -0
- package/scripts/mcp/settld-mcp-http-gateway.mjs +178 -0
- package/scripts/mcp/settld-mcp-server.mjs +1201 -0
- package/scripts/openapi/write.mjs +13 -0
- package/scripts/ops/bootstrap-tenant-conformance.mjs +185 -0
- package/scripts/ops/build-x402-pilot-reliability-report.mjs +489 -0
- package/scripts/ops/check-x402-receipt-sample.mjs +181 -0
- package/scripts/ops/design-partner-run-packet.mjs +466 -0
- package/scripts/ops/hosted-baseline-evidence.mjs +681 -0
- package/scripts/ops/money-rails-chargeback-evidence.mjs +509 -0
- package/scripts/ops/money-rails-reconcile-evidence.mjs +180 -0
- package/scripts/ops/p0-seed-money-rail-operation.mjs +432 -0
- package/scripts/pilot/finance-pack.mjs +495 -0
- package/scripts/pilot/fixtures/robot-keypair.json +4 -0
- package/scripts/pilot/fixtures/server-signer.json +4 -0
- package/scripts/proof-bundle/job.mjs +109 -0
- package/scripts/proof-bundle/lib.mjs +92 -0
- package/scripts/proof-bundle/month.mjs +103 -0
- package/scripts/provider/conformance-run.mjs +159 -0
- package/scripts/provider/keys-generate.mjs +135 -0
- package/scripts/provider/publish.mjs +420 -0
- package/scripts/quickstart/x402.mjs +334 -0
- package/scripts/release/build-artifacts.mjs +181 -0
- package/scripts/release/generate-release-index.mjs +112 -0
- package/scripts/release/release-index-lib.mjs +232 -0
- package/scripts/release/sign-release-index.mjs +85 -0
- package/scripts/release/validate-release-assets.mjs +170 -0
- package/scripts/release/verify-release.mjs +261 -0
- package/scripts/restore-pg.sh +34 -0
- package/scripts/scaffold/create-settld-paid-tool.mjs +19 -0
- package/scripts/sdk/smoke-python.py +30 -0
- package/scripts/sdk/smoke.mjs +16 -0
- package/scripts/settlement/x402-batch-worker.mjs +1091 -0
- package/scripts/slo/check.mjs +178 -0
- package/scripts/smoke/k8s-smoke.mjs +214 -0
- package/scripts/spec/generate-protocol-vectors.mjs +931 -0
- package/scripts/test/check-no-generated-artifacts.sh +12 -0
- package/scripts/test/run.sh +45 -0
- package/scripts/trust/validate-trust-file.mjs +57 -0
- package/scripts/trust-config/rotate-settld-pay.mjs +277 -0
- package/scripts/trust-config/wizard.mjs +161 -0
- package/scripts/vendor-contract-test-lib.mjs +182 -0
- package/scripts/vendor-contract-test.mjs +55 -0
- package/scripts/vercel/build-mkdocs.sh +9 -0
- package/scripts/vercel/ignore-mkdocs.sh +25 -0
- package/scripts/vercel/install-mkdocs.sh +6 -0
- package/scripts/verify-pg.js +217 -0
- package/scripts/x402/receipt-verify.mjs +289 -0
- package/services/finance-sink/src/dedupe-store.js +29 -6
- package/services/receiver/src/dedupe-store.js +29 -5
- package/services/x402-gateway/Dockerfile +13 -0
- package/services/x402-gateway/README.md +58 -0
- package/services/x402-gateway/examples/upstream-mock.js +337 -0
- package/services/x402-gateway/src/server.js +947 -0
- package/src/api/app.js +32517 -16877
- package/src/api/maintenance.js +70 -0
- package/src/api/openapi.js +1130 -17
- package/src/api/persistence.js +272 -0
- package/src/api/server.js +81 -5
- package/src/api/store.js +1248 -6
- package/src/api/workers/deliveries.js +99 -4
- package/src/api/workers/insolvency-sweep.js +159 -0
- package/src/core/agent-card.js +69 -0
- package/src/core/agent-wallets.js +97 -0
- package/src/core/agreement-delegation.js +549 -0
- package/src/core/billing-plans.js +40 -6
- package/src/core/circle-reserve-adapter.js +845 -0
- package/src/core/maintenance-locks.js +1 -0
- package/src/core/paid-tool-manifest.js +318 -0
- package/src/core/provider-publish-conformance.js +525 -0
- package/src/core/provider-publish-proof.js +396 -0
- package/src/core/provider-quote-signature.js +170 -0
- package/src/core/settld-keys.js +112 -0
- package/src/core/settld-pay-token.js +344 -0
- package/src/core/settlement-kernel.js +213 -2
- package/src/core/settlement-verifier.js +335 -0
- package/src/core/tool-call-agreement.js +112 -0
- package/src/core/tool-call-evidence.js +144 -0
- package/src/core/tool-provider-signature.js +98 -0
- package/src/core/x402-escalation-override.js +258 -0
- package/src/core/x402-gate.js +118 -0
- package/src/core/x402-provider-refund-decision.js +220 -0
- package/src/core/x402-receipt-verifier.js +708 -0
- package/src/core/x402-reversal-command.js +251 -0
- package/src/core/x402-wallet-issuer-decision.js +252 -0
- package/src/core/zk-verifier.js +300 -0
- package/src/db/migrations/029_reputation_event_index.sql +54 -0
- package/src/db/migrations/030_artifacts_source_event_unique_job_only.sql +15 -0
- package/src/db/pg.js +18 -7
- package/src/db/store-pg.js +838 -72
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# Releasing Settld
|
|
2
|
+
|
|
3
|
+
This repo treats the **protocol** (docs + schemas + vectors + fixtures) as an API. Releases must be repeatable and reviewable.
|
|
4
|
+
|
|
5
|
+
See `docs/spec/VERSIONING.md` for “what requires a bump”.
|
|
6
|
+
|
|
7
|
+
## Release checklist
|
|
8
|
+
|
|
9
|
+
See `docs/RELEASE_CHECKLIST.md` for the definitive artifact completeness requirements.
|
|
10
|
+
|
|
11
|
+
1. Ensure `npm test` is green.
|
|
12
|
+
2. Ensure fixture determinism gate passes (it’s part of `npm test`).
|
|
13
|
+
3. Update `CHANGELOG.md`:
|
|
14
|
+
- Add a new version section (Keep a Changelog format).
|
|
15
|
+
- Call out any protocol-surface changes explicitly.
|
|
16
|
+
4. Bump tool version(s) you ship:
|
|
17
|
+
- `packages/artifact-verify/package.json` `version`
|
|
18
|
+
- `packages/api-sdk-python/pyproject.toml` `project.version` (when shipping Python SDK changes)
|
|
19
|
+
- `SETTLD_VERSION` (repo/service version stamp)
|
|
20
|
+
5. Run packaging smoke test:
|
|
21
|
+
- `node scripts/ci/npm-pack-smoke.mjs`
|
|
22
|
+
- `node scripts/ci/cli-pack-smoke.mjs`
|
|
23
|
+
- `python3 -m build packages/api-sdk-python --sdist --wheel --outdir /tmp/settld-python-dist-smoke`
|
|
24
|
+
- Optionally generate full release artifacts locally: `npm run release:artifacts`
|
|
25
|
+
6. Create a tag and push it:
|
|
26
|
+
- Tag format: `vX.Y.Z`
|
|
27
|
+
- `git tag -a vX.Y.Z -m "vX.Y.Z"`
|
|
28
|
+
- `git push origin vX.Y.Z`
|
|
29
|
+
|
|
30
|
+
On tag push, GitHub Actions builds and publishes release artifacts (Docker image, Helm chart, npm tarballs, Python wheel/sdist artifacts, SHA256SUMS).
|
|
31
|
+
If `NPM_TOKEN` is configured in repo secrets, the release lane also publishes:
|
|
32
|
+
|
|
33
|
+
- `settld` (CLI, so `npx settld ...` works directly),
|
|
34
|
+
- `settld-api-sdk` (JS SDK used by starter templates),
|
|
35
|
+
- `@settld/provider-kit` (provider middleware package),
|
|
36
|
+
- `create-settld-paid-tool` (scaffold CLI package).
|
|
37
|
+
After publish, the workflow runs registry smoke checks and uploads `npm-postpublish-smoke-<version>` artifacts with command outputs + JSON summary evidence.
|
|
38
|
+
The `release_gate` job also runs a staging billing smoke (`dev:billing:smoke:prod`) and uploads `billing-smoke-prod.log` + `billing-smoke-status.json` as gate artifacts.
|
|
39
|
+
|
|
40
|
+
Python package publishing uses PyPI Trusted Publishing (OIDC) via either:
|
|
41
|
+
|
|
42
|
+
- the `python_publish` job in `.github/workflows/release.yml` (full release lane), or
|
|
43
|
+
- `.github/workflows/python-pypi.yml` (Python-only publish lane).
|
|
44
|
+
|
|
45
|
+
Before the first publish, configure a PyPI trusted publisher for this repo/workflow and allow the `pypi` GitHub environment.
|
|
46
|
+
|
|
47
|
+
## TestPyPI dry-run lane
|
|
48
|
+
|
|
49
|
+
Use `.github/workflows/python-testpypi.yml` as a manual pre-production lane:
|
|
50
|
+
|
|
51
|
+
1. Ensure `packages/api-sdk-python/pyproject.toml` `project.version` matches the version you plan to publish.
|
|
52
|
+
2. Run the `python-testpypi` workflow via `workflow_dispatch` and pass `version`.
|
|
53
|
+
3. The workflow builds wheel+sdist, asserts versioned filenames, and publishes to TestPyPI using OIDC (`testpypi` environment).
|
|
54
|
+
4. Validate installability from TestPyPI before running a production tag release.
|
|
55
|
+
|
|
56
|
+
## Python-only PyPI lane
|
|
57
|
+
|
|
58
|
+
Use `.github/workflows/python-pypi.yml` when you want to publish just the Python SDK to PyPI without waiting for other release jobs (Docker/Helm/conformance/audit).
|
|
59
|
+
|
|
60
|
+
1. Set `packages/api-sdk-python/pyproject.toml` `project.version` to the target version.
|
|
61
|
+
2. Ensure PyPI trusted publishing is configured for workflow `python-pypi.yml` and environment `pypi`.
|
|
62
|
+
3. Run the `python-pypi` workflow via `workflow_dispatch`.
|
|
63
|
+
4. Confirm wheel/sdist publish completed on PyPI and smoke-install in a clean venv.
|
|
64
|
+
|
|
65
|
+
## Release authenticity
|
|
66
|
+
|
|
67
|
+
Releases also publish a signed `ReleaseIndex.v1` (`release_index_v1.json` + `release_index_v1.sig`) to make artifact authenticity verifiable.
|
|
68
|
+
|
|
69
|
+
See `docs/spec/ReleaseIndex.v1.md` and `docs/spec/SUPPLY_CHAIN.md`.
|
|
70
|
+
|
|
71
|
+
The release workflow expects a repo secret named `SETTLD_RELEASE_SIGNING_PRIVATE_KEY_PEM` containing an Ed25519 private key PEM used only for signing release indexes.
|
|
72
|
+
|
|
73
|
+
The corresponding public key (and quorum policy, if used) is pinned in `trust/release-trust.json` and should be treated as a security-sensitive change (PR + review).
|
|
74
|
+
|
|
75
|
+
## Protocol vectors / fixtures rotation
|
|
76
|
+
|
|
77
|
+
If a change *intentionally* changes protocol meaning (schemas/spec semantics/strictness/canonicalization/hashing), do not “let it drift”:
|
|
78
|
+
|
|
79
|
+
- Update specs and schemas together.
|
|
80
|
+
- Rotate vectors and/or add fixtures deliberately.
|
|
81
|
+
- Add a clear “Protocol change” entry to `CHANGELOG.md`.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Repo Settings (Recommended)
|
|
2
|
+
|
|
3
|
+
These are GitHub-side settings we expect for a fail-closed kernel repo.
|
|
4
|
+
|
|
5
|
+
## Branch Protection (main)
|
|
6
|
+
|
|
7
|
+
- Require a pull request before merging.
|
|
8
|
+
- Require status checks to pass before merging:
|
|
9
|
+
- `tests / pr_issue_link_guard`
|
|
10
|
+
- `tests / changelog_guard`
|
|
11
|
+
- `tests / unit_tests`
|
|
12
|
+
- `tests / openapi_drift`
|
|
13
|
+
- `tests / npm_pack_smoke (ubuntu-latest)`
|
|
14
|
+
- `tests / npm_pack_smoke (macos-latest)`
|
|
15
|
+
- `tests / npm_pack_smoke (windows-latest)`
|
|
16
|
+
- `tests / cli_cross_platform (ubuntu-latest)`
|
|
17
|
+
- `tests / cli_cross_platform (macos-latest)`
|
|
18
|
+
- `tests / cli_cross_platform (windows-latest)`
|
|
19
|
+
- `tests / python_verifier_conformance`
|
|
20
|
+
- `tests / github_action_settld_verify (jobproof)`
|
|
21
|
+
- `tests / github_action_settld_verify (monthproof)`
|
|
22
|
+
- `tests / github_action_settld_verify (financepack)`
|
|
23
|
+
- Dismiss stale PR approvals when new commits are pushed.
|
|
24
|
+
- Require linear history.
|
|
25
|
+
- Block force pushes and deletions.
|
|
26
|
+
- Require conversation resolution.
|
|
27
|
+
|
|
28
|
+
Optional:
|
|
29
|
+
|
|
30
|
+
- Require signed commits.
|
|
31
|
+
- Require CODEOWNERS review (if/when CODEOWNERS exists).
|
|
32
|
+
|
|
33
|
+
## Actions
|
|
34
|
+
|
|
35
|
+
- Keep secrets scoped to environments (staging/prod).
|
|
36
|
+
- Require manual approval for production deployments (if/when added).
|
|
37
|
+
|
package/docs/RUNBOOK.md
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# Settld Operations Runbook
|
|
2
|
+
|
|
3
|
+
## Quick reference
|
|
4
|
+
|
|
5
|
+
| Symptom | Likely cause | Action |
|
|
6
|
+
|---|---|---|
|
|
7
|
+
| `outbox_pending_gauge` growing | downstream down or worker stuck | check `/ops/status`, check delivery logs, restart worker |
|
|
8
|
+
| `delivery_dlq_pending_total_gauge` > 0 | repeated delivery failures | inspect DLQ; fix destination; requeue (audited) |
|
|
9
|
+
| `ingest_rejected_total` spike | integration bug or hostile input | check `/ops/status` top reject codes; identify client from logs |
|
|
10
|
+
| stripe billing rejects/replayable dead-letter rising | dropped/invalid webhook windows or apply failures | follow `docs/ops/BILLING_WEBHOOK_REPLAY.md` |
|
|
11
|
+
| go-live gate blocked | one or more S13 checks failed | run `node scripts/ci/run-go-live-gate.mjs` + `node scripts/ci/build-launch-cutover-packet.mjs`, inspect `artifacts/gates/s13-go-live-gate.json` + `artifacts/gates/s13-launch-cutover-packet.json` |
|
|
12
|
+
| `/healthz` dbOk=false | Postgres down/unreachable | fix DB connectivity; do not restart-loop workers |
|
|
13
|
+
| `ARTIFACT_HASH_MISMATCH` | non-determinism or duplicate IDs | **stop ingestion**, preserve state, investigate |
|
|
14
|
+
|
|
15
|
+
## Standard endpoints
|
|
16
|
+
|
|
17
|
+
- `GET /health` liveness
|
|
18
|
+
- `GET /healthz` health with signals
|
|
19
|
+
- `GET /metrics` metrics
|
|
20
|
+
- `GET /ops/status` backlog + DLQ + top reject codes
|
|
21
|
+
|
|
22
|
+
## Common scenarios
|
|
23
|
+
|
|
24
|
+
### Outbox backlog growing
|
|
25
|
+
|
|
26
|
+
1. `GET /ops/status` (confirm which backlog is growing).
|
|
27
|
+
2. Check logs for `outbox.claim`, `ledger.apply.*`, `delivery.*`.
|
|
28
|
+
3. If deliveries: verify destination health/auth; allow retries or move to DLQ.
|
|
29
|
+
4. If ledger apply: investigate DB errors; do **not** manually mutate ledger tables.
|
|
30
|
+
|
|
31
|
+
### Delivery DLQ non-zero
|
|
32
|
+
|
|
33
|
+
1. Inspect failure reason codes in DB/ops tooling (destination down, non-2xx, auth, timeout).
|
|
34
|
+
2. Fix destination.
|
|
35
|
+
3. Requeue (audited) and watch `delivery_dlq_pending_total_gauge` return to 0.
|
|
36
|
+
|
|
37
|
+
### Ingest rejects spike
|
|
38
|
+
|
|
39
|
+
1. `GET /ops/status` → identify top reject reason codes.
|
|
40
|
+
2. Correlate to request logs by `requestId` and tenant.
|
|
41
|
+
3. If attack suspected: enable/raise rate limiting; rotate/revoke keys as needed.
|
|
42
|
+
|
|
43
|
+
### Stripe billing dead-letter/replay spike
|
|
44
|
+
|
|
45
|
+
1. Run `docs/ops/BILLING_WEBHOOK_REPLAY.md` command sequence.
|
|
46
|
+
2. Dry-run replay first, then run live replay if dry-run is clean.
|
|
47
|
+
3. Confirm post-replay `reconcile/report` counters move as expected and incident log is updated.
|
|
48
|
+
|
|
49
|
+
### Settlement / artifact drift (critical)
|
|
50
|
+
|
|
51
|
+
Stop. This is a “system-of-record” incident.
|
|
52
|
+
|
|
53
|
+
Immediate actions:
|
|
54
|
+
1. Stop accepting new writes (ingest + event appends).
|
|
55
|
+
2. Preserve DB snapshot and logs.
|
|
56
|
+
3. Identify the job/artifact with drift.
|
|
57
|
+
4. Compare event stream bytes + pinned hashes; look for nondeterminism (timestamps, randomness, floats).
|
|
58
|
+
|
|
59
|
+
Do not resume ingestion until:
|
|
60
|
+
- root cause is fixed, and
|
|
61
|
+
- a regression test is added, and
|
|
62
|
+
- a replay produces identical hashes.
|
|
63
|
+
|
|
64
|
+
### Throughput launch drill (T177)
|
|
65
|
+
|
|
66
|
+
1. Run `node scripts/ci/run-10x-throughput-drill.mjs` with production-like env.
|
|
67
|
+
2. Confirm `artifacts/throughput/10x-drill-summary.json` shows `verdict.ok=true`.
|
|
68
|
+
3. Run `node scripts/ci/run-10x-throughput-incident-rehearsal.mjs`.
|
|
69
|
+
4. Confirm `artifacts/throughput/10x-incident-rehearsal-summary.json` shows `verdict.ok=true`.
|
|
70
|
+
5. If failed:
|
|
71
|
+
- inspect `http_req_duration p95`, `http_req_failed rate`, and ingest reject rate.
|
|
72
|
+
- keep release gate blocked until thresholds pass.
|
|
73
|
+
|
|
74
|
+
### Go-live gate (T182)
|
|
75
|
+
|
|
76
|
+
1. Run `node scripts/ci/run-go-live-gate.mjs`.
|
|
77
|
+
2. Run `node scripts/ci/build-launch-cutover-packet.mjs`.
|
|
78
|
+
3. Inspect `artifacts/gates/s13-go-live-gate.json` and `artifacts/gates/s13-launch-cutover-packet.json`.
|
|
79
|
+
4. Gate requires:
|
|
80
|
+
- deterministic critical suites pass,
|
|
81
|
+
- 10x throughput drill pass,
|
|
82
|
+
- lighthouse tracker indicates >=3 paid production settlements.
|
|
83
|
+
|
|
84
|
+
## DR: backup/restore drill
|
|
85
|
+
|
|
86
|
+
Use `scripts/backup-restore-test.sh` (PG mode) to prove restore correctness.
|
package/docs/SKILLS.md
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Skills & Royalties (v0.3)
|
|
2
|
+
|
|
3
|
+
Skills are licensed to a job as explicit events. Royalties are deterministic and flow into the settlement ledger.
|
|
4
|
+
|
|
5
|
+
## Principles
|
|
6
|
+
|
|
7
|
+
- **Licensing is explicit**: paid capabilities must be licensed (`SKILL_LICENSED`) before use.
|
|
8
|
+
- **Usage is auditable**: the executor can emit `SKILL_USED` events during execution.
|
|
9
|
+
- **Settlement is deterministic**: developer royalties payable equals the sum of licensed skill fees.
|
|
10
|
+
|
|
11
|
+
## Events
|
|
12
|
+
|
|
13
|
+
### `SKILL_LICENSED` (server-signed)
|
|
14
|
+
|
|
15
|
+
Licenses a skill version to a job.
|
|
16
|
+
|
|
17
|
+
```json
|
|
18
|
+
{
|
|
19
|
+
"jobId": "job_123",
|
|
20
|
+
"skill": { "skillId": "skill_reset_lite", "version": "1.2.0", "developerId": "dev_abc" },
|
|
21
|
+
"pricing": { "model": "PER_JOB", "amountCents": 399, "currency": "USD" },
|
|
22
|
+
"licenseId": "lic_789",
|
|
23
|
+
"terms": { "refundableUntilState": "EXECUTING", "requiresCertificationTier": "CERTIFIED" }
|
|
24
|
+
}
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### `SKILL_USED` (robot- or operator-signed)
|
|
28
|
+
|
|
29
|
+
Proves the skill actually ran (v0.3 uses the `licenseId` as the linkage):
|
|
30
|
+
|
|
31
|
+
```json
|
|
32
|
+
{ "jobId": "job_123", "licenseId": "lic_789", "step": "wipe_surfaces" }
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Enforced invariants (v0.3)
|
|
36
|
+
|
|
37
|
+
- `SKILL_LICENSED` is rejected after execution starts.
|
|
38
|
+
- `SKILL_USED` is rejected unless a matching `SKILL_LICENSED` exists in the job stream.
|
|
39
|
+
- At `SETTLED` (job completed):
|
|
40
|
+
- Developer royalties payable equals the sum of `SKILL_LICENSED.pricing.amountCents`.
|
|
41
|
+
- The journal entry must balance to zero.
|
|
42
|
+
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Skill Bundle Format (v0)
|
|
2
|
+
|
|
3
|
+
Settld skills are **signed bundles** with deterministic policies and testable constraints.
|
|
4
|
+
|
|
5
|
+
## Goals
|
|
6
|
+
|
|
7
|
+
- Portability: skill runs against a stable Capability API, not robot-specific SDKs.
|
|
8
|
+
- Certifiability: static checks + simulation + hardware-in-loop tests.
|
|
9
|
+
- Safety: constraints are explicit and enforced (agent clamps unsafe actions).
|
|
10
|
+
- Auditability: versioned, signed, and reproducible.
|
|
11
|
+
|
|
12
|
+
## Bundle layout (proposed)
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
skill/
|
|
16
|
+
skill.json
|
|
17
|
+
policy/
|
|
18
|
+
graph.json
|
|
19
|
+
tests/
|
|
20
|
+
cases.json
|
|
21
|
+
assets/
|
|
22
|
+
... optional (small models, prompts, classifiers)
|
|
23
|
+
signatures/
|
|
24
|
+
bundle.sig
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### `skill.json` (metadata)
|
|
28
|
+
|
|
29
|
+
- `id`, `name`, `version`
|
|
30
|
+
- `developerId`
|
|
31
|
+
- `requiredCapabilities`
|
|
32
|
+
- `safetyConstraints` (speed/force envelopes, contact rules, allowed zones)
|
|
33
|
+
- `privacyProfile` (sensor usage, retention expectations)
|
|
34
|
+
- `certificationTier` (e.g., `dev`, `lab_cert`, `field_cert`)
|
|
35
|
+
|
|
36
|
+
### `policy/graph.json`
|
|
37
|
+
|
|
38
|
+
Deterministic policy representation (behavior tree or state machine) that calls Capability API primitives.
|
|
39
|
+
|
|
40
|
+
### `tests/cases.json`
|
|
41
|
+
|
|
42
|
+
- simulation cases and expected outcomes
|
|
43
|
+
- regression triggers (known failure modes)
|
|
44
|
+
|
|
45
|
+
### Signatures
|
|
46
|
+
|
|
47
|
+
- Signed by Settld certification key (tier-dependent).
|
|
48
|
+
- Agent verifies signature before installation/execution.
|
package/docs/SLO.md
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# Service Level Objectives (SLO) — v1
|
|
2
|
+
|
|
3
|
+
This document defines a minimal, explicit set of SLOs for Settld as a finance-grade system-of-record service.
|
|
4
|
+
|
|
5
|
+
These SLOs are enforced in CI (kind smoke) via a post-run `/metrics` snapshot check (`scripts/slo/check.mjs`).
|
|
6
|
+
|
|
7
|
+
## SLO-1: API availability (no 5xx during smoke)
|
|
8
|
+
|
|
9
|
+
**Objective**
|
|
10
|
+
|
|
11
|
+
- During the Kubernetes smoke lifecycle, the Settld API must not emit HTTP 5xx responses.
|
|
12
|
+
|
|
13
|
+
**Metric**
|
|
14
|
+
|
|
15
|
+
- `http_requests_total{status="5xx"}` derived from `http_requests_total{status="<code>"}`
|
|
16
|
+
|
|
17
|
+
**Threshold**
|
|
18
|
+
|
|
19
|
+
- `sum(http_requests_total{status=~"5.."}) == 0` for the duration of the smoke run.
|
|
20
|
+
|
|
21
|
+
**Why**
|
|
22
|
+
|
|
23
|
+
Any 5xx indicates server-side failure (misconfig, migration issues, DB issues, regressions).
|
|
24
|
+
|
|
25
|
+
## SLO-2: Delivery rails health (no DLQ / no stuck backlog at end-of-run)
|
|
26
|
+
|
|
27
|
+
**Objective**
|
|
28
|
+
|
|
29
|
+
- At the end of the smoke run, there is no delivery DLQ backlog and no stuck delivery backlog.
|
|
30
|
+
|
|
31
|
+
**Metrics**
|
|
32
|
+
|
|
33
|
+
- `delivery_dlq_pending_total_gauge`
|
|
34
|
+
- `deliveries_pending_gauge{state="pending"}`
|
|
35
|
+
- `deliveries_pending_gauge{state="failed"}`
|
|
36
|
+
|
|
37
|
+
**Thresholds**
|
|
38
|
+
|
|
39
|
+
- `delivery_dlq_pending_total_gauge == 0`
|
|
40
|
+
- `deliveries_pending_gauge{state="pending"} == 0`
|
|
41
|
+
- `deliveries_pending_gauge{state="failed"} == 0`
|
|
42
|
+
|
|
43
|
+
**Why**
|
|
44
|
+
|
|
45
|
+
DLQ backlog is an on-call page. Pending backlog at end-of-run implies workers are stuck or PG is unhealthy.
|
|
46
|
+
|
|
47
|
+
## SLO-3: Outbox boundedness (no runaway backlog at end-of-run)
|
|
48
|
+
|
|
49
|
+
**Objective**
|
|
50
|
+
|
|
51
|
+
- At the end of the smoke run, total outbox pending work is below a safe bound.
|
|
52
|
+
|
|
53
|
+
**Metric**
|
|
54
|
+
|
|
55
|
+
- `outbox_pending_gauge{kind=...}`
|
|
56
|
+
|
|
57
|
+
**Threshold**
|
|
58
|
+
|
|
59
|
+
- `sum(outbox_pending_gauge) <= 200` (CI default; configurable)
|
|
60
|
+
|
|
61
|
+
**Why**
|
|
62
|
+
|
|
63
|
+
If the outbox is growing without being drained, the system is not steady-state safe.
|
|
64
|
+
|
|
65
|
+
## CI enforcement
|
|
66
|
+
|
|
67
|
+
- Script: `scripts/slo/check.mjs`
|
|
68
|
+
- Source of truth: `/metrics` snapshot taken after the smoke lifecycle completes.
|
|
69
|
+
- Thresholds are configurable via env (see script header).
|
|
70
|
+
|
package/docs/SUMMARY.md
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Summary
|
|
2
|
+
|
|
3
|
+
- [Settld Documentation](README.md)
|
|
4
|
+
- [Docs Home](gitbook/README.md)
|
|
5
|
+
- [Quickstart](gitbook/quickstart.md)
|
|
6
|
+
- [Core Primitives](gitbook/core-primitives.md)
|
|
7
|
+
- [API Reference](gitbook/api-reference.md)
|
|
8
|
+
- [Conformance](gitbook/conformance.md)
|
|
9
|
+
- [Closepacks](gitbook/closepacks.md)
|
|
10
|
+
- [Guides](gitbook/guides.md)
|
|
11
|
+
- [Dispute Lifecycle](gitbook/dispute-lifecycle.md)
|
|
12
|
+
- [Replay and Audit](gitbook/replay-and-audit.md)
|
|
13
|
+
- [SDK Reference](gitbook/sdk-reference.md)
|
|
14
|
+
- [Operations Runbook](gitbook/operations-runbook.md)
|
|
15
|
+
- [Security Model](gitbook/security-model.md)
|
|
16
|
+
- [FAQ](gitbook/faq.md)
|
package/docs/SUPPORT.md
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Support / filing a good bug
|
|
2
|
+
|
|
3
|
+
Settld verification is designed to be diagnosable from **structured, stable outputs**.
|
|
4
|
+
|
|
5
|
+
## Attach these artifacts
|
|
6
|
+
|
|
7
|
+
1. `settld-verify --about --format json`
|
|
8
|
+
2. `settld-verify --format json ...` output (`VerifyCliOutput.v1`)
|
|
9
|
+
3. Trust anchor method (env vars or trust file path) and intended root `keyId`s (public keys OK; **no private keys**)
|
|
10
|
+
4. Installation mode (npm version pinned, npm tarball, or from source)
|
|
11
|
+
5. OS + Node version
|
|
12
|
+
|
|
13
|
+
## Helpful flags
|
|
14
|
+
|
|
15
|
+
- `--explain` — prints deterministic diagnostics to stderr without changing JSON stdout.
|
|
16
|
+
- `--fail-on-warnings` — converts warnings into a failure (CI gating posture).
|
|
17
|
+
|
|
18
|
+
## Where to look first
|
|
19
|
+
|
|
20
|
+
- Error codes and remediation: `docs/spec/ERRORS.md`
|
|
21
|
+
- Warning codes and remediation: `docs/spec/WARNINGS.md`
|
|
22
|
+
- Trust anchor posture: `docs/spec/TRUST_ANCHORS.md`
|
|
23
|
+
- Strict/non-strict semantics: `docs/spec/STRICTNESS.md`
|
|
24
|
+
|
|
25
|
+
## Quickstart failures (Docker / local dev)
|
|
26
|
+
|
|
27
|
+
If you're stuck getting the quickstart running:
|
|
28
|
+
|
|
29
|
+
1. Run `./scripts/collect-debug.sh`
|
|
30
|
+
2. Attach the resulting `settld-debug-*.tar.gz` to a GitHub issue using the \"Quickstart failure\" template:
|
|
31
|
+
- https://github.com/aidenlippert/settld/issues/new?template=quickstart-failure.yml
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Threat Model (v0)
|
|
2
|
+
|
|
3
|
+
## Assets to protect
|
|
4
|
+
|
|
5
|
+
- Physical safety of people/property.
|
|
6
|
+
- Requester privacy (sensor data, recordings).
|
|
7
|
+
- Financial correctness (ledger, payouts, refunds).
|
|
8
|
+
- Integrity of black box logs (events/evidence).
|
|
9
|
+
- Integrity of skill artifacts (bundles, versions).
|
|
10
|
+
- Device identity (robot/agent keys).
|
|
11
|
+
|
|
12
|
+
## Primary attackers
|
|
13
|
+
|
|
14
|
+
- Compromised robot/agent device.
|
|
15
|
+
- Malicious skill developer (or supply-chain compromise).
|
|
16
|
+
- Insider misuse (operator overreach).
|
|
17
|
+
- Requester/owner fraud (false claims, tampered evidence).
|
|
18
|
+
- Network attacker (MITM, replay).
|
|
19
|
+
|
|
20
|
+
## Controls (MVP principles)
|
|
21
|
+
|
|
22
|
+
- Device identity: per-agent keypair; rotate credentials; restrict API tokens.
|
|
23
|
+
- Transport security: mTLS for agent; scoped auth for consoles and apps.
|
|
24
|
+
- Artifact integrity: signed skill bundles; allow-list certified tiers.
|
|
25
|
+
- Log integrity: hash-chained event logs; signatures from agent keys.
|
|
26
|
+
- Least privilege: capability-limited skills; scoped operator actions.
|
|
27
|
+
- Revocation: access plans and device certs can be revoked immediately.
|
|
28
|
+
- Audit: immutable operator action log and evidence bundle timeline.
|
|
29
|
+
|
|
30
|
+
## Abuse scenarios to design for
|
|
31
|
+
|
|
32
|
+
- Operator issues unsafe command → agent clamps; event logged.
|
|
33
|
+
- Skill tries to activate camera in privacy-off zone → denied; event logged.
|
|
34
|
+
- Attempt to delete/reorder events → chain verification fails.
|
|
35
|
+
- Chargeback/refund disputes → ledger + evidence bundle support resolution.
|
|
36
|
+
|
package/docs/TRUST.md
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Trust (v0.4)
|
|
2
|
+
|
|
3
|
+
Settld’s trust layer is a “privacy-respecting black box”: an append-only, tamper-evident event log with signer policy, plus minimal evidence references and a deterministic claims workflow.
|
|
4
|
+
|
|
5
|
+
## Core guarantees
|
|
6
|
+
|
|
7
|
+
- **Validated causality at append-time**: the server rejects events that break the chain, violate schema, violate signer policy, or violate core job/claims gates.
|
|
8
|
+
- **Tamper-evidence**: each event commits to its canonical payload (`payloadHash`) and to the previous link (`chainHash`), so deletion/reordering is detectable.
|
|
9
|
+
- **Proof of actor**: sensitive event families require signatures (robot/operator/server) based on event type.
|
|
10
|
+
- **Minimal recording**: raw media is never embedded in the event log; evidence is stored out-of-band and only referenced.
|
|
11
|
+
- **Deterministic economics**: claims adjustments and payouts produce double-entry ledger postings that always balance.
|
|
12
|
+
|
|
13
|
+
## Incident events
|
|
14
|
+
|
|
15
|
+
Incidents create the “what went wrong” anchor for evidence and claims.
|
|
16
|
+
|
|
17
|
+
- `INCIDENT_DETECTED` (robot-signed): anomaly detected during execution.
|
|
18
|
+
- `INCIDENT_REPORTED` (server- or operator-signed): customer report or operator report.
|
|
19
|
+
|
|
20
|
+
Incidents are keyed by `incidentId` and include a strict taxonomy type and integer severity `1..5`.
|
|
21
|
+
|
|
22
|
+
## Evidence events
|
|
23
|
+
|
|
24
|
+
Evidence is out-of-band and reference-only:
|
|
25
|
+
|
|
26
|
+
- `EVIDENCE_CAPTURED` (robot- or server-signed)
|
|
27
|
+
|
|
28
|
+
`EVIDENCE_CAPTURED` payloads include:
|
|
29
|
+
|
|
30
|
+
- `evidenceRef`: object-storage style URI (e.g. `obj://...`) — never raw bytes.
|
|
31
|
+
- metadata: `kind`, `durationSeconds`, `contentType`, `redaction`.
|
|
32
|
+
|
|
33
|
+
Evidence must reference an existing `incidentId` (append-time enforced).
|
|
34
|
+
|
|
35
|
+
## Claims workflow
|
|
36
|
+
|
|
37
|
+
Claims are modeled as a strict event-driven workflow:
|
|
38
|
+
|
|
39
|
+
- `CLAIM_OPENED` (server-signed)
|
|
40
|
+
- `CLAIM_TRIAGED` (server- or operator-signed)
|
|
41
|
+
- `CLAIM_APPROVED` / `CLAIM_DENIED` (server-signed)
|
|
42
|
+
- `JOB_ADJUSTED` (server-signed) — ties approval to deterministic ledger adjustments
|
|
43
|
+
- `CLAIM_PAID` (server-signed) — references the external payment and posts ledger entries
|
|
44
|
+
|
|
45
|
+
Append-time gates enforce that claims:
|
|
46
|
+
|
|
47
|
+
- reference an existing incident,
|
|
48
|
+
- can’t be approved/denied twice,
|
|
49
|
+
- can’t be paid before adjustment,
|
|
50
|
+
- can’t be approved for “no-execution” jobs except explicit access failures.
|
|
51
|
+
|
|
52
|
+
## Ledger linkage (high level)
|
|
53
|
+
|
|
54
|
+
- `JOB_ADJUSTED` creates `acct_claims_payable` for the approved total (payout + refund) and offsets it via:
|
|
55
|
+
- `acct_claims_expense` for payouts, and/or
|
|
56
|
+
- proportional reversals of job settlement allocations for refunds.
|
|
57
|
+
- `CLAIM_PAID` reduces `acct_claims_payable` and credits `acct_cash`.
|
|
58
|
+
|
|
59
|
+
See `docs/LEDGER.md` for the exact posting rules.
|
package/docs/WORKFLOW.md
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Workflow (Single Source Of Truth)
|
|
2
|
+
|
|
3
|
+
Planning and execution are intentionally simple:
|
|
4
|
+
|
|
5
|
+
1. **GitHub Issues** are the only live backlog (single source of truth).
|
|
6
|
+
2. **PRs** are the unit of shipping. Every PR must link an Issue.
|
|
7
|
+
3. **CI** is fail-closed for kernel invariants (protocol, verification, settlement, determinism).
|
|
8
|
+
|
|
9
|
+
## Planning
|
|
10
|
+
|
|
11
|
+
- Create an Issue using an issue form (feature/bug/ops/ci).
|
|
12
|
+
- Assign labels:
|
|
13
|
+
- one `prio:*`
|
|
14
|
+
- one `stream:*`
|
|
15
|
+
- one `type:*`
|
|
16
|
+
- Put the Issue in the current Milestone (e.g. `S20`).
|
|
17
|
+
|
|
18
|
+
## Shipping
|
|
19
|
+
|
|
20
|
+
- Branch naming: `issue/<number>-<slug>` (e.g. `issue/123-mcp-tool-manifests`)
|
|
21
|
+
- PR title: include the Issue number (e.g. `#123 ...`)
|
|
22
|
+
- PR description: include `Closes #123` so merge closes the Issue.
|
|
23
|
+
|
|
24
|
+
## Definition Of Done (DoD)
|
|
25
|
+
|
|
26
|
+
- Tests added/updated for behavioral changes.
|
|
27
|
+
- Protocol changes include docs + schema + vectors/fixtures (lockstep).
|
|
28
|
+
- Ops-impacting changes include runbook updates.
|
|
29
|
+
- CI green on all required checks.
|
|
30
|
+
|
|
31
|
+
## In-Repo Planning Files
|
|
32
|
+
|
|
33
|
+
- `planning/STATUS.md` is only a pointer to GitHub Issues.
|
|
34
|
+
- Implementation trackers under `planning/sprints/` are evidence records (what shipped), not a live backlog.
|
|
35
|
+
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# X402 Batch Settlement Worker
|
|
2
|
+
|
|
3
|
+
This worker creates deterministic provider payout batches from paid MCP/x402 demo artifacts and can optionally submit those batches to Circle rails.
|
|
4
|
+
|
|
5
|
+
## Purpose
|
|
6
|
+
|
|
7
|
+
- Aggregate released x402 gates by provider and currency.
|
|
8
|
+
- Emit deterministic payout manifests and per-provider batch files.
|
|
9
|
+
- Persist idempotency state so reruns do not double-settle the same gate.
|
|
10
|
+
- Optionally execute payouts (`--execute-circle`) with retry-safe batch state.
|
|
11
|
+
|
|
12
|
+
By default it remains artifact-driven (manifest-only) and does not call external payout rails.
|
|
13
|
+
|
|
14
|
+
## Inputs
|
|
15
|
+
|
|
16
|
+
1. Artifact root with run directories (default `artifacts/mcp-paid-exa`).
|
|
17
|
+
2. Provider payout registry (`X402ProviderPayoutRegistry.v1`).
|
|
18
|
+
3. Worker state file (`X402BatchWorkerState.v1`).
|
|
19
|
+
|
|
20
|
+
Registry example: `docs/examples/x402-provider-payout-registry.example.json`
|
|
21
|
+
|
|
22
|
+
## Run
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
npm run settlement:x402:batch -- \
|
|
26
|
+
--artifact-root artifacts/mcp-paid-exa \
|
|
27
|
+
--registry docs/examples/x402-provider-payout-registry.example.json
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Dry run (no state mutation):
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
npm run settlement:x402:batch -- \
|
|
34
|
+
--artifact-root artifacts/mcp-paid-exa \
|
|
35
|
+
--registry docs/examples/x402-provider-payout-registry.example.json \
|
|
36
|
+
--dry-run
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Execute payouts in stub mode (safe local flow):
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
npm run settlement:x402:batch -- \
|
|
43
|
+
--artifact-root artifacts/mcp-paid-exa \
|
|
44
|
+
--registry docs/examples/x402-provider-payout-registry.example.json \
|
|
45
|
+
--execute-circle \
|
|
46
|
+
--circle-mode stub
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Execute payouts in Circle sandbox mode:
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
npm run settlement:x402:batch -- \
|
|
53
|
+
--artifact-root artifacts/mcp-paid-exa \
|
|
54
|
+
--registry docs/examples/x402-provider-payout-registry.example.json \
|
|
55
|
+
--execute-circle \
|
|
56
|
+
--circle-mode sandbox
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Outputs
|
|
60
|
+
|
|
61
|
+
Each run writes:
|
|
62
|
+
|
|
63
|
+
- `payout-manifest.json`
|
|
64
|
+
- `payout-manifest.meta.json` (`manifestHash` + optional signature)
|
|
65
|
+
- `payout-reconciliation.json` (batch totals recomputation + gate/receipt linkage + drift check)
|
|
66
|
+
- `batches/<batchId>.json` for each provider batch
|
|
67
|
+
|
|
68
|
+
Default output root:
|
|
69
|
+
|
|
70
|
+
`artifacts/settlement/x402-batches/<timestamp>/`
|
|
71
|
+
|
|
72
|
+
## Idempotency
|
|
73
|
+
|
|
74
|
+
State file tracks processed gates by `gateId` and persisted batch payout status:
|
|
75
|
+
|
|
76
|
+
- first run: eligible released gates are batched and recorded
|
|
77
|
+
- subsequent runs: previously processed gates are skipped for new batch creation
|
|
78
|
+
- when `--execute-circle` is enabled:
|
|
79
|
+
- `submitted` batches are not re-submitted
|
|
80
|
+
- `failed` batches are retried until `maxAttempts` is reached
|
|
81
|
+
|
|
82
|
+
`--dry-run` always skips payout execution even when `--execute-circle` is provided.
|
|
83
|
+
|
|
84
|
+
State path default:
|
|
85
|
+
|
|
86
|
+
`artifacts/settlement/x402-batch-state.json`
|
|
87
|
+
|
|
88
|
+
## Circle execution env
|
|
89
|
+
|
|
90
|
+
Required when `--execute-circle --circle-mode sandbox|production`:
|
|
91
|
+
|
|
92
|
+
- `CIRCLE_API_KEY`
|
|
93
|
+
- `CIRCLE_WALLET_ID_SPEND`
|
|
94
|
+
- `CIRCLE_TOKEN_ID_USDC`
|
|
95
|
+
- `ENTITY_SECRET` (or `CIRCLE_ENTITY_SECRET_HEX`) preferred
|
|
96
|
+
- `CIRCLE_ENTITY_SECRET_CIPHERTEXT_TEMPLATE`
|
|
97
|
+
- or `CIRCLE_ENTITY_SECRET_CIPHERTEXT` with `CIRCLE_ALLOW_STATIC_ENTITY_SECRET=1`
|
|
98
|
+
|
|
99
|
+
Optional:
|
|
100
|
+
|
|
101
|
+
- `CIRCLE_BASE_URL`
|
|
102
|
+
- `CIRCLE_BLOCKCHAIN`
|
|
103
|
+
- `CIRCLE_FEE_LEVEL` (default `MEDIUM`)
|
|
104
|
+
- `CIRCLE_TIMEOUT_MS`
|
|
105
|
+
|
|
106
|
+
## Demo integration
|
|
107
|
+
|
|
108
|
+
`scripts/demo/mcp-paid-exa.mjs` can run this worker automatically after a successful paid-tool call:
|
|
109
|
+
|
|
110
|
+
- `SETTLD_DEMO_RUN_BATCH_SETTLEMENT=1`
|
|
111
|
+
- `SETTLD_DEMO_BATCH_PROVIDER_WALLET_ID=<walletId>` (required for sandbox/production if `CIRCLE_WALLET_ID_ESCROW` is not set)
|
|
112
|
+
|
|
113
|
+
The demo writes:
|
|
114
|
+
|
|
115
|
+
- `batch-payout-registry.json`
|
|
116
|
+
- `batch-worker-state.json`
|
|
117
|
+
- `batch-settlement.json`
|
|
118
|
+
|
|
119
|
+
## Optional manifest signing
|
|
120
|
+
|
|
121
|
+
Set both env vars:
|
|
122
|
+
|
|
123
|
+
- `SETTLD_BATCH_SIGNER_PUBLIC_KEY_PEM`
|
|
124
|
+
- `SETTLD_BATCH_SIGNER_PRIVATE_KEY_PEM`
|
|
125
|
+
|
|
126
|
+
If present, the worker adds an Ed25519 signature to `payout-manifest.meta.json`.
|