settld 0.2.3 → 0.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. package/docs/CONFIG.md +12 -0
  2. package/docs/README.md +3 -0
  3. package/docs/ops/HOSTED_BASELINE_R2.md +4 -2
  4. package/docs/ops/MINIMUM_PRODUCTION_TOPOLOGY.md +19 -7
  5. package/docs/ops/PRODUCTION_DEPLOYMENT_CHECKLIST.md +8 -3
  6. package/package.json +3 -1
  7. package/scripts/ci/run-public-onboarding-gate.mjs +136 -0
  8. package/scripts/setup/login.mjs +111 -17
  9. package/scripts/setup/onboard.mjs +176 -40
  10. package/scripts/setup/onboarding-failure-taxonomy.mjs +96 -0
  11. package/scripts/setup/onboarding-state-machine.mjs +102 -0
  12. package/services/magic-link/README.md +343 -0
  13. package/services/magic-link/assets/samples/closepack/known-bad/acceptance/acceptance_criteria.json +1 -0
  14. package/services/magic-link/assets/samples/closepack/known-bad/acceptance/acceptance_evaluation.json +1 -0
  15. package/services/magic-link/assets/samples/closepack/known-bad/attestation/bundle_head_attestation.json +1 -0
  16. package/services/magic-link/assets/samples/closepack/known-bad/evidence/evidence_index.json +1 -0
  17. package/services/magic-link/assets/samples/closepack/known-bad/governance/policy.json +1 -0
  18. package/services/magic-link/assets/samples/closepack/known-bad/governance/revocations.json +1 -0
  19. package/services/magic-link/assets/samples/closepack/known-bad/manifest.json +1 -0
  20. package/services/magic-link/assets/samples/closepack/known-bad/payload/invoice_bundle/attestation/bundle_head_attestation.json +1 -0
  21. package/services/magic-link/assets/samples/closepack/known-bad/payload/invoice_bundle/governance/policy.json +1 -0
  22. package/services/magic-link/assets/samples/closepack/known-bad/payload/invoice_bundle/governance/revocations.json +1 -0
  23. package/services/magic-link/assets/samples/closepack/known-bad/payload/invoice_bundle/invoice/invoice_claim.json +1 -0
  24. package/services/magic-link/assets/samples/closepack/known-bad/payload/invoice_bundle/manifest.json +1 -0
  25. package/services/magic-link/assets/samples/closepack/known-bad/payload/invoice_bundle/metering/metering_report.json +1 -0
  26. package/services/magic-link/assets/samples/closepack/known-bad/payload/invoice_bundle/payload/job_proof_bundle/attestation/bundle_head_attestation.json +1 -0
  27. package/services/magic-link/assets/samples/closepack/known-bad/payload/invoice_bundle/payload/job_proof_bundle/events/events.jsonl +1 -0
  28. package/services/magic-link/assets/samples/closepack/known-bad/payload/invoice_bundle/payload/job_proof_bundle/events/payload_material.jsonl +1 -0
  29. package/services/magic-link/assets/samples/closepack/known-bad/payload/invoice_bundle/payload/job_proof_bundle/governance/global/events/events.jsonl +1 -0
  30. package/services/magic-link/assets/samples/closepack/known-bad/payload/invoice_bundle/payload/job_proof_bundle/governance/global/events/payload_material.jsonl +1 -0
  31. package/services/magic-link/assets/samples/closepack/known-bad/payload/invoice_bundle/payload/job_proof_bundle/governance/global/snapshot.json +1 -0
  32. package/services/magic-link/assets/samples/closepack/known-bad/payload/invoice_bundle/payload/job_proof_bundle/governance/policy.json +1 -0
  33. package/services/magic-link/assets/samples/closepack/known-bad/payload/invoice_bundle/payload/job_proof_bundle/governance/revocations.json +1 -0
  34. package/services/magic-link/assets/samples/closepack/known-bad/payload/invoice_bundle/payload/job_proof_bundle/governance/tenant/events/events.jsonl +0 -0
  35. package/services/magic-link/assets/samples/closepack/known-bad/payload/invoice_bundle/payload/job_proof_bundle/governance/tenant/events/payload_material.jsonl +0 -0
  36. package/services/magic-link/assets/samples/closepack/known-bad/payload/invoice_bundle/payload/job_proof_bundle/governance/tenant/snapshot.json +1 -0
  37. package/services/magic-link/assets/samples/closepack/known-bad/payload/invoice_bundle/payload/job_proof_bundle/job/snapshot.json +1 -0
  38. package/services/magic-link/assets/samples/closepack/known-bad/payload/invoice_bundle/payload/job_proof_bundle/keys/public_keys.json +1 -0
  39. package/services/magic-link/assets/samples/closepack/known-bad/payload/invoice_bundle/payload/job_proof_bundle/manifest.json +1 -0
  40. package/services/magic-link/assets/samples/closepack/known-bad/payload/invoice_bundle/payload/job_proof_bundle/verify/report.json +1 -0
  41. package/services/magic-link/assets/samples/closepack/known-bad/payload/invoice_bundle/payload/job_proof_bundle/verify/verification_report.json +1 -0
  42. package/services/magic-link/assets/samples/closepack/known-bad/payload/invoice_bundle/pricing/pricing_matrix.json +1 -0
  43. package/services/magic-link/assets/samples/closepack/known-bad/payload/invoice_bundle/pricing/pricing_matrix_signatures.json +1 -0
  44. package/services/magic-link/assets/samples/closepack/known-bad/payload/invoice_bundle/settld.json +1 -0
  45. package/services/magic-link/assets/samples/closepack/known-bad/payload/invoice_bundle/verify/verification_report.json +1 -0
  46. package/services/magic-link/assets/samples/closepack/known-bad/settld.json +1 -0
  47. package/services/magic-link/assets/samples/closepack/known-bad/sla/sla_definition.json +1 -0
  48. package/services/magic-link/assets/samples/closepack/known-bad/sla/sla_evaluation.json +1 -0
  49. package/services/magic-link/assets/samples/closepack/known-bad/verify/verification_report.json +1 -0
  50. package/services/magic-link/assets/samples/closepack/known-good/acceptance/acceptance_criteria.json +1 -0
  51. package/services/magic-link/assets/samples/closepack/known-good/acceptance/acceptance_evaluation.json +1 -0
  52. package/services/magic-link/assets/samples/closepack/known-good/attestation/bundle_head_attestation.json +1 -0
  53. package/services/magic-link/assets/samples/closepack/known-good/evidence/evidence_index.json +1 -0
  54. package/services/magic-link/assets/samples/closepack/known-good/governance/policy.json +1 -0
  55. package/services/magic-link/assets/samples/closepack/known-good/governance/revocations.json +1 -0
  56. package/services/magic-link/assets/samples/closepack/known-good/manifest.json +1 -0
  57. package/services/magic-link/assets/samples/closepack/known-good/payload/invoice_bundle/attestation/bundle_head_attestation.json +1 -0
  58. package/services/magic-link/assets/samples/closepack/known-good/payload/invoice_bundle/governance/policy.json +1 -0
  59. package/services/magic-link/assets/samples/closepack/known-good/payload/invoice_bundle/governance/revocations.json +1 -0
  60. package/services/magic-link/assets/samples/closepack/known-good/payload/invoice_bundle/invoice/invoice_claim.json +1 -0
  61. package/services/magic-link/assets/samples/closepack/known-good/payload/invoice_bundle/manifest.json +1 -0
  62. package/services/magic-link/assets/samples/closepack/known-good/payload/invoice_bundle/metering/metering_report.json +1 -0
  63. package/services/magic-link/assets/samples/closepack/known-good/payload/invoice_bundle/payload/job_proof_bundle/attestation/bundle_head_attestation.json +1 -0
  64. package/services/magic-link/assets/samples/closepack/known-good/payload/invoice_bundle/payload/job_proof_bundle/events/events.jsonl +1 -0
  65. package/services/magic-link/assets/samples/closepack/known-good/payload/invoice_bundle/payload/job_proof_bundle/events/payload_material.jsonl +1 -0
  66. package/services/magic-link/assets/samples/closepack/known-good/payload/invoice_bundle/payload/job_proof_bundle/governance/global/events/events.jsonl +1 -0
  67. package/services/magic-link/assets/samples/closepack/known-good/payload/invoice_bundle/payload/job_proof_bundle/governance/global/events/payload_material.jsonl +1 -0
  68. package/services/magic-link/assets/samples/closepack/known-good/payload/invoice_bundle/payload/job_proof_bundle/governance/global/snapshot.json +1 -0
  69. package/services/magic-link/assets/samples/closepack/known-good/payload/invoice_bundle/payload/job_proof_bundle/governance/policy.json +1 -0
  70. package/services/magic-link/assets/samples/closepack/known-good/payload/invoice_bundle/payload/job_proof_bundle/governance/revocations.json +1 -0
  71. package/services/magic-link/assets/samples/closepack/known-good/payload/invoice_bundle/payload/job_proof_bundle/governance/tenant/events/events.jsonl +0 -0
  72. package/services/magic-link/assets/samples/closepack/known-good/payload/invoice_bundle/payload/job_proof_bundle/governance/tenant/events/payload_material.jsonl +0 -0
  73. package/services/magic-link/assets/samples/closepack/known-good/payload/invoice_bundle/payload/job_proof_bundle/governance/tenant/snapshot.json +1 -0
  74. package/services/magic-link/assets/samples/closepack/known-good/payload/invoice_bundle/payload/job_proof_bundle/job/snapshot.json +1 -0
  75. package/services/magic-link/assets/samples/closepack/known-good/payload/invoice_bundle/payload/job_proof_bundle/keys/public_keys.json +1 -0
  76. package/services/magic-link/assets/samples/closepack/known-good/payload/invoice_bundle/payload/job_proof_bundle/manifest.json +1 -0
  77. package/services/magic-link/assets/samples/closepack/known-good/payload/invoice_bundle/payload/job_proof_bundle/verify/report.json +1 -0
  78. package/services/magic-link/assets/samples/closepack/known-good/payload/invoice_bundle/payload/job_proof_bundle/verify/verification_report.json +1 -0
  79. package/services/magic-link/assets/samples/closepack/known-good/payload/invoice_bundle/pricing/pricing_matrix.json +1 -0
  80. package/services/magic-link/assets/samples/closepack/known-good/payload/invoice_bundle/pricing/pricing_matrix_signatures.json +1 -0
  81. package/services/magic-link/assets/samples/closepack/known-good/payload/invoice_bundle/settld.json +1 -0
  82. package/services/magic-link/assets/samples/closepack/known-good/payload/invoice_bundle/verify/verification_report.json +1 -0
  83. package/services/magic-link/assets/samples/closepack/known-good/settld.json +1 -0
  84. package/services/magic-link/assets/samples/closepack/known-good/sla/sla_definition.json +1 -0
  85. package/services/magic-link/assets/samples/closepack/known-good/sla/sla_evaluation.json +1 -0
  86. package/services/magic-link/assets/samples/closepack/known-good/verify/verification_report.json +1 -0
  87. package/services/magic-link/assets/samples/trust.json +11 -0
  88. package/services/magic-link/src/audit-log.js +24 -0
  89. package/services/magic-link/src/buyer-auth.js +220 -0
  90. package/services/magic-link/src/buyer-notifications.js +402 -0
  91. package/services/magic-link/src/buyer-users.js +129 -0
  92. package/services/magic-link/src/decision-otp.js +156 -0
  93. package/services/magic-link/src/decisions.js +92 -0
  94. package/services/magic-link/src/ingest-keys.js +137 -0
  95. package/services/magic-link/src/maintenance.js +70 -0
  96. package/services/magic-link/src/onboarding-email-sequence.js +331 -0
  97. package/services/magic-link/src/payment-triggers.js +733 -0
  98. package/services/magic-link/src/pdf.js +149 -0
  99. package/services/magic-link/src/policy.js +69 -0
  100. package/services/magic-link/src/redaction.js +6 -0
  101. package/services/magic-link/src/render-model.js +70 -0
  102. package/services/magic-link/src/retention-gc.js +158 -0
  103. package/services/magic-link/src/run-records.js +496 -0
  104. package/services/magic-link/src/s3.js +171 -0
  105. package/services/magic-link/src/server.js +15788 -0
  106. package/services/magic-link/src/settlement-decisions.js +84 -0
  107. package/services/magic-link/src/smtp.js +202 -0
  108. package/services/magic-link/src/storage-cli.js +88 -0
  109. package/services/magic-link/src/storage-format.js +59 -0
  110. package/services/magic-link/src/tenant-billing.js +115 -0
  111. package/services/magic-link/src/tenant-onboarding.js +467 -0
  112. package/services/magic-link/src/tenant-settings.js +1140 -0
  113. package/services/magic-link/src/usage.js +80 -0
  114. package/services/magic-link/src/verify-queue.js +179 -0
  115. package/services/magic-link/src/verify-worker.js +157 -0
  116. package/services/magic-link/src/webhook-retries.js +542 -0
  117. package/services/magic-link/src/webhooks.js +218 -0
  118. package/src/api/app.js +129 -0
