Skip to content

Commit 708c442

Browse files
V34 Gate 2: Catalog deployment hosts and lanes
Adds package-owned DeploymentHostCapabilityCatalog and EnvironmentLaneContract builders for website, API, MCP API, ChatGPT App, workers, observers, broadcasters, proof services, repair jobs, object storage, database projection, ledger projection, and environment lanes. Generates source-safe V34 host/lane artifacts, wires Gate 2 checks into package scripts and gate-quality workflow, updates V34 spec/roadmap parity, and covers value-bearing mainnet as blocked_future_canon_required. Validation: pnpm run check:v34-gate2; pnpm run check:v34-gate1; pnpm --filter @bitcode/btd typecheck; pnpm --filter @bitcode/btd test; pnpm --filter @bitcode/protocol test; node scripts/check-bitcode-spec-family.mjs --version V34 --mode draft --current-target V33; node scripts/check-bitcode-canonical-inputs.mjs --current-target V33; node scripts/check-bitcode-canon-posture-drift.mjs --active-canon V33 --draft-target V34; node scripts/check-v33-gate10-promotion-readiness.mjs --promotion-mode --skip-branch-check; git diff --check
1 parent e862ffc commit 708c442

16 files changed

Lines changed: 2825 additions & 30 deletions

.bitcode/v34-deployment-host-capability-catalog.json

