Skip to content

Commit a6200bd

Browse files
V42 Gate 9: Close promotion readiness
Adds the V42 promotion readiness report, generator, checker, canon-promotion workflow, package exports, PROVEN generator support, and promotion dry-run wiring. Updates V42 spec/docs/roadmap with Gate 9 closure and defers the /packs, /deposit, and /read route cleanup into V43+ planning. Tightens canonical-input artifact inventory for V41/V42 so demonstration promotion tests match current generated artifact requirements.
1 parent be1fef8 commit a6200bd

24 files changed

Lines changed: 2077 additions & 12 deletions

.bitcode/v42-promotion-readiness-report.json

Lines changed: 528 additions & 0 deletions
Large diffs are not rendered by default.

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,17 @@ jobs:
316316
if [ -f scripts/check-v42-gate8-local-staging-mvp-rehearsal.mjs ]; then
317317
node scripts/check-v42-gate8-local-staging-mvp-rehearsal.mjs --skip-branch-check --skip-package-tests --skip-uapi-tests
318318
fi
319+
if [ -f scripts/check-v42-gate9-promotion-readiness.mjs ]; then
320+
node scripts/check-v42-gate9-promotion-readiness.mjs --promotion-mode --skip-branch-check --skip-package-tests
321+
fi
322+
fi
323+
elif [ "$POINTER" = "V42" ]; then
324+
node scripts/check-bitcode-spec-family.mjs --version V42 --mode promoted --current-target V42
325+
node scripts/check-bitcode-canonical-inputs.mjs --current-target V42
326+
node scripts/check-bitcode-canon-posture-drift.mjs --active-canon V42 --draft-target V43
327+
node scripts/check-v42-gate9-promotion-readiness.mjs --promotion-mode --skip-branch-check --skip-package-tests
328+
if [ -f BITCODE_SPEC_V43.md ]; then
329+
node scripts/check-bitcode-spec-family.mjs --version V43 --mode draft --current-target V42
319330
fi
320331
else
321332
echo "Unexpected BITCODE_SPEC.txt pointer: $POINTER" >&2

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -445,6 +445,17 @@ jobs:
445445
if [ -f scripts/check-v42-gate8-local-staging-mvp-rehearsal.mjs ]; then
446446
node scripts/check-v42-gate8-local-staging-mvp-rehearsal.mjs --skip-branch-check --skip-package-tests --skip-uapi-tests
447447
fi
448+
if [ -f scripts/check-v42-gate9-promotion-readiness.mjs ]; then
449+
node scripts/check-v42-gate9-promotion-readiness.mjs --promotion-mode --skip-branch-check --skip-package-tests
450+
fi
451+
fi
452+
elif [ "$POINTER" = "V42" ]; then
453+
node scripts/check-bitcode-spec-family.mjs --version V42 --mode promoted --current-target V42
454+
node scripts/check-bitcode-canonical-inputs.mjs --current-target V42
455+
node scripts/check-bitcode-canon-posture-drift.mjs --active-canon V42 --draft-target V43
456+
node scripts/check-v42-gate9-promotion-readiness.mjs --promotion-mode --skip-branch-check --skip-package-tests
457+
if [ -f BITCODE_SPEC_V43.md ]; then
458+
node scripts/check-bitcode-spec-family.mjs --version V43 --mode draft --current-target V42
448459
fi
449460
else
450461
echo "Unexpected BITCODE_SPEC.txt pointer: $POINTER" >&2
Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
name: V42 Canon Promotion
2+
3+
on:
4+
pull_request:
5+
branches:
6+
- main
7+
types:
8+
- opened
9+
- synchronize
10+
- reopened
11+
- ready_for_review
12+
workflow_dispatch:
13+
14+
concurrency:
15+
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
16+
cancel-in-progress: true
17+
18+
permissions:
19+
contents: write
20+
pull-requests: read
21+
22+
jobs:
23+
promote-v42:
24+
name: V42 Promotion Validation
25+
if: >-
26+
${{
27+
github.event_name == 'workflow_dispatch' ||
28+
(
29+
github.event.pull_request.base.ref == 'main' &&
30+
github.event.pull_request.head.ref == 'version/v42' &&
31+
github.event.pull_request.head.repo.full_name == github.repository
32+
)
33+
}}
34+
runs-on: ubuntu-latest
35+
timeout-minutes: 30
36+
37+
steps:
38+
- name: Checkout version branch
39+
uses: actions/checkout@v4
40+
with:
41+
ref: ${{ github.event.pull_request.head.ref || github.ref_name }}
42+
token: ${{ github.token }}
43+
fetch-depth: 0
44+
45+
- name: Setup pnpm
46+
uses: pnpm/action-setup@v4
47+
48+
- name: Setup Node
49+
uses: actions/setup-node@v4
50+
with:
51+
node-version: "24"
52+
cache: pnpm
53+
54+
- name: Install dependencies
55+
run: pnpm install --frozen-lockfile
56+
57+
- name: Validate V42 promotion readiness
58+
run: |
59+
POINTER="$(cat BITCODE_SPEC.txt)"
60+
if [ "$POINTER" = "V41" ]; then
61+
node scripts/check-bitcode-spec-family.mjs --version V42 --mode draft --current-target V41
62+
node scripts/check-bitcode-canon-posture-drift.mjs --active-canon V41 --draft-target V42
63+
node scripts/check-bitcode-canonical-inputs.mjs --current-target V41
64+
node scripts/check-v42-gate1-mvp-experience-roadmap-opening.mjs --skip-branch-check
65+
node scripts/check-v42-gate2-depositing-shortest-path.mjs --skip-branch-check --skip-package-tests
66+
node scripts/check-v42-gate3-reading-shortest-path-state-machine.mjs --skip-branch-check --skip-uapi-tests
67+
node scripts/check-v42-gate4-readneed-review-resynthesis-product-closure.mjs --skip-branch-check --skip-package-tests --skip-uapi-tests
68+
node scripts/check-v42-gate5-readfitsfinding-preview-quote.mjs --skip-branch-check --skip-package-tests --skip-uapi-tests
69+
node scripts/check-v42-gate6-settlement-rights-delivery.mjs --skip-branch-check --skip-package-tests --skip-uapi-tests
70+
node scripts/check-v42-gate7-ai-reading-demonstration.mjs --skip-branch-check --skip-package-tests --skip-demonstration-tests
71+
node scripts/check-v42-gate8-local-staging-mvp-rehearsal.mjs --skip-branch-check --skip-package-tests --skip-uapi-tests
72+
node scripts/check-v42-gate9-promotion-readiness.mjs --promotion-mode --skip-branch-check --skip-package-tests
73+
node scripts/promote-bitcode-canon.mjs --version V42 --commit HEAD --dry-run
74+
elif [ "$POINTER" = "V42" ]; then
75+
node scripts/check-bitcode-spec-family.mjs --version V42 --mode promoted --current-target V42
76+
node scripts/check-bitcode-canonical-inputs.mjs --current-target V42
77+
node scripts/check-bitcode-canon-posture-drift.mjs --active-canon V42 --draft-target V43
78+
node scripts/check-v42-gate9-promotion-readiness.mjs --promotion-mode --skip-branch-check --skip-package-tests
79+
else
80+
echo "Unexpected BITCODE_SPEC.txt pointer: $POINTER" >&2
81+
exit 1
82+
fi
83+
pnpm --filter @bitcode/protocol typecheck
84+
pnpm --filter @bitcode/protocol test
85+
pnpm --filter @bitcode/btd typecheck
86+
pnpm --filter @bitcode/btd test
87+
npm --prefix protocol-demonstration test
88+
npm --prefix protocol-demonstration run test:v28-mvp-qa
89+
pnpm --filter @bitcode/pipeline-asset-pack typecheck
90+
pnpm --filter @bitcode/pipeline-hosts typecheck
91+
pnpm --filter @bitcode/pipeline-asset-pack exec jest --config jest.config.cjs --passWithNoTests --forceExit
92+
pnpm --filter @bitcode/pipeline-hosts exec jest --config jest.config.cjs --passWithNoTests --forceExit
93+
git diff --check
94+
95+
- name: Promote V42 canon files
96+
if: >-
97+
${{
98+
github.event_name == 'pull_request' &&
99+
github.event.pull_request.head.ref == 'version/v42'
100+
}}
101+
env:
102+
HEAD_BRANCH: ${{ github.event.pull_request.head.ref }}
103+
run: |
104+
if [ "$(cat BITCODE_SPEC.txt)" = "V42" ]; then
105+
echo "BITCODE_SPEC.txt already points to V42."
106+
exit 0
107+
fi
108+
PROOF_SOURCE_COMMIT="$(git rev-parse HEAD)"
109+
npm run promote:canon -- --version V42 --commit "$PROOF_SOURCE_COMMIT"
110+
git config user.name "github-actions[bot]"
111+
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
112+
git add \
113+
BITCODE_SPEC.txt \
114+
BITCODE_SPEC_V42.md \
115+
BITCODE_SPEC_V42_DELTA.md \
116+
BITCODE_SPEC_V42_NOTES.md \
117+
BITCODE_SPEC_V42_PARITY_MATRIX.md \
118+
BITCODE_SPEC_V42_PROVEN.md \
119+
protocol-demonstration/src/canon-posture.js \
120+
protocol-demonstration/README.md \
121+
packages/protocol/src/canon-posture.js \
122+
packages/protocol/data/state.json \
123+
packages/protocol/README.md \
124+
.bitcode
125+
git commit -m "Promote Bitcode canon to V42"
126+
git push origin "HEAD:$HEAD_BRANCH"

