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,90 @@
|
|
|
1
|
+
# OperatorAction.v1
|
|
2
|
+
|
|
3
|
+
`OperatorAction.v1` is the canonical operator-evidence artifact used for high-risk control actions.
|
|
4
|
+
|
|
5
|
+
It captures who acted, which case was affected, what action was taken, and why. The signed form binds this surface to an Ed25519 signature for offline verification.
|
|
6
|
+
|
|
7
|
+
## Purpose
|
|
8
|
+
|
|
9
|
+
`OperatorAction.v1` enables:
|
|
10
|
+
|
|
11
|
+
- deterministic replay/audit of emergency operator decisions,
|
|
12
|
+
- hash-based tamper detection over a frozen action surface,
|
|
13
|
+
- stable verification codes for schema/key/hash/signature failures.
|
|
14
|
+
|
|
15
|
+
## Emergency RBAC + dual-control policy
|
|
16
|
+
|
|
17
|
+
For `/ops/emergency/*` actions, `OperatorAction.v1` is evaluated against runtime authorization policy:
|
|
18
|
+
|
|
19
|
+
- Role matrix:
|
|
20
|
+
- `pause|quarantine`: `oncall|ops_admin|incident_commander`
|
|
21
|
+
- `revoke|kill-switch`: `ops_admin|incident_commander`
|
|
22
|
+
- `resume`: follows the strictest targeted control class (`ops_admin|incident_commander` when resuming `revoke|kill-switch`)
|
|
23
|
+
- Dual-control:
|
|
24
|
+
- `revoke|kill-switch` class actions require both `operatorAction` and `secondOperatorAction`.
|
|
25
|
+
- The two approvals must be from distinct `actor.operatorId` and distinct `signature.keyId`.
|
|
26
|
+
- Missing or non-distinct second approvals fail closed.
|
|
27
|
+
|
|
28
|
+
## Required fields
|
|
29
|
+
|
|
30
|
+
- `schemaVersion` (const: `OperatorAction.v1`)
|
|
31
|
+
- `caseRef`
|
|
32
|
+
- `kind` (`challenge|dispute|escalation`)
|
|
33
|
+
- `caseId`
|
|
34
|
+
- `action` (`APPROVE|REJECT|REQUEST_INFO|OVERRIDE_ALLOW|OVERRIDE_DENY`)
|
|
35
|
+
- `justificationCode` (uppercase machine token)
|
|
36
|
+
- `actor`
|
|
37
|
+
- `operatorId`
|
|
38
|
+
- `actedAt` (ISO 8601 date-time)
|
|
39
|
+
|
|
40
|
+
Optional:
|
|
41
|
+
|
|
42
|
+
- `actionId`
|
|
43
|
+
- `justification`
|
|
44
|
+
- `actor.role` (lowercase token)
|
|
45
|
+
- `actor.tenantId`
|
|
46
|
+
- `actor.sessionId`
|
|
47
|
+
- `actor.metadata`
|
|
48
|
+
- `metadata`
|
|
49
|
+
- `signature`
|
|
50
|
+
- `schemaVersion` (const: `OperatorActionSignature.v1`)
|
|
51
|
+
- `algorithm` (const: `ed25519`)
|
|
52
|
+
- `keyId`
|
|
53
|
+
- `signedAt` (ISO 8601 date-time)
|
|
54
|
+
- `actionHash` (`sha256` hex)
|
|
55
|
+
- `signatureBase64`
|
|
56
|
+
|
|
57
|
+
Optional fields MUST be omitted when absent (not `null`) unless explicitly allowed by schema.
|
|
58
|
+
|
|
59
|
+
## Canonicalization + hashing
|
|
60
|
+
|
|
61
|
+
`actionHash` is computed over canonical JSON (RFC 8785 / JCS) of the unsigned `OperatorAction.v1` object.
|
|
62
|
+
|
|
63
|
+
Hash algorithm: `sha256` over canonical UTF-8 bytes, lowercase hex output.
|
|
64
|
+
|
|
65
|
+
`actionHash` is carried inside `signature.actionHash` in the signed envelope.
|
|
66
|
+
|
|
67
|
+
## Signing and verification
|
|
68
|
+
|
|
69
|
+
Signing (`signOperatorActionV1`) attaches a `signature` object and signs `actionHash` using Ed25519.
|
|
70
|
+
|
|
71
|
+
Verification (`verifyOperatorActionV1`) enforces:
|
|
72
|
+
|
|
73
|
+
1. `action.schemaVersion === OperatorAction.v1`,
|
|
74
|
+
2. `action.signature.schemaVersion === OperatorActionSignature.v1`,
|
|
75
|
+
3. `signature.keyId` matches the expected public key id,
|
|
76
|
+
4. `signature.actionHash` equals recomputed hash,
|
|
77
|
+
5. Ed25519 signature verification succeeds.
|
|
78
|
+
|
|
79
|
+
Failures return stable codes such as:
|
|
80
|
+
|
|
81
|
+
- `OPERATOR_ACTION_SCHEMA_MISMATCH`
|
|
82
|
+
- `OPERATOR_ACTION_SIGNATURE_SCHEMA_MISMATCH`
|
|
83
|
+
- `OPERATOR_ACTION_KEY_ID_MISMATCH`
|
|
84
|
+
- `OPERATOR_ACTION_HASH_MISMATCH`
|
|
85
|
+
- `OPERATOR_ACTION_SIGNATURE_INVALID`
|
|
86
|
+
- `OPERATOR_ACTION_SCHEMA_INVALID`
|
|
87
|
+
|
|
88
|
+
## Schema
|
|
89
|
+
|
|
90
|
+
See `docs/spec/schemas/OperatorAction.v1.schema.json`.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Producer error codes (tooling contract)
|
|
2
|
+
|
|
3
|
+
These error codes are emitted by producer tooling such as `settld-produce` and `settld-trust` when generating bundles or initializing trust material.
|
|
4
|
+
|
|
5
|
+
These codes are a tooling/API surface (not protocol v1 bundle objects). Meanings are stable within major versions.
|
|
6
|
+
|
|
7
|
+
Canonical list: `docs/spec/producer-error-codes.v1.txt`.
|
|
8
|
+
|
|
9
|
+
## Safe details (`causeKind` / `causeCode`)
|
|
10
|
+
|
|
11
|
+
Producer machine output (`settld-produce --format json`) may include:
|
|
12
|
+
|
|
13
|
+
- `causeKind`: coarse category (`signer` | `plugin` | `verify` | `input` | `io` | `internal`)
|
|
14
|
+
- `causeCode`: stable internal failure class code (never raw exception text)
|
|
15
|
+
|
|
16
|
+
`causeCode` is best-effort and is intended for support triage, not strict automation.
|
|
17
|
+
|
|
18
|
+
## Codes
|
|
19
|
+
|
|
20
|
+
### `PRODUCE_FAILED`
|
|
21
|
+
Catch-all failure when a more specific code is not available.
|
|
22
|
+
|
|
23
|
+
### Signer/auth
|
|
24
|
+
|
|
25
|
+
- `SIGNER_AUTH_MISSING` — remote signer auth configured but token missing.
|
|
26
|
+
- `SIGNER_AUTH_FAILED` — remote signer returned 401/403.
|
|
27
|
+
- `SIGNER_TIMEOUT` — signer call timed out (HTTP or process).
|
|
28
|
+
- `SIGNER_UNREACHABLE` — signer could not be reached (network failure).
|
|
29
|
+
- `SIGNER_BAD_RESPONSE` — signer returned invalid JSON or missing required fields.
|
|
30
|
+
- `SIGNER_MESSAGE_TOO_LARGE` — signing request message exceeds max size.
|
|
31
|
+
- `SIGNER_RESPONSE_TOO_LARGE` — signer response exceeds max size.
|
|
32
|
+
|
|
33
|
+
### Plugin signer
|
|
34
|
+
|
|
35
|
+
- `SIGNER_PLUGIN_LOAD_FAILED` — plugin module could not be imported.
|
|
36
|
+
- `SIGNER_PLUGIN_MISSING_EXPORT` — requested export was missing.
|
|
37
|
+
- `SIGNER_PLUGIN_INIT_FAILED` — plugin factory threw during initialization.
|
|
38
|
+
- `SIGNER_PLUGIN_INVALID_PROVIDER` — plugin returned an invalid provider object.
|
|
39
|
+
|
|
40
|
+
### Post-produce verification
|
|
41
|
+
|
|
42
|
+
- `VERIFY_AFTER_FAILED` — `--verify-after` failed.
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# PolicyDecision.v1
|
|
2
|
+
|
|
3
|
+
`PolicyDecision.v1` is the canonical, hash-addressable policy outcome artifact for settlement decisions.
|
|
4
|
+
|
|
5
|
+
It captures the exact policy/verification inputs used for decisioning, the normalized outcome, and an optional signer envelope.
|
|
6
|
+
|
|
7
|
+
## Purpose
|
|
8
|
+
|
|
9
|
+
`PolicyDecision.v1` provides a deterministic artifact that can be:
|
|
10
|
+
|
|
11
|
+
- bound into settlement decision/receipt traces,
|
|
12
|
+
- compared across reruns/replays,
|
|
13
|
+
- verified offline using canonical JSON + hash checks.
|
|
14
|
+
|
|
15
|
+
## Required fields
|
|
16
|
+
|
|
17
|
+
- `schemaVersion` (const: `PolicyDecision.v1`)
|
|
18
|
+
- `decisionId`
|
|
19
|
+
- `tenantId`
|
|
20
|
+
- `runId`
|
|
21
|
+
- `settlementId`
|
|
22
|
+
- `policyRef`
|
|
23
|
+
- `policyId` (`string|null`)
|
|
24
|
+
- `policyVersion` (`integer|null`)
|
|
25
|
+
- `policyHash`
|
|
26
|
+
- `verificationMethodHash`
|
|
27
|
+
- `decisionMode` (`automatic|manual-review`)
|
|
28
|
+
- `verificationStatus` (lowercase token)
|
|
29
|
+
- `runStatus` (lowercase token)
|
|
30
|
+
- `shouldAutoResolve` (boolean)
|
|
31
|
+
- `settlementStatus` (lowercase token)
|
|
32
|
+
- `releaseRatePct` (0..100)
|
|
33
|
+
- `releaseAmountCents` (integer >= 0)
|
|
34
|
+
- `refundAmountCents` (integer >= 0)
|
|
35
|
+
- `reasonCodes` (deterministically ordered unique list)
|
|
36
|
+
- `evaluationHash` (`sha256` hex of normalized evaluation input)
|
|
37
|
+
- `createdAt` (ISO 8601)
|
|
38
|
+
- `policyDecisionHash`
|
|
39
|
+
|
|
40
|
+
Optional:
|
|
41
|
+
|
|
42
|
+
- `gateId`
|
|
43
|
+
- `metadata`
|
|
44
|
+
- `signature`
|
|
45
|
+
- `algorithm` (const: `ed25519`)
|
|
46
|
+
- `signerKeyId`
|
|
47
|
+
- `policyDecisionHash`
|
|
48
|
+
- `signature` (base64)
|
|
49
|
+
|
|
50
|
+
## Canonicalization + hashing
|
|
51
|
+
|
|
52
|
+
`policyDecisionHash` is computed over canonical JSON (RFC 8785 / JCS) of the full object excluding:
|
|
53
|
+
|
|
54
|
+
- `policyDecisionHash`
|
|
55
|
+
- `signature`
|
|
56
|
+
|
|
57
|
+
Hash algorithm: `sha256` over canonical UTF-8 bytes, lowercase hex output.
|
|
58
|
+
|
|
59
|
+
## Evaluation hash
|
|
60
|
+
|
|
61
|
+
`evaluationHash` is derived from a stable evaluation input surface (`PolicyDecisionEvaluationInput.v1`) containing:
|
|
62
|
+
|
|
63
|
+
- policy + verification-method hashes,
|
|
64
|
+
- normalized verification/run/settlement statuses,
|
|
65
|
+
- normalized release/refund outcomes,
|
|
66
|
+
- normalized `reasonCodes`.
|
|
67
|
+
|
|
68
|
+
This allows lightweight policy-outcome equivalence checks without rehashing the full artifact.
|
|
69
|
+
|
|
70
|
+
## Signing
|
|
71
|
+
|
|
72
|
+
When present, `signature.signature` is an Ed25519 signature over `policyDecisionHash` bytes (hex decoded), base64-encoded.
|
|
73
|
+
|
|
74
|
+
Verifiers should first validate:
|
|
75
|
+
|
|
76
|
+
- `signature.policyDecisionHash === policyDecisionHash`,
|
|
77
|
+
- `policyDecisionHash` recomputation matches object content,
|
|
78
|
+
|
|
79
|
+
then verify Ed25519 signature using `signerKeyId` resolution.
|
|
80
|
+
|
|
81
|
+
## Schema
|
|
82
|
+
|
|
83
|
+
See `docs/spec/schemas/PolicyDecision.v1.schema.json`.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# PricingMatrix.v1
|
|
2
|
+
|
|
3
|
+
This matrix is stored at `pricing/pricing_matrix.json` within Invoice bundles.
|
|
4
|
+
|
|
5
|
+
## Buyer approval (contract-grade terms)
|
|
6
|
+
|
|
7
|
+
Pricing terms may be buyer-approved via a detached signature surface:
|
|
8
|
+
|
|
9
|
+
- `pricing/pricing_matrix_signatures.json` (`PricingMatrixSignatures.v2` recommended)
|
|
10
|
+
|
|
11
|
+
New bundles SHOULD use `PricingMatrixSignatures.v2` (canonical JSON binding; formatting-independent).
|
|
12
|
+
|
|
13
|
+
See:
|
|
14
|
+
|
|
15
|
+
- `PricingMatrixSignatures.v2.md`
|
|
16
|
+
- `PricingMatrixSignatures.v1.md` (legacy; binds to raw file bytes)
|
|
17
|
+
|
|
18
|
+
## Numeric representation
|
|
19
|
+
|
|
20
|
+
- prices are expressed in minor units (e.g. cents) as base-10 integer strings (no floats).
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# PricingMatrixSignatures.v1
|
|
2
|
+
|
|
3
|
+
This document provides a **buyer signature surface** for pricing terms.
|
|
4
|
+
|
|
5
|
+
It is stored at:
|
|
6
|
+
|
|
7
|
+
- `pricing/pricing_matrix_signatures.json` within Invoice bundles.
|
|
8
|
+
|
|
9
|
+
`PricingMatrixSignatures.v1` is **legacy**: it binds to raw file bytes, so reformatting `pricing/pricing_matrix.json` (pretty-print/minify/different serializer) changes the binding hash.
|
|
10
|
+
|
|
11
|
+
New bundles SHOULD use `PricingMatrixSignatures.v2` (canonical JSON binding; formatting-independent). See `PricingMatrixSignatures.v2.md`.
|
|
12
|
+
|
|
13
|
+
## Binding target
|
|
14
|
+
|
|
15
|
+
`PricingMatrixSignatures.v1` binds to the exact bytes of:
|
|
16
|
+
|
|
17
|
+
- `pricing/pricing_matrix.json`
|
|
18
|
+
|
|
19
|
+
The binding hash is:
|
|
20
|
+
|
|
21
|
+
- `pricingMatrixHash` — **sha256 hex of raw file bytes** of `pricing/pricing_matrix.json` (the same value committed in the bundle `manifest.json` entry for that file).
|
|
22
|
+
|
|
23
|
+
Each signature in `signatures[]` signs the `pricingMatrixHash` (bytes of the 32-byte sha256 digest) using Ed25519.
|
|
24
|
+
|
|
25
|
+
## Strict vs non-strict
|
|
26
|
+
|
|
27
|
+
- **Strict**: verifiers MUST reject this legacy schema version (hard failure). Use `PricingMatrixSignatures.v2` instead.
|
|
28
|
+
- **Non-strict**: verifiers MAY accept this legacy schema version for compatibility, but MUST emit warning `WARN_PRICING_SIGNATURE_V1_BYTES_LEGACY`. Missing signatures MAY be accepted with warning `PRICING_MATRIX_UNSIGNED_LENIENT`.
|
|
29
|
+
|
|
30
|
+
Invalid signatures are hard failures (security invariant).
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# PricingMatrixSignatures.v2
|
|
2
|
+
|
|
3
|
+
This document provides a **buyer signature surface** for pricing terms.
|
|
4
|
+
|
|
5
|
+
It is stored at:
|
|
6
|
+
|
|
7
|
+
- `pricing/pricing_matrix_signatures.json` within Invoice bundles.
|
|
8
|
+
|
|
9
|
+
## Binding target
|
|
10
|
+
|
|
11
|
+
`PricingMatrixSignatures.v2` binds to the canonical JSON value of:
|
|
12
|
+
|
|
13
|
+
- `pricing/pricing_matrix.json` (`PricingMatrix.v1`)
|
|
14
|
+
|
|
15
|
+
The binding hash is:
|
|
16
|
+
|
|
17
|
+
- `pricingMatrixCanonicalHash` — `sha256_hex( utf8( canonical_json_stringify(pricing_matrix_json) ) )`
|
|
18
|
+
|
|
19
|
+
Canonical JSON is RFC 8785 (JCS). See `CANONICAL_JSON.md`.
|
|
20
|
+
|
|
21
|
+
Each signature in `signatures[]` signs `pricingMatrixCanonicalHash` (bytes of the 32-byte sha256 digest) using Ed25519.
|
|
22
|
+
|
|
23
|
+
## Strict vs non-strict
|
|
24
|
+
|
|
25
|
+
- **Strict**: verifiers MUST require this file to exist and MUST require at least one valid signature from a trusted buyer pricing signer key (see `TRUST_ANCHORS.md`).
|
|
26
|
+
- **Non-strict**: missing signatures MAY be accepted with warning `PRICING_MATRIX_UNSIGNED_LENIENT`.
|
|
27
|
+
|
|
28
|
+
Invalid signatures are hard failures (security invariant).
|
|
29
|
+
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# ProduceCliOutput.v1
|
|
2
|
+
|
|
3
|
+
`ProduceCliOutput.v1` is the machine-readable output emitted by `settld-produce --format json`.
|
|
4
|
+
|
|
5
|
+
This is a public contract intended for CI/pipelines:
|
|
6
|
+
|
|
7
|
+
- It is JSON Schema defined (see `docs/spec/schemas/ProduceCliOutput.v1.schema.json`).
|
|
8
|
+
- Arrays of `errors[]` and `warnings[]` MUST be deterministically ordered (recommended sort: `(code, path)`).
|
|
9
|
+
- Optional fields MUST be omitted when absent (not `null`) unless the schema explicitly allows `null`.
|
|
10
|
+
|
|
11
|
+
## High-level shape
|
|
12
|
+
|
|
13
|
+
- `schemaVersion`: `"ProduceCliOutput.v1"`
|
|
14
|
+
- `tool`: tool identity (best-effort)
|
|
15
|
+
- `mode`: deterministic controls that influenced generation
|
|
16
|
+
- `target`: what was produced and where it was written
|
|
17
|
+
- `ok`: overall success
|
|
18
|
+
- `produceOk`: whether production succeeded (even if `verifyAfter` failed)
|
|
19
|
+
- `verifyAfter` (optional): result of a post-produce verification step when requested
|
|
20
|
+
- `warnings[]`: structured warning codes
|
|
21
|
+
- `errors[]`: structured error codes
|
|
22
|
+
- `result`: summary of produced bundle hashes and identifiers
|
|
23
|
+
|
|
24
|
+
## Error/warning items (safe diagnostics)
|
|
25
|
+
|
|
26
|
+
Each item in `errors[]` / `warnings[]` may include:
|
|
27
|
+
|
|
28
|
+
- `code`: stable, machine-readable code (see `docs/spec/PRODUCER_ERRORS.md`).
|
|
29
|
+
- `causeKind`: coarse category for operators (`signer` | `plugin` | `verify` | `input` | `io` | `internal`).
|
|
30
|
+
- `causeCode`: stable, non-secret subcode identifying the internal failure class (never raw exception text).
|
|
31
|
+
|
|
32
|
+
Producer tooling MUST NOT embed arbitrary exception strings in stdout JSON output; use `--explain` (stderr) for operator diagnostics.
|
|
33
|
+
|
|
34
|
+
## `--explain` (deterministic stderr)
|
|
35
|
+
|
|
36
|
+
`settld-produce --explain` prints a deterministic, non-secret diagnostic summary to **stderr**.
|
|
37
|
+
|
|
38
|
+
Contract:
|
|
39
|
+
|
|
40
|
+
- Output is deterministic for the same inputs/environment.
|
|
41
|
+
- Output MUST NOT include secrets (tokens, secret header values, private keys).
|
|
42
|
+
- Output ends with **exactly one** trailing newline.
|
|
43
|
+
|
|
44
|
+
## Relationship to protocol objects
|
|
45
|
+
|
|
46
|
+
`ProduceCliOutput.v1` describes tooling behavior; it does not change bundle protocol semantics.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# ProofBundleManifest.v1 (JobProof / MonthProof)
|
|
2
|
+
|
|
3
|
+
This manifest is stored at `manifest.json` within JobProof and MonthProof bundles.
|
|
4
|
+
|
|
5
|
+
## Hashing contract
|
|
6
|
+
|
|
7
|
+
- `hashing.schemaVersion = "ProofBundleManifestHash.v1"`
|
|
8
|
+
- file order: `path_asc`
|
|
9
|
+
- excludes: `["verify/**"]`
|
|
10
|
+
|
|
11
|
+
Rationale: `verify/verification_report.json` must reference `manifestHash`, so including `verify/**` in the manifest would create circular hashing.
|
|
12
|
+
|
|
13
|
+
## manifestHash
|
|
14
|
+
|
|
15
|
+
`manifestHash = sha256_hex( canonical_json_stringify(manifest_without_hash) )`
|
|
16
|
+
|
|
17
|
+
## File entries
|
|
18
|
+
|
|
19
|
+
`files[]` entries include:
|
|
20
|
+
|
|
21
|
+
- `name` (path relative to bundle root)
|
|
22
|
+
- `sha256` (hex sha256 of raw file bytes)
|
|
23
|
+
- `bytes` (byte length)
|
|
24
|
+
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# Settld Protocol Specs
|
|
2
|
+
|
|
3
|
+
This directory freezes the **wire-format contracts** that Settld emits and verifies (bundles, manifests, attestations, and verification reports).
|
|
4
|
+
|
|
5
|
+
These specs are written so an independent implementer can build a verifier without reading Settld’s source.
|
|
6
|
+
|
|
7
|
+
## Canonicalization + hashing (global rules)
|
|
8
|
+
|
|
9
|
+
- **Canonical JSON**: JSON objects are canonicalized using RFC 8785 (JCS).
|
|
10
|
+
- **Hashing**: all hashes in these specs are `sha256` over UTF-8 bytes of canonical JSON (or raw file bytes, as specified), represented as lowercase hex.
|
|
11
|
+
- **Derived outputs**: bundle manifests intentionally **exclude** `verify/**` to avoid circular hashing; those files are verified out-of-band by signature and by binding to the `manifestHash`.
|
|
12
|
+
- **x402 gateway parity**: `x-settld-verification-codes` uses shared reason-code normalization (trim + dedup + lexical sort), and policy fingerprint headers (`x-settld-policy-hash`, `x-settld-policy-version`, `x-settld-policy-verification-method-hash`, `x-settld-policy-evaluation-hash`) must mirror `decisionRecord.bindings.policyDecisionFingerprint`.
|
|
13
|
+
|
|
14
|
+
## Documents
|
|
15
|
+
|
|
16
|
+
- `CANONICAL_JSON.md` — canonical JSON rules used before hashing/signing.
|
|
17
|
+
- `VERSIONING.md` — tool vs protocol versioning policy (SemVer + protocol object evolution).
|
|
18
|
+
- `REFERENCE_VERIFIER_BEHAVIOR.md` — filesystem/path/ordering rules to prevent cross-impl drift.
|
|
19
|
+
- `REFERENCE_IMPLEMENTATIONS.md` — reference verifier implementations and conformance parity policy.
|
|
20
|
+
- `THREAT_MODEL.md` — explicit threats, mitigations, and residual risks (evidence-backed).
|
|
21
|
+
- `INVARIANTS.md` — checklist mapping protocol claims → spec → code → tests → codes.
|
|
22
|
+
- `MONEY_RAIL_STATE_MACHINE.md` — deterministic payout/collection lifecycle and transition rules.
|
|
23
|
+
- `ESCROW_NETTING_INVARIANTS.md` — deterministic escrow mutation, settlement partition, and netting invariants.
|
|
24
|
+
- `CRYPTOGRAPHY.md` — crypto primitives + byte-level hashing/signing inventory.
|
|
25
|
+
- `VERIFIER_ENVIRONMENT.md` — operational assumptions and hardening guidance.
|
|
26
|
+
- `ProofBundleManifest.v1.md` — JobProof/MonthProof manifest + hashing contract.
|
|
27
|
+
- `FinancePackBundleManifest.v1.md` — FinancePack manifest + hashing contract.
|
|
28
|
+
- `BundleHeadAttestation.v1.md` — signed head commitment for bundles.
|
|
29
|
+
- `GovernancePolicy.v1.md` — signer authorization policy (strict verification).
|
|
30
|
+
- `GovernancePolicy.v2.md` — signer authorization policy (signed by governance root).
|
|
31
|
+
- `RevocationList.v1.md` — prospective revocation/rotation list (signed by governance root).
|
|
32
|
+
- `TimestampProof.v1.md` — trustworthy signing time proof (for historical acceptance).
|
|
33
|
+
- `VerificationReport.v1.md` — signed, machine-ingestible strict verification report.
|
|
34
|
+
- `PricingMatrixSignatures.v2.md` — buyer signature surface for pricing terms in `InvoiceBundle.v1` (canonical JSON binding; recommended).
|
|
35
|
+
- `PricingMatrixSignatures.v1.md` — legacy buyer signature surface (raw bytes binding).
|
|
36
|
+
- `ClosePack.v1.md` — pre-dispute invoice package embedding `InvoiceBundle.v1` + evidence index.
|
|
37
|
+
- `ClosePackManifest.v1.md` — ClosePack manifest + hashing contract.
|
|
38
|
+
- `EvidenceIndex.v1.md` — deterministic evidence reference index for ClosePack.
|
|
39
|
+
- `SlaDefinition.v1.md` / `SlaEvaluation.v1.md` — deterministic SLA rules + evaluation surfaces for ClosePack.
|
|
40
|
+
- `AcceptanceCriteria.v1.md` / `AcceptanceEvaluation.v1.md` — deterministic acceptance rules + evaluation surfaces for ClosePack.
|
|
41
|
+
- `VerifyCliOutput.v1.md` — `settld-verify --format json` machine output contract.
|
|
42
|
+
- `VerifyAboutOutput.v1.md` — `settld-verify --about --format json` tool metadata contract.
|
|
43
|
+
- `ProduceCliOutput.v1.md` — `settld-produce --format json` machine output contract.
|
|
44
|
+
- `ToolManifest.v1.md` — signed tool/capability manifest that can be pinned by hash.
|
|
45
|
+
- `ToolCallAgreement.v1.md` — hash-addressable agreement binding a tool call (`callId` + `inputHash`) to settlement terms.
|
|
46
|
+
- `ToolCallEvidence.v1.md` — hash-addressable evidence binding a tool call output (`outputHash`) to an agreement hash.
|
|
47
|
+
- `AgentIdentity.v1.md` — portable autonomous agent identity contract.
|
|
48
|
+
- `AgentPassport.v1.md` — delegated identity envelope binding principal, keyset anchors, delegation root, and policy envelope.
|
|
49
|
+
- `DelegationGrant.v1.md` — deterministic delegated-authority grant contract (scope + spend + chain + validity).
|
|
50
|
+
- `ExecutionIntent.v1.md` — canonical pre-execution intent contract binding request fingerprint, risk profile, and policy/spend envelope.
|
|
51
|
+
- `PolicyDecision.v1.md` — hash-addressable policy outcome artifact with normalized decision results and optional signature.
|
|
52
|
+
- `OperatorAction.v1.md` — canonical operator decision audit artifact with deterministic hash binding and optional signature.
|
|
53
|
+
- `AgentWallet.v1.md` — deterministic autonomous wallet snapshot contract.
|
|
54
|
+
- `AgentRun.v1.md` — deterministic agent run snapshot contract.
|
|
55
|
+
- `AgentEvent.v1.md` — append-only event envelope for agent runs.
|
|
56
|
+
- `AgentRunSettlement.v1.md` — deterministic run escrow/settlement contract.
|
|
57
|
+
- `MarketplaceOffer.v2.md` — canonical pre-contract offer artifact derived from negotiation proposals.
|
|
58
|
+
- `MarketplaceAcceptance.v2.md` — canonical acceptance artifact bound to a `MarketplaceOffer.v2` hash.
|
|
59
|
+
- `SettlementDecisionRecord.v1.md` — legacy settlement decision artifact (historical verification).
|
|
60
|
+
- `SettlementDecisionRecord.v2.md` — settlement decision artifact with replay-critical policy pinning (current).
|
|
61
|
+
- `SettlementReceipt.v1.md` — canonical settlement finality receipt bound to a decision hash.
|
|
62
|
+
- `FundingHold.v1.md` — deterministic escrow hold for holdback/challenge-window workflows.
|
|
63
|
+
- `SettlementAdjustment.v1.md` — deterministic, idempotent adjustment artifact for held-funds release/refund.
|
|
64
|
+
- `SettlementKernel.v1.md` — binding invariants + stable verification error semantics for settlement decision/receipt integrity.
|
|
65
|
+
- `ArbitrationCase.v1.md` — formal arbitration case contract with appeal linkage.
|
|
66
|
+
- `DisputeOpenEnvelope.v1.md` — signed dispute opener-proof envelope bound to tool-call hold/receipt/agreement hashes.
|
|
67
|
+
- `ArbitrationVerdict.v1.md` — signed arbitration verdict contract with appeal references.
|
|
68
|
+
- `DisputeCaseLifecycle.v1.md` — fail-closed dispute/arbitration transition state machine and guard rules.
|
|
69
|
+
- `ArbitrationOutcomeMapping.v1.md` — deterministic dispute outcome to settlement directive mapping contract.
|
|
70
|
+
- `ReputationEvent.v1.md` — append-only, deterministic economic reputation fact artifact.
|
|
71
|
+
- `AgentReputation.v1.md` — deterministic trust score snapshot derived from runs + settlement outcomes.
|
|
72
|
+
- `AgentReputation.v2.md` — reputation with recency windows (`7d`, `30d`, `allTime`) for marketplace ranking.
|
|
73
|
+
- `InteractionDirectionMatrix.v1.md` — frozen `4x4` directional interaction matrix (`agent|human|robot|machine`).
|
|
74
|
+
- `TenantSettings.v2.md` — Magic Link / Verify Cloud tenant configuration contract (current).
|
|
75
|
+
- `TenantSettings.v1.md` — legacy (still accepted for stored settings migration).
|
|
76
|
+
- `WARNINGS.md` — warning codes (closed set) and semantics.
|
|
77
|
+
- `ERRORS.md` — error codes (stable identifiers) and semantics.
|
|
78
|
+
- `PRODUCER_ERRORS.md` — producer/tooling error codes (stable identifiers) and semantics.
|
|
79
|
+
- `x402-error-codes.v1.txt` — stable x402 authorize-payment / execution-intent API error codes.
|
|
80
|
+
- `STRICTNESS.md` — strict vs non-strict verification contract.
|
|
81
|
+
- `TRUST_ANCHORS.md` — verifier trust anchors and out-of-band key injection.
|
|
82
|
+
- `TOOL_PROVENANCE.md` — tool version/commit derivation rules.
|
|
83
|
+
- `REMOTE_SIGNER.md` — tooling contract for remote/delegated signing (no private keys on disk).
|
|
84
|
+
- `RemoteSignerRequest.v1.md` / `RemoteSignerResponse.v1.md` — versioned stdio wrapper contract for process-based signers.
|
|
85
|
+
- `SIGNER_PROVIDER_PLUGIN.md` — tooling contract for signer provider plugins (KMS/HSM/Vault integrations).
|
|
86
|
+
- `ReleaseIndex.v1.md` — signed release manifest (artifact authenticity).
|
|
87
|
+
- `ReleaseIndexSignatures.v1.md` — detached multi-signature wrapper for `ReleaseIndex.v1`.
|
|
88
|
+
- `ReleaseTrust.v1.md` — trusted release signing keys (legacy/simple mapping).
|
|
89
|
+
- `ReleaseTrust.v2.md` — trusted release signing keys with rotation/revocation + quorum.
|
|
90
|
+
- `SUPPLY_CHAIN.md` — release-channel threat model and verification procedure.
|
|
91
|
+
|
|
92
|
+
## Legacy archive
|
|
93
|
+
|
|
94
|
+
Legacy protocol objects are retained under `docs/spec/legacy/` (including `legacy/schemas/`) for historical verification only.
|
|
95
|
+
Current integrations should use the active specs listed above.
|
|
96
|
+
|
|
97
|
+
## Schemas + examples
|
|
98
|
+
|
|
99
|
+
- `schemas/` contains JSON Schema for the on-disk JSON documents.
|
|
100
|
+
- `examples/` contains minimal example instances (illustrative, not authoritative vectors).
|
|
101
|
+
|
|
102
|
+
## Quickstart
|
|
103
|
+
|
|
104
|
+
See `docs/QUICKSTART_VERIFY.md` for a CI-friendly verifier quickstart using `settld-verify --format json`.
|
|
105
|
+
|
|
106
|
+
## Conformance + audit evidence
|
|
107
|
+
|
|
108
|
+
- Conformance oracle: `conformance/v1/README.md`
|
|
109
|
+
- Audit packet (specs + vectors + conformance + checksums): `npm run audit:packet`
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Reference implementations
|
|
2
|
+
|
|
3
|
+
Settld’s protocol is intended to be language/toolchain independent.
|
|
4
|
+
|
|
5
|
+
This repo contains multiple verifier implementations that are expected to agree on `conformance/v1/`:
|
|
6
|
+
|
|
7
|
+
## JavaScript (Node)
|
|
8
|
+
|
|
9
|
+
- CLI: `packages/artifact-verify/bin/settld-verify.js`
|
|
10
|
+
- Conformance runner: `node conformance/v1/run.mjs --node-bin packages/artifact-verify/bin/settld-verify.js`
|
|
11
|
+
- Release authenticity CLI: `packages/artifact-verify/bin/settld-release.js`
|
|
12
|
+
- Release conformance runner: `node conformance/v1/run-release.mjs --release-node-bin packages/artifact-verify/bin/settld-release.js`
|
|
13
|
+
|
|
14
|
+
## Python
|
|
15
|
+
|
|
16
|
+
- CLI: `reference/verifier-py/settld-verify-py`
|
|
17
|
+
- Conformance runner: `node conformance/v1/run.mjs --bin reference/verifier-py/settld-verify-py`
|
|
18
|
+
|
|
19
|
+
## Parity policy
|
|
20
|
+
|
|
21
|
+
- Verifier behavior is specified by:
|
|
22
|
+
- `STRICTNESS.md`
|
|
23
|
+
- `REFERENCE_VERIFIER_BEHAVIOR.md`
|
|
24
|
+
- `WARNINGS.md`
|
|
25
|
+
- `ERRORS.md` / `error-codes.v1.txt`
|
|
26
|
+
- Conformance is the executable oracle; implementations must match the expected outcomes for all cases.
|
|
27
|
+
- CLI output is a tooling contract (`VerifyCliOutput.v1`); output must be deterministic for the same inputs.
|
|
28
|
+
|
|
29
|
+
Release authenticity verification (`settld-release verify`) is currently implemented in Node and gated by release conformance.
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# Reference Verifier Behavior (v1)
|
|
2
|
+
|
|
3
|
+
This document specifies **portable verifier behavior** for areas where independent implementations tend to drift (filesystem semantics, path handling, and manifest evaluation order).
|
|
4
|
+
|
|
5
|
+
It complements:
|
|
6
|
+
|
|
7
|
+
- `CANONICAL_JSON.md` (RFC 8785 / JCS)
|
|
8
|
+
- `STRICTNESS.md` (strict vs non-strict contract)
|
|
9
|
+
- `TRUST_ANCHORS.md` (trust root injection)
|
|
10
|
+
- `WARNINGS.md` (warning code contract)
|
|
11
|
+
- `conformance/v1/` (executable oracle)
|
|
12
|
+
|
|
13
|
+
## Bundle-relative paths (manifest `files[].name`)
|
|
14
|
+
|
|
15
|
+
The manifest `files[].name` values describe **bundle-relative** file paths.
|
|
16
|
+
|
|
17
|
+
An implementation:
|
|
18
|
+
|
|
19
|
+
1. MUST treat `files[].name` as a **portable** path using `/` as the separator (regardless of host OS).
|
|
20
|
+
2. MUST reject any `files[].name` that is empty or not a string.
|
|
21
|
+
3. MUST reject any `files[].name` that starts with `/` (absolute path).
|
|
22
|
+
4. MUST reject any `files[].name` that contains `\` (backslash), `:` (Windows drive / URI ambiguity), or `\u0000` (NUL).
|
|
23
|
+
5. MUST reject any `files[].name` that ends with `/` (directory marker).
|
|
24
|
+
6. MUST reject any `files[].name` containing a `.` or `..` segment (path traversal).
|
|
25
|
+
7. MUST resolve each `files[].name` against the bundle root and MUST reject any entry that escapes the bundle root (even if it “looks relative”).
|
|
26
|
+
8. MUST treat a manifest containing a rejected path as a hard failure in **both** strict and non-strict modes.
|
|
27
|
+
|
|
28
|
+
Conformance expects such failures to surface as `MANIFEST_PATH_INVALID`.
|
|
29
|
+
|
|
30
|
+
## Duplicate manifest entries
|
|
31
|
+
|
|
32
|
+
1. MUST treat duplicate `files[].name` values as invalid.
|
|
33
|
+
2. MUST treat duplicate-path manifests as a hard failure in **both** strict and non-strict modes.
|
|
34
|
+
|
|
35
|
+
Conformance expects such failures to surface as `MANIFEST_DUPLICATE_PATH`.
|
|
36
|
+
|
|
37
|
+
## Symlinks
|
|
38
|
+
|
|
39
|
+
1. MUST NOT follow filesystem symlinks when verifying a manifest-listed file.
|
|
40
|
+
2. MUST treat any manifest-listed path that resolves to a symlink (at the filesystem level) as invalid in **both** strict and non-strict modes (this is a security invariant, not a compatibility affordance).
|
|
41
|
+
|
|
42
|
+
Conformance expects such failures to surface as `MANIFEST_SYMLINK_FORBIDDEN`.
|
|
43
|
+
|
|
44
|
+
## File hashing semantics
|
|
45
|
+
|
|
46
|
+
1. MUST hash file contents as **raw bytes** (no newline normalization, no UTF-8 re-encoding).
|
|
47
|
+
2. MUST treat missing files referenced by the manifest as verification failures.
|
|
48
|
+
3. MUST ignore filesystem metadata (mtime, permissions) for hashing and matching purposes.
|
|
49
|
+
|
|
50
|
+
## Manifest evaluation order (error precedence)
|
|
51
|
+
|
|
52
|
+
To keep behavior stable and portable, implementations:
|
|
53
|
+
|
|
54
|
+
1. MUST validate manifest structure (path validity and duplicate-path checks) **before** reporting hash-binding mismatches (for example, before `manifestHash mismatch` / attestation binding checks).
|
|
55
|
+
2. MUST then compute and compare `manifestHash` using canonical JSON (RFC 8785) exactly as specified in `ProofBundleManifest.v1.md` / `FinancePackBundleManifest.v1.md`.
|
|
56
|
+
|
|
57
|
+
This ordering prevents ambiguous “first failure wins” behavior across implementations and is relied upon by `conformance/v1/`.
|
|
58
|
+
|
|
59
|
+
## Trust anchors (portable minimum)
|
|
60
|
+
|
|
61
|
+
1. MUST support out-of-band injection of trusted governance roots via `SETTLD_TRUSTED_GOVERNANCE_ROOT_KEYS_JSON` (see `TRUST_ANCHORS.md`).
|
|
62
|
+
2. MUST treat missing trusted governance roots as a hard failure in strict mode when governance-root signatures are required.
|
|
63
|
+
|
|
64
|
+
## Strict vs non-strict (portable minimum)
|
|
65
|
+
|
|
66
|
+
1. MUST apply strict/non-strict downgrades only where explicitly documented in `STRICTNESS.md`.
|
|
67
|
+
2. MUST NOT downgrade the security invariants in this document (path traversal, duplicate paths, symlink refusal).
|
|
68
|
+
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# Remote signer (tooling contract)
|
|
2
|
+
|
|
3
|
+
This document specifies the **RemoteSigner API** used by producer tooling (`settld-produce`) to obtain signatures without storing private keys on disk.
|
|
4
|
+
|
|
5
|
+
This is a tooling/config surface (not a bundle protocol object). Verifiers do not change: they still verify signatures using **public keys** and **trust anchors**.
|
|
6
|
+
|
|
7
|
+
## Goals
|
|
8
|
+
|
|
9
|
+
- Allow bundle production with **no private key material on disk** (CI-friendly).
|
|
10
|
+
- Ensure signing requests are **purpose-bound** (avoid turning the signer into a generic signing oracle).
|
|
11
|
+
- Keep requests deterministic and auditable via a stable request shape.
|
|
12
|
+
|
|
13
|
+
## Endpoints (v1)
|
|
14
|
+
|
|
15
|
+
### `GET /v1/public-key?keyId=<keyId>`
|
|
16
|
+
|
|
17
|
+
Return the public key PEM for the requested key id.
|
|
18
|
+
|
|
19
|
+
Response: `RemoteSignerPublicKeyResponse.v1` (see `docs/spec/schemas/RemoteSignerPublicKeyResponse.v1.schema.json`).
|
|
20
|
+
|
|
21
|
+
### `POST /v1/sign`
|
|
22
|
+
|
|
23
|
+
Sign the provided message bytes under a specific key and purpose.
|
|
24
|
+
|
|
25
|
+
Request: `RemoteSignerSignRequest.v1` (see `docs/spec/schemas/RemoteSignerSignRequest.v1.schema.json`).
|
|
26
|
+
|
|
27
|
+
Response: `RemoteSignerSignResponse.v1` (see `docs/spec/schemas/RemoteSignerSignResponse.v1.schema.json`).
|
|
28
|
+
|
|
29
|
+
## Purpose binding (required)
|
|
30
|
+
|
|
31
|
+
Remote signers **MUST** refuse signing requests with unknown `purpose` values.
|
|
32
|
+
|
|
33
|
+
Producer tools set `purpose` to one of:
|
|
34
|
+
|
|
35
|
+
- `event_payload`
|
|
36
|
+
- `governance_policy`
|
|
37
|
+
- `revocation_list`
|
|
38
|
+
- `timestamp_proof`
|
|
39
|
+
- `pricing_matrix`
|
|
40
|
+
- `bundle_head_attestation`
|
|
41
|
+
- `verification_report`
|
|
42
|
+
- `settlement_decision_report`
|
|
43
|
+
|
|
44
|
+
## Security notes
|
|
45
|
+
|
|
46
|
+
- The `messageBase64` value is **the exact bytes signed**. For Settld bundle objects this is typically `sha256(canonical_json)` represented as raw 32 bytes.
|
|
47
|
+
- Signers should log: `requestId`, `keyId`, `purpose`, and selected `context` fields for auditability.
|
|
48
|
+
- Remote signer endpoints should be protected with authentication/authorization (otherwise they are a signing oracle).
|
|
49
|
+
|
|
50
|
+
## Authentication (recommended)
|
|
51
|
+
|
|
52
|
+
For HTTP signers, producer tooling can attach a bearer token and custom headers:
|
|
53
|
+
|
|
54
|
+
- `--signer-auth bearer --signer-token-env SETTLD_SIGNER_TOKEN`
|
|
55
|
+
- `--signer-auth bearer --signer-token-file /path/to/token.txt`
|
|
56
|
+
- `--signer-header "X-Request-Source: ci"`
|
|
57
|
+
|
|
58
|
+
Tokens and secret header values are tooling-only; they must never be written into bundles or CLI JSON outputs.
|
|
59
|
+
|
|
60
|
+
## Local-process / stdio signers
|
|
61
|
+
|
|
62
|
+
Producer tooling also supports invoking a signer as a local process (no HTTP) where the signer reads a JSON request from stdin and prints JSON to stdout.
|
|
63
|
+
|
|
64
|
+
This mode is designed for CI environments where binding/listening to local sockets may be restricted, and for integrations where the signer itself talks to an HSM/KMS.
|
|
65
|
+
|
|
66
|
+
Note: some sandboxed CI environments disable piping stdin into child processes. The reference dev signer (`settld-signer-dev`) supports `--request-json-base64 <b64>` to avoid stdin piping in those environments.
|