settld 0.1.2 → 0.1.5
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 +61 -3
- package/SETTLD_VERSION +1 -1
- package/bin/settld-mcp +2 -0
- package/bin/settld.js +13 -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 +140 -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 +337 -0
- package/docs/QUICKSTART_MCP_HOSTS.md +143 -0
- package/docs/QUICKSTART_PRODUCE.md +61 -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 +15 -0
- package/docs/RELEASE_CHECKLIST.md +156 -0
- package/docs/RELEASING.md +81 -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 +70 -0
- package/docs/SUMMARY.md +16 -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 +52 -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 +104 -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 +14 -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/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/GO_LIVE_GATE_S13.md +27 -0
- package/docs/ops/HOSTED_BASELINE_R2.md +129 -0
- package/docs/ops/KERNEL_V0_SHIP_GATE.md +67 -0
- package/docs/ops/LIGHTHOUSE_PRODUCTION_CLOSE.md +51 -0
- package/docs/ops/MCP_COMPATIBILITY_MATRIX.md +28 -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 +103 -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 +47 -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/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/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/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/PRODUCER_ERRORS.md +42 -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 +104 -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 +51 -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/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 +148 -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 +21 -0
- package/docs/templates/buyer-email.txt +18 -0
- package/docs/templates/buyer-one-pager.md +24 -0
- package/package.json +40 -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 +148 -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 +246 -0
- package/scripts/ci/run-10x-throughput-incident-rehearsal.mjs +325 -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-smoke.mjs +275 -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/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 +1201 -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/hosted-baseline-evidence.mjs +681 -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/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/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/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/slo/check.mjs +178 -0
- package/scripts/smoke/k8s-smoke.mjs +214 -0
- package/scripts/spec/generate-protocol-vectors.mjs +931 -0
- package/scripts/test/check-no-generated-artifacts.sh +12 -0
- package/scripts/test/run.sh +45 -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 +947 -0
- package/src/api/app.js +32517 -16877
- package/src/api/maintenance.js +70 -0
- package/src/api/openapi.js +1130 -17
- package/src/api/persistence.js +272 -0
- package/src/api/server.js +81 -5
- package/src/api/store.js +1248 -6
- 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 +97 -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/maintenance-locks.js +1 -0
- package/src/core/paid-tool-manifest.js +318 -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 +213 -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/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 +838 -72
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# Quickstart: First verified agent run (Python SDK)
|
|
2
|
+
|
|
3
|
+
Goal: run one end-to-end agent transaction (register identities, append run events, verify `green`, release settlement) using Python.
|
|
4
|
+
|
|
5
|
+
## 0) Install deps
|
|
6
|
+
|
|
7
|
+
```sh
|
|
8
|
+
npm ci
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## 1) Start the API with a local ops token
|
|
12
|
+
|
|
13
|
+
```sh
|
|
14
|
+
export PROXY_OPS_TOKEN=dev_ops_token
|
|
15
|
+
npm run dev:api
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## 2) Create an API key for SDK calls
|
|
19
|
+
|
|
20
|
+
In a second shell:
|
|
21
|
+
|
|
22
|
+
```sh
|
|
23
|
+
export SETTLD_BASE_URL=http://127.0.0.1:3000
|
|
24
|
+
export SETTLD_TENANT_ID=tenant_default
|
|
25
|
+
export SETTLD_API_KEY="$(
|
|
26
|
+
curl -sS -X POST "$SETTLD_BASE_URL/ops/api-keys" \
|
|
27
|
+
-H "authorization: Bearer $PROXY_OPS_TOKEN" \
|
|
28
|
+
-H "x-proxy-tenant-id: $SETTLD_TENANT_ID" \
|
|
29
|
+
-H "content-type: application/json" \
|
|
30
|
+
-d '{"scopes":["ops_read","ops_write","finance_read","finance_write","audit_read"],"description":"python sdk quickstart"}' \
|
|
31
|
+
| jq -r '.keyId + "." + .secret'
|
|
32
|
+
)"
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## 3) Run the Python SDK example
|
|
36
|
+
|
|
37
|
+
```sh
|
|
38
|
+
PYTHONDONTWRITEBYTECODE=1 python3 scripts/examples/sdk-first-verified-run.py
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Expected output:
|
|
42
|
+
|
|
43
|
+
```json
|
|
44
|
+
{
|
|
45
|
+
"runId": "run_sdk_py_...",
|
|
46
|
+
"payeeAgentId": "agt_py_payee_...",
|
|
47
|
+
"payerAgentId": "agt_py_payer_...",
|
|
48
|
+
"runStatus": "completed",
|
|
49
|
+
"verificationStatus": "green",
|
|
50
|
+
"settlementStatus": "released"
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## 4) Use the helper directly in code
|
|
55
|
+
|
|
56
|
+
```python
|
|
57
|
+
from settld_api_sdk import SettldClient
|
|
58
|
+
|
|
59
|
+
client = SettldClient(
|
|
60
|
+
base_url="http://127.0.0.1:3000",
|
|
61
|
+
tenant_id="tenant_default",
|
|
62
|
+
api_key="keyId.secret",
|
|
63
|
+
x_api_key="magic_link_api_key", # optional for Magic Link deployments that enforce x-api-key
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
result = client.first_verified_run(
|
|
67
|
+
{
|
|
68
|
+
"payee_agent": {"publicKeyPem": "...", "owner": {"ownerType": "service", "ownerId": "svc_a"}},
|
|
69
|
+
"payer_agent": {"publicKeyPem": "...", "owner": {"ownerType": "service", "ownerId": "svc_b"}},
|
|
70
|
+
"payer_credit": {"amountCents": 5000},
|
|
71
|
+
"settlement": {"amountCents": 1200},
|
|
72
|
+
"run": {"taskType": "translation"},
|
|
73
|
+
}
|
|
74
|
+
)
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## 5) Run a paid marketplace RFQ flow
|
|
78
|
+
|
|
79
|
+
```sh
|
|
80
|
+
PYTHONDONTWRITEBYTECODE=1 python3 scripts/examples/sdk-first-paid-rfq.py
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Expected output:
|
|
84
|
+
|
|
85
|
+
```json
|
|
86
|
+
{
|
|
87
|
+
"rfqId": "rfq_py_...",
|
|
88
|
+
"runId": "run_rfq_py_...",
|
|
89
|
+
"posterAgentId": "agt_py_poster_...",
|
|
90
|
+
"bidderAgentId": "agt_py_bidder_...",
|
|
91
|
+
"verificationStatus": "green",
|
|
92
|
+
"settlementStatus": "released"
|
|
93
|
+
}
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## 6) Pull tenant analytics + trust graph (Magic Link)
|
|
97
|
+
|
|
98
|
+
```python
|
|
99
|
+
analytics = client.get_tenant_analytics("tenant_default", {"month": "2026-02", "bucket": "day", "limit": 20})
|
|
100
|
+
graph = client.get_tenant_trust_graph("tenant_default", {"month": "2026-02", "minRuns": 1, "maxEdges": 200})
|
|
101
|
+
diff = client.diff_tenant_trust_graph("tenant_default", {"baseMonth": "2026-01", "compareMonth": "2026-02", "limit": 50})
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
Or run the prebuilt script:
|
|
105
|
+
|
|
106
|
+
```sh
|
|
107
|
+
SETTLD_BASE_URL=http://127.0.0.1:8787 \
|
|
108
|
+
SETTLD_TENANT_ID=tenant_default \
|
|
109
|
+
SETTLD_X_API_KEY=test_key \
|
|
110
|
+
npm run sdk:analytics:py
|
|
111
|
+
```
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Quickstart: Verify a bundle
|
|
2
|
+
|
|
3
|
+
Goal: verify a Settld bundle directory and produce a stable machine-readable receipt (`VerifyCliOutput.v1`) suitable for CI gating and audit retention.
|
|
4
|
+
|
|
5
|
+
## From source (this repo)
|
|
6
|
+
|
|
7
|
+
Install dependencies:
|
|
8
|
+
|
|
9
|
+
```sh
|
|
10
|
+
npm ci
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Verify a bundle fixture (strict):
|
|
14
|
+
|
|
15
|
+
```sh
|
|
16
|
+
export SETTLD_TRUSTED_GOVERNANCE_ROOT_KEYS_JSON="$(node -e "import fs from 'node:fs'; const t=JSON.parse(fs.readFileSync('test/fixtures/bundles/v1/trust.json','utf8')); process.stdout.write(JSON.stringify(t.governanceRoots||{}))")"
|
|
17
|
+
node packages/artifact-verify/bin/settld-verify.js --format json --strict --job-proof test/fixtures/bundles/v1/jobproof/strict-pass > settld-verify-output.json
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Optional: emit SARIF for GitHub annotations:
|
|
21
|
+
|
|
22
|
+
```sh
|
|
23
|
+
node packages/artifact-verify/bin/settld-verify.js --format sarif --strict --job-proof test/fixtures/bundles/v1/jobproof/strict-pass > settld-verify.sarif
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Strict vs non-strict
|
|
27
|
+
|
|
28
|
+
- **Strict** (`--strict`): audit posture; missing required protocol surfaces are hard failures.
|
|
29
|
+
- **Non-strict** (omit `--strict`): compatibility posture; missing legacy surfaces become warnings.
|
|
30
|
+
|
|
31
|
+
## Warnings and CI gating
|
|
32
|
+
|
|
33
|
+
- Warnings are structured codes (see `docs/spec/WARNINGS.md`).
|
|
34
|
+
- To fail CI when warnings exist, add `--fail-on-warnings`.
|
|
35
|
+
|
|
36
|
+
## Trust anchors
|
|
37
|
+
|
|
38
|
+
Strict verification needs trusted governance root keys. Provide them via:
|
|
39
|
+
|
|
40
|
+
- `SETTLD_TRUSTED_GOVERNANCE_ROOT_KEYS_JSON`
|
|
41
|
+
- `SETTLD_TRUSTED_TIME_AUTHORITY_KEYS_JSON` (only if you want to verify timestamp proofs)
|
|
42
|
+
|
|
43
|
+
See `docs/spec/TRUST_ANCHORS.md`.
|
|
44
|
+
|
|
45
|
+
## Output + provenance
|
|
46
|
+
|
|
47
|
+
`settld-verify --format json` emits `VerifyCliOutput.v1`:
|
|
48
|
+
|
|
49
|
+
- `ok`: overall CLI verdict (includes `--fail-on-warnings`)
|
|
50
|
+
- `verificationOk`: underlying verification verdict
|
|
51
|
+
- `errors[]` / `warnings[]`: stable codes, deterministically sorted
|
|
52
|
+
- `tool.version` / `tool.commit`: provenance identifiers
|
|
53
|
+
|
|
54
|
+
If `tool.version` or `tool.commit` cannot be determined, you may see warnings like `TOOL_VERSION_UNKNOWN` / `TOOL_COMMIT_UNKNOWN` (see `docs/spec/TOOL_PROVENANCE.md`).
|
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
# Quickstart: x402 Gateway (Verify Before Release)
|
|
2
|
+
|
|
3
|
+
Goal: in ~10 minutes, run a local Settld API + a mock x402 upstream + the Settld x402 gateway, then complete a `402 -> authorize -> verify -> release` flow and get a deterministic receipt trail.
|
|
4
|
+
|
|
5
|
+
## TL;DR (one command)
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm ci && npm run quickstart:x402
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Success: prints `OK`, `gateId=...`, and `gateStateUrl=...`.
|
|
12
|
+
|
|
13
|
+
By default the script keeps services running until you press Ctrl+C. To run once and exit (CI-friendly):
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npm ci && SETTLD_QUICKSTART_KEEP_ALIVE=0 npm run quickstart:x402
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
If you already ran `npm ci` in this repo, you can skip it:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
npm run quickstart:x402
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Ports can be overridden if you already have something running on `3000/8402/9402`:
|
|
26
|
+
|
|
27
|
+
- `SETTLD_QUICKSTART_API_PORT`
|
|
28
|
+
- `SETTLD_QUICKSTART_GATEWAY_PORT`
|
|
29
|
+
- `SETTLD_QUICKSTART_UPSTREAM_PORT`
|
|
30
|
+
|
|
31
|
+
## 0) Prereqs
|
|
32
|
+
|
|
33
|
+
- Node.js 20+
|
|
34
|
+
- Bash (for the copy/paste snippets below)
|
|
35
|
+
- `curl`
|
|
36
|
+
|
|
37
|
+
Optional:
|
|
38
|
+
|
|
39
|
+
- Docker Engine 20.10+ (only if you want to run the gateway via container)
|
|
40
|
+
- Linux: this quickstart includes Linux-safe Docker networking options (do not assume `host.docker.internal` works without configuration).
|
|
41
|
+
|
|
42
|
+
## 1) Start a local Settld API (in-memory)
|
|
43
|
+
|
|
44
|
+
From repo root:
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
npm ci
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Then:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
PROXY_OPS_TOKEN=tok_ops PORT=3000 npm run dev:api
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
In another terminal, confirm:
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
curl -fsS http://127.0.0.1:3000/healthz
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## 2) Mint an API key (no jq required)
|
|
63
|
+
|
|
64
|
+
This mints a tenant API key using the dev ops token (`PROXY_OPS_TOKEN`). The gateway uses `SETTLD_API_KEY` (not the ops token) to call Settld.
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
SETTLD_API_KEY="$(
|
|
68
|
+
set -euo pipefail
|
|
69
|
+
curl -fsS -X POST http://127.0.0.1:3000/ops/api-keys \
|
|
70
|
+
-H "x-proxy-ops-token: tok_ops" \
|
|
71
|
+
-H "authorization: Bearer tok_ops" \
|
|
72
|
+
-H "x-proxy-tenant-id: tenant_default" \
|
|
73
|
+
-H "content-type: application/json" \
|
|
74
|
+
-d '{"scopes":["ops_read","ops_write","finance_read","finance_write","audit_read"],"description":"x402 gateway quickstart"}' \
|
|
75
|
+
| node -e 'let d="";process.stdin.on("data",c=>d+=c);process.stdin.on("end",()=>{const j=JSON.parse(d);if(!j?.keyId||!j?.secret){console.error("unexpected response:",d);process.exit(1)}process.stdout.write(`${j.keyId}.${j.secret}`)})'
|
|
76
|
+
)"
|
|
77
|
+
export SETTLD_API_KEY
|
|
78
|
+
if [ -n "$SETTLD_API_KEY" ]; then
|
|
79
|
+
echo "SETTLD_API_KEY minted"
|
|
80
|
+
else
|
|
81
|
+
echo "FAILED: SETTLD_API_KEY empty" >&2
|
|
82
|
+
fi
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## 3) Start a mock x402 upstream
|
|
86
|
+
|
|
87
|
+
The upstream will return `HTTP 402` with both `x-payment-required` and `PAYMENT-REQUIRED` until the gateway retries with a `SettldPay` authorization token.
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
PORT=9402 \
|
|
91
|
+
SETTLD_PAY_KEYSET_URL='http://127.0.0.1:3000/.well-known/settld-keys.json' \
|
|
92
|
+
node services/x402-gateway/examples/upstream-mock.js
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
If your Settld API is not on port `3000`, set `SETTLD_PAY_KEYSET_URL` to the correct `/.well-known/settld-keys.json` URL so the provider can verify SettldPay tokens offline.
|
|
96
|
+
|
|
97
|
+
In another terminal:
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
curl -fsS http://127.0.0.1:9402/healthz
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### Strict request binding for side-effecting tools
|
|
104
|
+
|
|
105
|
+
For side-effecting tools, set provider offer `requestBindingMode: "strict"` (or `idempotency: "side_effecting"` in manifests that feed the provider wrapper). In strict mode, provider-kit computes a canonical request fingerprint and requires the SettldPay token payload to carry a matching `requestBindingSha256`. Replaying the same token with a different path/query/body is rejected with `402` and code `SETTLD_PAY_REQUEST_BINDING_MISMATCH`.
|
|
106
|
+
|
|
107
|
+
## 3.5) Provider signature key (demo)
|
|
108
|
+
|
|
109
|
+
This quickstart uses provider-signed responses as a minimal correctness check:
|
|
110
|
+
|
|
111
|
+
- the upstream mock signs a response hash with Ed25519
|
|
112
|
+
- the gateway verifies the signature before releasing funds
|
|
113
|
+
|
|
114
|
+
Export the upstream mock's dev-only public key:
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
export X402_PROVIDER_PUBLIC_KEY_PEM="$(cat <<'EOF'
|
|
118
|
+
-----BEGIN PUBLIC KEY-----
|
|
119
|
+
MCowBQYDK2VwAyEA7zJ+oQLAO6F4Xewe7yJB1mv5TxsLo5bGZI7ZJPuFB6s=
|
|
120
|
+
-----END PUBLIC KEY-----
|
|
121
|
+
EOF
|
|
122
|
+
)"
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
## 4) Start the x402 gateway (thin proxy)
|
|
126
|
+
|
|
127
|
+
### Option A: run from source (fastest)
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
SETTLD_API_URL="http://127.0.0.1:3000" \
|
|
131
|
+
SETTLD_API_KEY="$SETTLD_API_KEY" \
|
|
132
|
+
UPSTREAM_URL="http://127.0.0.1:9402" \
|
|
133
|
+
HOLDBACK_BPS=0 \
|
|
134
|
+
DISPUTE_WINDOW_MS=3600000 \
|
|
135
|
+
X402_AUTOFUND=1 \
|
|
136
|
+
X402_PROVIDER_PUBLIC_KEY_PEM="$X402_PROVIDER_PUBLIC_KEY_PEM" \
|
|
137
|
+
PORT=8402 \
|
|
138
|
+
npm run dev:x402-gateway
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
Notes:
|
|
142
|
+
|
|
143
|
+
- `X402_AUTOFUND=1` is for local demo only. It simulates funding the payer so escrow holds can be created without a real payment rail.
|
|
144
|
+
|
|
145
|
+
### Option B: run via Docker (same config surface)
|
|
146
|
+
|
|
147
|
+
Important:
|
|
148
|
+
|
|
149
|
+
- On macOS/Windows (Docker Desktop), `host.docker.internal` works by default.
|
|
150
|
+
- On Linux, `host.docker.internal` is usually not defined. If you run the gateway in Docker while your Settld API + mock upstream are running on the host, use one of the Linux commands below:
|
|
151
|
+
- Recommended: `--add-host=host.docker.internal:host-gateway` (Docker Engine 20.10+)
|
|
152
|
+
- Alternative: `--network host` and use `127.0.0.1` URLs (not available on Docker Desktop; often not supported with rootless Docker)
|
|
153
|
+
|
|
154
|
+
Pull the image:
|
|
155
|
+
|
|
156
|
+
```bash
|
|
157
|
+
docker pull ghcr.io/aidenlippert/settld/x402-gateway:latest
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
If `docker pull` fails with `denied`, either:
|
|
161
|
+
|
|
162
|
+
- build locally from this repo (no dependencies; copies `src/core` + `services/x402-gateway`):
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
docker build -t settld/x402-gateway:local -f services/x402-gateway/Dockerfile .
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
and replace `ghcr.io/aidenlippert/settld/x402-gateway:latest` with `settld/x402-gateway:local` in the `docker run` commands below.
|
|
169
|
+
|
|
170
|
+
macOS/Windows (Docker Desktop):
|
|
171
|
+
|
|
172
|
+
```bash
|
|
173
|
+
docker run --rm -p 8402:8402 \
|
|
174
|
+
-e SETTLD_API_URL="http://host.docker.internal:3000" \
|
|
175
|
+
-e SETTLD_API_KEY="$SETTLD_API_KEY" \
|
|
176
|
+
-e UPSTREAM_URL="http://host.docker.internal:9402" \
|
|
177
|
+
-e HOLDBACK_BPS=0 \
|
|
178
|
+
-e DISPUTE_WINDOW_MS=3600000 \
|
|
179
|
+
-e X402_AUTOFUND=1 \
|
|
180
|
+
-e X402_PROVIDER_PUBLIC_KEY_PEM="$X402_PROVIDER_PUBLIC_KEY_PEM" \
|
|
181
|
+
-e PORT=8402 \
|
|
182
|
+
ghcr.io/aidenlippert/settld/x402-gateway:latest
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
Linux (recommended, bridge networking):
|
|
186
|
+
|
|
187
|
+
```bash
|
|
188
|
+
docker run --rm -p 8402:8402 \
|
|
189
|
+
--add-host=host.docker.internal:host-gateway \
|
|
190
|
+
-e SETTLD_API_URL="http://host.docker.internal:3000" \
|
|
191
|
+
-e SETTLD_API_KEY="$SETTLD_API_KEY" \
|
|
192
|
+
-e UPSTREAM_URL="http://host.docker.internal:9402" \
|
|
193
|
+
-e HOLDBACK_BPS=0 \
|
|
194
|
+
-e DISPUTE_WINDOW_MS=3600000 \
|
|
195
|
+
-e X402_AUTOFUND=1 \
|
|
196
|
+
-e X402_PROVIDER_PUBLIC_KEY_PEM="$X402_PROVIDER_PUBLIC_KEY_PEM" \
|
|
197
|
+
-e PORT=8402 \
|
|
198
|
+
ghcr.io/aidenlippert/settld/x402-gateway:latest
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
Linux alternative (host networking):
|
|
202
|
+
|
|
203
|
+
```bash
|
|
204
|
+
docker run --rm --network host \
|
|
205
|
+
-e SETTLD_API_URL="http://127.0.0.1:3000" \
|
|
206
|
+
-e SETTLD_API_KEY="$SETTLD_API_KEY" \
|
|
207
|
+
-e UPSTREAM_URL="http://127.0.0.1:9402" \
|
|
208
|
+
-e HOLDBACK_BPS=0 \
|
|
209
|
+
-e DISPUTE_WINDOW_MS=3600000 \
|
|
210
|
+
-e X402_AUTOFUND=1 \
|
|
211
|
+
-e X402_PROVIDER_PUBLIC_KEY_PEM="$X402_PROVIDER_PUBLIC_KEY_PEM" \
|
|
212
|
+
-e PORT=8402 \
|
|
213
|
+
ghcr.io/aidenlippert/settld/x402-gateway:latest
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
Confirm:
|
|
217
|
+
|
|
218
|
+
```bash
|
|
219
|
+
curl -fsS http://127.0.0.1:8402/healthz
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
## 5) Drive the 402 -> verify -> release flow
|
|
223
|
+
|
|
224
|
+
### 5.0 One-shot smoke test (copy/paste; fails fast)
|
|
225
|
+
|
|
226
|
+
This asserts the expected HTTP status codes and (with the default upstream + gateway config in this doc) checks that the released/refunded cents are consistent.
|
|
227
|
+
|
|
228
|
+
```bash
|
|
229
|
+
set -euo pipefail
|
|
230
|
+
|
|
231
|
+
h402="$(curl -sS -D - -o /dev/null http://127.0.0.1:8402/resource)"
|
|
232
|
+
echo "$h402" | grep -qE '^HTTP/.* 402 '
|
|
233
|
+
echo "$h402" | grep -qi '^x-payment-required:'
|
|
234
|
+
amount_cents="$(echo "$h402" | tr -d '\r' | grep -i '^x-payment-required:' | sed -n 's/.*amountCents=\([0-9][0-9]*\).*/\1/p' | head -n 1)"
|
|
235
|
+
test -n "$amount_cents"
|
|
236
|
+
GATE_ID="$(echo "$h402" | awk 'tolower($1) == "x-settld-gate-id:" {print $2}' | tr -d '\r' | head -n 1)"
|
|
237
|
+
test -n "$GATE_ID"
|
|
238
|
+
echo "gateId=$GATE_ID"
|
|
239
|
+
|
|
240
|
+
h200="$(curl -sS -D - -o /dev/null http://127.0.0.1:8402/resource -H "x-settld-gate-id: $GATE_ID")"
|
|
241
|
+
echo "$h200" | grep -qE '^HTTP/.* 200 '
|
|
242
|
+
|
|
243
|
+
settlement_status="$(echo "$h200" | awk 'tolower($1) == "x-settld-settlement-status:" {print $2}' | tr -d '\r' | head -n 1)"
|
|
244
|
+
released_cents="$(echo "$h200" | awk 'tolower($1) == "x-settld-released-amount-cents:" {print $2}' | tr -d '\r' | head -n 1)"
|
|
245
|
+
refunded_cents="$(echo "$h200" | awk 'tolower($1) == "x-settld-refunded-amount-cents:" {print $2}' | tr -d '\r' | head -n 1)"
|
|
246
|
+
test "$settlement_status" = "released"
|
|
247
|
+
test "$released_cents" = "$amount_cents"
|
|
248
|
+
test "$refunded_cents" = "0"
|
|
249
|
+
|
|
250
|
+
echo "OK"
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
Notes:
|
|
254
|
+
|
|
255
|
+
- If you set `HOLDBACK_BPS>0`, the gateway may emit `x-settld-holdback-*` headers (a follow-on settlement).
|
|
256
|
+
|
|
257
|
+
### 5.1 First request (expect 402 + x-settld-gate-id)
|
|
258
|
+
|
|
259
|
+
```bash
|
|
260
|
+
curl -isS http://127.0.0.1:8402/resource | sed -n '1,40p'
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
Extract the gate id:
|
|
264
|
+
|
|
265
|
+
```bash
|
|
266
|
+
GATE_ID="$(
|
|
267
|
+
curl -isS http://127.0.0.1:8402/resource \
|
|
268
|
+
| awk 'tolower($1) == "x-settld-gate-id:" {print $2}' \
|
|
269
|
+
| tr -d '\r' \
|
|
270
|
+
| head -n 1
|
|
271
|
+
)"
|
|
272
|
+
echo "gateId=$GATE_ID"
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
### 5.2 Second request (retry with gate id; gateway auto-authorizes payment)
|
|
276
|
+
|
|
277
|
+
```bash
|
|
278
|
+
curl -isS http://127.0.0.1:8402/resource \
|
|
279
|
+
-H "x-settld-gate-id: $GATE_ID" | sed -n '1,80p'
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
You should see:
|
|
283
|
+
|
|
284
|
+
- `HTTP 200`
|
|
285
|
+
- `x-settld-response-sha256: ...`
|
|
286
|
+
- `x-settld-verification-status: green|red`
|
|
287
|
+
- `x-settld-verification-codes: ...` (optional; reason codes when verification is forced red)
|
|
288
|
+
- `x-settld-settlement-status: released`
|
|
289
|
+
- `x-settld-released-amount-cents`, `x-settld-refunded-amount-cents`
|
|
290
|
+
- `x-settld-holdback-status`, `x-settld-holdback-amount-cents` (when `HOLDBACK_BPS>0`)
|
|
291
|
+
|
|
292
|
+
## 6) Inspect the gate state (optional)
|
|
293
|
+
|
|
294
|
+
```bash
|
|
295
|
+
curl -fsS "http://127.0.0.1:3000/x402/gate/$GATE_ID" \
|
|
296
|
+
-H "x-proxy-tenant-id: tenant_default" \
|
|
297
|
+
-H "authorization: Bearer $SETTLD_API_KEY" \
|
|
298
|
+
-H "x-settld-protocol: 1.0"
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
You can also inspect the gateway signing keyset used for `SettldPay` verification:
|
|
302
|
+
|
|
303
|
+
```bash
|
|
304
|
+
curl -fsS "http://127.0.0.1:3000/.well-known/settld-keys.json"
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
## Troubleshooting
|
|
308
|
+
|
|
309
|
+
- If the gateway never returns `x-settld-gate-id`, your upstream likely isn’t returning `402` with `x-payment-required`.
|
|
310
|
+
- If `/x402/gate/verify` fails with insufficient funds, you forgot `X402_AUTOFUND=1` (local demo) or you need a real funding path wired in.
|
|
311
|
+
- Linux + Docker: if the gateway container can’t reach `http://host.docker.internal:3000` / `:9402`, use `--add-host=host.docker.internal:host-gateway` or `--network host` (and point `SETTLD_API_URL`/`UPSTREAM_URL` at `http://127.0.0.1:...`).
|
|
312
|
+
- If you see `EADDRINUSE` (port already in use), pick different ports (the one-command quickstart supports `SETTLD_QUICKSTART_API_PORT`, `SETTLD_QUICKSTART_UPSTREAM_PORT`, and `SETTLD_QUICKSTART_GATEWAY_PORT`).
|
|
313
|
+
|
|
314
|
+
If you tried and failed:
|
|
315
|
+
|
|
316
|
+
- Run `./scripts/collect-debug.sh` and attach the resulting `settld-debug-*.tar.gz` to a GitHub issue using the "Quickstart failure" template:
|
|
317
|
+
- https://github.com/aidenlippert/settld/issues/new?template=quickstart-failure.yml
|
package/docs/README.md
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Settld Documentation Index
|
|
2
|
+
|
|
3
|
+
This root docs index is for GitBook sync setups using project directory `docs`.
|
|
4
|
+
|
|
5
|
+
For curated public docs, start here:
|
|
6
|
+
|
|
7
|
+
- [Settld Docs home](./gitbook/README.md)
|
|
8
|
+
- [Quickstart](./gitbook/quickstart.md)
|
|
9
|
+
- [Core Primitives](./gitbook/core-primitives.md)
|
|
10
|
+
- [API Reference](./gitbook/api-reference.md)
|
|
11
|
+
- [Conformance](./gitbook/conformance.md)
|
|
12
|
+
- [Closepacks](./gitbook/closepacks.md)
|
|
13
|
+
- [Guides](./gitbook/guides.md)
|
|
14
|
+
- [Security Model](./gitbook/security-model.md)
|
|
15
|
+
- [FAQ](./gitbook/faq.md)
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
# Release Checklist (v1.0.0+)
|
|
2
|
+
|
|
3
|
+
This checklist is the “no surprises” gate for shipping Settld as a product (not just a repo).
|
|
4
|
+
|
|
5
|
+
## Preconditions
|
|
6
|
+
|
|
7
|
+
- `npm test` is green on main.
|
|
8
|
+
- `CHANGELOG.md` is updated and accurate.
|
|
9
|
+
- Protocol v1 freeze gate is satisfied (no accidental v1 schema/vector drift).
|
|
10
|
+
- Minimum production topology is defined for the target environment:
|
|
11
|
+
- `docs/ops/MINIMUM_PRODUCTION_TOPOLOGY.md`
|
|
12
|
+
- Production deployment checklist is prepared for this release:
|
|
13
|
+
- `docs/ops/PRODUCTION_DEPLOYMENT_CHECKLIST.md`
|
|
14
|
+
- Staging billing smoke secrets are configured for `.github/workflows/release.yml`:
|
|
15
|
+
- `SETTLD_STAGING_BASE_URL`
|
|
16
|
+
- `SETTLD_STAGING_OPS_TOKEN`
|
|
17
|
+
- npm publish secret is configured for `.github/workflows/release.yml` if you want direct registry distribution:
|
|
18
|
+
- `NPM_TOKEN`
|
|
19
|
+
- PyPI Trusted Publisher is configured for `.github/workflows/release.yml` and the `pypi` GitHub environment is allowed.
|
|
20
|
+
- PyPI Trusted Publisher is configured for `.github/workflows/python-pypi.yml` and the `pypi` GitHub environment is allowed (if using the Python-only lane).
|
|
21
|
+
- TestPyPI Trusted Publisher is configured for `.github/workflows/python-testpypi.yml` and the `testpypi` GitHub environment is allowed.
|
|
22
|
+
|
|
23
|
+
## Required release artifacts
|
|
24
|
+
|
|
25
|
+
For a v1 freeze release, the GitHub Release MUST include:
|
|
26
|
+
|
|
27
|
+
- npm tarballs (`*.tgz`) + `npm-SHA256SUMS`
|
|
28
|
+
- includes `settld-*.tgz` (CLI distribution for `npx --package ... settld ...`)
|
|
29
|
+
- optional registry publish lane (if `NPM_TOKEN` present) publishes `settld`, `settld-api-sdk`, `@settld/provider-kit`, and `create-settld-paid-tool`
|
|
30
|
+
- Python distributions (`*.whl`, `*.tar.gz`) + `python-SHA256SUMS`
|
|
31
|
+
- `conformance-v1.tar.gz` + `conformance-v1-SHA256SUMS`
|
|
32
|
+
- `settld-audit-packet-v1.zip` + `settld-audit-packet-v1.zip.sha256`
|
|
33
|
+
- `release_index_v1.json` + `release_index_v1.sig` (signed release manifest)
|
|
34
|
+
|
|
35
|
+
Release-gate evidence should also include:
|
|
36
|
+
|
|
37
|
+
- `billing-smoke-prod.log`
|
|
38
|
+
- `billing-smoke-status.json`
|
|
39
|
+
- `npm-postpublish-smoke-<version>` artifact (when `NPM_TOKEN` is configured), containing:
|
|
40
|
+
- `provider-kit-npm-view-version.txt`
|
|
41
|
+
- `create-settld-paid-tool-npm-view-version.txt`
|
|
42
|
+
- `settld-npx-version.txt`
|
|
43
|
+
- `settld-kernel-cases.txt`
|
|
44
|
+
- `settld-help.txt`
|
|
45
|
+
- `create-settld-paid-tool-help.txt`
|
|
46
|
+
- `npm-postpublish-smoke.json`
|
|
47
|
+
- `artifacts/throughput/10x-drill-summary.json`
|
|
48
|
+
- `artifacts/gates/s13-go-live-gate.json`
|
|
49
|
+
- `artifacts/gates/s13-launch-cutover-packet.json`
|
|
50
|
+
|
|
51
|
+
See `docs/spec/SUPPLY_CHAIN.md` for the release-channel threat model and verification posture.
|
|
52
|
+
|
|
53
|
+
## Local build + verification (recommended)
|
|
54
|
+
|
|
55
|
+
Build all artifacts locally:
|
|
56
|
+
|
|
57
|
+
```sh
|
|
58
|
+
python3 -m pip install --disable-pip-version-check --no-input build
|
|
59
|
+
node scripts/release/build-artifacts.mjs --out dist/release-artifacts
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
If you want to produce a locally-signed `ReleaseIndex.v1` too, provide a release signing key:
|
|
63
|
+
|
|
64
|
+
```sh
|
|
65
|
+
export SETTLD_RELEASE_SIGNING_PRIVATE_KEY_PEM="$(cat /path/to/release_ed25519_private_key.pem)"
|
|
66
|
+
node scripts/release/build-artifacts.mjs --out dist/release-artifacts --sign-release-index
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Verify release checksums:
|
|
70
|
+
|
|
71
|
+
```sh
|
|
72
|
+
(cd dist/release-artifacts && sha256sum -c SHA256SUMS)
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Validate conformance from the produced artifacts:
|
|
76
|
+
|
|
77
|
+
```sh
|
|
78
|
+
(cd dist/release-artifacts && tar -xzf conformance-v1.tar.gz)
|
|
79
|
+
node conformance-v1/run.mjs --node-bin packages/artifact-verify/bin/settld-verify.js
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Validate release assets (checksums + archive contents):
|
|
83
|
+
|
|
84
|
+
```sh
|
|
85
|
+
node scripts/release/validate-release-assets.mjs --dir dist/release-artifacts
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Verify release index signature + artifact hashes:
|
|
89
|
+
|
|
90
|
+
```sh
|
|
91
|
+
node scripts/release/verify-release.mjs --dir dist/release-artifacts --format json
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Preferred operator CLI (same contract, packaged):
|
|
95
|
+
|
|
96
|
+
```sh
|
|
97
|
+
node packages/artifact-verify/bin/settld-release.js verify --dir dist/release-artifacts --trust-file trust/release-trust.json --format json --explain
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## Release candidates
|
|
101
|
+
|
|
102
|
+
Use SemVer pre-release tags for RCs (e.g. `v1.0.0-rc.1`). RCs must meet the same artifact completeness and conformance gates as final releases.
|
|
103
|
+
|
|
104
|
+
Recommended Python dry-run before final tag release:
|
|
105
|
+
|
|
106
|
+
- Trigger `.github/workflows/python-testpypi.yml` with the target `version`.
|
|
107
|
+
- Confirm wheel/sdist publish succeeded on TestPyPI.
|
|
108
|
+
- Smoke-install from TestPyPI in a clean environment.
|
|
109
|
+
|
|
110
|
+
## Tag + release
|
|
111
|
+
|
|
112
|
+
- Create and push a tag: `vX.Y.Z`.
|
|
113
|
+
- The `release` workflow will:
|
|
114
|
+
- build and attach npm artifacts + checksums
|
|
115
|
+
- build and attach Python distribution artifacts + checksums
|
|
116
|
+
- publish Python distributions to PyPI (Trusted Publishing/OIDC)
|
|
117
|
+
- attach conformance pack + checksum
|
|
118
|
+
- attach audit packet zip + checksum
|
|
119
|
+
|
|
120
|
+
## Kernel v0 ship gate
|
|
121
|
+
|
|
122
|
+
Before any Kernel v0 release candidate or public OSS push, run:
|
|
123
|
+
|
|
124
|
+
```sh
|
|
125
|
+
node scripts/ci/run-kernel-v0-ship-gate.mjs
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
Required report:
|
|
129
|
+
|
|
130
|
+
- `artifacts/gates/kernel-v0-ship-gate.json`
|
|
131
|
+
|
|
132
|
+
Runbook:
|
|
133
|
+
|
|
134
|
+
- `docs/ops/KERNEL_V0_SHIP_GATE.md`
|
|
135
|
+
|
|
136
|
+
## S13 launch gate (pre-cutover)
|
|
137
|
+
|
|
138
|
+
Before production cutover, run:
|
|
139
|
+
|
|
140
|
+
```sh
|
|
141
|
+
node scripts/ci/run-go-live-gate.mjs
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
Required gate reports:
|
|
145
|
+
|
|
146
|
+
- `artifacts/throughput/10x-drill-summary.json`
|
|
147
|
+
- `artifacts/throughput/10x-incident-rehearsal-summary.json`
|
|
148
|
+
- `artifacts/gates/s13-go-live-gate.json`
|
|
149
|
+
- `artifacts/gates/s13-launch-cutover-packet.json`
|
|
150
|
+
|
|
151
|
+
Related runbooks:
|
|
152
|
+
|
|
153
|
+
- `docs/ops/THROUGHPUT_DRILL_10X.md`
|
|
154
|
+
- `docs/ops/GO_LIVE_GATE_S13.md`
|
|
155
|
+
- `docs/ops/LIGHTHOUSE_PRODUCTION_CLOSE.md`
|
|
156
|
+
- `docs/ops/MCP_COMPATIBILITY_MATRIX.md`
|