BITCODE_SPEC_V42.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,19 @@ Non-goals:
7272

7373
Design principles: shortest credible path, source-safe preview, proof-on-expand, purchase-before-source, depositor compensation visibility, AI-reading demonstration value, and production-hardening through tests.
7474

75+
## V43+ route vocabulary and pack activity cleanup
76+
77+
V42 proves the current MVP path before route vocabulary is renamed.
78+
The next product cleanup must remove the transitional Terminal/Exchange posture from the core experience.
79+
`/terminal` should split into `/deposit` and `/read`, and `/exchange` should become `/packs` across route names, component prefixes, tests, docs, and operator vocabulary.
80+
`/packs` is the searchable master-detail activity surface for all pack activity: deposited AssetPack options, admitted Depository AssetPacks, Finding Fits previews, settled Need-Fit AssetPacks, quotes, rights transfers, compensation posture, repository delivery, proofs, and repair states.
81+
Its master view must support column sorting, filtering, and search over measurements, synthesized AssetPack titles and descriptions, values, activity or transaction type, settlement state, compensation state, and proof roots.
82+
Its detail view exposes the selected activity's source-safe proof, telemetry, ledger/database/storage synchronization, and expandable metadata.
83+
`/deposit` should let enterprises connect source, instruct or accept Bitcode's proposed deposit AssetPack options, review source-safe measurements and likely demand/ROI posture, and approve or reject Depository admission.
84+
`/read` should own the shortest Reading path from Read Request through reviewed Need, Finding Fits, preview, settlement, and delivery.
85+
AssetPacks become the in/out simplification: Depositing creates AssetPacks for the Depository, and Reading buys synthesized Need-Fit AssetPacks.
86+
Outside public documentation, product UX must not rely on self-referential explanatory copy; route structure, progressive detail, labels, and reusable rich components must make core behavior self-explanatory while preserving power-user inspection depth.
87+
7588
## V42 system architecture and layer boundaries
7689

