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,60 @@
|
|
|
1
|
+
# Artifacts
|
|
2
|
+
|
|
3
|
+
Settld artifacts are immutable, verifiable JSON documents (often later delivered via webhook/S3) derived from an event-sourced job stream.
|
|
4
|
+
|
|
5
|
+
## Finance Finality: "Effective" Artifacts
|
|
6
|
+
|
|
7
|
+
For finance and audit workflows, the *economically final* artifact is determined by settlement:
|
|
8
|
+
|
|
9
|
+
- If a job is settled, the effective artifact is the one whose `sourceEventId` equals the `SETTLED` event id.
|
|
10
|
+
- If a job is not settled, the effective artifact is anchored to the proof event selected for the latest completion anchor.
|
|
11
|
+
|
|
12
|
+
API:
|
|
13
|
+
|
|
14
|
+
- `GET /jobs/:jobId/artifacts/effective?type=WorkCertificate.v1`
|
|
15
|
+
|
|
16
|
+
This endpoint exists so downstream systems do **not** reinvent "which certificate counts" (and accidentally treat ids as chronology).
|
|
17
|
+
|
|
18
|
+
## Listing Artifacts (Storage Listing)
|
|
19
|
+
|
|
20
|
+
API:
|
|
21
|
+
|
|
22
|
+
- `GET /jobs/:jobId/artifacts`
|
|
23
|
+
- Optional filters: `type=…`, `sourceEventId=…`
|
|
24
|
+
- Pagination: `limit=…` with either `offset=…` (simple) or `cursor=…` (seek).
|
|
25
|
+
|
|
26
|
+
Important: this endpoint is a *storage listing*. It is **not** a job timeline. Artifact creation time may lag source-event time due to worker retries, backfills, or delayed processing.
|
|
27
|
+
|
|
28
|
+
### Ordering Contract (Postgres)
|
|
29
|
+
|
|
30
|
+
For the Postgres store, artifact listing uses:
|
|
31
|
+
|
|
32
|
+
- `ORDER BY created_at DESC, artifact_id DESC`
|
|
33
|
+
|
|
34
|
+
This ordering is deterministic, but it is based on artifact persistence time (`created_at`), not source event time.
|
|
35
|
+
|
|
36
|
+
### Cursor Pagination (Postgres-only)
|
|
37
|
+
|
|
38
|
+
Cursor pagination is supported only when running with the Postgres-backed store.
|
|
39
|
+
|
|
40
|
+
Cursor semantics:
|
|
41
|
+
|
|
42
|
+
- The cursor is an opaque `base64url`-encoded JSON payload.
|
|
43
|
+
- It is a seek cursor over `(created_at, artifact_id)` matching the ordering above.
|
|
44
|
+
|
|
45
|
+
Moving dataset semantics:
|
|
46
|
+
|
|
47
|
+
- While you are paging, new artifacts may be inserted at the "top" (newer `created_at`).
|
|
48
|
+
- A cursor walk does not guarantee you will see inserts that occur after you started paging.
|
|
49
|
+
- If you need the latest artifacts, restart from the top (no cursor) or use `/artifacts/effective` for finance truth.
|
|
50
|
+
|
|
51
|
+
Cursor payload format (v1):
|
|
52
|
+
|
|
53
|
+
```json
|
|
54
|
+
{
|
|
55
|
+
"v": 1,
|
|
56
|
+
"order": "created_at_desc_artifact_id_desc",
|
|
57
|
+
"createdAt": "2026-01-01T00:00:00.000000Z",
|
|
58
|
+
"artifactId": "workcert_job_123_evt_456"
|
|
59
|
+
}
|
|
60
|
+
```
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Skill Certification Checklist (v0)
|
|
2
|
+
|
|
3
|
+
## Static checks
|
|
4
|
+
|
|
5
|
+
- Declares required capabilities (no undeclared API calls).
|
|
6
|
+
- Declares safety constraints (force/speed/contact).
|
|
7
|
+
- Declares privacy profile (sensors, retention).
|
|
8
|
+
- No forbidden syscalls / no network egress from skill runtime (policy decision).
|
|
9
|
+
- Deterministic policy graph passes schema validation.
|
|
10
|
+
|
|
11
|
+
## Simulation
|
|
12
|
+
|
|
13
|
+
- Passes baseline navigation/manipulation tests.
|
|
14
|
+
- Passes “edge” scenarios (clutter, lighting changes, occlusion).
|
|
15
|
+
- Timeouts and abort paths behave safely.
|
|
16
|
+
- Evidence triggers fire on impacts/uncertainty/assist start.
|
|
17
|
+
|
|
18
|
+
## Hardware-in-loop (lab apartment)
|
|
19
|
+
|
|
20
|
+
- Repeated runs meet completion + incident thresholds.
|
|
21
|
+
- Operator assist path is usable and logs actions correctly.
|
|
22
|
+
- Local policy enforcement clamps unsafe command attempts.
|
|
23
|
+
|
|
24
|
+
## Privacy review
|
|
25
|
+
|
|
26
|
+
- Media capture respects privacy mode and zones.
|
|
27
|
+
- Evidence is minimal by default; only triggered bundles retained.
|
|
28
|
+
|
|
29
|
+
## Release controls
|
|
30
|
+
|
|
31
|
+
- Tier gating: `lab_cert` → limited environments; `field_cert` → broader.
|
|
32
|
+
- Rollback plan and regression monitoring.
|
|
33
|
+
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
# Circle Sandbox E2E (Reserve Adapter)
|
|
2
|
+
|
|
3
|
+
This guide is for validating the x402 reserve path against Circle sandbox before enabling production mode.
|
|
4
|
+
|
|
5
|
+
## Goal
|
|
6
|
+
|
|
7
|
+
Prove the reserve contract used by `POST /x402/gate/authorize-payment`:
|
|
8
|
+
|
|
9
|
+
1. Reserve succeeds before token mint.
|
|
10
|
+
2. Reserve failure does not mint a token.
|
|
11
|
+
3. Reserve rollback path restores internal wallet state.
|
|
12
|
+
|
|
13
|
+
## Production safety defaults
|
|
14
|
+
|
|
15
|
+
The API is configured to fail closed in production-like environments:
|
|
16
|
+
|
|
17
|
+
- `X402_REQUIRE_EXTERNAL_RESERVE` defaults to `true` when `SETTLD_ENV=production|prod`, `NODE_ENV=production`, or `RAILWAY_ENVIRONMENT_NAME=production|prod`.
|
|
18
|
+
- `X402_CIRCLE_RESERVE_MODE` defaults to `production` in production-like environments.
|
|
19
|
+
- In local/test environments, defaults remain:
|
|
20
|
+
- `X402_REQUIRE_EXTERNAL_RESERVE=false`
|
|
21
|
+
- `X402_CIRCLE_RESERVE_MODE=stub`
|
|
22
|
+
|
|
23
|
+
To force explicit behavior in any environment, set both env vars directly.
|
|
24
|
+
|
|
25
|
+
## Required env
|
|
26
|
+
|
|
27
|
+
Set these for sandbox runs:
|
|
28
|
+
|
|
29
|
+
- `CIRCLE_E2E=1` (enables sandbox e2e tests)
|
|
30
|
+
- `CIRCLE_API_KEY` (sandbox key)
|
|
31
|
+
- `CIRCLE_BASE_URL=https://api-sandbox.circle.com`
|
|
32
|
+
- `CIRCLE_BLOCKCHAIN` (for example `BASE-SEPOLIA`)
|
|
33
|
+
- `CIRCLE_WALLET_ID_SPEND`
|
|
34
|
+
- `CIRCLE_WALLET_ID_ESCROW`
|
|
35
|
+
- `CIRCLE_TOKEN_ID_USDC`
|
|
36
|
+
|
|
37
|
+
Fastest way to generate these from your Circle account:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
settld setup circle --api-key 'TEST_API_KEY:...' --mode auto --out-env ./.tmp/circle.env
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Then load them:
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
set -a; source ./.tmp/circle.env; set +a
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
If your environment uses a different naming convention, map these into the adapter config before running tests.
|
|
50
|
+
|
|
51
|
+
## Suggested test flow
|
|
52
|
+
|
|
53
|
+
1. Verify spend wallet has sufficient USDC.
|
|
54
|
+
2. Call reserve (`spend -> escrow`) with idempotency key = gate id.
|
|
55
|
+
3. Poll transaction status until terminal/safe state.
|
|
56
|
+
4. Attempt rollback:
|
|
57
|
+
- cancel when still cancellable, or
|
|
58
|
+
- compensating transfer (`escrow -> spend`) when already confirmed.
|
|
59
|
+
5. Verify resulting balances + persisted reserve status.
|
|
60
|
+
|
|
61
|
+
## Run command
|
|
62
|
+
|
|
63
|
+
After adapter wiring is complete:
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
CIRCLE_E2E=1 node --test test/circle-sandbox-reserve-e2e.test.js
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Run full paid MCP demo in Circle mode
|
|
70
|
+
|
|
71
|
+
The demo now supports explicit reserve rail mode:
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
SETTLD_DEMO_CIRCLE_MODE=sandbox \
|
|
75
|
+
X402_REQUIRE_EXTERNAL_RESERVE=1 \
|
|
76
|
+
node scripts/demo/mcp-paid-exa.mjs --circle=sandbox
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Artifacts include:
|
|
80
|
+
|
|
81
|
+
- `summary.json` with `circleMode`, `circleReserveId`, `reserveTransitions`, and `payoutDestination`.
|
|
82
|
+
- `reserve-state.json` with reserve details, transition timeline, and configured Circle rail metadata.
|
|
83
|
+
|
|
84
|
+
## Run paid MCP demo + batch settlement in Circle mode
|
|
85
|
+
|
|
86
|
+
This runs the same demo flow and then executes the batch payout worker against the generated artifact root:
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
SETTLD_DEMO_CIRCLE_MODE=sandbox \
|
|
90
|
+
SETTLD_DEMO_RUN_BATCH_SETTLEMENT=1 \
|
|
91
|
+
SETTLD_DEMO_BATCH_PROVIDER_WALLET_ID="$CIRCLE_WALLET_ID_ESCROW" \
|
|
92
|
+
X402_REQUIRE_EXTERNAL_RESERVE=1 \
|
|
93
|
+
node scripts/demo/mcp-paid-exa.mjs --circle=sandbox
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Additional artifacts:
|
|
97
|
+
|
|
98
|
+
- `batch-payout-registry.json`
|
|
99
|
+
- `batch-worker-state.json`
|
|
100
|
+
- `batch-settlement.json`
|
|
101
|
+
|
|
102
|
+
## Run sandbox-gated batch settlement E2E test
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
CIRCLE_E2E=1 CIRCLE_BATCH_E2E=1 node --test test/circle-sandbox-batch-settlement-e2e.test.js
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
This test:
|
|
109
|
+
|
|
110
|
+
1. Runs the paid MCP demo in sandbox mode with batch settlement enabled.
|
|
111
|
+
2. Confirms payout submission state is recorded.
|
|
112
|
+
3. Reruns the worker and verifies payout idempotency (no duplicate submit).
|
|
113
|
+
|
|
114
|
+
## Run the full Circle sandbox smoke gate
|
|
115
|
+
|
|
116
|
+
This command is the recommended "no-regression" check. It runs:
|
|
117
|
+
|
|
118
|
+
1. Optional faucet top-ups for spend/escrow wallets (can be disabled with `CIRCLE_SKIP_TOPUP=1`).
|
|
119
|
+
2. `test/circle-sandbox-reserve-e2e.test.js`
|
|
120
|
+
3. `test/circle-sandbox-batch-settlement-e2e.test.js`
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
npm run test:x402:circle:sandbox:smoke
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
Smoke output artifact:
|
|
127
|
+
|
|
128
|
+
- `artifacts/gates/x402-circle-sandbox-smoke.json`
|
|
129
|
+
|
|
130
|
+
## GitHub Actions smoke workflow
|
|
131
|
+
|
|
132
|
+
The repo includes `.github/workflows/x402-circle-sandbox-smoke.yml` for manual/nightly runs.
|
|
133
|
+
|
|
134
|
+
Required repo secrets:
|
|
135
|
+
|
|
136
|
+
- `CIRCLE_SANDBOX_API_KEY`
|
|
137
|
+
- `CIRCLE_SANDBOX_WALLET_ID_SPEND`
|
|
138
|
+
- `CIRCLE_SANDBOX_WALLET_ID_ESCROW`
|
|
139
|
+
- `CIRCLE_SANDBOX_TOKEN_ID_USDC`
|
|
140
|
+
- `CIRCLE_SANDBOX_ENTITY_SECRET_HEX`
|
|
141
|
+
|
|
142
|
+
Optional repo secrets:
|
|
143
|
+
|
|
144
|
+
- `CIRCLE_SANDBOX_BASE_URL` (defaults to `https://api.circle.com`)
|
|
145
|
+
- `CIRCLE_SANDBOX_BLOCKCHAIN` (defaults to `BASE-SEPOLIA`)
|
|
146
|
+
|
|
147
|
+
## Pass criteria
|
|
148
|
+
|
|
149
|
+
- Reserve call returns a stable `reserveId`.
|
|
150
|
+
- Repeated reserve calls with same gate id are idempotent.
|
|
151
|
+
- Failed reserves return `X402_RESERVE_FAILED` and leave no stranded internal escrow lock.
|
|
152
|
+
- Rollback returns funds to spend wallet (cancel or compensation).
|
package/docs/CONFIG.md
ADDED
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
# Settld Configuration (Runtime)
|
|
2
|
+
|
|
3
|
+
This repo is intentionally “ops-first”: **safe defaults**, explicit hardening toggles, and predictable failure modes.
|
|
4
|
+
|
|
5
|
+
## Store / durability
|
|
6
|
+
|
|
7
|
+
- `STORE` (`memory` | `pg`, default: `memory`)
|
|
8
|
+
- `DATABASE_URL` (required when `STORE=pg`)
|
|
9
|
+
- `PROXY_PG_SCHEMA` (default: `public`)
|
|
10
|
+
- `PROXY_PG_LOG_SLOW_MS` (default: `0` = disabled)
|
|
11
|
+
When nonzero, logs slow queries as `pg.query.slow` with duration + a best-effort query label (never logs query args).
|
|
12
|
+
- `PROXY_MIGRATE_ON_STARTUP` (`1` | `0`, default: `1`)
|
|
13
|
+
When `1`, Settld runs SQL migrations on startup (PG advisory-lock protected so concurrent instances are safe). Set `0` if you run migrations out-of-band.
|
|
14
|
+
- `PROXY_DATA_DIR` (memory mode durability via file tx-log; default: unset = purely in-memory)
|
|
15
|
+
|
|
16
|
+
## HTTP limits
|
|
17
|
+
|
|
18
|
+
- `PROXY_MAX_BODY_BYTES` (default: `1000000`)
|
|
19
|
+
- `PROXY_INGEST_MAX_EVENTS` (default: `200`)
|
|
20
|
+
|
|
21
|
+
## Protocol / versioning
|
|
22
|
+
|
|
23
|
+
Settld exposes a protocol version contract via `x-settld-protocol` and enforces compatibility windows.
|
|
24
|
+
|
|
25
|
+
- `PROXY_PROTOCOL_MIN` (default: current, e.g. `1.0`)
|
|
26
|
+
Requests below this return `426` with `code: PROTOCOL_TOO_OLD`.
|
|
27
|
+
|
|
28
|
+
- `PROXY_PROTOCOL_MAX` (default: current, e.g. `1.0`)
|
|
29
|
+
Requests above this return `400` with `code: PROTOCOL_TOO_NEW`.
|
|
30
|
+
|
|
31
|
+
- `PROXY_PROTOCOL_DEPRECATIONS` (optional file path)
|
|
32
|
+
JSON map of protocol version -> cutoff date; requests past cutoff return `426` with `code: PROTOCOL_DEPRECATED`.
|
|
33
|
+
Example:
|
|
34
|
+
|
|
35
|
+
```json
|
|
36
|
+
{ "1.0": { "cutoff": "2026-12-31T00:00:00.000Z" } }
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Production enforcement:
|
|
40
|
+
|
|
41
|
+
- When `NODE_ENV=production`, `/ingest/proxy` and `POST /{jobs|robots|operators}/:id/events` require the request header `x-settld-protocol` (else `400` with `code: PROTOCOL_VERSION_REQUIRED`).
|
|
42
|
+
|
|
43
|
+
## Rate limiting
|
|
44
|
+
|
|
45
|
+
- `PROXY_RATE_LIMIT_RPM` (default: `0` = disabled)
|
|
46
|
+
- `PROXY_RATE_LIMIT_BURST` (default: `PROXY_RATE_LIMIT_RPM`)
|
|
47
|
+
- `PROXY_RATE_LIMIT_PER_KEY_RPM` (default: `0` = disabled)
|
|
48
|
+
Applies an additional token bucket per authenticated API key (`auth.keyId`) after tenant-level limiting.
|
|
49
|
+
- `PROXY_RATE_LIMIT_PER_KEY_BURST` (default: `PROXY_RATE_LIMIT_PER_KEY_RPM`)
|
|
50
|
+
|
|
51
|
+
## Outbox reclaim / worker loop
|
|
52
|
+
|
|
53
|
+
- `PROXY_RECLAIM_AFTER_SECONDS` (default: `60`)
|
|
54
|
+
Reclaim “claimed but not processed” outbox rows after this window.
|
|
55
|
+
|
|
56
|
+
- `PROXY_PG_WORKER_STATEMENT_TIMEOUT_MS` (default: `0` = disabled; PG only)
|
|
57
|
+
Sets `statement_timeout` for worker-transaction queries (outbox claims + delivery claims + outbox processors) to prevent “hung query” pileups.
|
|
58
|
+
|
|
59
|
+
- `PROXY_AUTOTICK` (`1` enables a default loop)
|
|
60
|
+
- `PROXY_AUTOTICK_INTERVAL_MS` (default: `0`, or `250` when `PROXY_AUTOTICK=1`)
|
|
61
|
+
- `PROXY_AUTOTICK_MAX_MESSAGES` (default: `100`)
|
|
62
|
+
|
|
63
|
+
Delivery/worker tuning:
|
|
64
|
+
|
|
65
|
+
- `PROXY_WORKER_CONCURRENCY_ARTIFACTS` (default: `1`)
|
|
66
|
+
Max concurrent artifact build groups (grouped by `tenantId + jobId`).
|
|
67
|
+
|
|
68
|
+
- `PROXY_WORKER_CONCURRENCY_DELIVERIES` (default: `1`)
|
|
69
|
+
Max concurrent delivery scope groups (grouped by `scopeKey`; preserves ordering within each scope).
|
|
70
|
+
|
|
71
|
+
- `PROXY_DELIVERY_HTTP_TIMEOUT_MS` (default: `0` = disabled)
|
|
72
|
+
Abort outbound delivery HTTP requests after this timeout and retry with backoff.
|
|
73
|
+
|
|
74
|
+
## Ops / API auth
|
|
75
|
+
|
|
76
|
+
- `PROXY_OPS_TOKENS`
|
|
77
|
+
Format: `token:scope1,scope2;token2:scopeA` (scopes include `ops_read`, `ops_write`, `audit_read`, `finance_write`, …)
|
|
78
|
+
|
|
79
|
+
- `PROXY_OPS_TOKEN` (legacy)
|
|
80
|
+
If `PROXY_OPS_TOKENS` is empty, this single token grants full ops access.
|
|
81
|
+
|
|
82
|
+
- `PROXY_AUTH_KEY_TOUCH_MIN_SECONDS` (default: `60`)
|
|
83
|
+
Throttle how often `last_used_at` is updated for API keys (reduces DB write amplification).
|
|
84
|
+
|
|
85
|
+
## Ingest auth
|
|
86
|
+
|
|
87
|
+
- `PROXY_INGEST_TOKEN` (optional)
|
|
88
|
+
When set, `/ingest/proxy` requires header `x-proxy-ingest-token` to match.
|
|
89
|
+
|
|
90
|
+
## Export destinations (deliveries)
|
|
91
|
+
|
|
92
|
+
- `PROXY_EXPORT_DESTINATIONS` (JSON)
|
|
93
|
+
Maps `tenantId -> destinations[]`.
|
|
94
|
+
|
|
95
|
+
Webhook destination (preferred, secrets via ref):
|
|
96
|
+
|
|
97
|
+
```json
|
|
98
|
+
{
|
|
99
|
+
"tenant_default": [
|
|
100
|
+
{ "destinationId": "dst_webhook", "kind": "webhook", "url": "https://example.com/hook", "secretRef": "file:/var/run/secrets/webhook_secret" }
|
|
101
|
+
]
|
|
102
|
+
}
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
S3 destination (preferred, credentials via ref):
|
|
106
|
+
|
|
107
|
+
```json
|
|
108
|
+
{
|
|
109
|
+
"tenant_default": [
|
|
110
|
+
{
|
|
111
|
+
"destinationId": "dst_s3",
|
|
112
|
+
"kind": "s3",
|
|
113
|
+
"endpoint": "https://s3.amazonaws.com",
|
|
114
|
+
"bucket": "my-bucket",
|
|
115
|
+
"region": "us-east-1",
|
|
116
|
+
"accessKeyIdRef": "file:/var/run/secrets/aws_access_key_id",
|
|
117
|
+
"secretAccessKeyRef": "file:/var/run/secrets/aws_secret_access_key"
|
|
118
|
+
}
|
|
119
|
+
]
|
|
120
|
+
}
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Hardening note:
|
|
124
|
+
|
|
125
|
+
- Inline secrets (`secret`, `accessKeyId`, `secretAccessKey`) are rejected when `NODE_ENV=production` unless `PROXY_ALLOW_INLINE_SECRETS=1`.
|
|
126
|
+
|
|
127
|
+
## Evidence store
|
|
128
|
+
|
|
129
|
+
- `PROXY_EVIDENCE_STORE` (`fs` | `memory` | `s3` | `minio`, default: `fs`)
|
|
130
|
+
- `PROXY_EVIDENCE_DIR` (fs store root; default: tmp dir when not using `PROXY_DATA_DIR`)
|
|
131
|
+
|
|
132
|
+
S3/minio evidence store config:
|
|
133
|
+
|
|
134
|
+
- `PROXY_EVIDENCE_S3_ENDPOINT`
|
|
135
|
+
- `PROXY_EVIDENCE_S3_REGION` (default: `us-east-1`)
|
|
136
|
+
- `PROXY_EVIDENCE_S3_BUCKET`
|
|
137
|
+
- `PROXY_EVIDENCE_S3_ACCESS_KEY_ID` (or `AWS_ACCESS_KEY_ID`)
|
|
138
|
+
- `PROXY_EVIDENCE_S3_SECRET_ACCESS_KEY` (or `AWS_SECRET_ACCESS_KEY`)
|
|
139
|
+
- `PROXY_EVIDENCE_S3_FORCE_PATH_STYLE` (default: `1`)
|
|
140
|
+
|
|
141
|
+
Evidence download security:
|
|
142
|
+
|
|
143
|
+
- `PROXY_EVIDENCE_SIGNING_SECRET` (optional; default derived from server signer)
|
|
144
|
+
- `PROXY_EVIDENCE_PRESIGN_MAX_SECONDS` (default: `300`, max: `3600`)
|
|
145
|
+
- `PROXY_EVIDENCE_RETENTION_MAX_DAYS` (default: `365`)
|
|
146
|
+
Tenant cap for `contract.policies.evidencePolicy.retentionDays`.
|
|
147
|
+
- `PROXY_EVIDENCE_RETENTION_MAX_DAYS_BY_TENANT` (JSON map, optional)
|
|
148
|
+
Per-tenant override for `PROXY_EVIDENCE_RETENTION_MAX_DAYS`.
|
|
149
|
+
|
|
150
|
+
## Secrets provider
|
|
151
|
+
|
|
152
|
+
- `PROXY_ENABLE_ENV_SECRETS` (`1` enables `env:NAME` refs; default: disabled unless `NODE_ENV=development`)
|
|
153
|
+
- `PROXY_SECRETS_CACHE_TTL_SECONDS` (default: `30`)
|
|
154
|
+
|
|
155
|
+
Supported refs:
|
|
156
|
+
|
|
157
|
+
- `env:NAME` (dev-only unless explicitly enabled)
|
|
158
|
+
- `file:/absolute/path` (k8s secret mounts)
|
|
159
|
+
|
|
160
|
+
## URL safety overrides (dev only)
|
|
161
|
+
|
|
162
|
+
These exist to make local development possible (e.g. MinIO on `localhost`). Do not enable in production.
|
|
163
|
+
|
|
164
|
+
- `PROXY_ALLOW_HTTP_URLS` (`1` allows `http://` where URL safety checks apply)
|
|
165
|
+
- `PROXY_ALLOW_PRIVATE_URLS` (`1` allows private IP ranges)
|
|
166
|
+
- `PROXY_ALLOW_LOOPBACK_URLS` (`1` allows `localhost` / loopback)
|
|
167
|
+
|
|
168
|
+
## Retention / cleanup
|
|
169
|
+
|
|
170
|
+
Retention is tenant-configurable via in-memory config and capped by these runtime env vars.
|
|
171
|
+
|
|
172
|
+
- `PROXY_RETENTION_INGEST_RECORDS_DAYS` (default: `0` = no expiry)
|
|
173
|
+
Sets `expires_at` for `ingest_records`.
|
|
174
|
+
|
|
175
|
+
- `PROXY_RETENTION_INGEST_RECORDS_MAX_DAYS` (default: `0` = no platform cap)
|
|
176
|
+
When set, tenant `0` means “use the cap”.
|
|
177
|
+
|
|
178
|
+
- `PROXY_RETENTION_DELIVERIES_DAYS` (default: `0` = no expiry)
|
|
179
|
+
Expiration for delivered deliveries.
|
|
180
|
+
|
|
181
|
+
- `PROXY_RETENTION_DELIVERIES_MAX_DAYS` (default: `0` = no platform cap)
|
|
182
|
+
|
|
183
|
+
- `PROXY_RETENTION_DELIVERY_DLQ_DAYS` (default: `PROXY_RETENTION_DELIVERIES_DAYS`)
|
|
184
|
+
Expiration for failed (DLQ) deliveries.
|
|
185
|
+
|
|
186
|
+
- `PROXY_RETENTION_DELIVERY_DLQ_MAX_DAYS` (default: `PROXY_RETENTION_DELIVERIES_MAX_DAYS`)
|
|
187
|
+
|
|
188
|
+
Cleanup execution (PG mode):
|
|
189
|
+
|
|
190
|
+
- `PROXY_RETENTION_CLEANUP_BATCH_SIZE` (default: `500`)
|
|
191
|
+
Max rows per table per cleanup run.
|
|
192
|
+
|
|
193
|
+
- `PROXY_RETENTION_CLEANUP_MAX_MILLIS` (default: `1500`)
|
|
194
|
+
Wall-clock budget for a single cleanup run (enforced via PG `statement_timeout`).
|
|
195
|
+
|
|
196
|
+
- `PROXY_RETENTION_CLEANUP_DRY_RUN` (`1` prints would-delete counts; no deletes)
|
|
197
|
+
|
|
198
|
+
Finance reconciliation scheduling:
|
|
199
|
+
|
|
200
|
+
- `PROXY_FINANCE_RECONCILE_ENABLED` (default: `1`)
|
|
201
|
+
Enables periodic finance reconciliation maintenance ticks.
|
|
202
|
+
|
|
203
|
+
- `PROXY_FINANCE_RECONCILE_INTERVAL_SECONDS` (default: `300`)
|
|
204
|
+
Minimum interval between automatic reconciliation runs.
|
|
205
|
+
|
|
206
|
+
- `PROXY_FINANCE_RECONCILE_MAX_TENANTS` (default: `50`)
|
|
207
|
+
Max tenants scanned per automatic run.
|
|
208
|
+
|
|
209
|
+
- `PROXY_FINANCE_RECONCILE_MAX_PERIODS_PER_TENANT` (default: `2`)
|
|
210
|
+
Max GL periods reconciled per tenant in one run.
|
|
211
|
+
|
|
212
|
+
Money-rail reconciliation scheduling:
|
|
213
|
+
|
|
214
|
+
- `PROXY_MONEY_RAIL_RECONCILE_ENABLED` (default: `1`)
|
|
215
|
+
Enables periodic money-rail reconciliation maintenance ticks.
|
|
216
|
+
|
|
217
|
+
- `PROXY_MONEY_RAIL_RECONCILE_INTERVAL_SECONDS` (default: `300`)
|
|
218
|
+
Minimum interval between automatic money-rail reconciliation runs.
|
|
219
|
+
|
|
220
|
+
- `PROXY_MONEY_RAIL_RECONCILE_MAX_TENANTS` (default: `50`)
|
|
221
|
+
Max tenants scanned per automatic run.
|
|
222
|
+
|
|
223
|
+
- `PROXY_MONEY_RAIL_RECONCILE_MAX_PERIODS_PER_TENANT` (default: `2`)
|
|
224
|
+
Max payout periods reconciled per tenant in one run.
|
|
225
|
+
|
|
226
|
+
- `PROXY_MONEY_RAIL_RECONCILE_MAX_PROVIDERS_PER_TENANT` (default: `10`)
|
|
227
|
+
Max money-rail providers reconciled per tenant in one run.
|
|
228
|
+
|
|
229
|
+
Maintenance runner (recommended in prod):
|
|
230
|
+
|
|
231
|
+
- `PROXY_MAINTENANCE_INTERVAL_SECONDS` (default: `300`)
|
|
232
|
+
Sleep between cleanup runs in `src/api/maintenance.js`.
|
|
233
|
+
|
|
234
|
+
## Quotas / backpressure
|
|
235
|
+
|
|
236
|
+
On quota breach, requests return `429` with `code: TENANT_QUOTA_EXCEEDED`.
|
|
237
|
+
|
|
238
|
+
- `PROXY_QUOTA_MAX_OPEN_JOBS` (default: `0` = unlimited)
|
|
239
|
+
- `PROXY_QUOTA_PLATFORM_MAX_OPEN_JOBS` (default: `0` = no platform cap)
|
|
240
|
+
|
|
241
|
+
- `PROXY_QUOTA_MAX_PENDING_DELIVERIES` (default: `0` = unlimited)
|
|
242
|
+
- `PROXY_QUOTA_PLATFORM_MAX_PENDING_DELIVERIES` (default: `0` = no platform cap)
|
|
243
|
+
|
|
244
|
+
- `PROXY_QUOTA_MAX_INGEST_DLQ_DEPTH` (default: `0` = unlimited)
|
|
245
|
+
- `PROXY_QUOTA_PLATFORM_MAX_INGEST_DLQ_DEPTH` (default: `0` = no platform cap)
|
|
246
|
+
|
|
247
|
+
- `PROXY_QUOTA_MAX_EVIDENCE_REFS_PER_JOB` (default: `0` = unlimited)
|
|
248
|
+
- `PROXY_QUOTA_PLATFORM_MAX_EVIDENCE_REFS_PER_JOB` (default: `0` = no platform cap)
|
|
249
|
+
|
|
250
|
+
- `PROXY_QUOTA_MAX_ARTIFACTS_PER_JOB_TYPE` (default: `0` = unlimited)
|
|
251
|
+
- `PROXY_QUOTA_PLATFORM_MAX_ARTIFACTS_PER_JOB_TYPE` (default: `0` = no platform cap)
|
|
252
|
+
|
|
253
|
+
## Outbox poison-pill
|
|
254
|
+
|
|
255
|
+
- `PROXY_OUTBOX_MAX_ATTEMPTS` (default: `25`)
|
|
256
|
+
After this many attempts, outbox work is marked done with a DLQ error marker.
|
|
257
|
+
|
|
258
|
+
## Evidence ingest constraints (optional hardening)
|
|
259
|
+
|
|
260
|
+
- `PROXY_EVIDENCE_CONTENT_TYPE_ALLOWLIST` (comma-separated)
|
|
261
|
+
If set, `EVIDENCE_CAPTURED.payload.contentType` must be in the allowlist.
|
|
262
|
+
|
|
263
|
+
- `PROXY_EVIDENCE_REQUIRE_SIZE_BYTES` (`1` requires `EVIDENCE_CAPTURED.payload.sizeBytes`)
|
|
264
|
+
- `PROXY_EVIDENCE_MAX_SIZE_BYTES` (default: `0` = unlimited)
|
|
265
|
+
|
|
266
|
+
## Backups / restore (Postgres)
|
|
267
|
+
|
|
268
|
+
These helper scripts assume you have Postgres client tools installed (`pg_dump`, `pg_restore`, `psql`).
|
|
269
|
+
|
|
270
|
+
- Backup:
|
|
271
|
+
|
|
272
|
+
```sh
|
|
273
|
+
DATABASE_URL=postgres://... PROXY_PG_SCHEMA=public OUT_DIR=./backups bash scripts/backup-pg.sh
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
- Restore (to a fresh DB is recommended):
|
|
277
|
+
|
|
278
|
+
```sh
|
|
279
|
+
DATABASE_URL=postgres://... PROXY_PG_SCHEMA=public bash scripts/restore-pg.sh ./backups/backup_*/db.dump
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
- Verify a restored DB:
|
|
283
|
+
|
|
284
|
+
```sh
|
|
285
|
+
DATABASE_URL=postgres://... PROXY_PG_SCHEMA=public node scripts/verify-pg.js
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
Verification knobs:
|
|
289
|
+
|
|
290
|
+
- `VERIFY_MAX_STREAMS` (default: `100`)
|
|
291
|
+
- `VERIFY_MAX_ARTIFACTS` (default: `100`)
|
|
292
|
+
- `VERIFY_MAX_LEDGER_ENTRIES` (default: `0` = all)
|
|
293
|
+
|
|
294
|
+
RPO/RTO (practical):
|
|
295
|
+
|
|
296
|
+
- RPO is the time between successful backups.
|
|
297
|
+
- RTO is `restore time + verification time` and scales with DB size.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Contracts APIs (Legacy vs Contracts-as-Code)
|
|
2
|
+
|
|
3
|
+
Settld exposes two separate “contracts” API families on purpose.
|
|
4
|
+
|
|
5
|
+
## Legacy: `/ops/contracts` (policy upsert)
|
|
6
|
+
|
|
7
|
+
- Semantics: mutable upsert of “policy templates” (JSON `policies.*` blobs).
|
|
8
|
+
- Compatibility: kept for existing integrations and tests.
|
|
9
|
+
- Output: legacy `contract` records with `contractVersion` incrementing per upsert.
|
|
10
|
+
|
|
11
|
+
Use this when you want to keep the existing quoting/booking contract behavior.
|
|
12
|
+
|
|
13
|
+
## Contracts-as-Code: `/ops/contracts-v2` (hash-addressed documents)
|
|
14
|
+
|
|
15
|
+
- Semantics: immutable, hash-addressed `ContractDocument.v1` documents with optional signatures and an activation step.
|
|
16
|
+
- Output: v2 contract records that carry `contractHash`, `policyHash`, and `compilerId`.
|
|
17
|
+
- Jobs pin hashes at booking-time (so later edits cannot retroactively change what governed the job).
|
|
18
|
+
|
|
19
|
+
Use this when you need audit-grade pinning (hashes), signing, and deterministic compilation.
|
|
20
|
+
|
|
21
|
+
## Capabilities
|
|
22
|
+
|
|
23
|
+
`GET /capabilities` advertises which contract APIs and schema/compiler versions the server supports.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Deprecation Policy
|
|
2
|
+
|
|
3
|
+
Settld is infrastructure. We don’t break integrators casually.
|
|
4
|
+
|
|
5
|
+
## Protocol versions (`x-settld-protocol`)
|
|
6
|
+
|
|
7
|
+
- Format: `major.minor` (example: `1.0`)
|
|
8
|
+
- Server advertises:
|
|
9
|
+
- `x-settld-protocol` (current)
|
|
10
|
+
- `x-settld-supported-protocols` (comma-separated)
|
|
11
|
+
|
|
12
|
+
### Minimum windows
|
|
13
|
+
|
|
14
|
+
- Breaking change requires a protocol bump.
|
|
15
|
+
- Deprecated protocol versions remain supported for **at least 6 months**, except for urgent security fixes.
|
|
16
|
+
|
|
17
|
+
### Enforcing deprecation cutoffs
|
|
18
|
+
|
|
19
|
+
If configured, the server rejects deprecated versions past cutoff via `PROXY_PROTOCOL_DEPRECATIONS` and reason code `PROTOCOL_DEPRECATED`.
|
|
20
|
+
|
|
21
|
+
## APIs
|
|
22
|
+
|
|
23
|
+
When an API family is deprecated:
|
|
24
|
+
- it will be called out in `CHANGELOG.md`
|
|
25
|
+
- it may emit a warning header in non-test mode
|
|
26
|
+
- it will have a published replacement
|
|
27
|
+
|
|
28
|
+
Current split:
|
|
29
|
+
- Legacy contracts: `/ops/contracts` (mutable policy upsert; back-compat)
|
|
30
|
+
- Contracts v2: `/ops/contracts-v2` (contracts-as-code; hash-addressed + compiled)
|
|
31
|
+
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# Settld Domain Model (v0)
|
|
2
|
+
|
|
3
|
+
## Actors
|
|
4
|
+
|
|
5
|
+
- **Requester**: Household or Business that pays and grants scoped access.
|
|
6
|
+
- **Owner**: supplies executors and receives payouts.
|
|
7
|
+
- **Executor**: endpoint with capabilities, health, and safety profile.
|
|
8
|
+
- **Operator**: remote assist + exception handling; actions are audited.
|
|
9
|
+
- **Developer**: publishes skills.
|
|
10
|
+
- **Trust Counterparty**: insurance/guarantee/claims partner.
|
|
11
|
+
|
|
12
|
+
## First-class entities
|
|
13
|
+
|
|
14
|
+
### Job
|
|
15
|
+
|
|
16
|
+
Purchasable outcome with SLA and constraints.
|
|
17
|
+
|
|
18
|
+
Key fields:
|
|
19
|
+
|
|
20
|
+
- `templateId` (e.g., `reset_lite`)
|
|
21
|
+
- constraints (rooms allowed, privacy mode, fragile items, pets, etc.)
|
|
22
|
+
- scheduling window
|
|
23
|
+
- price quote + risk premium
|
|
24
|
+
- selected executor + operator coverage (optional)
|
|
25
|
+
- state machine status
|
|
26
|
+
|
|
27
|
+
### Task Template
|
|
28
|
+
|
|
29
|
+
Defines:
|
|
30
|
+
|
|
31
|
+
- required skills
|
|
32
|
+
- environment requirements (managed vs home)
|
|
33
|
+
- SLA expectations
|
|
34
|
+
- pricing inputs and guardrails
|
|
35
|
+
|
|
36
|
+
### Skill
|
|
37
|
+
|
|
38
|
+
Signed bundle:
|
|
39
|
+
|
|
40
|
+
- metadata (name, version, developer, description)
|
|
41
|
+
- required capabilities + safety constraints
|
|
42
|
+
- deterministic policy graph (BT/SM) and tests
|
|
43
|
+
- optional model artifacts
|
|
44
|
+
- certification tier
|
|
45
|
+
|
|
46
|
+
### Capability
|
|
47
|
+
|
|
48
|
+
Runtime-agnostic API surface (e.g., `ExecuteWorkflow`, `CallTool`, `CollectEvidence`, `ObserveROI`).
|
|
49
|
+
|
|
50
|
+
Executors advertise:
|
|
51
|
+
|
|
52
|
+
- mobility/manipulation properties
|
|
53
|
+
- allowed speed/force envelopes
|
|
54
|
+
- autonomy/teleop allowed flags
|
|
55
|
+
- sensor modes (privacy implications)
|
|
56
|
+
|
|
57
|
+
### Access Plan
|
|
58
|
+
|
|
59
|
+
Time-bounded, revocable credential set and instructions to access the space:
|
|
60
|
+
|
|
61
|
+
- credential scope + expiry
|
|
62
|
+
- revocation path
|
|
63
|
+
- entry/exit safe behaviors
|
|
64
|
+
|
|
65
|
+
### Incident / Claim
|
|
66
|
+
|
|
67
|
+
Incident: operationally detected anomaly or requester-reported issue.
|
|
68
|
+
|
|
69
|
+
Claim: workflow for remediation/payout:
|
|
70
|
+
|
|
71
|
+
- triage, classify, evidence bundle attach
|
|
72
|
+
- approve small payouts quickly, escalate large claims
|
|
73
|
+
- ledger adjustments (refunds, owner clawbacks, reserve draws)
|
|
74
|
+
|
|
75
|
+
### Ledger
|
|
76
|
+
|
|
77
|
+
Double-entry system of record for money movement:
|
|
78
|
+
|
|
79
|
+
- escrow/holds
|
|
80
|
+
- payout splits (owner, Settld fee, operator fee, developer royalty, reserve)
|
|
81
|
+
- refunds, chargebacks, tips
|
|
82
|
+
|
|
83
|
+
Invariant: every journal entry balances to zero.
|
|
84
|
+
|
|
85
|
+
## Trust scores (initially naive)
|
|
86
|
+
|
|
87
|
+
Used for dispatch, pricing, and environment gating:
|
|
88
|
+
|
|
89
|
+
- executor trust score
|
|
90
|
+
- owner trust score
|
|
91
|
+
- building trust score
|
|
92
|
+
- skill trust score / certification tier
|