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,32 @@
|
|
|
1
|
+
# ReleaseIndex.v1
|
|
2
|
+
|
|
3
|
+
`ReleaseIndex.v1` is a **signed release manifest** for Settld distribution artifacts.
|
|
4
|
+
|
|
5
|
+
It is a tooling contract (not a bundle protocol object). Its purpose is to make release authenticity verifiable:
|
|
6
|
+
|
|
7
|
+
- A third party can verify the `ReleaseIndex.v1` signature (rooted in a release signing key).
|
|
8
|
+
- A third party can verify that the release artifacts match the hashes recorded in the index.
|
|
9
|
+
|
|
10
|
+
## Files
|
|
11
|
+
|
|
12
|
+
Releases publish:
|
|
13
|
+
|
|
14
|
+
- `release_index_v1.json` — the `ReleaseIndex.v1` document
|
|
15
|
+
- `release_index_v1.sig` — detached signatures over the canonical JSON bytes of `release_index_v1.json` (single or quorum)
|
|
16
|
+
|
|
17
|
+
## Canonicalization and signing
|
|
18
|
+
|
|
19
|
+
- Canonical JSON: RFC8785/JCS-style canonicalization (sorted object keys; no `-0` / non-finite numbers).
|
|
20
|
+
- Signature is over the **SHA-256 digest** of the canonical JSON UTF-8 bytes.
|
|
21
|
+
|
|
22
|
+
## Relationship to circularity
|
|
23
|
+
|
|
24
|
+
`ReleaseIndex.v1` intentionally **does not list** itself or its signature as artifacts, to avoid circular hashing.
|
|
25
|
+
|
|
26
|
+
## Schema
|
|
27
|
+
|
|
28
|
+
See:
|
|
29
|
+
|
|
30
|
+
- `docs/spec/schemas/ReleaseIndex.v1.schema.json`
|
|
31
|
+
- `docs/spec/schemas/ReleaseIndexSignature.v1.schema.json`
|
|
32
|
+
- `docs/spec/schemas/ReleaseIndexSignatures.v1.schema.json`
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# ReleaseIndexSignatures.v1
|
|
2
|
+
|
|
3
|
+
`ReleaseIndexSignatures.v1` is a tooling contract that wraps one or more `ReleaseIndexSignature.v1` entries.
|
|
4
|
+
|
|
5
|
+
It exists so a single `release_index_v1.sig` file can carry multiple signatures (for quorum-based release signing) without changing `ReleaseIndex.v1`.
|
|
6
|
+
|
|
7
|
+
## Relationship to `release_index_v1.sig`
|
|
8
|
+
|
|
9
|
+
`release_index_v1.sig` may contain either:
|
|
10
|
+
|
|
11
|
+
- a single `ReleaseIndexSignature.v1` object (legacy/single-signature), or
|
|
12
|
+
- a `ReleaseIndexSignatures.v1` object containing `signatures[]`.
|
|
13
|
+
|
|
14
|
+
## Schema
|
|
15
|
+
|
|
16
|
+
See `docs/spec/schemas/ReleaseIndexSignatures.v1.schema.json`.
|
|
17
|
+
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# ReleaseTrust.v1
|
|
2
|
+
|
|
3
|
+
`ReleaseTrust.v1` is a tooling/config document describing which public keys are trusted to sign `ReleaseIndex.v1`.
|
|
4
|
+
|
|
5
|
+
This trust domain is **separate** from bundle signer governance keys.
|
|
6
|
+
|
|
7
|
+
`ReleaseTrust.v1` is a legacy/simple format: a mapping of `keyId -> publicKeyPem` with no rotation, revocation, or quorum policy.
|
|
8
|
+
|
|
9
|
+
For rotation/revocation/quorum, use `ReleaseTrust.v2`.
|
|
10
|
+
|
|
11
|
+
## Schema
|
|
12
|
+
|
|
13
|
+
See `docs/spec/schemas/ReleaseTrust.v1.schema.json`.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# ReleaseTrust.v2
|
|
2
|
+
|
|
3
|
+
`ReleaseTrust.v2` is a tooling/config document describing which public keys are trusted to sign `ReleaseIndex.v1`, including **rotation** and **revocation** semantics.
|
|
4
|
+
|
|
5
|
+
This trust domain is **separate** from bundle signer governance keys.
|
|
6
|
+
|
|
7
|
+
## Key evaluation
|
|
8
|
+
|
|
9
|
+
When verifying a release:
|
|
10
|
+
|
|
11
|
+
- `signatureTime` is `ReleaseIndex.v1.toolchain.buildEpochSeconds` (an integer Unix epoch time).
|
|
12
|
+
- A trusted key is considered usable only if:
|
|
13
|
+
- `notBeforeEpochSeconds` is absent or `signatureTime >= notBeforeEpochSeconds`
|
|
14
|
+
- `notAfterEpochSeconds` is absent or `signatureTime <= notAfterEpochSeconds`
|
|
15
|
+
- `revokedAtEpochSeconds` is absent or `signatureTime < revokedAtEpochSeconds`
|
|
16
|
+
|
|
17
|
+
## Quorum policy
|
|
18
|
+
|
|
19
|
+
`policy.minSignatures` specifies how many **valid** signatures from trusted, usable keys are required to accept the release index.
|
|
20
|
+
|
|
21
|
+
If `policy.requiredKeyIds` is present, each listed `keyId` must appear among the valid signatures as well.
|
|
22
|
+
|
|
23
|
+
## Schema
|
|
24
|
+
|
|
25
|
+
See `docs/spec/schemas/ReleaseTrust.v2.schema.json`.
|
|
26
|
+
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# RemoteSignerRequest.v1 (tooling contract)
|
|
2
|
+
|
|
3
|
+
This document defines the **stdio wrapper** request shape for delegated signing.
|
|
4
|
+
|
|
5
|
+
It is a tooling contract used when invoking a signer as a local process (stdin/stdout). HTTP signers use the endpoint-specific request/response schemas referenced in `REMOTE_SIGNER.md`.
|
|
6
|
+
|
|
7
|
+
Schema: `docs/spec/schemas/RemoteSignerRequest.v1.schema.json`.
|
|
8
|
+
|
|
9
|
+
## Shape
|
|
10
|
+
|
|
11
|
+
- `schemaVersion` (optional): `"RemoteSignerRequest.v1"`
|
|
12
|
+
- `op`: `"publicKey"` or `"sign"`
|
|
13
|
+
- If `op === "publicKey"`:
|
|
14
|
+
- `keyId`: string
|
|
15
|
+
- If `op === "sign"`:
|
|
16
|
+
- `body`: `RemoteSignerSignRequest.v1`
|
|
17
|
+
|
|
18
|
+
## Determinism + safety
|
|
19
|
+
|
|
20
|
+
- Requests must be **purpose-bound** (see `RemoteSignerSignRequest.v1`).
|
|
21
|
+
- Producers must treat this as a pure signing oracle interface; secrets must never be embedded in bundles.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# RemoteSignerResponse.v1 (tooling contract)
|
|
2
|
+
|
|
3
|
+
This document defines the **stdio wrapper** response shape for delegated signing.
|
|
4
|
+
|
|
5
|
+
Schema: `docs/spec/schemas/RemoteSignerResponse.v1.schema.json`.
|
|
6
|
+
|
|
7
|
+
## Shape
|
|
8
|
+
|
|
9
|
+
- A `RemoteSignerResponse.v1` is one of:
|
|
10
|
+
- `RemoteSignerPublicKeyResponse.v1` (for `op=publicKey` requests)
|
|
11
|
+
- `RemoteSignerSignResponse.v1` (for `op=sign` requests)
|
|
12
|
+
|
|
13
|
+
## Notes
|
|
14
|
+
|
|
15
|
+
- Stdio signers should return a non-zero exit code on failure and write a concise error to stderr.
|
|
16
|
+
- Producers must not depend on stderr text for behavior; only structured JSON should be treated as a stable contract.
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# ReputationEvent.v1
|
|
2
|
+
|
|
3
|
+
`ReputationEvent.v1` is an append-only, deterministic artifact for recording economic reputation facts tied to settlement and dispute lifecycle changes.
|
|
4
|
+
|
|
5
|
+
It is intentionally facts-first: consumers aggregate event streams into scores and risk models without mutating historical records.
|
|
6
|
+
|
|
7
|
+
## Fields
|
|
8
|
+
|
|
9
|
+
Required:
|
|
10
|
+
|
|
11
|
+
- `schemaVersion` (const: `ReputationEvent.v1`)
|
|
12
|
+
- `artifactType` (const: `ReputationEvent.v1`)
|
|
13
|
+
- `artifactId` (must equal `eventId`)
|
|
14
|
+
- `eventId` (deterministic ID)
|
|
15
|
+
- `tenantId`
|
|
16
|
+
- `occurredAt` (ISO datetime)
|
|
17
|
+
- `eventKind`
|
|
18
|
+
- `decision_approved`
|
|
19
|
+
- `decision_rejected`
|
|
20
|
+
- `holdback_auto_released`
|
|
21
|
+
- `dispute_opened`
|
|
22
|
+
- `verdict_issued`
|
|
23
|
+
- `adjustment_applied`
|
|
24
|
+
- `subject`
|
|
25
|
+
- `agentId` (reputation subject)
|
|
26
|
+
- optional `toolId`
|
|
27
|
+
- optional `counterpartyAgentId`
|
|
28
|
+
- optional `role` (`payee|payer|arbiter|system`)
|
|
29
|
+
- `sourceRef`
|
|
30
|
+
- `kind` (producer-defined reference namespace)
|
|
31
|
+
- optional stable references (`artifactId`, `sourceId`, `hash`, `agreementHash`, `receiptHash`, `holdHash`, `decisionHash`, `verdictHash`, `runId`, `settlementId`, `disputeId`, `caseId`, `adjustmentId`)
|
|
32
|
+
- must include at least one stable reference besides `kind`
|
|
33
|
+
- `facts` (object; structured event facts used for aggregation)
|
|
34
|
+
- `eventHash` (sha256 hex over immutable event core)
|
|
35
|
+
|
|
36
|
+
Optional fields are omitted when absent.
|
|
37
|
+
|
|
38
|
+
## Hashing
|
|
39
|
+
|
|
40
|
+
`eventHash` is computed as sha256 of RFC 8785 canonical JSON excluding:
|
|
41
|
+
|
|
42
|
+
- `eventHash`
|
|
43
|
+
- `artifactHash` (storage-level hash, if present)
|
|
44
|
+
|
|
45
|
+
## Deterministic ID Conventions
|
|
46
|
+
|
|
47
|
+
Recommended deterministic IDs for kernel v0 conformance:
|
|
48
|
+
|
|
49
|
+
- decision: `rep_dec_${decisionHash}`
|
|
50
|
+
- holdback auto-release: `rep_rel_${agreementHash}`
|
|
51
|
+
- dispute opened: `rep_dsp_${agreementHash}`
|
|
52
|
+
- verdict issued: `rep_vrd_${verdictHash}`
|
|
53
|
+
- adjustment applied: `rep_adj_${adjustmentId}`
|
|
54
|
+
|
|
55
|
+
## Invariants
|
|
56
|
+
|
|
57
|
+
- Events are append-only and immutable.
|
|
58
|
+
- Re-issuing the same event source must produce the same `eventId` and `eventHash`.
|
|
59
|
+
- Persistence must treat duplicate `eventId` with same hash as idempotent.
|
|
60
|
+
|
|
61
|
+
## Schema
|
|
62
|
+
|
|
63
|
+
See `docs/spec/schemas/ReputationEvent.v1.schema.json`.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# RevocationList.v1
|
|
2
|
+
|
|
3
|
+
This document provides **prospective** revocation and rotation semantics for signer keys, while preserving historical acceptance when a verifier can prove the signing time.
|
|
4
|
+
|
|
5
|
+
## File location (bundles)
|
|
6
|
+
|
|
7
|
+
`governance/revocations.json`
|
|
8
|
+
|
|
9
|
+
This file is included in the bundle manifest (i.e., it is part of the immutable payload), and it is intentionally **not** under `verify/**`.
|
|
10
|
+
|
|
11
|
+
## Schema
|
|
12
|
+
|
|
13
|
+
See `schemas/RevocationList.v1.schema.json`.
|
|
14
|
+
|
|
15
|
+
## Semantics (v1)
|
|
16
|
+
|
|
17
|
+
- `revocations[]` declares a key as revoked at `revokedAt`.
|
|
18
|
+
- `rotations[]` declares that an old key is superseded at `rotatedAt` and a new key becomes valid from that time.
|
|
19
|
+
|
|
20
|
+
Strict verification rule:
|
|
21
|
+
|
|
22
|
+
- A key revoked at time **T** is NOT acceptable for signatures made at or after **T**.
|
|
23
|
+
- A signature made before **T** remains acceptable **only if** the bundle contains a trustworthy signing time for that signature (see `TimestampProof.v1`).
|
|
24
|
+
|
|
25
|
+
## Signing + trust (strict verification)
|
|
26
|
+
|
|
27
|
+
`RevocationList.v1` is signed by a governance root key (trusted out-of-band by the verifier).
|
|
28
|
+
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Signer provider plugins (tooling contract)
|
|
2
|
+
|
|
3
|
+
Signer provider plugins extend `settld-produce` with custom key custody and signing implementations (KMS/HSM/Vault/remote approval flows) without changing bundle protocol objects.
|
|
4
|
+
|
|
5
|
+
This is a **tooling** contract (not protocol v1). Verifiers remain unchanged.
|
|
6
|
+
|
|
7
|
+
## CLI usage
|
|
8
|
+
|
|
9
|
+
`settld-produce --signer plugin --signer-plugin <path|package> [--signer-plugin-export createSignerProvider] [--signer-plugin-config <json>] --gov-key-id <id> --server-key-id <id> ...`
|
|
10
|
+
|
|
11
|
+
## Plugin contract
|
|
12
|
+
|
|
13
|
+
Your plugin must export a function (default name: `createSignerProvider`):
|
|
14
|
+
|
|
15
|
+
- Signature: `async createSignerProvider({ config, env }) -> provider`
|
|
16
|
+
|
|
17
|
+
Where `provider` is an object implementing:
|
|
18
|
+
|
|
19
|
+
- `async getPublicKeyPem({ keyId }) -> publicKeyPem`
|
|
20
|
+
- `async sign({ keyId, algorithm, messageBytes, purpose, context }) -> { signatureBase64, signerReceipt? }`
|
|
21
|
+
|
|
22
|
+
Notes:
|
|
23
|
+
|
|
24
|
+
- `messageBytes` are the exact bytes to sign (typically 32 bytes: sha256 of canonical JSON).
|
|
25
|
+
- `purpose` is required and must be enforced by the provider (refuse unknown purposes).
|
|
26
|
+
- Do not log or return private key material.
|
|
27
|
+
|
|
28
|
+
## Packaging guidance
|
|
29
|
+
|
|
30
|
+
- If `--signer-plugin` is a path, it is resolved relative to the current working directory.
|
|
31
|
+
- If `--signer-plugin` is a package name, it must be resolvable via Node module resolution (installed in the environment where `settld-produce` runs).
|
|
32
|
+
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# Strict vs Non-Strict Verification
|
|
2
|
+
|
|
3
|
+
This document defines the **compatibility contract** for verifier behavior.
|
|
4
|
+
|
|
5
|
+
## Definitions
|
|
6
|
+
|
|
7
|
+
- **Strict mode**: missing/invalid protocol surfaces are hard failures.
|
|
8
|
+
- **Non-strict mode**: verifier performs best-effort verification and emits **warnings** for legacy or incomplete bundles, but still rejects tampering (e.g., manifest hash mismatch, file hash mismatch).
|
|
9
|
+
|
|
10
|
+
## Contract matrix (v1 protocol era)
|
|
11
|
+
|
|
12
|
+
### Proof bundles (JobProofBundle.v1, MonthProofBundle.v1)
|
|
13
|
+
|
|
14
|
+
| Surface | Strict | Non-strict |
|
|
15
|
+
|---|---:|---:|
|
|
16
|
+
| `manifest.json` present + `manifestHash` correct | required (fail) | required (fail) |
|
|
17
|
+
| `manifest.json` file hashes correct | required (fail) | required (fail) |
|
|
18
|
+
| trusted governance root keys provided out-of-band | required (fail) | best-effort (warn + continue) |
|
|
19
|
+
| `governance/policy.json` present | required (fail) | best-effort (warn + continue) |
|
|
20
|
+
| `governance/policy.json` version | **must be `GovernancePolicy.v2`** (fail) | allow `GovernancePolicy.v1` (warn + continue) |
|
|
21
|
+
| `governance/policy.json` signature (governance root) | required (fail) | not required (no check) |
|
|
22
|
+
| `governance/revocations.json` present + signature | required (fail) | not required (no check) |
|
|
23
|
+
| `attestation/bundle_head_attestation.json` present + valid | required (fail) | best-effort (warn + continue) |
|
|
24
|
+
| `verify/verification_report.json` present + signed | required (fail) | best-effort (warn + continue if missing; verify if present) |
|
|
25
|
+
|
|
26
|
+
### Finance packs (FinancePackBundle.v1)
|
|
27
|
+
|
|
28
|
+
| Surface | Strict | Non-strict |
|
|
29
|
+
|---|---:|---:|
|
|
30
|
+
| `manifest.json` present + `manifestHash` correct | required (fail) | required (fail) |
|
|
31
|
+
| `manifest.json` file hashes correct | required (fail) | required (fail) |
|
|
32
|
+
| trusted governance root keys provided out-of-band | required (fail) | best-effort (warn + continue) |
|
|
33
|
+
| `governance/policy.json` present | required (fail) | best-effort (warn + continue) |
|
|
34
|
+
| `governance/policy.json` version | **must be `GovernancePolicy.v2`** (fail) | allow `GovernancePolicy.v1` (warn + continue) |
|
|
35
|
+
| `governance/policy.json` signature (governance root) | required (fail) | not required (no check) |
|
|
36
|
+
| `governance/revocations.json` present + signature | required (fail) | not required (no check) |
|
|
37
|
+
| `attestation/bundle_head_attestation.json` present + valid | required (fail) | best-effort (warn + continue) |
|
|
38
|
+
| `verify/verification_report.json` present + signed | required (fail) | best-effort (warn + continue if missing; verify if present) |
|
|
39
|
+
|
|
40
|
+
### Invoice bundles (InvoiceBundle.v1)
|
|
41
|
+
|
|
42
|
+
| Surface | Strict | Non-strict |
|
|
43
|
+
|---|---:|---:|
|
|
44
|
+
| `manifest.json` present + `manifestHash` correct | required (fail) | required (fail) |
|
|
45
|
+
| `manifest.json` file hashes correct | required (fail) | required (fail) |
|
|
46
|
+
| trusted governance root keys provided out-of-band | required (fail) | best-effort (warn + continue) |
|
|
47
|
+
| `governance/policy.json` present | required (fail) | best-effort (warn + continue) |
|
|
48
|
+
| `governance/policy.json` version | **must be `GovernancePolicy.v2`** (fail) | allow `GovernancePolicy.v1` (warn + continue) |
|
|
49
|
+
| `governance/policy.json` signature (governance root) | required (fail) | not required (no check) |
|
|
50
|
+
| `governance/revocations.json` present + signature | required (fail) | not required (no check) |
|
|
51
|
+
| `attestation/bundle_head_attestation.json` present + valid | required (fail) | best-effort (warn + continue) |
|
|
52
|
+
| `verify/verification_report.json` present + signed | required (fail) | best-effort (warn + continue if missing; verify if present) |
|
|
53
|
+
| `pricing/pricing_matrix_signatures.json` present + valid buyer signature(s) (`PricingMatrixSignatures.v2` required; `PricingMatrixSignatures.v1` legacy accepted only non-strict with `WARN_PRICING_SIGNATURE_V1_BYTES_LEGACY`) | required (fail) | best-effort (warn + continue if missing) |
|
|
54
|
+
|
|
55
|
+
### Close packs (ClosePack.v1)
|
|
56
|
+
|
|
57
|
+
| Surface | Strict | Non-strict |
|
|
58
|
+
|---|---:|---:|
|
|
59
|
+
| ClosePack `manifest.json` present + `manifestHash` correct | required (fail) | required (fail) |
|
|
60
|
+
| ClosePack manifest file hashes correct | required (fail) | required (fail) |
|
|
61
|
+
| trusted governance root keys provided out-of-band | required (fail) | best-effort (warn + continue) |
|
|
62
|
+
| ClosePack governance policy surfaces | required (fail) | best-effort (warn + continue) |
|
|
63
|
+
| ClosePack head attestation present + valid | required (fail) | best-effort (warn + continue) |
|
|
64
|
+
| ClosePack verification report present + signed | required (fail) | best-effort (warn + continue if missing; verify if present) |
|
|
65
|
+
| embedded `payload/invoice_bundle/**` strictly verifies under same posture | required (fail) | required (fail) |
|
|
66
|
+
| `evidence/evidence_index.json` present + matches deterministic recomputation | required (fail) | required (fail) |
|
|
67
|
+
| SLA evaluation surfaces (`sla/*`) | optional; if present must recompute + match | optional; missing emits `CLOSE_PACK_SLA_SURFACES_MISSING_LENIENT` |
|
|
68
|
+
| acceptance evaluation surfaces (`acceptance/*`) | optional; if present must recompute + match | optional; missing emits `CLOSE_PACK_ACCEPTANCE_SURFACES_MISSING_LENIENT` |
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Supply chain: releases
|
|
2
|
+
|
|
3
|
+
This doc describes what Settld release authenticity *does* and *does not* guarantee.
|
|
4
|
+
|
|
5
|
+
## Threat model (release channel)
|
|
6
|
+
|
|
7
|
+
### Assets
|
|
8
|
+
|
|
9
|
+
- Authenticity of published release artifacts (`*.tgz`, conformance pack, audit packet, etc.)
|
|
10
|
+
- Integrity of the mapping: “this tool install corresponds to this commit/release”
|
|
11
|
+
|
|
12
|
+
### Attacks prevented (assuming release signing key not compromised)
|
|
13
|
+
|
|
14
|
+
- Artifact swap: attacker replaces one or more release artifacts after build
|
|
15
|
+
- Checksum swap: attacker replaces artifacts *and* checksums together
|
|
16
|
+
- CI compromise without release key access: attacker can run arbitrary steps but cannot forge a valid `ReleaseIndex.v1` signature
|
|
17
|
+
|
|
18
|
+
### Attacks not prevented
|
|
19
|
+
|
|
20
|
+
- Release signing key compromise (attacker can sign malicious artifacts)
|
|
21
|
+
- Compromised dependency supply chain *before* release build (mitigated by lockfiles/SBOM, not eliminated)
|
|
22
|
+
|
|
23
|
+
## Operational response
|
|
24
|
+
|
|
25
|
+
If the release signing key is suspected compromised:
|
|
26
|
+
|
|
27
|
+
- Rotate the release signing key and publish an updated `ReleaseTrust.v2` (and revoke the compromised key).
|
|
28
|
+
- Publish a security advisory describing impacted releases and mitigation steps.
|
|
29
|
+
|
|
30
|
+
## How to verify a release (high-level)
|
|
31
|
+
|
|
32
|
+
1. Verify `release_index_v1.sig` against `release_index_v1.json` using a trusted `ReleaseTrust.v2`.
|
|
33
|
+
2. Verify each artifact’s `sha256` matches the index.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# SettlementAdjustment.v1
|
|
2
|
+
|
|
3
|
+
`SettlementAdjustment.v1` is a deterministic, idempotent adjustment artifact that applies a single escrow operation against funds held in a related `FundingHold.v1`.
|
|
4
|
+
|
|
5
|
+
Sprint 21 uses exactly one adjustment per `agreementHash` for tool-call holdback disputes.
|
|
6
|
+
|
|
7
|
+
## Fields
|
|
8
|
+
|
|
9
|
+
Required:
|
|
10
|
+
|
|
11
|
+
- `schemaVersion` (const: `SettlementAdjustment.v1`)
|
|
12
|
+
- `adjustmentId` (deterministic ID; for tool-call holdback: `sadj_agmt_${agreementHash}_holdback`)
|
|
13
|
+
- `tenantId`
|
|
14
|
+
- `agreementHash` (sha256 hex)
|
|
15
|
+
- `receiptHash` (sha256 hex)
|
|
16
|
+
- `holdHash` (sha256 hex)
|
|
17
|
+
- `kind` (`holdback_release|holdback_refund`)
|
|
18
|
+
- `amountCents` (non-negative int; must be `<= heldAmountCents` at application time)
|
|
19
|
+
- `currency`
|
|
20
|
+
- `createdAt` (ISO datetime)
|
|
21
|
+
- `adjustmentHash` (sha256 hex; computed from immutable core)
|
|
22
|
+
|
|
23
|
+
Optional:
|
|
24
|
+
|
|
25
|
+
- `verdictRef`:
|
|
26
|
+
- `caseId`
|
|
27
|
+
- `verdictHash` (sha256 hex)
|
|
28
|
+
- `metadata` (implementation-defined JSON object)
|
|
29
|
+
|
|
30
|
+
## Hashing
|
|
31
|
+
|
|
32
|
+
`adjustmentHash` is computed as sha256 of the RFC 8785 canonical JSON of the core object excluding:
|
|
33
|
+
|
|
34
|
+
- `adjustmentHash`
|
|
35
|
+
- `metadata`
|
|
36
|
+
|
|
37
|
+
## Invariants
|
|
38
|
+
|
|
39
|
+
- Adjustments must operate on held escrow funds only (no negative balances, no external clawbacks).
|
|
40
|
+
- Persistence must enforce uniqueness for `adjustmentId` per tenant; duplicates must be treated as idempotent retries returning the existing adjustment.
|
|
41
|
+
|
|
42
|
+
## Schema
|
|
43
|
+
|
|
44
|
+
See `docs/spec/schemas/SettlementAdjustment.v1.schema.json`.
|
|
45
|
+
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# SettlementDecisionRecord.v1
|
|
2
|
+
|
|
3
|
+
`SettlementDecisionRecord.v1` is the canonical decision artifact for an `AgentRunSettlement.v1` state transition.
|
|
4
|
+
|
|
5
|
+
It binds one settlement decision to:
|
|
6
|
+
|
|
7
|
+
- the settlement principal (`settlementId`, `runId`, `tenantId`),
|
|
8
|
+
- the governing policy/verifier references,
|
|
9
|
+
- and the execution lineage (`runLastEventId`, `runLastChainHash`, `resolutionEventId`).
|
|
10
|
+
|
|
11
|
+
## Purpose
|
|
12
|
+
|
|
13
|
+
- make settlement decisions replayable and attributable;
|
|
14
|
+
- bind payout/refund decisions to specific run/settlement lineage;
|
|
15
|
+
- provide a stable hash (`decisionHash`) for downstream receipt binding.
|
|
16
|
+
|
|
17
|
+
## Required fields
|
|
18
|
+
|
|
19
|
+
- `schemaVersion` (const: `SettlementDecisionRecord.v1`)
|
|
20
|
+
- `decisionId`
|
|
21
|
+
- `tenantId`
|
|
22
|
+
- `runId`
|
|
23
|
+
- `settlementId`
|
|
24
|
+
- `decisionStatus`
|
|
25
|
+
- `decisionMode`
|
|
26
|
+
- `policyRef`
|
|
27
|
+
- `verifierRef`
|
|
28
|
+
- `workRef`
|
|
29
|
+
- `decidedAt`
|
|
30
|
+
- `decisionHash`
|
|
31
|
+
|
|
32
|
+
Optional fields:
|
|
33
|
+
|
|
34
|
+
- `agreementId`
|
|
35
|
+
- `decisionReason`
|
|
36
|
+
- `verificationStatus`
|
|
37
|
+
|
|
38
|
+
## Canonicalization and hashing
|
|
39
|
+
|
|
40
|
+
`decisionHash` is computed over canonical JSON after removing `decisionHash` from the object:
|
|
41
|
+
|
|
42
|
+
1. canonicalize JSON with RFC 8785 (JCS),
|
|
43
|
+
2. hash canonical UTF-8 bytes using `sha256`,
|
|
44
|
+
3. encode as lowercase hex.
|
|
45
|
+
|
|
46
|
+
## Schema
|
|
47
|
+
|
|
48
|
+
See `schemas/SettlementDecisionRecord.v1.schema.json`.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# SettlementDecisionRecord.v2
|
|
2
|
+
|
|
3
|
+
`SettlementDecisionRecord.v2` is the canonical decision artifact for an `AgentRunSettlement.v1` state transition.
|
|
4
|
+
|
|
5
|
+
It is identical in semantic intent to `SettlementDecisionRecord.v1`, but adds **replay-critical policy pinning** so decisions can be re-evaluated deterministically from protocol artifacts alone.
|
|
6
|
+
|
|
7
|
+
## Purpose
|
|
8
|
+
|
|
9
|
+
- make settlement decisions replayable and attributable;
|
|
10
|
+
- bind payout/refund decisions to specific run/settlement lineage;
|
|
11
|
+
- provide a stable hash (`decisionHash`) for downstream receipt binding;
|
|
12
|
+
- pin the **exact policy hash used** during evaluation (`policyHashUsed`).
|
|
13
|
+
|
|
14
|
+
## Required fields
|
|
15
|
+
|
|
16
|
+
- `schemaVersion` (const: `SettlementDecisionRecord.v2`)
|
|
17
|
+
- all required fields from `SettlementDecisionRecord.v1`
|
|
18
|
+
- `policyHashUsed` (sha256 hex, lowercase)
|
|
19
|
+
|
|
20
|
+
Optional fields:
|
|
21
|
+
|
|
22
|
+
- all optional fields from `SettlementDecisionRecord.v1`
|
|
23
|
+
- `policyNormalizationVersion` (string; OPTIONAL; v2 emitters SHOULD include this to pin the normalization algorithm used to compute `policyHashUsed`)
|
|
24
|
+
- `profileHashUsed` (sha256 hex, lowercase; OPTIONAL; emit when an authorization/policy profile fingerprint is available, for example `bindings.spendAuthorization.policyFingerprint`)
|
|
25
|
+
- `verificationMethodHashUsed` (sha256 hex, lowercase; OPTIONAL; omit when absent)
|
|
26
|
+
- `bindings` (object; OPTIONAL) - settlement receipt trail bindings for gateway-style flows:
|
|
27
|
+
- `authorizationRef`
|
|
28
|
+
- `token` (`kid`, `sha256`, `expiresAt`)
|
|
29
|
+
- `request` (`sha256`)
|
|
30
|
+
- `response` (`status`, `sha256`)
|
|
31
|
+
- `providerSig` (`required`, `present`, `verified`, `providerKeyId`, `error`)
|
|
32
|
+
- `reserve` (`adapter`, `mode`, `reserveId`, `status`)
|
|
33
|
+
- `policyDecisionFingerprint` (`fingerprintVersion`, `policyId`, `policyVersion`, `policyHash`, `verificationMethodHash`, `evaluationHash`)
|
|
34
|
+
|
|
35
|
+
## Policy pinning rules
|
|
36
|
+
|
|
37
|
+
- `policyHashUsed` MUST be the hash of the normalized policy object actually evaluated.
|
|
38
|
+
- If the evaluated policy is carried inline (for example, in an agreement payload), `policyHashUsed` MUST match the normalized inline policy payload.
|
|
39
|
+
- If the policy is resolved from a policy registry, `policyHashUsed` MUST match the policy payload referenced by the registry entry.
|
|
40
|
+
- `profileHashUsed`, when present, MUST be the hash of the concrete profile/fingerprint material used to authorize or constrain policy evaluation for this decision.
|
|
41
|
+
- `verificationMethodHashUsed` SHOULD be set when verifier selection depends on an explicit verification method payload.
|
|
42
|
+
|
|
43
|
+
## Canonicalization and hashing
|
|
44
|
+
|
|
45
|
+
`decisionHash` is computed over canonical JSON after removing `decisionHash` from the object:
|
|
46
|
+
|
|
47
|
+
1. canonicalize JSON with RFC 8785 (JCS),
|
|
48
|
+
2. hash canonical UTF-8 bytes using `sha256`,
|
|
49
|
+
3. encode as lowercase hex.
|
|
50
|
+
|
|
51
|
+
## Schema
|
|
52
|
+
|
|
53
|
+
See `schemas/SettlementDecisionRecord.v2.schema.json`.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# SettlementDecisionReport.v1
|
|
2
|
+
|
|
3
|
+
`SettlementDecisionReport.v1` is a canonical JSON object that records a buyer’s **Approve/Hold** decision for a specific `InvoiceBundle.v1`.
|
|
4
|
+
|
|
5
|
+
It is intended to be archived alongside the invoice bundle zip and re-verified later **offline** (without access to the hosted service).
|
|
6
|
+
|
|
7
|
+
## Purpose
|
|
8
|
+
|
|
9
|
+
- Provide a portable, cryptographically verifiable receipt of a buyer decision.
|
|
10
|
+
- Bind the decision to a specific invoice bundle instance (mix-and-match defense).
|
|
11
|
+
- Capture the effective hosted verification posture and result summary the decision was made under.
|
|
12
|
+
|
|
13
|
+
## Core fields
|
|
14
|
+
|
|
15
|
+
- `schemaVersion = "SettlementDecisionReport.v1"`
|
|
16
|
+
- `decision`: `"approve"` or `"hold"`
|
|
17
|
+
- `decidedAt`: ISO timestamp of the decision action
|
|
18
|
+
- `invoiceBundle` (binding target):
|
|
19
|
+
- `manifestHash`: invoice bundle manifest hash
|
|
20
|
+
- `headAttestationHash`: invoice bundle head attestation hash
|
|
21
|
+
- `policy`: effective policy snapshot (requiredMode / failOnWarnings / allowAmberApprovals / requiredPricingMatrixSignerKeyIds / etc.)
|
|
22
|
+
- `verification`: summary slice of the hosted verification output (stable codes)
|
|
23
|
+
- `tool`: `{ name, version, commit }` (best-effort provenance for the hosted verifier build)
|
|
24
|
+
- `actor` (optional): service-level claims about who clicked approve/hold (e.g., email, auth method)
|
|
25
|
+
|
|
26
|
+
## Report hash + signature
|
|
27
|
+
|
|
28
|
+
- `reportHash` is computed over the canonical JSON object with `reportHash`, `signature`, `signerKeyId`, and `signedAt` removed.
|
|
29
|
+
- If the report is signed, it includes:
|
|
30
|
+
- `signature` (base64 Ed25519 signature)
|
|
31
|
+
- `signerKeyId`
|
|
32
|
+
- `signedAt`
|
|
33
|
+
|
|
34
|
+
Signature algorithm:
|
|
35
|
+
|
|
36
|
+
- The signed message is the bytes of the 32-byte sha256 digest (`reportHash` hex decoded).
|
|
37
|
+
- Algorithm: Ed25519.
|
|
38
|
+
|
|
39
|
+
## Trust anchors (out-of-band)
|
|
40
|
+
|
|
41
|
+
To verify a settlement decision report, the verifier needs trusted buyer decision signer public keys out-of-band.
|
|
42
|
+
|
|
43
|
+
See `TRUST_ANCHORS.md`.
|
|
44
|
+
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# SettlementKernel.v1
|
|
2
|
+
|
|
3
|
+
`SettlementKernel.v1` defines the binding invariants between `AgentRunSettlement.v1`, `SettlementDecisionRecord.v1|v2`, and `SettlementReceipt.v1`.
|
|
4
|
+
|
|
5
|
+
The kernel is considered valid only when artifact hash integrity, identity binding, and temporal ordering all hold.
|
|
6
|
+
|
|
7
|
+
## Kernel invariants
|
|
8
|
+
|
|
9
|
+
- Settlement object exists and has the expected `runId`.
|
|
10
|
+
- `decisionRecord` exists and has a valid `decisionHash` (`sha256` over canonical JSON without `decisionHash`).
|
|
11
|
+
- `decisionRecord.runId` and `decisionRecord.settlementId` match settlement.
|
|
12
|
+
- `settlementReceipt` exists and has a valid `receiptHash` (`sha256` over canonical JSON without `receiptHash`).
|
|
13
|
+
- `settlementReceipt.runId` and `settlementReceipt.settlementId` match settlement.
|
|
14
|
+
- `settlementReceipt.decisionRef` must exist and bind to `decisionRecord` (`decisionId` + `decisionHash`).
|
|
15
|
+
- Temporal ordering must hold:
|
|
16
|
+
- `decisionRecord.decidedAt` is valid ISO date-time.
|
|
17
|
+
- `settlementReceipt.createdAt` is valid ISO date-time.
|
|
18
|
+
- `settlementReceipt.settledAt`, when present, is valid ISO date-time.
|
|
19
|
+
- `settlementReceipt.createdAt >= decisionRecord.decidedAt`.
|
|
20
|
+
- `settlementReceipt.settledAt >= decisionRecord.decidedAt` (when present).
|
|
21
|
+
- `settlementReceipt.settledAt >= settlementReceipt.createdAt` (when present).
|
|
22
|
+
|
|
23
|
+
## Verification error code semantics
|
|
24
|
+
|
|
25
|
+
When kernel verification fails, implementations return one or more stable codes:
|
|
26
|
+
|
|
27
|
+
- `settlement_missing`
|
|
28
|
+
- `settlement_run_id_mismatch`
|
|
29
|
+
- `decision_record_missing`
|
|
30
|
+
- `decision_record_hash_invalid`
|
|
31
|
+
- `decision_record_hash_mismatch`
|
|
32
|
+
- `decision_record_run_id_mismatch`
|
|
33
|
+
- `decision_record_settlement_id_mismatch`
|
|
34
|
+
- `settlement_receipt_missing`
|
|
35
|
+
- `settlement_receipt_hash_invalid`
|
|
36
|
+
- `settlement_receipt_hash_mismatch`
|
|
37
|
+
- `settlement_receipt_run_id_mismatch`
|
|
38
|
+
- `settlement_receipt_settlement_id_mismatch`
|
|
39
|
+
- `settlement_receipt_decision_ref_missing`
|
|
40
|
+
- `settlement_receipt_decision_id_mismatch`
|
|
41
|
+
- `settlement_receipt_decision_hash_mismatch`
|
|
42
|
+
- `decision_record_decided_at_invalid`
|
|
43
|
+
- `settlement_receipt_created_at_invalid`
|
|
44
|
+
- `settlement_receipt_settled_at_invalid`
|
|
45
|
+
- `settlement_receipt_before_decision`
|
|
46
|
+
- `settlement_receipt_settled_before_decision`
|
|
47
|
+
- `settlement_receipt_settled_before_created`
|
|
48
|
+
|
|
49
|
+
## API-level enforcement
|
|
50
|
+
|
|
51
|
+
- Settlement mutation routes reject invalid bindings with:
|
|
52
|
+
- HTTP `409`
|
|
53
|
+
- error code `SETTLEMENT_KERNEL_BINDING_INVALID`
|
|
54
|
+
- `details.errors[]` containing kernel verification codes above.
|
|
55
|
+
|
|
56
|
+
- `/ops/network/command-center` exposes settlement-kernel health via:
|
|
57
|
+
- `commandCenter.settlement.kernelVerificationErrorCount`
|
|
58
|
+
- `commandCenter.settlement.kernelVerificationErrorCountsByCode[]`
|
|
59
|
+
- alert type `settlement_kernel_verification_error_code` when configured thresholds are breached.
|