settld 0.1.2 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +93 -3
- package/SETTLD_VERSION +1 -1
- package/bin/settld-mcp +2 -0
- package/bin/settld.js +71 -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 +152 -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 +377 -0
- package/docs/QUICKSTART_MCP_HOSTS.md +210 -0
- package/docs/QUICKSTART_POLICY_PACKS.md +65 -0
- package/docs/QUICKSTART_PRODUCE.md +61 -0
- package/docs/QUICKSTART_PROFILES.md +198 -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 +33 -0
- package/docs/RELEASE_CHECKLIST.md +182 -0
- package/docs/RELEASING.md +82 -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 +131 -0
- package/docs/SUMMARY.md +17 -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 +64 -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 +103 -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 +15 -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/PUBLIC_QUICKSTART.md +95 -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/DISPUTE_FINANCE_RECONCILIATION_PACKET.md +56 -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 +69 -0
- package/docs/ops/LIGHTHOUSE_PRODUCTION_CLOSE.md +51 -0
- package/docs/ops/MCP_COMPATIBILITY_MATRIX.md +30 -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 +140 -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 +60 -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/plans/2026-02-20-trust-os-v1-jira-backlog.md +348 -0
- package/docs/plans/2026-02-21-agent-economic-actor-operating-model.md +169 -0
- package/docs/plans/2026-02-21-trust-os-v1-strategy.md +241 -0
- package/docs/research/2026-02-21-agent-spend-host-landscape.md +57 -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/ArbitrationOutcomeMapping.v1.md +62 -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/DisputeCaseLifecycle.v1.md +51 -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/OperatorAction.v1.md +90 -0
- package/docs/spec/PRODUCER_ERRORS.md +42 -0
- package/docs/spec/PolicyDecision.v1.md +83 -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 +109 -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 +53 -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/OperatorAction.v1.schema.json +113 -0
- package/docs/spec/schemas/PolicyDecision.v1.schema.json +74 -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 +149 -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 +35 -0
- package/docs/templates/buyer-email.txt +18 -0
- package/docs/templates/buyer-one-pager.md +24 -0
- package/package.json +53 -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 +304 -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 +318 -0
- package/scripts/ci/run-10x-throughput-incident-rehearsal.mjs +368 -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-cert-matrix.mjs +201 -0
- package/scripts/ci/run-mcp-host-smoke.mjs +473 -0
- package/scripts/ci/run-offline-verification-parity-gate.mjs +762 -0
- package/scripts/ci/run-onboarding-host-success-gate.mjs +516 -0
- package/scripts/ci/run-onboarding-policy-slo-gate.mjs +537 -0
- package/scripts/ci/run-production-cutover-gate.mjs +540 -0
- package/scripts/ci/run-public-openclaw-npx-smoke.mjs +148 -0
- package/scripts/ci/run-release-promotion-guard.mjs +756 -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/doctor/mcp-host.mjs +120 -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 +1511 -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/dispute-finance-reconciliation-packet.mjs +313 -0
- package/scripts/ops/hosted-baseline-evidence.mjs +890 -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/ops/run-x402-hitl-smoke.mjs +607 -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/policy/cli.mjs +600 -0
- package/scripts/profile/cli.mjs +1324 -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/register-entity-secret.mjs +102 -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/setup/circle-bootstrap.mjs +310 -0
- package/scripts/setup/host-config.mjs +617 -0
- package/scripts/setup/onboard.mjs +1337 -0
- package/scripts/setup/openclaw-onboard.mjs +423 -0
- package/scripts/setup/wizard.mjs +986 -0
- package/scripts/slo/check.mjs +239 -0
- package/scripts/smoke/k8s-smoke.mjs +214 -0
- package/scripts/spec/generate-protocol-vectors.mjs +1019 -0
- package/scripts/test/check-no-generated-artifacts.sh +12 -0
- package/scripts/test/run.sh +59 -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 +1058 -0
- package/src/api/app.js +34658 -16940
- package/src/api/maintenance.js +70 -0
- package/src/api/middleware/trust-kernel.js +114 -0
- package/src/api/openapi.js +1778 -70
- package/src/api/persistence.js +456 -0
- package/src/api/server.js +81 -5
- package/src/api/store.js +1581 -62
- 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 +231 -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/event-policy.js +21 -2
- package/src/core/maintenance-locks.js +1 -0
- package/src/core/operator-action.js +303 -0
- package/src/core/paid-tool-manifest.js +318 -0
- package/src/core/policy-decision.js +322 -0
- package/src/core/policy-packs.js +207 -0
- package/src/core/profile-fingerprint.js +27 -0
- package/src/core/profile-simulation-reasons.js +84 -0
- package/src/core/profile-templates.js +242 -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 +239 -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/wallet-assignment-resolver.js +129 -0
- package/src/core/wallet-provider-bootstrap.js +365 -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 +1508 -111
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,131 @@
|
|
|
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
|
+
## SLO-4: Onboarding first-paid-call runtime (host readiness)
|
|
66
|
+
|
|
67
|
+
**Objective**
|
|
68
|
+
|
|
69
|
+
- Across supported hosts in the compatibility matrix, first-paid-call runtime remains within a deterministic p95 bound.
|
|
70
|
+
|
|
71
|
+
**Metric**
|
|
72
|
+
|
|
73
|
+
- `onboarding_first_paid_call_runtime_ms_p95_gauge` (fallbacks supported by gate script: `first_paid_call_runtime_ms_p95_gauge`, `first_paid_call_latency_ms_p95_gauge`)
|
|
74
|
+
|
|
75
|
+
**Threshold**
|
|
76
|
+
|
|
77
|
+
- `p95 <= 2000ms` (default; configurable via `SLO_ONBOARDING_FIRST_PAID_CALL_P95_MAX_MS`)
|
|
78
|
+
|
|
79
|
+
## SLO-5: Policy decision runtime (latency + errors)
|
|
80
|
+
|
|
81
|
+
**Objective**
|
|
82
|
+
|
|
83
|
+
- Policy decision runtime stays fast and low-error on readiness runs.
|
|
84
|
+
|
|
85
|
+
**Metrics**
|
|
86
|
+
|
|
87
|
+
- `policy_decision_latency_ms_p95_gauge` (fallbacks supported by gate script)
|
|
88
|
+
- policy decision totals and error totals (`policy_decisions_total` + `outcome=error`, with supported fallbacks)
|
|
89
|
+
|
|
90
|
+
**Thresholds**
|
|
91
|
+
|
|
92
|
+
- `policy decision p95 <= 250ms` (default; configurable via `SLO_POLICY_DECISION_LATENCY_P95_MAX_MS`)
|
|
93
|
+
- `policy decision error rate <= 1%` (default; configurable via `SLO_POLICY_DECISION_ERROR_RATE_MAX_PCT`)
|
|
94
|
+
|
|
95
|
+
## SLO-6: Host onboarding success rate (clean environment)
|
|
96
|
+
|
|
97
|
+
**Objective**
|
|
98
|
+
|
|
99
|
+
- Supported hosts must pass deterministic `settld setup --preflight-only` onboarding checks at or above a configured success rate under isolated HOME paths.
|
|
100
|
+
|
|
101
|
+
**Metrics**
|
|
102
|
+
|
|
103
|
+
- `onboarding_host_setup_attempts_total_gauge{host=...}`
|
|
104
|
+
- `onboarding_host_setup_success_total_gauge{host=...}`
|
|
105
|
+
- `onboarding_host_setup_failure_total_gauge{host=...}`
|
|
106
|
+
- `onboarding_host_setup_success_rate_pct_gauge{host=...}`
|
|
107
|
+
|
|
108
|
+
**Threshold**
|
|
109
|
+
|
|
110
|
+
- Per-host success rate must be `>= 90%` by default (configurable with `ONBOARDING_HOST_SUCCESS_RATE_MIN_PCT`).
|
|
111
|
+
|
|
112
|
+
**Why**
|
|
113
|
+
|
|
114
|
+
Preflight success under clean homes verifies host bootstrap reliability and catches host-specific config drift before production cutover.
|
|
115
|
+
|
|
116
|
+
## CI enforcement
|
|
117
|
+
|
|
118
|
+
- Script: `scripts/slo/check.mjs`
|
|
119
|
+
- Source of truth: `/metrics` snapshot taken after the smoke lifecycle completes.
|
|
120
|
+
- Thresholds are configurable via env (see script header).
|
|
121
|
+
- Onboarding/policy readiness gate: `scripts/ci/run-onboarding-policy-slo-gate.mjs`
|
|
122
|
+
- Host matrix input: `artifacts/ops/mcp-host-cert-matrix.json`
|
|
123
|
+
- Output artifact: `artifacts/gates/onboarding-policy-slo-gate.json`
|
|
124
|
+
- Onboarding host success gate: `scripts/ci/run-onboarding-host-success-gate.mjs`
|
|
125
|
+
- Output artifact: `artifacts/gates/onboarding-host-success-gate.json`
|
|
126
|
+
- Metrics output directory: `artifacts/ops/onboarding-host-success/`
|
|
127
|
+
- Deterministic binding: onboarding gates emit `artifactHashScope` + `artifactHash` over canonical report core.
|
|
128
|
+
- Gates are fail-closed when required host checks/metrics are missing or thresholds are breached.
|
|
129
|
+
- CI wiring:
|
|
130
|
+
- `tests / onboarding_policy_slo_gate` generates matrix + metrics snapshot and runs the onboarding gate.
|
|
131
|
+
- `tests / onboarding_host_success_gate` runs clean-home preflight onboarding checks per supported host and emits host metrics artifacts.
|
package/docs/SUMMARY.md
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Summary
|
|
2
|
+
|
|
3
|
+
- [Settld Documentation](README.md)
|
|
4
|
+
- [Docs Home](gitbook/README.md)
|
|
5
|
+
- [Quickstart](gitbook/quickstart.md)
|
|
6
|
+
- [Quickstart: Profiles CLI](QUICKSTART_PROFILES.md)
|
|
7
|
+
- [Core Primitives](gitbook/core-primitives.md)
|
|
8
|
+
- [API Reference](gitbook/api-reference.md)
|
|
9
|
+
- [Conformance](gitbook/conformance.md)
|
|
10
|
+
- [Closepacks](gitbook/closepacks.md)
|
|
11
|
+
- [Guides](gitbook/guides.md)
|
|
12
|
+
- [Dispute Lifecycle](gitbook/dispute-lifecycle.md)
|
|
13
|
+
- [Replay and Audit](gitbook/replay-and-audit.md)
|
|
14
|
+
- [SDK Reference](gitbook/sdk-reference.md)
|
|
15
|
+
- [Operations Runbook](gitbook/operations-runbook.md)
|
|
16
|
+
- [Security Model](gitbook/security-model.md)
|
|
17
|
+
- [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`.
|