7790
V42 acts through existing layers:
@@ -180,6 +193,8 @@ The validating command is `pnpm run check:v42-gate8`.
180193
Gate 9 closes V42 promotion readiness.
181194
It must bind every V42 artifact, test, workflow, generated proof support, promotion command, active V42 / draft V43 runtime preparation, source-safe generated appendix output, and value-bearing mainnet blocking where relevant.
182195
It closes only when V42 can be promoted as the reliable MVP experience canon.
196+
The V42 promotion readiness canon is the generated artifact `.bitcode/v42-promotion-readiness-report.json`, the `BITCODE_SPEC_V42_PROVEN.md` generation path, `.github/workflows/v42-canon-promotion.yml`, package scripts, and promotion dry-run support.
197+
The accepted post-promotion posture is V42 active / draft V43, with value-bearing mainnet still blocked unless a later promoted canon admits it.
183198

184199
## V42 canonical subsystem surfaces
185200

BITCODE_SPEC_V42_DELTA.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,13 +73,22 @@ The rehearsal artifact is metadata only and does not serialize secrets, protecte
7373
### Gate 9: V42 Promotion Readiness
7474

7575
Bind every V42 product artifact, workflow, generated proof, promotion command, source-safety result, and active V42 / draft V43 runtime posture.
76+
Gate 9 now closes through `.bitcode/v42-promotion-readiness-report.json`.
77+
The report proves all V42 gate artifacts are covered, parseable, source-safe, workflow-bound, generated-proof-bound, and blocked from value-bearing mainnet admission.
78+
The promotion scripts support V42 through `scripts/promote-bitcode-canon.mjs`, `scripts/prepare-bitcode-spec-family-promotion.mjs`, `scripts/prepare-bitcode-runtime-canon-promotion.mjs`, and `.github/workflows/v42-canon-promotion.yml`.
79+
After promotion, the maintained runtime posture is V42 active / draft V43.
7680