@@ -0,0 +1,343 @@
1
+ # Magic Link (hosted verifier MVP)
2
+
3
+ This service provides a minimal “Magic Link” hosted verifier for `InvoiceBundle.v1` (and `ClosePack.v1`) uploads:
4
+
5
+ - Upload a bundle zip
6
+ - Run strict or compat verification server-side (`mode=strict|compat|auto`)
7
+ - Serve a view-only HTML report page
8
+ - Expose onboarding wizard APIs for SLA templates + tenant-scoped uploads
9
+ - Allow downloads of:
10
+ - original bundle zip
11
+ - hosted `VerifyCliOutput.v1` JSON
12
+ - producer receipt (if present in bundle)
13
+ - PDF summary (non-normative)
14
+ - audit packet zip (bundle + outputs)
15
+ - approval closepack zip (`/r/:token/closepack.zip`, once approved)
16
+
17
+ ## Run
18
+
19
+ Requirements:
20
+
21
+ - `SETTLD_TRUSTED_GOVERNANCE_ROOT_KEYS_JSON` is required for `mode=strict` (optional for `mode=compat` / `mode=auto`)
22
+ - Node.js (repo toolchain)
23
+
24
+ Example:
25
+
26
+ ```bash
27
+ export MAGIC_LINK_HOST=127.0.0.1 # set 0.0.0.0 in prod
28
+ export MAGIC_LINK_PORT=8787
29
+ export MAGIC_LINK_API_KEY='dev_key'
30
+ export MAGIC_LINK_DATA_DIR=/tmp/settld-magic-link
31
+ export MAGIC_LINK_VERIFY_TIMEOUT_MS=60000
32
+ export MAGIC_LINK_RATE_LIMIT_UPLOADS_PER_HOUR=100
33
+ export MAGIC_LINK_VERIFY_QUEUE_WORKERS=2
34
+ export MAGIC_LINK_VERIFY_QUEUE_MAX_ATTEMPTS=3
35
+ export MAGIC_LINK_VERIFY_QUEUE_RETRY_BACKOFF_MS=250
36
+ export MAGIC_LINK_PAYMENT_TRIGGER_RETRY_INTERVAL_MS=2000
37
+ export MAGIC_LINK_PAYMENT_TRIGGER_MAX_ATTEMPTS=5
38
+ export MAGIC_LINK_PAYMENT_TRIGGER_RETRY_BACKOFF_MS=5000
39
+ export MAGIC_LINK_WEBHOOK_MAX_ATTEMPTS=3
40
+ export MAGIC_LINK_WEBHOOK_RETRY_BACKOFF_MS=250
41
+ export MAGIC_LINK_WEBHOOK_RETRY_INTERVAL_MS=2000
42
+ export MAGIC_LINK_WEBHOOK_DEAD_LETTER_ALERT_THRESHOLD=10
43
+ export MAGIC_LINK_WEBHOOK_DEAD_LETTER_ALERT_TARGETS='slack,zapier,defaultRelay,internal'
44
+ export MAGIC_LINK_WEBHOOK_DEAD_LETTER_ALERT_WEBHOOK_URL='https://ops.example.com/hooks/settld-alerts'
45
+ export MAGIC_LINK_WEBHOOK_DEAD_LETTER_ALERT_WEBHOOK_SECRET='whsec_ops_alerts'
46
+ export MAGIC_LINK_DEFAULT_EVENT_RELAY_URL='https://relay.example.com/settld-events'
47
+ export MAGIC_LINK_DEFAULT_EVENT_RELAY_SECRET='whsec_shared_relay_secret'
48
+ export MAGIC_LINK_INTEGRATION_OAUTH_STATE_TTL_SECONDS=900
49
+ export MAGIC_LINK_INTEGRATION_OAUTH_HTTP_TIMEOUT_MS=10000
50
+ export MAGIC_LINK_SLACK_OAUTH_CLIENT_ID='123456.123456'
51
+ export MAGIC_LINK_SLACK_OAUTH_CLIENT_SECRET='slack_client_secret'
52
+ export MAGIC_LINK_SLACK_OAUTH_SCOPES='incoming-webhook'
53
+ export MAGIC_LINK_ZAPIER_OAUTH_CLIENT_ID='zapier_client_id'
54
+ export MAGIC_LINK_ZAPIER_OAUTH_CLIENT_SECRET='zapier_client_secret'
55
+ export MAGIC_LINK_ZAPIER_OAUTH_AUTHORIZE_URL='https://example.zapier.app/oauth/authorize'
56
+ export MAGIC_LINK_ZAPIER_OAUTH_TOKEN_URL='https://example.zapier.app/oauth/token'
57
+ export MAGIC_LINK_ZAPIER_OAUTH_WEBHOOK_FIELD='webhookUrl'
58
+ export MAGIC_LINK_BUYER_OTP_DELIVERY_MODE=record # record|log|smtp
59
+ export MAGIC_LINK_DECISION_OTP_DELIVERY_MODE=record # record|log|smtp
60
+
61
+ # Required for strict verification:
62
+ export SETTLD_TRUSTED_GOVERNANCE_ROOT_KEYS_JSON='{"key_...":"-----BEGIN PUBLIC KEY-----\\n..."}'
63
+
64
+ node services/magic-link/src/server.js
65
+ ```
66
+
67
+ Optional DB-backed run metadata control plane:
68
+
69
+ ```bash
70
+ export MAGIC_LINK_RUN_STORE_MODE=dual # fs|dual|db
71
+ export MAGIC_LINK_RUN_STORE_DATABASE_URL='postgres://user:pass@host:5432/db'
72
+ # one-time migration (copies existing runs/* metadata into Postgres):
73
+ node scripts/magic-link/migrate-run-records-to-db.mjs
74
+ ```
75
+
76
+ `GET /v1/inbox` reads run records first (DB/FS per `MAGIC_LINK_RUN_STORE_MODE`) and falls back to legacy index/meta files for older runs.
77
+
78
+ ## OTP delivery (buyer login + decision approvals)
79
+
80
+ Magic Link can deliver OTP codes in three modes:
81
+
82
+ - `record` (default): write OTPs to an on-disk outbox under `MAGIC_LINK_DATA_DIR` (dev/testing)
83
+ - `log`: log OTP codes to stdout (dev only)
84
+ - `smtp`: send OTP codes via SMTP (production)
85
+
86
+ Env vars:
87
+
88
+ - `MAGIC_LINK_BUYER_OTP_DELIVERY_MODE=record|log|smtp`
89
+ - `MAGIC_LINK_DECISION_OTP_DELIVERY_MODE=record|log|smtp`
90
+
91
+ SMTP config (required for `smtp` mode):
92
+
93
+ - `MAGIC_LINK_SMTP_HOST`
94
+ - `MAGIC_LINK_SMTP_PORT` (default `587`)
95
+ - `MAGIC_LINK_SMTP_SECURE=1|0` (default `0`; set `1` for SMTPS/465)
96
+ - `MAGIC_LINK_SMTP_STARTTLS=1|0` (default `1`; ignored when `SECURE=1`)
97
+ - `MAGIC_LINK_SMTP_USER`, `MAGIC_LINK_SMTP_PASS` (optional; enables `AUTH PLAIN`)
98
+ - `MAGIC_LINK_SMTP_FROM` (required when `MAGIC_LINK_SMTP_HOST` is set)
99
+
100
+ ## Data dir format + upgrades
101
+
102
+ Magic Link persists state under `MAGIC_LINK_DATA_DIR`. A small format marker is stored at:
103
+
104
+ - `format.json` (`schemaVersion: MagicLinkDataFormat.v1`)
105
+
106
+ On startup, Magic Link can initialize/migrate this marker (default: enabled):
107
+
108
+ - `MAGIC_LINK_MIGRATE_ON_STARTUP=1` (default)
109
+
110
+ You can also run an explicit check/migrate command without starting the server:
111
+
112
+ ```bash
113
+ node services/magic-link/src/storage-cli.js check --data-dir /path/to/data
114
+ node services/magic-link/src/storage-cli.js migrate --data-dir /path/to/data
115
+ ```
116
+
117
+ ## Ops endpoints
118
+
119
+ - `GET /health` and `GET /healthz` (liveness/readiness + storage format signal)
120
+ - `GET /metrics` (Prometheus text format)
121
+
122
+ Supportability:
123
+
124
+ - `GET /v1/tenants/:tenant/support-bundle?from=…&to=…` (zip export for debugging without SSH)
125
+
126
+ Upload:
127
+
128
+ ```bash
129
+ curl -sS -X POST \
130
+ -H "x-api-key: dev_key" \
131
+ -H "x-tenant-id: tenant_example" \
132
+ --data-binary @InvoiceBundle.v1.zip \
133
+ "http://localhost:8787/v1/upload?mode=auto"
134
+ ```
135
+
136
+ Upload via CLI:
137
+
138
+ ```bash
139
+ export MAGIC_LINK_API_KEY='dev_key'
140
+ node packages/magic-link-cli/bin/settld-magic-link.js upload InvoiceBundle.v1.zip --url http://localhost:8787 --mode auto --tenant tenant_example
141
+ ```
142
+
143
+ Wizard + template APIs:
144
+
145
+ ```bash
146
+ curl -sS -H "x-api-key: dev_key" \
147
+ "http://localhost:8787/v1/tenants/tenant_example/sla-templates"
148
+
149
+ curl -sS -X POST -H "x-api-key: dev_key" -H "content-type: application/json" \
150
+ --data '{"templateId":"delivery_standard_v1","overrides":{"metrics":{"targetCompletionMinutes":45}}}' \
151
+ "http://localhost:8787/v1/tenants/tenant_example/sla-templates/render"
152
+
153
+ curl -sS -X POST -H "x-api-key: dev_key" --data-binary @InvoiceBundle.v1.zip \
154
+ "http://localhost:8787/v1/tenants/tenant_example/upload?mode=auto&vendorId=vendor_a&contractId=contract_1"
155
+ ```
156
+
157
+ Self-service tenant bootstrap + onboarding metrics:
158
+
159
+ ```bash
160
+ curl -sS -X POST -H "x-api-key: dev_key" -H "content-type: application/json" \
161
+ --data '{"name":"Acme Agent Ops","contactEmail":"ops@acme.example","billingEmail":"billing@acme.example"}' \
162
+ "http://localhost:8787/v1/tenants"
163
+
164
+ curl -sS -H "x-api-key: dev_key" \
165
+ "http://localhost:8787/v1/tenants/<tenantId>/onboarding-metrics"
166
+ ```
167
+
168
+ Integrations (self-serve Slack + Zapier):
169
+
170
+ ```bash
171
+ # Open browser UI (admin auth required):
172
+ http://localhost:8787/v1/tenants/<tenantId>/integrations
173
+
174
+ # JSON state
175
+ curl -sS -H "x-api-key: dev_key" \
176
+ "http://localhost:8787/v1/tenants/<tenantId>/integrations/state"
177
+
178
+ # OAuth click-connect start (browser redirect):
179
+ http://localhost:8787/v1/tenants/<tenantId>/integrations/slack/oauth/start
180
+ http://localhost:8787/v1/tenants/<tenantId>/integrations/zapier/oauth/start
181
+
182
+ # OAuth callback routes (provider redirects here):
183
+ # /v1/integrations/slack/oauth/callback
184
+ # /v1/integrations/zapier/oauth/callback
185
+
186
+ # Connect Slack incoming webhook
187
+ curl -sS -X POST -H "x-api-key: dev_key" -H "content-type: application/json" \
188
+ --data '{"webhookUrl":"https://hooks.slack.com/services/T000/B000/XXXXX"}' \
189
+ "http://localhost:8787/v1/tenants/<tenantId>/integrations/slack/connect"
190
+
191
+ # Connect Zapier catch hook
192
+ curl -sS -X POST -H "x-api-key: dev_key" -H "content-type: application/json" \
193
+ --data '{"webhookUrl":"https://hooks.zapier.com/hooks/catch/123456/abcdef/"}' \
194
+ "http://localhost:8787/v1/tenants/<tenantId>/integrations/zapier/connect"
195
+
196
+ # Send a signed test event to a connected integration
197
+ curl -sS -X POST -H "x-api-key: dev_key" -H "content-type: application/json" \
198
+ --data '{"event":"verification.completed"}' \
199
+ "http://localhost:8787/v1/tenants/<tenantId>/integrations/slack/test-send"
200
+ ```
201
+
202
+ Admin revoke:
203
+
204
+ ```bash
205
+ curl -sS -X POST \
206
+ -H "x-api-key: dev_key" \
207
+ -H "content-type: application/json" \
208
+ --data '{"token":"ml_...","reason":"optional"}' \
209
+ http://localhost:8787/v1/revoke
210
+ ```
211
+
212
+ ## Buyer inbox + vendor ingest
213
+
214
+ List runs (filters: `status`, `vendorId`, `contractId`, `from`, `to`, `limit`):
215
+
216
+ ```bash
217
+ curl -sS \
218
+ -H "x-api-key: dev_key" \
219
+ -H "x-tenant-id: tenant_example" \
220
+ "http://localhost:8787/v1/inbox?status=green"
221
+ ```
222
+
223
+ Create a vendor-scoped ingest key (upload-only):
224
+
225
+ ```bash
226
+ curl -sS -X POST \
227
+ -H "x-api-key: dev_key" \
228
+ http://localhost:8787/v1/tenants/tenant_example/vendors/vendor_a/ingest-keys
229
+ ```
230
+
231
+ Vendor upload using the ingest key (stamps `vendorId` from the key):
232
+
233
+ ```bash
234
+ curl -sS -X POST \
235
+ -H "authorization: Bearer igk_..." \
236
+ --data-binary @InvoiceBundle.v1.zip \
237
+ "http://localhost:8787/v1/ingest/tenant_example?mode=auto&contractId=contract_1"
238
+ ```
239
+
240
+ Monthly exports:
241
+
242
+ ```bash
243
+ curl -sS -H "x-api-key: dev_key" \
244
+ "http://localhost:8787/v1/tenants/tenant_example/export.csv?month=2026-02"
245
+
246
+ curl -sS -H "x-api-key: dev_key" \
247
+ "http://localhost:8787/v1/tenants/tenant_example/audit-packet?month=2026-02" \
248
+ --output audit-packet.zip
249
+ ```
250
+
251
+ Tenant analytics + trust graph:
252
+
253
+ ```bash
254
+ # browser dashboard (tenant analytics + trust graph + snapshot diff):
255
+ http://localhost:8787/v1/tenants/tenant_example/analytics/dashboard
256
+
257
+ # analytics report: trends + top vendors/contracts + warning/error code distribution
258
+ curl -sS -H "x-api-key: dev_key" \
259
+ "http://localhost:8787/v1/tenants/tenant_example/analytics?month=2026-02&bucket=day&limit=20"
260
+
261
+ # trust graph: buyer→vendor and vendor→contract trust edges for the selected month
262
+ curl -sS -H "x-api-key: dev_key" \
263
+ "http://localhost:8787/v1/tenants/tenant_example/trust-graph?month=2026-02&minRuns=1&maxEdges=200"
264
+
265
+ # save a trust graph snapshot for a month
266
+ curl -sS -X POST -H "x-api-key: dev_key" -H "content-type: application/json" \
267
+ --data '{"month":"2026-02","minRuns":1,"maxEdges":200}' \
268
+ "http://localhost:8787/v1/tenants/tenant_example/trust-graph/snapshots"
269
+
270
+ # list saved trust graph snapshots
271
+ curl -sS -H "x-api-key: dev_key" \
272
+ "http://localhost:8787/v1/tenants/tenant_example/trust-graph/snapshots?limit=50"
273
+
274
+ # diff trust graph between two months (uses snapshots when present, otherwise builds on demand)
275
+ curl -sS -H "x-api-key: dev_key" \
276
+ "http://localhost:8787/v1/tenants/tenant_example/trust-graph/diff?baseMonth=2026-01&compareMonth=2026-02&limit=50"
277
+ ```
278
+
279
+ Webhook events:
280
+
281
+ - `verification.completed`
282
+ - `verification.failed`
283
+ - `decision.approved`
284
+ - `decision.held`
285
+
286
+ Operational defaults:
287
+
288
+ - New tenants auto-attach a default relay webhook when `MAGIC_LINK_DEFAULT_EVENT_RELAY_URL` is set.
289
+ - Delivery retries/backoff are controlled by `MAGIC_LINK_WEBHOOK_MAX_ATTEMPTS` and `MAGIC_LINK_WEBHOOK_RETRY_BACKOFF_MS`.
290
+ - Persistent retry sweeps are controlled by `MAGIC_LINK_WEBHOOK_RETRY_INTERVAL_MS`.
291
+ - Dead-letter alerting is controlled by:
292
+ - `MAGIC_LINK_WEBHOOK_DEAD_LETTER_ALERT_THRESHOLD` (`0` disables alerts)
293
+ - `MAGIC_LINK_WEBHOOK_DEAD_LETTER_ALERT_TARGETS` (comma-separated: `slack`, `zapier`, `defaultRelay`, `internal`, or explicit `https://...` URLs)
294
+ - `MAGIC_LINK_WEBHOOK_DEAD_LETTER_ALERT_WEBHOOK_URL` + `MAGIC_LINK_WEBHOOK_DEAD_LETTER_ALERT_WEBHOOK_SECRET` (required for `internal`, and secret required for explicit URL targets)
295
+ - Webhook payloads are always HMAC-signed (`x-settld-signature`).
296
+ - Slack/Zapier OAuth click-connect is enabled when the corresponding OAuth env vars are configured.
297
+
298
+ Webhook retry ops (tenant admin):
299
+
300
+ ```bash
301
+ # list pending/dead-letter webhook retries (optionally filter by provider=slack|zapier|defaultRelay|webhook)
302
+ curl -sS -H "x-api-key: dev_key" \
303
+ "http://localhost:8787/v1/tenants/tenant_example/webhook-retries?state=pending&provider=slack"
304
+
305
+ # process one retry sweep for this tenant immediately
306
+ curl -sS -X POST -H "x-api-key: dev_key" \
307
+ "http://localhost:8787/v1/tenants/tenant_example/webhook-retries/run-once"
308
+
309
+ # replay the latest dead-letter webhook retry for a provider
310
+ curl -sS -X POST -H "x-api-key: dev_key" -H "content-type: application/json" \
311
+ --data '{"provider":"slack","resetAttempts":true,"useCurrentSettings":true}' \
312
+ "http://localhost:8787/v1/tenants/tenant_example/webhook-retries/replay-latest?provider=slack"
313
+
314
+ # replay a dead-letter webhook retry job back to pending (provider guard is optional)
315
+ curl -sS -X POST -H "x-api-key: dev_key" -H "content-type: application/json" \
316
+ --data '{"idempotencyKey":"<idempotency_key>","provider":"slack","resetAttempts":true,"useCurrentSettings":true}' \
317
+ "http://localhost:8787/v1/tenants/tenant_example/webhook-retries/<token>/replay?provider=slack"
318
+ ```
319
+
320
+ Payment trigger retry ops (tenant admin):
321
+
322
+ ```bash
323
+ # list pending/dead-letter payment trigger retries
324
+ curl -sS -H "x-api-key: dev_key" \
325
+ "http://localhost:8787/v1/tenants/tenant_example/payment-trigger-retries?state=pending"
326
+
327
+ # process one retry sweep for this tenant immediately
328
+ curl -sS -X POST -H "x-api-key: dev_key" \
329
+ "http://localhost:8787/v1/tenants/tenant_example/payment-trigger-retries/run-once"
330
+
331
+ # replay a dead-letter job back to pending
332
+ curl -sS -X POST -H "x-api-key: dev_key" -H "content-type: application/json" \
333
+ --data '{"idempotencyKey":"<decision_report_hash>","resetAttempts":true,"useCurrentSettings":true}' \
334
+ "http://localhost:8787/v1/tenants/tenant_example/payment-trigger-retries/ml_<token>/replay"
335
+ ```
336
+
337
+ Tenant-scoped settings now also support:
338
+
339
+ - `buyerNotifications` (recipient list + `smtp|webhook|record` delivery mode)
340
+ - Buyer notifications are idempotent per artifact token, and per upload `runId` when provided.
341
+ - `autoDecision` (status-driven automated `approve|hold` policy with system actor stamping)
342
+ - `paymentTriggers` (approval delivery to `record|webhook` sinks, idempotent by decision report hash)
343
+ - `rateLimits` (`uploadsPerHour`, `verificationViewsPerHour`, `decisionsPerHour`, `otpRequestsPerHour`)
@@ -0,0 +1 @@
1
+ {"criteria":[{"criterionId":"proof_status_pass","expectedStatus":"PASS","kind":"PROOF_STATUS_EQUALS"},{"criterionId":"sla_overall_ok","kind":"SLA_OVERALL_OK"}],"generatedAt":"2026-02-02T00:00:00.000Z","schemaVersion":"AcceptanceCriteria.v1"}
@@ -0,0 +1 @@
1
+ {"generatedAt":"2026-02-02T00:00:00.000Z","overallStatus":"unknown","results":[{"criterionId":"proof_status_pass","detail":{"actualStatus":null,"expectedStatus":"PASS"},"kind":"PROOF_STATUS_EQUALS","status":"unknown"},{"criterionId":"sla_overall_ok","detail":{"overallStatus":"ok"},"kind":"SLA_OVERALL_OK","status":"ok"}],"schemaVersion":"AcceptanceEvaluation.v1"}
@@ -0,0 +1 @@
1
+ {"attestationHash":"550ab12d8aef353d28391396d534f0c72dcd4bd8588e2b6f252f3afdbc2e5224","generatedAt":"2026-02-02T00:00:00.000Z","heads":{"invoiceBundle":{"attestationHash":"69989d87ba1fb78c596f9fd034626d5f74d0c0b7ba24ff46e22e3fb4e3de1a2b","embeddedPath":"payload/invoice_bundle","manifestHash":"d316addad7608e2a457ca50eb188429f9de43a639cfb323fcde1c962406e0878"}},"kind":"ClosePack.v1","manifestHash":"d98154337b3e035240ece3255552c19d377bcdb0b2e13f27a6203ded86e8903d","schemaVersion":"BundleHeadAttestation.v1","scope":{"invoiceId":"invoice_fixture_wrong_total"},"signature":"Dfdz+9A7yuPWKTsLeyvIEb/mBxF/vUhRv6HHvLmpIh5GLYg98F5ZSThjYLqTsojn/Sv/iMTezbxYzMczBLrKDg==","signedAt":"2026-02-02T00:00:00.000Z","signerKeyId":"key_9ed38005b42d9364601ffab3","tenantId":"tenant_fixture"}
@@ -0,0 +1 @@
1
+ {"generatedAt":"2026-02-02T00:00:00.000Z","items":[{"at":null,"contentType":null,"eventId":null,"evidenceId":null,"evidenceRefHash":null,"key":"metering:job/snapshot.json","kind":null,"path":"job/snapshot.json","sha256":"819c087bd8fc5a6fbf833ff13e31915433bc1687f32e8231bd6263718f31bab8","sizeBytes":null,"source":"metering_evidence_ref"}],"jobProof":{"embeddedPath":"payload/invoice_bundle/payload/job_proof_bundle","headAttestationHash":"c70b62f9e28ac91fa07073c802495d1801921c0d01924a2538f981a7e18f8d5b","manifestHash":"6775ce8a23cb436fdd6e2809bf79d2b1ac05f76a820094342b0cc68f425ef9d8"},"schemaVersion":"EvidenceIndex.v1"}
@@ -0,0 +1 @@
1
+ {"algorithms":["ed25519"],"bundleHeadAttestationSigners":[{"allowedKeyIds":["key_9ed38005b42d9364601ffab3"],"allowedScopes":["global","tenant"],"requireGoverned":true,"requiredPurpose":"server","subjectType":"ClosePack.v1"}],"generatedAt":"2026-02-02T00:00:00.000Z","policyHash":"ae01f50ce40817fb8cc57ebdee290fc0c8464da95c665c2e99b358d7613d8b95","policyId":"governance_policy_default_v2","revocationList":{"path":"governance/revocations.json","sha256":"5c286871ea76001026b765f52296df51f76f4e040b537963fde671850684cf87"},"schemaVersion":"GovernancePolicy.v2","signature":"m7oXX//xJ7P0X6mPDeh/rfDRRN317l1llgkBkLn7zMjH+1c66HkTsRFn1D4fFPdKQOSG28HNgsiZBGDY+nrUDQ==","signedAt":"2026-02-02T00:00:00.000Z","signerKeyId":"key_4bd1ee0813b265cb6670a1cc","verificationReportSigners":[{"allowedKeyIds":["key_9ed38005b42d9364601ffab3"],"allowedScopes":["global","tenant"],"requireGoverned":true,"requiredPurpose":"server","subjectType":"ClosePack.v1"}]}
@@ -0,0 +1 @@
1
+ {"generatedAt":"2026-02-02T00:00:00.000Z","listHash":"5c286871ea76001026b765f52296df51f76f4e040b537963fde671850684cf87","listId":"revocations_default_v1","revocations":[],"rotations":[],"schemaVersion":"RevocationList.v1","signature":"IG/Mwb9syG1HtzD7YwEM+eG4dPPhcIqy75SC3GjzoZZcepeWY/YpYVVzxxwBINkaFrr/mtUmq+s+Kizogs75Bw==","signedAt":"2026-02-02T00:00:00.000Z","signerKeyId":"key_4bd1ee0813b265cb6670a1cc"}
@@ -0,0 +1 @@
1
+ {"createdAt":"2026-02-02T00:00:00.000Z","files":[{"bytes":242,"name":"acceptance/acceptance_criteria.json","sha256":"0e1d1848479b5ffe5bb396b559b8621ece765de313c14e7de1b5150255f9a078"},{"bytes":365,"name":"acceptance/acceptance_evaluation.json","sha256":"4f89cd1e18b51dc535954d844aaeeb9f5cd10a04002cb43ea489be6cfabf757e"},{"bytes":624,"name":"evidence/evidence_index.json","sha256":"a7dca7b4b66affa9b7666030611574f941848de0df55dd5295175eb97a15eb0d"},{"bytes":941,"name":"governance/policy.json","sha256":"fdf83afee673d554a43cb6a7cc8e7dd2f09f6ca5a6dfea019fe0cce9bc3db515"},{"bytes":409,"name":"governance/revocations.json","sha256":"7dd89653b90b485f06e17990b064a5cb2d2d1e39e144f019f0ab164432d008b2"},{"bytes":735,"name":"payload/invoice_bundle/attestation/bundle_head_attestation.json","sha256":"774fd88046d65a31440fc9b4c8f55562133f08c4d9a951795b4ae7e89ed86371"},{"bytes":949,"name":"payload/invoice_bundle/governance/policy.json","sha256":"ecc617ae2edbddddecbc3580b509b6e2f218787238e883a348a575f278f1f662"},{"bytes":409,"name":"payload/invoice_bundle/governance/revocations.json","sha256":"7dd89653b90b485f06e17990b064a5cb2d2d1e39e144f019f0ab164432d008b2"},{"bytes":410,"name":"payload/invoice_bundle/invoice/invoice_claim.json","sha256":"b1904086d355019775a60a3ee8eb9d5a146319d0609226ba257d780708868ff7"},{"bytes":3740,"name":"payload/invoice_bundle/manifest.json","sha256":"639598694e1b83238cdfa1f7e2657d9bc5059e82489f7e3c2ef7ff892538e15f"},{"bytes":547,"name":"payload/invoice_bundle/metering/metering_report.json","sha256":"e7535d0ba1b8e6628b17012d57423a2629792787e92a081ff08bdbf08d63072b"},{"bytes":864,"name":"payload/invoice_bundle/payload/job_proof_bundle/attestation/bundle_head_attestation.json","sha256":"641947fd28044f926bae840ad343bb4d75d6be44b29e329098210f0af4c28a43"},{"bytes":515,"name":"payload/invoice_bundle/payload/job_proof_bundle/events/events.jsonl","sha256":"1fbc8ef4a9d8a42efc02e2885b043578f3a0584d4054d98c3f06b1cfa276a126"},{"bytes":186,"name":"payload/invoice_bundle/payload/job_proof_bundle/events/payload_material.jsonl","sha256":"338953ab5054bdc4a7d83c9ef1fef8d3c83ee78916f32c250636238208de62d3"},{"bytes":778,"name":"payload/invoice_bundle/payload/job_proof_bundle/governance/global/events/events.jsonl","sha256":"a56f271f30f0c485a0cb80ab65f74b65fd438422d1f9d2e7e1664e5f028ce520"},{"bytes":449,"name":"payload/invoice_bundle/payload/job_proof_bundle/governance/global/events/payload_material.jsonl","sha256":"1e2b95a0192f324d49a45c4378936d5a32c6548f44648d72ed79522186b0867f"},{"bytes":152,"name":"payload/invoice_bundle/payload/job_proof_bundle/governance/global/snapshot.json","sha256":"4a5b0d84a0b96dd0fec4650d1f5483b8a4795d0c891595d730bf74a556f4368b"},{"bytes":951,"name":"payload/invoice_bundle/payload/job_proof_bundle/governance/policy.json","sha256":"e88b6fdf8494a31264f18df85a4f2de96d69be1c03ddbfc901157a03cf02341c"},{"bytes":409,"name":"payload/invoice_bundle/payload/job_proof_bundle/governance/revocations.json","sha256":"7dd89653b90b485f06e17990b064a5cb2d2d1e39e144f019f0ab164432d008b2"},{"bytes":0,"name":"payload/invoice_bundle/payload/job_proof_bundle/governance/tenant/events/events.jsonl","sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},{"bytes":0,"name":"payload/invoice_bundle/payload/job_proof_bundle/governance/tenant/events/payload_material.jsonl","sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},{"bytes":66,"name":"payload/invoice_bundle/payload/job_proof_bundle/governance/tenant/snapshot.json","sha256":"353bc53464b75d5a61a810a29014b9a2fcdcdeb0762d18da745ef15765919400"},{"bytes":138,"name":"payload/invoice_bundle/payload/job_proof_bundle/job/snapshot.json","sha256":"819c087bd8fc5a6fbf833ff13e31915433bc1687f32e8231bd6263718f31bab8"},{"bytes":470,"name":"payload/invoice_bundle/payload/job_proof_bundle/keys/public_keys.json","sha256":"e88c404c67d245925a0c7e21d5381428b2ef3df69fd31041a39105c5ec7849eb"},{"bytes":1930,"name":"payload/invoice_bundle/payload/job_proof_bundle/manifest.json","sha256":"844451c8a0efb43b28c5f4ea44dd291e908590fa00583d7d9cc6934c2143c7fb"},{"bytes":297,"name":"payload/invoice_bundle/payload/job_proof_bundle/verify/report.json","sha256":"1f7725687929166e2258c0f68f4f50d5419a59a0ef490abd407fbcfc9a4123f8"},{"bytes":1312,"name":"payload/invoice_bundle/payload/job_proof_bundle/verify/verification_report.json","sha256":"86c22381caf30735783418f603518c8f7301b53cb2e8f4e49326e1e1d46c9f06"},{"bytes":112,"name":"payload/invoice_bundle/pricing/pricing_matrix.json","sha256":"c43476f394086b2f66ac1df090a303f32713547b64ecf29e83ac6762ddbc1fb3"},{"bytes":346,"name":"payload/invoice_bundle/pricing/pricing_matrix_signatures.json","sha256":"25c1ebf3c5af800807a1fe1a9b824760099c5171765fb4ef8610cfb91d20564e"},{"bytes":611,"name":"payload/invoice_bundle/settld.json","sha256":"ca76e5f8d036647fb0d8684b5b46044d9a160ecd0bb9935695abd2446f722341"},{"bytes":1573,"name":"payload/invoice_bundle/verify/verification_report.json","sha256":"4bd3ee6e58c6469e1bddabf46c0029dba14a13130d6960358066abf3d842be34"},{"bytes":1165,"name":"settld.json","sha256":"c7c697924332a03b2fce4276f1f914294a70fa8bee358df16ac856f9739ced8b"},{"bytes":89,"name":"sla/sla_definition.json","sha256":"09cede8efe384f99669edcd12d03a2c912f6b58018490641171de68bd2ada930"},{"bytes":112,"name":"sla/sla_evaluation.json","sha256":"2aab51475a2ea4b9792c3bbbf09b5ae2fa0386cb6da1ce039d86fff793be1f98"}],"hashing":{"excludes":["verify/**"],"fileOrder":"path_asc","schemaVersion":"ClosePackManifestHash.v1"},"invoiceId":"invoice_fixture_wrong_total","manifestHash":"d98154337b3e035240ece3255552c19d377bcdb0b2e13f27a6203ded86e8903d","protocol":"1.0","schemaVersion":"ClosePackManifest.v1","tenantId":"tenant_fixture","type":"ClosePack.v1"}
@@ -0,0 +1 @@
1
+ {"attestationHash":"69989d87ba1fb78c596f9fd034626d5f74d0c0b7ba24ff46e22e3fb4e3de1a2b","generatedAt":"2026-02-02T00:00:00.000Z","heads":{"jobProof":{"attestationHash":"c70b62f9e28ac91fa07073c802495d1801921c0d01924a2538f981a7e18f8d5b","manifestHash":"6775ce8a23cb436fdd6e2809bf79d2b1ac05f76a820094342b0cc68f425ef9d8"}},"kind":"InvoiceBundle.v1","manifestHash":"d316addad7608e2a457ca50eb188429f9de43a639cfb323fcde1c962406e0878","schemaVersion":"BundleHeadAttestation.v1","scope":{"invoiceId":"invoice_fixture_wrong_total"},"signature":"0qNNLJ1SMz0Amh6r33eaEDXnRP3CFfwhX/8VI54xc65+ZI4n6F4lsRwrMUb0LIeDVUOcYZV9BtUUI2Rm6Su2DA==","signedAt":"2026-02-02T00:00:00.000Z","signerKeyId":"key_9ed38005b42d9364601ffab3","tenantId":"tenant_fixture"}
@@ -0,0 +1 @@
1
+ {"algorithms":["ed25519"],"bundleHeadAttestationSigners":[{"allowedKeyIds":["key_9ed38005b42d9364601ffab3"],"allowedScopes":["global","tenant"],"requireGoverned":true,"requiredPurpose":"server","subjectType":"InvoiceBundle.v1"}],"generatedAt":"2026-02-02T00:00:00.000Z","policyHash":"0c0af0e6cc728d3b1eb7489c7fdcedd20602fd3adc69477357007f7150019935","policyId":"governance_policy_default_v2","revocationList":{"path":"governance/revocations.json","sha256":"5c286871ea76001026b765f52296df51f76f4e040b537963fde671850684cf87"},"schemaVersion":"GovernancePolicy.v2","signature":"aCG+XrKnp3ERKrAPR2VQ4P5ORcRKK5GhImmm9b/nNNpx3SpGJP9PlOMbyBocv05t8CWsiNa/YyCR6+YRTugpDQ==","signedAt":"2026-02-02T00:00:00.000Z","signerKeyId":"key_4bd1ee0813b265cb6670a1cc","verificationReportSigners":[{"allowedKeyIds":["key_9ed38005b42d9364601ffab3"],"allowedScopes":["global","tenant"],"requireGoverned":true,"requiredPurpose":"server","subjectType":"InvoiceBundle.v1"}]}
@@ -0,0 +1 @@
1
+ {"generatedAt":"2026-02-02T00:00:00.000Z","listHash":"5c286871ea76001026b765f52296df51f76f4e040b537963fde671850684cf87","listId":"revocations_default_v1","revocations":[],"rotations":[],"schemaVersion":"RevocationList.v1","signature":"IG/Mwb9syG1HtzD7YwEM+eG4dPPhcIqy75SC3GjzoZZcepeWY/YpYVVzxxwBINkaFrr/mtUmq+s+Kizogs75Bw==","signedAt":"2026-02-02T00:00:00.000Z","signerKeyId":"key_4bd1ee0813b265cb6670a1cc"}
@@ -0,0 +1 @@
1
+ {"createdAt":"2026-02-02T00:00:00.000Z","currency":"USD","invoiceId":"invoice_fixture_wrong_total","jobProof":{"embeddedPath":"payload/job_proof_bundle","headAttestationHash":"c70b62f9e28ac91fa07073c802495d1801921c0d01924a2538f981a7e18f8d5b","manifestHash":"6775ce8a23cb436fdd6e2809bf79d2b1ac05f76a820094342b0cc68f425ef9d8"},"schemaVersion":"InvoiceClaim.v1","tenantId":"tenant_fixture","totalCents":"999999"}
@@ -0,0 +1 @@
1
+ {"createdAt":"2026-02-02T00:00:00.000Z","files":[{"bytes":949,"name":"governance/policy.json","sha256":"ecc617ae2edbddddecbc3580b509b6e2f218787238e883a348a575f278f1f662"},{"bytes":409,"name":"governance/revocations.json","sha256":"7dd89653b90b485f06e17990b064a5cb2d2d1e39e144f019f0ab164432d008b2"},{"bytes":410,"name":"invoice/invoice_claim.json","sha256":"b1904086d355019775a60a3ee8eb9d5a146319d0609226ba257d780708868ff7"},{"bytes":547,"name":"metering/metering_report.json","sha256":"e7535d0ba1b8e6628b17012d57423a2629792787e92a081ff08bdbf08d63072b"},{"bytes":864,"name":"payload/job_proof_bundle/attestation/bundle_head_attestation.json","sha256":"641947fd28044f926bae840ad343bb4d75d6be44b29e329098210f0af4c28a43"},{"bytes":515,"name":"payload/job_proof_bundle/events/events.jsonl","sha256":"1fbc8ef4a9d8a42efc02e2885b043578f3a0584d4054d98c3f06b1cfa276a126"},{"bytes":186,"name":"payload/job_proof_bundle/events/payload_material.jsonl","sha256":"338953ab5054bdc4a7d83c9ef1fef8d3c83ee78916f32c250636238208de62d3"},{"bytes":778,"name":"payload/job_proof_bundle/governance/global/events/events.jsonl","sha256":"a56f271f30f0c485a0cb80ab65f74b65fd438422d1f9d2e7e1664e5f028ce520"},{"bytes":449,"name":"payload/job_proof_bundle/governance/global/events/payload_material.jsonl","sha256":"1e2b95a0192f324d49a45c4378936d5a32c6548f44648d72ed79522186b0867f"},{"bytes":152,"name":"payload/job_proof_bundle/governance/global/snapshot.json","sha256":"4a5b0d84a0b96dd0fec4650d1f5483b8a4795d0c891595d730bf74a556f4368b"},{"bytes":951,"name":"payload/job_proof_bundle/governance/policy.json","sha256":"e88b6fdf8494a31264f18df85a4f2de96d69be1c03ddbfc901157a03cf02341c"},{"bytes":409,"name":"payload/job_proof_bundle/governance/revocations.json","sha256":"7dd89653b90b485f06e17990b064a5cb2d2d1e39e144f019f0ab164432d008b2"},{"bytes":0,"name":"payload/job_proof_bundle/governance/tenant/events/events.jsonl","sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},{"bytes":0,"name":"payload/job_proof_bundle/governance/tenant/events/payload_material.jsonl","sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},{"bytes":66,"name":"payload/job_proof_bundle/governance/tenant/snapshot.json","sha256":"353bc53464b75d5a61a810a29014b9a2fcdcdeb0762d18da745ef15765919400"},{"bytes":138,"name":"payload/job_proof_bundle/job/snapshot.json","sha256":"819c087bd8fc5a6fbf833ff13e31915433bc1687f32e8231bd6263718f31bab8"},{"bytes":470,"name":"payload/job_proof_bundle/keys/public_keys.json","sha256":"e88c404c67d245925a0c7e21d5381428b2ef3df69fd31041a39105c5ec7849eb"},{"bytes":1930,"name":"payload/job_proof_bundle/manifest.json","sha256":"844451c8a0efb43b28c5f4ea44dd291e908590fa00583d7d9cc6934c2143c7fb"},{"bytes":297,"name":"payload/job_proof_bundle/verify/report.json","sha256":"1f7725687929166e2258c0f68f4f50d5419a59a0ef490abd407fbcfc9a4123f8"},{"bytes":1312,"name":"payload/job_proof_bundle/verify/verification_report.json","sha256":"86c22381caf30735783418f603518c8f7301b53cb2e8f4e49326e1e1d46c9f06"},{"bytes":112,"name":"pricing/pricing_matrix.json","sha256":"c43476f394086b2f66ac1df090a303f32713547b64ecf29e83ac6762ddbc1fb3"},{"bytes":346,"name":"pricing/pricing_matrix_signatures.json","sha256":"25c1ebf3c5af800807a1fe1a9b824760099c5171765fb4ef8610cfb91d20564e"},{"bytes":611,"name":"settld.json","sha256":"ca76e5f8d036647fb0d8684b5b46044d9a160ecd0bb9935695abd2446f722341"}],"hashing":{"excludes":["verify/**"],"fileOrder":"path_asc","schemaVersion":"InvoiceBundleManifestHash.v1"},"invoiceId":"invoice_fixture_wrong_total","manifestHash":"d316addad7608e2a457ca50eb188429f9de43a639cfb323fcde1c962406e0878","protocol":"1.0","schemaVersion":"InvoiceBundleManifest.v1","tenantId":"tenant_fixture","type":"InvoiceBundle.v1"}
@@ -0,0 +1 @@
1
+ {"evidenceRefs":[{"path":"job/snapshot.json","sha256":"819c087bd8fc5a6fbf833ff13e31915433bc1687f32e8231bd6263718f31bab8"}],"generatedAt":"2026-02-02T00:00:00.000Z","invoiceId":"invoice_fixture_wrong_total","items":[{"code":"WORK_MINUTES","quantity":"10"}],"jobProof":{"embeddedPath":"payload/job_proof_bundle","headAttestationHash":"c70b62f9e28ac91fa07073c802495d1801921c0d01924a2538f981a7e18f8d5b","manifestHash":"6775ce8a23cb436fdd6e2809bf79d2b1ac05f76a820094342b0cc68f425ef9d8"},"schemaVersion":"MeteringReport.v1","tenantId":"tenant_fixture"}
@@ -0,0 +1 @@
1
+ {"attestationHash":"c70b62f9e28ac91fa07073c802495d1801921c0d01924a2538f981a7e18f8d5b","generatedAt":"2026-02-02T00:00:00.000Z","heads":{"governance":{"global":{"lastChainHash":"92b4cd341b48c58fc8dffea3d6bbc0f62f979965d9271339ced8b8f7bf258e60","lastEventId":"evt_gov_serverA_registered"},"tenant":{"lastChainHash":null,"lastEventId":null}},"job":{"lastChainHash":"e698a6e1d597a4be85d31bdac90a34a66b9d43886ad43f59c0cc4e77efdde78d","lastEventId":"evt_job_created"}},"kind":"JobProofBundle.v1","manifestHash":"6775ce8a23cb436fdd6e2809bf79d2b1ac05f76a820094342b0cc68f425ef9d8","schemaVersion":"BundleHeadAttestation.v1","scope":{"jobId":"job_fixture_1"},"signature":"WqNZduwUjQcSlBF7PnWoRyaBuyeD73eevVB3jz58Fa3xd6J+HT6ivilEdUMaATF4QxA+s2p4sMhJYrHeqKB3CQ==","signedAt":"2026-02-02T00:00:00.000Z","signerKeyId":"key_9ed38005b42d9364601ffab3","tenantId":"tenant_fixture"}
@@ -0,0 +1 @@
1
+ {"actor":{"id":"proxy","type":"system"},"at":"2026-02-02T00:00:00.000Z","chainHash":"e698a6e1d597a4be85d31bdac90a34a66b9d43886ad43f59c0cc4e77efdde78d","id":"evt_job_created","payload":{"jobId":"job_fixture_1"},"payloadHash":"6b46a068dfe3479d2f09f84ae0ed29bb7e2cd9e1ec4c17bccca1c1307a04c47c","prevChainHash":null,"signature":"ZmciBEg0pm549K4dpIE988oH5xwRDeimD9g73v5hHXKeGYa0RXZ3hFkJ6BzxCxODFDlUQzzyJkDkjKSpeOkvDg==","signerKeyId":"key_9ed38005b42d9364601ffab3","streamId":"job_fixture_1","type":"JOB_CREATED","v":1}
@@ -0,0 +1 @@
1
+ {"actor":{"id":"proxy","type":"system"},"at":"2026-02-02T00:00:00.000Z","id":"evt_job_created","payload":{"jobId":"job_fixture_1"},"streamId":"job_fixture_1","type":"JOB_CREATED","v":1}
@@ -0,0 +1 @@
1
+ {"actor":{"id":"proxy","type":"system"},"at":"2026-01-01T00:00:00.000Z","chainHash":"92b4cd341b48c58fc8dffea3d6bbc0f62f979965d9271339ced8b8f7bf258e60","id":"evt_gov_serverA_registered","payload":{"keyId":"key_9ed38005b42d9364601ffab3","publicKeyPem":"-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEAQ70D1FtwopWnvJeFsiKdThSP/9QADgSeaZYKip79KQI=\n-----END PUBLIC KEY-----\n","reason":"fixture","registeredAt":"2026-01-01T00:00:00.000Z","tenantId":"tenant_default"},"payloadHash":"d996dc5347a113a6050ed453e7b5feb2f1edb93a5ffb68d4fbca7b015336c61b","prevChainHash":null,"signature":"ovzEbrAqeEhQ7xrz/cIIor85ygkD7bgBvbWxKsQetxKkWjCBDoVUfmPn9UrqF/iNtIZcqBK9TA/SXrNk/VjHAg==","signerKeyId":"key_9ed38005b42d9364601ffab3","streamId":"governance","type":"SERVER_SIGNER_KEY_REGISTERED","v":1}
@@ -0,0 +1 @@
1
+ {"actor":{"id":"proxy","type":"system"},"at":"2026-01-01T00:00:00.000Z","id":"evt_gov_serverA_registered","payload":{"keyId":"key_9ed38005b42d9364601ffab3","publicKeyPem":"-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEAQ70D1FtwopWnvJeFsiKdThSP/9QADgSeaZYKip79KQI=\n-----END PUBLIC KEY-----\n","reason":"fixture","registeredAt":"2026-01-01T00:00:00.000Z","tenantId":"tenant_default"},"streamId":"governance","type":"SERVER_SIGNER_KEY_REGISTERED","v":1}
@@ -0,0 +1 @@
1
+ {"lastChainHash":"92b4cd341b48c58fc8dffea3d6bbc0f62f979965d9271339ced8b8f7bf258e60","lastEventId":"evt_gov_serverA_registered","streamId":"governance"}
@@ -0,0 +1 @@
1
+ {"algorithms":["ed25519"],"bundleHeadAttestationSigners":[{"allowedKeyIds":["key_9ed38005b42d9364601ffab3"],"allowedScopes":["global","tenant"],"requireGoverned":true,"requiredPurpose":"server","subjectType":"JobProofBundle.v1"}],"generatedAt":"2026-02-02T00:00:00.000Z","policyHash":"f8588a9eef597dd67d29035ff157b00a79bbf2d17056ce063e9a65a390d005d7","policyId":"governance_policy_default_v2","revocationList":{"path":"governance/revocations.json","sha256":"5c286871ea76001026b765f52296df51f76f4e040b537963fde671850684cf87"},"schemaVersion":"GovernancePolicy.v2","signature":"lxr9K5+X7/oVnIFATriFJW/+i96UUDXPP5ATFseAtqlSe/0juicaoad8U0kMT4Xks6xDHrLLOD/ASEm/DRcVDA==","signedAt":"2026-02-02T00:00:00.000Z","signerKeyId":"key_4bd1ee0813b265cb6670a1cc","verificationReportSigners":[{"allowedKeyIds":["key_9ed38005b42d9364601ffab3"],"allowedScopes":["global","tenant"],"requireGoverned":true,"requiredPurpose":"server","subjectType":"JobProofBundle.v1"}]}
@@ -0,0 +1 @@
1
+ {"generatedAt":"2026-02-02T00:00:00.000Z","listHash":"5c286871ea76001026b765f52296df51f76f4e040b537963fde671850684cf87","listId":"revocations_default_v1","revocations":[],"rotations":[],"schemaVersion":"RevocationList.v1","signature":"IG/Mwb9syG1HtzD7YwEM+eG4dPPhcIqy75SC3GjzoZZcepeWY/YpYVVzxxwBINkaFrr/mtUmq+s+Kizogs75Bw==","signedAt":"2026-02-02T00:00:00.000Z","signerKeyId":"key_4bd1ee0813b265cb6670a1cc"}
@@ -0,0 +1 @@
1
+ {"id":"job_fixture_1","lastChainHash":"e698a6e1d597a4be85d31bdac90a34a66b9d43886ad43f59c0cc4e77efdde78d","lastEventId":"evt_job_created"}
@@ -0,0 +1 @@
1
+ {"generatedAt":"2026-02-02T00:00:00.000Z","keys":[{"createdAt":null,"description":null,"keyId":"key_9ed38005b42d9364601ffab3","publicKeyPem":"-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEAQ70D1FtwopWnvJeFsiKdThSP/9QADgSeaZYKip79KQI=\n-----END PUBLIC KEY-----\n","purpose":"server","revokedAt":null,"rotatedAt":null,"status":null,"tenantId":"tenant_fixture","validFrom":null,"validTo":null}],"order":"keyId_asc","schemaVersion":"PublicKeys.v1","tenantId":"tenant_fixture"}
@@ -0,0 +1 @@
1
+ {"files":[{"bytes":515,"name":"events/events.jsonl","sha256":"1fbc8ef4a9d8a42efc02e2885b043578f3a0584d4054d98c3f06b1cfa276a126"},{"bytes":186,"name":"events/payload_material.jsonl","sha256":"338953ab5054bdc4a7d83c9ef1fef8d3c83ee78916f32c250636238208de62d3"},{"bytes":778,"name":"governance/global/events/events.jsonl","sha256":"a56f271f30f0c485a0cb80ab65f74b65fd438422d1f9d2e7e1664e5f028ce520"},{"bytes":449,"name":"governance/global/events/payload_material.jsonl","sha256":"1e2b95a0192f324d49a45c4378936d5a32c6548f44648d72ed79522186b0867f"},{"bytes":152,"name":"governance/global/snapshot.json","sha256":"4a5b0d84a0b96dd0fec4650d1f5483b8a4795d0c891595d730bf74a556f4368b"},{"bytes":951,"name":"governance/policy.json","sha256":"e88b6fdf8494a31264f18df85a4f2de96d69be1c03ddbfc901157a03cf02341c"},{"bytes":409,"name":"governance/revocations.json","sha256":"7dd89653b90b485f06e17990b064a5cb2d2d1e39e144f019f0ab164432d008b2"},{"bytes":0,"name":"governance/tenant/events/events.jsonl","sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},{"bytes":0,"name":"governance/tenant/events/payload_material.jsonl","sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},{"bytes":66,"name":"governance/tenant/snapshot.json","sha256":"353bc53464b75d5a61a810a29014b9a2fcdcdeb0762d18da745ef15765919400"},{"bytes":138,"name":"job/snapshot.json","sha256":"819c087bd8fc5a6fbf833ff13e31915433bc1687f32e8231bd6263718f31bab8"},{"bytes":470,"name":"keys/public_keys.json","sha256":"e88c404c67d245925a0c7e21d5381428b2ef3df69fd31041a39105c5ec7849eb"}],"generatedAt":"2026-02-02T00:00:00.000Z","hashing":{"excludes":["verify/**"],"fileOrder":"path_asc","schemaVersion":"ProofBundleManifestHash.v1"},"kind":"JobProofBundle.v1","manifestHash":"6775ce8a23cb436fdd6e2809bf79d2b1ac05f76a820094342b0cc68f425ef9d8","schemaVersion":"ProofBundleManifest.v1","scope":{"jobId":"job_fixture_1"},"tenantId":"tenant_fixture"}
@@ -0,0 +1 @@
1
+ {"artifacts":[],"compiledPolicies":[],"eventChain":{"ok":true},"generatedAt":"2026-02-02T00:00:00.000Z","kind":"JobProofBundle.v1","schemaVersion":"ProofBundleVerifyReport.v1","scope":{"jobId":"job_fixture_1"},"settlementProofRefs":{"checked":0,"errors":[],"ok":true},"tenantId":"tenant_fixture"}
@@ -0,0 +1 @@
1
+ {"bundleHeadAttestation":{"attestationHash":"c70b62f9e28ac91fa07073c802495d1801921c0d01924a2538f981a7e18f8d5b","manifestHash":"6775ce8a23cb436fdd6e2809bf79d2b1ac05f76a820094342b0cc68f425ef9d8","schemaVersion":"BundleHeadAttestation.v1","signedAt":"2026-02-02T00:00:00.000Z","signerKeyId":"key_9ed38005b42d9364601ffab3"},"profile":"strict","reportHash":"7bfcc64af8ec9c5df4d5b87150cab3954d5748deb725be672a0cd464c20b3b29","schemaVersion":"VerificationReport.v1","signature":"4QIO0WgDiudPESt/mGSFC7zXcU7RJnF4MftOQHTB7BvtVenQ7SubgBkl1Kc8jj+GPQdtGbIxWZQRR5pL9OrKBQ==","signedAt":"2026-02-02T00:00:00.000Z","signer":{"governanceEventRef":{"chainHash":"92b4cd341b48c58fc8dffea3d6bbc0f62f979965d9271339ced8b8f7bf258e60","eventId":"evt_gov_serverA_registered","payloadHash":"d996dc5347a113a6050ed453e7b5feb2f1edb93a5ffb68d4fbca7b015336c61b","type":"SERVER_SIGNER_KEY_REGISTERED"},"keyId":"key_9ed38005b42d9364601ffab3","scope":"global"},"signerKeyId":"key_9ed38005b42d9364601ffab3","subject":{"createdAt":"2026-02-02T00:00:00.000Z","manifestHash":"6775ce8a23cb436fdd6e2809bf79d2b1ac05f76a820094342b0cc68f425ef9d8","scope":{"jobId":"job_fixture_1"},"tenantId":"tenant_fixture","type":"JobProofBundle.v1"},"tool":{"commit":"0123456789abcdef0123456789abcdef01234567","name":"settld","version":"0.0.0-fixture"},"warnings":[]}
@@ -0,0 +1 @@
1
+ {"currency":"USD","prices":[{"code":"WORK_MINUTES","unitPriceCents":"150"}],"schemaVersion":"PricingMatrix.v1"}
@@ -0,0 +1 @@
1
+ {"pricingMatrixCanonicalHash":"0fdad09bbc49efc35602932ef73950509de0f4f929bac0af35efeeb4d138c128","schemaVersion":"PricingMatrixSignatures.v2","signatures":[{"signature":"BzQbDsMHYcKavlJznp5nc7++boaRGMzFrfTPst79HrTMp7cIfL5foPq7zYzvOc7QsIqyycFCi/WOzIqha6/KAg==","signedAt":"2026-02-02T00:00:00.000Z","signerKeyId":"key_4bd1ee0813b265cb6670a1cc"}]}
@@ -0,0 +1 @@
1
+ {"createdAt":"2026-02-02T00:00:00.000Z","inputs":{"invoiceClaimHash":"b1904086d355019775a60a3ee8eb9d5a146319d0609226ba257d780708868ff7","jobProofBundleHash":"6775ce8a23cb436fdd6e2809bf79d2b1ac05f76a820094342b0cc68f425ef9d8","jobProofHeadAttestationHash":"c70b62f9e28ac91fa07073c802495d1801921c0d01924a2538f981a7e18f8d5b","meteringReportHash":"e7535d0ba1b8e6628b17012d57423a2629792787e92a081ff08bdbf08d63072b","pricingMatrixHash":"c43476f394086b2f66ac1df090a303f32713547b64ecf29e83ac6762ddbc1fb3"},"invoiceId":"invoice_fixture_wrong_total","protocol":"1.0","tenantId":"tenant_fixture","type":"InvoiceBundle.v1"}
@@ -0,0 +1 @@
1
+ {"bundleHeadAttestation":{"attestationHash":"69989d87ba1fb78c596f9fd034626d5f74d0c0b7ba24ff46e22e3fb4e3de1a2b","manifestHash":"d316addad7608e2a457ca50eb188429f9de43a639cfb323fcde1c962406e0878","schemaVersion":"BundleHeadAttestation.v1","signedAt":"2026-02-02T00:00:00.000Z","signerKeyId":"key_9ed38005b42d9364601ffab3"},"inputs":{"invoiceClaimHash":"b1904086d355019775a60a3ee8eb9d5a146319d0609226ba257d780708868ff7","jobProofBundleHash":"6775ce8a23cb436fdd6e2809bf79d2b1ac05f76a820094342b0cc68f425ef9d8","jobProofHeadAttestationHash":"c70b62f9e28ac91fa07073c802495d1801921c0d01924a2538f981a7e18f8d5b","meteringReportHash":"e7535d0ba1b8e6628b17012d57423a2629792787e92a081ff08bdbf08d63072b","pricingMatrixHash":"c43476f394086b2f66ac1df090a303f32713547b64ecf29e83ac6762ddbc1fb3"},"policy":null,"profile":"strict","reportHash":"f6e04560a8d2403e4f6291b165ff18c212771f97cc8fdf402b33a6720eac93e9","schemaVersion":"VerificationReport.v1","signature":"qd5/d2acHYbeJynl2JOoqIjXdZXTptjKznwRuRMv86hQuNzDVhQIfh76dWfy5OLScoZMDU5SXvlr6ylTf++sDw==","signedAt":"2026-02-02T00:00:00.000Z","signer":{"governanceEventRef":null,"keyId":"key_9ed38005b42d9364601ffab3","scope":"global"},"signerKeyId":"key_9ed38005b42d9364601ffab3","subject":{"createdAt":"2026-02-02T00:00:00.000Z","invoiceId":"invoice_fixture_wrong_total","manifestHash":"d316addad7608e2a457ca50eb188429f9de43a639cfb323fcde1c962406e0878","protocol":"1.0","tenantId":"tenant_fixture","type":"InvoiceBundle.v1"},"tool":{"commit":"0123456789abcdef0123456789abcdef01234567","name":"settld","version":"0.0.0-fixture"},"warnings":[]}
@@ -0,0 +1 @@
1
+ {"createdAt":"2026-02-02T00:00:00.000Z","inputs":{"invoiceBundleCreatedAt":"2026-02-02T00:00:00.000Z","invoiceBundleHeadAttestationHash":"69989d87ba1fb78c596f9fd034626d5f74d0c0b7ba24ff46e22e3fb4e3de1a2b","invoiceBundleManifestHash":"d316addad7608e2a457ca50eb188429f9de43a639cfb323fcde1c962406e0878","invoiceBundleTenantId":"tenant_fixture","invoiceBundleType":"InvoiceBundle.v1","invoiceClaimHash":"b1904086d355019775a60a3ee8eb9d5a146319d0609226ba257d780708868ff7","jobProofBundleHash":"6775ce8a23cb436fdd6e2809bf79d2b1ac05f76a820094342b0cc68f425ef9d8","jobProofHeadAttestationHash":"c70b62f9e28ac91fa07073c802495d1801921c0d01924a2538f981a7e18f8d5b","meteringReportHash":"e7535d0ba1b8e6628b17012d57423a2629792787e92a081ff08bdbf08d63072b","pricingMatrixHash":"c43476f394086b2f66ac1df090a303f32713547b64ecf29e83ac6762ddbc1fb3"},"invoiceBundle":{"embeddedPath":"payload/invoice_bundle","headAttestationHash":"69989d87ba1fb78c596f9fd034626d5f74d0c0b7ba24ff46e22e3fb4e3de1a2b","manifestHash":"d316addad7608e2a457ca50eb188429f9de43a639cfb323fcde1c962406e0878"},"invoiceId":"invoice_fixture_wrong_total","protocol":"1.0","tenantId":"tenant_fixture","type":"ClosePack.v1"}
@@ -0,0 +1 @@
1
+ {"generatedAt":"2026-02-02T00:00:00.000Z","rules":[],"schemaVersion":"SlaDefinition.v1"}
@@ -0,0 +1 @@
1
+ {"generatedAt":"2026-02-02T00:00:00.000Z","overallStatus":"ok","results":[],"schemaVersion":"SlaEvaluation.v1"}
@@ -0,0 +1 @@
1
+ {"bundleHeadAttestation":{"attestationHash":"550ab12d8aef353d28391396d534f0c72dcd4bd8588e2b6f252f3afdbc2e5224","manifestHash":"d98154337b3e035240ece3255552c19d377bcdb0b2e13f27a6203ded86e8903d","schemaVersion":"BundleHeadAttestation.v1","signedAt":"2026-02-02T00:00:00.000Z","signerKeyId":"key_9ed38005b42d9364601ffab3"},"inputs":{"invoiceBundleCreatedAt":"2026-02-02T00:00:00.000Z","invoiceBundleHeadAttestationHash":"69989d87ba1fb78c596f9fd034626d5f74d0c0b7ba24ff46e22e3fb4e3de1a2b","invoiceBundleManifestHash":"d316addad7608e2a457ca50eb188429f9de43a639cfb323fcde1c962406e0878","invoiceBundleTenantId":"tenant_fixture","invoiceBundleType":"InvoiceBundle.v1","invoiceClaimHash":"b1904086d355019775a60a3ee8eb9d5a146319d0609226ba257d780708868ff7","jobProofBundleHash":"6775ce8a23cb436fdd6e2809bf79d2b1ac05f76a820094342b0cc68f425ef9d8","jobProofHeadAttestationHash":"c70b62f9e28ac91fa07073c802495d1801921c0d01924a2538f981a7e18f8d5b","meteringReportHash":"e7535d0ba1b8e6628b17012d57423a2629792787e92a081ff08bdbf08d63072b","pricingMatrixHash":"c43476f394086b2f66ac1df090a303f32713547b64ecf29e83ac6762ddbc1fb3"},"policy":null,"profile":"strict","reportHash":"cf90a91cbc3d69c4b3bb81035c93b4cf224f125a178bae459852f79fba2a60da","schemaVersion":"VerificationReport.v1","signature":"i9VPPvILEom7mJG70IreW0Vo+SSqxmtzClD8Od6U5TQ5cdDH/ZCetAO73DVjWVR1f76BNYfNoBEF6oCrzDdADA==","signedAt":"2026-02-02T00:00:00.000Z","signer":{"governanceEventRef":null,"keyId":"key_9ed38005b42d9364601ffab3","scope":"global"},"signerKeyId":"key_9ed38005b42d9364601ffab3","subject":{"createdAt":"2026-02-02T00:00:00.000Z","invoiceId":"invoice_fixture_wrong_total","manifestHash":"d98154337b3e035240ece3255552c19d377bcdb0b2e13f27a6203ded86e8903d","protocol":"1.0","scope":{"invoiceId":"invoice_fixture_wrong_total"},"tenantId":"tenant_fixture","type":"ClosePack.v1"},"tool":{"commit":"0123456789abcdef0123456789abcdef01234567","name":"settld","version":"0.0.0-fixture"},"warnings":[]}
@@ -0,0 +1 @@
1
+ {"criteria":[{"criterionId":"proof_status_pass","expectedStatus":"PASS","kind":"PROOF_STATUS_EQUALS"},{"criterionId":"sla_overall_ok","kind":"SLA_OVERALL_OK"}],"generatedAt":"2026-02-02T00:00:00.000Z","schemaVersion":"AcceptanceCriteria.v1"}
@@ -0,0 +1 @@
1
+ {"generatedAt":"2026-02-02T00:00:00.000Z","overallStatus":"unknown","results":[{"criterionId":"proof_status_pass","detail":{"actualStatus":null,"expectedStatus":"PASS"},"kind":"PROOF_STATUS_EQUALS","status":"unknown"},{"criterionId":"sla_overall_ok","detail":{"overallStatus":"ok"},"kind":"SLA_OVERALL_OK","status":"ok"}],"schemaVersion":"AcceptanceEvaluation.v1"}
@@ -0,0 +1 @@
1
+ {"attestationHash":"eaf7436e7aef6529f7d95031ffc7f741ed68a65d8d2b5e3048f9593076ae6652","generatedAt":"2026-02-02T00:00:00.000Z","heads":{"invoiceBundle":{"attestationHash":"8b15727b811d865a5187aa9da01066a3271dd6465f6c18e6c8d1b59c0a955755","embeddedPath":"payload/invoice_bundle","manifestHash":"7b348ab1bb5a84f7899b718a08bd7827bb6b7b213b97ef74142061270fb2233a"}},"kind":"ClosePack.v1","manifestHash":"0821f3de3cf3bbe659a61a0c14ca38fc82b22239f039e908a9e4b36e4f27744a","schemaVersion":"BundleHeadAttestation.v1","scope":{"invoiceId":"invoice_fixture_1"},"signature":"3O1hc/zcj6oVOLzrqUSKdIWSfwLu8YpC30j599g4EZHgMPtIR9PAoA7Llg0/pU+ph4XjENgmnRJ5QmKDYVJXAQ==","signedAt":"2026-02-02T00:00:00.000Z","signerKeyId":"key_9ed38005b42d9364601ffab3","tenantId":"tenant_fixture"}
@@ -0,0 +1 @@
1
+ {"generatedAt":"2026-02-02T00:00:00.000Z","items":[{"at":null,"contentType":null,"eventId":null,"evidenceId":null,"evidenceRefHash":null,"key":"metering:job/snapshot.json","kind":null,"path":"job/snapshot.json","sha256":"819c087bd8fc5a6fbf833ff13e31915433bc1687f32e8231bd6263718f31bab8","sizeBytes":null,"source":"metering_evidence_ref"}],"jobProof":{"embeddedPath":"payload/invoice_bundle/payload/job_proof_bundle","headAttestationHash":"c70b62f9e28ac91fa07073c802495d1801921c0d01924a2538f981a7e18f8d5b","manifestHash":"6775ce8a23cb436fdd6e2809bf79d2b1ac05f76a820094342b0cc68f425ef9d8"},"schemaVersion":"EvidenceIndex.v1"}
@@ -0,0 +1 @@
1
+ {"algorithms":["ed25519"],"bundleHeadAttestationSigners":[{"allowedKeyIds":["key_9ed38005b42d9364601ffab3"],"allowedScopes":["global","tenant"],"requireGoverned":true,"requiredPurpose":"server","subjectType":"ClosePack.v1"}],"generatedAt":"2026-02-02T00:00:00.000Z","policyHash":"ae01f50ce40817fb8cc57ebdee290fc0c8464da95c665c2e99b358d7613d8b95","policyId":"governance_policy_default_v2","revocationList":{"path":"governance/revocations.json","sha256":"5c286871ea76001026b765f52296df51f76f4e040b537963fde671850684cf87"},"schemaVersion":"GovernancePolicy.v2","signature":"m7oXX//xJ7P0X6mPDeh/rfDRRN317l1llgkBkLn7zMjH+1c66HkTsRFn1D4fFPdKQOSG28HNgsiZBGDY+nrUDQ==","signedAt":"2026-02-02T00:00:00.000Z","signerKeyId":"key_4bd1ee0813b265cb6670a1cc","verificationReportSigners":[{"allowedKeyIds":["key_9ed38005b42d9364601ffab3"],"allowedScopes":["global","tenant"],"requireGoverned":true,"requiredPurpose":"server","subjectType":"ClosePack.v1"}]}
@@ -0,0 +1 @@
1
+ {"generatedAt":"2026-02-02T00:00:00.000Z","listHash":"5c286871ea76001026b765f52296df51f76f4e040b537963fde671850684cf87","listId":"revocations_default_v1","revocations":[],"rotations":[],"schemaVersion":"RevocationList.v1","signature":"IG/Mwb9syG1HtzD7YwEM+eG4dPPhcIqy75SC3GjzoZZcepeWY/YpYVVzxxwBINkaFrr/mtUmq+s+Kizogs75Bw==","signedAt":"2026-02-02T00:00:00.000Z","signerKeyId":"key_4bd1ee0813b265cb6670a1cc"}
@@ -0,0 +1 @@
1
+ {"createdAt":"2026-02-02T00:00:00.000Z","files":[{"bytes":242,"name":"acceptance/acceptance_criteria.json","sha256":"0e1d1848479b5ffe5bb396b559b8621ece765de313c14e7de1b5150255f9a078"},{"bytes":365,"name":"acceptance/acceptance_evaluation.json","sha256":"4f89cd1e18b51dc535954d844aaeeb9f5cd10a04002cb43ea489be6cfabf757e"},{"bytes":624,"name":"evidence/evidence_index.json","sha256":"a7dca7b4b66affa9b7666030611574f941848de0df55dd5295175eb97a15eb0d"},{"bytes":941,"name":"governance/policy.json","sha256":"fdf83afee673d554a43cb6a7cc8e7dd2f09f6ca5a6dfea019fe0cce9bc3db515"},{"bytes":409,"name":"governance/revocations.json","sha256":"7dd89653b90b485f06e17990b064a5cb2d2d1e39e144f019f0ab164432d008b2"},{"bytes":725,"name":"payload/invoice_bundle/attestation/bundle_head_attestation.json","sha256":"4e31ad53caaa0650f98d49821ee16e3a5ebc11b7f19f4b58003294827d26893d"},{"bytes":949,"name":"payload/invoice_bundle/governance/policy.json","sha256":"ecc617ae2edbddddecbc3580b509b6e2f218787238e883a348a575f278f1f662"},{"bytes":409,"name":"payload/invoice_bundle/governance/revocations.json","sha256":"7dd89653b90b485f06e17990b064a5cb2d2d1e39e144f019f0ab164432d008b2"},{"bytes":519,"name":"payload/invoice_bundle/invoice/invoice_claim.json","sha256":"fe64b5bee3e55bfdf61628896a1e92df5b4c9a48973e6ffd594e7448d250537f"},{"bytes":3730,"name":"payload/invoice_bundle/manifest.json","sha256":"9027d539a4682ecf911f523ddfa9f09e90ddc71c8c8f4d5b6fdcf000ef370877"},{"bytes":537,"name":"payload/invoice_bundle/metering/metering_report.json","sha256":"1f19f5309e33a4c133fd60fae5dbe10f50b9a12d9541fc8bb975eff432c72c06"},{"bytes":864,"name":"payload/invoice_bundle/payload/job_proof_bundle/attestation/bundle_head_attestation.json","sha256":"641947fd28044f926bae840ad343bb4d75d6be44b29e329098210f0af4c28a43"},{"bytes":515,"name":"payload/invoice_bundle/payload/job_proof_bundle/events/events.jsonl","sha256":"1fbc8ef4a9d8a42efc02e2885b043578f3a0584d4054d98c3f06b1cfa276a126"},{"bytes":186,"name":"payload/invoice_bundle/payload/job_proof_bundle/events/payload_material.jsonl","sha256":"338953ab5054bdc4a7d83c9ef1fef8d3c83ee78916f32c250636238208de62d3"},{"bytes":778,"name":"payload/invoice_bundle/payload/job_proof_bundle/governance/global/events/events.jsonl","sha256":"a56f271f30f0c485a0cb80ab65f74b65fd438422d1f9d2e7e1664e5f028ce520"},{"bytes":449,"name":"payload/invoice_bundle/payload/job_proof_bundle/governance/global/events/payload_material.jsonl","sha256":"1e2b95a0192f324d49a45c4378936d5a32c6548f44648d72ed79522186b0867f"},{"bytes":152,"name":"payload/invoice_bundle/payload/job_proof_bundle/governance/global/snapshot.json","sha256":"4a5b0d84a0b96dd0fec4650d1f5483b8a4795d0c891595d730bf74a556f4368b"},{"bytes":951,"name":"payload/invoice_bundle/payload/job_proof_bundle/governance/policy.json","sha256":"e88b6fdf8494a31264f18df85a4f2de96d69be1c03ddbfc901157a03cf02341c"},{"bytes":409,"name":"payload/invoice_bundle/payload/job_proof_bundle/governance/revocations.json","sha256":"7dd89653b90b485f06e17990b064a5cb2d2d1e39e144f019f0ab164432d008b2"},{"bytes":0,"name":"payload/invoice_bundle/payload/job_proof_bundle/governance/tenant/events/events.jsonl","sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},{"bytes":0,"name":"payload/invoice_bundle/payload/job_proof_bundle/governance/tenant/events/payload_material.jsonl","sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},{"bytes":66,"name":"payload/invoice_bundle/payload/job_proof_bundle/governance/tenant/snapshot.json","sha256":"353bc53464b75d5a61a810a29014b9a2fcdcdeb0762d18da745ef15765919400"},{"bytes":138,"name":"payload/invoice_bundle/payload/job_proof_bundle/job/snapshot.json","sha256":"819c087bd8fc5a6fbf833ff13e31915433bc1687f32e8231bd6263718f31bab8"},{"bytes":470,"name":"payload/invoice_bundle/payload/job_proof_bundle/keys/public_keys.json","sha256":"e88c404c67d245925a0c7e21d5381428b2ef3df69fd31041a39105c5ec7849eb"},{"bytes":1930,"name":"payload/invoice_bundle/payload/job_proof_bundle/manifest.json","sha256":"844451c8a0efb43b28c5f4ea44dd291e908590fa00583d7d9cc6934c2143c7fb"},{"bytes":297,"name":"payload/invoice_bundle/payload/job_proof_bundle/verify/report.json","sha256":"1f7725687929166e2258c0f68f4f50d5419a59a0ef490abd407fbcfc9a4123f8"},{"bytes":1312,"name":"payload/invoice_bundle/payload/job_proof_bundle/verify/verification_report.json","sha256":"86c22381caf30735783418f603518c8f7301b53cb2e8f4e49326e1e1d46c9f06"},{"bytes":112,"name":"payload/invoice_bundle/pricing/pricing_matrix.json","sha256":"c43476f394086b2f66ac1df090a303f32713547b64ecf29e83ac6762ddbc1fb3"},{"bytes":346,"name":"payload/invoice_bundle/pricing/pricing_matrix_signatures.json","sha256":"25c1ebf3c5af800807a1fe1a9b824760099c5171765fb4ef8610cfb91d20564e"},{"bytes":601,"name":"payload/invoice_bundle/settld.json","sha256":"b6033ab19043026b8c5df1c41ce33446088edebc96a0c1cf564ab3d4484b79af"},{"bytes":1563,"name":"payload/invoice_bundle/verify/verification_report.json","sha256":"d54a80c8a8441477e2cf04d814cc9f5291722c170f92a8edce6d69e43b685c1d"},{"bytes":1155,"name":"settld.json","sha256":"3859459a2ee4b6773dcc2751e90951cdbf4060f5a284bef085d4f0f71997fd74"},{"bytes":89,"name":"sla/sla_definition.json","sha256":"09cede8efe384f99669edcd12d03a2c912f6b58018490641171de68bd2ada930"},{"bytes":112,"name":"sla/sla_evaluation.json","sha256":"2aab51475a2ea4b9792c3bbbf09b5ae2fa0386cb6da1ce039d86fff793be1f98"}],"hashing":{"excludes":["verify/**"],"fileOrder":"path_asc","schemaVersion":"ClosePackManifestHash.v1"},"invoiceId":"invoice_fixture_1","manifestHash":"0821f3de3cf3bbe659a61a0c14ca38fc82b22239f039e908a9e4b36e4f27744a","protocol":"1.0","schemaVersion":"ClosePackManifest.v1","tenantId":"tenant_fixture","type":"ClosePack.v1"}
@@ -0,0 +1 @@
1
+ {"attestationHash":"8b15727b811d865a5187aa9da01066a3271dd6465f6c18e6c8d1b59c0a955755","generatedAt":"2026-02-02T00:00:00.000Z","heads":{"jobProof":{"attestationHash":"c70b62f9e28ac91fa07073c802495d1801921c0d01924a2538f981a7e18f8d5b","manifestHash":"6775ce8a23cb436fdd6e2809bf79d2b1ac05f76a820094342b0cc68f425ef9d8"}},"kind":"InvoiceBundle.v1","manifestHash":"7b348ab1bb5a84f7899b718a08bd7827bb6b7b213b97ef74142061270fb2233a","schemaVersion":"BundleHeadAttestation.v1","scope":{"invoiceId":"invoice_fixture_1"},"signature":"GlfGo5NvhA07IfuL/mqQotiSoZes9gtvy+HF/eL1cY/Kim46aamjw/gmGzODcN0zvZ4cuzYW4UlpjZn1SUR0CQ==","signedAt":"2026-02-02T00:00:00.000Z","signerKeyId":"key_9ed38005b42d9364601ffab3","tenantId":"tenant_fixture"}
@@ -0,0 +1 @@
1
+ {"algorithms":["ed25519"],"bundleHeadAttestationSigners":[{"allowedKeyIds":["key_9ed38005b42d9364601ffab3"],"allowedScopes":["global","tenant"],"requireGoverned":true,"requiredPurpose":"server","subjectType":"InvoiceBundle.v1"}],"generatedAt":"2026-02-02T00:00:00.000Z","policyHash":"0c0af0e6cc728d3b1eb7489c7fdcedd20602fd3adc69477357007f7150019935","policyId":"governance_policy_default_v2","revocationList":{"path":"governance/revocations.json","sha256":"5c286871ea76001026b765f52296df51f76f4e040b537963fde671850684cf87"},"schemaVersion":"GovernancePolicy.v2","signature":"aCG+XrKnp3ERKrAPR2VQ4P5ORcRKK5GhImmm9b/nNNpx3SpGJP9PlOMbyBocv05t8CWsiNa/YyCR6+YRTugpDQ==","signedAt":"2026-02-02T00:00:00.000Z","signerKeyId":"key_4bd1ee0813b265cb6670a1cc","verificationReportSigners":[{"allowedKeyIds":["key_9ed38005b42d9364601ffab3"],"allowedScopes":["global","tenant"],"requireGoverned":true,"requiredPurpose":"server","subjectType":"InvoiceBundle.v1"}]}