@haystackeditor/cli 0.25.1 → 0.26.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 +39 -455
- package/dist/capture/app-config.js +25 -1
- package/dist/commands/capture-brief.js +41 -32
- package/dist/commands/feedback.js +66 -0
- package/dist/commands/init-telemetry.js +53 -7
- package/dist/commands/init.js +7 -2
- package/dist/commands/lockfile-pin.js +307 -0
- package/dist/commands/verify.js +68 -13
- package/dist/index.js +27 -923
- package/dist/schema.js +4 -10
- package/dist/utils/haystack-api.js +0 -36
- package/package.json +1 -5
- package/schemas/feedback.v1.json +13 -0
- package/schemas/pre-verify.v2.json +240 -0
- package/schemas/verify-raw.v1.json +1132 -0
- package/schemas/verify.v2.json +655 -0
- package/dist/assets/hooks/agent-context/detect.ts +0 -316
- package/dist/assets/hooks/agent-context/format.ts +0 -100
- package/dist/assets/hooks/agent-context/index.ts +0 -41
- package/dist/assets/hooks/agent-context/parsers/claude.ts +0 -262
- package/dist/assets/hooks/agent-context/parsers/codex.ts +0 -416
- package/dist/assets/hooks/agent-context/parsers/gemini.ts +0 -155
- package/dist/assets/hooks/agent-context/parsers/opencode.ts +0 -174
- package/dist/assets/hooks/agent-context/tsconfig.json +0 -14
- package/dist/assets/hooks/agent-context/types.ts +0 -58
- package/dist/assets/hooks/llm-rules-template.md +0 -59
- package/dist/assets/hooks/package-lock.json +0 -598
- package/dist/assets/hooks/package.json +0 -12
- package/dist/assets/hooks/scripts/commit-msg.sh +0 -5
- package/dist/assets/hooks/scripts/post-commit.sh +0 -5
- package/dist/assets/hooks/scripts/pre-commit.sh +0 -175
- package/dist/assets/hooks/scripts/pre-push.sh +0 -25
- package/dist/assets/hooks/scripts/prepare-commit-msg.sh +0 -5
- package/dist/assets/hooks/truncation-checker/ast-analyzer.ts +0 -528
- package/dist/assets/hooks/truncation-checker/index.ts +0 -595
- package/dist/assets/hooks/truncation-checker/tsconfig.json +0 -13
- package/dist/assets/skills/map-cloud-verifier-universe/SKILL.md +0 -2051
- package/dist/assets/skills/map-cloud-verifier-universe/agents/openai.yaml +0 -4
- package/dist/assets/skills/map-cloud-verifier-universe/references/output-contract.md +0 -3411
- package/dist/assets/skills/map-your-system.md +0 -143
- package/dist/assets/skills/submit.md +0 -200
- package/dist/commands/ask.js +0 -20
- package/dist/commands/cloud-verifier-behaviors.js +0 -218
- package/dist/commands/cloud-verifier-data-store-census.js +0 -539
- package/dist/commands/cloud-verifier-data-store-drift.js +0 -158
- package/dist/commands/cloud-verifier-identity-census.js +0 -4060
- package/dist/commands/cloud-verifier-materialization.js +0 -704
- package/dist/commands/cloud-verifier-pascal-selector-census.js +0 -1382
- package/dist/commands/cloud-verifier-python-manifest-selector-census.js +0 -2015
- package/dist/commands/cloud-verifier-specialized-operational-census.js +0 -11432
- package/dist/commands/cloud-verifier-universe.js +0 -10178
- package/dist/commands/config.js +0 -549
- package/dist/commands/design-verify.js +0 -311
- package/dist/commands/dismiss.js +0 -159
- package/dist/commands/hooks.js +0 -226
- package/dist/commands/inbox.js +0 -137
- package/dist/commands/mcp.js +0 -201
- package/dist/commands/policy.js +0 -371
- package/dist/commands/pr-status.js +0 -207
- package/dist/commands/pr.js +0 -105
- package/dist/commands/prepare-universe-review.js +0 -1092
- package/dist/commands/production-source-deny-policy.js +0 -100
- package/dist/commands/request-review.js +0 -74
- package/dist/commands/review.js +0 -191
- package/dist/commands/rules.js +0 -98
- package/dist/commands/scaffold-provisional-universe.js +0 -806
- package/dist/commands/setup.js +0 -1170
- package/dist/commands/skills.js +0 -447
- package/dist/commands/submit.js +0 -745
- package/dist/commands/system-map.js +0 -228
- package/dist/commands/triage.js +0 -598
- package/dist/commands/webhooks.js +0 -241
- package/dist/states.js +0 -46
- package/dist/tools/detect.js +0 -832
- package/dist/triage/astra.js +0 -202
- package/dist/triage/prompts.js +0 -188
- package/dist/triage/runner.js +0 -200
- package/dist/triage/types.js +0 -7
- package/dist/utils/action-output.js +0 -26
- package/dist/utils/analysis-api.js +0 -416
- package/dist/utils/design-verifier-api.js +0 -294
- package/dist/utils/design-verifier-history.js +0 -79
- package/dist/utils/design-verifier-result.js +0 -424
- package/dist/utils/github-api.js +0 -324
- package/dist/utils/pending-state.js +0 -86
- package/dist/utils/pr-ref.js +0 -56
- package/dist/utils/prompter.js +0 -328
- package/schemas/action.v1.json +0 -22
- package/schemas/ask.v1.json +0 -40
- package/schemas/inbox.v1.json +0 -27
- package/schemas/pr-status.v1.json +0 -61
- package/schemas/pr.v1.json +0 -97
- package/schemas/pr.v3.json +0 -45
- package/schemas/setup.v1.json +0 -75
- package/schemas/submit.v1.json +0 -90
- package/schemas/triage.v1.json +0 -103
- package/schemas/triage.v2.json +0 -64
|
@@ -1,3411 +0,0 @@
|
|
|
1
|
-
# Cloud Verifier universe output contract
|
|
2
|
-
|
|
3
|
-
Use this contract for the four files under `.haystack/cloud-verifier/`. Keep
|
|
4
|
-
records small and evidence-backed. Never store credentials, raw provider
|
|
5
|
-
resource IDs, ARNs, connection strings, or secret values.
|
|
6
|
-
|
|
7
|
-
The agent reads the repository and nothing else. Haystack builds and operates
|
|
8
|
-
the replicas, under access the customer grants it directly, and that access is
|
|
9
|
-
never routed through this skill. Production IAM roles, provider credentials,
|
|
10
|
-
deletion handles, production mutation APIs, and direct control-plane
|
|
11
|
-
connectivity are never requested here and never recorded here.
|
|
12
|
-
|
|
13
|
-
Haystack's own drivers use raw provider IDs internally, and the bounded
|
|
14
|
-
`CustomerReplicaPlan` and `GoldenReplicaDescriptor` protocol may carry exact
|
|
15
|
-
stable source and replica identities for alias and isolation validation. Those
|
|
16
|
-
are transient protocol data. Checked-in artifacts use opaque catalog handles and
|
|
17
|
-
never contain raw provider IDs or production endpoints. Later verifier execution
|
|
18
|
-
receives replica identities and short-lived replica-only lease references.
|
|
19
|
-
|
|
20
|
-
This document describes validator contract revision `39`. Each artifact is
|
|
21
|
-
limited to 33554432 UTF-8 bytes. YAML aliases are bounded, and documents deeper
|
|
22
|
-
than 64 collection levels, containing more than 500000 parsed nodes, or
|
|
23
|
-
forming an alias cycle are invalid.
|
|
24
|
-
|
|
25
|
-
## Contents
|
|
26
|
-
|
|
27
|
-
- [Stable identity and updates](#stable-identity-and-updates)
|
|
28
|
-
- [Authority boundary](#authority-boundary)
|
|
29
|
-
- [`universe.yml`](#universeyml)
|
|
30
|
-
- [`behaviors.yml`](#behaviorsyml)
|
|
31
|
-
- [Scope and production authority](#scope-and-production-authority)
|
|
32
|
-
- [Artifacts and exact source](#artifacts-and-exact-source)
|
|
33
|
-
- [Prepared state and hot launch](#prepared-state-and-hot-launch)
|
|
34
|
-
- [Resources and reproduction](#resources-and-reproduction)
|
|
35
|
-
- [`evidence.yml`](#evidenceyml)
|
|
36
|
-
- [`review.yml`](#reviewyml)
|
|
37
|
-
|
|
38
|
-
## Stable identity and updates
|
|
39
|
-
|
|
40
|
-
- Use lowercase kebab-case IDs unique within the application.
|
|
41
|
-
- Preserve an ID when the same logical object evolves.
|
|
42
|
-
- Link records only by exact ID. Never join or deduplicate by free text.
|
|
43
|
-
- Preserve roles, deployment profiles, logical databases, buckets, topics,
|
|
44
|
-
streams, queues, consumer groups, and keyspaces as structured identities.
|
|
45
|
-
- Merge records only when authoritative evidence proves the same structured
|
|
46
|
-
logical identity. Physical co-location is not a logical join.
|
|
47
|
-
- Preserve separately keyed logical databases, schemas, queues, streams,
|
|
48
|
-
buckets, namespaces, installed material, generated outputs, and persisted
|
|
49
|
-
identities as separate resources. They may share a `physical_binding_id`,
|
|
50
|
-
`state_policy.action`, consistency group, and one materialization action
|
|
51
|
-
without being collapsed. Do not separately record unaddressed physical
|
|
52
|
-
children, state the process recreates at boot, scratch or temporary children,
|
|
53
|
-
write buffers, or immutable bytes already carried by an artifact.
|
|
54
|
-
- Give evidence, missing sources, blockers, and reviewer findings stable IDs.
|
|
55
|
-
|
|
56
|
-
Record the mapping baseline in `map_revision`. On an update, inspect the source
|
|
57
|
-
diff from the prior commit plus reverse dependencies and any evidence whose
|
|
58
|
-
anchor changed. Preserve stable IDs. Remove or tombstone an object only with
|
|
59
|
-
evidence that it is no longer active. Have the reviewer inspect the changed
|
|
60
|
-
scope blindly before seeing the semantic delta. Fall back to a full bounded
|
|
61
|
-
scan when deployment roots, service catalogs, application scope, or topology
|
|
62
|
-
sources changed. This is the required update protocol; it is not a claim that
|
|
63
|
-
update determinism has already been validated.
|
|
64
|
-
|
|
65
|
-
`map_revision.mode` is exactly one of two values:
|
|
66
|
-
|
|
67
|
-
- `full-scan` — the whole bounded scan ran, either for a first map or because one
|
|
68
|
-
of the four fallback triggers above fired.
|
|
69
|
-
- `incremental` — only the source diff, its reverse dependencies, and evidence
|
|
70
|
-
whose anchors changed were inspected. This is the value for a routine update,
|
|
71
|
-
including a re-check at an unchanged commit.
|
|
72
|
-
|
|
73
|
-
`changed_scope_ids` is the set of **mapped stable IDs whose source scope the diff
|
|
74
|
-
touched** — that is, the scope handed to the reviewer for blind re-inspection. It
|
|
75
|
-
is not the set of records whose field values ended up changing. A commit that
|
|
76
|
-
touches a service's source but leaves the universe semantically identical still
|
|
77
|
-
lists that service's ID here; the correct outcome in that case is a populated
|
|
78
|
-
`changed_scope_ids` with no added, removed, or modified objects. When the diff is
|
|
79
|
-
empty, `changed_scope_ids` is `[]`.
|
|
80
|
-
|
|
81
|
-
`previous_source_commit` is the `source_commit` of the map being updated. It is
|
|
82
|
-
`null` only on a first map. When a re-check runs at an unchanged commit, it equals
|
|
83
|
-
`source_commit`.
|
|
84
|
-
|
|
85
|
-
Reading the three prior artifacts under `.haystack/cloud-verifier/` is required to
|
|
86
|
-
perform an update and is exempt from the `.haystack` inspection denylist below.
|
|
87
|
-
That denylist governs discovery of the application and the reviewer's source view;
|
|
88
|
-
it never blocks the primary agent from loading the map it is updating.
|
|
89
|
-
|
|
90
|
-
## Authority boundary
|
|
91
|
-
|
|
92
|
-
The minimum customer selection is a stable application ID, stable environment
|
|
93
|
-
ID, and a replica destination policy or approval. The customer supplies that
|
|
94
|
-
selection locally. The destination's provider
|
|
95
|
-
account identity and production-native topology stay on the customer side; the
|
|
96
|
-
artifact records only an opaque approval reference and approved bounds.
|
|
97
|
-
|
|
98
|
-
Haystack resolves a bounded logical topology and plan summary: resource
|
|
99
|
-
kinds, opaque catalog handles, dependency edges, artifact/config catalog refs,
|
|
100
|
-
secret-reference names, external-integration kinds, replica strategies, and
|
|
101
|
-
capability/consistency/freshness/latency/cost bounds. A `runtime_role_id` in
|
|
102
|
-
this contract is a logical application behavior role, never an IAM role.
|
|
103
|
-
|
|
104
|
-
The current protocol also carries exact stable `sourceResourceId` values in a
|
|
105
|
-
`CustomerReplicaPlan` and exact stable source/replica identity pairs in a
|
|
106
|
-
`GoldenReplicaDescriptor`. Haystack may compare those bounded identities to
|
|
107
|
-
detect source/replica aliasing, cross-plan mismatches, or broken isolation. They
|
|
108
|
-
are not credentials, deletion handles, or production mutation authority, and
|
|
109
|
-
they must not be copied into checked-in universe, evidence, or review artifacts
|
|
110
|
-
as raw provider IDs. Use customer-issued opaque catalog handles in artifacts.
|
|
111
|
-
|
|
112
|
-
Do not query cloud-provider discovery APIs or production endpoints from the
|
|
113
|
-
coding CLI, Haystack control plane, reviewer, or sandbox. Provider IDs may be
|
|
114
|
-
used inside Haystack's discovery/materialization drivers and may cross the
|
|
115
|
-
bounded plan/descriptor protocol only for the validation above. Translate them
|
|
116
|
-
to opaque catalog handles before the checked-in artifact boundary.
|
|
117
|
-
|
|
118
|
-
## `universe.yml`
|
|
119
|
-
|
|
120
|
-
```yaml
|
|
121
|
-
version: 1
|
|
122
|
-
map_revision:
|
|
123
|
-
source_commit: 0123456789abcdef0123456789abcdef01234567
|
|
124
|
-
previous_source_commit: null
|
|
125
|
-
mode: full-scan
|
|
126
|
-
changed_scope_ids: []
|
|
127
|
-
application:
|
|
128
|
-
id: commerce-platform
|
|
129
|
-
requested_scope: production-checkout
|
|
130
|
-
selected_production_scope: hosted-checkout
|
|
131
|
-
scope_status: confirmed
|
|
132
|
-
evaluation_mode: real-production
|
|
133
|
-
|
|
134
|
-
production_basis:
|
|
135
|
-
repository_proven_topology:
|
|
136
|
-
environment_scope: hosted-production
|
|
137
|
-
fidelity_ceiling: exact-production-deployment
|
|
138
|
-
evidence_ids: [ev-prod-checkout-deploy]
|
|
139
|
-
authoritative_sources:
|
|
140
|
-
- id: source-prod-deployment
|
|
141
|
-
kind: kubernetes-service-catalog
|
|
142
|
-
availability: present
|
|
143
|
-
environment_scope: hosted-production
|
|
144
|
-
authority_class: live-production-control-plane
|
|
145
|
-
evidence_ids: [ev-prod-checkout-deploy]
|
|
146
|
-
missing_authoritative_sources: []
|
|
147
|
-
access_request: null
|
|
148
|
-
alternate_topologies:
|
|
149
|
-
- id: self-host-demo
|
|
150
|
-
environment_scope: self-host-reference
|
|
151
|
-
selected: false
|
|
152
|
-
evidence_ids: [ev-self-host-compose]
|
|
153
|
-
|
|
154
|
-
deployment_profiles:
|
|
155
|
-
- id: prod-checkout
|
|
156
|
-
environment_scope: hosted-production
|
|
157
|
-
activation: active
|
|
158
|
-
evidence_ids: [ev-prod-checkout-deploy]
|
|
159
|
-
|
|
160
|
-
artifacts:
|
|
161
|
-
- id: checkout-image
|
|
162
|
-
kind: container
|
|
163
|
-
verification_subject: source-changeable
|
|
164
|
-
used_by_runtime_role_ids: [checkout-http-role]
|
|
165
|
-
definition_evidence_id: ev-checkout-dockerfile
|
|
166
|
-
verification_commit:
|
|
167
|
-
status: proven
|
|
168
|
-
source_incorporation:
|
|
169
|
-
status: proven
|
|
170
|
-
mechanism: built-from-verification-commit
|
|
171
|
-
evidence_ids: [ev-checkout-image-ci]
|
|
172
|
-
production_recipe_equivalence:
|
|
173
|
-
status: proven
|
|
174
|
-
evidence_ids: [ev-checkout-image-ci, ev-prod-checkout-deploy]
|
|
175
|
-
|
|
176
|
-
services:
|
|
177
|
-
- id: checkout-api
|
|
178
|
-
source_root: apps/checkout
|
|
179
|
-
runtime_roles:
|
|
180
|
-
- id: checkout-http-role
|
|
181
|
-
kind: http-server
|
|
182
|
-
structured_identity:
|
|
183
|
-
entrypoint: checkout-server
|
|
184
|
-
mode: http
|
|
185
|
-
deployment_unit_identity_key: deployment/checkout-api
|
|
186
|
-
deployment_control_kind: orchestrator-workload
|
|
187
|
-
deployment_control_token: Deployment/checkout-api
|
|
188
|
-
deployment_profile_ids: [prod-checkout]
|
|
189
|
-
artifact_id: checkout-image
|
|
190
|
-
entrypoint_evidence_id: ev-checkout-entrypoint
|
|
191
|
-
config_names: [DATABASE_URL, EVENTS_URL, FLAGS_SDK_KEY]
|
|
192
|
-
interfaces: [checkout-http, order-events-consumer]
|
|
193
|
-
depends_on: [orders-db, order-events, feature-flags, payments-api]
|
|
194
|
-
evidence_ids: [ev-prod-checkout-deploy, ev-checkout-clients]
|
|
195
|
-
|
|
196
|
-
interfaces:
|
|
197
|
-
- id: checkout-http
|
|
198
|
-
runtime_role_id: checkout-http-role
|
|
199
|
-
kind: http
|
|
200
|
-
locator_evidence_id: ev-checkout-routes
|
|
201
|
-
- id: order-events-consumer
|
|
202
|
-
runtime_role_id: checkout-http-role
|
|
203
|
-
kind: event-consumer
|
|
204
|
-
structured_identity:
|
|
205
|
-
topic: order-events-v2
|
|
206
|
-
consumer_group: checkout-materializer
|
|
207
|
-
locator_evidence_id: ev-order-topic
|
|
208
|
-
|
|
209
|
-
physical_bindings:
|
|
210
|
-
- id: binding-orders-postgres
|
|
211
|
-
status: resolved
|
|
212
|
-
stable_resource_ref: binding-catalog/orders-primary
|
|
213
|
-
evidence_ids: [ev-orders-prod-binding]
|
|
214
|
-
- id: binding-order-events
|
|
215
|
-
status: proven
|
|
216
|
-
stable_resource_ref: binding-catalog/order-events-v2
|
|
217
|
-
evidence_ids: [ev-events-prod-binding]
|
|
218
|
-
|
|
219
|
-
resources:
|
|
220
|
-
- id: orders-db
|
|
221
|
-
kind: postgres
|
|
222
|
-
activation: active
|
|
223
|
-
activation_basis:
|
|
224
|
-
kind: selected-profile-required
|
|
225
|
-
evidence_ids: [ev-prod-checkout-deploy]
|
|
226
|
-
state_classification: canonical-durable
|
|
227
|
-
state_owner:
|
|
228
|
-
basis: application-persistence-boundary
|
|
229
|
-
evidence_ids: [ev-orders-state-owner]
|
|
230
|
-
state_policy:
|
|
231
|
-
action: copy
|
|
232
|
-
runtime_role_ids: [checkout-http-role]
|
|
233
|
-
consumer_edges:
|
|
234
|
-
- runtime_role_id: checkout-http-role
|
|
235
|
-
activation: active
|
|
236
|
-
activation_basis:
|
|
237
|
-
kind: selected-profile-required
|
|
238
|
-
evidence_ids: [ev-orders-db-consumer]
|
|
239
|
-
binding_names: [DATABASE_URL]
|
|
240
|
-
structured_identity:
|
|
241
|
-
role: transactional-orders
|
|
242
|
-
logical_database: orders
|
|
243
|
-
deployment_profile_ids: [prod-checkout]
|
|
244
|
-
source_owner_identity_key: createOrdersDatabase
|
|
245
|
-
materialization_root_identity_key: DATABASE_URL
|
|
246
|
-
state_unit_kind: logical-database
|
|
247
|
-
address_token: orders
|
|
248
|
-
reproduction_token: forkOrdersDatabase
|
|
249
|
-
reproduction_operation_kind: copy
|
|
250
|
-
key_components: [DATABASE_URL]
|
|
251
|
-
physical_binding_id: binding-orders-postgres
|
|
252
|
-
reproduction:
|
|
253
|
-
source: production-derived
|
|
254
|
-
strategy: provider-native-fork
|
|
255
|
-
capability_evidence_ids: [ev-orders-fork-capability]
|
|
256
|
-
writable: true
|
|
257
|
-
consistency_group_id: order-state
|
|
258
|
-
evidence_ids: [ev-orders-db-client, ev-orders-db-iac]
|
|
259
|
-
- id: order-events
|
|
260
|
-
kind: event-stream
|
|
261
|
-
activation: active
|
|
262
|
-
activation_basis:
|
|
263
|
-
kind: selected-profile-required
|
|
264
|
-
evidence_ids: [ev-prod-checkout-deploy]
|
|
265
|
-
state_classification: in-flight-work
|
|
266
|
-
state_owner:
|
|
267
|
-
basis: repository-declared-mutable-state
|
|
268
|
-
evidence_ids: [ev-order-events-state-owner]
|
|
269
|
-
state_policy:
|
|
270
|
-
action: preserve
|
|
271
|
-
rationale: Preserve accepted events not yet applied to canonical orders state.
|
|
272
|
-
runtime_role_ids: [checkout-http-role]
|
|
273
|
-
consumer_edges:
|
|
274
|
-
- runtime_role_id: checkout-http-role
|
|
275
|
-
activation: active
|
|
276
|
-
activation_basis:
|
|
277
|
-
kind: selected-profile-required
|
|
278
|
-
evidence_ids: [ev-order-events-consumer]
|
|
279
|
-
binding_names: [EVENTS_URL]
|
|
280
|
-
structured_identity:
|
|
281
|
-
role: order-event-log
|
|
282
|
-
topic: order-events-v2
|
|
283
|
-
deployment_profile_ids: [prod-checkout]
|
|
284
|
-
source_owner_identity_key: publishOrderEvent
|
|
285
|
-
materialization_root_identity_key: ORDER_EVENTS_TOPIC
|
|
286
|
-
state_unit_kind: queue-or-stream
|
|
287
|
-
address_token: order-events-v2
|
|
288
|
-
reproduction_token: restoreOrderEventsSnapshot
|
|
289
|
-
reproduction_operation_kind: restore
|
|
290
|
-
key_components: [ORDER_EVENTS_TOPIC, order-id]
|
|
291
|
-
physical_binding_id: binding-order-events
|
|
292
|
-
reproduction:
|
|
293
|
-
source: production-derived
|
|
294
|
-
strategy: snapshot-restore
|
|
295
|
-
capability_evidence_ids: [ev-events-snapshot-capability]
|
|
296
|
-
writable: true
|
|
297
|
-
consistency_group_id: order-state
|
|
298
|
-
evidence_ids: [ev-order-topic, ev-events-iac]
|
|
299
|
-
|
|
300
|
-
external_dependencies:
|
|
301
|
-
- id: payments-api
|
|
302
|
-
kind: third-party-api
|
|
303
|
-
structured_identity:
|
|
304
|
-
operation: authorize-payment
|
|
305
|
-
operation_identity_key: apps/checkout/payments.ts#authorizePayment
|
|
306
|
-
operation_token: authorizePayment
|
|
307
|
-
boundary_contract_kind: outbound-operation-family
|
|
308
|
-
interaction_direction: outbound
|
|
309
|
-
source_owner_identity_key: submitPayment
|
|
310
|
-
boundary_trace:
|
|
311
|
-
kind: direct
|
|
312
|
-
callsite_identity_key: apps/checkout/payments.ts#authorizePayment
|
|
313
|
-
callsite_token: authorizePayment
|
|
314
|
-
boundary_token: authorizePayment
|
|
315
|
-
key_components: [payments-client, authorize-payment]
|
|
316
|
-
runtime_role_ids: [checkout-http-role]
|
|
317
|
-
consumer_edges:
|
|
318
|
-
- runtime_role_id: checkout-http-role
|
|
319
|
-
activation: active
|
|
320
|
-
activation_basis:
|
|
321
|
-
kind: default-request-path
|
|
322
|
-
evidence_ids: [ev-payments-consumer]
|
|
323
|
-
activation: active
|
|
324
|
-
activation_basis:
|
|
325
|
-
kind: default-request-path
|
|
326
|
-
evidence_ids: [ev-payments-prod-config]
|
|
327
|
-
backing_state:
|
|
328
|
-
disposition: none
|
|
329
|
-
basis: interaction-only
|
|
330
|
-
operation: stateless-exchange
|
|
331
|
-
evidence_ids: [ev-payments-boundary]
|
|
332
|
-
reproduction:
|
|
333
|
-
source: production-derived-interactions
|
|
334
|
-
strategy: capture-replay
|
|
335
|
-
capability_evidence_ids: [ev-payments-replay-capability]
|
|
336
|
-
live_egress: forbidden
|
|
337
|
-
evidence_ids: [ev-payments-client]
|
|
338
|
-
|
|
339
|
-
consistency_groups:
|
|
340
|
-
- id: order-state
|
|
341
|
-
members: [orders-db, order-events]
|
|
342
|
-
requirement: same-production-cut
|
|
343
|
-
evidence_ids: [ev-order-dual-write]
|
|
344
|
-
|
|
345
|
-
unresolved: []
|
|
346
|
-
|
|
347
|
-
materialization_plan:
|
|
348
|
-
# This is the full verifier result SLO, including generated case execution.
|
|
349
|
-
verifier_total_slo_ms: 60000
|
|
350
|
-
# This strictly smaller allocation is only for the warm hot-launch path.
|
|
351
|
-
target_slo_ms: 7000
|
|
352
|
-
reserved_case_work_ms: 53000
|
|
353
|
-
generated_case_fanout:
|
|
354
|
-
target_n: 8
|
|
355
|
-
hard_max_n: 16
|
|
356
|
-
required_identity_fields: [generated_case_id, sandbox_id, universe_incarnation_id]
|
|
357
|
-
parallel_phases: [fork, attach, execute]
|
|
358
|
-
cleanup_order: [release-all-attachments, revoke-all-leases]
|
|
359
|
-
cleanup_covers_all_attempts_on_partial_failure: true
|
|
360
|
-
single_absolute_deadline: true
|
|
361
|
-
workload_profiles:
|
|
362
|
-
- id: cloud-verifier-standard-v1
|
|
363
|
-
template_catalog_ref: template-catalog/cloud-verifier-standard-v1@sha256:1111111111111111111111111111111111111111111111111111111111111111
|
|
364
|
-
resource_size: e2b-standard
|
|
365
|
-
compatibility_groups:
|
|
366
|
-
- id: checkout-prod-v3
|
|
367
|
-
member_subject_ids: [checkout-image, orders-db, order-events, payments-api]
|
|
368
|
-
prepared_states:
|
|
369
|
-
- id: prepared-checkout-source
|
|
370
|
-
exact_identity:
|
|
371
|
-
workload_profile_id: cloud-verifier-standard-v1
|
|
372
|
-
template_catalog_ref: template-catalog/cloud-verifier-standard-v1@sha256:1111111111111111111111111111111111111111111111111111111111111111
|
|
373
|
-
resource_size: e2b-standard
|
|
374
|
-
durable_snapshot_ref: prepared-state-catalog/checkout@sha256:2222222222222222222222222222222222222222222222222222222222222222
|
|
375
|
-
compatibility_group_id: checkout-prod-v3
|
|
376
|
-
source_cut_ref: production-cut-catalog/checkout-state-2026-08-01
|
|
377
|
-
artifact_digest_refs: [artifact-catalog/checkout@sha256:3333333333333333333333333333333333333333333333333333333333333333]
|
|
378
|
-
config_digest_refs: [config-catalog/checkout@sha256:4444444444444444444444444444444444444444444444444444444444444444]
|
|
379
|
-
evidence_ids: [ev-prepared-checkout-source]
|
|
380
|
-
cold_preparation:
|
|
381
|
-
steps:
|
|
382
|
-
- id: cold-prepare-checkout-state
|
|
383
|
-
kind: restore-seed-capture-quiesce-and-snapshot
|
|
384
|
-
subject_ids: [orders-db, order-events, payments-api]
|
|
385
|
-
capability_evidence_ids: [ev-cold-prepare-checkout]
|
|
386
|
-
depends_on_step_ids: []
|
|
387
|
-
produces_prepared_state_ids: [prepared-checkout-source]
|
|
388
|
-
latency_basis: measured
|
|
389
|
-
planned_typical_ms: 900000
|
|
390
|
-
planned_high_ms: 2400000
|
|
391
|
-
refresh:
|
|
392
|
-
strategy: on-source-cut-change
|
|
393
|
-
max_age_seconds: 300
|
|
394
|
-
freshness_evidence_ids: [ev-checkout-refresh-policy]
|
|
395
|
-
planned_typical_critical_path_ms: 900000
|
|
396
|
-
planned_high_critical_path_ms: 2400000
|
|
397
|
-
hot_launch:
|
|
398
|
-
consumes_prepared_state_ids: [prepared-checkout-source]
|
|
399
|
-
steps:
|
|
400
|
-
- id: hot-fork-checkout-wave
|
|
401
|
-
kind: parallel-generated-case-universe-fork-wave
|
|
402
|
-
subject_ids: [prepared-checkout-source]
|
|
403
|
-
capability_evidence_ids: [ev-hot-fork-checkout-wave]
|
|
404
|
-
depends_on_step_ids: []
|
|
405
|
-
latency_basis: measured
|
|
406
|
-
planned_typical_ms: 987
|
|
407
|
-
planned_high_ms: 1200
|
|
408
|
-
- id: hot-inject-checkout-commit
|
|
409
|
-
kind: inject-arbitrary-verification-commit
|
|
410
|
-
subject_ids: [checkout-image]
|
|
411
|
-
capability_evidence_ids: [ev-hot-inject-checkout-commit]
|
|
412
|
-
depends_on_step_ids: [hot-fork-checkout-wave]
|
|
413
|
-
latency_basis: measured
|
|
414
|
-
planned_typical_ms: 1000
|
|
415
|
-
planned_high_ms: 1500
|
|
416
|
-
- id: hot-start-checkout
|
|
417
|
-
kind: start-and-probe-readiness
|
|
418
|
-
subject_ids: [checkout-http-role]
|
|
419
|
-
capability_evidence_ids: [ev-hot-start-checkout]
|
|
420
|
-
depends_on_step_ids: [hot-inject-checkout-commit]
|
|
421
|
-
latency_basis: measured
|
|
422
|
-
planned_typical_ms: 2000
|
|
423
|
-
planned_high_ms: 3000
|
|
424
|
-
arbitrary_verification_commit_injection:
|
|
425
|
-
supported: true
|
|
426
|
-
step_id: hot-inject-checkout-commit
|
|
427
|
-
production_recipe_equivalence_evidence_ids: [ev-checkout-image-ci]
|
|
428
|
-
fresh_universe_per_generated_case:
|
|
429
|
-
enforced: true
|
|
430
|
-
step_id: hot-fork-checkout-wave
|
|
431
|
-
parent_write_protected: true
|
|
432
|
-
achieved_generated_case_fanout: 8
|
|
433
|
-
latency_basis: measured
|
|
434
|
-
planned_typical_critical_path_ms: 3987
|
|
435
|
-
planned_high_critical_path_ms: 5700
|
|
436
|
-
observed_end_to_end_p95_ms: 5000
|
|
437
|
-
probe_evidence_ids: [ev-hot-checkout-path-probe]
|
|
438
|
-
readiness:
|
|
439
|
-
status: hot-path-proven
|
|
440
|
-
scope: real-production
|
|
441
|
-
```
|
|
442
|
-
|
|
443
|
-
Every final runtime role, resource, and external dependency has a nonempty
|
|
444
|
-
operational `kind` and a proof-complete identity tuple. Final arrays never use `trace_status: census-only`.
|
|
445
|
-
Downstream activation, role reachability,
|
|
446
|
-
backing-state, or materialization uncertainty remains explicit and keeps
|
|
447
|
-
closure partial, but does not withhold an exact identity. The identity retains exact deployment unit, logical
|
|
448
|
-
state key, object, operation, or interaction keys rather than a prose family
|
|
449
|
-
label. Each runtime role has a unique `deployment_unit_identity_key`, an allowed
|
|
450
|
-
`deployment_control_kind`, and an exact `deployment_control_token` naming the
|
|
451
|
-
orchestration or host controller that independently restarts it. A thread,
|
|
452
|
-
forked child, generic process, or container inside another deployment unit is
|
|
453
|
-
not a role merely because it can fail or restart internally. Allowed controls
|
|
454
|
-
also include `operator-launched-longrun` for an exact packaged command that
|
|
455
|
-
stays alive for an operator/user session, and
|
|
456
|
-
`application-supervised-process` for a child with an exact independent
|
|
457
|
-
spawn/stop/restart handle. Each
|
|
458
|
-
external dependency additionally sets `interaction_direction` to `outbound`,
|
|
459
|
-
`inbound-required`, `bidirectional`, or `host-mediated`.
|
|
460
|
-
|
|
461
|
-
Every full resource identity also repeats the logical census row's exact
|
|
462
|
-
`source_owner_identity_key`, `materialization_root_identity_key`, and nonempty
|
|
463
|
-
unique `key_components`; it adds an allowed `state_unit_kind`, exact unique
|
|
464
|
-
`address_token`, exact `reproduction_token`, and an allowed
|
|
465
|
-
`reproduction_operation_kind`. The reproduction token differs from the address
|
|
466
|
-
and materialization-root tokens and names a real independent copy, restore,
|
|
467
|
-
rebuild, reset, preserve, provision, mount, install, write, initialize, build,
|
|
468
|
-
embed, generate, migrate, or pin operation. An exact application write such as a named `setItem`, `WriteFile`, or
|
|
469
|
-
object `Put`, or an exact generate/build/embed/install/migrate operation, proves
|
|
470
|
-
the logical state identity it creates. Cross-environment restore readiness is a
|
|
471
|
-
separate materialization claim. A mount proves parent capacity only: it cannot
|
|
472
|
-
make a parent `canonical-durable` resource unless source proves independently
|
|
473
|
-
preserved content belonging to that parent itself.
|
|
474
|
-
These tokens are never
|
|
475
|
-
placeholders. A final row may use `reproduction.strategy: unresolved` only
|
|
476
|
-
while the matching category remains partial and names that exact frontier; it
|
|
477
|
-
can never support complete closure. Atomic
|
|
478
|
-
state-owner evidence supports all four owner/root/address/reproduction tokens.
|
|
479
|
-
Every full external
|
|
480
|
-
identity records an exact unique `operation_identity_key`, exact source owner,
|
|
481
|
-
exact effectful-call or listener `operation_token`, allowed
|
|
482
|
-
`boundary_contract_kind`, direction, and
|
|
483
|
-
nonempty unique `key_components`. It also records `boundary_trace` as `direct`
|
|
484
|
-
or `wrapper-resolved`, with a concrete application `callsite_identity_key`,
|
|
485
|
-
exact callsite and boundary tokens, and every wrapper token for a resolved
|
|
486
|
-
chain. Generic helper definitions are discovery surfaces, not final operation
|
|
487
|
-
identities. Family labels, client names, providers, and
|
|
488
|
-
transport names alone are not stable operation or destination schemas. A
|
|
489
|
-
constructor, factory, configuration setter, wrapper, or flow label is not an
|
|
490
|
-
effectful operation token.
|
|
491
|
-
|
|
492
|
-
Runtime roles are resolved by independently restartable deployment unit, not
|
|
493
|
-
merely binary, command, container, or artifact. Independently deployed
|
|
494
|
-
long-running server, worker, scheduler, consumer, maintenance, watch, scheduled,
|
|
495
|
-
injected, sidecar, and host-managed units remain separate roles even when they
|
|
496
|
-
share an executable. Setup, init, migration, configuration, and start commands
|
|
497
|
-
that prepare the same unit are not extra roles.
|
|
498
|
-
A separately launched database, cache, broker, or search process is also a
|
|
499
|
-
runtime role for its exact launch unit and remains a separate stateful resource
|
|
500
|
-
for its reproduced state. A shipped browser application is a
|
|
501
|
-
`host-managed-unit` when source proves its exact document/build entrypoint and
|
|
502
|
-
production serving or packaging path. A missing compiled bundle in retained
|
|
503
|
-
source does not erase that browser-host lifecycle boundary.
|
|
504
|
-
|
|
505
|
-
Exact HTTP/RPC/socket calls between mapped runtime roles remain operational
|
|
506
|
-
dependencies with `boundary_contract_kind: mapped-role-operation`; their
|
|
507
|
-
placement affects later routing but not their source operation identity. For
|
|
508
|
-
inbound services, retain both the listener and one
|
|
509
|
-
`required-inbound-operation` per exact method/message plus route, topic,
|
|
510
|
-
command, or protocol operation. Merge only exact aliases of the same structured
|
|
511
|
-
operation.
|
|
512
|
-
|
|
513
|
-
### Scope and production authority
|
|
514
|
-
|
|
515
|
-
`application.scope_status` is `confirmed` or `provisional`. It is `confirmed`
|
|
516
|
-
only when an authoritative source controls or resolves the selected live
|
|
517
|
-
production scope. A confirmed map has a nonempty
|
|
518
|
-
`selected_production_scope`; a provisional map keeps that field exactly `null`
|
|
519
|
-
and must be blocked. Every authoritative source has nonempty `kind`,
|
|
520
|
-
`availability: present`, a recognized `environment_scope`, one of the declared
|
|
521
|
-
`authority_class` values, and nonempty `evidence_ids`. The
|
|
522
|
-
`repository_proven_topology` mapping is always present with recognized
|
|
523
|
-
environment and fidelity values plus nonempty evidence.
|
|
524
|
-
|
|
525
|
-
For this contract, live authority is a bounded attestation Haystack obtains
|
|
526
|
-
under access the customer grants it directly. The
|
|
527
|
-
`live-production-control-plane` authority class does not authorize the agent to
|
|
528
|
-
hold a production role, call that control plane, or receive its raw resource
|
|
529
|
-
identities.
|
|
530
|
-
|
|
531
|
-
`application.evaluation_mode` is `real-production` or `synthetic`. A confirmed
|
|
532
|
-
real-production map requires an authoritative source with
|
|
533
|
-
`authority_class: live-production-control-plane`. A confirmed synthetic map
|
|
534
|
-
requires `authority_class: user-authorized-synthetic-evaluation` and uses
|
|
535
|
-
`materialization_plan.readiness.scope: synthetic-evaluation`. Synthetic
|
|
536
|
-
authority and measurements cannot establish a real-production scope or
|
|
537
|
-
readiness claim.
|
|
538
|
-
|
|
539
|
-
Use these `environment_scope` values:
|
|
540
|
-
|
|
541
|
-
- `hosted-production`
|
|
542
|
-
- `production-reference`
|
|
543
|
-
- `self-host-reference`
|
|
544
|
-
- `local-development`
|
|
545
|
-
- `example`
|
|
546
|
-
- `unknown`
|
|
547
|
-
|
|
548
|
-
Use a `fidelity_ceiling` no higher than the best authority:
|
|
549
|
-
|
|
550
|
-
- `exact-production-deployment`
|
|
551
|
-
- `production-reference-only`
|
|
552
|
-
- `self-host-reference-only`
|
|
553
|
-
- `local-development-only`
|
|
554
|
-
- `unknown`
|
|
555
|
-
|
|
556
|
-
Authority has two independent axes, and a map records them separately.
|
|
557
|
-
|
|
558
|
-
*Scope authority* answers "which live deployment is this?". Without it the map is
|
|
559
|
-
`provisional` and takes the compact receipt below.
|
|
560
|
-
|
|
561
|
-
*Inventory authority* answers "what is in it?". A deployment catalog often resolves
|
|
562
|
-
the hosted scope and approves a destination while declining to enumerate
|
|
563
|
-
resources, edges, config refs or integrations, because their deployment tooling
|
|
564
|
-
has no resource inventory to return. That is an ordinary position, not a failure,
|
|
565
|
-
and it does **not** make the map provisional.
|
|
566
|
-
|
|
567
|
-
To record it, keep `scope_status: confirmed` and add the withheld groups to
|
|
568
|
-
`missing_authoritative_sources` with `required_for: complete-bounded-inventory`.
|
|
569
|
-
Entries carrying that exact value are inventory-authority gaps and leave the map
|
|
570
|
-
confirmed; any other `required_for` is treated as a scope-authority gap and
|
|
571
|
-
forces the provisional profile. Alongside them, a confirmed map may carry an
|
|
572
|
-
`access_request` naming only the withheld groups — a non-empty subset of the
|
|
573
|
-
seven, rather than all of them.
|
|
574
|
-
|
|
575
|
-
Resources whose bindings the catalog withheld retain their exact final identity
|
|
576
|
-
with `reproduction.strategy: unresolved`, while state closure remains partial
|
|
577
|
-
and blocks on the missing binding. The map then says the true thing: the scope
|
|
578
|
-
is known, the inventory is partial, and here is exactly what is missing.
|
|
579
|
-
|
|
580
|
-
If *scope* authority is private or external, keep discovering and still record
|
|
581
|
-
the repository-evidenced inventory; withhold confirmation, not content. Set
|
|
582
|
-
`scope_status: provisional`, leave `selected_production_scope: null`, terminate
|
|
583
|
-
at the `inventory-complete` phase, and emit one precise access request. Reserve
|
|
584
|
-
`phase: authority-gate` and the compact `scaffold-provisional-universe` receipt
|
|
585
|
-
for the case where the repository evidences no topology at all:
|
|
586
|
-
|
|
587
|
-
```yaml
|
|
588
|
-
application:
|
|
589
|
-
id: commerce-platform
|
|
590
|
-
requested_scope: production-checkout
|
|
591
|
-
selected_production_scope: null
|
|
592
|
-
scope_status: provisional
|
|
593
|
-
evaluation_mode: real-production
|
|
594
|
-
production_basis:
|
|
595
|
-
repository_proven_topology:
|
|
596
|
-
environment_scope: self-host-reference
|
|
597
|
-
fidelity_ceiling: self-host-reference-only
|
|
598
|
-
evidence_ids: [ev-self-host-compose]
|
|
599
|
-
authoritative_sources: []
|
|
600
|
-
missing_authoritative_sources:
|
|
601
|
-
- id: missing-hosted-production-deployment
|
|
602
|
-
kind: private-deployment-service-catalog
|
|
603
|
-
required_for: resolve-selected-hosted-scope
|
|
604
|
-
status: unavailable-in-repository
|
|
605
|
-
evidence_ids: [ev-hosted-deployment-private]
|
|
606
|
-
access_request:
|
|
607
|
-
id: request-hosted-deployment-catalog
|
|
608
|
-
access: read-only
|
|
609
|
-
source: haystack-replication-service
|
|
610
|
-
fields:
|
|
611
|
-
- selected-application-id-and-environment-id
|
|
612
|
-
- approved-replica-destination-policy-and-approval-ref
|
|
613
|
-
- bounded-resource-kinds-opaque-catalog-handles-and-dependency-edges
|
|
614
|
-
- artifact-runtime-and-non-secret-config-opaque-catalog-refs
|
|
615
|
-
- external-integration-kinds-and-secret-reference-names
|
|
616
|
-
- replica-capabilities-strategies-consistency-freshness-latency-and-cost-bounds
|
|
617
|
-
- replica-only-golden-descriptor-and-lease-reference-contract
|
|
618
|
-
reason: authorize-replica-plan-summary
|
|
619
|
-
```
|
|
620
|
-
|
|
621
|
-
The first two groups are selected or approved by the customer in its local CLI.
|
|
622
|
-
The remaining groups are bounded outputs Haystack resolves. They never
|
|
623
|
-
contain production roles, credentials, raw provider IDs,
|
|
624
|
-
direct endpoints, or secret values. The last group requests the schema and
|
|
625
|
-
policy for later replica-only references, not a production credential or a
|
|
626
|
-
lease before materialization. Exact stable source/replica identities that a
|
|
627
|
-
later bounded protocol response uses for alias and isolation validation are
|
|
628
|
-
transient and are not fields in this checked-in access request.
|
|
629
|
-
|
|
630
|
-
Do not invent a scope such as `hypothetical-hosted-production`. Keep self-host,
|
|
631
|
-
dev, hobby, and example topology compact under `alternate_topologies`.
|
|
632
|
-
|
|
633
|
-
When authority is missing and the repository evidences no topology at all,
|
|
634
|
-
stop after the authority gate. Defer the repository-only closure audit because
|
|
635
|
-
closure is partial, and do not launch the full production reviewer. Target at
|
|
636
|
-
most 60 seconds to synthesize and validate the three compact artifacts. Write a
|
|
637
|
-
strict JSON input in private scratch and run:
|
|
638
|
-
|
|
639
|
-
```bash
|
|
640
|
-
haystack skills scaffold-provisional-universe --input <scratch-input.json>
|
|
641
|
-
```
|
|
642
|
-
|
|
643
|
-
If the repository does evidence topology, continue repository discovery. A
|
|
644
|
-
repository-only closure audit may prepare the isolated snapshot and run without
|
|
645
|
-
production authority; the production reviewer remains deferred. Use the compact
|
|
646
|
-
scaffold only for the truly empty partial receipt.
|
|
647
|
-
|
|
648
|
-
Use this input shape. All IDs are supplied explicitly; never derive or join them
|
|
649
|
-
from free text. Evidence sources in this authority-gate profile are repository
|
|
650
|
-
paths with structured anchors. Add `budget.overrunBlockerIds` only for the exact
|
|
651
|
-
budget paths that exceeded their limits.
|
|
652
|
-
|
|
653
|
-
`budget.overrunBlockerIds` is an **object**, not a list. It has exactly two
|
|
654
|
-
optional keys, each holding the stable ID of the `kind: budget-exhausted` blocker
|
|
655
|
-
for that path:
|
|
656
|
-
|
|
657
|
-
```json
|
|
658
|
-
"overrunBlockerIds": {
|
|
659
|
-
"primaryDiscovery": "blocker-primary-discovery-budget-exhausted",
|
|
660
|
-
"authorityGate": "blocker-authority-gate-budget-exhausted"
|
|
661
|
-
}
|
|
662
|
-
```
|
|
663
|
-
|
|
664
|
-
Include `primaryDiscovery` if and only if `budget.primaryDiscovery` exceeded its
|
|
665
|
-
48-call or 900-second limit, and `authorityGate` if and only if
|
|
666
|
-
`budget.authorityGate` exceeded its 6-call or 60-second limit. Supplying a key for
|
|
667
|
-
a path that stayed within limits is rejected, and so is omitting one for a path
|
|
668
|
-
that did not. Omit the whole object when neither path overran.
|
|
669
|
-
|
|
670
|
-
```json
|
|
671
|
-
{
|
|
672
|
-
"sourceCommit": "0123456789abcdef0123456789abcdef01234567",
|
|
673
|
-
"application": {
|
|
674
|
-
"id": "commerce-platform",
|
|
675
|
-
"requestedScope": "production-checkout",
|
|
676
|
-
"evaluationMode": "real-production"
|
|
677
|
-
},
|
|
678
|
-
"repositoryTopology": {
|
|
679
|
-
"id": "commerce-repository-census",
|
|
680
|
-
"environmentScope": "production-reference",
|
|
681
|
-
"fidelityCeiling": "unknown",
|
|
682
|
-
"evidenceIds": ["ev-topology-presence-census"],
|
|
683
|
-
"topologyPresenceCensus": {
|
|
684
|
-
"status": "no-production-capable-topology",
|
|
685
|
-
"subjectId": "commerce-repository-census",
|
|
686
|
-
"inspectedSurfaceKinds": [
|
|
687
|
-
"runtime-entrypoints",
|
|
688
|
-
"package-workspace-manifests",
|
|
689
|
-
"container-descriptors",
|
|
690
|
-
"deployment-descriptors",
|
|
691
|
-
"structured-capability-indexes"
|
|
692
|
-
],
|
|
693
|
-
"productionCapableSurfaceCount": 0,
|
|
694
|
-
"evidenceIds": ["ev-topology-presence-census"]
|
|
695
|
-
}
|
|
696
|
-
},
|
|
697
|
-
"missingAuthority": {
|
|
698
|
-
"id": "missing-hosted-production-deployment",
|
|
699
|
-
"kind": "haystack-replication-service",
|
|
700
|
-
"requiredFor": "authorize-bounded-hosted-replica-plan",
|
|
701
|
-
"status": "unavailable-in-repository",
|
|
702
|
-
"evidenceIds": ["ev-hosted-deployment-private"]
|
|
703
|
-
},
|
|
704
|
-
"accessRequest": {
|
|
705
|
-
"id": "request-hosted-deployment-catalog",
|
|
706
|
-
"source": "haystack-replication-service",
|
|
707
|
-
"reason": "authorize-replica-plan-summary"
|
|
708
|
-
},
|
|
709
|
-
"evidence": [
|
|
710
|
-
{
|
|
711
|
-
"id": "ev-topology-presence-census",
|
|
712
|
-
"subjectIds": ["commerce-repository-census"],
|
|
713
|
-
"assertion": "The required census found no repository-controlled production-capable topology.",
|
|
714
|
-
"environmentScope": "production-reference",
|
|
715
|
-
"authority": "indicative",
|
|
716
|
-
"confidence": "strong",
|
|
717
|
-
"claimKind": "topology-presence-census",
|
|
718
|
-
"sources": [
|
|
719
|
-
{
|
|
720
|
-
"path": "README.md",
|
|
721
|
-
"anchor": "bounded-package-scope",
|
|
722
|
-
"kind": "repository-documentation",
|
|
723
|
-
"locatorKind": "exact-snippet"
|
|
724
|
-
}
|
|
725
|
-
]
|
|
726
|
-
},
|
|
727
|
-
{
|
|
728
|
-
"id": "ev-hosted-deployment-private",
|
|
729
|
-
"subjectIds": ["commerce-platform", "missing-hosted-production-deployment"],
|
|
730
|
-
"assertion": "The hosted deployment authority is external to this repository.",
|
|
731
|
-
"environmentScope": "hosted-production",
|
|
732
|
-
"authority": "indicative",
|
|
733
|
-
"confidence": "strong",
|
|
734
|
-
"sources": [
|
|
735
|
-
{
|
|
736
|
-
"path": ".github/workflows/deploy.yml",
|
|
737
|
-
"anchor": "jobs.deploy.uses",
|
|
738
|
-
"kind": "manifest-key",
|
|
739
|
-
"locatorKind": "manifest-key"
|
|
740
|
-
}
|
|
741
|
-
]
|
|
742
|
-
}
|
|
743
|
-
],
|
|
744
|
-
"coverage": {
|
|
745
|
-
"scannedRoots": [".github/workflows", "docs", "packages"],
|
|
746
|
-
"sourceKinds": ["repository-documentation", "package-workspace-manifests"]
|
|
747
|
-
},
|
|
748
|
-
"budget": {
|
|
749
|
-
"primaryDiscovery": {
|
|
750
|
-
"repositoryInspectionCallsUsed": 5,
|
|
751
|
-
"elapsedSeconds": 43
|
|
752
|
-
},
|
|
753
|
-
"authorityGate": {
|
|
754
|
-
"repositoryInspectionCallsUsed": 5,
|
|
755
|
-
"elapsedSeconds": 43
|
|
756
|
-
}
|
|
757
|
-
},
|
|
758
|
-
"authorityBlocker": {
|
|
759
|
-
"id": "blocker-hosted-production-authority",
|
|
760
|
-
"kind": "missing-authoritative-source",
|
|
761
|
-
"evidenceIds": ["ev-hosted-deployment-private"]
|
|
762
|
-
}
|
|
763
|
-
}
|
|
764
|
-
```
|
|
765
|
-
|
|
766
|
-
The command emits exactly the seven fixed read-only access-request field groups
|
|
767
|
-
shown above, required empty inventory lists, exact budget accounting, deferred
|
|
768
|
-
reviewer, SHA-256 artifact digests, and validator revision. It refuses to
|
|
769
|
-
overwrite an existing artifact directory. Use this minimal `review.yml` as the
|
|
770
|
-
rendered profile for the compact `authority-gate` receipt. A map with
|
|
771
|
-
repository-evidenced inventory terminates at `inventory-complete`; it records a
|
|
772
|
-
completed repository-only closure audit if all three categories are complete,
|
|
773
|
-
or the same short deferral when any category remains partial. Neither case
|
|
774
|
-
instantiates the full production reviewer schema. Omit its protocol fields and
|
|
775
|
-
reviewer-phase lists:
|
|
776
|
-
|
|
777
|
-
```yaml
|
|
778
|
-
version: 1
|
|
779
|
-
inventory_closure_audit:
|
|
780
|
-
status: deferred
|
|
781
|
-
reason: inventory-closure-partial
|
|
782
|
-
reviewer:
|
|
783
|
-
status: deferred
|
|
784
|
-
reason: production-authority-required
|
|
785
|
-
budget:
|
|
786
|
-
primary_discovery:
|
|
787
|
-
call_limit: 48
|
|
788
|
-
elapsed_limit_seconds: 900
|
|
789
|
-
repository_inspection_calls_used: 6
|
|
790
|
-
elapsed_seconds: 48
|
|
791
|
-
authority_gate:
|
|
792
|
-
call_limit: 6
|
|
793
|
-
elapsed_limit_seconds: 60
|
|
794
|
-
repository_inspection_calls_used: 6
|
|
795
|
-
elapsed_seconds: 48
|
|
796
|
-
termination:
|
|
797
|
-
reason: missing-production-authority
|
|
798
|
-
phase: authority-gate
|
|
799
|
-
validation:
|
|
800
|
-
command: haystack skills validate-universe --json
|
|
801
|
-
status: passed
|
|
802
|
-
validator_contract_revision: 39
|
|
803
|
-
status: blocked
|
|
804
|
-
blocking_items:
|
|
805
|
-
- id: blocker-hosted-production-authority
|
|
806
|
-
kind: missing-authoritative-source
|
|
807
|
-
evidence_ids: [ev-hosted-deployment-private]
|
|
808
|
-
```
|
|
809
|
-
|
|
810
|
-
The compact receipt defers its repository-only audit because every closure
|
|
811
|
-
category is partial. A repository-evidenced provisional map may instead record
|
|
812
|
-
a completed repository-only audit, and must do so before claiming all three
|
|
813
|
-
categories complete. The only provisional blockers are `missing-authoritative-source` or
|
|
814
|
-
`production-authority-access-required`. If recorded usage exceeds a limit, add
|
|
815
|
-
the required exception as `kind: budget-exhausted` with `budget_path` set to
|
|
816
|
-
`budget.primary_discovery` or
|
|
817
|
-
`budget.primary_discovery.authority_gate`. Never add reviewer availability,
|
|
818
|
-
snapshot, quota, or isolation blockers before production authority is
|
|
819
|
-
available.
|
|
820
|
-
|
|
821
|
-
### Artifacts and exact source
|
|
822
|
-
|
|
823
|
-
For source-changeable application artifacts,
|
|
824
|
-
set `verification_subject: source-changeable`.
|
|
825
|
-
`verification_commit.source_incorporation.status` and
|
|
826
|
-
`production_recipe_equivalence.status` are each `proven` or `unproven`.
|
|
827
|
-
Source incorporation needs a commit-specific build, source mount, or immutable
|
|
828
|
-
digest tied to the commit. Recipe equivalence needs evidence that the same
|
|
829
|
-
builder, flags, generated inputs, and packaging path used for production are
|
|
830
|
-
used for verification.
|
|
831
|
-
|
|
832
|
-
The aggregate `verification_commit.status` is `proven` only when both claims
|
|
833
|
-
are proven. Otherwise use `unproven` or `bypasses-commit` and add a blocker.
|
|
834
|
-
Starting a prebuilt image does not prove either claim.
|
|
835
|
-
|
|
836
|
-
A fixed infrastructure artifact can use:
|
|
837
|
-
|
|
838
|
-
```yaml
|
|
839
|
-
verification_subject: pinned-infrastructure
|
|
840
|
-
verification_commit:
|
|
841
|
-
status: proven
|
|
842
|
-
source_incorporation:
|
|
843
|
-
status: not-applicable
|
|
844
|
-
reason: pinned-infrastructure-artifact
|
|
845
|
-
production_recipe_equivalence:
|
|
846
|
-
status: exempt-pinned-infrastructure
|
|
847
|
-
immutable_artifact_ref: artifact-catalog/postgres-16
|
|
848
|
-
configuration_source_ref: config-catalog/orders-postgres
|
|
849
|
-
evidence_ids: [ev-postgres-prod-identity]
|
|
850
|
-
```
|
|
851
|
-
|
|
852
|
-
The refs are opaque catalog references, not raw provider IDs. The exemption is
|
|
853
|
-
invalid for application code or mutable generated artifacts. The validator
|
|
854
|
-
rejects the exemption unless `verification_subject` is explicitly
|
|
855
|
-
`pinned-infrastructure`.
|
|
856
|
-
|
|
857
|
-
### Prepared state and hot launch
|
|
858
|
-
|
|
859
|
-
`materialization_plan` separates slow, ahead-of-time preparation from the warm
|
|
860
|
-
request path. `verifier_total_slo_ms` covers case generation, hot launch,
|
|
861
|
-
execution, and aggregation. `target_slo_ms` is only the hot-launch allocation
|
|
862
|
-
and must be strictly smaller; `reserved_case_work_ms` is their difference.
|
|
863
|
-
`generated_case_fanout.target_n` is selected for this application.
|
|
864
|
-
`hard_max_n` is an explicit bound and cannot exceed the product ceiling of 64.
|
|
865
|
-
|
|
866
|
-
Cold preparation is run by Haystack. Its
|
|
867
|
-
customer-local provider drivers install production-derived dependencies once,
|
|
868
|
-
seed and quiesce state, remove credentials and egress, and produce a durable
|
|
869
|
-
exact prepared-state identity. Haystack receives the bounded plan summary,
|
|
870
|
-
including the protocol's exact stable source/replica identities for alias and
|
|
871
|
-
isolation validation, and opaque replica catalog refs for checked-in bindings.
|
|
872
|
-
It receives no provider operations, credentials, deletion handles, or direct
|
|
873
|
-
control-plane connectivity.
|
|
874
|
-
The identity resolves a declared `workload_profiles` ID and
|
|
875
|
-
`compatibility_groups` ID, and binds the exact template catalog reference and
|
|
876
|
-
resource size, durable replica snapshot, production cut, artifact digests, and
|
|
877
|
-
config digests. Its evidence must name the prepared-state ID explicitly. Its
|
|
878
|
-
refresh policy states how stale the prepared state may become. Cold work may
|
|
879
|
-
take minutes; it does not consume the on-demand budget when the required fresh
|
|
880
|
-
prepared state already exists.
|
|
881
|
-
|
|
882
|
-
Hot launch consumes that state through bounded-TTL replica leases and creates
|
|
883
|
-
one fresh writable universe for each pertinent generated case. Lease grants
|
|
884
|
-
contain credential references resolved by the sandbox broker, never credential
|
|
885
|
-
values, and target replica resources only. Every run is keyed by exact
|
|
886
|
-
`generated_case_id`, `sandbox_id`, and `universe_incarnation_id`; each value is
|
|
887
|
-
unique in the wave. Fork, attach, and execute phases run in parallel. On partial
|
|
888
|
-
failure, release all attempted attachments before revoking all attempted leases
|
|
889
|
-
under the same absolute deadline. Record the step that injects an arbitrary
|
|
890
|
-
verification commit using the production-equivalent recipe; a pinned deployed
|
|
891
|
-
image alone is insufficient. Record measured generated-case fanout and
|
|
892
|
-
end-to-end hot p95 independently of the per-step estimates.
|
|
893
|
-
|
|
894
|
-
Two fields inside `materialization_plan` are required whenever the plan is
|
|
895
|
-
present, including when `readiness` is `blocked`, and are easy to miss because
|
|
896
|
-
they appear only in the fully-proven example above:
|
|
897
|
-
|
|
898
|
-
- every `cold_preparation.steps[]` entry carries `produces_prepared_state_ids`,
|
|
899
|
-
naming the prepared states that step yields (`[]` when it yields none); and
|
|
900
|
-
- `hot_launch.achieved_generated_case_fanout` records the measured fanout, or
|
|
901
|
-
`0` when nothing has been measured yet.
|
|
902
|
-
|
|
903
|
-
Omit `materialization_plan` entirely rather than inventing values for it.
|
|
904
|
-
|
|
905
|
-
Current repository truth is limited: the bounded customer-replica protocol,
|
|
906
|
-
binding store, connector lifecycle, sandbox relay, and generated-case
|
|
907
|
-
request/execution contracts exist. The default hosted generated-case path still
|
|
908
|
-
fails closed until reviewed runtime composition and principal-level network
|
|
909
|
-
isolation are production-qualified. The first S3 copy driver is
|
|
910
|
-
SDK-unit-qualified but not live cross-account qualified. The generic
|
|
911
|
-
deny-by-default interaction replica and stateful Stripe PaymentIntent behavior
|
|
912
|
-
emulator exist, but their production-template and control-plane startup wiring
|
|
913
|
-
remains pending. Provider discovery and end-to-end provider materialization
|
|
914
|
-
also remain pending. Do not promote readiness beyond `proposal` or `blocked`
|
|
915
|
-
from these implementation facts alone.
|
|
916
|
-
|
|
917
|
-
Both phases are stable-ID DAGs. Each step has integer `planned_typical_ms` and
|
|
918
|
-
`planned_high_ms` inputs. Sum each planning input along serial dependencies and
|
|
919
|
-
take the maximum parallel path as `planned_typical_critical_path_ms` and
|
|
920
|
-
`planned_high_critical_path_ms`. These are deterministic planning estimates:
|
|
921
|
-
the first is not a true expected makespan, and the second is not an observed or
|
|
922
|
-
statistical phase p95. Only `hot_launch.observed_end_to_end_p95_ms`, linked to
|
|
923
|
-
authoritative `probe_evidence_ids`, is an observed hot p95.
|
|
924
|
-
|
|
925
|
-
For `hot-path-proven`, the union of `subject_ids` across every cold and hot step
|
|
926
|
-
must include every mapped artifact, runtime role, resource, and external
|
|
927
|
-
dependency by exact stable ID. Each mapped artifact must have
|
|
928
|
-
`verification_commit.status: proven`. Each resource and external dependency
|
|
929
|
-
must have a concrete reproduction strategy rather than `unresolved`, with the
|
|
930
|
-
strategy-specific capability evidence and, for physical copies, the exact
|
|
931
|
-
resolved opaque binding required by this contract. This is the mechanical form
|
|
932
|
-
of the production-replication gate: a measured partial launch cannot silently
|
|
933
|
-
omit behavior-affecting inventory.
|
|
934
|
-
|
|
935
|
-
Readiness is independent of inventory review:
|
|
936
|
-
|
|
937
|
-
- `proposal`: the plan is structurally mapped but capabilities may be declared.
|
|
938
|
-
- `cold-preparable`: cold steps and freshness are adapter-verified.
|
|
939
|
-
- `hot-path-proven`: the hot path is materialization-probed, supports at least
|
|
940
|
-
`generated_case_fanout.target_n` without exceeding `hard_max_n`, injects an
|
|
941
|
-
arbitrary verification commit, enforces one fresh writable universe per
|
|
942
|
-
generated case, and fits `target_slo_ms`. Its typed probe record must link the
|
|
943
|
-
observed p95, achieved generated-case fanout, exact case/sandbox/incarnation
|
|
944
|
-
IDs, exercised commit, parallel phases, parent protection, single deadline,
|
|
945
|
-
and complete ordered cleanup.
|
|
946
|
-
- `blocked`: include a nonempty reason.
|
|
947
|
-
|
|
948
|
-
The subject-coverage and concrete-route gate applies only to
|
|
949
|
-
`hot-path-proven`. A complete inventory review may still pass while readiness
|
|
950
|
-
is `proposal`; that separation must not be represented as a materialization
|
|
951
|
-
proof.
|
|
952
|
-
|
|
953
|
-
Use `readiness.scope: synthetic-evaluation` for a synthetic qualification.
|
|
954
|
-
Its probe evidence uses `environment_scope: production-reference`. A
|
|
955
|
-
real-production proof instead requires authoritative `hosted-production` probe
|
|
956
|
-
evidence from a typed Haystack or provider materialization-probe result catalog;
|
|
957
|
-
repository-local or synthetic measurements never qualify.
|
|
958
|
-
|
|
959
|
-
### Census-only inventory rows
|
|
960
|
-
|
|
961
|
-
Inventory presence and semantic closure are separate claims. Under a partial
|
|
962
|
-
category, a repository-proven runtime role, stateful resource, or external
|
|
963
|
-
dependency may be retained before activation, consumer, ownership, state, and
|
|
964
|
-
reproduction decisions finish. Use this exact compact shape:
|
|
965
|
-
|
|
966
|
-
Unresolved discovery observations remain in `evidence.yml`, never in final
|
|
967
|
-
inventory arrays. Retain each exact source surface under
|
|
968
|
-
`coverage.operational_surface_census`, add its stable closure candidate, keep
|
|
969
|
-
the category partial, and name it in `uncovered` and a blocker. For example:
|
|
970
|
-
|
|
971
|
-
```yaml
|
|
972
|
-
coverage:
|
|
973
|
-
operational_surface_census:
|
|
974
|
-
status: partial
|
|
975
|
-
surfaces:
|
|
976
|
-
- id: surface-notification-worker
|
|
977
|
-
category: runtime_roles
|
|
978
|
-
surface_kind: runtime-entrypoint
|
|
979
|
-
frontier: deployment-runtime-units
|
|
980
|
-
identity_key: apps/notifications/worker.ts#startNotificationWorker
|
|
981
|
-
disposition: candidate
|
|
982
|
-
candidate_id: candidate-notification-worker
|
|
983
|
-
evidence_ids: [ev-notification-worker-census]
|
|
984
|
-
inventory_closure:
|
|
985
|
-
runtime_roles:
|
|
986
|
-
status: partial
|
|
987
|
-
candidates:
|
|
988
|
-
- id: candidate-notification-worker
|
|
989
|
-
disposition: pending
|
|
990
|
-
unresolved: [deployment-control-token]
|
|
991
|
-
evidence_ids: [ev-notification-worker-census]
|
|
992
|
-
uncovered: [candidate-notification-worker]
|
|
993
|
-
```
|
|
994
|
-
|
|
995
|
-
Final `services[].runtime_roles`, `resources`, and `external_dependencies` rows
|
|
996
|
-
require a proof-complete category identity tuple and never use
|
|
997
|
-
`trace_status: census-only`. Registry or manifest presence must still prove a
|
|
998
|
-
real production-capable surface; a package import, test fixture, documentation
|
|
999
|
-
mention, or arbitrary URL is not inventory evidence. Admit a runtime identity
|
|
1000
|
-
when its unit, controller kind/token, and entrypoint are exact; a state identity
|
|
1001
|
-
when its owner, address, reproduction kind/token are exact; and an external
|
|
1002
|
-
identity when its callsite, wrapper chain, boundary leaf, operation key, and
|
|
1003
|
-
destination/scope are exact. Activation, consumer reachability, backing state,
|
|
1004
|
-
hosted authority, and materialization readiness may remain unresolved on the
|
|
1005
|
-
final row while closure stays partial.
|
|
1006
|
-
|
|
1007
|
-
When consumer or activation tracing remains open, use `activation: optional`
|
|
1008
|
-
with `activation_basis.kind: unknown-production-state`,
|
|
1009
|
-
`runtime_role_ids: []`, and `consumer_edges: []`, then keep the category
|
|
1010
|
-
partial. This is an honest downstream unknown, not a claim that the exact
|
|
1011
|
-
identity is inactive. External remote ownership may likewise use the unresolved
|
|
1012
|
-
`backing_state` form while state closure remains partial.
|
|
1013
|
-
|
|
1014
|
-
### Resources and reproduction
|
|
1015
|
-
|
|
1016
|
-
Use exactly one `state_classification`:
|
|
1017
|
-
|
|
1018
|
-
- `canonical-durable`: authoritative mutable business state.
|
|
1019
|
-
- `derived-rebuildable`: indexes or projections rebuildable from canonical
|
|
1020
|
-
state, with the rebuild path evidenced.
|
|
1021
|
-
- `ephemeral-coordination`: locks, sessions, presence, and coordination state.
|
|
1022
|
-
- `in-flight-work`: queues, streams, retry backlogs, and scheduled work not yet
|
|
1023
|
-
applied to canonical state.
|
|
1024
|
-
- `immutable-external-asset`: immutable bytes or models obtained outside the
|
|
1025
|
-
application and pinned by identity.
|
|
1026
|
-
|
|
1027
|
-
Classification alone is insufficient. Add `state_policy` with these rules:
|
|
1028
|
-
|
|
1029
|
-
- `canonical-durable` uses `action: copy`.
|
|
1030
|
-
- `derived-rebuildable` uses `action: rebuild` and nonempty
|
|
1031
|
-
`source_resource_ids` that resolve to the source of truth.
|
|
1032
|
-
- `ephemeral-coordination` uses `action: reset`.
|
|
1033
|
-
- `in-flight-work` uses `action: preserve`, `drain`, or `discard`, plus a
|
|
1034
|
-
nonempty `rationale` that addresses accepted but unapplied work.
|
|
1035
|
-
- `immutable-external-asset` uses `action: pin` plus an opaque
|
|
1036
|
-
`immutable_asset_ref` and evidence of its immutable identity.
|
|
1037
|
-
|
|
1038
|
-
`canonical-durable` may never use `reproduction_operation_kind: mount`. A
|
|
1039
|
-
volume, bind mount, `VOLUME`, or directory declaration proves writable parent
|
|
1040
|
-
capacity, not preservation of independently keyed durable children. Record the
|
|
1041
|
-
exact child identities created or restored by source operations. Retain the
|
|
1042
|
-
parent as a resource only when source proves its own independently preserved
|
|
1043
|
-
content identity.
|
|
1044
|
-
|
|
1045
|
-
Every resource also has `state_owner.basis` and nonempty `evidence_ids`. The
|
|
1046
|
-
referenced decision-grade atomic `state-owner-boundary` claim has the resource
|
|
1047
|
-
as its exact subject set, repeats the basis in `state_owner_basis`, and records
|
|
1048
|
-
the matching typed operations in `state_owner_operation` and
|
|
1049
|
-
`reproduction_operation_kind`. The latter exactly matches the resource
|
|
1050
|
-
identity and the source tokens prove the real reproduction operation, not only
|
|
1051
|
-
its address or configuration:
|
|
1052
|
-
|
|
1053
|
-
- `application-persistence-boundary` / `open-read-write` identifies the code
|
|
1054
|
-
that opens, loads, or writes application state;
|
|
1055
|
-
- `repository-declared-mutable-state` / `named-mutable-namespace` identifies
|
|
1056
|
-
exact mutable tables, objects, topics, schemas, catalogs, identities,
|
|
1057
|
-
policies, registrations, or keys;
|
|
1058
|
-
- `operator-provisioned-writable-capacity` / `mount-or-path-provision`
|
|
1059
|
-
identifies separately provisioned writable capacity; and
|
|
1060
|
-
- `immutable-asset-identity` / `immutable-digest-or-version` is reserved for
|
|
1061
|
-
`immutable-external-asset`; and
|
|
1062
|
-
- `repository-proven-remote-state` / `named-remote-read` or
|
|
1063
|
-
`named-remote-write` identifies an exact typed durable operation on a named
|
|
1064
|
-
remote namespace in repository implementation code; and
|
|
1065
|
-
- `authoritative-catalog-state-owner` /
|
|
1066
|
-
`catalog-declared-mutable-resource` uses an opaque authoritative catalog
|
|
1067
|
-
source and `authority: authoritative` when repository code cannot establish
|
|
1068
|
-
the hosted state owner.
|
|
1069
|
-
|
|
1070
|
-
Client construction, endpoints, plugin/factory registration, provider names,
|
|
1071
|
-
generic API response sets, and discovery target groups do not prove any of these
|
|
1072
|
-
operations. A typed operation on the exact remote namespace can prove the
|
|
1073
|
-
repository remote-state basis. An exact read of an addressed configuration
|
|
1074
|
-
document, workload/instance metadata object, discovery record, identity or
|
|
1075
|
-
policy document, catalog, or remote manifest is a `named-remote-read` when its
|
|
1076
|
-
fields select topology, identity, routing, or runtime behavior that reproduction
|
|
1077
|
-
must preserve; read-only provider ownership does not erase that state concern.
|
|
1078
|
-
A resource still needs its independent `state_policy` and
|
|
1079
|
-
`reproduction` action. Each `derived-rebuildable` source additionally appears
|
|
1080
|
-
once in `state_policy.source_edges`, with a decision-grade atomic
|
|
1081
|
-
`rebuild-source-reachability` claim whose exact subjects are the derived
|
|
1082
|
-
resource and that source resource. A resolved ID list without those per-edge
|
|
1083
|
-
implementation paths is padding, not rebuild proof. Source resource IDs are
|
|
1084
|
-
unique; repeating an ID cannot stand in for another rebuild source.
|
|
1085
|
-
|
|
1086
|
-
Apply this taxonomy to resources and state, not to arbitrary external APIs.
|
|
1087
|
-
|
|
1088
|
-
Classify by reproduction concern, not network location. A database, directory,
|
|
1089
|
-
broker, queue, stream, object store, registry, secret store, model store, or
|
|
1090
|
-
search/log index that owns application-relevant state is a `resource`, including
|
|
1091
|
-
when a managed provider hosts it. When the application reaches that resource
|
|
1092
|
-
over a network protocol or API, also record an `external_dependency`: routing,
|
|
1093
|
-
capture/emulation, and production-isolation control are independent of copying
|
|
1094
|
-
the state. Local, embedded, in-process, and file-backed resources remain
|
|
1095
|
-
resource-only absent separate application egress.
|
|
1096
|
-
|
|
1097
|
-
Every external dependency therefore carries `backing_state` with nonempty
|
|
1098
|
-
`evidence_ids` and one disposition. At least one referenced decision-grade
|
|
1099
|
-
atomic evidence record must jointly name the exact external dependency ID and
|
|
1100
|
-
every linked resource ID as its exact `subject_ids`, use a locatable
|
|
1101
|
-
implementation-body source, and repeat the final basis in
|
|
1102
|
-
`external_backing_basis`. It also repeats the exact `external_operation` and,
|
|
1103
|
-
for named state, `remote_state_identity_key`; separate unlinked facts about a
|
|
1104
|
-
client and a store do not prove the boundary. The
|
|
1105
|
-
`authoritative-catalog-state-owner` basis requires
|
|
1106
|
-
`authority: authoritative` and an opaque catalog source:
|
|
1107
|
-
|
|
1108
|
-
- `none` means the entry is only an interaction reproduction concern and omits
|
|
1109
|
-
`resource_ids`; its `basis` is `interaction-only` or
|
|
1110
|
-
`remote-ownership-unproven`.
|
|
1111
|
-
- `covered-by-resources` means the interaction fronts application backing state
|
|
1112
|
-
and requires nonempty exact `resource_ids` resolving to the corresponding
|
|
1113
|
-
stateful resources; its `basis` is `repository-declared-state-owner`,
|
|
1114
|
-
`repository-proven-remote-state`, or `authoritative-catalog-state-owner`.
|
|
1115
|
-
|
|
1116
|
-
`resource_ids` is an exact set represented without duplicate IDs.
|
|
1117
|
-
|
|
1118
|
-
`backing_state.operation` is mandatory and is one of `named-remote-read`,
|
|
1119
|
-
`named-remote-write`, `named-remote-read-write`, `stateless-exchange`, or
|
|
1120
|
-
`unresolved`. A named operation is valid only with
|
|
1121
|
-
`covered-by-resources` and also requires a nonempty exact
|
|
1122
|
-
`remote_state_identity_key` naming the addressed object, namespace, or provider
|
|
1123
|
-
contract. `none/interaction-only` requires `stateless-exchange` and
|
|
1124
|
-
`none/remote-ownership-unproven` requires `unresolved`; those two operations
|
|
1125
|
-
omit `remote_state_identity_key`. Classify this operation before the
|
|
1126
|
-
disposition so a service client cannot erase the stable response object it
|
|
1127
|
-
reads. A remote response becomes mapped backing state only when exact evidence
|
|
1128
|
-
also proves an application-owned provision, preserve, reset, restore, replace,
|
|
1129
|
-
or recreate operation for that addressed object. Provider metadata, discovery
|
|
1130
|
-
records, identity or signing-key documents, downloaded user content, and
|
|
1131
|
-
operator-supplied remote inputs remain external interactions when the
|
|
1132
|
-
application only consumes them.
|
|
1133
|
-
|
|
1134
|
-
The matching claim kind is `state-boundary-link` for
|
|
1135
|
-
`covered-by-resources`, `external-interaction-boundary` for
|
|
1136
|
-
`none/interaction-only`, and `external-ownership-unresolved` for
|
|
1137
|
-
`none/remote-ownership-unproven`. Every resource linked by
|
|
1138
|
-
`covered-by-resources` must independently pass its own `state_owner` proof.
|
|
1139
|
-
|
|
1140
|
-
A configured endpoint, constructed client, or read operation does not establish
|
|
1141
|
-
state ownership or copyability. An exact typed durable operation on a named
|
|
1142
|
-
remote namespace may establish `repository-proven-remote-state` only when the
|
|
1143
|
-
resource also has a separate application-owned copy/rebuild/reset action.
|
|
1144
|
-
Otherwise use `none` with
|
|
1145
|
-
`remote-ownership-unproven` and keep stateful-resource closure `partial`; that
|
|
1146
|
-
basis records unresolved ownership and cannot support a complete claim.
|
|
1147
|
-
`interaction-only` requires evidence that no stable response object relevant to
|
|
1148
|
-
application-owned reproduction exists.
|
|
1149
|
-
An exact provider interface or factory contract that exposes durable
|
|
1150
|
-
create/read/write/delete/list operations over named backups, objects, buckets,
|
|
1151
|
-
collections, topics, streams, tables, indexes, identities, policies, or keys is
|
|
1152
|
-
a structured state discriminator for every reachable provider entry. Each entry
|
|
1153
|
-
creates its own pending state candidate by exact registry identity without
|
|
1154
|
-
requiring a repeated host literal or copy of the same interface trace. A
|
|
1155
|
-
network/API-backed provider also creates its external-interaction candidate;
|
|
1156
|
-
neither becomes final inventory until namespace, consumer, ownership, and
|
|
1157
|
-
reproduction semantics close. Join the two pending candidates immediately.
|
|
1158
|
-
Once both are closed, the same deterministic pass emits `backing_state:
|
|
1159
|
-
covered-by-resources`, links the exact provider-derived resource ID, and adds
|
|
1160
|
-
one joint `state-boundary-link` atomic evidence record whose subject set
|
|
1161
|
-
contains both IDs.
|
|
1162
|
-
Resolve it to `interaction-only` only when evidence establishes that the call
|
|
1163
|
-
has no separately reproduced backing state. Repository-selected mutable tables,
|
|
1164
|
-
objects, topics, schemas, catalogs, directory identities/groups, authorization
|
|
1165
|
-
policies, tenant registrations, and encryption keys do establish a state-owner concern;
|
|
1166
|
-
map that state and use `covered-by-resources` for the independently reproduced
|
|
1167
|
-
service interaction. Stateless inference, webhook, credential exchange, and
|
|
1168
|
-
arbitrary URL calls use `backing_state: none` only when implementation evidence
|
|
1169
|
-
shows no retained state relevant to reproduction. Persistent telemetry,
|
|
1170
|
-
log/metrics destinations, broker topics, object namespaces, identity/policy/key
|
|
1171
|
-
sets, and catalog namespaces remain resources when exact durable operations are
|
|
1172
|
-
proven. Ambiguity stays `remote-ownership-unproven`, never silently
|
|
1173
|
-
`interaction-only`. Backing-state `none` never means “exclude from egress.”
|
|
1174
|
-
|
|
1175
|
-
Top-level external identity follows the exact operation/object contract.
|
|
1176
|
-
It has a globally unique exact `operation_identity_key`, exact
|
|
1177
|
-
`operation_token`, and `boundary_contract_kind` equal to
|
|
1178
|
-
`outbound-operation-family`, `host-operation`, `required-inbound-listener`,
|
|
1179
|
-
`required-pull-listener`, or `bidirectional-operation-family`. Its atomic
|
|
1180
|
-
boundary evidence supports the exact operation token.
|
|
1181
|
-
That same atomic claim supports the concrete callsite token, every wrapper token
|
|
1182
|
-
for `wrapper-resolved`, and the leaf boundary token. An import, constructor,
|
|
1183
|
-
method declaration, local handle lookup, quoted command argument, or generic HTTP helper definition is
|
|
1184
|
-
not callsite proof. Begin from a reachable production consumer and follow its
|
|
1185
|
-
exact wrapper chain to the boundary.
|
|
1186
|
-
Different provider, scheme, or transport implementations of the same contract
|
|
1187
|
-
remain visible in selector registries but do not create duplicate operational
|
|
1188
|
-
rows. OS branches, wrappers, and consumers that invoke the same semantic call
|
|
1189
|
-
also merge. Different effectful operations remain distinct even when they share
|
|
1190
|
-
one client, provider, object family, or user flow. For example list,
|
|
1191
|
-
head/metadata, get/download, put/upload, copy, and delete are separate reachable
|
|
1192
|
-
object-store contracts; authorization redirect, token exchange, user-info,
|
|
1193
|
-
supplemental-data, signing-key, and content-download calls are likewise separate
|
|
1194
|
-
when present. A separately opened callback or redirect listener is its own
|
|
1195
|
-
required inbound contract. Required inbound clients, pull consumers, host
|
|
1196
|
-
services, registries/discovery services, and bidirectional peers are external
|
|
1197
|
-
reproduction interactions when exact source or topology evidence makes them
|
|
1198
|
-
necessary; interaction direction is not limited to application-opened egress.
|
|
1199
|
-
Runtime-invoked one-shot executables are also external dependencies when they
|
|
1200
|
-
cross the mapped application-runtime boundary. Managed child RPC wholly inside
|
|
1201
|
-
one mapped runtime remains internal.
|
|
1202
|
-
|
|
1203
|
-
Every final external row requires an exact boundary-crossing operation. Client
|
|
1204
|
-
constructors, authentication/configuration modes, protocol or scheme variants,
|
|
1205
|
-
local polling timers, retry loops, and wrappers that only build or call child
|
|
1206
|
-
handlers remain selector entries and do not become duplicate top-level
|
|
1207
|
-
dependencies. Their category projections are not applicable unless that exact
|
|
1208
|
-
branch performs its own independently addressed operation. Candidate identity
|
|
1209
|
-
is derived from the exact operation, object, and destination contract—not from
|
|
1210
|
-
the selector key or a requirement that every registry entry have a candidate.
|
|
1211
|
-
Host-operation rows represent one semantic effect family; do not bundle
|
|
1212
|
-
unrelated filesystem, environment, process, and subprocess calls.
|
|
1213
|
-
|
|
1214
|
-
Configuration inputs already represented by clone injection, generated logs
|
|
1215
|
-
and outputs, child scratch/lock files, and replaceable assets are not state
|
|
1216
|
-
resources unless their initial contents need a separate reproduction action.
|
|
1217
|
-
However, separately provisioned writable capacity remains a resource when a
|
|
1218
|
-
selected spill/cache feature requires its own mount or reset action even if the
|
|
1219
|
-
contents start empty. Process-local state also remains a resource when required
|
|
1220
|
-
behavior needs an explicit post-launch reload or seed action.
|
|
1221
|
-
|
|
1222
|
-
For example, a payment-provider API captured as behavior can use `none`; a
|
|
1223
|
-
managed database API recorded separately for protocol behavior must use
|
|
1224
|
-
`covered-by-resources` and link the database resource. A mapper may not replace
|
|
1225
|
-
the resource with the external entry.
|
|
1226
|
-
|
|
1227
|
-
Use only these `reproduction.strategy` values:
|
|
1228
|
-
|
|
1229
|
-
- `provider-native-fork`
|
|
1230
|
-
- `snapshot-restore`
|
|
1231
|
-
- `capture-replay`
|
|
1232
|
-
- `side-effect-sink`
|
|
1233
|
-
- `isolated-equivalent`
|
|
1234
|
-
- `unresolved`
|
|
1235
|
-
|
|
1236
|
-
Keep physical bindings as top-level stable records. Each logical resource uses
|
|
1237
|
-
`physical_binding_id`. Several logical databases, queues, buckets, or keyspaces
|
|
1238
|
-
may reference one physical binding without being collapsed into one logical
|
|
1239
|
-
record.
|
|
1240
|
-
|
|
1241
|
-
`provider-native-fork` and `snapshot-restore` require:
|
|
1242
|
-
|
|
1243
|
-
- nonempty `reproduction.capability_evidence_ids`;
|
|
1244
|
-
- a resolvable `physical_binding_id`;
|
|
1245
|
-
- binding `status: resolved` or `proven`;
|
|
1246
|
-
- nonempty binding `evidence_ids`; and
|
|
1247
|
-
- a nonempty binding `stable_resource_ref`.
|
|
1248
|
-
|
|
1249
|
-
`stable_resource_ref` is an opaque handle Haystack resolves for this
|
|
1250
|
-
checked-in artifact. Haystack may resolve it internally to a provider resource, and the bounded plan or golden
|
|
1251
|
-
descriptor may separately carry exact identities for validation, but this field
|
|
1252
|
-
must never expose a raw provider resource ID, ARN, production endpoint,
|
|
1253
|
-
credential, connection string, hostname containing credentials, or secret
|
|
1254
|
-
value.
|
|
1255
|
-
|
|
1256
|
-
`capture-replay` and `side-effect-sink` require nonempty capability evidence
|
|
1257
|
-
and must forbid live egress. Use `side-effect-sink` for outbound effects such
|
|
1258
|
-
as SMTP or push delivery that are captured but never replayed. Do not label a
|
|
1259
|
-
non-delivering sink as bidirectional capture/replay. `isolated-equivalent`
|
|
1260
|
-
requires both capability evidence and a nonempty `fidelity_gap`, for
|
|
1261
|
-
example:
|
|
1262
|
-
|
|
1263
|
-
```yaml
|
|
1264
|
-
reproduction:
|
|
1265
|
-
source: isolated-fixture
|
|
1266
|
-
strategy: isolated-equivalent
|
|
1267
|
-
fidelity_gap: Does not reproduce provider throttling or regional failover.
|
|
1268
|
-
writable: true
|
|
1269
|
-
```
|
|
1270
|
-
|
|
1271
|
-
Every ID in `capability_evidence_ids` must resolve to an evidence record with
|
|
1272
|
-
`claim_kind: materialization-capability`, `confidence: proven`, the logical
|
|
1273
|
-
resource in `subject_ids`, and at least one repository, replication
|
|
1274
|
-
catalog, or Haystack-adapter source. Never ingest a direct provider response.
|
|
1275
|
-
Evidence that merely proves an SDK client exists is not
|
|
1276
|
-
materialization-capability evidence.
|
|
1277
|
-
|
|
1278
|
-
Every materialization-capability record also declares:
|
|
1279
|
-
|
|
1280
|
-
- `operational_status: declared` for an authoritative catalog statement;
|
|
1281
|
-
- `operational_status: adapter-verified` after deterministic adapter
|
|
1282
|
-
qualification; or
|
|
1283
|
-
- `operational_status: materialization-probed` after a real isolated probe.
|
|
1284
|
-
|
|
1285
|
-
Set `latency_basis: assumed` for catalog estimates and `measured` only for
|
|
1286
|
-
measurements. Authority over a synthetic assumption may prove that the catalog
|
|
1287
|
-
declared it, but it cannot promote the capability to adapter-verified,
|
|
1288
|
-
materialization-probed, or real-production readiness.
|
|
1289
|
-
|
|
1290
|
-
Use `unresolved` when capability or binding evidence is missing. A blocked
|
|
1291
|
-
review does not permit a false concrete fork or snapshot claim.
|
|
1292
|
-
|
|
1293
|
-
An interface owned by one role uses `runtime_role_id`; one shared by multiple
|
|
1294
|
-
roles uses `runtime_role_ids`. Declare exactly one. Model caches, queues, object
|
|
1295
|
-
stores, search indexes, flags, identity, and event or analytics systems
|
|
1296
|
-
explicitly. Group state that needs the same production cut.
|
|
1297
|
-
|
|
1298
|
-
`canonical-durable` state may instead use `action: copy-with-transform` when the
|
|
1299
|
-
bytes are copied but changed on the way into the golden — masking production
|
|
1300
|
-
personal data, or re-keying columns encrypted under a production secret. It
|
|
1301
|
-
requires a `transform` mapping with `kind` (`mask`, `re-key`, or
|
|
1302
|
-
`mask-and-re-key`), a nonempty `rationale`, and a boolean `deterministic`. A
|
|
1303
|
-
non-deterministic transform re-randomizes every identity on each golden refresh,
|
|
1304
|
-
so cases that pin an identity break on every refresh:
|
|
1305
|
-
|
|
1306
|
-
```yaml
|
|
1307
|
-
state_policy:
|
|
1308
|
-
action: copy-with-transform
|
|
1309
|
-
transform:
|
|
1310
|
-
kind: mask-and-re-key
|
|
1311
|
-
deterministic: true
|
|
1312
|
-
rationale: >-
|
|
1313
|
-
Customer email and name columns are format-preserving masked under the
|
|
1314
|
-
golden's mask key; columns encrypted with the production application
|
|
1315
|
-
secret are re-keyed to the golden's sealed value.
|
|
1316
|
-
```
|
|
1317
|
-
|
|
1318
|
-
### Clone injection
|
|
1319
|
-
|
|
1320
|
-
An inventory says what exists. It does not say what a fresh universe needs
|
|
1321
|
-
injected in order to boot and behave like production. That material is the
|
|
1322
|
-
difference between a parts list and a running system, so `clone_injection` is
|
|
1323
|
-
required on every map that records semantically traced inventory, confirmed
|
|
1324
|
-
hosted scope or not. The compact authority-gate receipt and maps with no final
|
|
1325
|
-
inventory because all discovered candidates remain pending are exempt because
|
|
1326
|
-
neither claims that the inventory can yet boot.
|
|
1327
|
-
|
|
1328
|
-
It has exactly these eight categories, and each one is answered explicitly:
|
|
1329
|
-
|
|
1330
|
-
- `config_slots` — environment variables and config keys per resource
|
|
1331
|
-
- `dns_identity` — hostnames and URLs the application must answer to
|
|
1332
|
-
- `tls` — certificate, verification, and scheme requirements
|
|
1333
|
-
- `filesystem_mounts` — paths that must exist before a process starts
|
|
1334
|
-
- `secret_derived_material` — values that other material is derived from
|
|
1335
|
-
- `protocol_metadata` — advertised listeners, replica-set names, connection options
|
|
1336
|
-
- `runtime_generated_config` — configuration produced at boot or stored in the database
|
|
1337
|
-
- `build_time_config` — values frozen into an artifact at build time
|
|
1338
|
-
|
|
1339
|
-
Each category is a mapping with `status: declared` and a nonempty `entries`
|
|
1340
|
-
list, or `status: none` and a nonempty `reason`. Omitting a category is invalid.
|
|
1341
|
-
A category left silent is indistinguishable from one never investigated, and the
|
|
1342
|
-
holdout that motivated this section found agents reading a mount command and
|
|
1343
|
-
then not recording the mount because no field asked for it.
|
|
1344
|
-
|
|
1345
|
-
Every entry carries a stable `id`, nonempty `evidence_ids`, and a `materiality`.
|
|
1346
|
-
It may carry `runtime_role_ids`.
|
|
1347
|
-
|
|
1348
|
-
`materiality` states what the entry does to the replica, and is one of:
|
|
1349
|
-
|
|
1350
|
-
- `boot-required` — the process will not start, or cannot reach a resource,
|
|
1351
|
-
without it.
|
|
1352
|
-
- `binds-copied-state` — its value must match the production cut the golden was
|
|
1353
|
-
sealed from. A fresh value makes copied bytes unreadable or unaddressable.
|
|
1354
|
-
- `isolation-control` — it governs whether the replica can reach production
|
|
1355
|
-
systems. Getting it wrong causes real-world side effects.
|
|
1356
|
-
- `behavioural` — it changes observable behaviour, but the replica still runs.
|
|
1357
|
-
- `informational` — a real setting with no replica-relevant effect.
|
|
1358
|
-
|
|
1359
|
-
This field exists because coverage alone cannot tell a thorough map from a padded
|
|
1360
|
-
one. In one holdout pass a map went from 67 to 440 entries, every declared name
|
|
1361
|
-
real, and roughly two thirds of the additions were settings a materializer gains
|
|
1362
|
-
nothing from — while the same pass also carried fifteen entries that closed a gap
|
|
1363
|
-
no earlier round had closed. Both were true at once and the artifact had no field
|
|
1364
|
-
with which a consumer could separate them.
|
|
1365
|
-
|
|
1366
|
-
Declare `informational` honestly rather than omitting the entry or inflating its
|
|
1367
|
-
class. When the map declares at least one entry, `validate-universe --json`
|
|
1368
|
-
reports the mix under
|
|
1369
|
-
`summary.clone_injection_materiality`, so a map that is mostly `informational` is
|
|
1370
|
-
visible as such to anyone reading the result.
|
|
1371
|
-
|
|
1372
|
-
Three rules tie the injection surface to the inventory the map already asserts,
|
|
1373
|
-
so the two cannot drift apart:
|
|
1374
|
-
|
|
1375
|
-
1. Every name in a resource's `binding_names` must appear as a `config_slots`
|
|
1376
|
-
entry. Those names are how the application is told where the resource lives;
|
|
1377
|
-
listing a datastore and not injecting its connection variables produces a
|
|
1378
|
-
replica that starts and connects to nothing.
|
|
1379
|
-
2. Every runtime role must appear in at least one `config_slots` entry's
|
|
1380
|
-
`runtime_role_ids`. A role nothing configures cannot reach any resource.
|
|
1381
|
-
|
|
1382
|
-
Every resource and external dependency carries `activation` plus an
|
|
1383
|
-
`activation_basis` with nonempty `evidence_ids`:
|
|
1384
|
-
|
|
1385
|
-
- `active` — the selected deployment profile needs the store, or a fixed
|
|
1386
|
-
external path is reachable without first supplying configuration or state.
|
|
1387
|
-
- `optional` — a concrete gate must first select it. Analytics sinks, secondary
|
|
1388
|
-
audit stores, read replicas, configured providers, and tenant-supplied
|
|
1389
|
-
destinations are usually optional.
|
|
1390
|
-
|
|
1391
|
-
For `active`, `activation_basis.kind` is exactly one of:
|
|
1392
|
-
|
|
1393
|
-
- `boot-required`
|
|
1394
|
-
- `selected-profile-required`
|
|
1395
|
-
- `startup-path`
|
|
1396
|
-
- `background-default`
|
|
1397
|
-
- `default-request-path`
|
|
1398
|
-
|
|
1399
|
-
For `optional`, it is exactly one of:
|
|
1400
|
-
|
|
1401
|
-
- `profile-excluded`
|
|
1402
|
-
- `feature-flag`
|
|
1403
|
-
- `driver-selection`
|
|
1404
|
-
- `operator-configuration`
|
|
1405
|
-
- `administrator-action`
|
|
1406
|
-
- `credential`
|
|
1407
|
-
- `tenant-state`
|
|
1408
|
-
- `user-supplied-destination`
|
|
1409
|
-
- `artifact-excluded`
|
|
1410
|
-
- `failure-tolerated`
|
|
1411
|
-
- `unknown-production-state`
|
|
1412
|
-
|
|
1413
|
-
A fixed destination reached when an ordinary request invokes an already-enabled
|
|
1414
|
-
capability may use `default-request-path`. A webhook, remote, provider record,
|
|
1415
|
-
or URL supplied by a user or tenant uses `user-supplied-destination` or
|
|
1416
|
-
`tenant-state`: that destination does not exist until the state is created.
|
|
1417
|
-
Registration, a default endpoint constant, or client construction alone never
|
|
1418
|
-
proves an active path. Before marking a path optional, inspect the selected
|
|
1419
|
-
artifact's baked and default configuration: a shipped default is active even
|
|
1420
|
-
when an operator may override it. Use the proximate selecting gate.
|
|
1421
|
-
Operator-supplied URIs and implementation enums use `operator-configuration`;
|
|
1422
|
-
driver choices use `driver-selection`; `user-supplied-destination` is reserved
|
|
1423
|
-
for destinations supplied by an end user or tenant. Do not use `credential`
|
|
1424
|
-
when credentials merely authenticate a path already selected by configuration.
|
|
1425
|
-
|
|
1426
|
-
For a resource, ask whether the selected profile boots and serves without the
|
|
1427
|
-
store, not how important its data looks. For an external dependency, trace
|
|
1428
|
-
whether a fixed destination is reached before any profile, credential,
|
|
1429
|
-
administrator, tenant-state, or user-supplied-destination gate. `activation`
|
|
1430
|
-
and `state_classification` answer different questions: an append-only analytics
|
|
1431
|
-
sink can be genuinely `canonical-durable` and still `optional`. Classify state
|
|
1432
|
-
honestly and let `activation` carry the reachability decision; do not downgrade
|
|
1433
|
-
a durable store to `derived-rebuildable` just to mark it optional.
|
|
1434
|
-
|
|
1435
|
-
3. Every `activation: active` deployment profile must have at least one runtime
|
|
1436
|
-
role declaring it. A profile that runs nothing is an empty shell; record it
|
|
1437
|
-
under `alternate_topologies` instead.
|
|
1438
|
-
|
|
1439
|
-
`secret_derived_material` additionally requires a `disposition`:
|
|
1440
|
-
|
|
1441
|
-
- `seal-with-golden` — the replica must receive the exact value the golden was
|
|
1442
|
-
sealed with, because copied bytes are unreadable without it;
|
|
1443
|
-
- `scrub-and-reset` — the protected data is cleared or re-keyed during cold
|
|
1444
|
-
preparation, so a fresh value is safe;
|
|
1445
|
-
- `rotate-freely` — nothing durable depends on the value.
|
|
1446
|
-
|
|
1447
|
-
The first two also require nonempty `bound_to_resource_ids` naming the resources
|
|
1448
|
-
whose copied bytes depend on the value. This is the binding that prevents a
|
|
1449
|
-
materializer from minting a fresh secret and silently rendering copied data
|
|
1450
|
-
unreadable.
|
|
1451
|
-
|
|
1452
|
-
Clone injection records delivery, not ownership. If an exact stable key,
|
|
1453
|
-
certificate, salt, or identity must survive to preserve authentication,
|
|
1454
|
-
decryption, or signature behavior, map the corresponding durable or immutable
|
|
1455
|
-
identity as a resource too. Use `rotate-freely` only when no copied behavior
|
|
1456
|
-
depends on the exact value.
|
|
1457
|
-
|
|
1458
|
-
```yaml
|
|
1459
|
-
clone_injection:
|
|
1460
|
-
config_slots:
|
|
1461
|
-
status: declared
|
|
1462
|
-
entries:
|
|
1463
|
-
- id: inj-database-url
|
|
1464
|
-
name: DATABASE_URL
|
|
1465
|
-
runtime_role_ids: [checkout-http-role]
|
|
1466
|
-
evidence_ids: [ev-checkout-clients]
|
|
1467
|
-
materiality: boot-required
|
|
1468
|
-
- id: inj-events-url
|
|
1469
|
-
name: EVENTS_URL
|
|
1470
|
-
runtime_role_ids: [checkout-http-role]
|
|
1471
|
-
evidence_ids: [ev-checkout-clients]
|
|
1472
|
-
materiality: boot-required
|
|
1473
|
-
dns_identity:
|
|
1474
|
-
status: declared
|
|
1475
|
-
entries:
|
|
1476
|
-
- id: inj-public-url
|
|
1477
|
-
name: URL
|
|
1478
|
-
evidence_ids: [ev-checkout-routes]
|
|
1479
|
-
materiality: isolation-control
|
|
1480
|
-
tls:
|
|
1481
|
-
status: none
|
|
1482
|
-
reason: All datastore connections terminate on a loopback listener inside the sandbox.
|
|
1483
|
-
filesystem_mounts:
|
|
1484
|
-
status: declared
|
|
1485
|
-
entries:
|
|
1486
|
-
- id: inj-config-mount
|
|
1487
|
-
path: /app/pythonpath
|
|
1488
|
-
evidence_ids: [ev-checkout-entrypoint]
|
|
1489
|
-
materiality: boot-required
|
|
1490
|
-
secret_derived_material:
|
|
1491
|
-
status: declared
|
|
1492
|
-
entries:
|
|
1493
|
-
- id: inj-secret-key
|
|
1494
|
-
name: SECRET_KEY
|
|
1495
|
-
disposition: seal-with-golden
|
|
1496
|
-
bound_to_resource_ids: [orders-db]
|
|
1497
|
-
evidence_ids: [ev-orders-column-encryption]
|
|
1498
|
-
materiality: binds-copied-state
|
|
1499
|
-
protocol_metadata:
|
|
1500
|
-
status: none
|
|
1501
|
-
reason: Single-endpoint TCP profile; no broker metadata or replica-set identity.
|
|
1502
|
-
runtime_generated_config:
|
|
1503
|
-
status: none
|
|
1504
|
-
reason: All configuration arrives as environment variables at process start.
|
|
1505
|
-
build_time_config:
|
|
1506
|
-
status: declared
|
|
1507
|
-
entries:
|
|
1508
|
-
- id: inj-asset-manifest
|
|
1509
|
-
name: manifest.json
|
|
1510
|
-
evidence_ids: [ev-checkout-image-ci]
|
|
1511
|
-
materiality: behavioural
|
|
1512
|
-
```
|
|
1513
|
-
|
|
1514
|
-
## `behaviors.yml`
|
|
1515
|
-
|
|
1516
|
-
This file maps the things a customer can actually do. It does not repeat
|
|
1517
|
-
runtime processes from `universe.yml`: one mapped interface can expose many
|
|
1518
|
-
separate actions. Every action references an exact universe interface and
|
|
1519
|
-
repository evidence. Its handler and observable boundaries use the same
|
|
1520
|
-
framed SHA-256 identity protocol as runtime instrumentation and blast-radius
|
|
1521
|
-
telemetry targets.
|
|
1522
|
-
|
|
1523
|
-
```yaml
|
|
1524
|
-
version: 1
|
|
1525
|
-
schema_version: haystack-behavior-map-v1
|
|
1526
|
-
repository: acme/commerce
|
|
1527
|
-
source_commit: 0123456789abcdef0123456789abcdef01234567
|
|
1528
|
-
actions:
|
|
1529
|
-
- id: action-a5f53f7b206d38cc97db5d53
|
|
1530
|
-
interface_id: checkout-http
|
|
1531
|
-
trigger:
|
|
1532
|
-
kind: http
|
|
1533
|
-
method: POST
|
|
1534
|
-
route_template: /orders
|
|
1535
|
-
handler:
|
|
1536
|
-
symbol_id: symbol-91331f53480d298b9a59162d
|
|
1537
|
-
source_path: apps/checkout/orders.ts
|
|
1538
|
-
qualified_name: Orders.create
|
|
1539
|
-
observable_boundaries:
|
|
1540
|
-
- id: boundary-a439957515ba833bac1c01c5
|
|
1541
|
-
kind: response
|
|
1542
|
-
identity_key: http:POST:/orders:response
|
|
1543
|
-
- id: boundary-84bb30f99b29bb529122adc1
|
|
1544
|
-
kind: state
|
|
1545
|
-
identity_key: database:orders:row
|
|
1546
|
-
evidence_ids:
|
|
1547
|
-
- ev-checkout-create-order-route
|
|
1548
|
-
- ev-orders-write
|
|
1549
|
-
```
|
|
1550
|
-
|
|
1551
|
-
Supported triggers are `http`, `event`, `job`, `cli`, and `ui`. HTTP triggers
|
|
1552
|
-
use `method` plus `route_template`; event triggers use `channel_identity` plus
|
|
1553
|
-
`event_type`; the remaining triggers use `job_identity`, `command_identity`,
|
|
1554
|
-
or `action_identity` respectively.
|
|
1555
|
-
|
|
1556
|
-
Supported observable boundary kinds are `response`, `state`, `event`,
|
|
1557
|
-
`external`, `ui`, `cli`, and `job`. An action must name at least one stable
|
|
1558
|
-
customer-relevant boundary. Source line numbers are evidence coordinates, not
|
|
1559
|
-
identities, and never belong in an identity key.
|
|
1560
|
-
|
|
1561
|
-
Run `haystack skills validate-behaviors --json`. It derives every action,
|
|
1562
|
-
symbol, and boundary ID again; verifies the source commit matches
|
|
1563
|
-
`universe.yml`; and checks interface and evidence references by exact ID.
|
|
1564
|
-
Display names and similar-looking text never repair a broken join. The command
|
|
1565
|
-
accepts the same 33554432-byte bound as the universe validator and uses the
|
|
1566
|
-
current directory when a sealed source archive intentionally has no Git metadata.
|
|
1567
|
-
|
|
1568
|
-
## `evidence.yml`
|
|
1569
|
-
|
|
1570
|
-
Completion requires a verifier-owned deterministic source census. Run
|
|
1571
|
-
`haystack skills census-universe --json` twice on the unchanged retained
|
|
1572
|
-
repository. The validator recomputes the result when repository context is
|
|
1573
|
-
available. The receipt separately copies the pinned 40-hex `source_commit`,
|
|
1574
|
-
source-manifest digest, exact counts, and sorted presumptive record IDs for all
|
|
1575
|
-
six operational and registry projections. Every listed operational ID
|
|
1576
|
-
appears exactly once in that category's candidates under
|
|
1577
|
-
`source_census_record_ids`; the candidate's ordinary mapped/excluded/pending
|
|
1578
|
-
contract then decides its semantics. Human-discovered candidates may omit this
|
|
1579
|
-
field, but census-produced identities may not.
|
|
1580
|
-
|
|
1581
|
-
`.haystack/` is excluded from the retained-source manifest even when generated
|
|
1582
|
-
artifacts have been staged or tracked. The census must not observe its own
|
|
1583
|
-
outputs. In a source-only snapshot without Git metadata, the command may report
|
|
1584
|
-
`source_commit: null`; the receipt uses the already pinned
|
|
1585
|
-
`map_revision.source_commit` while retaining the command's exact manifest and
|
|
1586
|
-
record digests, counts, and projection IDs.
|
|
1587
|
-
|
|
1588
|
-
Revision 39 makes each record's `proof_status` authoritative. A
|
|
1589
|
-
`proof-complete` record must have an empty `missing_proof_components`, maps
|
|
1590
|
-
exactly once in every declared projection, and cannot share its final with
|
|
1591
|
-
another record. Every operational final repeats `source_census_record_id`,
|
|
1592
|
-
`semantic_identity_id`, optional `execution_identity_id`, and the exact ordered
|
|
1593
|
-
`identity_components` tuple. Operational `discovery-lead` records are
|
|
1594
|
-
presumptive and also reconcile exactly once. They map only after the ordinary
|
|
1595
|
-
final contract supplies exact source-grounded identity proof, repeat
|
|
1596
|
-
`source_census_record_id`, preserve any partial identity components already
|
|
1597
|
-
known, and cite repository evidence at the census source path with every
|
|
1598
|
-
material token from its source anchor; otherwise they receive an exact evidenced
|
|
1599
|
-
exclusion. An operational discovery lead may be excluded only with
|
|
1600
|
-
`exclusion_basis: parent-runtime-unreachable` and atomic evidence for the exact
|
|
1601
|
-
census source path and tokens. Generic nonproduction, internal, duplicate, or
|
|
1602
|
-
non-independent relabeling is invalid. They cannot remain
|
|
1603
|
-
pending at `inventory-complete`. A `non-inventory` record cannot justify a final.
|
|
1604
|
-
Broad observations never close multiple identities;
|
|
1605
|
-
aliases remain separate exact selector rows unless the census supplies an
|
|
1606
|
-
explicit stable-ID derivation.
|
|
1607
|
-
|
|
1608
|
-
Proof-complete runtime tuples include exact production provenance, controller,
|
|
1609
|
-
entrypoint, and lifecycle. Workflow jobs are runtime roles only with
|
|
1610
|
-
`controller_kind: workflow`, `production_operational_unit: "true"`, and a
|
|
1611
|
-
`production_effect_kind` of `deploy`, `schedule`, or `supervise`; publication
|
|
1612
|
-
and build work alone are not application runtimes. External HTTP, process, GUI,
|
|
1613
|
-
and host tuples preserve exact target, object, and flow stage. Process tuples
|
|
1614
|
-
also preserve executable, ordered `argv`, and wait semantics. Missing values
|
|
1615
|
-
keep a row a discovery lead instead of authorizing a broad final.
|
|
1616
|
-
|
|
1617
|
-
Revision 39 emits typed `registry_families`, `registry_entries`, and
|
|
1618
|
-
`registry_edges`. A typed entry preserves `selector_family_record_id`; an edge
|
|
1619
|
-
preserves `parent_selector_entry_record_id`, `child_selector_family_record_id`,
|
|
1620
|
-
and `relation_kind`. Use those stable record IDs to retain owner boundaries and
|
|
1621
|
-
nested selector structure. Never flatten entries across family IDs or declare a
|
|
1622
|
-
leaf when the census gives that entry an outgoing edge. Broad conditional and
|
|
1623
|
-
ternary records remain discovery leads; explicit Vue component/directive,
|
|
1624
|
-
Java annotation, serialization, Spring bean-alternative, and Maven execution
|
|
1625
|
-
records are the authoritative selector identities.
|
|
1626
|
-
|
|
1627
|
-
Every proof-complete registry family and entry has exactly one
|
|
1628
|
-
`source_census_record_id` join. Entries remain in their census family and keep
|
|
1629
|
-
their exact selector and implementation keys. Declared child edges must equal
|
|
1630
|
-
the proof-complete census edge set; an empty child list cannot override an
|
|
1631
|
-
outgoing edge. For large ledgers, `census_rehydration: exact` allows a family or
|
|
1632
|
-
entry to omit duplicated typed-identity and source-evidence fields while the
|
|
1633
|
-
validator recomputes them from the pinned census. It may also upgrade discovery
|
|
1634
|
-
registry observations after source-wide proof, provided the family preserves
|
|
1635
|
-
the census owner and each entry preserves its exact selector and implementation
|
|
1636
|
-
keys. Each discovery family and entry also cites atomic evidence for its census
|
|
1637
|
-
source path and material tokens. Semantic `category_projections` may remain partial at
|
|
1638
|
-
`inventory-complete`; `final-receipt` still requires full category links and a
|
|
1639
|
-
child-registry or evidenced leaf decision.
|
|
1640
|
-
|
|
1641
|
-
`python-executable-entrypoint-role`, `workflow-controlled-runtime-unit`,
|
|
1642
|
-
`python-embedded-configuration-state`, and `python-embedded-template-state`
|
|
1643
|
-
remain deterministic census candidates rather than proof-complete finals. Map
|
|
1644
|
-
them when exact production provenance proves the runtime or state identity;
|
|
1645
|
-
otherwise reconcile each one through an exact evidenced exclusion. In
|
|
1646
|
-
particular, an admin/build/test entrypoint and an ordinary constant or rendering
|
|
1647
|
-
template must not be promoted solely because the scanner found its syntax.
|
|
1648
|
-
|
|
1649
|
-
Other generic call-signature census records remain discovery leads. Map one
|
|
1650
|
-
only after exact source establishes its owner, operation, receiver boundary,
|
|
1651
|
-
address or object, and stage. A final whose only meaning is "census operation"
|
|
1652
|
-
or "host service" is invalid; expand browser-model, SDK, module-loader,
|
|
1653
|
-
resource-pull, callback-registration, file/stream, and imported-package calls
|
|
1654
|
-
to their exact structured identities.
|
|
1655
|
-
|
|
1656
|
-
```yaml
|
|
1657
|
-
version: 1
|
|
1658
|
-
inspection_policy:
|
|
1659
|
-
test_path_isolation:
|
|
1660
|
-
enforced: true
|
|
1661
|
-
primary_mechanism: path-aware-tool-exclusions
|
|
1662
|
-
reviewer_mechanism: tracked-files-filtered-snapshot-and-filesystem-confinement
|
|
1663
|
-
denied_components:
|
|
1664
|
-
- .haystack
|
|
1665
|
-
- __tests__
|
|
1666
|
-
- test
|
|
1667
|
-
- tests
|
|
1668
|
-
- e2e
|
|
1669
|
-
- cypress
|
|
1670
|
-
- playwright
|
|
1671
|
-
- testdata
|
|
1672
|
-
- test-data
|
|
1673
|
-
- integration-test
|
|
1674
|
-
- integration-tests
|
|
1675
|
-
- integration_test
|
|
1676
|
-
- integration_tests
|
|
1677
|
-
- acceptance-test
|
|
1678
|
-
- acceptance-tests
|
|
1679
|
-
- acceptance_test
|
|
1680
|
-
- acceptance_tests
|
|
1681
|
-
- system-test
|
|
1682
|
-
- system-tests
|
|
1683
|
-
- system_test
|
|
1684
|
-
- system_tests
|
|
1685
|
-
- test-results
|
|
1686
|
-
- playwright-report
|
|
1687
|
-
- .pytest_cache
|
|
1688
|
-
- .nyc_output
|
|
1689
|
-
conditional_component_rules:
|
|
1690
|
-
- id: detected-framework-roots
|
|
1691
|
-
components: [spec, specs, fixtures, __fixtures__, mocks, __mocks__, snapshots, __snapshots__]
|
|
1692
|
-
condition: matching-test-framework-and-test-root-detected
|
|
1693
|
-
activated_conditional_rule_ids: [detected-framework-roots]
|
|
1694
|
-
denied_basename_globs:
|
|
1695
|
-
- "*.test.{js,jsx,ts,tsx,mjs,cjs}"
|
|
1696
|
-
- "*.spec.{js,jsx,ts,tsx,mjs,cjs,rb}"
|
|
1697
|
-
- "*.e2e.{js,jsx,ts,tsx}"
|
|
1698
|
-
- "*.e2e-spec.{js,jsx,ts,tsx}"
|
|
1699
|
-
- "test-*.{js,jsx,ts,tsx,py,rb,go,rs}"
|
|
1700
|
-
- "*-test.{js,jsx,ts,tsx,py,rb,go,rs}"
|
|
1701
|
-
- "*_test.{py,go,rs,cc,cpp}"
|
|
1702
|
-
- "*_tests.{py,rb}"
|
|
1703
|
-
- "test_*.py"
|
|
1704
|
-
- "*_unittest.{cc,cpp,py}"
|
|
1705
|
-
- "*Test.{java,kt,kts,scala,groovy,cs,php,swift}"
|
|
1706
|
-
- "*Tests.{java,kt,kts,scala,groovy,cs,php,swift}"
|
|
1707
|
-
- "*.{snap,golden,approved}"
|
|
1708
|
-
- "{jest,vitest,playwright,cypress}.config.*"
|
|
1709
|
-
- "karma.conf.*"
|
|
1710
|
-
- "mocha.config.*"
|
|
1711
|
-
- "pytest.ini"
|
|
1712
|
-
- "tox.ini"
|
|
1713
|
-
- ".coveragerc"
|
|
1714
|
-
- "junit*.xml"
|
|
1715
|
-
reviewer_snapshot:
|
|
1716
|
-
preparation_command:
|
|
1717
|
-
executable: haystack
|
|
1718
|
-
arguments: [skills, prepare-universe-review, --json]
|
|
1719
|
-
exclude_inactive_submodule_paths: []
|
|
1720
|
-
preparation_status: ready-for-confinement
|
|
1721
|
-
manifest_digest: sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
|
|
1722
|
-
git_metadata_included: false
|
|
1723
|
-
network_disabled: true
|
|
1724
|
-
symlink_audit: passed
|
|
1725
|
-
safe_symlinks_materialized_as_regular_files: true
|
|
1726
|
-
inline_test_detector: language-aware
|
|
1727
|
-
inline_test_audit: passed
|
|
1728
|
-
coverage:
|
|
1729
|
-
scanned_roots: [apps, packages, infra, deploy]
|
|
1730
|
-
deterministic_identity_census:
|
|
1731
|
-
schema_version: cloud-verifier-identity-census-v1
|
|
1732
|
-
contract_revision: 39
|
|
1733
|
-
command: haystack skills census-universe --json
|
|
1734
|
-
source_commit: 0123456789abcdef0123456789abcdef01234567
|
|
1735
|
-
source_manifest_digest: sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
|
|
1736
|
-
first_record_digest: sha256:123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0
|
|
1737
|
-
second_record_digest: sha256:123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0
|
|
1738
|
-
tracked_files_total: 412
|
|
1739
|
-
production_files_scanned: 287
|
|
1740
|
-
records_total: 3
|
|
1741
|
-
presumptive_inventory_total: 3
|
|
1742
|
-
projection_record_ids:
|
|
1743
|
-
runtime_roles: []
|
|
1744
|
-
stateful_resources:
|
|
1745
|
-
- census-state-address-declaration-0123456789abcdef0123
|
|
1746
|
-
- census-state-address-declaration-123456789abcdef01234
|
|
1747
|
-
external_dependencies:
|
|
1748
|
-
- census-client-boundary-operation-23456789abcdef012345
|
|
1749
|
-
registry_families: []
|
|
1750
|
-
registry_entries: []
|
|
1751
|
-
registry_edges: []
|
|
1752
|
-
excluded_paths:
|
|
1753
|
-
- path: .haystack/**
|
|
1754
|
-
reason: prior-haystack-artifacts-hidden
|
|
1755
|
-
- path: "**/tests/**"
|
|
1756
|
-
reason: existing-tests-hidden
|
|
1757
|
-
source_kinds: [application-source, terraform, kubernetes, ci-build]
|
|
1758
|
-
external_integration_scope:
|
|
1759
|
-
method: all-repository-supported-capabilities
|
|
1760
|
-
status: complete
|
|
1761
|
-
excluded_optional_profile_ids: []
|
|
1762
|
-
evidence_ids: [ev-external-capability-scope]
|
|
1763
|
-
inventory_closure:
|
|
1764
|
-
runtime_roles:
|
|
1765
|
-
status: complete
|
|
1766
|
-
candidates:
|
|
1767
|
-
- id: candidate-checkout-entrypoint
|
|
1768
|
-
disposition: mapped
|
|
1769
|
-
subject_ids: [checkout-http-role]
|
|
1770
|
-
evidence_ids: [ev-checkout-entrypoint]
|
|
1771
|
-
structured_registry_discovery:
|
|
1772
|
-
status: complete
|
|
1773
|
-
evidence_ids: [ev-checkout-entrypoint]
|
|
1774
|
-
registries: []
|
|
1775
|
-
absence_reason: No structured runtime-role registry is present.
|
|
1776
|
-
uncovered: []
|
|
1777
|
-
uncovered: []
|
|
1778
|
-
stateful_resources:
|
|
1779
|
-
status: complete
|
|
1780
|
-
candidates:
|
|
1781
|
-
- id: candidate-orders-database
|
|
1782
|
-
disposition: mapped
|
|
1783
|
-
subject_ids: [orders-db]
|
|
1784
|
-
evidence_ids: [ev-orders-db-client]
|
|
1785
|
-
- id: candidate-order-event-log
|
|
1786
|
-
disposition: mapped
|
|
1787
|
-
subject_ids: [order-events]
|
|
1788
|
-
evidence_ids: [ev-order-topic]
|
|
1789
|
-
state_surface_discovery:
|
|
1790
|
-
status: complete
|
|
1791
|
-
evidence_ids: [ev-orders-db-client, ev-order-topic]
|
|
1792
|
-
entries:
|
|
1793
|
-
- id: state-surface-orders-database-url
|
|
1794
|
-
surface_kind: config-key
|
|
1795
|
-
identity_key: DATABASE_URL
|
|
1796
|
-
disposition: candidate
|
|
1797
|
-
candidate_id: candidate-orders-database
|
|
1798
|
-
evidence_ids: [ev-orders-db-client]
|
|
1799
|
-
- id: state-surface-order-events-topic
|
|
1800
|
-
surface_kind: config-key
|
|
1801
|
-
identity_key: ORDER_EVENTS_TOPIC
|
|
1802
|
-
disposition: candidate
|
|
1803
|
-
candidate_id: candidate-order-event-log
|
|
1804
|
-
evidence_ids: [ev-order-topic]
|
|
1805
|
-
uncovered: []
|
|
1806
|
-
logical_state_census:
|
|
1807
|
-
status: complete
|
|
1808
|
-
evidence_ids: [ev-logical-state-orders, ev-logical-state-events]
|
|
1809
|
-
entries:
|
|
1810
|
-
- id: logical-state-orders-database
|
|
1811
|
-
logical_kind: configured-state-leaf
|
|
1812
|
-
identity_key: orders-database
|
|
1813
|
-
materialization_root_identity_key: DATABASE_URL
|
|
1814
|
-
source_owner_identity_key: createOrdersDatabase
|
|
1815
|
-
key_components: [DATABASE_URL]
|
|
1816
|
-
mutation_operations: [create, update, delete]
|
|
1817
|
-
state_surface_ids: [state-surface-orders-database-url]
|
|
1818
|
-
contained_identity_disposition: none-proven
|
|
1819
|
-
contained_logical_state_ids: []
|
|
1820
|
-
contained_identity_reason: The database handle exposes no independently keyed child identity at this boundary.
|
|
1821
|
-
contained_identity_evidence_ids: [ev-logical-state-orders-contained]
|
|
1822
|
-
disposition: candidate
|
|
1823
|
-
candidate_id: candidate-orders-database
|
|
1824
|
-
evidence_ids: [ev-logical-state-orders]
|
|
1825
|
-
- id: logical-state-order-events
|
|
1826
|
-
logical_kind: namespace-record
|
|
1827
|
-
identity_key: order-events-v2
|
|
1828
|
-
materialization_root_identity_key: ORDER_EVENTS_TOPIC
|
|
1829
|
-
source_owner_identity_key: publishOrderEvent
|
|
1830
|
-
key_components: [ORDER_EVENTS_TOPIC, order-id]
|
|
1831
|
-
mutation_operations: [append]
|
|
1832
|
-
state_surface_ids: [state-surface-order-events-topic]
|
|
1833
|
-
contained_identity_disposition: none-proven
|
|
1834
|
-
contained_logical_state_ids: []
|
|
1835
|
-
contained_identity_reason: Event payload identity is already the exact row key and contains no nested durable collection.
|
|
1836
|
-
contained_identity_evidence_ids: [ev-logical-state-events-contained]
|
|
1837
|
-
disposition: candidate
|
|
1838
|
-
candidate_id: candidate-order-event-log
|
|
1839
|
-
evidence_ids: [ev-logical-state-events]
|
|
1840
|
-
uncovered: []
|
|
1841
|
-
structured_registry_discovery:
|
|
1842
|
-
status: complete
|
|
1843
|
-
evidence_ids: [ev-orders-db-client, ev-order-topic]
|
|
1844
|
-
registries: []
|
|
1845
|
-
absence_reason: No structured state-resource registry is present.
|
|
1846
|
-
uncovered: []
|
|
1847
|
-
uncovered: []
|
|
1848
|
-
external_dependencies:
|
|
1849
|
-
status: complete
|
|
1850
|
-
candidates:
|
|
1851
|
-
- id: candidate-payments-client
|
|
1852
|
-
disposition: mapped
|
|
1853
|
-
subject_ids: [payments-api]
|
|
1854
|
-
evidence_ids: [ev-payments-client]
|
|
1855
|
-
structured_registry_discovery:
|
|
1856
|
-
status: complete
|
|
1857
|
-
evidence_ids: [ev-payments-client]
|
|
1858
|
-
registries:
|
|
1859
|
-
- id: registry-integration-clients
|
|
1860
|
-
root: true
|
|
1861
|
-
owner_identity_key: integration-client-factory
|
|
1862
|
-
selector_domain: integration-client-kind
|
|
1863
|
-
selection_gate:
|
|
1864
|
-
kind: map-lookup
|
|
1865
|
-
owner_token: integrationClientFactory
|
|
1866
|
-
selector_token: integrationKind
|
|
1867
|
-
dispatch_token: supportedIntegrations[integrationKind]
|
|
1868
|
-
dispatch_semantics: selective-dispatch
|
|
1869
|
-
runtime_consumer_token: createIntegrationClient
|
|
1870
|
-
source_origin: application-owned
|
|
1871
|
-
enumeration_method: static-structure
|
|
1872
|
-
fallback_default: payments
|
|
1873
|
-
status: complete
|
|
1874
|
-
evidence_ids: [ev-integration-client-selection-gate]
|
|
1875
|
-
entries:
|
|
1876
|
-
- id: registry-entry-payments-client
|
|
1877
|
-
selector_key: payments
|
|
1878
|
-
selector_token: '"payments"'
|
|
1879
|
-
selection_predicate: integration-kind == payments
|
|
1880
|
-
implementation_key: payments-client
|
|
1881
|
-
implementation_token: createPaymentsClient
|
|
1882
|
-
category_links:
|
|
1883
|
-
runtime_roles:
|
|
1884
|
-
disposition: not-applicable
|
|
1885
|
-
not_applicable_basis: no-independent-long-running-runtime
|
|
1886
|
-
reason: The client does not launch another runtime role.
|
|
1887
|
-
evidence_ids: [ev-payments-runtime-category]
|
|
1888
|
-
stateful_resources:
|
|
1889
|
-
disposition: not-applicable
|
|
1890
|
-
not_applicable_basis: no-independent-persistent-state-identity
|
|
1891
|
-
reason: The repository declares no independently keyed persistent payment state.
|
|
1892
|
-
evidence_ids: [ev-payments-state-category]
|
|
1893
|
-
external_dependencies:
|
|
1894
|
-
disposition: candidate
|
|
1895
|
-
candidate_id: candidate-payments-client
|
|
1896
|
-
evidence_ids: [ev-payments-external-category]
|
|
1897
|
-
child_registry_ids: []
|
|
1898
|
-
child_registry_absence:
|
|
1899
|
-
reason: No nested selectable client implementation is declared.
|
|
1900
|
-
evidence_ids: [ev-payments-leaf]
|
|
1901
|
-
evidence_ids: [ev-payments-registry-entry]
|
|
1902
|
-
uncovered: []
|
|
1903
|
-
uncovered: []
|
|
1904
|
-
uncovered: []
|
|
1905
|
-
|
|
1906
|
-
operational_surface_census:
|
|
1907
|
-
status: complete
|
|
1908
|
-
evidence_ids: [ev-operational-surface-checkout, ev-operational-surface-orders, ev-operational-surface-events, ev-operational-surface-payments]
|
|
1909
|
-
frontier_receipts:
|
|
1910
|
-
- frontier: deployment-runtime-units
|
|
1911
|
-
status: complete
|
|
1912
|
-
surface_ids: [surface-checkout-http]
|
|
1913
|
-
evidence_ids: [ev-operational-surface-checkout]
|
|
1914
|
-
uncovered: []
|
|
1915
|
-
- frontier: state-materialization-identities
|
|
1916
|
-
status: complete
|
|
1917
|
-
surface_ids: [surface-orders-logical-database, surface-order-events-stream]
|
|
1918
|
-
evidence_ids: [ev-operational-surface-orders, ev-operational-surface-events]
|
|
1919
|
-
uncovered: []
|
|
1920
|
-
- frontier: outbound-host-operation-contracts
|
|
1921
|
-
status: complete
|
|
1922
|
-
surface_ids: [surface-payments-authorize]
|
|
1923
|
-
evidence_ids: [ev-operational-surface-payments]
|
|
1924
|
-
uncovered: []
|
|
1925
|
-
- frontier: required-inbound-pull-contracts
|
|
1926
|
-
status: complete
|
|
1927
|
-
surface_ids: []
|
|
1928
|
-
evidence_ids: [ev-checkout-routes]
|
|
1929
|
-
absence_reason: No fixed outside actor is required by this example scope.
|
|
1930
|
-
uncovered: []
|
|
1931
|
-
surfaces:
|
|
1932
|
-
- id: surface-checkout-http
|
|
1933
|
-
category: runtime_roles
|
|
1934
|
-
surface_kind: runtime-mode
|
|
1935
|
-
frontier: deployment-runtime-units
|
|
1936
|
-
identity_key: checkout-server/http
|
|
1937
|
-
disposition: candidate
|
|
1938
|
-
candidate_id: candidate-checkout-entrypoint
|
|
1939
|
-
evidence_ids: [ev-operational-surface-checkout]
|
|
1940
|
-
- id: surface-orders-logical-database
|
|
1941
|
-
category: stateful_resources
|
|
1942
|
-
surface_kind: persistent-logical-entity
|
|
1943
|
-
frontier: state-materialization-identities
|
|
1944
|
-
identity_key: orders-database
|
|
1945
|
-
disposition: candidate
|
|
1946
|
-
candidate_id: candidate-orders-database
|
|
1947
|
-
evidence_ids: [ev-operational-surface-orders]
|
|
1948
|
-
- id: surface-order-events-stream
|
|
1949
|
-
category: stateful_resources
|
|
1950
|
-
surface_kind: persistent-logical-entity
|
|
1951
|
-
frontier: state-materialization-identities
|
|
1952
|
-
identity_key: order-events-v2
|
|
1953
|
-
disposition: candidate
|
|
1954
|
-
candidate_id: candidate-order-event-log
|
|
1955
|
-
evidence_ids: [ev-operational-surface-events]
|
|
1956
|
-
- id: surface-payments-authorize
|
|
1957
|
-
category: external_dependencies
|
|
1958
|
-
surface_kind: network-or-sdk-interaction
|
|
1959
|
-
frontier: outbound-host-operation-contracts
|
|
1960
|
-
identity_key: payments-client/authorize
|
|
1961
|
-
disposition: candidate
|
|
1962
|
-
candidate_id: candidate-payments-client
|
|
1963
|
-
evidence_ids: [ev-operational-surface-payments]
|
|
1964
|
-
uncovered: []
|
|
1965
|
-
|
|
1966
|
-
selector_surface_census:
|
|
1967
|
-
status: complete
|
|
1968
|
-
evidence_ids: [ev-selector-surface-integration-clients]
|
|
1969
|
-
discovery_roots:
|
|
1970
|
-
- id: selector-root-integration-clients
|
|
1971
|
-
owner_identity_key: integration-client-factory
|
|
1972
|
-
selector_domain: integration-client-kind
|
|
1973
|
-
source_identity_key: apps/checkout/src/integrations.ts#integrationClientFactory
|
|
1974
|
-
surface_id: selector-surface-integration-clients
|
|
1975
|
-
evidence_ids: [ev-selector-surface-integration-clients]
|
|
1976
|
-
surfaces:
|
|
1977
|
-
- id: selector-surface-integration-clients
|
|
1978
|
-
construct_kind: plugin-provider-factory
|
|
1979
|
-
owner_identity_key: integration-client-factory
|
|
1980
|
-
enumeration_method: static-structure
|
|
1981
|
-
availability_predicates: []
|
|
1982
|
-
observed_selector_keys: [payments]
|
|
1983
|
-
observed_implementation_keys: [payments-client]
|
|
1984
|
-
disposition: registry
|
|
1985
|
-
registry_id: registry-integration-clients
|
|
1986
|
-
evidence_ids: [ev-selector-surface-integration-clients]
|
|
1987
|
-
uncovered: []
|
|
1988
|
-
|
|
1989
|
-
evidence_profiles:
|
|
1990
|
-
- id: hosted-indicative-strong
|
|
1991
|
-
environment_scope: hosted-production
|
|
1992
|
-
authority: indicative
|
|
1993
|
-
confidence: strong
|
|
1994
|
-
|
|
1995
|
-
evidence_sources:
|
|
1996
|
-
- id: source-checkout-role-identity
|
|
1997
|
-
path: apps/checkout/src/server.ts
|
|
1998
|
-
anchor: startCheckoutServer
|
|
1999
|
-
kind: implementation
|
|
2000
|
-
inspection_scope: implementation-body
|
|
2001
|
-
locator_kind: exact-snippet
|
|
2002
|
-
supporting_tokens: [startCheckoutServer]
|
|
2003
|
-
- id: source-checkout-role-entrypoint
|
|
2004
|
-
path: apps/checkout/src/server.ts
|
|
2005
|
-
anchor: startCheckoutServer
|
|
2006
|
-
kind: call-path
|
|
2007
|
-
inspection_scope: role-call-path
|
|
2008
|
-
locator_kind: symbol
|
|
2009
|
-
- id: source-orders-role-use
|
|
2010
|
-
path: apps/checkout/src/db.ts
|
|
2011
|
-
anchor: createOrdersDatabase
|
|
2012
|
-
kind: call-path
|
|
2013
|
-
inspection_scope: role-call-path
|
|
2014
|
-
locator_kind: symbol
|
|
2015
|
-
- id: source-events-role-use
|
|
2016
|
-
path: apps/checkout/src/events.ts
|
|
2017
|
-
anchor: createOrderEventClient
|
|
2018
|
-
kind: call-path
|
|
2019
|
-
inspection_scope: role-call-path
|
|
2020
|
-
locator_kind: symbol
|
|
2021
|
-
- id: source-payments-role-use
|
|
2022
|
-
path: apps/checkout/src/payments.ts
|
|
2023
|
-
anchor: submitPayment
|
|
2024
|
-
kind: call-path
|
|
2025
|
-
inspection_scope: role-call-path
|
|
2026
|
-
locator_kind: symbol
|
|
2027
|
-
- id: source-orders-state-owner
|
|
2028
|
-
path: apps/checkout/src/db.ts
|
|
2029
|
-
anchor: "createOrdersDatabase\nDATABASE_URL"
|
|
2030
|
-
kind: implementation
|
|
2031
|
-
inspection_scope: implementation-body
|
|
2032
|
-
locator_kind: exact-snippet
|
|
2033
|
-
supporting_tokens: [createOrdersDatabase, DATABASE_URL]
|
|
2034
|
-
- id: source-events-state-owner
|
|
2035
|
-
path: apps/checkout/src/events.ts
|
|
2036
|
-
anchor: "publishOrderEvent\nORDER_EVENTS_TOPIC"
|
|
2037
|
-
kind: implementation
|
|
2038
|
-
inspection_scope: implementation-body
|
|
2039
|
-
locator_kind: exact-snippet
|
|
2040
|
-
supporting_tokens: [publishOrderEvent, ORDER_EVENTS_TOPIC]
|
|
2041
|
-
- id: source-payments-boundary
|
|
2042
|
-
path: apps/checkout/src/payments.ts
|
|
2043
|
-
anchor: "submitPayment\nauthorize-payment"
|
|
2044
|
-
kind: implementation
|
|
2045
|
-
inspection_scope: implementation-body
|
|
2046
|
-
locator_kind: exact-snippet
|
|
2047
|
-
supporting_tokens: [submitPayment, authorize-payment]
|
|
2048
|
-
- id: source-integration-client-selection-gate
|
|
2049
|
-
path: apps/checkout/src/integrations.ts
|
|
2050
|
-
anchor: "integrationClientFactory\nintegrationKind\nsupportedIntegrations[integrationKind]"
|
|
2051
|
-
kind: structured-registry
|
|
2052
|
-
inspection_scope: structured-registry
|
|
2053
|
-
locator_kind: exact-snippet
|
|
2054
|
-
supporting_tokens: [integrationClientFactory, integrationKind, "supportedIntegrations[integrationKind]"]
|
|
2055
|
-
- id: source-payments-registry-entry
|
|
2056
|
-
path: apps/checkout/src/integrations.ts
|
|
2057
|
-
anchor: "payments\npayments-client"
|
|
2058
|
-
kind: structured-registry
|
|
2059
|
-
inspection_scope: structured-registry
|
|
2060
|
-
locator_kind: exact-snippet
|
|
2061
|
-
supporting_tokens: [payments, payments-client]
|
|
2062
|
-
|
|
2063
|
-
evidence:
|
|
2064
|
-
- id: ev-checkout-entrypoint
|
|
2065
|
-
subject_ids: [checkout-http-role]
|
|
2066
|
-
claim_kind: runtime-role-identity
|
|
2067
|
-
assertion: The checkout role launches through the exact server entrypoint.
|
|
2068
|
-
profile_id: hosted-indicative-strong
|
|
2069
|
-
source_ids: [source-checkout-role-identity]
|
|
2070
|
-
- id: ev-integration-client-selection-gate
|
|
2071
|
-
subject_ids: [registry-integration-clients]
|
|
2072
|
-
claim_kind: registry-selection-gate
|
|
2073
|
-
assertion: The exact integration lookup dispatches to selectable client implementations.
|
|
2074
|
-
profile_id: hosted-indicative-strong
|
|
2075
|
-
source_ids: [source-integration-client-selection-gate]
|
|
2076
|
-
- id: ev-payments-registry-entry
|
|
2077
|
-
subject_ids: [registry-entry-payments-client]
|
|
2078
|
-
claim_kind: registry-entry-identity
|
|
2079
|
-
assertion: The payments selector resolves to the exact payments client implementation.
|
|
2080
|
-
profile_id: hosted-indicative-strong
|
|
2081
|
-
source_ids: [source-payments-registry-entry]
|
|
2082
|
-
- id: ev-external-capability-scope
|
|
2083
|
-
subject_ids: [commerce-platform]
|
|
2084
|
-
claim_kind: external-capability-scope
|
|
2085
|
-
assertion: All repository-supported external capability surfaces were enumerated.
|
|
2086
|
-
environment_scope: hosted-production
|
|
2087
|
-
authority: indicative
|
|
2088
|
-
sources:
|
|
2089
|
-
- path: apps/checkout/src/integrations.ts
|
|
2090
|
-
anchor: supportedIntegrations
|
|
2091
|
-
kind: implementation
|
|
2092
|
-
inspection_scope: implementation-body
|
|
2093
|
-
locator_kind: symbol
|
|
2094
|
-
confidence: strong
|
|
2095
|
-
- id: ev-operational-surface-checkout
|
|
2096
|
-
subject_ids: [surface-checkout-http]
|
|
2097
|
-
claim_kind: operational-surface-census
|
|
2098
|
-
assertion: The exact packaged HTTP execution mode was retained before role synthesis.
|
|
2099
|
-
profile_id: hosted-indicative-strong
|
|
2100
|
-
source_ids: [source-checkout-role-entrypoint]
|
|
2101
|
-
- id: ev-operational-surface-orders
|
|
2102
|
-
subject_ids: [surface-orders-logical-database]
|
|
2103
|
-
claim_kind: operational-surface-census
|
|
2104
|
-
assertion: The exact logical database identity was retained before resource synthesis.
|
|
2105
|
-
profile_id: hosted-indicative-strong
|
|
2106
|
-
source_ids: [source-orders-state-owner]
|
|
2107
|
-
- id: ev-operational-surface-events
|
|
2108
|
-
subject_ids: [surface-order-events-stream]
|
|
2109
|
-
claim_kind: operational-surface-census
|
|
2110
|
-
assertion: The exact persistent event stream identity was retained before resource synthesis.
|
|
2111
|
-
profile_id: hosted-indicative-strong
|
|
2112
|
-
source_ids: [source-events-state-owner]
|
|
2113
|
-
- id: ev-logical-state-orders
|
|
2114
|
-
subject_ids: [logical-state-orders-database]
|
|
2115
|
-
claim_kind: logical-state-census
|
|
2116
|
-
assertion: The orders database logical identity and mutator owner were enumerated separately from its connection root.
|
|
2117
|
-
profile_id: hosted-indicative-strong
|
|
2118
|
-
source_ids: [source-orders-state-owner]
|
|
2119
|
-
- id: ev-logical-state-events
|
|
2120
|
-
subject_ids: [logical-state-order-events]
|
|
2121
|
-
claim_kind: logical-state-census
|
|
2122
|
-
assertion: The keyed order-event namespace and append operation were enumerated separately from its topic root.
|
|
2123
|
-
profile_id: hosted-indicative-strong
|
|
2124
|
-
source_ids: [source-events-state-owner]
|
|
2125
|
-
- id: ev-logical-state-orders-contained
|
|
2126
|
-
subject_ids: [logical-state-orders-database]
|
|
2127
|
-
claim_kind: logical-state-container-closure
|
|
2128
|
-
assertion: The orders database boundary exposes no independently keyed nested state.
|
|
2129
|
-
profile_id: hosted-indicative-strong
|
|
2130
|
-
source_ids: [source-orders-state-owner]
|
|
2131
|
-
- id: ev-logical-state-events-contained
|
|
2132
|
-
subject_ids: [logical-state-order-events]
|
|
2133
|
-
claim_kind: logical-state-container-closure
|
|
2134
|
-
assertion: The event record boundary exposes no independently keyed nested state.
|
|
2135
|
-
profile_id: hosted-indicative-strong
|
|
2136
|
-
source_ids: [source-events-state-owner]
|
|
2137
|
-
- id: ev-operational-surface-payments
|
|
2138
|
-
subject_ids: [surface-payments-authorize]
|
|
2139
|
-
claim_kind: operational-surface-census
|
|
2140
|
-
assertion: The exact SDK operation was retained before dependency synthesis.
|
|
2141
|
-
profile_id: hosted-indicative-strong
|
|
2142
|
-
source_ids: [source-payments-boundary]
|
|
2143
|
-
- id: ev-selector-surface-integration-clients
|
|
2144
|
-
subject_ids: [selector-surface-integration-clients]
|
|
2145
|
-
claim_kind: selector-surface-census
|
|
2146
|
-
assertion: The exact integration-client factory owner was enumerated.
|
|
2147
|
-
environment_scope: hosted-production
|
|
2148
|
-
authority: indicative
|
|
2149
|
-
sources:
|
|
2150
|
-
- path: apps/checkout/src/integrations.ts
|
|
2151
|
-
anchor: supportedIntegrations
|
|
2152
|
-
kind: implementation
|
|
2153
|
-
inspection_scope: structured-registry
|
|
2154
|
-
locator_kind: symbol
|
|
2155
|
-
confidence: strong
|
|
2156
|
-
- id: ev-orders-db-client
|
|
2157
|
-
subject_ids: [orders-db, checkout-api, checkout-http-role]
|
|
2158
|
-
assertion: checkout-http-role constructs the production orders client
|
|
2159
|
-
environment_scope: hosted-production
|
|
2160
|
-
authority: authoritative
|
|
2161
|
-
sources:
|
|
2162
|
-
- path: apps/checkout/src/db.ts
|
|
2163
|
-
lines: {start: 12, end: 24}
|
|
2164
|
-
anchor: createOrdersDatabase
|
|
2165
|
-
kind: exported-symbol
|
|
2166
|
-
locator_kind: line-span
|
|
2167
|
-
- path: deploy/checkout.yaml
|
|
2168
|
-
anchor: spec.template.spec.containers[name=checkout].env[name=DATABASE_URL]
|
|
2169
|
-
kind: manifest-key
|
|
2170
|
-
locator_kind: manifest-key
|
|
2171
|
-
- source_ref: deployment-catalog/hosted-checkout
|
|
2172
|
-
selector: resource-bindings.orders-primary
|
|
2173
|
-
record_key: orders-primary
|
|
2174
|
-
kind: private-service-catalog-record
|
|
2175
|
-
confidence: proven
|
|
2176
|
-
- id: ev-orders-state-owner
|
|
2177
|
-
subject_ids: [orders-db]
|
|
2178
|
-
claim_kind: state-owner-boundary
|
|
2179
|
-
state_owner_basis: application-persistence-boundary
|
|
2180
|
-
state_owner_operation: open-read-write
|
|
2181
|
-
reproduction_operation_kind: copy
|
|
2182
|
-
assertion: The application opens and mutates the orders database.
|
|
2183
|
-
profile_id: hosted-indicative-strong
|
|
2184
|
-
source_ids: [source-orders-state-owner]
|
|
2185
|
-
- id: ev-order-events-state-owner
|
|
2186
|
-
subject_ids: [order-events]
|
|
2187
|
-
claim_kind: state-owner-boundary
|
|
2188
|
-
state_owner_basis: repository-declared-mutable-state
|
|
2189
|
-
state_owner_operation: named-mutable-namespace
|
|
2190
|
-
reproduction_operation_kind: restore
|
|
2191
|
-
assertion: The repository declares the mutable order-events-v2 event log.
|
|
2192
|
-
profile_id: hosted-indicative-strong
|
|
2193
|
-
source_ids: [source-events-state-owner]
|
|
2194
|
-
- id: ev-payments-boundary
|
|
2195
|
-
subject_ids: [payments-api]
|
|
2196
|
-
claim_kind: external-interaction-boundary
|
|
2197
|
-
external_backing_basis: interaction-only
|
|
2198
|
-
external_operation: stateless-exchange
|
|
2199
|
-
assertion: The payments client reproduces interaction behavior without owned backing state.
|
|
2200
|
-
profile_id: hosted-indicative-strong
|
|
2201
|
-
source_ids: [source-payments-boundary]
|
|
2202
|
-
- id: ev-orders-db-consumer
|
|
2203
|
-
subject_ids: [orders-db, checkout-http-role]
|
|
2204
|
-
claim_kind: role-reachability
|
|
2205
|
-
assertion: checkout-http-role reaches the orders database on its selected profile.
|
|
2206
|
-
profile_id: hosted-indicative-strong
|
|
2207
|
-
source_ids: [source-checkout-role-entrypoint, source-orders-role-use]
|
|
2208
|
-
role_call_path:
|
|
2209
|
-
kind: direct
|
|
2210
|
-
runtime_role_id: checkout-http-role
|
|
2211
|
-
entrypoint_source_index: 0
|
|
2212
|
-
consumer_source_index: 1
|
|
2213
|
-
- id: ev-order-events-consumer
|
|
2214
|
-
subject_ids: [order-events, checkout-http-role]
|
|
2215
|
-
claim_kind: role-reachability
|
|
2216
|
-
assertion: checkout-http-role reaches the order event log on its selected profile.
|
|
2217
|
-
profile_id: hosted-indicative-strong
|
|
2218
|
-
source_ids: [source-checkout-role-entrypoint, source-events-role-use]
|
|
2219
|
-
role_call_path:
|
|
2220
|
-
kind: direct
|
|
2221
|
-
runtime_role_id: checkout-http-role
|
|
2222
|
-
entrypoint_source_index: 0
|
|
2223
|
-
consumer_source_index: 1
|
|
2224
|
-
- id: ev-payments-consumer
|
|
2225
|
-
subject_ids: [payments-api, checkout-http-role]
|
|
2226
|
-
claim_kind: role-reachability
|
|
2227
|
-
assertion: checkout-http-role reaches the fixed payments request path.
|
|
2228
|
-
profile_id: hosted-indicative-strong
|
|
2229
|
-
source_ids: [source-checkout-role-entrypoint, source-payments-role-use]
|
|
2230
|
-
role_call_path:
|
|
2231
|
-
kind: direct
|
|
2232
|
-
runtime_role_id: checkout-http-role
|
|
2233
|
-
entrypoint_source_index: 0
|
|
2234
|
-
consumer_source_index: 1
|
|
2235
|
-
- id: ev-payments-runtime-category
|
|
2236
|
-
subject_ids: [registry-entry-payments-client-link-runtime-roles]
|
|
2237
|
-
claim_kind: registry-category-decision
|
|
2238
|
-
assertion: The client factory launches no independent long-running runtime.
|
|
2239
|
-
environment_scope: hosted-production
|
|
2240
|
-
authority: indicative
|
|
2241
|
-
sources:
|
|
2242
|
-
- path: apps/checkout/src/payments.ts
|
|
2243
|
-
anchor: createPaymentsClient
|
|
2244
|
-
kind: implementation
|
|
2245
|
-
inspection_scope: implementation-body
|
|
2246
|
-
locator_kind: symbol
|
|
2247
|
-
confidence: strong
|
|
2248
|
-
- id: ev-payments-state-category
|
|
2249
|
-
subject_ids: [registry-entry-payments-client-link-stateful-resources]
|
|
2250
|
-
claim_kind: registry-category-decision
|
|
2251
|
-
assertion: The client factory declares no independently keyed persistent state identity.
|
|
2252
|
-
environment_scope: hosted-production
|
|
2253
|
-
authority: indicative
|
|
2254
|
-
sources:
|
|
2255
|
-
- path: apps/checkout/src/payments.ts
|
|
2256
|
-
anchor: createPaymentsClient
|
|
2257
|
-
kind: implementation
|
|
2258
|
-
inspection_scope: implementation-body
|
|
2259
|
-
locator_kind: symbol
|
|
2260
|
-
confidence: strong
|
|
2261
|
-
- id: ev-payments-external-category
|
|
2262
|
-
subject_ids: [registry-entry-payments-client-link-external-dependencies]
|
|
2263
|
-
claim_kind: registry-category-decision
|
|
2264
|
-
assertion: The client factory creates the mapped outbound payments interaction.
|
|
2265
|
-
environment_scope: hosted-production
|
|
2266
|
-
authority: indicative
|
|
2267
|
-
sources:
|
|
2268
|
-
- path: apps/checkout/src/payments.ts
|
|
2269
|
-
anchor: createPaymentsClient
|
|
2270
|
-
kind: implementation
|
|
2271
|
-
inspection_scope: implementation-body
|
|
2272
|
-
locator_kind: symbol
|
|
2273
|
-
confidence: strong
|
|
2274
|
-
- id: ev-payments-leaf
|
|
2275
|
-
subject_ids: [registry-entry-payments-client]
|
|
2276
|
-
claim_kind: registry-leaf-inspection
|
|
2277
|
-
assertion: The payments client implementation has no nested structured selector.
|
|
2278
|
-
environment_scope: hosted-production
|
|
2279
|
-
authority: indicative
|
|
2280
|
-
sources:
|
|
2281
|
-
- path: apps/checkout/src/payments.ts
|
|
2282
|
-
anchor: createPaymentsClient
|
|
2283
|
-
kind: implementation
|
|
2284
|
-
inspection_scope: implementation-body
|
|
2285
|
-
locator_kind: symbol
|
|
2286
|
-
confidence: strong
|
|
2287
|
-
- id: ev-hot-fork-checkout-wave
|
|
2288
|
-
subject_ids: [hot-fork-checkout-wave]
|
|
2289
|
-
assertion: The warm adapter produced eight fresh generated-case universes.
|
|
2290
|
-
environment_scope: hosted-production
|
|
2291
|
-
authority: authoritative
|
|
2292
|
-
claim_kind: materialization-capability
|
|
2293
|
-
operational_status: materialization-probed
|
|
2294
|
-
latency_basis: measured
|
|
2295
|
-
sources:
|
|
2296
|
-
- source_ref: haystack-adapter-catalog/warm-checkout-wave
|
|
2297
|
-
selector: qualification.latest
|
|
2298
|
-
record_key: warm-checkout-wave
|
|
2299
|
-
kind: haystack-adapter-capability-record
|
|
2300
|
-
confidence: proven
|
|
2301
|
-
- id: ev-prepared-checkout-source
|
|
2302
|
-
subject_ids: [prepared-checkout-source]
|
|
2303
|
-
assertion: The sealed replica identity matches the declared profile and cut.
|
|
2304
|
-
environment_scope: hosted-production
|
|
2305
|
-
authority: authoritative
|
|
2306
|
-
sources:
|
|
2307
|
-
- source_ref: prepared-state-catalog/checkout-source
|
|
2308
|
-
selector: identity.latest
|
|
2309
|
-
kind: replication-prepared-state-record
|
|
2310
|
-
confidence: proven
|
|
2311
|
-
- id: ev-hot-checkout-path-probe
|
|
2312
|
-
subject_ids: [prepared-checkout-source, hot-fork-checkout-wave, hot-inject-checkout-commit]
|
|
2313
|
-
assertion: The production-scoped warm probe exercised the declared hot path.
|
|
2314
|
-
environment_scope: hosted-production
|
|
2315
|
-
authority: authoritative
|
|
2316
|
-
claim_kind: materialization-hot-path-probe
|
|
2317
|
-
operational_status: materialization-probed
|
|
2318
|
-
latency_basis: measured
|
|
2319
|
-
sources:
|
|
2320
|
-
- source_ref: haystack-probe-catalog/checkout-production-wave
|
|
2321
|
-
selector: qualification.latest
|
|
2322
|
-
kind: haystack-materialization-probe-result
|
|
2323
|
-
environment_scope: hosted-production
|
|
2324
|
-
probe_results:
|
|
2325
|
-
observed_end_to_end_p95_ms: 5000
|
|
2326
|
-
achieved_generated_case_fanout: 8
|
|
2327
|
-
verification_commit_ref: commit-catalog/checkout-probe-001
|
|
2328
|
-
arbitrary_verification_commit_injection: true
|
|
2329
|
-
fresh_universe_per_generated_case: true
|
|
2330
|
-
parent_write_protected: true
|
|
2331
|
-
parallel_phases: [fork, attach, execute]
|
|
2332
|
-
cleanup_order: [release-all-attachments, revoke-all-leases]
|
|
2333
|
-
cleanup_covers_all_attempts_on_partial_failure: true
|
|
2334
|
-
single_absolute_deadline: true
|
|
2335
|
-
generated_case_runs:
|
|
2336
|
-
- generated_case_id: generated-case-1
|
|
2337
|
-
sandbox_id: sandbox-1
|
|
2338
|
-
universe_incarnation_id: universe-incarnation-1
|
|
2339
|
-
- generated_case_id: generated-case-2
|
|
2340
|
-
sandbox_id: sandbox-2
|
|
2341
|
-
universe_incarnation_id: universe-incarnation-2
|
|
2342
|
-
- generated_case_id: generated-case-3
|
|
2343
|
-
sandbox_id: sandbox-3
|
|
2344
|
-
universe_incarnation_id: universe-incarnation-3
|
|
2345
|
-
- generated_case_id: generated-case-4
|
|
2346
|
-
sandbox_id: sandbox-4
|
|
2347
|
-
universe_incarnation_id: universe-incarnation-4
|
|
2348
|
-
- generated_case_id: generated-case-5
|
|
2349
|
-
sandbox_id: sandbox-5
|
|
2350
|
-
universe_incarnation_id: universe-incarnation-5
|
|
2351
|
-
- generated_case_id: generated-case-6
|
|
2352
|
-
sandbox_id: sandbox-6
|
|
2353
|
-
universe_incarnation_id: universe-incarnation-6
|
|
2354
|
-
- generated_case_id: generated-case-7
|
|
2355
|
-
sandbox_id: sandbox-7
|
|
2356
|
-
universe_incarnation_id: universe-incarnation-7
|
|
2357
|
-
- generated_case_id: generated-case-8
|
|
2358
|
-
sandbox_id: sandbox-8
|
|
2359
|
-
universe_incarnation_id: universe-incarnation-8
|
|
2360
|
-
confidence: proven
|
|
2361
|
-
```
|
|
2362
|
-
|
|
2363
|
-
`selector_surface_census.discovery_roots` is the append-only first-discovery
|
|
2364
|
-
ledger. Add a row as soon as a typed selector field, registration owner,
|
|
2365
|
-
command tree, static map, switch, or equivalent exact dispatch root is
|
|
2366
|
-
observed—before enumerating entries or tracing semantics. Every row resolves
|
|
2367
|
-
to exactly one selector surface, and every surface resolves from exactly one
|
|
2368
|
-
row. A known root cannot be left only in `uncovered`; emit its surface and
|
|
2369
|
-
registry, retain all observed keys on the selector surface, and keep final
|
|
2370
|
-
`entries: []` while selector-to-implementation or nested traces remain partial.
|
|
2371
|
-
`uncovered` is only for source ranges or dynamic keys not yet discovered
|
|
2372
|
-
exactly. When a known root has zero semantically resolved selector keys, its
|
|
2373
|
-
partial registry uses `entries: []`, `fallback_default: none-proven`, and
|
|
2374
|
-
`entry_enumeration_blocker: {reason, evidence_ids}` naming the exact dynamic-key
|
|
2375
|
-
or uninspected-source boundary. Once a key is observed, replace that with
|
|
2376
|
-
`semantic_trace_blocker: {reason, evidence_ids}` while its implementation,
|
|
2377
|
-
category-link, or nested-registry trace remains open. Omit both blockers when the
|
|
2378
|
-
registry is complete.
|
|
2379
|
-
|
|
2380
|
-
Each evidence record declares exactly one complete inline quality tuple
|
|
2381
|
-
(`environment_scope`, `authority`, `confidence`) or one `profile_id`, and
|
|
2382
|
-
exactly one nonempty inline `sources` list or `source_ids`. Put repeated tuples
|
|
2383
|
-
in `evidence_profiles` and repeated typed source locators in
|
|
2384
|
-
`evidence_sources`; references resolve by exact stable ID and do not weaken the
|
|
2385
|
-
claim's exact subject set. Every repository source has `locator_kind` equal to
|
|
2386
|
-
`symbol`, `exact-snippet`, `line-span`, `manifest-key`, or `config-key`.
|
|
2387
|
-
Its optional `inspection_scope` is `implementation-body`, `role-call-path`, or
|
|
2388
|
-
`structured-registry`; the last is valid for exact structured census and
|
|
2389
|
-
projection evidence but does not satisfy a full implementation-trace claim.
|
|
2390
|
-
Repository `anchor` values are non-empty strings. An `exact-snippet` anchor is
|
|
2391
|
-
a case-sensitive UTF-8 substring that occurs exactly once in the referenced
|
|
2392
|
-
repository file; use `line-span` to disambiguate repeated text. Normalized
|
|
2393
|
-
selector keys, generated labels, and summaries are not source snippets.
|
|
2394
|
-
`line-span` additionally uses an exact two-field `lines` object containing
|
|
2395
|
-
positive integer `start` and `end`; the span stays within the referenced file
|
|
2396
|
-
and contains the case-sensitive anchor. Padding fields are invalid. When the
|
|
2397
|
-
validator has repository context it reads these files and rejects absent
|
|
2398
|
-
snippets, out-of-range spans, and anchors outside their declared spans.
|
|
2399
|
-
Generated candidate IDs and family labels are not locators.
|
|
2400
|
-
|
|
2401
|
-
Material identity sources additionally carry a nonempty unique
|
|
2402
|
-
`supporting_tokens` list and use only `exact-snippet` or `line-span`. Each token
|
|
2403
|
-
is an exact case-sensitive string inside the declared locator; a material line
|
|
2404
|
-
span is at most 80 lines. Runtime-role identity evidence supports the exact
|
|
2405
|
-
entrypoint; resource owner evidence supports both the source owner and
|
|
2406
|
-
materialization root; external boundary evidence supports the exact source
|
|
2407
|
-
owner and operation; registry gate and entry evidence supports their declared
|
|
2408
|
-
tokens. Opaque catalog sources never use `supporting_tokens`.
|
|
2409
|
-
|
|
2410
|
-
Every full role's `entrypoint_evidence_id` resolves to decision-grade atomic
|
|
2411
|
-
`runtime-role-identity` evidence whose only subject is that role and whose
|
|
2412
|
-
`implementation-body` source supports the exact entrypoint token. A shebang,
|
|
2413
|
-
import, adjacent declaration, comment, or closing brace does not prove a launch
|
|
2414
|
-
identity.
|
|
2415
|
-
|
|
2416
|
-
Atomic `role-reachability` evidence also carries `role_call_path`. Its
|
|
2417
|
-
`runtime_role_id` matches the claim subject; `entrypoint_source_index` and
|
|
2418
|
-
`consumer_source_index` are distinct zero-based indexes into the resolved
|
|
2419
|
-
source list; and `kind` is `direct`, `registration-dispatch`, or
|
|
2420
|
-
`configuration-dispatch`. A non-direct kind also requires a distinct zero-based
|
|
2421
|
-
`dispatch_source_index` locating the actual registration or selection gate;
|
|
2422
|
-
`direct` omits it. All indexed sources use `inspection_scope: role-call-path`
|
|
2423
|
-
and distinct exact repository locators; repeating one source at two indexes,
|
|
2424
|
-
padding its locator, or relabelling its locator kind is invalid.
|
|
2425
|
-
One source locates a role module or entrypoint and the
|
|
2426
|
-
other locates the concrete consumer use site. Plugin packaging or registration
|
|
2427
|
-
alone cannot occupy either end.
|
|
2428
|
-
|
|
2429
|
-
When external-dependency closure is complete,
|
|
2430
|
-
`coverage.external_integration_scope` is mandatory with method
|
|
2431
|
-
`all-repository-supported-capabilities`, status `complete`, and an empty
|
|
2432
|
-
`excluded_optional_profile_ids`. Its evidence includes an atomic
|
|
2433
|
-
`external-capability-scope` claim whose only subject is the application ID and
|
|
2434
|
-
whose source uses `inspection_scope: implementation-body`. A profile gate may
|
|
2435
|
-
make a supported integration optional but cannot place it in the excluded list.
|
|
2436
|
-
|
|
2437
|
-
`coverage.inventory_closure` is mandatory, including on a provisional map and
|
|
2438
|
-
on the compact empty receipt. It has exactly the three categories shown above.
|
|
2439
|
-
Each category has `status: complete` with `uncovered: []`, or `status: partial`
|
|
2440
|
-
with at least one uncovered source-scope description. It also has mandatory
|
|
2441
|
-
`structured_registry_discovery`. A complete discovery claim has nonempty
|
|
2442
|
-
evidence and `uncovered: []`; a partial claim names its uncovered scope. Each
|
|
2443
|
-
stateful-resource category also has mandatory `state_surface_discovery`. It is
|
|
2444
|
-
a `complete` or `partial` exact census with nonempty evidence and the same
|
|
2445
|
-
`uncovered` rules. Each surface entry has a unique stable `id`, an exact
|
|
2446
|
-
`identity_key`, and `surface_kind`: `config-key`, `writable-path`,
|
|
2447
|
-
`remote-loader`, `generated-output`, `identity-material`,
|
|
2448
|
-
`structured-manifest`, `persistent-entity`, `installed-artifact`,
|
|
2449
|
-
`host-persistent-state`, `scheduled-state`, `portable-snapshot`, or
|
|
2450
|
-
`packaged-installation-layout`. A `candidate` entry names one
|
|
2451
|
-
exact stateful-resource `candidate_id`; a `non-resource` entry omits it and
|
|
2452
|
-
records `non_resource_reason`. This retains discovery roots without promoting
|
|
2453
|
-
generic loaders, selectors, mounts, or plumbing into resources. If several
|
|
2454
|
-
entries reuse one candidate, every reused entry has nonempty
|
|
2455
|
-
`shared_binding_evidence_ids` proving the exact common logical binding. A
|
|
2456
|
-
complete empty census has an evidenced `absence_reason`; a nonempty stateful
|
|
2457
|
-
inventory may never use an empty census.
|
|
2458
|
-
|
|
2459
|
-
The stateful-resource category also has mandatory `logical_state_census`.
|
|
2460
|
-
Every state closure candidate appears in exactly one row. Each row records a
|
|
2461
|
-
unique stable `id`, `logical_kind`, exact `identity_key`, separate
|
|
2462
|
-
`materialization_root_identity_key`, exact `source_owner_identity_key`,
|
|
2463
|
-
nonempty `key_components`, nonempty `mutation_operations`, the originating
|
|
2464
|
-
`state_surface_ids`, and atomic `logical-state-census` evidence whose only
|
|
2465
|
-
subject is that row ID. Allowed kinds are `keyed-record`, `leased-record`,
|
|
2466
|
-
`namespace-record`, `materialization-container`, `configured-state-leaf`,
|
|
2467
|
-
`portable-snapshot`, `installed-layout`, `generated-identity`,
|
|
2468
|
-
`scheduled-definition`, and `host-persistent-object`. Keyed, leased, and
|
|
2469
|
-
namespace rows include at least a materialization/root discriminator plus a
|
|
2470
|
-
record key or prefix, and their logical identity may not equal their container
|
|
2471
|
-
identity. Mutation operations are exact lifecycle verbs selected from
|
|
2472
|
-
`create`, `update`, `delete`, `append`, `replace`, `install`, `restore`,
|
|
2473
|
-
`register`, `lease`, `snapshot`, `export`, `copy`, `import`, `save`, `renew`,
|
|
2474
|
-
`revoke`, `compact`, `migrate`, `truncate`, and `rotate`.
|
|
2475
|
-
|
|
2476
|
-
`source_owner_identity_key` resolves to an actual declaration or mutator in the
|
|
2477
|
-
referenced source. A synthesized convenience name, registry/schema field,
|
|
2478
|
-
comment, or non-owning caller is invalid. Unless the materialization root is
|
|
2479
|
-
itself the complete independently reproducible identity, `key_components`
|
|
2480
|
-
include at least one semantic discriminator beyond the root, such as an object
|
|
2481
|
-
or document key, filename, namespace, certificate role, plugin/module version,
|
|
2482
|
-
log stream, account, or equivalent exact identity. A root-only component list
|
|
2483
|
-
must not erase a more precise identity already proven by the mutator body.
|
|
2484
|
-
|
|
2485
|
-
Every logical-state row records `contained_identity_disposition`; nested keyed
|
|
2486
|
-
state can live inside a serialized record, session, snapshot, installed layout,
|
|
2487
|
-
or host object as well as a physical container. `enumerated` names every
|
|
2488
|
-
independently keyed child in `contained_logical_state_ids`; those references
|
|
2489
|
-
must resolve to non-container rows. `none-proven` uses an empty child list, a
|
|
2490
|
-
specific `contained_identity_reason`, and atomic
|
|
2491
|
-
`logical-state-container-closure` evidence. `unresolved` names the frontier and
|
|
2492
|
-
is valid only while the logical-state census and state closure are partial.
|
|
2493
|
-
Physical co-location, one snapshot action, a bucket/table/root name, or a shared
|
|
2494
|
-
key prefix never proves that independently keyed children are absent. Portable
|
|
2495
|
-
snapshots and installed layouts are distinct logical rows rather than aliases
|
|
2496
|
-
of their live database or build descriptor. A complete empty census requires
|
|
2497
|
-
`absence_reason`; a partial census names its uncovered frontier.
|
|
2498
|
-
|
|
2499
|
-
Every final resource repeats that logical identity and declares
|
|
2500
|
-
`state_unit_kind` as one of `logical-database`, `database-schema`,
|
|
2501
|
-
`search-index`, `cache-namespace`, `queue-or-stream`, `credential-file`,
|
|
2502
|
-
`trust-material-file`, `tls-keypair`, `object-bucket-or-prefix`,
|
|
2503
|
-
`persistent-volume-or-directory`, `portable-snapshot`, `installed-artifact`,
|
|
2504
|
-
`packaged-installation-layout`, `generated-host-state`,
|
|
2505
|
-
`immutable-packaged-asset`, or `repository-proven-independent-object`. It also
|
|
2506
|
-
has an exact unique, non-placeholder `address_token` and `reproduction_token`;
|
|
2507
|
-
atomic state-owner evidence supports the owner, root, address, and reproduction
|
|
2508
|
-
tokens. An unresolved reproduction strategy requires partial state closure; a
|
|
2509
|
-
complete category requires every final resource to have a concrete strategy. A
|
|
2510
|
-
portable container and a contained database, generated file, installed
|
|
2511
|
-
executable, or packaged asset are both final resources when each has an
|
|
2512
|
-
independent address and reproduction operation.
|
|
2513
|
-
Tables, projections, fields, indexes, and records inside an already reproduced
|
|
2514
|
-
database are not final resources unless exact evidence proves their independent
|
|
2515
|
-
address and independent reproduction action. Remote import inputs, provider
|
|
2516
|
-
variants, configuration inputs, and discovery responses stay out of final state
|
|
2517
|
-
inventory.
|
|
2518
|
-
|
|
2519
|
-
`coverage.operational_surface_census` is mandatory. It enumerates exact
|
|
2520
|
-
execution facets, persistent logical entities and configured leaves, remote
|
|
2521
|
-
state operations, network/SDK interactions, runtime-invoked commands,
|
|
2522
|
-
host-service interactions, and required inbound or pull interactions before
|
|
2523
|
-
candidate synthesis. Each surface records a unique stable ID, category,
|
|
2524
|
-
exact `identity_key`, and `surface_kind`: `runtime-entrypoint`, `runtime-mode`,
|
|
2525
|
-
`scheduled-or-injected-workload`, `managed-child-process`,
|
|
2526
|
-
`persistent-logical-entity`, `configured-state-leaf`, `installed-artifact`,
|
|
2527
|
-
`portable-snapshot-artifact`, `packaged-installation-layout`,
|
|
2528
|
-
`generated-or-host-state`, `remote-state-operation`,
|
|
2529
|
-
`network-or-sdk-interaction`, `runtime-invoked-command`,
|
|
2530
|
-
`host-service-interaction`, or `required-inbound-or-pull-interaction`. It also
|
|
2531
|
-
has decision-grade atomic
|
|
2532
|
-
`operational-surface-census` evidence whose only subject is that surface ID. A
|
|
2533
|
-
`candidate` row names one exact category candidate; a `non-inventory` row omits
|
|
2534
|
-
the candidate and explains the source-derived decision. Every closure candidate
|
|
2535
|
-
must have at least one exact source surface.
|
|
2536
|
-
|
|
2537
|
-
The census also contains exactly four `frontier_receipts`:
|
|
2538
|
-
`deployment-runtime-units`, `state-materialization-identities`,
|
|
2539
|
-
`outbound-host-operation-contracts`, and
|
|
2540
|
-
`required-inbound-pull-contracts`. Every surface repeats its mechanically
|
|
2541
|
-
determined `frontier`. Each receipt has `complete` or `partial` status,
|
|
2542
|
-
nonempty evidence, an exact duplicate-free `surface_ids` set, and `uncovered`.
|
|
2543
|
-
A complete empty frontier gives an `absence_reason`; complete closure requires
|
|
2544
|
-
all four receipts complete. Deployment units include separately launched
|
|
2545
|
-
database, cache, broker, and search processes as runtime roles in addition to
|
|
2546
|
-
their state resources. State identities include independently reproduced
|
|
2547
|
-
service certificates, CA bundles, secrets/credentials, configured destination
|
|
2548
|
-
objects, logical cache databases or namespaces, and writable, installed,
|
|
2549
|
-
cache, database, and report layouts. Outbound contracts enumerate every exact
|
|
2550
|
-
effectful leaf in reached wrappers, including filesystem methods, transaction
|
|
2551
|
-
stages, object-store methods, mail protocol stages, browser/host APIs, and
|
|
2552
|
-
downloads, package fetches, generators, or install commands needed to reproduce
|
|
2553
|
-
shipped artifacts. Build-time and install-time boundaries remain external
|
|
2554
|
-
dependencies even when they are not steady-state runtime egress. Required inbound/pull contracts
|
|
2555
|
-
retain independently reproduced listener boundaries without expanding every
|
|
2556
|
-
route.
|
|
2557
|
-
|
|
2558
|
-
`coverage.selector_surface_census` is also mandatory. Each exact source owner
|
|
2559
|
-
records `construct_kind` as `executable-command-dispatch`,
|
|
2560
|
-
`plugin-provider-factory`, `persistence-schema-dispatch`,
|
|
2561
|
-
`lifecycle-hook-pipeline`, `behavior-or-config-selector`,
|
|
2562
|
-
`finite-behavior-dispatch`, or
|
|
2563
|
-
`dynamic-module-or-entrypoint`; `enumeration_method` is `static-structure`,
|
|
2564
|
-
`generated-input`, `language-aware-extraction`, or `implementation-trace`.
|
|
2565
|
-
It also records `owner_identity_key`, exact `availability_predicates`, exact
|
|
2566
|
-
nonempty unique `observed_selector_keys`, exact nonempty unique
|
|
2567
|
-
`observed_implementation_keys`, and either one `registry_id` or an evidenced
|
|
2568
|
-
`non-registry` decision. The decision-grade `selector-surface-census` evidence
|
|
2569
|
-
has the surface ID as its exact subject and a `structured-registry` source.
|
|
2570
|
-
Every emitted registry ID resolves from exactly one source-owner row. Its
|
|
2571
|
-
owner, enumeration method, selector-key set, and distinct implementation-key
|
|
2572
|
-
set exactly match the registry rows. A non-registry selector may record only
|
|
2573
|
-
one implementation identity; two or more exact production implementations
|
|
2574
|
-
require a registry. Wildcard, family, and sampled-member placeholders do not
|
|
2575
|
-
constitute enumeration. `non_registry_reason` is not prose: it is exactly one
|
|
2576
|
-
of `single-implementation-no-choice`, `exhaustive-all-members`,
|
|
2577
|
-
`declarative-data-only`, `operation-contract-without-dispatch`,
|
|
2578
|
-
`generated-without-application-gate`, or `non-production-selector`.
|
|
2579
|
-
|
|
2580
|
-
A registry is admitted whenever a runtime selector chooses distinct concrete
|
|
2581
|
-
production behaviors or implementations, even when every inventory-category
|
|
2582
|
-
link is `not-applicable`. This includes concrete command, UI render/component,
|
|
2583
|
-
parser, formatter, field/entity factory, protocol-operation, migration/template,
|
|
2584
|
-
and feature-behavior dispatch only when a selector chooses one implementation
|
|
2585
|
-
or subset. Ordered migrations, hook pipelines, and generated codec/parser tables
|
|
2586
|
-
that execute or expose every member are not selector registries. Plain enums,
|
|
2587
|
-
lists, routes, metrics, constants, and flags with no concrete dispatch remain
|
|
2588
|
-
non-registries. Large registries are
|
|
2589
|
-
fully enumerated by a deterministic extractor; sampling is never completion.
|
|
2590
|
-
|
|
2591
|
-
Each
|
|
2592
|
-
identified registry has a globally unique stable ID, `root: true` or `false`,
|
|
2593
|
-
an exact `owner_identity_key`, `selector_domain`, recognized
|
|
2594
|
-
`enumeration_method`, a concrete `selection_gate`, exact `fallback_default` (or `none-proven`), nonempty
|
|
2595
|
-
evidence, an enumeration status, exact `entries`, and its own uncovered list.
|
|
2596
|
-
`selection_gate.kind` is `map-lookup`, `switch-dispatch`,
|
|
2597
|
-
`factory-registration`, `manifest-entrypoint`, `command-dispatch`,
|
|
2598
|
-
`generated-dispatch`, or `configuration-dispatch`; it also records exact
|
|
2599
|
-
`owner_token`, `selector_token`, `dispatch_token`,
|
|
2600
|
-
`dispatch_semantics: selective-dispatch`, the production
|
|
2601
|
-
`runtime_consumer_token`, and `source_origin` as `application-owned` or
|
|
2602
|
-
`generated`. Generated input additionally records a distinct exact
|
|
2603
|
-
`application_gate_token`; generated machinery without that app-owned gate is
|
|
2604
|
-
not a registry. Registry evidence includes atomic `registry-selection-gate`
|
|
2605
|
-
evidence for all of those tokens. An
|
|
2606
|
-
interface or abstract method set is an operation contract, not a registry.
|
|
2607
|
-
Every entry has a globally unique stable ID, unique exact `selector_key`,
|
|
2608
|
-
exact `selector_token`, nonempty exact `selection_predicate`, nonempty
|
|
2609
|
-
`implementation_key`, distinct exact `implementation_token`, exact evidence,
|
|
2610
|
-
and exact `category_links` for
|
|
2611
|
-
`runtime_roles`, `stateful_resources`, and `external_dependencies`. Each link is
|
|
2612
|
-
either `candidate` with one candidate ID from that category, or
|
|
2613
|
-
`not-applicable` with evidence, a reason, and the fixed category basis:
|
|
2614
|
-
`no-independent-long-running-runtime`,
|
|
2615
|
-
`no-independent-persistent-state-identity`, or
|
|
2616
|
-
`no-external-reproduction-interaction`. Every category-link evidence record uses
|
|
2617
|
-
`claim_kind: registry-category-decision`, has the exact derived link ID as its
|
|
2618
|
-
only `subject_ids` value, and cites a repository source with
|
|
2619
|
-
`inspection_scope: implementation-body`. Selector keys are unique within a
|
|
2620
|
-
registry; implementation keys may repeat when distinct exact selectors are
|
|
2621
|
-
aliases for one implementation. Within one registry and category, entries may not reuse a
|
|
2622
|
-
candidate or resolve through separate candidates to the same broad inventory
|
|
2623
|
-
subject. That anti-collapse rule keeps each independently selectable
|
|
2624
|
-
implementation visible across state and service concerns; an evidenced
|
|
2625
|
-
redundant alias receives its own excluded candidate.
|
|
2626
|
-
|
|
2627
|
-
Every registry entry's own evidence includes atomic
|
|
2628
|
-
`registry-entry-identity` evidence whose only subject is that entry and whose
|
|
2629
|
-
`structured-registry` source supports its exact selector and implementation
|
|
2630
|
-
tokens.
|
|
2631
|
-
The gate selector token differs from its dispatch token, and an entry's selector
|
|
2632
|
-
key/token differs from its implementation key/token. Constructor expressions,
|
|
2633
|
-
handler names, provider names, and classes are implementations, not selectors;
|
|
2634
|
-
use the exact literal, enum value, manifest key, command `Use` string, or other
|
|
2635
|
-
source token that a caller actually selects.
|
|
2636
|
-
|
|
2637
|
-
Discovery may scan literal arrays, mappings, enums, and generated tables as
|
|
2638
|
-
candidate surfaces, but an emitted registry requires exact evidence that its
|
|
2639
|
-
keys select or dispatch distinct production implementation identities relevant
|
|
2640
|
-
to a runtime role, state owner, or external interaction. Platform/facet lists,
|
|
2641
|
-
field and entity types, routes, metrics, protocol verbs, constants, discovery
|
|
2642
|
-
matchers, and feature flags are not inventory registries merely because they
|
|
2643
|
-
are structured. Executable and command dispatch is the exception: packaged
|
|
2644
|
-
wrapper maps, command tables, command annotations, and nested subcommand
|
|
2645
|
-
indexes are registries when exact keys dispatch distinct production-capable
|
|
2646
|
-
implementations. Finite production batches also link to exact runtime-role
|
|
2647
|
-
candidates; the registry identity remains separate. Scale-generated registries retain semantic stable
|
|
2648
|
-
IDs and selection/dispatch evidence; opaque hashes and one-registry-per-literal
|
|
2649
|
-
collection do not satisfy this boundary.
|
|
2650
|
-
|
|
2651
|
-
One dominant manifest, plugin, or provider index never substitutes for the full
|
|
2652
|
-
surface census. Before artifact generation, separately resolve every discovered
|
|
2653
|
-
package executable or entrypoint map, dynamic module-import selector, registered
|
|
2654
|
-
factory or provider interface, and configuration-driven implementation dispatch
|
|
2655
|
-
table. Each becomes either a genuine inventory registry or an exact evidenced
|
|
2656
|
-
non-registry decision. Exhausting the largest registry does not close the
|
|
2657
|
-
smaller root-selector frontier.
|
|
2658
|
-
|
|
2659
|
-
Language-aware enumeration retains every exact selector identity, not just
|
|
2660
|
-
concrete implementation classes. This includes configuration aliases,
|
|
2661
|
-
sentinel/default choices, behavior-selecting enum constants, annotated abstract
|
|
2662
|
-
command bases and group nodes, and packaged executable keys. A selector alias
|
|
2663
|
-
remains an entry when it resolves to a class already present under a different
|
|
2664
|
-
key. Annotation addressability is independent of class concreteness, and a
|
|
2665
|
-
long-running executable remains in the executable registry even when its launch
|
|
2666
|
-
surface also maps to a runtime role. Java/Kotlin subtype scans take the
|
|
2667
|
-
transitive concrete closure through subclasses of subclasses and separately
|
|
2668
|
-
retain these non-subtype selector forms.
|
|
2669
|
-
|
|
2670
|
-
A registry retains every enumerated key on its exact selector surface and every
|
|
2671
|
-
exact selector-to-implementation pair in `entries[]`. During a partial phase,
|
|
2672
|
-
an identity-complete row uses `trace_status: identity-complete`, structured
|
|
2673
|
-
category projections, and an exact `unresolved` list for open category-link or
|
|
2674
|
-
nested-registry work. It is valid at `inventory-complete` after the exact
|
|
2675
|
-
family, entry, and edge census closes, but invalid at `final-receipt`. The
|
|
2676
|
-
registry identity status is partial only while enumeration or an implementation
|
|
2677
|
-
identity is open. A full semantic entry requires distinct exact
|
|
2678
|
-
`selector_key`/`selector_token` and
|
|
2679
|
-
`implementation_key`/`implementation_token`, atomic
|
|
2680
|
-
`registry-entry-identity` evidence, all three `category_links`, and either
|
|
2681
|
-
`child_registry_ids` or evidenced `child_registry_absence`.
|
|
2682
|
-
|
|
2683
|
-
When the registry schema establishes an inventory category for all members,
|
|
2684
|
-
every exact positive creates its own closure candidate. Entries in a worker
|
|
2685
|
-
launch index, for example, create runtime-role candidates. Mixed integration,
|
|
2686
|
-
plugin, or manifest indexes use exact structured per-entry discriminators such
|
|
2687
|
-
as I/O class, transport, client, or endpoint declarations. Free-text names and
|
|
2688
|
-
summaries are never category discriminators. Keep unresolved candidates
|
|
2689
|
-
`pending`; do not project them into final inventory. A positive structured I/O
|
|
2690
|
-
declaration remains positive when it describes local/device polling or push:
|
|
2691
|
-
locality is destination placement, not proof of an in-process internal link.
|
|
2692
|
-
Exact implementation evidence may still exclude a calculated/in-process,
|
|
2693
|
-
dead/removal-only, or exact duplicate concern. Exhaust generic syntax- and
|
|
2694
|
-
structured-key-derived passes over executable/worker registrations, connection
|
|
2695
|
-
schemas, client and transport construction, endpoint and namespace constants,
|
|
2696
|
-
migration/schema roots, storage adapters, durable operations, backup providers,
|
|
2697
|
-
and generated inputs before stopping. A registry ledger alone does not close
|
|
2698
|
-
or preserve scored inventory breadth.
|
|
2699
|
-
|
|
2700
|
-
Each entry also has `child_registry_ids`. An empty list requires a
|
|
2701
|
-
`child_registry_absence` mapping with a nonempty implementation-specific
|
|
2702
|
-
`reason` and nonempty exact `evidence_ids`. Those evidence IDs include an atomic
|
|
2703
|
-
`claim_kind: registry-leaf-inspection` record whose only subject is the exact
|
|
2704
|
-
entry ID and whose repository source uses
|
|
2705
|
-
`inspection_scope: implementation-body`; a bulk installer or registration
|
|
2706
|
-
record cannot prove leafhood. Otherwise every referenced child
|
|
2707
|
-
resolves to a declared `root: false` registry. Every non-root registry is linked by a parent
|
|
2708
|
-
entry, roots are not children, all registries are reachable from a root, and
|
|
2709
|
-
the graph is acyclic. This recursive closure prevents a parent connector,
|
|
2710
|
-
transport, or provider from hiding nested authentication, catalog, schema,
|
|
2711
|
-
storage, or key-management selections. A complete registry with no entries
|
|
2712
|
-
explains `empty_reason`; a complete scan
|
|
2713
|
-
with no registry surfaces explains `absence_reason`. Every discovered
|
|
2714
|
-
candidate has a globally unique stable ID, nonempty `evidence_ids`, and one
|
|
2715
|
-
disposition:
|
|
2716
|
-
|
|
2717
|
-
- `mapped` requires nonempty `subject_ids` that resolve only to inventory IDs
|
|
2718
|
-
in that category.
|
|
2719
|
-
- `pending` is allowed only while the category is `partial`, omits
|
|
2720
|
-
`subject_ids` and all exclusion fields, has a nonempty unique `unresolved`
|
|
2721
|
-
exact-identity-gap list, and is named exactly in the category's `uncovered`
|
|
2722
|
-
list. Runtime gaps are only `runtime-unit-identity`,
|
|
2723
|
-
`deployment-control-kind`, `deployment-control-token`, and
|
|
2724
|
-
`entrypoint-token`. State gaps are only `state-unit-identity`,
|
|
2725
|
-
`state-owner-identity`, `address-token`, `reproduction-operation-kind`, and
|
|
2726
|
-
`reproduction-token`. External gaps are only `operation-identity-key`,
|
|
2727
|
-
`callsite-identity`, `callsite-token`, `boundary-operation-token`,
|
|
2728
|
-
`destination-or-scope-key`, and `wrapper-trace`. Activation, role
|
|
2729
|
-
reachability, backing-state, materialization, production authority, and other
|
|
2730
|
-
downstream closure questions never belong in `unresolved`; carry them on the
|
|
2731
|
-
final identity and keep closure partial.
|
|
2732
|
-
- `excluded` omits `subject_ids` and requires a nonempty `exclusion_reason` plus
|
|
2733
|
-
a structured `exclusion_basis`. A `duplicate-inventory` exclusion also names
|
|
2734
|
-
exact `equivalent_subject_ids` and cites an atomic
|
|
2735
|
-
`claim_kind: duplicate-inventory-equivalence` evidence record. That record's
|
|
2736
|
-
exact subjects are the candidate ID plus the equivalent inventory IDs, and
|
|
2737
|
-
its repository source uses `inspection_scope: implementation-body`. The
|
|
2738
|
-
corresponding candidate audit row cites the same exact claim.
|
|
2739
|
-
|
|
2740
|
-
A candidate referenced by a structured-registry link may be excluded only as
|
|
2741
|
-
`duplicate-inventory`. Repository-supported providers, connectors, clients,
|
|
2742
|
-
and backends remain mapped inventory when they are gated by profile, default,
|
|
2743
|
-
configuration, flag, credential, or artifact selection; the gate makes their
|
|
2744
|
-
inventory entry `activation: optional`, not absent. Build-only, test-only,
|
|
2745
|
-
outside-boundary, internal-link, and non-independent-unit bases apply
|
|
2746
|
-
only to candidates that are genuinely not supported inventory, never as a
|
|
2747
|
-
synonym for “not selected by the default profile.”
|
|
2748
|
-
|
|
2749
|
-
Finite production-reachable commands and batches are runtime roles. Duration,
|
|
2750
|
-
normal exit, administration, and migration are not exclusion bases. Each exact
|
|
2751
|
-
wrapper or entrypoint maps separately; its runtime mapping does not replace its
|
|
2752
|
-
executable, command, annotation, or nested-subcommand registry identity.
|
|
2753
|
-
|
|
2754
|
-
Every mapped runtime role, resource, and external dependency must be named by
|
|
2755
|
-
at least one candidate in its category. This ledger records inspected
|
|
2756
|
-
candidates; it is not permission to synthesize candidates from the final map.
|
|
2757
|
-
Write it during discovery, before inventory synthesis, so an omitted launch
|
|
2758
|
-
surface or backend cannot disappear merely because no output field mentions it.
|
|
2759
|
-
A closure category may be `complete` only when its registry discovery is also
|
|
2760
|
-
complete. All three categories may be complete only after
|
|
2761
|
-
`review.yml.inventory_closure_audit` independently covers every category,
|
|
2762
|
-
candidate ID, registry ID, registry-entry ID, derived entry-category link ID,
|
|
2763
|
-
and parent-child edge ID. Review status may be `pass` only with complete
|
|
2764
|
-
closure; blocked and provisional receipts retain honest `partial` status and
|
|
2765
|
-
uncovered scope whenever that exact audit cannot be completed.
|
|
2766
|
-
|
|
2767
|
-
Every resource and external dependency also has `consumer_edges`, exactly one
|
|
2768
|
-
per `runtime_role_ids` entry. Each edge repeats that role's `activation` and
|
|
2769
|
-
`activation_basis`; its evidence has `claim_kind: role-reachability`, exact
|
|
2770
|
-
`subject_ids: [<inventory-id>, <runtime-role-id>]`, and a repository source with
|
|
2771
|
-
`inspection_scope: role-call-path`. Its typed `role_call_path` identifies that
|
|
2772
|
-
role and indexes two distinct locatable sources: a role module/entrypoint and
|
|
2773
|
-
the concrete consumer use site. Non-direct paths add a third index for the
|
|
2774
|
-
actual dispatch or configuration gate. The indexes must resolve to pairwise
|
|
2775
|
-
distinct exact repository locator keys; duplicating a locator does not create a call path.
|
|
2776
|
-
Changing only `locator_kind` does not make a location distinct.
|
|
2777
|
-
Registration, a plugin factory, or packaging evidence is not a positive
|
|
2778
|
-
consumer edge. Top-level activation is `active` when any consumer edge
|
|
2779
|
-
is active and `optional` only when every consumer edge is optional. Empty
|
|
2780
|
-
consumer sets remain possible only while the affected closure category is
|
|
2781
|
-
partial; a complete category must name a positive consumer for every resource
|
|
2782
|
-
and dependency.
|
|
2783
|
-
|
|
2784
|
-
All atomic closure records—`external-capability-scope`,
|
|
2785
|
-
`duplicate-inventory-equivalence`, `registry-category-decision`,
|
|
2786
|
-
`registry-leaf-inspection`, `operational-surface-census`,
|
|
2787
|
-
`selector-surface-census`, `role-reachability`, `state-owner-boundary`,
|
|
2788
|
-
`rebuild-source-reachability`, `state-boundary-link`,
|
|
2789
|
-
`external-interaction-boundary`, and `external-ownership-unresolved`—must be
|
|
2790
|
-
decision-grade.
|
|
2791
|
-
Their authority is `authoritative` or `indicative`, confidence is `proven` or
|
|
2792
|
-
`strong`, and environment scope is `hosted-production`,
|
|
2793
|
-
`production-reference`, or `self-host-reference`. Tentative, non-production,
|
|
2794
|
-
local-development, example, and unknown evidence cannot support these claims.
|
|
2795
|
-
|
|
2796
|
-
Use `authority: authoritative` only for a live deployment source or artifact
|
|
2797
|
-
pipeline known to control it. Use `indicative` for executable code and
|
|
2798
|
-
production-intended config, and `non-production` for self-host, dev, or example
|
|
2799
|
-
sources. Prefer code, deployment config, and IaC over prose.
|
|
2800
|
-
|
|
2801
|
-
`confidence: proven` means two independent primary sources or one authoritative
|
|
2802
|
-
declaration; `strong` means direct executable source; `tentative` creates an
|
|
2803
|
-
unresolved item. Every selected object, edge, profile, and consistency group
|
|
2804
|
-
must cite evidence. Evidence can support multiple exact subject IDs.
|
|
2805
|
-
|
|
2806
|
-
Every evidence record has a nonempty `assertion` and resolves a recognized
|
|
2807
|
-
`environment_scope`, `authority` (`authoritative`, `indicative`, or
|
|
2808
|
-
`non-production`), `confidence` (`proven`, `strong`, or `tentative`), and at
|
|
2809
|
-
least one source through exactly one inline form or stable-ID catalog form.
|
|
2810
|
-
Each source has either a normalized repository-relative POSIX `path`, typed
|
|
2811
|
-
`locator_kind`, and structured `anchor`, or opaque `source_ref` plus a structured
|
|
2812
|
-
`selector` or `record_key`. Use the second form for a deployment catalog
|
|
2813
|
-
record or a Haystack adapter qualification
|
|
2814
|
-
record. Never use a direct provider response. Its `kind` must identify that
|
|
2815
|
-
source type. Opaque catalog sources omit repository-only `anchor`,
|
|
2816
|
-
`locator_kind`, and `lines` fields. `source_ref` is an opaque catalog handle,
|
|
2817
|
-
never a raw URL, ARN,
|
|
2818
|
-
provider resource ID, production endpoint, credential, connection string, or
|
|
2819
|
-
secret.
|
|
2820
|
-
|
|
2821
|
-
Record every path actually excluded. External discovery enumerates every
|
|
2822
|
-
repository-supported provider, connector, client, and backend capability once,
|
|
2823
|
-
including capabilities gated off by active profiles. Role reachability decides
|
|
2824
|
-
consumer edges and activation, not whether a supported capability exists. Do
|
|
2825
|
-
not expand topology permutations, but do not collapse distinct provider
|
|
2826
|
-
implementations. Use `status: partial` with uncovered scope when the budget
|
|
2827
|
-
prevents a justified enumeration or reachability decision.
|
|
2828
|
-
|
|
2829
|
-
Apply component rules and typed basename globs to normalized
|
|
2830
|
-
repository-relative POSIX paths. Activate `spec`, `fixtures`, `mocks`, and
|
|
2831
|
-
snapshot components only where repository evidence identifies a matching test
|
|
2832
|
-
framework and test root; they can otherwise contain product specifications or
|
|
2833
|
-
bootstrap adapters. Never use a substring pattern such as `*test*`, which also
|
|
2834
|
-
matches `latest`, `contest`, and `attestation`. The reviewer
|
|
2835
|
-
snapshot contains only tracked, retained source files and no `.git` directory.
|
|
2836
|
-
Filesystem confinement must prevent reads outside it, and network must be off.
|
|
2837
|
-
Reject symlinks that escape the retained tree or target an excluded path;
|
|
2838
|
-
materialize allowed internal targets as regular files. Run a language-aware
|
|
2839
|
-
preflight for co-located test declarations. If retained production files still
|
|
2840
|
-
contain tests and no syntax-aware filter can remove them safely, block with
|
|
2841
|
-
`reviewer-test-path-isolation-unavailable`. A prompt or isolated working
|
|
2842
|
-
directory alone is insufficient.
|
|
2843
|
-
|
|
2844
|
-
Record snapshot preparation as a structured executable plus argument list.
|
|
2845
|
-
Keep `arguments` exactly `[skills, prepare-universe-review, --json]`; list each
|
|
2846
|
-
approved tracked inactive gitlink as an exact normalized path in
|
|
2847
|
-
`exclude_inactive_submodule_paths`. That field represents the repeated
|
|
2848
|
-
`--exclude-inactive-submodule` option and is an empty list when no omission was
|
|
2849
|
-
approved. Never store a shell command string.
|
|
2850
|
-
|
|
2851
|
-
Before final validation, lint every `evidence.sources[].path` against the same
|
|
2852
|
-
activated policy. A denied path is a blocker, and the validator resolves every
|
|
2853
|
-
repository path against the current git root and rejects missing or non-file
|
|
2854
|
-
sources.
|
|
2855
|
-
|
|
2856
|
-
## `review.yml`
|
|
2857
|
-
|
|
2858
|
-
```yaml
|
|
2859
|
-
version: 1
|
|
2860
|
-
inventory_closure_audit:
|
|
2861
|
-
status: completed
|
|
2862
|
-
mode: customer-cli-subagent
|
|
2863
|
-
read_only: true
|
|
2864
|
-
repository_only: true
|
|
2865
|
-
independent_from_primary: true
|
|
2866
|
-
resumable: true
|
|
2867
|
-
ephemeral: false
|
|
2868
|
-
spawned_subagents: 0
|
|
2869
|
-
primary_plan_hidden_during_inventory: true
|
|
2870
|
-
final_artifacts_unchanged_since_blind_inventory: true
|
|
2871
|
-
session_id_recorded_in_private_scratch: true
|
|
2872
|
-
output_capture: incremental-private-scratch
|
|
2873
|
-
budget:
|
|
2874
|
-
call_limit: 48
|
|
2875
|
-
elapsed_limit_seconds: 600
|
|
2876
|
-
repository_inspection_calls_used: 14
|
|
2877
|
-
elapsed_seconds: 142
|
|
2878
|
-
source_isolation:
|
|
2879
|
-
enforced: true
|
|
2880
|
-
preparation_command:
|
|
2881
|
-
executable: haystack
|
|
2882
|
-
arguments: [skills, prepare-universe-review, --json]
|
|
2883
|
-
exclude_inactive_submodule_paths: []
|
|
2884
|
-
preparation_status: ready-for-confinement
|
|
2885
|
-
manifest_digest: sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
|
|
2886
|
-
haystack_hidden: true
|
|
2887
|
-
git_metadata_included: false
|
|
2888
|
-
network_disabled: true
|
|
2889
|
-
filesystem_confined_to_snapshot: true
|
|
2890
|
-
symlink_audit: passed
|
|
2891
|
-
inline_test_audit: passed
|
|
2892
|
-
reviewed_categories: [runtime-roles, stateful-resources, external-dependencies]
|
|
2893
|
-
reviewed_candidate_ids:
|
|
2894
|
-
- candidate-checkout-entrypoint
|
|
2895
|
-
- candidate-orders-database
|
|
2896
|
-
- candidate-order-event-log
|
|
2897
|
-
- candidate-payments-client
|
|
2898
|
-
reviewed_registry_ids: [registry-integration-clients]
|
|
2899
|
-
reviewed_registry_entry_ids: [registry-entry-payments-client]
|
|
2900
|
-
reviewed_registry_entry_category_link_ids:
|
|
2901
|
-
- registry-entry-payments-client-link-runtime-roles
|
|
2902
|
-
- registry-entry-payments-client-link-stateful-resources
|
|
2903
|
-
- registry-entry-payments-client-link-external-dependencies
|
|
2904
|
-
reviewed_registry_edge_ids: []
|
|
2905
|
-
candidate_reviews:
|
|
2906
|
-
- candidate_id: candidate-checkout-entrypoint
|
|
2907
|
-
declared_disposition: mapped
|
|
2908
|
-
verdict: confirmed
|
|
2909
|
-
reason: The isolated auditor confirmed the packaged checkout entrypoint.
|
|
2910
|
-
evidence_ids: [ev-checkout-entrypoint]
|
|
2911
|
-
- candidate_id: candidate-orders-database
|
|
2912
|
-
declared_disposition: mapped
|
|
2913
|
-
verdict: confirmed
|
|
2914
|
-
reason: The isolated auditor confirmed the orders database state concern.
|
|
2915
|
-
evidence_ids: [ev-orders-db-client]
|
|
2916
|
-
- candidate_id: candidate-order-event-log
|
|
2917
|
-
declared_disposition: mapped
|
|
2918
|
-
verdict: confirmed
|
|
2919
|
-
reason: The isolated auditor confirmed the event-log state concern.
|
|
2920
|
-
evidence_ids: [ev-order-topic]
|
|
2921
|
-
- candidate_id: candidate-payments-client
|
|
2922
|
-
declared_disposition: mapped
|
|
2923
|
-
verdict: confirmed
|
|
2924
|
-
reason: The isolated auditor confirmed the outbound payments interaction.
|
|
2925
|
-
evidence_ids: [ev-payments-client]
|
|
2926
|
-
state_owner_reviews:
|
|
2927
|
-
- resource_id: orders-db
|
|
2928
|
-
declared_basis: application-persistence-boundary
|
|
2929
|
-
verdict: confirmed
|
|
2930
|
-
reason: The isolated auditor confirmed the orders persistence boundary.
|
|
2931
|
-
evidence_ids: [ev-orders-state-owner]
|
|
2932
|
-
- resource_id: order-events
|
|
2933
|
-
declared_basis: repository-declared-mutable-state
|
|
2934
|
-
verdict: confirmed
|
|
2935
|
-
reason: The isolated auditor confirmed the mutable event-log namespace.
|
|
2936
|
-
evidence_ids: [ev-order-events-state-owner]
|
|
2937
|
-
external_backing_state_reviews:
|
|
2938
|
-
- external_dependency_id: payments-api
|
|
2939
|
-
declared_disposition: none
|
|
2940
|
-
declared_basis: interaction-only
|
|
2941
|
-
declared_operation: stateless-exchange
|
|
2942
|
-
verdict: confirmed
|
|
2943
|
-
reason: >-
|
|
2944
|
-
The call reproduces interaction behavior but owns no application
|
|
2945
|
-
backing state.
|
|
2946
|
-
evidence_ids: [ev-payments-boundary]
|
|
2947
|
-
registry_entry_category_link_reviews:
|
|
2948
|
-
- registry_entry_id: registry-entry-payments-client
|
|
2949
|
-
category: runtime_roles
|
|
2950
|
-
declared_disposition: not-applicable
|
|
2951
|
-
declared_not_applicable_basis: no-independent-long-running-runtime
|
|
2952
|
-
verdict: confirmed
|
|
2953
|
-
reason: The isolated auditor found no independent runtime in the client body.
|
|
2954
|
-
evidence_ids: [ev-payments-runtime-category]
|
|
2955
|
-
- registry_entry_id: registry-entry-payments-client
|
|
2956
|
-
category: stateful_resources
|
|
2957
|
-
declared_disposition: not-applicable
|
|
2958
|
-
declared_not_applicable_basis: no-independent-persistent-state-identity
|
|
2959
|
-
verdict: confirmed
|
|
2960
|
-
reason: The isolated auditor found no independently keyed persistent state identity.
|
|
2961
|
-
evidence_ids: [ev-payments-state-category]
|
|
2962
|
-
- registry_entry_id: registry-entry-payments-client
|
|
2963
|
-
category: external_dependencies
|
|
2964
|
-
declared_disposition: candidate
|
|
2965
|
-
declared_candidate_id: candidate-payments-client
|
|
2966
|
-
verdict: confirmed
|
|
2967
|
-
reason: The isolated auditor confirmed the outbound client candidate.
|
|
2968
|
-
evidence_ids: [ev-payments-external-category]
|
|
2969
|
-
registry_leaf_reviews:
|
|
2970
|
-
- registry_entry_id: registry-entry-payments-client
|
|
2971
|
-
verdict: confirmed
|
|
2972
|
-
reason: The isolated auditor inspected the implementation body for nested selectors.
|
|
2973
|
-
evidence_ids: [ev-payments-leaf]
|
|
2974
|
-
consumer_edge_reviews:
|
|
2975
|
-
- subject_id: orders-db
|
|
2976
|
-
runtime_role_id: checkout-http-role
|
|
2977
|
-
declared_activation: active
|
|
2978
|
-
verdict: confirmed
|
|
2979
|
-
reason: The isolated auditor confirmed the orders call path for this role.
|
|
2980
|
-
evidence_ids: [ev-orders-db-consumer]
|
|
2981
|
-
- subject_id: order-events
|
|
2982
|
-
runtime_role_id: checkout-http-role
|
|
2983
|
-
declared_activation: active
|
|
2984
|
-
verdict: confirmed
|
|
2985
|
-
reason: The isolated auditor confirmed the event-log call path for this role.
|
|
2986
|
-
evidence_ids: [ev-order-events-consumer]
|
|
2987
|
-
- subject_id: payments-api
|
|
2988
|
-
runtime_role_id: checkout-http-role
|
|
2989
|
-
declared_activation: active
|
|
2990
|
-
verdict: confirmed
|
|
2991
|
-
reason: The isolated auditor confirmed the payments call path for this role.
|
|
2992
|
-
evidence_ids: [ev-payments-consumer]
|
|
2993
|
-
findings: []
|
|
2994
|
-
reviewer:
|
|
2995
|
-
mode: customer-cli-subagent
|
|
2996
|
-
read_only: true
|
|
2997
|
-
resumable: true
|
|
2998
|
-
ephemeral: false
|
|
2999
|
-
spawned_subagents: 0
|
|
3000
|
-
primary_plan_hidden_during_inventory: true
|
|
3001
|
-
session_id_recorded_in_private_scratch: true
|
|
3002
|
-
output_capture: incremental-private-scratch
|
|
3003
|
-
source_isolation:
|
|
3004
|
-
enforced: true
|
|
3005
|
-
mechanism: tracked-files-filtered-snapshot-and-filesystem-confinement
|
|
3006
|
-
preparation_command:
|
|
3007
|
-
executable: haystack
|
|
3008
|
-
arguments: [skills, prepare-universe-review, --json]
|
|
3009
|
-
exclude_inactive_submodule_paths: []
|
|
3010
|
-
preparation_status: ready-for-confinement
|
|
3011
|
-
manifest_digest: sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
|
|
3012
|
-
denied_components:
|
|
3013
|
-
- .haystack
|
|
3014
|
-
- __tests__
|
|
3015
|
-
- test
|
|
3016
|
-
- tests
|
|
3017
|
-
- e2e
|
|
3018
|
-
- cypress
|
|
3019
|
-
- playwright
|
|
3020
|
-
- testdata
|
|
3021
|
-
- test-data
|
|
3022
|
-
- integration-test
|
|
3023
|
-
- integration-tests
|
|
3024
|
-
- integration_test
|
|
3025
|
-
- integration_tests
|
|
3026
|
-
- acceptance-test
|
|
3027
|
-
- acceptance-tests
|
|
3028
|
-
- acceptance_test
|
|
3029
|
-
- acceptance_tests
|
|
3030
|
-
- system-test
|
|
3031
|
-
- system-tests
|
|
3032
|
-
- system_test
|
|
3033
|
-
- system_tests
|
|
3034
|
-
- test-results
|
|
3035
|
-
- playwright-report
|
|
3036
|
-
- .pytest_cache
|
|
3037
|
-
- .nyc_output
|
|
3038
|
-
conditional_component_rules:
|
|
3039
|
-
- id: detected-framework-roots
|
|
3040
|
-
components: [spec, specs, fixtures, __fixtures__, mocks, __mocks__, snapshots, __snapshots__]
|
|
3041
|
-
condition: matching-test-framework-and-test-root-detected
|
|
3042
|
-
activated_conditional_rule_ids: [detected-framework-roots]
|
|
3043
|
-
denied_basename_globs:
|
|
3044
|
-
- "*.test.{js,jsx,ts,tsx,mjs,cjs}"
|
|
3045
|
-
- "*.spec.{js,jsx,ts,tsx,mjs,cjs,rb}"
|
|
3046
|
-
- "*.e2e.{js,jsx,ts,tsx}"
|
|
3047
|
-
- "*.e2e-spec.{js,jsx,ts,tsx}"
|
|
3048
|
-
- "test-*.{js,jsx,ts,tsx,py,rb,go,rs}"
|
|
3049
|
-
- "*-test.{js,jsx,ts,tsx,py,rb,go,rs}"
|
|
3050
|
-
- "*_test.{py,go,rs,cc,cpp}"
|
|
3051
|
-
- "*_tests.{py,rb}"
|
|
3052
|
-
- "test_*.py"
|
|
3053
|
-
- "*_unittest.{cc,cpp,py}"
|
|
3054
|
-
- "*Test.{java,kt,kts,scala,groovy,cs,php,swift}"
|
|
3055
|
-
- "*Tests.{java,kt,kts,scala,groovy,cs,php,swift}"
|
|
3056
|
-
- "*.{snap,golden,approved}"
|
|
3057
|
-
- "{jest,vitest,playwright,cypress}.config.*"
|
|
3058
|
-
- "karma.conf.*"
|
|
3059
|
-
- "mocha.config.*"
|
|
3060
|
-
- "pytest.ini"
|
|
3061
|
-
- "tox.ini"
|
|
3062
|
-
- ".coveragerc"
|
|
3063
|
-
- "junit*.xml"
|
|
3064
|
-
haystack_hidden: true
|
|
3065
|
-
git_metadata_included: false
|
|
3066
|
-
network_disabled: true
|
|
3067
|
-
filesystem_confined_to_snapshot: true
|
|
3068
|
-
symlink_audit: passed
|
|
3069
|
-
inline_test_detector: language-aware
|
|
3070
|
-
inline_test_audit: passed
|
|
3071
|
-
|
|
3072
|
-
budget:
|
|
3073
|
-
primary_discovery:
|
|
3074
|
-
call_limit: 48
|
|
3075
|
-
elapsed_limit_seconds: 1800
|
|
3076
|
-
repository_inspection_calls_used: 24
|
|
3077
|
-
elapsed_seconds: 280
|
|
3078
|
-
authority_gate:
|
|
3079
|
-
call_limit: 6
|
|
3080
|
-
elapsed_limit_seconds: 60
|
|
3081
|
-
repository_inspection_calls_used: 5
|
|
3082
|
-
elapsed_seconds: 43
|
|
3083
|
-
blind_inventory:
|
|
3084
|
-
call_limit: 24
|
|
3085
|
-
elapsed_limit_seconds: 240
|
|
3086
|
-
repository_inspection_calls_used: 18
|
|
3087
|
-
elapsed_seconds: 211
|
|
3088
|
-
comparison:
|
|
3089
|
-
call_limit: 10
|
|
3090
|
-
elapsed_limit_seconds: 120
|
|
3091
|
-
repository_inspection_calls_used: 7
|
|
3092
|
-
elapsed_seconds: 104
|
|
3093
|
-
revision:
|
|
3094
|
-
call_limit: 4
|
|
3095
|
-
elapsed_limit_seconds: 60
|
|
3096
|
-
repository_inspection_calls_used: 3
|
|
3097
|
-
elapsed_seconds: 52
|
|
3098
|
-
final_receipt:
|
|
3099
|
-
tool_call_limit: 0
|
|
3100
|
-
elapsed_limit_seconds: 60
|
|
3101
|
-
tool_calls_used: 0
|
|
3102
|
-
elapsed_seconds: 19
|
|
3103
|
-
|
|
3104
|
-
reviewer_checkpoints:
|
|
3105
|
-
- id: checkpoint-deployment-artifacts
|
|
3106
|
-
bucket: deployment-artifacts
|
|
3107
|
-
captured_in_private_scratch: true
|
|
3108
|
-
payload_bytes: 8192
|
|
3109
|
-
payload_limit_bytes: 24576
|
|
3110
|
-
observation_ids: [blind-checkout-artifact]
|
|
3111
|
-
coverage_ledger_id: coverage-deployment-artifacts
|
|
3112
|
-
inspection_calls_used: 5
|
|
3113
|
-
elapsed_seconds: 43
|
|
3114
|
-
- id: checkpoint-runtime-state-dependencies
|
|
3115
|
-
bucket: runtime-state-dependencies
|
|
3116
|
-
captured_in_private_scratch: true
|
|
3117
|
-
payload_bytes: 8192
|
|
3118
|
-
payload_limit_bytes: 24576
|
|
3119
|
-
observation_ids: [blind-checkout-runtime]
|
|
3120
|
-
coverage_ledger_id: coverage-runtime-state-dependencies
|
|
3121
|
-
inspection_calls_used: 8
|
|
3122
|
-
elapsed_seconds: 82
|
|
3123
|
-
- id: checkpoint-interfaces-egress
|
|
3124
|
-
bucket: interfaces-egress
|
|
3125
|
-
captured_in_private_scratch: true
|
|
3126
|
-
payload_bytes: 4096
|
|
3127
|
-
payload_limit_bytes: 24576
|
|
3128
|
-
observation_ids: [blind-checkout-interface]
|
|
3129
|
-
coverage_ledger_id: coverage-interfaces-egress
|
|
3130
|
-
inspection_calls_used: 3
|
|
3131
|
-
elapsed_seconds: 31
|
|
3132
|
-
- id: checkpoint-gap-checks
|
|
3133
|
-
bucket: gap-checks
|
|
3134
|
-
captured_in_private_scratch: true
|
|
3135
|
-
payload_bytes: 4096
|
|
3136
|
-
payload_limit_bytes: 24576
|
|
3137
|
-
observation_ids: [blind-checkout-gaps]
|
|
3138
|
-
coverage_ledger_id: coverage-gap-checks
|
|
3139
|
-
inspection_calls_used: 2
|
|
3140
|
-
elapsed_seconds: 25
|
|
3141
|
-
|
|
3142
|
-
coverage_ledger:
|
|
3143
|
-
- id: coverage-deployment-artifacts
|
|
3144
|
-
bucket: deployment-artifacts
|
|
3145
|
-
phase: blind-inventory
|
|
3146
|
-
scope: deployment-and-artifact-pipelines
|
|
3147
|
-
status: covered
|
|
3148
|
-
checkpoint_id: checkpoint-deployment-artifacts
|
|
3149
|
-
scanned_roots: [infra, deploy, .github/workflows]
|
|
3150
|
-
evidence_ids: [ev-prod-checkout-deploy, ev-checkout-image-ci]
|
|
3151
|
-
inspection_calls_used: 5
|
|
3152
|
-
uncovered: []
|
|
3153
|
-
- id: coverage-runtime-state-dependencies
|
|
3154
|
-
bucket: runtime-state-dependencies
|
|
3155
|
-
phase: blind-inventory
|
|
3156
|
-
status: covered
|
|
3157
|
-
checkpoint_id: checkpoint-runtime-state-dependencies
|
|
3158
|
-
scanned_roots: [apps/checkout]
|
|
3159
|
-
evidence_ids: [ev-orders-db-client]
|
|
3160
|
-
uncovered: []
|
|
3161
|
-
- id: coverage-interfaces-egress
|
|
3162
|
-
bucket: interfaces-egress
|
|
3163
|
-
phase: blind-inventory
|
|
3164
|
-
status: covered
|
|
3165
|
-
checkpoint_id: checkpoint-interfaces-egress
|
|
3166
|
-
scanned_roots: [apps/checkout]
|
|
3167
|
-
evidence_ids: [ev-order-topic]
|
|
3168
|
-
uncovered: []
|
|
3169
|
-
- id: coverage-gap-checks
|
|
3170
|
-
bucket: gap-checks
|
|
3171
|
-
phase: blind-inventory
|
|
3172
|
-
status: covered
|
|
3173
|
-
checkpoint_id: checkpoint-gap-checks
|
|
3174
|
-
scanned_roots: [apps, infra, deploy]
|
|
3175
|
-
evidence_ids: [ev-prod-checkout-deploy]
|
|
3176
|
-
uncovered: []
|
|
3177
|
-
|
|
3178
|
-
blind_observations:
|
|
3179
|
-
- id: blind-checkout-artifact
|
|
3180
|
-
subject_ids: [checkout-image]
|
|
3181
|
-
assertion: The application image is built through the production pipeline.
|
|
3182
|
-
sources:
|
|
3183
|
-
- path: .github/workflows/build.yml
|
|
3184
|
-
anchor: jobs.build-checkout
|
|
3185
|
-
kind: workflow-key
|
|
3186
|
-
locator_kind: manifest-key
|
|
3187
|
-
- id: blind-checkout-runtime
|
|
3188
|
-
subject_ids: [checkout-http-role]
|
|
3189
|
-
assertion: The checkout runtime role reaches the selected state dependencies.
|
|
3190
|
-
- id: blind-checkout-interface
|
|
3191
|
-
subject_ids: [checkout-http]
|
|
3192
|
-
assertion: The selected checkout interface is externally reachable.
|
|
3193
|
-
- id: blind-checkout-gaps
|
|
3194
|
-
subject_ids: [commerce-platform]
|
|
3195
|
-
assertion: The bounded gap scan found no uncovered selected production scope.
|
|
3196
|
-
|
|
3197
|
-
comparison_findings:
|
|
3198
|
-
- id: review-prebuilt-image-bypasses-head
|
|
3199
|
-
kind: artifact-bypasses-verification-commit
|
|
3200
|
-
subject_ids: [checkout-image]
|
|
3201
|
-
evidence_ids: [ev-self-host-compose]
|
|
3202
|
-
resolution: accepted
|
|
3203
|
-
resolution_evidence_ids: [ev-checkout-image-ci]
|
|
3204
|
-
note: Replaced the fixed image with the commit-built artifact.
|
|
3205
|
-
|
|
3206
|
-
phase_receipts:
|
|
3207
|
-
- id: phase-comparison
|
|
3208
|
-
phase: comparison
|
|
3209
|
-
status: completed
|
|
3210
|
-
budget_path: budget.comparison
|
|
3211
|
-
payload_bytes: 4096
|
|
3212
|
-
payload_limit_bytes: 24576
|
|
3213
|
-
- id: phase-revision
|
|
3214
|
-
phase: revision
|
|
3215
|
-
status: completed
|
|
3216
|
-
budget_path: budget.revision
|
|
3217
|
-
payload_bytes: 2048
|
|
3218
|
-
payload_limit_bytes: 24576
|
|
3219
|
-
- id: phase-final-receipt
|
|
3220
|
-
phase: final-receipt
|
|
3221
|
-
status: completed
|
|
3222
|
-
budget_path: budget.final_receipt
|
|
3223
|
-
payload_bytes: 2048
|
|
3224
|
-
payload_limit_bytes: 24576
|
|
3225
|
-
|
|
3226
|
-
termination:
|
|
3227
|
-
reason: completed
|
|
3228
|
-
phase: final-receipt
|
|
3229
|
-
identity_stabilization:
|
|
3230
|
-
source_manifest_digest: sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
|
|
3231
|
-
census_record_digest: sha256:123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0
|
|
3232
|
-
source_files_total: 412
|
|
3233
|
-
source_files_scanned: 412
|
|
3234
|
-
sweeps:
|
|
3235
|
-
- id: identity-sweep-1
|
|
3236
|
-
source_manifest_digest: sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
|
|
3237
|
-
source_files_scanned: 412
|
|
3238
|
-
new_runtime_identity_count: 0
|
|
3239
|
-
new_state_identity_count: 0
|
|
3240
|
-
new_external_identity_count: 0
|
|
3241
|
-
new_selector_family_count: 0
|
|
3242
|
-
new_selector_entry_count: 0
|
|
3243
|
-
- id: identity-sweep-2
|
|
3244
|
-
source_manifest_digest: sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
|
|
3245
|
-
source_files_scanned: 412
|
|
3246
|
-
new_runtime_identity_count: 0
|
|
3247
|
-
new_state_identity_count: 0
|
|
3248
|
-
new_external_identity_count: 0
|
|
3249
|
-
new_selector_family_count: 0
|
|
3250
|
-
new_selector_entry_count: 0
|
|
3251
|
-
|
|
3252
|
-
validation:
|
|
3253
|
-
command: haystack skills validate-universe --json
|
|
3254
|
-
status: passed
|
|
3255
|
-
validator_contract_revision: 39
|
|
3256
|
-
|
|
3257
|
-
status: pass
|
|
3258
|
-
blocking_items: []
|
|
3259
|
-
```
|
|
3260
|
-
|
|
3261
|
-
`inventory_closure_audit` is independent of production authority and is
|
|
3262
|
-
mandatory on every receipt. Use `status: deferred` with a nonempty `reason`
|
|
3263
|
-
only while at least one inventory-closure category remains partial; omit all
|
|
3264
|
-
completed-audit fields on that path. A completed audit uses one durable,
|
|
3265
|
-
read-only, repository-only customer-CLI subagent with no descendants, the same
|
|
3266
|
-
mechanically isolated snapshot contract, and at most 48 repository-inspection
|
|
3267
|
-
calls or 600 elapsed seconds. `reviewed_categories` is exactly
|
|
3268
|
-
`runtime-roles`, `stateful-resources`, and `external-dependencies`.
|
|
3269
|
-
`reviewed_candidate_ids`, `reviewed_registry_ids`,
|
|
3270
|
-
`reviewed_registry_entry_ids`,
|
|
3271
|
-
`reviewed_registry_entry_category_link_ids`, and
|
|
3272
|
-
`reviewed_registry_edge_ids` must be exact set matches, not samples. Entry-link
|
|
3273
|
-
IDs are derived as `<entry-id>-link-<kebab-category>`; edge IDs are
|
|
3274
|
-
`<entry-id>-to-<child-registry-id>`.
|
|
3275
|
-
|
|
3276
|
-
The completed receipt also has exactly one `candidate_reviews` row for every
|
|
3277
|
-
candidate, one `state_owner_reviews` row for every final resource, one
|
|
3278
|
-
`external_backing_state_reviews` row for every final external dependency, one
|
|
3279
|
-
`registry_entry_category_link_reviews` row per derived link,
|
|
3280
|
-
one `registry_leaf_reviews` row per declared leaf, and one
|
|
3281
|
-
`consumer_edge_reviews` row per exact inventory-subject/runtime-role pair.
|
|
3282
|
-
Candidate rows repeat the final `mapped` or `excluded` disposition and, when
|
|
3283
|
-
excluded, the final `declared_exclusion_basis`. State-owner rows repeat the
|
|
3284
|
-
final owner basis and cite the same atomic owner claim. External rows repeat
|
|
3285
|
-
the final backing-state disposition, basis, operation, and named remote-state
|
|
3286
|
-
identity key when present, and cite the same typed boundary claim. Category-link rows repeat the final
|
|
3287
|
-
disposition, candidate ID or not-applicable basis, and leaf and consumer rows
|
|
3288
|
-
repeat their exact structured identities and activation. Every row records a
|
|
3289
|
-
verdict, a nonempty reason, and atomic evidence with the claim kind and
|
|
3290
|
-
inspection scope required by the declaration it reviews. A corrected verdict
|
|
3291
|
-
invalidates that pass: reconcile the artifacts, keep closure partial, and run
|
|
3292
|
-
a new blind audit in a fresh independent session. The completed final receipt
|
|
3293
|
-
sets `final_artifacts_unchanged_since_blind_inventory: true`, contains only
|
|
3294
|
-
`confirmed` rows, and has `findings: []`. The independent auditor reopens the
|
|
3295
|
-
final generated inventory, registry, reproduction, and closure artifacts,
|
|
3296
|
-
rather than certifying only the earlier source census. Artifact immutability
|
|
3297
|
-
never converts an unreviewed or discrepant row into a confirmed one. Any
|
|
3298
|
-
pending candidate, partial selector family, unresolved reproduction,
|
|
3299
|
-
uncovered range, corrected verdict, or remaining finding keeps the matching
|
|
3300
|
-
category partial. These rows make the audit
|
|
3301
|
-
decision-bearing rather than an exact-ID checklist. Any remaining
|
|
3302
|
-
`remote-ownership-unproven` result requires partial state closure.
|
|
3303
|
-
|
|
3304
|
-
Every finding on a superseded or partial audit has a stable ID, nonempty kind,
|
|
3305
|
-
exact candidate, registry, and registry entry ID lists, nonempty evidence, and a
|
|
3306
|
-
`resolved` or `unresolved` disposition. When no existing ID can represent a newly
|
|
3307
|
-
found gap, the finding instead records nonempty `scope`; reconciliation must add
|
|
3308
|
-
the resulting stable IDs before a fresh audit can certify closure. A resolved
|
|
3309
|
-
finding includes a concise exact-ID `resolution`. A completed final audit has no
|
|
3310
|
-
findings, including historical resolved ones.
|
|
3311
|
-
|
|
3312
|
-
`budget.primary_discovery` is required for every receipt. Calls used are
|
|
3313
|
-
non-negative integers; elapsed values are non-negative finite numbers. The
|
|
3314
|
-
nested authority-gate limits and usage cannot exceed their primary-discovery
|
|
3315
|
-
totals. The baseline `call_limit` is 48. Larger limits are selected in 48-call
|
|
3316
|
-
waves with a nonempty, unique `extension_triggers` list drawn from
|
|
3317
|
-
`unresolved-structured-registry`, `unresolved-launch-surface`,
|
|
3318
|
-
`unresolved-state-provider`, `unresolved-egress-client`,
|
|
3319
|
-
`retained-source-scale`, `omitted-production-source`, and
|
|
3320
|
-
`closure-contradiction`. Omit the list at 48. Passing receipts must remain within
|
|
3321
|
-
the selected call limit, the 1800-second total, and the 6-call/60-second authority
|
|
3322
|
-
ceilings. Blocked receipts may record an overrun only when each exceeded budget
|
|
3323
|
-
path is linked by a `kind: budget-exhausted` blocker as shown above.
|
|
3324
|
-
Calls 48, 96, and 192 are checkpoints, not terminal cutoffs for an unresolved
|
|
3325
|
-
identity frontier. `inventory-complete` requires a matching deterministic
|
|
3326
|
-
identity-census receipt, exact one-time reconciliation of every presumptive
|
|
3327
|
-
operational and registry record, no pending inventory candidate, complete
|
|
3328
|
-
operational and selector censuses, and complete receipts for all four
|
|
3329
|
-
operational frontiers. Materialization and production
|
|
3330
|
-
authority and registry semantics may remain partial. `final-receipt`, not
|
|
3331
|
-
`inventory-complete`, forbids `trace_status: identity-complete`,
|
|
3332
|
-
`category_projections`, and unresolved category-link/child-registry decisions. Its
|
|
3333
|
-
`termination.identity_stabilization` binds `source_manifest_digest`,
|
|
3334
|
-
`census_record_digest` equal to the deterministic census receipt's
|
|
3335
|
-
`second_record_digest`, equal
|
|
3336
|
-
`source_files_total` and `source_files_scanned`, and exactly two `sweeps` to the
|
|
3337
|
-
same manifest. Each sweep repeats the digest and scanned count and reports zero
|
|
3338
|
-
new runtime, state, external, selector-family, and selector-entry identities.
|
|
3339
|
-
These are consecutive source-wide sweeps, not repeated reads of one frontier.
|
|
3340
|
-
Missing hosted-production authority defers
|
|
3341
|
-
production review; it does not authorize early termination of repository
|
|
3342
|
-
discovery.
|
|
3343
|
-
|
|
3344
|
-
`budget.blind_inventory.call_limit` uses a 24-call baseline and may extend in
|
|
3345
|
-
24-call waves. Each selected wave adds up to 240 seconds to its elapsed limit.
|
|
3346
|
-
Continue while an exact blind identity frontier is open and finish only after
|
|
3347
|
-
two consecutive source-wide blind sweeps add no new exact identity. Persist and
|
|
3348
|
-
split stable-ID-sorted checkpoints rather than dropping observations at the
|
|
3349
|
-
24 KiB payload boundary.
|
|
3350
|
-
|
|
3351
|
-
Coverage status is `covered`, `partial`, or `uncovered`. Keep
|
|
3352
|
-
`blind_observations` repository-derived and separate from findings about the
|
|
3353
|
-
revealed candidate. Send and persist one blind checkpoint and one compact
|
|
3354
|
-
comparison delta per bucket; do not ingest the full candidate YAML in one
|
|
3355
|
-
reviewer message. Keep each checkpoint, projection chunk, and delta below
|
|
3356
|
-
24 KiB. Split oversized projections by sorted stable ID within the same total
|
|
3357
|
-
budget; never fall back to full YAML.
|
|
3358
|
-
|
|
3359
|
-
A passing receipt contains one checkpoint and one covered ledger entry for
|
|
3360
|
-
each of `deployment-artifacts`, `runtime-state-dependencies`,
|
|
3361
|
-
`interfaces-egress`, and `gap-checks`. Each checkpoint is captured in private
|
|
3362
|
-
scratch, has positive `payload_bytes` no greater than its declared limit or
|
|
3363
|
-
24576, and links to its ledger by stable ID. The ledger links back, has nonempty
|
|
3364
|
-
normalized `scanned_roots` and evidence, and has `uncovered: []`. It also
|
|
3365
|
-
contains completed, bounded `phase_receipts` for comparison, revision, and the
|
|
3366
|
-
final receipt. These records prove that the phases were recorded; they do not
|
|
3367
|
-
establish materialization readiness.
|
|
3368
|
-
|
|
3369
|
-
Allowed finding kinds include:
|
|
3370
|
-
|
|
3371
|
-
- `omitted-service`, `omitted-resource`, `omitted-interface`, `missing-edge`,
|
|
3372
|
-
and `missing-consistency-group`;
|
|
3373
|
-
- `phantom-component`, `unstable-id`, `weak-evidence`, and `conflict`;
|
|
3374
|
-
- `non-production-topology-promoted`, `missing-authoritative-source`, and
|
|
3375
|
-
`fidelity-ceiling-overstated`;
|
|
3376
|
-
- `artifact-bypasses-verification-commit` and
|
|
3377
|
-
`production-recipe-equivalence-unproven`;
|
|
3378
|
-
- `optional-profile-promoted`, `collapsed-structured-identity`, and
|
|
3379
|
-
`unbounded-external-enumeration`.
|
|
3380
|
-
|
|
3381
|
-
Finding resolution is `accepted`, `rejected`, or `unresolved`. A blocking item
|
|
3382
|
-
that comes from review includes exact `finding_ids`; they must resolve to
|
|
3383
|
-
`comparison_findings` IDs.
|
|
3384
|
-
|
|
3385
|
-
Use `termination.reason: completed` only when the bounded protocol finishes.
|
|
3386
|
-
Use `review-budget-exhausted` for an elapsed or call cutoff with material gaps.
|
|
3387
|
-
Use `reviewer-quota-exhausted` for a CLI quota, usage, or context limit. Preserve
|
|
3388
|
-
partial checkpoints and never replace the reviewer.
|
|
3389
|
-
|
|
3390
|
-
Also block on `reviewer-subagent-unavailable`,
|
|
3391
|
-
`reviewer-session-not-resumable`, `test-path-isolation-unavailable`,
|
|
3392
|
-
`reviewer-test-path-isolation-unavailable`, provisional scope, missing required
|
|
3393
|
-
production authority, unresolved findings, unproven artifact claims, or any
|
|
3394
|
-
universe unresolved item.
|
|
3395
|
-
|
|
3396
|
-
Set `status: pass` only when a real read-only subagent inspected the repository
|
|
3397
|
-
in one durable resumable session within all budgets; source isolation was
|
|
3398
|
-
mechanically enforced; all ledger scopes are covered; all findings are resolved
|
|
3399
|
-
with evidence; application scope is confirmed; artifact and reproduction claims
|
|
3400
|
-
meet this contract; and no blocker remains. A passing validator establishes
|
|
3401
|
-
contract consistency, not inventory completeness or hermeticity.
|
|
3402
|
-
|
|
3403
|
-
Every passing or provisional receipt records the exact command
|
|
3404
|
-
`haystack skills validate-universe --json`, `validation.status: passed`, and
|
|
3405
|
-
the JSON result's `validator_contract_revision`. A missing field, different
|
|
3406
|
-
command, non-passing status, or revision mismatch means the receipt or installed
|
|
3407
|
-
validator is stale and validation must not be accepted.
|
|
3408
|
-
|
|
3409
|
-
When an independent evaluation reports precision or recall, a zero denominator
|
|
3410
|
-
is `undefined`/`null`, never 100%. Keep the numerator and denominator beside the
|
|
3411
|
-
rate so an empty mapper output cannot be presented as perfect precision.
|