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
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Event Envelope & Black Box Rules (v0.2)
|
|
2
|
+
|
|
3
|
+
Settld’s “black box” is an append-only, hash-chained event stream. The API rejects events that fail envelope, causality, or signer-policy validation.
|
|
4
|
+
|
|
5
|
+
## Envelope
|
|
6
|
+
|
|
7
|
+
Each stored event uses this shape:
|
|
8
|
+
|
|
9
|
+
- `v`: envelope version (currently `1`)
|
|
10
|
+
- `id`: event id (`evt_...`)
|
|
11
|
+
- `at`: ISO-8601 timestamp
|
|
12
|
+
- `streamId`: aggregate stream id (e.g. a job id)
|
|
13
|
+
- `type`: event type (e.g. `BOOKED`, `EN_ROUTE`)
|
|
14
|
+
- `actor`: `{ type, id }` (who initiated the action)
|
|
15
|
+
- `payload`: JSON payload (nullable)
|
|
16
|
+
- `payloadHash`: `sha256(canonical(eventPayload))`
|
|
17
|
+
- `prevChainHash`: previous event’s `chainHash` (or `null` for genesis)
|
|
18
|
+
- `chainHash`: `sha256(canonical(chainLink))`
|
|
19
|
+
- `signature`: base64 Ed25519 signature (nullable)
|
|
20
|
+
- `signerKeyId`: key id of the signer (nullable)
|
|
21
|
+
|
|
22
|
+
## Canonical hashing
|
|
23
|
+
|
|
24
|
+
Canonical JSON rules (implemented in `src/core/canonical-json.js`):
|
|
25
|
+
|
|
26
|
+
- Object keys are sorted deterministically.
|
|
27
|
+
- No `undefined`, non-finite numbers, or `-0`.
|
|
28
|
+
- Only JSON values (plain objects/arrays/strings/numbers/booleans/null).
|
|
29
|
+
|
|
30
|
+
Hashes:
|
|
31
|
+
|
|
32
|
+
- `payloadHash = sha256( canonicalJson({ v, id, at, streamId, type, actor, payload }) )`
|
|
33
|
+
- `chainHash = sha256( canonicalJson({ v, prevChainHash, payloadHash }) )`
|
|
34
|
+
|
|
35
|
+
Signatures:
|
|
36
|
+
|
|
37
|
+
- `signature = Ed25519.sign(payloadHash)`
|
|
38
|
+
- Verification uses the signer’s public key looked up by `signerKeyId`.
|
|
39
|
+
|
|
40
|
+
## Append-time acceptance rules
|
|
41
|
+
|
|
42
|
+
The server rejects an append if any of the following are true:
|
|
43
|
+
|
|
44
|
+
- The envelope is missing required fields for the append mode (draft vs finalized).
|
|
45
|
+
- `prevChainHash` does not match the current stream head (optimistic concurrency).
|
|
46
|
+
- The hash chain or signature verification fails.
|
|
47
|
+
- The event violates signature policy (who must sign what).
|
|
48
|
+
- The event would cause an illegal job state transition.
|
|
49
|
+
|
|
50
|
+
## Concurrency & idempotency
|
|
51
|
+
|
|
52
|
+
- **Optimistic concurrency**: draft events must include `x-proxy-expected-prev-chain-hash`, and the server returns `409` on mismatch.
|
|
53
|
+
- **Idempotency**: mutation endpoints accept `x-idempotency-key`; replays return the original response (and don’t append twice).
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# FinancePackBundle.v1 Format (Finance-Grade)
|
|
2
|
+
|
|
3
|
+
This document defines the on-disk format for `FinancePackBundle.v1` and its strict-verification invariants.
|
|
4
|
+
|
|
5
|
+
## Directory Layout
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
settld.json
|
|
9
|
+
manifest.json
|
|
10
|
+
attestation/bundle_head_attestation.json
|
|
11
|
+
month/...
|
|
12
|
+
finance/...
|
|
13
|
+
verify/verification_report.json
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Notes:
|
|
17
|
+
- `month/` is a full embedded `MonthProofBundle.v1` directory tree.
|
|
18
|
+
- `attestation/bundle_head_attestation.json` is a signed `BundleHeadAttestation.v1` committing to the FinancePack manifestHash and MonthProof anchor.
|
|
19
|
+
- `verify/verification_report.json` is a signed, machine-ingestible `VerificationReport.v1`.
|
|
20
|
+
|
|
21
|
+
## `manifest.json` (FinancePackBundleManifest.v1)
|
|
22
|
+
|
|
23
|
+
`manifest.json` includes:
|
|
24
|
+
- `files[]`: sha256 hashes for the **non-verify** bundle files
|
|
25
|
+
- `manifestHash`: sha256 over canonical JSON of the manifest object **excluding** `manifestHash`
|
|
26
|
+
|
|
27
|
+
### Hashing Contract (`hashing.schemaVersion = FinancePackBundleManifestHash.v1`)
|
|
28
|
+
|
|
29
|
+
- `fileOrder = path_asc`
|
|
30
|
+
- `excludes = ["verify/**"]` (all `verify/*` derived outputs are intentionally excluded)
|
|
31
|
+
|
|
32
|
+
Rationale: `VerificationReport.v1` needs to refer to `manifestHash`, so including `verify/*` in the manifest would create circular hashing.
|
|
33
|
+
|
|
34
|
+
## `verify/verification_report.json` (VerificationReport.v1)
|
|
35
|
+
|
|
36
|
+
`VerificationReport.v1` is canonical JSON with:
|
|
37
|
+
- `tool`: identifies the generator/verifier version for auditability
|
|
38
|
+
- `signer`: provenance for the report signer (including governance event ref when available)
|
|
39
|
+
- `subject.manifestHash`: must equal the bundle `manifestHash`
|
|
40
|
+
- `reportHash`: sha256 over canonical JSON of the report core (excluding signature fields)
|
|
41
|
+
- `signature`: Ed25519 signature over `reportHash`
|
|
42
|
+
|
|
43
|
+
Strict verification requires the report to be present **and signed**.
|
|
44
|
+
|
|
45
|
+
If the tool version cannot be determined, the report will include a warning code `TOOL_VERSION_UNKNOWN`.
|
|
46
|
+
|
|
47
|
+
## Strict Verification Invariants
|
|
48
|
+
|
|
49
|
+
In strict mode (`settld-verify --strict --finance-pack ...`):
|
|
50
|
+
- The embedded `MonthProofBundle.v1` must strictly verify.
|
|
51
|
+
- `attestation/bundle_head_attestation.json` must exist and have a valid signature.
|
|
52
|
+
- `verify/verification_report.json` must exist, have a valid `reportHash`, and have a valid signature.
|
|
53
|
+
- `VerificationReport.v1.subject.manifestHash` must match the computed bundle `manifestHash`.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Incident Taxonomy (v0.4)
|
|
2
|
+
|
|
3
|
+
Incidents are classified events that anchor evidence and claims workflows.
|
|
4
|
+
|
|
5
|
+
## Types (enforced)
|
|
6
|
+
|
|
7
|
+
Defined in `src/core/incidents.js`:
|
|
8
|
+
|
|
9
|
+
- `DAMAGE_PROPERTY`
|
|
10
|
+
- `PRIVACY_VIOLATION`
|
|
11
|
+
- `SAFETY_NEAR_MISS`
|
|
12
|
+
- `FAILURE_TO_COMPLETE`
|
|
13
|
+
- `ACCESS_FAILURE`
|
|
14
|
+
- `THEFT_ALLEGATION`
|
|
15
|
+
- `ROBOT_STUCK`
|
|
16
|
+
- `UNEXPECTED_HUMAN_CONTACT`
|
|
17
|
+
|
|
18
|
+
## Severity (enforced)
|
|
19
|
+
|
|
20
|
+
Integer scale `1..5`:
|
|
21
|
+
|
|
22
|
+
- `1` — minor anomaly / near-miss
|
|
23
|
+
- `3` — material anomaly; evidence likely required
|
|
24
|
+
- `5` — severe safety/property risk
|
|
25
|
+
|
|
26
|
+
## Event linkage
|
|
27
|
+
|
|
28
|
+
- Incidents are created by `INCIDENT_DETECTED` (robot) or `INCIDENT_REPORTED` (operator or server-on-behalf-of-customer).
|
|
29
|
+
- Evidence (`EVIDENCE_CAPTURED`) must reference an existing `incidentId`.
|
|
30
|
+
- Claims (`CLAIM_OPENED`) must reference an existing `incidentId`.
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# Job State Machine (v0.6)
|
|
2
|
+
|
|
3
|
+
Jobs are explicit workflows. Every transition emits an event; the event log is replayable.
|
|
4
|
+
|
|
5
|
+
## States
|
|
6
|
+
|
|
7
|
+
- `CREATED`
|
|
8
|
+
- `QUOTED`
|
|
9
|
+
- `BOOKED`
|
|
10
|
+
- `MATCHED`
|
|
11
|
+
- `RESERVED`
|
|
12
|
+
- `EN_ROUTE`
|
|
13
|
+
- `ACCESS_GRANTED`
|
|
14
|
+
- `EXECUTING`
|
|
15
|
+
- `ASSISTED` (sub-state during execution)
|
|
16
|
+
- `STALLED` (execution liveness failure)
|
|
17
|
+
- `ABORTING_SAFE_EXIT` (forced by access revoke/expiry)
|
|
18
|
+
- `COMPLETED`
|
|
19
|
+
- `ABORTED`
|
|
20
|
+
- `SETTLED`
|
|
21
|
+
|
|
22
|
+
## Terminality
|
|
23
|
+
|
|
24
|
+
- Terminal execution: `COMPLETED` or `ABORTED`
|
|
25
|
+
- Terminal financial: `SETTLED`
|
|
26
|
+
|
|
27
|
+
## Diagram (simplified)
|
|
28
|
+
|
|
29
|
+
```mermaid
|
|
30
|
+
stateDiagram-v2
|
|
31
|
+
[*] --> CREATED
|
|
32
|
+
CREATED --> QUOTED
|
|
33
|
+
QUOTED --> BOOKED
|
|
34
|
+
BOOKED --> MATCHED
|
|
35
|
+
MATCHED --> RESERVED
|
|
36
|
+
RESERVED --> EN_ROUTE
|
|
37
|
+
EN_ROUTE --> ACCESS_GRANTED
|
|
38
|
+
ACCESS_GRANTED --> EXECUTING
|
|
39
|
+
|
|
40
|
+
EXECUTING --> ASSISTED
|
|
41
|
+
ASSISTED --> EXECUTING
|
|
42
|
+
|
|
43
|
+
EXECUTING --> STALLED
|
|
44
|
+
ASSISTED --> STALLED
|
|
45
|
+
STALLED --> EXECUTING
|
|
46
|
+
|
|
47
|
+
EXECUTING --> ABORTING_SAFE_EXIT
|
|
48
|
+
ASSISTED --> ABORTING_SAFE_EXIT
|
|
49
|
+
STALLED --> ABORTING_SAFE_EXIT
|
|
50
|
+
ABORTING_SAFE_EXIT --> ABORTED
|
|
51
|
+
|
|
52
|
+
EXECUTING --> COMPLETED
|
|
53
|
+
EXECUTING --> ABORTED
|
|
54
|
+
|
|
55
|
+
COMPLETED --> SETTLED
|
|
56
|
+
ABORTED --> SETTLED
|
|
57
|
+
|
|
58
|
+
SETTLED --> [*]
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Policy hooks
|
|
62
|
+
|
|
63
|
+
- Access revocation at any time → agent must transition to safe exit behavior (recorded as events).
|
|
64
|
+
- Missing heartbeats → server appends `JOB_EXECUTION_STALLED` and escalates per tier/coverage policy.
|
|
65
|
+
- Jobs can be rescheduled via `JOB_RESCHEDULED`, which resets dispatch and clears access planning.
|
|
66
|
+
- Incidents/claims can occur in parallel; they do not necessarily change the main job status (modeled as parallel tracks in the event log).
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Kernel Compatible Policy (v0)
|
|
2
|
+
|
|
3
|
+
This policy defines when a capability implementation can be listed as "Kernel Compatible".
|
|
4
|
+
|
|
5
|
+
## Eligibility Requirements
|
|
6
|
+
|
|
7
|
+
A capability must satisfy all three checks:
|
|
8
|
+
|
|
9
|
+
1. Kernel conformance passes for supported flow(s).
|
|
10
|
+
2. Closepack export verifies offline.
|
|
11
|
+
3. At least one deterministic verifier case passes.
|
|
12
|
+
|
|
13
|
+
Required commands (or equivalent CI jobs):
|
|
14
|
+
|
|
15
|
+
```sh
|
|
16
|
+
./bin/settld.js conformance kernel --ops-token tok_ops
|
|
17
|
+
./bin/settld.js closepack export --agreement-hash <sha256> --out /tmp/<agreementHash>.zip --ops-token tok_ops
|
|
18
|
+
./bin/settld.js closepack verify /tmp/<agreementHash>.zip
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Listing Contract
|
|
22
|
+
|
|
23
|
+
Each listed capability entry must provide:
|
|
24
|
+
|
|
25
|
+
- `id` (stable identifier)
|
|
26
|
+
- `name`
|
|
27
|
+
- `repoPath` (or external repository URL)
|
|
28
|
+
- `deterministicVerifierRef`
|
|
29
|
+
- `conformanceCaseIds` (array)
|
|
30
|
+
- `closepackVerified` (boolean)
|
|
31
|
+
- `lastVerifiedAt` (ISO timestamp)
|
|
32
|
+
|
|
33
|
+
Canonical listing file:
|
|
34
|
+
|
|
35
|
+
- `docs/kernel-compatible/capabilities.json`
|
|
36
|
+
|
|
37
|
+
Hosted/static mirror:
|
|
38
|
+
|
|
39
|
+
- `dashboard/public/kernel-compatible/capabilities.json`
|
|
40
|
+
|
|
41
|
+
## Badge Rules
|
|
42
|
+
|
|
43
|
+
- Badge text: `Kernel Compatible (v0)`
|
|
44
|
+
- Badge can be shown only while latest verification is passing.
|
|
45
|
+
- Badge must be removed within 24h if conformance or closepack verification regresses.
|
|
46
|
+
|
|
47
|
+
## Revocation Conditions
|
|
48
|
+
|
|
49
|
+
Listing is revoked when:
|
|
50
|
+
|
|
51
|
+
- conformance fails on latest stable release,
|
|
52
|
+
- closepack verify returns `ok=false`,
|
|
53
|
+
- deterministic verifier case is removed or fails repeatedly,
|
|
54
|
+
- artifact-chain replay mismatches are unresolved.
|
|
55
|
+
|
|
56
|
+
## Submission Flow (No Meeting Required)
|
|
57
|
+
|
|
58
|
+
1. Open a PR updating `docs/kernel-compatible/capabilities.json`.
|
|
59
|
+
2. Include machine-readable evidence paths or CI links for conformance and closepack verify.
|
|
60
|
+
3. Maintainer verifies evidence and merges if checks pass.
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Kernel v0
|
|
2
|
+
|
|
3
|
+
Kernel v0 is the protocol/control-plane surface for payable capability calls:
|
|
4
|
+
|
|
5
|
+
`agreement -> hold -> evidence -> decision -> receipt -> dispute -> verdict -> adjustment`
|
|
6
|
+
|
|
7
|
+
This page is the public contract for what is enforced now vs what is explicitly out of scope.
|
|
8
|
+
|
|
9
|
+
## Enforced In Kernel v0
|
|
10
|
+
|
|
11
|
+
- Deterministic IDs and idempotency on core financial artifacts (holdback adjustment IDs, dispute envelopes, replay artifacts).
|
|
12
|
+
- Tool-call holdback maintenance race hardening (open arbitration cases block auto-release).
|
|
13
|
+
- Signed dispute-open envelope for party-initiated disputes (`DisputeOpenEnvelope.v1`).
|
|
14
|
+
- Deterministic holdback adjustment issuance on verdict (`holdback_release` or `holdback_refund`).
|
|
15
|
+
- Replay evaluate and closepack export/verify for independent verification.
|
|
16
|
+
- `SettlementDecisionRecord.v2` emission default, with `policyHashUsed` and policy normalization pinning.
|
|
17
|
+
- Append-only `ReputationEvent.v1` facts with windowed query support (`/ops/reputation/facts`).
|
|
18
|
+
|
|
19
|
+
## Explicitly Not Enforced Yet
|
|
20
|
+
|
|
21
|
+
- Public money-rail GA behavior (chargebacks/refunds/KYB lifecycle) for all tenants.
|
|
22
|
+
- Hosted marketplace ranking policies on top of reputation facts.
|
|
23
|
+
- Universal deterministic verifier coverage across all capability types.
|
|
24
|
+
- Hosted click-to-try playground SLOs for untrusted anonymous traffic.
|
|
25
|
+
|
|
26
|
+
## Verification Entry Points
|
|
27
|
+
|
|
28
|
+
- Kernel conformance:
|
|
29
|
+
- `./bin/settld.js conformance kernel --ops-token tok_ops`
|
|
30
|
+
- Closepack export and offline verify:
|
|
31
|
+
- `./bin/settld.js closepack export --agreement-hash <sha256> --out /tmp/<agreementHash>.zip --ops-token tok_ops`
|
|
32
|
+
- `./bin/settld.js closepack verify /tmp/<agreementHash>.zip`
|
|
33
|
+
- Tool-call replay evaluate:
|
|
34
|
+
- `GET /ops/tool-calls/replay-evaluate?agreementHash=<sha256>`
|
|
35
|
+
|
|
36
|
+
## Stability Policy
|
|
37
|
+
|
|
38
|
+
- Kernel v0 aims for additive protocol evolution.
|
|
39
|
+
- Existing object versions remain verifiable (no flag day replacement of historical artifacts).
|
|
40
|
+
- New replay-critical requirements ship in versioned objects (for example, `SettlementDecisionRecord.v2`).
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# SettldPay Key Rotation Runbook
|
|
2
|
+
|
|
3
|
+
This runbook covers rotation for the SettldPay Ed25519 signing key used by:
|
|
4
|
+
|
|
5
|
+
- `POST /x402/gate/authorize-payment` token minting
|
|
6
|
+
- `GET /.well-known/settld-keys.json` public key discovery
|
|
7
|
+
|
|
8
|
+
## Current model
|
|
9
|
+
|
|
10
|
+
- Tokens include `kid` and are signed with the active server signer key.
|
|
11
|
+
- Verifiers resolve keys via `/.well-known/settld-keys.json`.
|
|
12
|
+
- For file-backed deployments (`STORE=memory` with `PROXY_DATA_DIR`), key material is persisted in:
|
|
13
|
+
- `${PROXY_DATA_DIR}/server-signer.json` (active signer compatibility file)
|
|
14
|
+
- `${PROXY_DATA_DIR}/settld-pay-keyset-store.json` (active + previous key history)
|
|
15
|
+
- API supports published fallback keys via:
|
|
16
|
+
- `SETTLD_PAY_FALLBACK_KEYS` (JSON array of `{ keyId?, publicKeyPem }`)
|
|
17
|
+
- `SETTLD_PAY_FALLBACK_PUBLIC_KEY_PEM`
|
|
18
|
+
- `SETTLD_PAY_FALLBACK_KEY_ID`
|
|
19
|
+
|
|
20
|
+
## Automated rotation command
|
|
21
|
+
|
|
22
|
+
Run:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
npm run keys:rotate -- --data-dir ./data --report artifacts/key-rotation/rotation-report.json --keep-previous 3
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
What it does:
|
|
29
|
+
|
|
30
|
+
1. Generates a new Ed25519 keypair.
|
|
31
|
+
2. Promotes it to active signer.
|
|
32
|
+
3. Moves the prior active key into `previous[]` (published fallback set).
|
|
33
|
+
4. Updates both key files in `--data-dir`.
|
|
34
|
+
5. Prints:
|
|
35
|
+
- new active `kid`
|
|
36
|
+
- active JWKS entry
|
|
37
|
+
- provider notification snippet text
|
|
38
|
+
6. Optionally writes a rotation report JSON artifact (`--report`).
|
|
39
|
+
|
|
40
|
+
## Planned rotation (normal)
|
|
41
|
+
|
|
42
|
+
1. Run `npm run keys:rotate ...` (or equivalent process in your deployment pipeline).
|
|
43
|
+
2. Deploy signer with new private key (but do not remove old key yet).
|
|
44
|
+
3. Publish keyset including both:
|
|
45
|
+
- new active key
|
|
46
|
+
- previous key as fallback
|
|
47
|
+
4. Switch signing to the new key.
|
|
48
|
+
5. Keep old key published for at least:
|
|
49
|
+
- `max token TTL` (default 5m), plus
|
|
50
|
+
- cache margin for well-known keyset refresh (recommend >=24h for external verifiers).
|
|
51
|
+
6. After the overlap window, remove old key from fallback list.
|
|
52
|
+
|
|
53
|
+
## Emergency rotation (key compromise)
|
|
54
|
+
|
|
55
|
+
1. Stop signing with the compromised key immediately.
|
|
56
|
+
2. Switch signer to a new keypair.
|
|
57
|
+
3. Publish a refreshed keyset with the compromised key removed from active use.
|
|
58
|
+
4. Notify providers/operators to refresh keyset immediately.
|
|
59
|
+
5. Review recent `authorize-payment` and verify flows for suspicious token use.
|
|
60
|
+
|
|
61
|
+
## Verification checks
|
|
62
|
+
|
|
63
|
+
Before/after rotation, run:
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
node --test test/settld-pay-token.test.js
|
|
67
|
+
node --test test/api-e2e-x402-authorize-payment.test.js
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
And manually confirm:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
curl -fsS http://127.0.0.1:3000/.well-known/settld-keys.json
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Response should include:
|
|
77
|
+
|
|
78
|
+
- active `kid`
|
|
79
|
+
- fallback `kid`(s) during overlap
|
|
80
|
+
- `kty=OKP`, `crv=Ed25519`, and `x` set for each key
|
package/docs/LEDGER.md
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# Ledger (v0.4)
|
|
2
|
+
|
|
3
|
+
Settld treats settlement as a double-entry ledger: every journal entry must balance to zero.
|
|
4
|
+
|
|
5
|
+
## Posting sign convention
|
|
6
|
+
|
|
7
|
+
- Positive `amountCents` = debit
|
|
8
|
+
- Negative `amountCents` = credit
|
|
9
|
+
- Every journal entry satisfies `sum(postings.amountCents) === 0`
|
|
10
|
+
|
|
11
|
+
## Chart of accounts (current prototype)
|
|
12
|
+
|
|
13
|
+
Defined in `src/api/store.js`:
|
|
14
|
+
|
|
15
|
+
- `acct_cash` — payment processor clearing cash
|
|
16
|
+
- `acct_customer_escrow` — customer escrow liability
|
|
17
|
+
- `acct_platform_revenue` — platform revenue
|
|
18
|
+
- `acct_owner_payable` — owner payout liability
|
|
19
|
+
- `acct_operator_payable` — operator payout liability
|
|
20
|
+
- `acct_developer_royalty_payable` — developer royalties liability
|
|
21
|
+
- `acct_insurance_reserve` — insurance reserve
|
|
22
|
+
- `acct_claims_expense` — claims expense (prototype)
|
|
23
|
+
- `acct_claims_payable` — claims payable liability
|
|
24
|
+
|
|
25
|
+
## Job lifecycle postings (current)
|
|
26
|
+
|
|
27
|
+
### `BOOKED`
|
|
28
|
+
|
|
29
|
+
Captures funds into escrow (prototype model):
|
|
30
|
+
|
|
31
|
+
- Debit `acct_cash` for `amountCents`
|
|
32
|
+
- Credit `acct_customer_escrow` for `amountCents`
|
|
33
|
+
|
|
34
|
+
### `SETTLED` (job was `COMPLETED`)
|
|
35
|
+
|
|
36
|
+
Moves escrow into revenue + payables + reserve:
|
|
37
|
+
|
|
38
|
+
- Debit `acct_customer_escrow` for `amountCents`
|
|
39
|
+
- Credit:
|
|
40
|
+
- `acct_platform_revenue`
|
|
41
|
+
- `acct_owner_payable`
|
|
42
|
+
- `acct_operator_payable` (only if assist occurred)
|
|
43
|
+
- `acct_developer_royalty_payable` (equals sum of licensed skill fees)
|
|
44
|
+
- `acct_insurance_reserve`
|
|
45
|
+
|
|
46
|
+
Splits are deterministic and integer-cent safe (see `src/core/ledger-postings.js`).
|
|
47
|
+
|
|
48
|
+
### `SETTLED` (job was `ABORTED`)
|
|
49
|
+
|
|
50
|
+
Full refund from escrow:
|
|
51
|
+
|
|
52
|
+
- Debit `acct_customer_escrow` for `amountCents`
|
|
53
|
+
- Credit `acct_cash` for `amountCents`
|
|
54
|
+
|
|
55
|
+
## Claims postings (v0.4)
|
|
56
|
+
|
|
57
|
+
Claims are modeled as their own workflow, but postings stay deterministic and derived from events.
|
|
58
|
+
|
|
59
|
+
### `JOB_ADJUSTED` (claim was approved)
|
|
60
|
+
|
|
61
|
+
Creates a payable for the approved total (payout + refund), and offsets it via:
|
|
62
|
+
|
|
63
|
+
- **Payouts** (`payoutCents`):
|
|
64
|
+
- Debit `acct_claims_expense`
|
|
65
|
+
- Credit `acct_claims_payable`
|
|
66
|
+
- **Refunds** (`refundCents`, completed jobs only):
|
|
67
|
+
- Debit proportional reversals of:
|
|
68
|
+
- `acct_platform_revenue`
|
|
69
|
+
- `acct_owner_payable`
|
|
70
|
+
- `acct_operator_payable` (if assist)
|
|
71
|
+
- `acct_developer_royalty_payable` (if licensed skills)
|
|
72
|
+
- `acct_insurance_reserve`
|
|
73
|
+
- Credit `acct_claims_payable`
|
|
74
|
+
|
|
75
|
+
Refund reversals are computed as a deterministic pro-rata split of the original settlement allocation (see `src/core/ledger-postings.js`).
|
|
76
|
+
|
|
77
|
+
### `CLAIM_PAID`
|
|
78
|
+
|
|
79
|
+
Moves funds out of cash and clears the liability:
|
|
80
|
+
|
|
81
|
+
- Debit `acct_claims_payable` for `amountCents`
|
|
82
|
+
- Credit `acct_cash` for `amountCents`
|
package/docs/LIVENESS.md
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# Execution Liveness (v0.6)
|
|
2
|
+
|
|
3
|
+
Settld treats “job liveness” as an event-sourced contract:
|
|
4
|
+
|
|
5
|
+
- Robots emit signed heartbeats into the job stream.
|
|
6
|
+
- The server detects missing heartbeats and appends a signed `JOB_EXECUTION_STALLED` event (validated at append-time).
|
|
7
|
+
- When heartbeats resume, the server can append `JOB_EXECUTION_RESUMED` to return the job to `EXECUTING`.
|
|
8
|
+
|
|
9
|
+
## Events
|
|
10
|
+
|
|
11
|
+
### `JOB_HEARTBEAT` (robot-signed)
|
|
12
|
+
|
|
13
|
+
Constraints:
|
|
14
|
+
|
|
15
|
+
- Only allowed during `EXECUTING`, `ASSISTED`, `STALLED`, or `ABORTING_SAFE_EXIT`.
|
|
16
|
+
- `payload.t` must equal `event.at` (single source of time).
|
|
17
|
+
- `payload.robotId` must match `event.actor.id`.
|
|
18
|
+
|
|
19
|
+
Payload:
|
|
20
|
+
|
|
21
|
+
```json
|
|
22
|
+
{
|
|
23
|
+
"jobId": "job_123",
|
|
24
|
+
"robotId": "rob_1",
|
|
25
|
+
"t": "2026-01-26T00:00:00.000Z",
|
|
26
|
+
"stage": "TASK",
|
|
27
|
+
"progress": 3,
|
|
28
|
+
"assistRequested": false
|
|
29
|
+
}
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### `JOB_EXECUTION_STALLED` (server-signed)
|
|
33
|
+
|
|
34
|
+
Constraints:
|
|
35
|
+
|
|
36
|
+
- Only allowed during `EXECUTING` or `ASSISTED`.
|
|
37
|
+
- Must be past the tier policy `stallAfterMs` threshold for the projected `lastHeartbeatAt` (append-time enforced).
|
|
38
|
+
- Includes a policy snapshot so stalls are auditable even if defaults evolve later.
|
|
39
|
+
|
|
40
|
+
Payload (reference-only, no media):
|
|
41
|
+
|
|
42
|
+
```json
|
|
43
|
+
{
|
|
44
|
+
"jobId": "job_123",
|
|
45
|
+
"robotId": "rob_1",
|
|
46
|
+
"detectedAt": "2026-01-26T00:05:00.000Z",
|
|
47
|
+
"reason": "NO_HEARTBEAT",
|
|
48
|
+
"lastHeartbeatAt": "2026-01-26T00:01:00.000Z",
|
|
49
|
+
"policy": { "heartbeatIntervalMs": 60000, "stallAfterMs": 180000 }
|
|
50
|
+
}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### `JOB_EXECUTION_RESUMED` (robot- or server-signed)
|
|
54
|
+
|
|
55
|
+
Constraints:
|
|
56
|
+
|
|
57
|
+
- Only allowed from `STALLED`.
|
|
58
|
+
- If server-signed, the server must have observed a post-stall heartbeat (append-time enforced).
|
|
59
|
+
|
|
60
|
+
## Policy
|
|
61
|
+
|
|
62
|
+
The current default policy is tier-driven and deterministic:
|
|
63
|
+
|
|
64
|
+
- `heartbeatIntervalMs` per environment tier
|
|
65
|
+
- `stallAfterMs = 3 * heartbeatIntervalMs`
|
|
66
|
+
|
|
67
|
+
See `src/core/liveness.js`.
|
|
68
|
+
|
|
69
|
+
## Ops hook (“liveness tick”)
|
|
70
|
+
|
|
71
|
+
The server uses an internal tick (`api.tickLiveness()`) to scan active jobs and append stall/resume events through the normal append pipeline (no direct state mutation).
|
|
72
|
+
|
|
73
|
+
Outbox side-effects (stubs for now):
|
|
74
|
+
|
|
75
|
+
- `JOB_STATUS_CHANGED` when a stall/resume changes the job status
|
|
76
|
+
- `ESCALATION_NEEDED` when `requiresOperatorCoverage` is true
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# MVP Build Order (sprint-sized)
|
|
2
|
+
|
|
3
|
+
This is the recommended implementation order for a narrow “managed environment” wedge.
|
|
4
|
+
|
|
5
|
+
## Sprint 1: Core spine
|
|
6
|
+
|
|
7
|
+
- Define job state machine + transition validation.
|
|
8
|
+
- Append-only event log with hash chaining.
|
|
9
|
+
- In-memory prototype API (create job, append event, replay).
|
|
10
|
+
- Minimal robot registration and heartbeat.
|
|
11
|
+
|
|
12
|
+
## Sprint 2: Booking + dispatch
|
|
13
|
+
|
|
14
|
+
- Quote object + booking workflow (hold/escrow stub).
|
|
15
|
+
- Deterministic matching scorer (capability + trust tiers).
|
|
16
|
+
- Reservation + idempotency keys.
|
|
17
|
+
- Basic replanning hooks (robot unavailable → re-match).
|
|
18
|
+
|
|
19
|
+
## Sprint 3: Assist + incident workflow
|
|
20
|
+
|
|
21
|
+
- Operator assist start/end events.
|
|
22
|
+
- Incident taxonomy and automatic evidence bundling triggers.
|
|
23
|
+
- Job timeline replay view (ops API endpoints).
|
|
24
|
+
|
|
25
|
+
## Sprint 4: Ledger correctness
|
|
26
|
+
|
|
27
|
+
- Double-entry ledger with settlement splits.
|
|
28
|
+
- Refund and partial completion accounting.
|
|
29
|
+
- Reconciliation reports (per job, per owner).
|
|
30
|
+
|
|
31
|
+
## Sprint 5: Skill packaging & certification tooling (internal)
|
|
32
|
+
|
|
33
|
+
- Skill bundle format + verification.
|
|
34
|
+
- Capability API stubs + robot adapter interface.
|
|
35
|
+
- Certification checklist automation (static + sim harness hooks).
|
|
36
|
+
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# On-call Playbook (v0)
|
|
2
|
+
|
|
3
|
+
## Top priorities
|
|
4
|
+
|
|
5
|
+
1. Human safety
|
|
6
|
+
2. Property safety
|
|
7
|
+
3. Privacy compliance
|
|
8
|
+
4. Service reliability
|
|
9
|
+
5. Financial correctness
|
|
10
|
+
|
|
11
|
+
## Standard incident response
|
|
12
|
+
|
|
13
|
+
1. Identify affected job(s) and current state.
|
|
14
|
+
2. If robot is active:
|
|
15
|
+
- move to safe state (stop / exit / dock) via operator console,
|
|
16
|
+
- revoke access plan if needed.
|
|
17
|
+
3. Preserve evidence bundle (ensure it is generated and immutable).
|
|
18
|
+
4. Communicate:
|
|
19
|
+
- requester notification (status + next step),
|
|
20
|
+
- owner/operator notification if dispatch needed.
|
|
21
|
+
5. Classify incident and open claim if thresholds are met.
|
|
22
|
+
6. Post-incident:
|
|
23
|
+
- tag failure mode,
|
|
24
|
+
- file regression test requirements,
|
|
25
|
+
- add monitoring/alert improvements.
|
|
26
|
+
|
|
27
|
+
## “Stop the world” triggers
|
|
28
|
+
|
|
29
|
+
- repeated safety incidents from a robot model or skill version
|
|
30
|
+
- privacy policy violations (camera/sensor misuse)
|
|
31
|
+
- ledger imbalance or payout correctness bug
|
|
32
|
+
|
|
33
|
+
## Debug checklist
|
|
34
|
+
|
|
35
|
+
- job timeline replay (events, transitions)
|
|
36
|
+
- agent heartbeats and last known telemetry
|
|
37
|
+
- operator action log
|
|
38
|
+
- evidence bundle frames (minimal necessary)
|
|
39
|
+
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Operations: Signing in production
|
|
2
|
+
|
|
3
|
+
Settld supports producing strictly verifiable bundles without storing private keys on disk by using a remote signer.
|
|
4
|
+
|
|
5
|
+
## Recommended posture (hardened)
|
|
6
|
+
|
|
7
|
+
- Use `settld-produce --signer remote` and keep private keys inside an HSM/KMS-backed signing service.
|
|
8
|
+
- Keep `trust.json` (public trust anchors) in version control and rotate via PR.
|
|
9
|
+
- In CI, use strict verification and archive `VerifyCliOutput.v1` JSON.
|
|
10
|
+
|
|
11
|
+
## Remote signer
|
|
12
|
+
|
|
13
|
+
See `docs/spec/REMOTE_SIGNER.md` for the RemoteSigner API contract.
|
|
14
|
+
|
|
15
|
+
## Key rotation (high level)
|
|
16
|
+
|
|
17
|
+
1. Add new key to signer service.
|
|
18
|
+
2. Update trust anchors (governance root keys and/or time authorities) via PR.
|
|
19
|
+
3. Produce bundles signed by the new key while allowing overlap.
|
|
20
|
+
4. Deprecate old keys per your internal policy (and/or publish revocations as governance requires).
|