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,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,33 @@
|
|
|
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
|
+
- [Quickstart: Profiles CLI](./QUICKSTART_PROFILES.md)
|
|
10
|
+
- [Core Primitives](./gitbook/core-primitives.md)
|
|
11
|
+
- [API Reference](./gitbook/api-reference.md)
|
|
12
|
+
- [Conformance](./gitbook/conformance.md)
|
|
13
|
+
- [Closepacks](./gitbook/closepacks.md)
|
|
14
|
+
- [Guides](./gitbook/guides.md)
|
|
15
|
+
- [Security Model](./gitbook/security-model.md)
|
|
16
|
+
- [FAQ](./gitbook/faq.md)
|
|
17
|
+
|
|
18
|
+
## Fastest onboarding path
|
|
19
|
+
|
|
20
|
+
1. Run `settld setup` (or `./bin/settld.js setup`) with your host, tenant, and API key.
|
|
21
|
+
2. Activate your host and run `npm run mcp:probe`.
|
|
22
|
+
3. Run `npm run demo:mcp-paid-exa`.
|
|
23
|
+
4. Verify the first receipt:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
jq -c 'first' artifacts/mcp-paid-exa/*/x402-receipts.export.jsonl > /tmp/settld-first-receipt.json
|
|
27
|
+
settld x402 receipt verify /tmp/settld-first-receipt.json --format json --json-out /tmp/settld-first-receipt.verify.json
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Reference docs:
|
|
31
|
+
|
|
32
|
+
- `docs/QUICKSTART_MCP_HOSTS.md`
|
|
33
|
+
- `docs/QUICKSTART_MCP.md`
|
|
@@ -0,0 +1,182 @@
|
|
|
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
|
+
- Main-branch release gate jobs are green in `.github/workflows/tests.yml` for the release commit:
|
|
9
|
+
- `noo_44_47_48_regressions` (NOO-44/47/48 fail-closed regression lane)
|
|
10
|
+
- `kernel_v0_ship_gate`
|
|
11
|
+
- `production_cutover_gate`
|
|
12
|
+
- `offline_verification_parity_gate` (NOO-50)
|
|
13
|
+
- `onboarding_host_success_gate`
|
|
14
|
+
- Public package smoke for OpenClaw onboarding is green:
|
|
15
|
+
- `npm run test:ci:public-openclaw-npx-smoke`
|
|
16
|
+
- `CHANGELOG.md` is updated and accurate.
|
|
17
|
+
- Protocol v1 freeze gate is satisfied (no accidental v1 schema/vector drift).
|
|
18
|
+
- Minimum production topology is defined for the target environment:
|
|
19
|
+
- `docs/ops/MINIMUM_PRODUCTION_TOPOLOGY.md`
|
|
20
|
+
- Production deployment checklist is prepared for this release:
|
|
21
|
+
- `docs/ops/PRODUCTION_DEPLOYMENT_CHECKLIST.md`
|
|
22
|
+
- Staging billing smoke secrets are configured for `.github/workflows/release.yml`:
|
|
23
|
+
- `SETTLD_STAGING_BASE_URL`
|
|
24
|
+
- `SETTLD_STAGING_OPS_TOKEN`
|
|
25
|
+
- npm publish secret is configured for `.github/workflows/release.yml` if you want direct registry distribution:
|
|
26
|
+
- `NPM_TOKEN`
|
|
27
|
+
- Optional launch cutover packet signing inputs are configured for `.github/workflows/go-live-gate.yml` if signed packets are required:
|
|
28
|
+
- secret: `LAUNCH_CUTOVER_PACKET_SIGNING_PRIVATE_KEY_PEM`
|
|
29
|
+
- variable: `LAUNCH_CUTOVER_PACKET_SIGNATURE_KEY_ID`
|
|
30
|
+
- PyPI Trusted Publisher is configured for `.github/workflows/release.yml` and the `pypi` GitHub environment is allowed.
|
|
31
|
+
- PyPI Trusted Publisher is configured for `.github/workflows/python-pypi.yml` and the `pypi` GitHub environment is allowed (if using the Python-only lane).
|
|
32
|
+
- TestPyPI Trusted Publisher is configured for `.github/workflows/python-testpypi.yml` and the `testpypi` GitHub environment is allowed.
|
|
33
|
+
|
|
34
|
+
## Required release artifacts
|
|
35
|
+
|
|
36
|
+
For a v1 freeze release, the GitHub Release MUST include:
|
|
37
|
+
|
|
38
|
+
- npm tarballs (`*.tgz`) + `npm-SHA256SUMS`
|
|
39
|
+
- includes `settld-*.tgz` (CLI distribution for `npx --package ... settld ...`)
|
|
40
|
+
- optional registry publish lane (if `NPM_TOKEN` present) publishes `settld`, `settld-api-sdk`, `@settld/provider-kit`, and `create-settld-paid-tool`
|
|
41
|
+
- Python distributions (`*.whl`, `*.tar.gz`) + `python-SHA256SUMS`
|
|
42
|
+
- `conformance-v1.tar.gz` + `conformance-v1-SHA256SUMS`
|
|
43
|
+
- `settld-audit-packet-v1.zip` + `settld-audit-packet-v1.zip.sha256`
|
|
44
|
+
- `release_index_v1.json` + `release_index_v1.sig` (signed release manifest)
|
|
45
|
+
- `release-promotion-guard.json` (NOO-65 promotion guard report)
|
|
46
|
+
|
|
47
|
+
Release-gate evidence should also include:
|
|
48
|
+
|
|
49
|
+
- `billing-smoke-prod.log`
|
|
50
|
+
- `billing-smoke-status.json`
|
|
51
|
+
- `npm-postpublish-smoke-<version>` artifact (when `NPM_TOKEN` is configured), containing:
|
|
52
|
+
- `provider-kit-npm-view-version.txt`
|
|
53
|
+
- `create-settld-paid-tool-npm-view-version.txt`
|
|
54
|
+
- `settld-npx-version.txt`
|
|
55
|
+
- `settld-kernel-cases.txt`
|
|
56
|
+
- `settld-help.txt`
|
|
57
|
+
- `create-settld-paid-tool-help.txt`
|
|
58
|
+
- `npm-postpublish-smoke.json`
|
|
59
|
+
- `artifacts/throughput/10x-drill-summary.json`
|
|
60
|
+
- `artifacts/gates/s13-go-live-gate.json`
|
|
61
|
+
- `artifacts/gates/s13-launch-cutover-packet.json`
|
|
62
|
+
- when signing is configured, packet includes `signature` with `schemaVersion=LaunchCutoverPacketSignature.v1`
|
|
63
|
+
- `artifacts/gates/production-cutover-gate.json`
|
|
64
|
+
- `artifacts/gates/offline-verification-parity-gate.json` (NOO-50)
|
|
65
|
+
- `artifacts/gates/onboarding-host-success-gate.json`
|
|
66
|
+
- `artifacts/gates/release-promotion-guard.json` (NOO-65)
|
|
67
|
+
|
|
68
|
+
See `docs/spec/SUPPLY_CHAIN.md` for the release-channel threat model and verification posture.
|
|
69
|
+
|
|
70
|
+
## Local build + verification (recommended)
|
|
71
|
+
|
|
72
|
+
Build all artifacts locally:
|
|
73
|
+
|
|
74
|
+
```sh
|
|
75
|
+
python3 -m pip install --disable-pip-version-check --no-input build
|
|
76
|
+
node scripts/release/build-artifacts.mjs --out dist/release-artifacts
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
If you want to produce a locally-signed `ReleaseIndex.v1` too, provide a release signing key:
|
|
80
|
+
|
|
81
|
+
```sh
|
|
82
|
+
export SETTLD_RELEASE_SIGNING_PRIVATE_KEY_PEM="$(cat /path/to/release_ed25519_private_key.pem)"
|
|
83
|
+
node scripts/release/build-artifacts.mjs --out dist/release-artifacts --sign-release-index
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Verify release checksums:
|
|
87
|
+
|
|
88
|
+
```sh
|
|
89
|
+
(cd dist/release-artifacts && sha256sum -c SHA256SUMS)
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Validate conformance from the produced artifacts:
|
|
93
|
+
|
|
94
|
+
```sh
|
|
95
|
+
(cd dist/release-artifacts && tar -xzf conformance-v1.tar.gz)
|
|
96
|
+
node conformance-v1/run.mjs --node-bin packages/artifact-verify/bin/settld-verify.js
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Validate release assets (checksums + archive contents):
|
|
100
|
+
|
|
101
|
+
```sh
|
|
102
|
+
node scripts/release/validate-release-assets.mjs --dir dist/release-artifacts
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
Verify release index signature + artifact hashes:
|
|
106
|
+
|
|
107
|
+
```sh
|
|
108
|
+
node scripts/release/verify-release.mjs --dir dist/release-artifacts --format json
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Preferred operator CLI (same contract, packaged):
|
|
112
|
+
|
|
113
|
+
```sh
|
|
114
|
+
node packages/artifact-verify/bin/settld-release.js verify --dir dist/release-artifacts --trust-file trust/release-trust.json --format json --explain
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## Release candidates
|
|
118
|
+
|
|
119
|
+
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.
|
|
120
|
+
|
|
121
|
+
Recommended Python dry-run before final tag release:
|
|
122
|
+
|
|
123
|
+
- Trigger `.github/workflows/python-testpypi.yml` with the target `version`.
|
|
124
|
+
- Confirm wheel/sdist publish succeeded on TestPyPI.
|
|
125
|
+
- Smoke-install from TestPyPI in a clean environment.
|
|
126
|
+
|
|
127
|
+
## Tag + release
|
|
128
|
+
|
|
129
|
+
- Create and push a tag: `vX.Y.Z`.
|
|
130
|
+
- The `release` workflow will:
|
|
131
|
+
- build and attach npm artifacts + checksums
|
|
132
|
+
- build and attach Python distribution artifacts + checksums
|
|
133
|
+
- publish Python distributions to PyPI (Trusted Publishing/OIDC)
|
|
134
|
+
- attach conformance pack + checksum
|
|
135
|
+
- attach audit packet zip + checksum
|
|
136
|
+
|
|
137
|
+
## Kernel v0 ship gate
|
|
138
|
+
|
|
139
|
+
Before any Kernel v0 release candidate or public OSS push, run:
|
|
140
|
+
|
|
141
|
+
```sh
|
|
142
|
+
node scripts/ci/run-kernel-v0-ship-gate.mjs
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
Required report:
|
|
146
|
+
|
|
147
|
+
- `artifacts/gates/kernel-v0-ship-gate.json`
|
|
148
|
+
|
|
149
|
+
Runbook:
|
|
150
|
+
|
|
151
|
+
- `docs/ops/KERNEL_V0_SHIP_GATE.md`
|
|
152
|
+
|
|
153
|
+
## S13 launch gate (pre-cutover)
|
|
154
|
+
|
|
155
|
+
Before production cutover, run:
|
|
156
|
+
|
|
157
|
+
```sh
|
|
158
|
+
node scripts/ci/run-go-live-gate.mjs
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
Required gate reports:
|
|
162
|
+
|
|
163
|
+
- `artifacts/throughput/10x-drill-summary.json`
|
|
164
|
+
- `artifacts/throughput/10x-incident-rehearsal-summary.json`
|
|
165
|
+
- `artifacts/gates/production-cutover-gate.json`
|
|
166
|
+
- `artifacts/gates/s13-go-live-gate.json`
|
|
167
|
+
- `artifacts/gates/s13-launch-cutover-packet.json`
|
|
168
|
+
- Live deploy readiness run (manual workflow): `artifacts/gates/production-cutover-gate-prod.json`
|
|
169
|
+
|
|
170
|
+
Promotion guard order (fail-closed):
|
|
171
|
+
|
|
172
|
+
1. NOO-50 parity gate report is generated on main (`artifacts/gates/offline-verification-parity-gate.json`).
|
|
173
|
+
2. S13 go-live workflow report set is generated for the same release commit (`s13-go-live-gate.json` + `s13-launch-cutover-packet.json`).
|
|
174
|
+
3. Release workflow binds all required gate artifacts (kernel, production cutover, NOO-50 parity, onboarding host success, S13 go-live, S13 launch packet, hosted baseline evidence) into NOO-65.
|
|
175
|
+
4. Release workflow must emit `artifacts/gates/release-promotion-guard.json` with `verdict.ok=true` before artifact publish jobs execute.
|
|
176
|
+
|
|
177
|
+
Related runbooks:
|
|
178
|
+
|
|
179
|
+
- `docs/ops/THROUGHPUT_DRILL_10X.md`
|
|
180
|
+
- `docs/ops/GO_LIVE_GATE_S13.md`
|
|
181
|
+
- `docs/ops/LIGHTHOUSE_PRODUCTION_CLOSE.md`
|
|
182
|
+
- `docs/ops/MCP_COMPATIBILITY_MATRIX.md`
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# Releasing Settld
|
|
2
|
+
|
|
3
|
+
This repo treats the **protocol** (docs + schemas + vectors + fixtures) as an API. Releases must be repeatable and reviewable.
|
|
4
|
+
|
|
5
|
+
See `docs/spec/VERSIONING.md` for “what requires a bump”.
|
|
6
|
+
|
|
7
|
+
## Release checklist
|
|
8
|
+
|
|
9
|
+
See `docs/RELEASE_CHECKLIST.md` for the definitive artifact completeness requirements.
|
|
10
|
+
|
|
11
|
+
1. Ensure `npm test` is green.
|
|
12
|
+
2. Ensure fixture determinism gate passes (it’s part of `npm test`).
|
|
13
|
+
3. Update `CHANGELOG.md`:
|
|
14
|
+
- Add a new version section (Keep a Changelog format).
|
|
15
|
+
- Call out any protocol-surface changes explicitly.
|
|
16
|
+
4. Bump tool version(s) you ship:
|
|
17
|
+
- `packages/artifact-verify/package.json` `version`
|
|
18
|
+
- `packages/api-sdk-python/pyproject.toml` `project.version` (when shipping Python SDK changes)
|
|
19
|
+
- `SETTLD_VERSION` (repo/service version stamp)
|
|
20
|
+
5. Run packaging smoke test:
|
|
21
|
+
- `node scripts/ci/npm-pack-smoke.mjs`
|
|
22
|
+
- `node scripts/ci/cli-pack-smoke.mjs`
|
|
23
|
+
- `node scripts/ci/run-public-openclaw-npx-smoke.mjs`
|
|
24
|
+
- `python3 -m build packages/api-sdk-python --sdist --wheel --outdir /tmp/settld-python-dist-smoke`
|
|
25
|
+
- Optionally generate full release artifacts locally: `npm run release:artifacts`
|
|
26
|
+
6. Create a tag and push it:
|
|
27
|
+
- Tag format: `vX.Y.Z`
|
|
28
|
+
- `git tag -a vX.Y.Z -m "vX.Y.Z"`
|
|
29
|
+
- `git push origin vX.Y.Z`
|
|
30
|
+
|
|
31
|
+
On tag push, GitHub Actions builds and publishes release artifacts (Docker image, Helm chart, npm tarballs, Python wheel/sdist artifacts, SHA256SUMS).
|
|
32
|
+
If `NPM_TOKEN` is configured in repo secrets, the release lane also publishes:
|
|
33
|
+
|
|
34
|
+
- `settld` (CLI, so `npx settld ...` works directly),
|
|
35
|
+
- `settld-api-sdk` (JS SDK used by starter templates),
|
|
36
|
+
- `@settld/provider-kit` (provider middleware package),
|
|
37
|
+
- `create-settld-paid-tool` (scaffold CLI package).
|
|
38
|
+
After publish, the workflow runs registry smoke checks and uploads `npm-postpublish-smoke-<version>` artifacts with command outputs + JSON summary evidence.
|
|
39
|
+
The `release_gate` job also runs a staging billing smoke (`dev:billing:smoke:prod`) and uploads `billing-smoke-prod.log` + `billing-smoke-status.json` as gate artifacts.
|
|
40
|
+
|
|
41
|
+
Python package publishing uses PyPI Trusted Publishing (OIDC) via either:
|
|
42
|
+
|
|
43
|
+
- the `python_publish` job in `.github/workflows/release.yml` (full release lane), or
|
|
44
|
+
- `.github/workflows/python-pypi.yml` (Python-only publish lane).
|
|
45
|
+
|
|
46
|
+
Before the first publish, configure a PyPI trusted publisher for this repo/workflow and allow the `pypi` GitHub environment.
|
|
47
|
+
|
|
48
|
+
## TestPyPI dry-run lane
|
|
49
|
+
|
|
50
|
+
Use `.github/workflows/python-testpypi.yml` as a manual pre-production lane:
|
|
51
|
+
|
|
52
|
+
1. Ensure `packages/api-sdk-python/pyproject.toml` `project.version` matches the version you plan to publish.
|
|
53
|
+
2. Run the `python-testpypi` workflow via `workflow_dispatch` and pass `version`.
|
|
54
|
+
3. The workflow builds wheel+sdist, asserts versioned filenames, and publishes to TestPyPI using OIDC (`testpypi` environment).
|
|
55
|
+
4. Validate installability from TestPyPI before running a production tag release.
|
|
56
|
+
|
|
57
|
+
## Python-only PyPI lane
|
|
58
|
+
|
|
59
|
+
Use `.github/workflows/python-pypi.yml` when you want to publish just the Python SDK to PyPI without waiting for other release jobs (Docker/Helm/conformance/audit).
|
|
60
|
+
|
|
61
|
+
1. Set `packages/api-sdk-python/pyproject.toml` `project.version` to the target version.
|
|
62
|
+
2. Ensure PyPI trusted publishing is configured for workflow `python-pypi.yml` and environment `pypi`.
|
|
63
|
+
3. Run the `python-pypi` workflow via `workflow_dispatch`.
|
|
64
|
+
4. Confirm wheel/sdist publish completed on PyPI and smoke-install in a clean venv.
|
|
65
|
+
|
|
66
|
+
## Release authenticity
|
|
67
|
+
|
|
68
|
+
Releases also publish a signed `ReleaseIndex.v1` (`release_index_v1.json` + `release_index_v1.sig`) to make artifact authenticity verifiable.
|
|
69
|
+
|
|
70
|
+
See `docs/spec/ReleaseIndex.v1.md` and `docs/spec/SUPPLY_CHAIN.md`.
|
|
71
|
+
|
|
72
|
+
The release workflow expects a repo secret named `SETTLD_RELEASE_SIGNING_PRIVATE_KEY_PEM` containing an Ed25519 private key PEM used only for signing release indexes.
|
|
73
|
+
|
|
74
|
+
The corresponding public key (and quorum policy, if used) is pinned in `trust/release-trust.json` and should be treated as a security-sensitive change (PR + review).
|
|
75
|
+
|
|
76
|
+
## Protocol vectors / fixtures rotation
|
|
77
|
+
|
|
78
|
+
If a change *intentionally* changes protocol meaning (schemas/spec semantics/strictness/canonicalization/hashing), do not “let it drift”:
|
|
79
|
+
|
|
80
|
+
- Update specs and schemas together.
|
|
81
|
+
- Rotate vectors and/or add fixtures deliberately.
|
|
82
|
+
- Add a clear “Protocol change” entry to `CHANGELOG.md`.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Repo Settings (Recommended)
|
|
2
|
+
|
|
3
|
+
These are GitHub-side settings we expect for a fail-closed kernel repo.
|
|
4
|
+
|
|
5
|
+
## Branch Protection (main)
|
|
6
|
+
|
|
7
|
+
- Require a pull request before merging.
|
|
8
|
+
- Require status checks to pass before merging:
|
|
9
|
+
- `tests / pr_issue_link_guard`
|
|
10
|
+
- `tests / changelog_guard`
|
|
11
|
+
- `tests / unit_tests`
|
|
12
|
+
- `tests / openapi_drift`
|
|
13
|
+
- `tests / npm_pack_smoke (ubuntu-latest)`
|
|
14
|
+
- `tests / npm_pack_smoke (macos-latest)`
|
|
15
|
+
- `tests / npm_pack_smoke (windows-latest)`
|
|
16
|
+
- `tests / cli_cross_platform (ubuntu-latest)`
|
|
17
|
+
- `tests / cli_cross_platform (macos-latest)`
|
|
18
|
+
- `tests / cli_cross_platform (windows-latest)`
|
|
19
|
+
- `tests / python_verifier_conformance`
|
|
20
|
+
- `tests / github_action_settld_verify (jobproof)`
|
|
21
|
+
- `tests / github_action_settld_verify (monthproof)`
|
|
22
|
+
- `tests / github_action_settld_verify (financepack)`
|
|
23
|
+
- Dismiss stale PR approvals when new commits are pushed.
|
|
24
|
+
- Require linear history.
|
|
25
|
+
- Block force pushes and deletions.
|
|
26
|
+
- Require conversation resolution.
|
|
27
|
+
|
|
28
|
+
Optional:
|
|
29
|
+
|
|
30
|
+
- Require signed commits.
|
|
31
|
+
- Require CODEOWNERS review (if/when CODEOWNERS exists).
|
|
32
|
+
|
|
33
|
+
## Actions
|
|
34
|
+
|
|
35
|
+
- Keep secrets scoped to environments (staging/prod).
|
|
36
|
+
- Require manual approval for production deployments (if/when added).
|
|
37
|
+
|