Lines changed: 429 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 275 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,275 @@
1+
{
2+
"artifactId": "v34-environment-lane-contracts",
3+
"closureCommand": "pnpm run check:v34-gate2",
4+
"coverage": {
5+
"credentialsSerialized": false,
6+
"laneCount": 7,
7+
"mainnetReadyDryRunAdmission": "dry_run_only",
8+
"missingLaneIds": [],
9+
"observedLaneIds": [
10+
"local",
11+
"regtest",
12+
"signet",
13+
"staging-testnet",
14+
"public-testnet",
15+
"mainnet-ready-dry-run",
16+
"value-bearing-mainnet"
17+
],
18+
"protectedSourceVisible": false,
19+
"valueBearingMainnetAdmission": "blocked_future_canon_required",
20+
"valueBearingMainnetAdmittedHostCount": 0,
21+
"valueBearingMainnetHidden": false
22+
},
23+
"currentTarget": "V33",
24+
"generatedAt": "2026-05-22T00:00:00.000Z",
25+
"laneContractRoot": "v34-environment-lane-contracts:4c4874984efa54e0eac959a7",
26+
"lanes": [
27+
{
28+
"admittedHostIds": [
29+
"website",
30+
"api",
31+
"mcp_api",
32+
"chatgpt_app",
33+
"pipeline_workers",
34+
"proof_services",
35+
"repair_jobs",
36+
"object_storage",
37+
"database_projection"
38+
],
39+
"bitcoinNetworkPosture": "none",
40+
"laneId": "local",
41+
"laneRoot": "v34-environment-lane-contract:74296544dca9b29e341ea7c8",
42+
"supabaseProjectPosture": "local_process",
43+
"telemetryProofHookId": "deployment.telemetry.lane.local",
44+
"valueBearingAdmission": "not_value_bearing",
45+
"vercelProjectPosture": "local_process",
46+
"walletPolicy": "no_wallet"
47+
},
48+
{
49+
"admittedHostIds": [
50+
"api",
51+
"pipeline_workers",
52+
"runtime_observers",
53+
"ledger_broadcasters",
54+
"proof_services",
55+
"repair_jobs",
56+
"object_storage",
57+
"database_projection",
58+
"ledger_projection"
59+
],
60+
"bitcoinNetworkPosture": "regtest",
61+
"laneId": "regtest",
62+
"laneRoot": "v34-environment-lane-contract:7d91c2c69a9939b4e6aca64c",
63+
"supabaseProjectPosture": "local_project",
64+
"telemetryProofHookId": "deployment.telemetry.lane.regtest",
65+
"valueBearingAdmission": "not_value_bearing",
66+
"vercelProjectPosture": "local_project",
67+
"walletPolicy": "regtest_wallet"
68+
},
69+
{
70+
"admittedHostIds": [
71+
"api",
72+
"pipeline_workers",
73+
"runtime_observers",
74+
"ledger_broadcasters",
75+
"proof_services",
76+
"repair_jobs",
77+
"object_storage",
78+
"database_projection",
79+
"ledger_projection"
80+
],
81+
"bitcoinNetworkPosture": "signet",
82+
"laneId": "signet",
83+
"laneRoot": "v34-environment-lane-contract:e438d47a5e32d600ef07e9cb",
84+
"supabaseProjectPosture": "staging_testnet_project",
85+
"telemetryProofHookId": "deployment.telemetry.lane.signet",
86+
"valueBearingAdmission": "not_value_bearing",
87+
"vercelProjectPosture": "staging_testnet_project",
88+
"walletPolicy": "signet_wallet"
89+
},
90+
{
91+
"admittedHostIds": [
92+
"website",
93+
"api",
94+
"mcp_api",
95+
"chatgpt_app",
96+
"pipeline_workers",
97+
"runtime_observers",
98+
"ledger_broadcasters",
99+
"proof_services",
100+
"repair_jobs",
101+
"object_storage",
102+
"database_projection",
103+
"ledger_projection"
104+
],
105+
"bitcoinNetworkPosture": "signet",
106+
"laneId": "staging-testnet",
107+
"laneRoot": "v34-environment-lane-contract:6653d398e7f72c5c09b73c25",
108+
"supabaseProjectPosture": "staging_testnet_project",
109+
"telemetryProofHookId": "deployment.telemetry.lane.staging-testnet",
110+
"valueBearingAdmission": "not_value_bearing",
111+
"vercelProjectPosture": "staging_testnet_project",
112+
"walletPolicy": "signet_wallet"
113+
},
114+
{
115+
"admittedHostIds": [
116+
"website",
117+
"api",
118+
"mcp_api",
119+
"chatgpt_app",
120+
"pipeline_workers",
121+
"runtime_observers",
122+
"ledger_broadcasters",
123+
"proof_services",
124+
"repair_jobs",
125+
"object_storage",
126+
"database_projection",
127+
"ledger_projection"
128+
],
129+
"bitcoinNetworkPosture": "testnet",
130+
"laneId": "public-testnet",
131+
"laneRoot": "v34-environment-lane-contract:25ca918cccc58f2b320c2235",
132+
"supabaseProjectPosture": "public_testnet_project",
133+
"telemetryProofHookId": "deployment.telemetry.lane.public-testnet",
134+
"valueBearingAdmission": "not_value_bearing",
135+
"vercelProjectPosture": "public_testnet_project",
136+
"walletPolicy": "testnet_wallet"
137+
},
138+
{
139+
"admittedHostIds": [
140+
"website",
141+
"api",
142+
"mcp_api",
143+
"chatgpt_app",
144+
"pipeline_workers",
145+
"runtime_observers",
146+
"proof_services",
147+
"repair_jobs",
148+
"object_storage",
149+
"database_projection",
150+
"ledger_projection"
151+
],
152+
"bitcoinNetworkPosture": "mainnet",
153+
"laneId": "mainnet-ready-dry-run",
154+
"laneRoot": "v34-environment-lane-contract:097dee47502a17c5611d5c9c",
155+
"supabaseProjectPosture": "production_project_dry_run",
156+
"telemetryProofHookId": "deployment.telemetry.lane.mainnet-ready-dry-run",
157+
"valueBearingAdmission": "dry_run_only",
158+
"vercelProjectPosture": "production_project_dry_run",
159+
"walletPolicy": "mainnet_watch_only"
160+
},
161+
{
162+
"admittedHostIds": [],
163+
"bitcoinNetworkPosture": "mainnet",
164+
"laneId": "value-bearing-mainnet",
165+
"laneRoot": "v34-environment-lane-contract:c08b11a2a29dbe2e4c20a035",
166+
"supabaseProjectPosture": "production_project_blocked",
167+
"telemetryProofHookId": "deployment.telemetry.lane.value-bearing-mainnet",
168+
"valueBearingAdmission": "blocked_future_canon_required",
169+
"vercelProjectPosture": "production_project_blocked",
170+
"walletPolicy": "mainnet_value_blocked"
171+
}
172+
],
173+
"passed": true,
174+
"requiredLaneIds": [
175+
"local",
176+
"regtest",
177+
"signet",
178+
"staging-testnet",
179+
"public-testnet",
180+
"mainnet-ready-dry-run",
181+
"value-bearing-mainnet"
182+
],
183+
"schemaId": "bitcode.v34.environmentLaneContracts.v1",
184+
"sharedFixtureFiles": [
185+
"packages/btd/src/deployment-host-capability-catalog.ts",
186+
"packages/btd/src/index.ts",
187+
"BITCODE_SPEC_V34.md",
188+
"BITCODE_SPEC_V34_DELTA.md",
189+
"BITCODE_SPEC_V34_PARITY_MATRIX.md",
190+
"packages/btd/__tests__/deployment-host-capability-catalog.test.ts",
191+
"scripts/check-v34-gate2-host-capability-environment-lanes.mjs"
192+
],
193+
"sourceEvidence": [
194+
{
195+
"digest": "sha256:b4e7d2ef3b7ee2ce09922527aa88a5796ae4093c1bd77ff926f822bf13038a5a",
196+
"relativePath": "packages/btd/src/deployment-host-capability-catalog.ts",
197+
"requiredTokens": [
198+
{
199+
"present": true,
200+
"token": "ENVIRONMENT_LANE_CONTRACT_IDS"
201+
},
202+
{
203+
"present": true,
204+
"token": "mainnet-ready-dry-run"
205+
},
206+
{
207+
"present": true,
208+
"token": "value-bearing-mainnet"
209+
},
210+
{
211+
"present": true,
212+
"token": "blocked_future_canon_required"
213+
},
214+
{
215+
"present": true,
216+
"token": "buildEnvironmentLaneContracts"
217+
}
218+
]
219+
},
220+
{
221+
"digest": "sha256:ddbf849e72492008f814fde47e1c4ebf0565a445a579d01942cd543e18ff6b74",
222+
"relativePath": "BITCODE_SPEC_V34_DELTA.md",
223+
"requiredTokens": [
224+
{
225+
"present": true,
226+
"token": "local, regtest, signet, staging-testnet, public testnet, mainnet-ready dry run, and value-bearing mainnet lanes are represented"
227+
},
228+
{
229+
"present": true,
230+
"token": ".bitcode/v34-environment-lane-contracts.json"
231+
}
232+
]
233+
}
234+
],
235+
"sourceSafetyVerdict": "source-safe-environment-lane-contract-metadata",
236+
"testEvidence": [
237+
{
238+
"digest": "sha256:3f620773822bfd97dde2617fd166318991d1d454bf624c17baff96b0d2bc3532",
239+
"relativePath": "packages/btd/__tests__/deployment-host-capability-catalog.test.ts",
240+
"requiredTokens": [
241+
{
242+
"present": true,
243+
"token": "catalogs local, regtest, signet, staging-testnet, public testnet, mainnet dry run, and blocked value-bearing mainnet lanes"
244+
},
245+
{
246+
"present": true,
247+
"token": "fails closed when value-bearing mainnet admits hosts or stops being blocked"
248+
},
249+
{
250+
"present": true,
251+
"token": "fails closed when mainnet-ready dry run is made value-bearing"
252+
}
253+
]
254+
},
255+
{
256+
"digest": "sha256:da4dbd254c1804bb44eb3bd6e32d37f51715bf77bdacfe57c7af4ec8d1bcd8ff",
257+
"relativePath": "scripts/check-v34-gate2-host-capability-environment-lanes.mjs",
258+
"requiredTokens": [
259+
{
260+
"present": true,
261+
"token": "value-bearing-mainnet"
262+
},
263+
{
264+
"present": true,
265+
"token": "blocked_future_canon_required"
266+
},
267+
{
268+
"present": true,
269+
"token": "environment-lane-contracts"
270+
}
271+
]
272+
}
273+
],
274+
"version": "V34"
275+
}