7781
## Explicitly deferred
7882

7983
- V43+ agentic deposit AssetPack option synthesis remains deferred.
8084
- `/terminal` is not split into `/read` and `/deposit` during V42.
8185
- `/exchange` is not renamed to `/packs` during V42.
8286
- V43+ must take the route-vocabulary cleanup seriously: `/packs` replaces Exchange as the searchable master-detail activity route, including route names, component prefixes, tests, docs, and product vocabulary, while `/read` and `/deposit` become the short core paths for buying and selling AssetPacks.
87+
- `/packs` must cover all pack activity, including deposited AssetPack options, Depository admission, Finding Fits previews, settled Need-Fit AssetPacks, quotes, rights transfers, compensation posture, delivery, proofs, and repair.
88+
- `/packs` master view must support column sorting, filtering, and search over measurements, synthesized AssetPack titles and descriptions, values, activity or transaction type, settlement posture, compensation state, and proof roots; the detail view must expose selected source-safe activity data with expandable telemetry, ledger, database, storage, and proof metadata.
89+
- `/deposit` must evolve beyond manual admission into an agentic connected-repository flow where Bitcode proposes source-safe deposit AssetPack options from enterprise code, depositor instructions, Depository state, and Reading demand; enterprises review measurements, likely demand, likely positive ROI, and sub-criticality before approval.
90+
- `/read` must own the shortest Reading path without requiring the old Terminal cockpit as the default experience.
91+
- Outside public documentation, product copy should not compensate for unclear flows with self-referential explanations; V43+ UX should use route structure, concise labels, progressive disclosure, and rich reusable themed components to make core behavior legible.
8392
- Production-mainnet value-bearing operation remains blocked unless a later promoted canon explicitly admits it.
8493
- V42 Gate 1 does not change route behavior, pipeline behavior, settlement behavior, or demonstration behavior.
8594

BITCODE_SPEC_V42_NOTES.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,12 @@ The rehearsal binds `ReadingLocalStagingRehearsal`, Vercel Sandbox operator rece
9292
It is intentionally source-safe metadata only: secrets, protected source, raw protected prompts, raw interpolated prompts, raw provider responses, unpaid AssetPack source, wallet private material, private settlement payloads, and live rehearsal logs remain outside tracked artifacts.
9393
Gate 8 does not implement the V43+ route vocabulary, but it keeps the future product shape visible: `/read`, `/deposit`, and `/packs` remain the next route cleanup once V42 proves the current MVP path.
9494

95+
## Gate 9: V42 Promotion Readiness
96+
97+
Gate 9 records the V42 promotion-readiness closure state.
98+
The generated artifact `.bitcode/v42-promotion-readiness-report.json` binds every V42 product proof from Gates 2 through 8, the V42 promotion workflow, generated proof appendix support, promotion dry-run support, source-safety checks, and value-bearing mainnet blocking.
99+
The intended post-promotion runtime posture is active V42 / draft V43, so V43 can start from the reliable MVP experience canon and focus on the next product vocabulary and deposit-side evolution.
100+
95101
## V43+ agentic depositing roadmap note
96102

