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,389 @@
|
|
|
1
|
+
# Protocol + Verifier Invariants (v1)
|
|
2
|
+
|
|
3
|
+
This is the **invariants checklist** for the Settld artifact protocol and verifier.
|
|
4
|
+
|
|
5
|
+
Each invariant maps:
|
|
6
|
+
|
|
7
|
+
- what is promised,
|
|
8
|
+
- where it is specified,
|
|
9
|
+
- where it is enforced,
|
|
10
|
+
- and what evidence exists (tests / fixtures / conformance).
|
|
11
|
+
|
|
12
|
+
## Invariants
|
|
13
|
+
|
|
14
|
+
### INV-001 (P1) — Canonical JSON is RFC 8785 (JCS)
|
|
15
|
+
|
|
16
|
+
- **Statement**: All JSON objects that are hashed or signed MUST be canonicalized using RFC 8785 (JCS), and hashes are computed over UTF-8 bytes of the canonical JSON string.
|
|
17
|
+
- **Specified**: `CANONICAL_JSON.md`
|
|
18
|
+
- **Enforced**:
|
|
19
|
+
- Verifier canonicalization used for hashing/signing: `packages/artifact-verify/src/job-proof-bundle.js:186`–`190`
|
|
20
|
+
- **Evidence**:
|
|
21
|
+
- Tests: `test/protocol-vectors.test.js`, `test/protocol-vectors.test.js` (torture cases)
|
|
22
|
+
- **Failure codes**: varies by caller (hash/signature mismatch errors)
|
|
23
|
+
|
|
24
|
+
### INV-002 (P1) — Hash algorithm is SHA-256, hex lowercase
|
|
25
|
+
|
|
26
|
+
- **Statement**: SHA-256 is the only hashing algorithm used for protocol commitments in v1, encoded as lowercase hex.
|
|
27
|
+
- **Specified**: `CRYPTOGRAPHY.md`
|
|
28
|
+
- **Enforced**:
|
|
29
|
+
- Verifier: `packages/artifact-verify/src/crypto.js:1`
|
|
30
|
+
- Streaming file hashing: `packages/artifact-verify/src/hash-file.js`
|
|
31
|
+
- **Evidence**:
|
|
32
|
+
- Fixtures + conformance (manifest tamper cases)
|
|
33
|
+
|
|
34
|
+
### INV-003 (P0) — Manifests exclude `verify/**` (no circular hashing)
|
|
35
|
+
|
|
36
|
+
- **Statement**: Bundle manifests MUST exclude `verify/**` from their file listing to avoid circular hashing of derived verification outputs.
|
|
37
|
+
- **Specified**: `ProofBundleManifest.v1.md`, `FinancePackBundleManifest.v1.md`
|
|
38
|
+
- **Enforced**:
|
|
39
|
+
- Bundlers write manifests with excludes: `src/core/proof-bundle.js:357`, `src/core/finance-pack-bundle.js:285`
|
|
40
|
+
- Fixture determinism gate: `test/verify-fixtures-generator-determinism.test.js`
|
|
41
|
+
- **Failure codes**: none (contractual; enforced by generation + tests)
|
|
42
|
+
|
|
43
|
+
### INV-004 (P0) — Manifest file hashes are verified against raw file bytes
|
|
44
|
+
|
|
45
|
+
- **Statement**: For every entry in `manifest.json.files[]`, the verifier MUST hash the referenced file as raw bytes and compare to the manifest `sha256`.
|
|
46
|
+
- **Specified**: `ProofBundleManifest.v1.md`, `FinancePackBundleManifest.v1.md`, `REFERENCE_VERIFIER_BEHAVIOR.md`
|
|
47
|
+
- **Enforced**:
|
|
48
|
+
- Proof bundles: `packages/artifact-verify/src/job-proof-bundle.js:39`
|
|
49
|
+
- FinancePack: `packages/artifact-verify/src/finance-pack-bundle.js:40`
|
|
50
|
+
- **Evidence**:
|
|
51
|
+
- Conformance: `*_strict_fail_manifest_tamper` cases in `conformance/v1/cases.json`
|
|
52
|
+
- **Failure codes**:
|
|
53
|
+
- `sha256 mismatch`
|
|
54
|
+
- `missing file`
|
|
55
|
+
|
|
56
|
+
### INV-005 (P1) — VerificationReport.v1 binds to `manifestHash`
|
|
57
|
+
|
|
58
|
+
- **Statement**: A strict `VerificationReport.v1` MUST include a subject `manifestHash` equal to the computed bundle manifest hash.
|
|
59
|
+
- **Specified**: `VerificationReport.v1.md`
|
|
60
|
+
- **Enforced**:
|
|
61
|
+
- Proof bundles: `packages/artifact-verify/src/job-proof-bundle.js:167`–`174`
|
|
62
|
+
- FinancePack: `packages/artifact-verify/src/finance-pack-bundle.js:362`–`368`
|
|
63
|
+
- **Evidence**:
|
|
64
|
+
- Fixture suite covers mismatch cases (strict fail)
|
|
65
|
+
- **Failure codes**:
|
|
66
|
+
- `verification report subject.manifestHash mismatch`
|
|
67
|
+
|
|
68
|
+
### INV-006 (P1) — VerificationReport.v1 binds to bundle head attestation (`attestationHash`)
|
|
69
|
+
|
|
70
|
+
- **Statement**: In strict mode for proof bundles, `VerificationReport.v1.bundleHeadAttestation.attestationHash` MUST match the computed head attestation hash.
|
|
71
|
+
- **Specified**: `VerificationReport.v1.md`, `BundleHeadAttestation.v1.md`
|
|
72
|
+
- **Enforced**:
|
|
73
|
+
- Proof bundles: `packages/artifact-verify/src/job-proof-bundle.js:176`–`184`
|
|
74
|
+
- **Evidence**:
|
|
75
|
+
- Fixture suite includes binding mismatch cases (strict fail)
|
|
76
|
+
- **Failure codes**:
|
|
77
|
+
- `verification report bundleHeadAttestation.attestationHash mismatch`
|
|
78
|
+
|
|
79
|
+
### INV-007 (P0) — Strict mode requires a signed `verify/verification_report.json` (Proof + FinancePack)
|
|
80
|
+
|
|
81
|
+
- **Statement**: In strict mode, required verification surfaces MUST exist and be valid, including a signed `verify/verification_report.json` for bundles where the strict profile requires it.
|
|
82
|
+
- **Specified**: `STRICTNESS.md`, `VerificationReport.v1.md`
|
|
83
|
+
- **Enforced**:
|
|
84
|
+
- Proof/FinancePack verifier paths (strict requires): verifier bundle implementations.
|
|
85
|
+
- **Evidence**:
|
|
86
|
+
- Conformance: `financepack_strict_fail_missing_verification_report`
|
|
87
|
+
- Fixture tests: `test/verify-fixture-bundles.test.js`
|
|
88
|
+
- **Failure codes**:
|
|
89
|
+
- `strict requires verify/verification_report.json`
|
|
90
|
+
|
|
91
|
+
### INV-008 (P0) — Non-strict may accept missing report but MUST warn (stable code)
|
|
92
|
+
|
|
93
|
+
- **Statement**: In non-strict mode, missing `verify/verification_report.json` may be accepted, but MUST emit `VERIFICATION_REPORT_MISSING_LENIENT`.
|
|
94
|
+
- **Specified**: `STRICTNESS.md`, `WARNINGS.md`
|
|
95
|
+
- **Enforced**:
|
|
96
|
+
- Verifier bundle implementations emit warnings.
|
|
97
|
+
- **Evidence**:
|
|
98
|
+
- Conformance: `jobproof_nonstrict_pass_missing_verification_report`, `monthproof_nonstrict_pass_missing_verification_report`
|
|
99
|
+
- **Warning codes**:
|
|
100
|
+
- `VERIFICATION_REPORT_MISSING_LENIENT`
|
|
101
|
+
|
|
102
|
+
### INV-009 (P0) — Strict mode requires trusted governance roots (out-of-band trust)
|
|
103
|
+
|
|
104
|
+
- **Statement**: In strict mode, if verification requires governance-root signatures, the verifier MUST require trusted governance root keys via `SETTLD_TRUSTED_GOVERNANCE_ROOT_KEYS_JSON`.
|
|
105
|
+
- **Specified**: `TRUST_ANCHORS.md`
|
|
106
|
+
- **Enforced**:
|
|
107
|
+
- Proof bundles: `packages/artifact-verify/src/job-proof-bundle.js` (strict trust check)
|
|
108
|
+
- FinancePack: `packages/artifact-verify/src/finance-pack-bundle.js` (strict trust check)
|
|
109
|
+
- **Evidence**:
|
|
110
|
+
- Conformance: `financepack_strict_fail_trust_roots_missing`, `financepack_strict_fail_trust_roots_wrong`
|
|
111
|
+
- **Failure codes**:
|
|
112
|
+
- `strict requires trusted governance root keys`
|
|
113
|
+
- `governance policy signerKeyId not trusted`
|
|
114
|
+
|
|
115
|
+
### INV-010 (P0) — Manifest path validation is mandatory and precedes hash binding
|
|
116
|
+
|
|
117
|
+
- **Statement**: A verifier MUST validate manifest entry paths (bundle-relative, no traversal, no escape, no duplicates) before reporting `manifestHash mismatch` or other downstream bindings.
|
|
118
|
+
- **Specified**: `REFERENCE_VERIFIER_BEHAVIOR.md`
|
|
119
|
+
- **Enforced**:
|
|
120
|
+
- Path + duplicate validation: `packages/artifact-verify/src/bundle-path.js:13`–`53`
|
|
121
|
+
- Pre-validation order:
|
|
122
|
+
- Proof bundles: `packages/artifact-verify/src/job-proof-bundle.js:1247`–`1250`
|
|
123
|
+
- FinancePack: `packages/artifact-verify/src/finance-pack-bundle.js:460`–`463`
|
|
124
|
+
- **Evidence**:
|
|
125
|
+
- Conformance: `security_manifest_path_traversal`, `security_manifest_duplicate_paths`
|
|
126
|
+
- **Failure codes**:
|
|
127
|
+
- `MANIFEST_PATH_INVALID`
|
|
128
|
+
- `MANIFEST_DUPLICATE_PATH`
|
|
129
|
+
|
|
130
|
+
### INV-011 (P0) — Symlinks are forbidden for manifest-listed files
|
|
131
|
+
|
|
132
|
+
- **Statement**: If a manifest-listed path resolves to a symlink, verification MUST fail (strict and non-strict).
|
|
133
|
+
- **Specified**: `REFERENCE_VERIFIER_BEHAVIOR.md`
|
|
134
|
+
- **Enforced**:
|
|
135
|
+
- Proof bundles: `packages/artifact-verify/src/job-proof-bundle.js:75`
|
|
136
|
+
- FinancePack: `packages/artifact-verify/src/finance-pack-bundle.js:71`
|
|
137
|
+
- **Evidence**:
|
|
138
|
+
- Conformance: `security_bundle_symlink_outside`
|
|
139
|
+
- **Failure codes**:
|
|
140
|
+
- `MANIFEST_SYMLINK_FORBIDDEN`
|
|
141
|
+
|
|
142
|
+
### INV-012 (P0) — `--fail-on-warnings` converts warnings into a deterministic failure
|
|
143
|
+
|
|
144
|
+
- **Statement**: When `--fail-on-warnings` is set, any warnings MUST cause the CLI output to include `FAIL_ON_WARNINGS` and exit non-zero.
|
|
145
|
+
- **Specified**: `VerifyCliOutput.v1.md`
|
|
146
|
+
- **Enforced**:
|
|
147
|
+
- CLI: `packages/artifact-verify/bin/settld-verify.js:112`–`121`
|
|
148
|
+
- **Evidence**:
|
|
149
|
+
- Conformance: `financepack_strict_fail_on_warnings_tool_version_unknown`
|
|
150
|
+
- **Failure codes**:
|
|
151
|
+
- `FAIL_ON_WARNINGS`
|
|
152
|
+
|
|
153
|
+
### INV-013 (P1) — Verify CLI output is stable and machine-ingestible (`VerifyCliOutput.v1`)
|
|
154
|
+
|
|
155
|
+
- **Statement**: `settld-verify --format json` MUST emit a `VerifyCliOutput.v1` object with stable top-level fields and deterministic ordering of `errors[]` and `warnings[]`.
|
|
156
|
+
- **Specified**: `VerifyCliOutput.v1.md`
|
|
157
|
+
- **Enforced**:
|
|
158
|
+
- CLI normalization: `packages/artifact-verify/bin/settld-verify.js:83`–`122`
|
|
159
|
+
- **Evidence**:
|
|
160
|
+
- Tests: `test/verify-cli-determinism.test.js`
|
|
161
|
+
|
|
162
|
+
### INV-016 (P1) — Verify CLI `--explain` is deterministic and secret-free
|
|
163
|
+
|
|
164
|
+
- **Statement**: `settld-verify --explain` MUST emit deterministic diagnostics to stderr and MUST NOT leak secrets (tokens, headers, private keys). `--format json` stdout MUST remain valid and deterministic.
|
|
165
|
+
- **Specified**: `VerifyCliOutput.v1.md` (tooling contract)
|
|
166
|
+
- **Enforced**:
|
|
167
|
+
- CLI explain writer: `packages/artifact-verify/bin/settld-verify.js:228`
|
|
168
|
+
- **Evidence**:
|
|
169
|
+
- Tests: `test/explain-snapshots.test.js`
|
|
170
|
+
|
|
171
|
+
### INV-014 (P0) — Strict mode enforces signer authorization via governance policy
|
|
172
|
+
|
|
173
|
+
- **Statement**: In strict mode, the verifier MUST enforce that the signer for each governed signature (bundle head attestation, verification report) is authorized by the active governance policy (and is within validity/revocation constraints).
|
|
174
|
+
- **Specified**: `GovernancePolicy.v2.md`, `STRICTNESS.md`, `TRUST_ANCHORS.md`
|
|
175
|
+
- **Enforced**:
|
|
176
|
+
- Head attestation authorization: `packages/artifact-verify/src/job-proof-bundle.js:1138`–`1151`
|
|
177
|
+
- Verification report authorization (proof bundles): `packages/artifact-verify/src/job-proof-bundle.js:215`–`226`
|
|
178
|
+
- Verification report authorization (FinancePack): `packages/artifact-verify/src/finance-pack-bundle.js:410`–`421`
|
|
179
|
+
- **Evidence**:
|
|
180
|
+
- Conformance: `jobproof_strict_fail_unauthorized_signer`, `monthproof_strict_fail_unauthorized_signer`
|
|
181
|
+
- **Failure codes**:
|
|
182
|
+
- `attestation signer not authorized`
|
|
183
|
+
- `verification report signer not authorized`
|
|
184
|
+
|
|
185
|
+
### INV-015 (P1) — Tool provenance unknown emits stable warnings
|
|
186
|
+
|
|
187
|
+
- **Statement**: When tool version or commit cannot be derived, the verifier MUST emit stable warning codes rather than ad-hoc strings.
|
|
188
|
+
- **Specified**: `TOOL_PROVENANCE.md`, `WARNINGS.md`
|
|
189
|
+
- **Enforced**:
|
|
190
|
+
- Warning codes: `packages/artifact-verify/src/verification-warnings.js`
|
|
191
|
+
- **Evidence**:
|
|
192
|
+
- Conformance: `financepack_strict_fail_on_warnings_tool_version_unknown`
|
|
193
|
+
|
|
194
|
+
### INV-017 (P0) — Invoice pricing terms are signed (contract-grade PricingMatrix)
|
|
195
|
+
|
|
196
|
+
- **Statement**: In strict mode for `InvoiceBundle.v1`, verifiers MUST require a pricing terms signature surface (`PricingMatrixSignatures.v2` recommended; `PricingMatrixSignatures.v1` legacy) and MUST validate that it binds to `pricing/pricing_matrix.json` and is signed by at least one trusted key.
|
|
197
|
+
- **Specified**: `PricingMatrixSignatures.v2.md`, `PricingMatrixSignatures.v1.md`, `STRICTNESS.md`, `WARNINGS.md`, `TRUST_ANCHORS.md`
|
|
198
|
+
- **Enforced**:
|
|
199
|
+
- Node verifier: `packages/artifact-verify/src/invoice-bundle.js` (pricing terms signature enforcement)
|
|
200
|
+
- Python reference verifier: `reference/verifier-py/settld-verify-py` (InvoiceBundle pricing signature checks)
|
|
201
|
+
- **Evidence**:
|
|
202
|
+
- Conformance: `invoicebundle_strict_fail_missing_pricing_matrix_signature`, `invoicebundle_strict_fail_invalid_pricing_matrix_signature`, `invoicebundle_nonstrict_pass_unsigned_pricing_matrix_warning`
|
|
203
|
+
- **Failure codes**:
|
|
204
|
+
- `PRICING_MATRIX_SIGNATURE_MISSING`
|
|
205
|
+
- `PRICING_MATRIX_SIGNATURE_PAYLOAD_MISMATCH`
|
|
206
|
+
- `PRICING_MATRIX_SIGNATURE_INVALID`
|
|
207
|
+
- **Warning codes**:
|
|
208
|
+
- `PRICING_MATRIX_UNSIGNED_LENIENT`
|
|
209
|
+
|
|
210
|
+
### INV-018 (P0) — Manifest paths must not collide on case-insensitive filesystems
|
|
211
|
+
|
|
212
|
+
- **Statement**: Bundle manifests MUST NOT include file paths that become ambiguous on case-insensitive filesystems (e.g. `A.txt` vs `a.txt`). Verifiers MUST reject such bundles deterministically.
|
|
213
|
+
- **Specified**: This invariants checklist (security + portability guarantee).
|
|
214
|
+
- **Enforced**:
|
|
215
|
+
- Node verifier prevalidation: `packages/artifact-verify/src/bundle-path.js:29`
|
|
216
|
+
- Python reference verifier prevalidation: `reference/verifier-py/settld-verify-py` (manifest entry loop)
|
|
217
|
+
- **Evidence**:
|
|
218
|
+
- Conformance: `security_manifest_case_collision` in `conformance/v1/cases.json`
|
|
219
|
+
- **Failure codes**:
|
|
220
|
+
- `MANIFEST_PATH_CASE_COLLISION`
|
|
221
|
+
|
|
222
|
+
### INV-019 (P1) — Entity interaction direction matrix is complete (`4x4 = 16`)
|
|
223
|
+
|
|
224
|
+
- **Statement**: The protocol interaction matrix for entity types (`agent|human|robot|machine`) MUST remain complete and directional with all `16` pairs allowed in `InteractionDirectionMatrix.v1`.
|
|
225
|
+
- **Specified**: `InteractionDirectionMatrix.v1.md`
|
|
226
|
+
- **Enforced**:
|
|
227
|
+
- Core invariant helpers: `src/core/interaction-directions.js`
|
|
228
|
+
- Schema lock: `docs/spec/schemas/InteractionDirectionMatrix.v1.schema.json`
|
|
229
|
+
- **Evidence**:
|
|
230
|
+
- Tests: `test/interaction-directions.test.js`
|
|
231
|
+
- Golden vectors: `test/fixtures/protocol-vectors/v1.json` (`interactionDirectionMatrix`)
|
|
232
|
+
|
|
233
|
+
### INV-020 (P0) — Escrow wallet mutations preserve money movement semantics
|
|
234
|
+
|
|
235
|
+
- **Statement**: Escrow lock/release/refund operations MUST preserve deterministic money semantics:
|
|
236
|
+
- lock moves value `available -> escrowLocked`,
|
|
237
|
+
- release moves value `payer escrowLocked -> payee available`,
|
|
238
|
+
- refund moves value `escrowLocked -> available` on payer wallet.
|
|
239
|
+
- **Specified**: `AgentWallet.v1.md`, `AgentRunSettlement.v1.md`, `ESCROW_NETTING_INVARIANTS.md`
|
|
240
|
+
- **Enforced**:
|
|
241
|
+
- Escrow lock: `src/core/agent-wallets.js:301`
|
|
242
|
+
- Escrow release: `src/core/agent-wallets.js:321`
|
|
243
|
+
- Escrow refund: `src/core/agent-wallets.js:350`
|
|
244
|
+
- **Evidence**:
|
|
245
|
+
- Tests: `test/api-e2e-agent-wallet-settlement.test.js`
|
|
246
|
+
- **Failure codes**:
|
|
247
|
+
- `INSUFFICIENT_WALLET_BALANCE`
|
|
248
|
+
- `INSUFFICIENT_ESCROW_BALANCE`
|
|
249
|
+
|
|
250
|
+
### INV-021 (P0) — Settlement resolution is single-shot and partition-conserving
|
|
251
|
+
|
|
252
|
+
- **Statement**: `AgentRunSettlement.v1` MUST resolve exactly once from `locked` to `released|refunded`, and terminal partition MUST satisfy `releasedAmountCents + refundedAmountCents = amountCents`.
|
|
253
|
+
- **Specified**: `AgentRunSettlement.v1.md`, `ESCROW_NETTING_INVARIANTS.md`
|
|
254
|
+
- **Enforced**:
|
|
255
|
+
- Settlement creation in locked state: `src/core/agent-wallets.js:531`
|
|
256
|
+
- Resolution single-shot guard: `src/core/agent-wallets.js:601`
|
|
257
|
+
- Partition equality check: `src/core/agent-wallets.js:616`
|
|
258
|
+
- **Evidence**:
|
|
259
|
+
- Tests: `test/api-e2e-agent-wallet-settlement.test.js`
|
|
260
|
+
- **Failure codes**:
|
|
261
|
+
- `settlement already resolved`
|
|
262
|
+
- `releasedAmountCents + refundedAmountCents must equal settlement.amountCents`
|
|
263
|
+
|
|
264
|
+
### INV-022 (P1) — Arbitration artifacts are canonical, schema-bound, and appeal-linkable
|
|
265
|
+
|
|
266
|
+
- **Statement**: `ArbitrationCase.v1` and `ArbitrationVerdict.v1` artifacts MUST validate against their schemas, preserve deterministic canonical hashing, and expose explicit appeal references.
|
|
267
|
+
- **Specified**: `ArbitrationCase.v1.md`, `ArbitrationVerdict.v1.md`, `CANONICAL_JSON.md`
|
|
268
|
+
- **Enforced**:
|
|
269
|
+
- Schema contracts: `docs/spec/schemas/ArbitrationCase.v1.schema.json`, `docs/spec/schemas/ArbitrationVerdict.v1.schema.json`
|
|
270
|
+
- Canonical hashing: `src/core/canonical-json.js`
|
|
271
|
+
- **Evidence**:
|
|
272
|
+
- Examples: `docs/spec/examples/arbitration_case_v1.example.json`, `docs/spec/examples/arbitration_verdict_v1.example.json`
|
|
273
|
+
- Tests: `test/arbitration-schemas.test.js`
|
|
274
|
+
|
|
275
|
+
## Producer invariants (tooling contract)
|
|
276
|
+
|
|
277
|
+
These invariants cover the producer CLI/tooling surface (not bundle protocol object schemas).
|
|
278
|
+
|
|
279
|
+
### PROD-001 (P0) — Produce CLI JSON output is safe and machine-ingestible
|
|
280
|
+
|
|
281
|
+
- **Statement**: `settld-produce --format json` MUST emit a `ProduceCliOutput.v1` object whose `errors[]`/`warnings[]` are deterministic and MUST NOT embed arbitrary exception strings or secrets.
|
|
282
|
+
- **Specified**: `ProduceCliOutput.v1.md`, `PRODUCER_ERRORS.md`
|
|
283
|
+
- **Enforced**:
|
|
284
|
+
- Error normalization: `packages/artifact-produce/src/cli/normalize-produce-error.js`
|
|
285
|
+
- **Evidence**:
|
|
286
|
+
- Tests: `test/produce-signer-error-taxonomy.test.js`
|
|
287
|
+
- Conformance: `conformance/v1/produce-cases.json` via `conformance/v1/run-produce.mjs`
|
|
288
|
+
|
|
289
|
+
### PROD-002 (P0) — Remote signer auth missing yields a stable code
|
|
290
|
+
|
|
291
|
+
- **Statement**: If a remote signer bearer token is required but missing, producer tooling MUST fail with `SIGNER_AUTH_MISSING`.
|
|
292
|
+
- **Specified**: `PRODUCER_ERRORS.md`, `REMOTE_SIGNER.md`
|
|
293
|
+
- **Evidence**:
|
|
294
|
+
- Conformance: `produce_jobproof_remote_auth_missing`
|
|
295
|
+
|
|
296
|
+
### PROD-003 (P0) — Remote signer bad JSON yields a stable code
|
|
297
|
+
|
|
298
|
+
- **Statement**: If a signer command returns invalid JSON, producer tooling MUST fail with `SIGNER_BAD_RESPONSE`.
|
|
299
|
+
- **Specified**: `PRODUCER_ERRORS.md`, `REMOTE_SIGNER.md`
|
|
300
|
+
- **Evidence**:
|
|
301
|
+
- Conformance: `produce_jobproof_remote_command_bad_json`
|
|
302
|
+
|
|
303
|
+
### PROD-004 (P0) — Plugin load failures yield stable codes
|
|
304
|
+
|
|
305
|
+
- **Statement**: If a signer plugin cannot be imported, producer tooling MUST fail with `SIGNER_PLUGIN_LOAD_FAILED`.
|
|
306
|
+
- **Specified**: `PRODUCER_ERRORS.md`, `SIGNER_PROVIDER_PLUGIN.md`
|
|
307
|
+
- **Evidence**:
|
|
308
|
+
- Conformance: `produce_jobproof_plugin_load_failed`
|
|
309
|
+
|
|
310
|
+
### PROD-005 (P0) — Plugin-signed JobProof strict-verifies under conformance trust
|
|
311
|
+
|
|
312
|
+
- **Statement**: Using a valid signer plugin, producer tooling MUST emit a JobProof bundle that strict-verifies under the conformance trust roots.
|
|
313
|
+
- **Evidence**:
|
|
314
|
+
- Conformance: `produce_jobproof_plugin_success_strict_verify`
|
|
315
|
+
|
|
316
|
+
### PROD-006 (P0) — Process-signer JobProof strict-verifies under conformance trust
|
|
317
|
+
|
|
318
|
+
- **Statement**: Using a remote signer via local process/stdio, producer tooling MUST emit a JobProof bundle that strict-verifies under the conformance trust roots.
|
|
319
|
+
- **Evidence**:
|
|
320
|
+
- Conformance: `produce_jobproof_remote_process_success_strict_verify`
|
|
321
|
+
|
|
322
|
+
### PROD-007 (P1) — Produce CLI `--explain` is deterministic and secret-free
|
|
323
|
+
|
|
324
|
+
- **Statement**: `settld-produce --explain` MUST emit deterministic diagnostics to stderr and MUST NOT leak secrets (bearer tokens, header values, private keys). JSON stdout MUST remain schema-valid and MUST NOT embed arbitrary exception strings.
|
|
325
|
+
- **Specified**: `ProduceCliOutput.v1.md`, `PRODUCER_ERRORS.md`
|
|
326
|
+
- **Evidence**:
|
|
327
|
+
- Tests: `test/explain-snapshots.test.js`
|
|
328
|
+
|
|
329
|
+
### PROD-008 (P1) — Remote-only trust init yields a trust file that strict-verifies
|
|
330
|
+
|
|
331
|
+
- **Statement**: `settld-trust init --mode remote-only` MUST be able to write a `trust.json` (no private keys on disk) that strict verification can consume for bundles produced with the corresponding remote signer.
|
|
332
|
+
- **Specified**: `TRUST_ANCHORS.md`, `REMOTE_SIGNER.md`
|
|
333
|
+
- **Evidence**:
|
|
334
|
+
- Conformance (producer): `produce_trust_remote_only_init_then_remote_sign_strict_verify`
|
|
335
|
+
|
|
336
|
+
## Release authenticity invariants (tooling contract)
|
|
337
|
+
|
|
338
|
+
These invariants cover the release authenticity surface (ReleaseIndex + release trust roots), not bundle protocol v1.
|
|
339
|
+
|
|
340
|
+
### REL-001 (P0) — Release verification passes when signature and artifacts match
|
|
341
|
+
|
|
342
|
+
- **Statement**: Given a trusted release root key, `settld-release verify --format json` MUST accept a release directory when `release_index_v1.json` signatures are valid and every artifact listed matches its recorded `sha256` and `sizeBytes`.
|
|
343
|
+
- **Specified**: `ReleaseIndex.v1.md`, `ReleaseTrust.v2.md`, `SUPPLY_CHAIN.md`
|
|
344
|
+
- **Evidence**:
|
|
345
|
+
- Conformance (release): `release_pass`
|
|
346
|
+
|
|
347
|
+
### REL-002 (P0) — Release artifact hash mismatches fail with stable codes
|
|
348
|
+
|
|
349
|
+
- **Statement**: If any listed artifact’s bytes do not match its recorded `sha256`, release verification MUST fail with `RELEASE_ASSET_HASH_MISMATCH`.
|
|
350
|
+
- **Evidence**:
|
|
351
|
+
- Conformance (release): `release_fail_asset_hash_mismatch`
|
|
352
|
+
|
|
353
|
+
### REL-003 (P0) — Invalid signatures fail with stable codes (no log scraping)
|
|
354
|
+
|
|
355
|
+
- **Statement**: If the release index signature is invalid, release verification MUST fail with `RELEASE_SIGNATURE_INVALID` (and MUST enforce quorum if configured).
|
|
356
|
+
- **Evidence**:
|
|
357
|
+
- Conformance (release): `release_fail_signature_invalid`
|
|
358
|
+
|
|
359
|
+
### REL-004 (P0) — Release trust is mandatory
|
|
360
|
+
|
|
361
|
+
- **Statement**: Release authenticity verification MUST be rooted in an explicit release trust file; missing trust MUST fail with `RELEASE_TRUST_MISSING`.
|
|
362
|
+
- **Evidence**:
|
|
363
|
+
- Conformance (release): `release_fail_trust_missing`
|
|
364
|
+
|
|
365
|
+
### REL-005 (P0) — Revoked release signer keys are rejected deterministically
|
|
366
|
+
|
|
367
|
+
- **Statement**: If a release signing key is revoked at/before the release signatureTime, release verification MUST fail with `RELEASE_SIGNER_REVOKED`.
|
|
368
|
+
- **Specified**: `ReleaseTrust.v2.md`
|
|
369
|
+
- **Evidence**:
|
|
370
|
+
- Conformance (release): `release_fail_signer_revoked`
|
|
371
|
+
|
|
372
|
+
### REL-006 (P0) — Release signature quorum is enforced
|
|
373
|
+
|
|
374
|
+
- **Statement**: If release trust policy requires `minSignatures > 1`, release verification MUST fail with `RELEASE_SIGNATURE_QUORUM_NOT_SATISFIED` unless quorum is satisfied by trusted signatures.
|
|
375
|
+
- **Specified**: `ReleaseTrust.v2.md`, `ReleaseIndexSignatures.v1.md`
|
|
376
|
+
- **Evidence**:
|
|
377
|
+
- Conformance (release): `release_fail_quorum_not_satisfied`
|
|
378
|
+
|
|
379
|
+
## Warning code checklist (closed set)
|
|
380
|
+
|
|
381
|
+
Warning codes are a **contract** (stable identifiers). See `WARNINGS.md`.
|
|
382
|
+
|
|
383
|
+
Source of truth in code: `packages/artifact-verify/src/verification-warnings.js`.
|
|
384
|
+
|
|
385
|
+
- `VERIFICATION_REPORT_MISSING_LENIENT` — report absent, accepted only in non-strict (see INV-008).
|
|
386
|
+
- `GOVERNANCE_POLICY_V1_ACCEPTED_LENIENT` — legacy governance policy accepted only in non-strict.
|
|
387
|
+
- `GOVERNANCE_POLICY_MISSING_LENIENT` — governance policy missing, accepted only in non-strict.
|
|
388
|
+
- `TOOL_VERSION_UNKNOWN` — tool version could not be derived (see `TOOL_PROVENANCE.md`).
|
|
389
|
+
- `TOOL_COMMIT_UNKNOWN` — tool commit could not be derived (see `TOOL_PROVENANCE.md`).
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# InteractionDirectionMatrix.v1
|
|
2
|
+
|
|
3
|
+
`InteractionDirectionMatrix.v1` freezes the autonomous interaction-direction contract for Settld entity types.
|
|
4
|
+
|
|
5
|
+
This object is intentionally simple and strict: every directional pair in the `4x4` matrix is allowed.
|
|
6
|
+
|
|
7
|
+
## Schema
|
|
8
|
+
|
|
9
|
+
See `schemas/InteractionDirectionMatrix.v1.schema.json`.
|
|
10
|
+
|
|
11
|
+
## Required fields
|
|
12
|
+
|
|
13
|
+
- `schemaVersion` (const: `InteractionDirectionMatrix.v1`)
|
|
14
|
+
- `entityTypes` (const array: `["agent","human","robot","machine"]`)
|
|
15
|
+
- `directions` (matrix object keyed by `from` then `to`)
|
|
16
|
+
- `directionalCount` (const: `16`)
|
|
17
|
+
|
|
18
|
+
## Semantics
|
|
19
|
+
|
|
20
|
+
- The matrix is **directional** (`from -> to`), even when currently symmetric.
|
|
21
|
+
- In `v1`, all `16` directional pairs are `true`.
|
|
22
|
+
- This object is used as a protocol invariant so new surfaces default to full cross-entity support.
|
|
23
|
+
|
|
24
|
+
## Canonicalization and hashing
|
|
25
|
+
|
|
26
|
+
When hashed/signed by higher-level protocols:
|
|
27
|
+
|
|
28
|
+
- canonicalize JSON via RFC 8785 (JCS),
|
|
29
|
+
- hash canonical UTF-8 bytes using `sha256`,
|
|
30
|
+
- emit lowercase hex digests.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# InvoiceBundleManifest.v1
|
|
2
|
+
|
|
3
|
+
This manifest is stored at `manifest.json` within Invoice bundles.
|
|
4
|
+
|
|
5
|
+
## Hashing contract
|
|
6
|
+
|
|
7
|
+
- `hashing.schemaVersion = "InvoiceBundleManifestHash.v1"`
|
|
8
|
+
- file order: `path_asc`
|
|
9
|
+
- excludes: `["verify/**"]`
|
|
10
|
+
|
|
11
|
+
Rationale: `verify/verification_report.json` is a derived output that must bind to `manifestHash`, so including `verify/**` in the manifest would create circular hashing.
|
|
12
|
+
|
|
13
|
+
## manifestHash
|
|
14
|
+
|
|
15
|
+
`manifestHash = sha256_hex( canonical_json_stringify(manifest_without_hash) )`
|
|
16
|
+
|
|
17
|
+
## File entries
|
|
18
|
+
|
|
19
|
+
`files[]` entries include:
|
|
20
|
+
|
|
21
|
+
- `name` (path relative to Invoice bundle root)
|
|
22
|
+
- `sha256` (hex sha256 of raw file bytes)
|
|
23
|
+
- `bytes` (byte length)
|
|
24
|
+
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# InvoiceClaim.v1
|
|
2
|
+
|
|
3
|
+
This claim is stored at `invoice/invoice_claim.json` within Invoice bundles.
|
|
4
|
+
|
|
5
|
+
The verifier recomputes totals deterministically from:
|
|
6
|
+
|
|
7
|
+
- `metering/metering_report.json`
|
|
8
|
+
- `pricing/pricing_matrix.json`
|
|
9
|
+
|
|
10
|
+
and requires `totalCents` (and, if present, `lineItems[]`) to match.
|
|
11
|
+
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# Money Rail State Machine
|
|
2
|
+
|
|
3
|
+
This document defines the deterministic lifecycle for external money movement operations
|
|
4
|
+
used by payout and collection rails.
|
|
5
|
+
|
|
6
|
+
It is the Sprint 0 contract for `STLD-T001` and is intentionally provider-agnostic.
|
|
7
|
+
|
|
8
|
+
## Scope
|
|
9
|
+
|
|
10
|
+
- Direction: `payout` (Settld -> external destination), `collection` (external source -> Settld).
|
|
11
|
+
- Unit of execution: one money movement operation keyed by a stable idempotency key.
|
|
12
|
+
- Out of scope: provider-specific payload formats and credential exchange.
|
|
13
|
+
|
|
14
|
+
## Canonical states
|
|
15
|
+
|
|
16
|
+
- `initiated`: operation accepted by Settld with deterministic idempotency key.
|
|
17
|
+
- `submitted`: request accepted by external rail and a provider reference exists.
|
|
18
|
+
- `confirmed`: external rail reports committed success (terminal unless reversed).
|
|
19
|
+
- `failed`: external rail reports terminal failure.
|
|
20
|
+
- `cancelled`: operation cancelled before terminal success.
|
|
21
|
+
- `reversed`: operation was previously `confirmed` and then reversed/charged back.
|
|
22
|
+
|
|
23
|
+
## Allowed transitions
|
|
24
|
+
|
|
25
|
+
- `initiated` -> `submitted|failed|cancelled`
|
|
26
|
+
- `submitted` -> `confirmed|failed|cancelled`
|
|
27
|
+
- `confirmed` -> `reversed`
|
|
28
|
+
- `failed|cancelled|reversed` -> no further state transition
|
|
29
|
+
|
|
30
|
+
Application logic MUST reject all transitions outside this set.
|
|
31
|
+
|
|
32
|
+
## Determinism rules
|
|
33
|
+
|
|
34
|
+
- The same `(tenantId, operationId, idempotencyKey)` triple MUST resolve to one operation record.
|
|
35
|
+
- Replays of the same request MUST return the same terminal state and provider reference.
|
|
36
|
+
- State progression is monotonic; no rollback to prior non-terminal states.
|
|
37
|
+
- Terminal states are immutable except metadata enrichment that does not change semantic outcome.
|
|
38
|
+
|
|
39
|
+
## Required operation fields
|
|
40
|
+
|
|
41
|
+
- `operationId`: stable Settld operation identifier.
|
|
42
|
+
- `direction`: `payout|collection`.
|
|
43
|
+
- `idempotencyKey`: stable client/controller dedupe key.
|
|
44
|
+
- `currency` and `amountCents`.
|
|
45
|
+
- `state`.
|
|
46
|
+
- `initiatedAt`, `createdAt`, `updatedAt`.
|
|
47
|
+
|
|
48
|
+
## Reconciliation hooks
|
|
49
|
+
|
|
50
|
+
- `confirmed` operations MUST link to settlement statements via a stable reference key.
|
|
51
|
+
- `failed|reversed` operations MUST carry a deterministic reason code.
|
|
52
|
+
- Reconciliation jobs MUST consume provider statement feeds and map them to operation IDs.
|
|
53
|
+
|
|
54
|
+
## Failure semantics
|
|
55
|
+
|
|
56
|
+
- Provider transport or timeout errors are non-terminal unless explicitly declared terminal.
|
|
57
|
+
- Terminal mismatch between provider statement and local state is a reconciliation incident.
|
|
58
|
+
- Reversals/chargebacks MUST be represented as explicit `reversed` transitions, not silent edits.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# MarketplaceAcceptance.v2
|
|
2
|
+
|
|
3
|
+
`MarketplaceAcceptance.v2` is the canonical acceptance artifact for one selected `MarketplaceOffer.v2`.
|
|
4
|
+
|
|
5
|
+
It binds acceptance metadata (`acceptedBy`, proposal identity, chain hash, counts) to a stable `offerRef` (`offerId`, `offerHash`) and emits `acceptanceHash`.
|
|
6
|
+
|
|
7
|
+
## Purpose
|
|
8
|
+
|
|
9
|
+
- make acceptance independently replayable from the agreement envelope;
|
|
10
|
+
- explicitly bind acceptance to a hashed offer artifact;
|
|
11
|
+
- provide a stable acceptance hash for signatures/audit and downstream dispute traces.
|
|
12
|
+
|
|
13
|
+
## Required fields
|
|
14
|
+
|
|
15
|
+
- `schemaVersion` (const: `MarketplaceAcceptance.v2`)
|
|
16
|
+
- `acceptanceId`
|
|
17
|
+
- `tenantId`
|
|
18
|
+
- `rfqId`
|
|
19
|
+
- `runId`
|
|
20
|
+
- `bidId`
|
|
21
|
+
- `acceptedAt`
|
|
22
|
+
- `acceptedByAgentId`
|
|
23
|
+
- `acceptedProposalId`
|
|
24
|
+
- `acceptedRevision`
|
|
25
|
+
- `acceptedProposalHash`
|
|
26
|
+
- `offerChainHash`
|
|
27
|
+
- `proposalCount`
|
|
28
|
+
- `offerRef` (`offerId`, `offerHash`)
|
|
29
|
+
- `createdAt`
|
|
30
|
+
- `acceptanceHash`
|
|
31
|
+
|
|
32
|
+
Optional fields:
|
|
33
|
+
|
|
34
|
+
- `agreementId`
|
|
35
|
+
|
|
36
|
+
## Canonicalization and hashing
|
|
37
|
+
|
|
38
|
+
`acceptanceHash` is computed over canonical JSON after removing `acceptanceHash`:
|
|
39
|
+
|
|
40
|
+
1. canonicalize JSON with RFC 8785 (JCS),
|
|
41
|
+
2. hash canonical UTF-8 bytes using `sha256`,
|
|
42
|
+
3. encode as lowercase hex.
|
|
43
|
+
|
|
44
|
+
## Schema
|
|
45
|
+
|
|
46
|
+
See `schemas/MarketplaceAcceptance.v2.schema.json`.
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# MarketplaceOffer.v2
|
|
2
|
+
|
|
3
|
+
`MarketplaceOffer.v2` is the canonical pre-contract offer artifact derived from a `MarketplaceBidProposal.v1` chain.
|
|
4
|
+
|
|
5
|
+
It freezes the selected proposal terms before agreement acceptance so downstream systems can bind acceptance, signatures, and settlement to one immutable offer hash.
|
|
6
|
+
|
|
7
|
+
## Purpose
|
|
8
|
+
|
|
9
|
+
- separate pre-contract offer state from agreement state;
|
|
10
|
+
- make accepted proposal terms portable and replayable;
|
|
11
|
+
- provide a stable `offerHash` anchor for `MarketplaceAcceptance.v2`.
|
|
12
|
+
|
|
13
|
+
## Required fields
|
|
14
|
+
|
|
15
|
+
- `schemaVersion` (const: `MarketplaceOffer.v2`)
|
|
16
|
+
- `offerId`
|
|
17
|
+
- `tenantId`
|
|
18
|
+
- `rfqId`
|
|
19
|
+
- `bidId`
|
|
20
|
+
- `revision`
|
|
21
|
+
- `amountCents`
|
|
22
|
+
- `currency`
|
|
23
|
+
- `proposalHash`
|
|
24
|
+
- `proposedAt`
|
|
25
|
+
- `createdAt`
|
|
26
|
+
- `offerHash`
|
|
27
|
+
|
|
28
|
+
Optional fields:
|
|
29
|
+
|
|
30
|
+
- `runId`
|
|
31
|
+
- `proposalId`
|
|
32
|
+
- `proposerAgentId`
|
|
33
|
+
- `etaSeconds`
|
|
34
|
+
- `note`
|
|
35
|
+
- `verificationMethod`
|
|
36
|
+
- `policy`
|
|
37
|
+
- `policyRef`
|
|
38
|
+
- `policyRefHash`
|
|
39
|
+
- `prevProposalHash`
|
|
40
|
+
- `offerChainHash`
|
|
41
|
+
- `proposalCount`
|
|
42
|
+
- `metadata`
|
|
43
|
+
|
|
44
|
+
## Canonicalization and hashing
|
|
45
|
+
|
|
46
|
+
`offerHash` is computed over canonical JSON after removing `offerHash`:
|
|
47
|
+
|
|
48
|
+
1. canonicalize JSON with RFC 8785 (JCS),
|
|
49
|
+
2. hash canonical UTF-8 bytes using `sha256`,
|
|
50
|
+
3. encode as lowercase hex.
|
|
51
|
+
|
|
52
|
+
## Schema
|
|
53
|
+
|
|
54
|
+
See `schemas/MarketplaceOffer.v2.schema.json`.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# MeteringReport.v1
|
|
2
|
+
|
|
3
|
+
This report is stored at `metering/metering_report.json` within Invoice bundles.
|
|
4
|
+
|
|
5
|
+
## Binding to an embedded JobProof bundle
|
|
6
|
+
|
|
7
|
+
To prevent replay/mix-and-match, the report must bind to the embedded JobProof instance:
|
|
8
|
+
|
|
9
|
+
- `jobProof.embeddedPath` (constant path within the Invoice bundle)
|
|
10
|
+
- `jobProof.manifestHash`
|
|
11
|
+
- `jobProof.headAttestationHash`
|
|
12
|
+
|
|
13
|
+
Verifiers must require that any `evidenceRefs[]` entries (path + sha256) match the embedded JobProof bundle’s manifest.
|
|
14
|
+
|
|
15
|
+
## Numeric representation
|
|
16
|
+
|
|
17
|
+
- `quantity` values are base-10 integer strings (no floats).
|
|
18
|
+
|