.github/workflows/bitcode-gate-quality.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,7 @@ jobs:
148148
fi
149149
node scripts/check-v33-gate10-promotion-readiness.mjs --promotion-mode --skip-branch-check
150150
node scripts/check-v34-gate1-deployment-roadmap-opening.mjs --skip-branch-check
151+
node scripts/check-v34-gate2-host-capability-environment-lanes.mjs --skip-branch-check
151152
else
152153
echo "Unexpected BITCODE_SPEC.txt pointer: $POINTER" >&2
153154
exit 1
@@ -183,6 +184,7 @@ jobs:
183184
pnpm --filter @bitcode/btd test -- --runTestsByPath __tests__/api-schema-compatibility-matrix.test.ts
184185
pnpm --filter @bitcode/btd test -- --runTestsByPath __tests__/interface-telemetry-proof-hook.test.ts
185186
pnpm --filter @bitcode/btd test -- --runTestsByPath __tests__/interface-consumer-ux-regression-proof.test.ts
187+
pnpm --filter @bitcode/btd test -- --runTestsByPath __tests__/deployment-host-capability-catalog.test.ts
186188
pnpm --filter @bitcode/btd test -- --runTestsByPath __tests__/v32-testnet-mainnet-readiness-rehearsal.test.ts
187189
pnpm --dir packages/protocol exec node --test --test-force-exit test/v32-promotion-proof-generation.test.js
188190
pnpm --filter @bitcode/api exec jest --config jest.config.cjs --runTestsByPath src/routes/__tests__/btd-crypto.test.ts --runInBand