97103
V43 or a later explicitly opened version should evolve the deposit side into an agentic AssetPack option experience for enterprises.

BITCODE_SPEC_V42_PARITY_MATRIX.md

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ This matrix records the reliable MVP product surfaces that must become promotion
4040
| Settlement and delivery | BTC/BTD settlement, rights transfer, compensation, and repository PR delivery are synchronized | `.bitcode/v42-settlement-rights-delivery.json`, `AssetPackSettlementRightsDeliveryBoundary`, live harness settlement boundary, route summary, Terminal settlement readback | implemented |
4141
| AI-reading demonstration | Standalone demonstration proves AssetPack improves AI beyond public-data-only baseline | `.bitcode/v42-ai-reading-demonstration.json`, `protocol-demonstration/src/ai-reading-demonstration.js`, `test:v42-ai-reading-mvp` | implemented |
4242
| Local/staging rehearsal | Full MVP path rehearsed locally and in staging-testnet with mainnet blocked | `.bitcode/v42-local-staging-mvp-rehearsal.json`, `ReadingLocalStagingRehearsal`, `rehearse:v42-local-staging`, `check:v42-gate8` | implemented |
43-
| Promotion readiness | V42 proof and workflow promotion ready | later V42 Gate 9 artifact | draft-required |
43+
| Promotion readiness | V42 proof and workflow promotion ready | `.bitcode/v42-promotion-readiness-report.json`, `BITCODE_SPEC_V42_PROVEN.md`, `.github/workflows/v42-canon-promotion.yml`, `check:v42-gate9` | closed |
4444

4545
## V42 implementation checklist
4646

@@ -54,7 +54,17 @@ This matrix records the reliable MVP product surfaces that must become promotion
5454
| Gate 6 | Settlement rights transfer and repository delivery closure artifact | implemented |
5555
| Gate 7 | AI-reading dominant demonstration MVP artifact | implemented |
5656
| Gate 8 | Local and staging-testnet full MVP rehearsal artifact | implemented |
57-
| Gate 9 | Promotion readiness artifact and workflow | draft-required |
57+
| Gate 9 | Promotion readiness artifact and workflow | closed |
58+
59+
## Gate 9 Promotion readiness parity
60+
61+
| Area | Closure evidence | Judgment |
62+
| --- | --- | --- |
63+
| V42 gate artifacts | Gates 2 through 8 generated artifacts are covered, parseable, and source-safe | closed |
64+
| Promotion workflow | `.github/workflows/v42-canon-promotion.yml` validates V42 before canon promotion and prepares the V42 active / V43 draft posture | closed |
65+
| Promotion scripts | `scripts/promote-bitcode-canon.mjs`, `scripts/prepare-bitcode-spec-family-promotion.mjs`, and runtime canon promotion support V42 | closed |
66+
| Generated proof appendix | `BITCODE_SPEC_V42_PROVEN.md` generation includes `.bitcode/v42-promotion-readiness-report.json` | closed |
67+
| Value-bearing mainnet | V42 promotion readiness keeps value-bearing mainnet blocked | closed |
5868

5969
## V42 accepted boundaries
6070

@@ -64,6 +74,7 @@ It may not implement route, pipeline, settlement, or demonstration behavior.
6474
V42 later gates may implement product behavior only if source-safe disclosure, Need review, BTD/BTC settlement, depositor compensation, repository delivery, telemetry, and generated proof obligations are represented in tests and artifacts.
6575

6676
V42 may not split `/terminal` into `/read` and `/deposit`, and may not rename `/exchange` to `/packs`; those are V43+ roadmap items unless explicitly reopened.
77+
The V43+ parity target is stricter than a route rename: `/packs` must become the searchable master-detail activity route for AssetPacks in and out, `/deposit` must propose and admit reviewable deposit AssetPack options from connected source and Bitcode demand, `/read` must own the Reading purchase path, and product UX outside public documentation must be self-explanatory without self-referential copy.
6778

6879
## V42 completion condition
6980

0 commit comments

Comments
 (0)