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,102 @@
|
|
|
1
|
+
# HN Repost Draft (Tue 2026-02-17)
|
|
2
|
+
|
|
3
|
+
Note on compositional settlement: keep the claim narrow. Settld can bind a settlement to an agreement delegation graph and run deterministic pre-release checks (e.g. block cycles) with stable error codes (e.g. `AGREEMENT_DELEGATION_CYCLE`). Avoid implying multi-hop settlement is \"automatic\" beyond what the current API actually enforces.
|
|
4
|
+
|
|
5
|
+
## Locked Timing (ET / PT)
|
|
6
|
+
|
|
7
|
+
- Copy freeze: Mon 2026-02-16 21:00 ET / 18:00 PT
|
|
8
|
+
- Repost submission (target): Tue 2026-02-17 08:15 ET / 05:15 PT
|
|
9
|
+
- Live monitoring: Tue 08:15–11:30 ET (respond fast while ranking is most sensitive)
|
|
10
|
+
- Second sweep: Tue 18:30 ET / 15:30 PT
|
|
11
|
+
|
|
12
|
+
## Submission Details
|
|
13
|
+
|
|
14
|
+
- Type: Show HN (repost)
|
|
15
|
+
- Link target (pick one):
|
|
16
|
+
- GitHub repo (recommended for OSS + technical audience): `README.md`
|
|
17
|
+
- Blog wedge post (more narrative): `docs/blog/2026-02-14-your-ai-agent-just-spent-500-where-is-the-receipt.md`
|
|
18
|
+
- Magic Link hosted demo (if we want buyer POV): TODO (add URL)
|
|
19
|
+
- Original HN thread (if applicable): TODO (add URL)
|
|
20
|
+
|
|
21
|
+
## Title Options (Pick 1)
|
|
22
|
+
|
|
23
|
+
1. Show HN (Repost): Settld – verifiable receipts for agent spend (OSS)
|
|
24
|
+
2. Show HN (Repost): Settld – verify-before-release receipts for x402-style APIs
|
|
25
|
+
3. Show HN (Repost): Settld – deterministic settlement receipts for AI agents
|
|
26
|
+
|
|
27
|
+
## OP Comment (Recommended, Short)
|
|
28
|
+
|
|
29
|
+
Hi HN,
|
|
30
|
+
|
|
31
|
+
Reposting with a tighter “try it in 10 minutes” wedge and more spec/conformance polish.
|
|
32
|
+
|
|
33
|
+
Settld is an open source artifact protocol + verifier for turning agent work (and its evidence) into something closer to an invoice receipt: hash-bound, signed, and offline-verifiable by someone who doesn’t trust the producer.
|
|
34
|
+
|
|
35
|
+
The quickest way to feel it is the in-repo x402 gateway demo: if an upstream returns `HTTP 402 Payment Required`, the proxy turns it into `hold -> verify -> release/refund` and emits a deterministic “receipt-like” trail (`x-settld-*` headers + an API query surface).
|
|
36
|
+
|
|
37
|
+
TL;DR quickstart: `npm ci && npm run quickstart:x402` (prints `OK` + `gateId=...`). Full steps: `docs/QUICKSTART_X402_GATEWAY.md`
|
|
38
|
+
|
|
39
|
+
Two important constraints up front:
|
|
40
|
+
|
|
41
|
+
- This is not a payment processor. The local demo uses `X402_AUTOFUND=1` to simulate funding so escrow holds can be created without wiring a real rail.
|
|
42
|
+
- The core contract is the verifiable receipt + deterministic outputs (stable warning/error codes), not “trust us, the dashboard says it passed.”
|
|
43
|
+
|
|
44
|
+
Feedback I’d love:
|
|
45
|
+
|
|
46
|
+
- If you’re shipping agents that spend money, what evidence would you require to automate payout/release?
|
|
47
|
+
- Where would this break in your stack: tool calls, metering, dispute windows, refunds/chargebacks, or trust bootstrapping?
|
|
48
|
+
|
|
49
|
+
## OP Comment (Longer, If Needed)
|
|
50
|
+
|
|
51
|
+
Hi HN,
|
|
52
|
+
|
|
53
|
+
Reposting: Settld is my attempt at a missing layer for agent workflows that spend money.
|
|
54
|
+
|
|
55
|
+
Most stacks can prove “payment happened,” but can’t produce a portable receipt for “the work happened under the agreed terms” without shipping their entire log database to the counterparty.
|
|
56
|
+
|
|
57
|
+
Settld (as shipped in this repo) is two things sharing the same “truth engine”:
|
|
58
|
+
|
|
59
|
+
- An open artifact protocol (bundles + manifests + attestations + receipts) that can be verified offline with explicit trust anchors.
|
|
60
|
+
- A hosted controller (“Magic Link”) that runs the same verifier server-side for buyer-friendly approvals and exports (optional; the hosted UI shouldn’t be the only judge).
|
|
61
|
+
|
|
62
|
+
The smallest demo wedge is the x402 gateway: put a thin proxy in front of an x402-style API. When the upstream returns `HTTP 402`, the proxy routes it through a deterministic settlement step (`hold -> verify -> release/refund`) and returns a receipt-like trail you can store for audit. Quickstart: `docs/QUICKSTART_X402_GATEWAY.md`
|
|
63
|
+
|
|
64
|
+
Notes / boundaries:
|
|
65
|
+
|
|
66
|
+
- Local mode simulates funding (`X402_AUTOFUND=1`) to make the flow runnable without a real payment rail.
|
|
67
|
+
- The interesting part (to me) is that verification outputs are deterministic and machine-readable with stable codes, and can be reproduced offline from the bundle.
|
|
68
|
+
|
|
69
|
+
Would love critique on whether this is the right abstraction boundary (protocol + verifier + optional controller), and what primitives are missing to make this usable in real agent payment flows.
|
|
70
|
+
|
|
71
|
+
## Defensible Claims (OK To Say)
|
|
72
|
+
|
|
73
|
+
- Offline-verifiable bundles/receipts: artifacts commit to evidence by hashes; attestations/receipts are signature-checked; verification is reproducible without trusting the producer (`docs/OVERVIEW.md`, `docs/spec/`).
|
|
74
|
+
- Deterministic verification outputs with stable codes (warnings/errors), suitable for CI gating and audit retention (`docs/OVERVIEW.md`, `docs/QUICKSTART_VERIFY.md`, `docs/spec/WARNINGS.md`, `docs/spec/ERRORS.md`).
|
|
75
|
+
- x402 “verify-before-release” wedge exists in repo and is runnable locally in ~10 minutes (`docs/QUICKSTART_X402_GATEWAY.md`).
|
|
76
|
+
- Escrow/ledger semantics are double-entry and tested as deterministic invariants (position as “ledger model + invariants,” not “we move real money”) (`docs/LEDGER.md`, `docs/spec/ESCROW_NETTING_INVARIANTS.md`).
|
|
77
|
+
- Hosted Verify Cloud is optional; protocol/verifier are the trust core (don’t claim “must use the cloud”) (`docs/OVERVIEW.md`).
|
|
78
|
+
|
|
79
|
+
## Claims To Avoid or Qualify
|
|
80
|
+
|
|
81
|
+
- “We solve payments” or “we are escrow.” Safer: “we model escrow holds and deterministic release/refund decisions; wiring real rails is a separate integration.”
|
|
82
|
+
- “CFO/audit-ready” as a blanket statement. Safer: “designed for audit evidence retention; produces deterministic, verifiable receipts.”
|
|
83
|
+
- Any “multi-hop/cascade settlement is fully implemented” wording unless we choose a tight, defensible phrasing (see TODO and options below).
|
|
84
|
+
|
|
85
|
+
## Likely HN Questions (Short Answers)
|
|
86
|
+
|
|
87
|
+
- “Why not just use Stripe Connect?”
|
|
88
|
+
- Stripe moves money. Settld is about proving/verifying off-chain work and producing a portable, deterministic receipt that can drive a release/refund decision.
|
|
89
|
+
- “Why not do this as a smart contract?”
|
|
90
|
+
- Smart contracts enforce on-chain state; the hard part here is verifying off-chain evidence/work completion and making that verification reproducible offline.
|
|
91
|
+
- “Is this centralized trust?”
|
|
92
|
+
- The hosted UI is intentionally not the only judge; verification should be reproducible offline with explicit trust anchors.
|
|
93
|
+
- “Does the demo move real money?”
|
|
94
|
+
- No; it simulates funding to make the end-to-end loop runnable locally (`X402_AUTOFUND=1`).
|
|
95
|
+
|
|
96
|
+
## Cascade Settlement (Decision Needed Before Mon 2026-02-16)
|
|
97
|
+
|
|
98
|
+
If we include anything about cascade/multi-hop settlement, pick ONE of these and stick to it:
|
|
99
|
+
|
|
100
|
+
- Option A (spec-level, safest): “We added an `AgreementDelegation.v1` primitive for linking parent/child agreements in multi-hop agent chains (provenance, depth limits, and budget-capping).”
|
|
101
|
+
- Option B (lightly aspirational): “We’re building toward multi-hop agent chains with compositional budget-capping and deterministic settlement; the delegation primitive is in the repo.”
|
|
102
|
+
- Option C (omit): Don’t mention cascade settlement at all; keep the post focused on the verifiable receipt + verify-before-release wedge.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Show HN Draft
|
|
2
|
+
|
|
3
|
+
## Title (pick one)
|
|
4
|
+
|
|
5
|
+
1. Show HN (Repost): Settld – verify-before-release gateway for HTTP 402 (x402) APIs (OSS)
|
|
6
|
+
2. Show HN (Repost): Settld – verifiable settlement receipts for agent spend (OSS)
|
|
7
|
+
3. Show HN (Repost): Settld – deterministic release/refund decisions + receipt trail for x402
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Post Body
|
|
12
|
+
|
|
13
|
+
Hi HN,
|
|
14
|
+
|
|
15
|
+
Settld is an open source artifact protocol + verifier for producing hash-bound “settlement receipts”: deterministic records that tie *terms + evidence refs + a release/refund decision* together so a counterparty can verify what happened without trusting your database.
|
|
16
|
+
|
|
17
|
+
Fastest way to try it is the in-repo x402 gateway demo (about 10 minutes):
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
npm ci && npm run quickstart:x402
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
It runs a local Settld API, a mock upstream that returns `HTTP 402 Payment Required` + `x-payment-required`, and a thin gateway. First request returns `402` plus `x-settld-gate-id`. Retry with that gate id and `x-payment: paid`, and the gateway calls Settld to:
|
|
24
|
+
|
|
25
|
+
`hold -> verify -> release/refund (+ optional holdback)` and returns a receipt-like trail via `x-settld-*` headers (and a `GET /x402/gate/:id` inspection endpoint).
|
|
26
|
+
|
|
27
|
+
Full quickstart (Docker + Linux notes): `docs/QUICKSTART_X402_GATEWAY.md`
|
|
28
|
+
|
|
29
|
+
Two boundaries up front:
|
|
30
|
+
|
|
31
|
+
- This is not a payment processor. The demo uses `X402_AUTOFUND=1` to simulate funding in an internal ledger so escrow-style holds can be created.
|
|
32
|
+
- Multi-hop “agents hiring agents” is not automatic today. The repo includes an `AgreementDelegation.v1` primitive + deterministic cycle checks when a gate is bound to an agreement graph; full compositional settlement is still in progress.
|
|
33
|
+
|
|
34
|
+
Feedback I’d love:
|
|
35
|
+
|
|
36
|
+
1. If you’re shipping agent workflows that spend money today, what evidence would you require to automate release/refund?
|
|
37
|
+
2. Where would this break first in your stack: metering, dispute windows, refunds/chargebacks, or trust anchors?
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Submission Notes (not part of the post)
|
|
42
|
+
|
|
43
|
+
- Post Tue-Thu mornings ET if you want feedback quickly.
|
|
44
|
+
- If someone says “just use Stripe Connect”: Stripe moves money; Settld decides how much should move based on verifiable evidence, deterministically.
|
|
45
|
+
- If someone says “just use a smart contract”: smart contracts can enforce on-chain state; Settld is about verifying off-chain work completion and producing portable, deterministic receipts.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Artifact Verification Status API
|
|
2
|
+
|
|
3
|
+
This endpoint provides a normalized verification signal for an artifact:
|
|
4
|
+
|
|
5
|
+
- `green`: verification passed
|
|
6
|
+
- `amber`: insufficient evidence or unknown proof state
|
|
7
|
+
- `red`: verification failed
|
|
8
|
+
|
|
9
|
+
## Endpoint
|
|
10
|
+
|
|
11
|
+
- `GET /artifacts/{artifactId}/status`
|
|
12
|
+
- Scopes: `ops_read` or `audit_read` or `finance_read`
|
|
13
|
+
|
|
14
|
+
## Bulk status in ops job list
|
|
15
|
+
|
|
16
|
+
- `GET /ops/jobs` includes inline verification fields per job:
|
|
17
|
+
- `verificationStatus` (`green` | `amber` | `red`)
|
|
18
|
+
- `evidenceCount`, `activeEvidenceCount`
|
|
19
|
+
- `slaCompliancePct`
|
|
20
|
+
- `verification` (full normalized verification object)
|
|
21
|
+
- Scopes: `ops_read` or `audit_read`
|
|
22
|
+
|
|
23
|
+
## Response shape
|
|
24
|
+
|
|
25
|
+
The API returns:
|
|
26
|
+
|
|
27
|
+
- Artifact identity fields (`artifactId`, `artifactType`, `artifactHash`, `jobId`, `sourceEventId`)
|
|
28
|
+
- `verification` object with:
|
|
29
|
+
- `verificationStatus` (`green` | `amber` | `red`)
|
|
30
|
+
- `proofStatus` (`PASS` | `INSUFFICIENT_EVIDENCE` | `FAIL` | `null`)
|
|
31
|
+
- `reasonCodes`, `missingEvidence`
|
|
32
|
+
- `evidenceCount`, `activeEvidenceCount`
|
|
33
|
+
- `slaCompliancePct`
|
|
34
|
+
- Coverage metrics (`requiredZones`, `reportedZones`, `belowThresholdZones`, `missingZoneCount`, `excusedZones`)
|
|
35
|
+
|
|
36
|
+
## Example
|
|
37
|
+
|
|
38
|
+
```sh
|
|
39
|
+
curl -sS "http://localhost:3000/artifacts/art_123/status" \
|
|
40
|
+
-H "x-proxy-tenant-id: tenant_default" \
|
|
41
|
+
-H "x-settld-protocol: 1.0" \
|
|
42
|
+
-H "x-proxy-ops-token: <ops_read_token>" | jq
|
|
43
|
+
```
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# Stripe Billing Webhook Replay Guardrail Runbook
|
|
2
|
+
|
|
3
|
+
Use this runbook when Stripe webhook ingestion shows replayable dead-letter volume or subscription drift risk.
|
|
4
|
+
|
|
5
|
+
## Preconditions
|
|
6
|
+
|
|
7
|
+
- You have `finance_read` + `finance_write` scopes for the affected tenant.
|
|
8
|
+
- Environment is set:
|
|
9
|
+
- `SETTLD_BASE_URL`
|
|
10
|
+
- `PROXY_OPS_TOKEN`
|
|
11
|
+
- `SETTLD_TENANT_ID`
|
|
12
|
+
- `curl` and `jq` are available.
|
|
13
|
+
|
|
14
|
+
## Reproducible command set
|
|
15
|
+
|
|
16
|
+
### 1) Snapshot reconcile report
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
curl -sS \
|
|
20
|
+
-H "x-proxy-ops-token: $PROXY_OPS_TOKEN" \
|
|
21
|
+
-H "x-proxy-tenant-id: $SETTLD_TENANT_ID" \
|
|
22
|
+
"$SETTLD_BASE_URL/ops/finance/billing/providers/stripe/reconcile/report?limit=200" | jq .
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Focus on:
|
|
26
|
+
- `rejectedReasonCounts`
|
|
27
|
+
- `replayableRejectedCount`
|
|
28
|
+
- `sourceCounts`
|
|
29
|
+
|
|
30
|
+
### 2) List replay candidates
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
curl -sS \
|
|
34
|
+
-H "x-proxy-ops-token: $PROXY_OPS_TOKEN" \
|
|
35
|
+
-H "x-proxy-tenant-id: $SETTLD_TENANT_ID" \
|
|
36
|
+
"$SETTLD_BASE_URL/ops/finance/billing/providers/stripe/dead-letter?limit=200" | jq .
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Optional filters:
|
|
40
|
+
- `.../dead-letter?reason=<reason>&eventType=<eventType>&limit=200`
|
|
41
|
+
|
|
42
|
+
### 3) Dry-run replay
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
curl -sS -X POST \
|
|
46
|
+
-H "x-proxy-ops-token: $PROXY_OPS_TOKEN" \
|
|
47
|
+
-H "x-proxy-tenant-id: $SETTLD_TENANT_ID" \
|
|
48
|
+
-H "content-type: application/json" \
|
|
49
|
+
-d '{"dryRun":true,"limit":200}' \
|
|
50
|
+
"$SETTLD_BASE_URL/ops/finance/billing/providers/stripe/dead-letter/replay" | jq .
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### 4) Execute replay
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
curl -sS -X POST \
|
|
57
|
+
-H "x-proxy-ops-token: $PROXY_OPS_TOKEN" \
|
|
58
|
+
-H "x-proxy-tenant-id: $SETTLD_TENANT_ID" \
|
|
59
|
+
-H "content-type: application/json" \
|
|
60
|
+
-d '{"dryRun":false,"limit":200}' \
|
|
61
|
+
"$SETTLD_BASE_URL/ops/finance/billing/providers/stripe/dead-letter/replay" | jq .
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### 5) Validate post-replay state
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
curl -sS \
|
|
68
|
+
-H "x-proxy-ops-token: $PROXY_OPS_TOKEN" \
|
|
69
|
+
-H "x-proxy-tenant-id: $SETTLD_TENANT_ID" \
|
|
70
|
+
"$SETTLD_BASE_URL/ops/finance/billing/providers/stripe/reconcile/report?limit=200" | jq .
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### 6) Scripted flow (recommended)
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
# Dry-run (default)
|
|
77
|
+
scripts/dev/billing-webhook-replay.sh
|
|
78
|
+
|
|
79
|
+
# Execute replay
|
|
80
|
+
DRY_RUN=0 scripts/dev/billing-webhook-replay.sh
|
|
81
|
+
|
|
82
|
+
# Scoped replay by reason/event type
|
|
83
|
+
DRY_RUN=0 REASON=reconcile_apply_failed EVENT_TYPE=customer.subscription.updated \
|
|
84
|
+
scripts/dev/billing-webhook-replay.sh
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## On-call validation checklist
|
|
88
|
+
|
|
89
|
+
- [ ] Baseline report captured (`reconcile/report`) and incident ticket updated with snapshot.
|
|
90
|
+
- [ ] Replay candidate count and reasons reviewed (`dead-letter`).
|
|
91
|
+
- [ ] Dry-run replay performed and no schema/permission errors observed.
|
|
92
|
+
- [ ] Live replay executed (`dryRun=false`) with `summary.failed == 0` (or failures documented).
|
|
93
|
+
- [ ] Post-replay report shows expected movement in:
|
|
94
|
+
- [ ] `replayableRejectedCount` (downward or unchanged with reason)
|
|
95
|
+
- [ ] `ingestBreakdown.replayed` (upward)
|
|
96
|
+
- [ ] `sourceCounts.dead_letter_replay` (upward)
|
|
97
|
+
- [ ] Tenant billing plan state verified:
|
|
98
|
+
- [ ] `GET /ops/finance/billing/plan`
|
|
99
|
+
- [ ] Incident notes include replay scope (`reason`, `eventType`, `auditIds`) and final counts.
|
|
100
|
+
|
|
101
|
+
## Rollback / safety notes
|
|
102
|
+
|
|
103
|
+
- Replay is idempotent at event level; do not mutate historical audit rows manually.
|
|
104
|
+
- If replay failures increase (`dead_letter_replay_apply_failed`), stop and investigate root cause before rerunning.
|
|
105
|
+
- Never disable signature verification as an incident workaround.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# CI Flake Budget
|
|
2
|
+
|
|
3
|
+
This repo runs with a strict flake budget for paid-call kernel coverage.
|
|
4
|
+
|
|
5
|
+
## Policy
|
|
6
|
+
|
|
7
|
+
- Budget: 0
|
|
8
|
+
- No hidden retries in CI for test workflows.
|
|
9
|
+
- No `continue-on-error: true` for test jobs.
|
|
10
|
+
- No shell-level suppression (`|| true`) for test commands.
|
|
11
|
+
|
|
12
|
+
## Scope
|
|
13
|
+
|
|
14
|
+
- `.github/workflows/tests.yml`
|
|
15
|
+
- The paid-call kernel suite job (`mcp_paid_call_kernel_suite`)
|
|
16
|
+
- Existing `unit_tests` and quickstart smoke jobs
|
|
17
|
+
|
|
18
|
+
## Escalation
|
|
19
|
+
|
|
20
|
+
If a test flakes:
|
|
21
|
+
|
|
22
|
+
1. Open/attach an issue immediately (`type:ops` or `type:bug`).
|
|
23
|
+
2. Either:
|
|
24
|
+
- fix the test in the same PR, or
|
|
25
|
+
- quarantine with explicit owner + expiry date + follow-up issue.
|
|
26
|
+
3. Do not merge by masking failure with retries or error suppression.
|
|
27
|
+
|
|
28
|
+
## Enforcement
|
|
29
|
+
|
|
30
|
+
`scripts/ci/flake-budget-guard.mjs` enforces the policy markers and blocks forbidden flaky-tolerance patterns in `tests.yml`.
|
|
31
|
+
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Dispute Finance Reconciliation Packet
|
|
2
|
+
|
|
3
|
+
This runbook generates a deterministic packet for dispute-driven settlement adjustments.
|
|
4
|
+
|
|
5
|
+
## Purpose
|
|
6
|
+
|
|
7
|
+
- Produce a finance-reviewable packet for one `SettlementAdjustment.v1`.
|
|
8
|
+
- Include adjustment artifact + before/after wallet snapshots for payer/payee.
|
|
9
|
+
- Attach deterministic checksums and optional Ed25519 signature.
|
|
10
|
+
|
|
11
|
+
## Command
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
node scripts/ops/dispute-finance-reconciliation-packet.mjs \
|
|
15
|
+
--base-url http://127.0.0.1:3000 \
|
|
16
|
+
--tenant-id tenant_default \
|
|
17
|
+
--ops-token tok_finw \
|
|
18
|
+
--adjustment-id sadj_agmt_<agreementHash>_holdback \
|
|
19
|
+
--payer-agent-id <payerAgentId> \
|
|
20
|
+
--payee-agent-id <payeeAgentId> \
|
|
21
|
+
--out artifacts/finance/dispute-adjustment-packet.json
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Optional signing:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
node scripts/ops/dispute-finance-reconciliation-packet.mjs \
|
|
28
|
+
--base-url http://127.0.0.1:3000 \
|
|
29
|
+
--tenant-id tenant_default \
|
|
30
|
+
--ops-token tok_finw \
|
|
31
|
+
--adjustment-id sadj_agmt_<agreementHash>_holdback \
|
|
32
|
+
--payer-agent-id <payerAgentId> \
|
|
33
|
+
--payee-agent-id <payeeAgentId> \
|
|
34
|
+
--signing-key-file ./keys/finance-ops-ed25519.pem \
|
|
35
|
+
--signature-key-id finance_ops_k1 \
|
|
36
|
+
--out artifacts/finance/dispute-adjustment-packet.signed.json
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Packet contract
|
|
40
|
+
|
|
41
|
+
- `schemaVersion`: `DisputeFinanceReconciliationPacket.v1`
|
|
42
|
+
- `adjustment`: `SettlementAdjustment.v1` payload from `/ops/settlement-adjustments/{adjustmentId}`
|
|
43
|
+
- `balances.payer/payee.before|after`: wallet snapshots for reconciliation
|
|
44
|
+
- `checksums.packetHash`: canonical packet checksum (`sha256`)
|
|
45
|
+
- `checksums.adjustmentHash`: checksum carried by adjustment artifact
|
|
46
|
+
- `signature` (optional): Ed25519 signature over `checksums.packetHash`
|
|
47
|
+
|
|
48
|
+
## Finance review workflow
|
|
49
|
+
|
|
50
|
+
1. Generate the packet immediately after dispute verdict/adjustment application.
|
|
51
|
+
2. Verify `checksums.adjustmentHash` matches the adjustment artifact.
|
|
52
|
+
3. Verify `checksums.packetHash` and (if present) `signature`.
|
|
53
|
+
4. Reconcile `before -> after` snapshots against expected adjustment kind:
|
|
54
|
+
- `holdback_release`: payer escrow decreases; payee available increases.
|
|
55
|
+
- `holdback_refund`: payer escrow decreases; payer available increases.
|
|
56
|
+
5. Attach packet to incident/dispute record for immutable finance traceability.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# S13 Go-Live Gate
|
|
2
|
+
|
|
3
|
+
This gate operationalizes `STLD-T182`.
|
|
4
|
+
|
|
5
|
+
## Command
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
RUN_THROUGHPUT_DRILL=1 \
|
|
9
|
+
ALLOW_THROUGHPUT_SKIP=0 \
|
|
10
|
+
GO_LIVE_TEST_COMMAND="node --test test/settlement-kernel.test.js && node --test test/api-e2e-ops-money-rails.test.js && node --test test/api-e2e-ops-finance-net-close.test.js && node --test test/api-e2e-ops-arbitration-workspace.test.js && node --test test/api-e2e-ops-command-center.test.js && node --test test/api-e2e-billing-plan-enforcement.test.js" \
|
|
11
|
+
node scripts/ci/run-go-live-gate.mjs
|
|
12
|
+
node scripts/ci/build-launch-cutover-packet.mjs
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Required checks
|
|
16
|
+
|
|
17
|
+
- Deterministic critical test suite passes.
|
|
18
|
+
- 10x throughput drill report passes.
|
|
19
|
+
- Throughput incident rehearsal report passes.
|
|
20
|
+
- Lighthouse tracker shows at least 3 accounts in `paid_production_settlement_confirmed`/`production_active` with `signedAt`, `goLiveAt`, and `productionSettlementRef` populated.
|
|
21
|
+
|
|
22
|
+
## Output
|
|
23
|
+
|
|
24
|
+
- `artifacts/gates/s13-go-live-gate.json`
|
|
25
|
+
- `artifacts/gates/s13-launch-cutover-packet.json`
|
|
26
|
+
|
|
27
|
+
Gate is **fail-closed**: non-zero exit on any failed required check.
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
# Sprint R2: Hosted Baseline (Staging + Production)
|
|
2
|
+
|
|
3
|
+
This is the minimum hosted setup for a real product surface.
|
|
4
|
+
|
|
5
|
+
## 1) Environment topology
|
|
6
|
+
|
|
7
|
+
- `staging.app.settld.work` (frontend, Vercel)
|
|
8
|
+
- `staging.api.settld.work` (API, Railway)
|
|
9
|
+
- `app.settld.work` (frontend, Vercel)
|
|
10
|
+
- `api.settld.work` (API, Railway)
|
|
11
|
+
- Separate Postgres instances/schemas and separate secret sets for staging/prod.
|
|
12
|
+
- Separate signing keys per environment (never reuse signer keys across staging/prod).
|
|
13
|
+
|
|
14
|
+
## 2) Railway service split
|
|
15
|
+
|
|
16
|
+
Create two Railway services from this repo per environment:
|
|
17
|
+
|
|
18
|
+
- `settld-api`:
|
|
19
|
+
- start command: `npm run start:prod`
|
|
20
|
+
- `settld-worker`:
|
|
21
|
+
- start command: `npm run start:maintenance`
|
|
22
|
+
|
|
23
|
+
Both services must point at the same environment DB and secret set for that environment.
|
|
24
|
+
|
|
25
|
+
## 3) Required runtime controls
|
|
26
|
+
|
|
27
|
+
- Tenant rate limiting:
|
|
28
|
+
- `PROXY_RATE_LIMIT_RPM`
|
|
29
|
+
- `PROXY_RATE_LIMIT_BURST`
|
|
30
|
+
- API-key rate limiting:
|
|
31
|
+
- `PROXY_RATE_LIMIT_PER_KEY_RPM`
|
|
32
|
+
- `PROXY_RATE_LIMIT_PER_KEY_BURST`
|
|
33
|
+
- Tenant quotas:
|
|
34
|
+
- `PROXY_QUOTA_*` and `PROXY_QUOTA_PLATFORM_*` envs from `docs/CONFIG.md`.
|
|
35
|
+
|
|
36
|
+
## 4) Observability + alerts
|
|
37
|
+
|
|
38
|
+
Scrape `/metrics` and enable rules from `deploy/observability/prometheus-rules.yml`.
|
|
39
|
+
|
|
40
|
+
R2-required alerts:
|
|
41
|
+
|
|
42
|
+
- replay mismatches: `replay_mismatch_gauge`
|
|
43
|
+
- stuck disputes: `disputes_over_sla_gauge`, `arbitration_over_sla_gauge`
|
|
44
|
+
- stuck holds: `settlement_holds_over_24h_gauge`
|
|
45
|
+
- worker lag: `worker_outbox_pending_total_gauge`, `worker_deliveries_pending_total_gauge`
|
|
46
|
+
|
|
47
|
+
Reference: `docs/ALERTS.md`.
|
|
48
|
+
|
|
49
|
+
## 5) Backups + restore drill
|
|
50
|
+
|
|
51
|
+
- Backup/restore scripts: `scripts/backup-pg.sh`, `scripts/restore-pg.sh`
|
|
52
|
+
- Full drill script: `scripts/backup-restore-test.sh`
|
|
53
|
+
- Run at least weekly for staging and monthly for production.
|
|
54
|
+
- Record evidence in incident/runbook logs (timestamp, operator, pass/fail, DB snapshot IDs).
|
|
55
|
+
|
|
56
|
+
## 6) Clerk onboarding handoff (app -> API)
|
|
57
|
+
|
|
58
|
+
The app should map Clerk identity/org to a tenant ID, then bootstrap that tenant on the API side.
|
|
59
|
+
|
|
60
|
+
Recommended server-side flow:
|
|
61
|
+
|
|
62
|
+
1. User signs up/signs in via Clerk at `*.app.settld.work`.
|
|
63
|
+
2. App backend chooses tenant ID (for example: `tenant_<clerk_org_id>`).
|
|
64
|
+
3. App backend calls:
|
|
65
|
+
- `POST /ops/tenants/bootstrap` (with a privileged ops token, server-side only)
|
|
66
|
+
4. App stores/bootstrap-returns tenant API key and presents onboarding state + Explorer links.
|
|
67
|
+
|
|
68
|
+
## 7) New-tenant acceptance run
|
|
69
|
+
|
|
70
|
+
Use this command to prove onboarding is self-serve and conformance-ready:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
npm run ops:tenant:bootstrap:conformance -- \
|
|
74
|
+
--base-url https://staging.api.settld.work \
|
|
75
|
+
--ops-token "$SETTLD_STAGING_OPS_TOKEN" \
|
|
76
|
+
--tenant-id "tenant_demo_$(date +%s)"
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
This performs:
|
|
80
|
+
|
|
81
|
+
- tenant bootstrap
|
|
82
|
+
- API key issuance
|
|
83
|
+
- kernel conformance run with that new tenant/API key
|
|
84
|
+
|
|
85
|
+
## 8) Acceptance bar (R2)
|
|
86
|
+
|
|
87
|
+
- Brand-new tenant can be created from app onboarding flow.
|
|
88
|
+
- Tenant receives API key without manual DB edits.
|
|
89
|
+
- Tenant can run kernel conformance against staging/prod.
|
|
90
|
+
- Explorer, replay, and closepack flows are reachable for that tenant.
|
|
91
|
+
|
|
92
|
+
## 9) Hosted baseline evidence command
|
|
93
|
+
|
|
94
|
+
Use the ops command below to collect a deterministic hosted-baseline evidence artifact (health, ops status, metrics, alert metric presence, billing catalog/quotas, optional rate-limit probe, optional backup/restore drill evidence):
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
npm run ops:hosted-baseline:evidence -- \
|
|
98
|
+
--base-url https://staging.api.settld.work \
|
|
99
|
+
--tenant-id tenant_default \
|
|
100
|
+
--ops-token "$SETTLD_STAGING_OPS_TOKEN" \
|
|
101
|
+
--environment staging \
|
|
102
|
+
--rate-limit-mode optional \
|
|
103
|
+
--rate-limit-probe-requests 20 \
|
|
104
|
+
--out ./artifacts/ops/hosted-baseline-evidence-staging.json
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
If you want the command to execute the backup/restore drill inline:
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
npm run ops:hosted-baseline:evidence -- \
|
|
111
|
+
--base-url https://staging.api.settld.work \
|
|
112
|
+
--tenant-id tenant_default \
|
|
113
|
+
--ops-token "$SETTLD_STAGING_OPS_TOKEN" \
|
|
114
|
+
--environment staging \
|
|
115
|
+
--run-backup-restore true \
|
|
116
|
+
--database-url "$DATABASE_URL" \
|
|
117
|
+
--restore-database-url "$RESTORE_DATABASE_URL" \
|
|
118
|
+
--require-backup-restore true \
|
|
119
|
+
--out ./artifacts/ops/hosted-baseline-evidence-staging.json
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Important:
|
|
123
|
+
|
|
124
|
+
- `DATABASE_URL` and `RESTORE_DATABASE_URL` must be real connection strings (not redacted placeholders like `postgres://...`).
|
|
125
|
+
- Quick preflight:
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
node -e 'for (const n of ["DATABASE_URL","RESTORE_DATABASE_URL"]) { const v=(process.env[n]||"").trim(); if (!v) { console.error(`${n}=missing`); process.exitCode=1; continue; } const u=new URL(v); console.log(`${n} host=${u.hostname} protocol=${u.protocol}`); }'
|
|
129
|
+
```
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# Kernel v0 Ship Gate
|
|
2
|
+
|
|
3
|
+
This is the fail-closed release gate for shipping the current Kernel v0 OSS rails.
|
|
4
|
+
|
|
5
|
+
## Command
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
node scripts/ci/run-kernel-v0-ship-gate.mjs
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Optional:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
RUN_KERNEL_V0_QUICKSTART_SMOKE=0 node scripts/ci/run-kernel-v0-ship-gate.mjs
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Report output:
|
|
18
|
+
|
|
19
|
+
- `artifacts/gates/kernel-v0-ship-gate.json`
|
|
20
|
+
|
|
21
|
+
## CI enforcement
|
|
22
|
+
|
|
23
|
+
1. `.github/workflows/tests.yml` runs `kernel_v0_ship_gate` on every `push` to `main`.
|
|
24
|
+
2. `.github/workflows/tests.yml` also runs `production_cutover_gate` on every `push` to `main`.
|
|
25
|
+
3. `.github/workflows/release.yml` blocks release unless that same commit has successful `kernel_v0_ship_gate` and `production_cutover_gate` results from `tests.yml`.
|
|
26
|
+
4. `.github/workflows/production-cutover-gate.yml` provides manual live-environment validation using `production_cutover_gate` GitHub Environment secrets.
|
|
27
|
+
|
|
28
|
+
## Included checks
|
|
29
|
+
|
|
30
|
+
1. Launch-claim truth gate (`check-kernel-v0-launch-gate.mjs --mode prepublish`)
|
|
31
|
+
2. Core x402 e2e confidence suite
|
|
32
|
+
3. API/SDK contract freeze + OpenAPI snapshot checks
|
|
33
|
+
4. x402 quickstart smoke (`quickstart:x402`, default on)
|
|
34
|
+
|
|
35
|
+
Any failed check stops the sequence and returns non-zero.
|
|
36
|
+
|
|
37
|
+
## Rollout plan
|
|
38
|
+
|
|
39
|
+
1. Canary: ship to internal/demo environments and run full gate before every cut.
|
|
40
|
+
2. Scale-out: ship to design-partner environments after two consecutive green gate runs.
|
|
41
|
+
3. Full OSS release: publish only when the latest gate report is green and attached to release notes.
|
|
42
|
+
|
|
43
|
+
## Rollback triggers
|
|
44
|
+
|
|
45
|
+
Rollback immediately if any of the following happen after release:
|
|
46
|
+
|
|
47
|
+
1. Deterministic replay/receipt verification mismatch in production-like flow.
|
|
48
|
+
2. x402 authorize/verify path starts returning unexpected non-contract error codes.
|
|
49
|
+
3. Quickstart regression (`quickstart:x402`) fails on clean environment.
|
|
50
|
+
|
|
51
|
+
## Rollback execution
|
|
52
|
+
|
|
53
|
+
1. Freeze new rollout and revert to previous known-good release/tag.
|
|
54
|
+
2. Re-run ship gate against rollback candidate.
|
|
55
|
+
3. Re-open rollout only after green gate + root-cause note.
|
|
56
|
+
|
|
57
|
+
## Monitoring and alerting
|
|
58
|
+
|
|
59
|
+
Track at minimum:
|
|
60
|
+
|
|
61
|
+
1. `x402` authorize/verify success and conflict code distribution.
|
|
62
|
+
2. Receipt verification failures.
|
|
63
|
+
3. Quickstart smoke health in CI cadence.
|
|
64
|
+
|
|
65
|
+
## Owner / on-call
|
|
66
|
+
|
|
67
|
+
- Release owner: Platform/Kernel maintainer
|
|
68
|
+
- Escalation owner: API maintainer
|
|
69
|
+
- Rollback approver: Tech lead on-call
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Lighthouse Production Close
|
|
2
|
+
|
|
3
|
+
Tracks `STLD-T180` with repo-auditable evidence.
|
|
4
|
+
|
|
5
|
+
## Source of truth
|
|
6
|
+
|
|
7
|
+
- `planning/launch/lighthouse-production-tracker.json`
|
|
8
|
+
|
|
9
|
+
## Account status model
|
|
10
|
+
|
|
11
|
+
- `targeting`
|
|
12
|
+
- `contracting`
|
|
13
|
+
- `integration_in_progress`
|
|
14
|
+
- `go_live_scheduled`
|
|
15
|
+
- `paid_production_settlement_confirmed`
|
|
16
|
+
- `production_active`
|
|
17
|
+
|
|
18
|
+
## Required evidence per account
|
|
19
|
+
|
|
20
|
+
- Signed commercial date (`signedAt`)
|
|
21
|
+
- Go-live date (`goLiveAt`)
|
|
22
|
+
- Production settlement reference (`productionSettlementRef`)
|
|
23
|
+
|
|
24
|
+
`productionSettlementRef` should point to a deterministic, queryable settlement artifact ID or run settlement ID.
|
|
25
|
+
|
|
26
|
+
## Launch criterion
|
|
27
|
+
|
|
28
|
+
At least 3 accounts must be in `paid_production_settlement_confirmed` or `production_active` with non-empty `productionSettlementRef`.
|
|
29
|
+
|
|
30
|
+
## Validation path
|
|
31
|
+
|
|
32
|
+
The go-live gate uses `scripts/ci/lib/lighthouse-tracker.mjs` for readiness checks and requires all active accounts to include:
|
|
33
|
+
- `signedAt` (valid ISO timestamp)
|
|
34
|
+
- `goLiveAt` (valid ISO timestamp and not earlier than `signedAt`)
|
|
35
|
+
- `productionSettlementRef` (non-empty)
|
|
36
|
+
|
|
37
|
+
## Update commands
|
|
38
|
+
|
|
39
|
+
Update tracker rows with validation instead of manual JSON edits:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
npm run ops:lighthouse:update -- \
|
|
43
|
+
--account lh_001 \
|
|
44
|
+
--status paid_production_settlement_confirmed \
|
|
45
|
+
--company-name "Example Co" \
|
|
46
|
+
--owner "am@settld" \
|
|
47
|
+
--signed-at 2026-02-10T12:00:00.000Z \
|
|
48
|
+
--go-live-at 2026-02-11T15:30:00.000Z \
|
|
49
|
+
--settlement-ref settle_run_abc123 \
|
|
50
|
+
--notes "First paid production settlement."
|
|
51
|
+
```
|