BITCODE_SPEC_V34.md

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@
33
## Status
44

55
- Version: `V34`
6-
- V34 state: Gate 1 deployment-roadmap opening is active over promoted V33 canon
6+
- V34 state: Gate 2 host capability and environment lane catalog is closed over promoted V33 canon
77
- Current canonical/latest target: `V33`
88
- Prior canonical anchor: `BITCODE_SPEC_V33.md`
99
- Prior generated proof appendix: `BITCODE_SPEC_V33_PROVEN.md`
10-
- Generated structured artifact inventory: draft V34 specifying artifacts `.bitcode/v34-spec-family-report.json`, `.bitcode/v34-canonical-input-report.json`, and later deployment-depth artifacts as gates close
11-
- Source parity state: Gate 1 opens V34 deployment-depth parity; host capability, environment lane, distributed execution, storage, approval, rollback, repair, and rehearsal source parity is not closed until the relevant gates close
10+
- Generated structured artifact inventory: draft V34 specifying artifacts `.bitcode/v34-spec-family-report.json`, `.bitcode/v34-canonical-input-report.json`, Gate 2 artifacts `.bitcode/v34-deployment-host-capability-catalog.json` and `.bitcode/v34-environment-lane-contracts.json`, and later deployment-depth artifacts as gates close
11+
- Source parity state: Gate 2 closes V34 host capability and environment lane parity; distributed execution, storage, approval, rollback, repair, and rehearsal source parity is not closed until the relevant gates close
1212
- Active canonical pointer during draft opening: `BITCODE_SPEC.txt` -> `V33`
1313
- Notes companion: `BITCODE_SPEC_V34_NOTES.md`
1414
- Delta companion: `BITCODE_SPEC_V34_DELTA.md`
@@ -194,7 +194,7 @@ Inherited V33 objects remain active: `Deposit`, `ReadRequest`, `ReadNeed`, `Find
194194
V34 closes through ten gates:
195195

196196
1. **Gate 1: V34 Deployment Roadmap And Spec Opening** opens the V34 family over V33 canon, updates `SPECIFICATIONS_ROADMAP.md`, documents V33 active / V34 draft posture, and wires `check:v34-gate1`.
197-
2. **Gate 2: Host Capability And Environment Lane Catalog** inventories runtime hosts, services, queues, observers, broadcasters, storage carriers, and lanes through `DeploymentHostCapabilityCatalog` and `EnvironmentLaneContract`.
197+
2. **Gate 2: Host Capability And Environment Lane Catalog** inventories runtime hosts, services, queues, observers, broadcasters, storage carriers, and lanes through `DeploymentHostCapabilityCatalog` and `EnvironmentLaneContract`. It is closed by `packages/btd/src/deployment-host-capability-catalog.ts`, `.bitcode/v34-deployment-host-capability-catalog.json`, `.bitcode/v34-environment-lane-contracts.json`, `packages/btd/__tests__/deployment-host-capability-catalog.test.ts`, and `pnpm run check:v34-gate2`.
198198
3. **Gate 3: Distributed Execution Runtime Contracts** defines `DistributedExecutionRuntimeReceipt` for long-running pipeline, ledger, wallet, proof, object-storage, and repair work.
199199
4. **Gate 4: Ledger Database Object Storage Deployment Posture** hardens ledger-derived state, database projection, object storage, generated proof artifacts, audit logs, backup, retention, and rollback material.
200200
5. **Gate 5: Secret Rotation And Credential Boundary Operations** defines secret families, storage owners, rotation commands, leak-response posture, CI masking, and runtime availability checks.
@@ -504,8 +504,11 @@ Primary V34 types: `DeploymentHostCapabilityCatalog`, `EnvironmentLaneContract`,
504504
Primary surfaces: website, API, MCP API, ChatGPT App, workers, observers, broadcasters, repair jobs, ledger projection, database projection, object-storage projection, and proof replay.
505505

506506
Gate 2 catalog rows are package-owned source-safe metadata.
507-
Required row ids include `website_app`, `public_api`, `mcp_api`, `chatgpt_app`, `pipeline_worker`, `ledger_observer`, `settlement_broadcaster`, `proof_service`, and `repair_job`.
508-
Each row names owner package, runtime surface, host capability, lane contract, storage carrier, required secret family, validation command, compatibility status, failure mode, repair posture, telemetry proof hook id, and deterministic proof root.
507+
Required host row ids are `website`, `api`, `mcp_api`, `chatgpt_app`, `pipeline_workers`, `runtime_observers`, `ledger_broadcasters`, `proof_services`, `repair_jobs`, `object_storage`, `database_projection`, and `ledger_projection`.
508+
Required lane row ids are `local`, `regtest`, `signet`, `staging-testnet`, `public-testnet`, `mainnet-ready-dry-run`, and `value-bearing-mainnet`.
509+
The `value-bearing-mainnet` lane is visible as `blocked_future_canon_required`; it admits no runtime hosts and carries `mainnet_value_blocked` wallet policy.
510+
Each host row names owner package, runtime surface, runtime carrier, packages, network posture, secret family names without values, storage carrier, observer/broadcaster/repair capability, validation path, failure mode, repair posture, telemetry proof hook id, and deterministic proof root.
511+
Each lane row names Bitcoin network posture, Supabase and Vercel project posture, value-bearing admission, retention, wallet policy, secret scope, proof requirements, admitted hosts, failure mode, repair posture, telemetry proof hook id, and deterministic proof root.
509512

510513
## Appendix B. Proof family closure catalog
511514

@@ -541,8 +544,8 @@ V34 preserves operator-quality proof output expectations and extends them to dep
541544
| --- | --- | --- | --- |
542545
| `.bitcode/v34-spec-family-report.json` | protocol | source-safe | `node scripts/check-bitcode-spec-family.mjs --version V34 --mode draft --current-target V33` |
543546
| `.bitcode/v34-canonical-input-report.json` | protocol | source-safe | `node scripts/check-bitcode-canonical-inputs.mjs --current-target V33` |
544-
| `.bitcode/v34-deployment-host-capability-catalog.json` | protocol | source-safe | later V34 gate |
545-
| `.bitcode/v34-environment-lane-contracts.json` | protocol | source-safe | later V34 gate |
547+
| `.bitcode/v34-deployment-host-capability-catalog.json` | btd | source-safe-deployment-host-capability-metadata | `pnpm run check:v34-host-capability-environment-lanes` |
548+
| `.bitcode/v34-environment-lane-contracts.json` | btd | source-safe-environment-lane-contract-metadata | `pnpm run check:v34-host-capability-environment-lanes` |
546549
| `.bitcode/v34-distributed-execution-runtime-receipts.json` | protocol | source-safe | later V34 gate |
547550
| `.bitcode/v34-deployment-storage-posture.json` | protocol | source-safe | later V34 gate |
548551
| `.bitcode/v34-secret-rotation-boundary-operations.json` | protocol | source-safe | later V34 gate |
@@ -555,7 +558,8 @@ V34 preserves operator-quality proof output expectations and extends them to dep
555558
### V34 specifying generated artifacts
556559

557560
Gate 1 requires `.bitcode/v34-spec-family-report.json` and `.bitcode/v34-canonical-input-report.json` to be declared.
558-
Later V34 gates introduce the deployment artifacts listed above.
561+
Gate 2 requires `.bitcode/v34-deployment-host-capability-catalog.json` and `.bitcode/v34-environment-lane-contracts.json` to be generated, source-safe, deterministic, and checked by `pnpm run check:v34-gate2`.
562+
Later V34 gates introduce the remaining deployment artifacts listed above.
559563

560564
### Shared generated-artifact fields
561565

@@ -581,7 +585,8 @@ Canonical regeneration fails closed when generated inputs drift, source safety f
581585
## Appendix D. Validation and checking gate catalog
582586

583587
Gate 1 validation is `pnpm run check:v34-gate1`.
584-
The gate also runs spec-family, canonical-input, canon-posture drift, and diff hygiene checks.
588+
Gate 2 validation is `pnpm run check:v34-gate2`, with artifact freshness checked by `pnpm run check:v34-host-capability-environment-lanes` and focused package coverage in `packages/btd/__tests__/deployment-host-capability-catalog.test.ts`.
589+
The gate-quality workflow also runs spec-family, canonical-input, canon-posture drift, and diff hygiene checks.
585590
Later gates add generated artifact checks close to their deployment contract surfaces.
586591

587592
## Appendix E. Current canonical source map

0 commit comments

Comments
 (0)