Skip to content

Commit 6b20e25

Browse files
Merge pull request #32 from engineeredsoftware/v29/gate-10-promoted-readiness-posture
V29 Gate 10: Promoted Protocol Posture Readiness
2 parents c245da1 + 416ccc5 commit 6b20e25

10 files changed

Lines changed: 67 additions & 52 deletions

BITCODE_SPEC_V29.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
- Version: `V29`
66
- V29 state: canonical promotion complete; V29 is the active Terminal transaction-depth canon and the V29 hand-authored plus generated canon are aligned
77
- Current canonical/latest target: `V29`
8-
- Canonical proof-source commit: `c02638a13a464b1a15430cf9072fd13a4391435d`
8+
- Canonical proof-source commit: `3cfa3e71ef553ecb25221ed7116e29eccbc4df24`
99
- Prior canonical anchor: `BITCODE_SPEC_V28.md`
1010
- Prior generated proof appendix: `BITCODE_SPEC_V28_PROVEN.md`
1111
- Generated structured artifact inventory: active canonical `.bitcode/v29-spec-family-report.json`, `.bitcode/v29-canonical-input-report.json`, `.bitcode/v29-canon-posture-drift-report.json`, V29 gate-quality and promotion workflow evidence, and `BITCODE_SPEC_V29_PROVEN.md` as the generated proof appendix for V29 promotion
@@ -277,6 +277,9 @@ The promotion-readiness contract has five parts:
277277
`packages/protocol/data/state.json` are commercial runtime posture carriers.
278278
They must align to V28 active / V29 draft during Gate 10 work and be rewritten
279279
to V29 active / V30 draft by promotion automation.
280+
The Gate 10 checker is promotion-mode aware: it must accept the V28/V29 package
281+
posture before the generated canon commit and the V29/V30 package posture after
282+
the generated canon commit.
280283

281284
Gate 10 does not itself promote `BITCODE_SPEC.txt`.
282285
It closes when `version/v29` can be pull-requested to `main` and the V29

BITCODE_SPEC_V29_DELTA.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
- Version: `V29`
66
- V29 state: canonical promotion complete; this delta records the promoted V28-to-V29 Terminal transaction-depth and promotion-readiness closure set
77
- Current canonical/latest target: `V29`
8-
- Canonical proof-source commit: `c02638a13a464b1a15430cf9072fd13a4391435d`
8+
- Canonical proof-source commit: `3cfa3e71ef553ecb25221ed7116e29eccbc4df24`
99
- Prior canonical anchor: `BITCODE_SPEC_V28.md`
1010
- Prior generated proof appendix: `BITCODE_SPEC_V28_PROVEN.md`
1111
- Generated structured artifact inventory: active canonical `.bitcode/v29-spec-family-report.json`, `.bitcode/v29-canonical-input-report.json`, `.bitcode/v29-canon-posture-drift-report.json`, V29 gate-quality and promotion workflow evidence, and `BITCODE_SPEC_V29_PROVEN.md` as the generated proof appendix for V29 promotion
@@ -202,7 +202,8 @@ Closure acceptance:
202202

203203
- `check:v29-gate10` validates the V29 promotion-readiness surface from a clean
204204
Gate 10 branch and can run in `--promotion-mode` after `BITCODE_SPEC.txt`
205-
advances to `V29`.
205+
advances to `V29`, including the promoted V29 active / V30 draft protocol
206+
package posture.
206207
- Gate-quality CI invokes all V29 gate scripts while V29 is still a draft and
207208
switches to promoted V29 validation after the promotion workflow writes the
208209
canonical pointer commit.

BITCODE_SPEC_V29_NOTES.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
- Version: `V29`
66
- V29 state: canonical promotion complete; V29 notes record the accepted Terminal-depth, local/staging, and promotion-readiness evidence
77
- Current canonical/latest target: `V29`
8-
- Canonical proof-source commit: `c02638a13a464b1a15430cf9072fd13a4391435d`
8+
- Canonical proof-source commit: `3cfa3e71ef553ecb25221ed7116e29eccbc4df24`
99
- Prior canonical anchor: `BITCODE_SPEC_V28.md`
1010
- Prior generated proof appendix: `BITCODE_SPEC_V28_PROVEN.md`
1111
- Generated structured artifact inventory: active canonical `.bitcode/v29-spec-family-report.json`, `.bitcode/v29-canonical-input-report.json`, `.bitcode/v29-canon-posture-drift-report.json`, V29 gate-quality and promotion workflow evidence, and `BITCODE_SPEC_V29_PROVEN.md` as the generated proof appendix for V29 promotion

BITCODE_SPEC_V29_PARITY_MATRIX.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
- Version: `V29`
66
- V29 state: canonical promotion complete; V29 parity truth, product-gate audit, generated proof, and promotion automation are aligned
77
- Current canonical/latest target: `V29`
8-
- Canonical proof-source commit: `c02638a13a464b1a15430cf9072fd13a4391435d`
8+
- Canonical proof-source commit: `3cfa3e71ef553ecb25221ed7116e29eccbc4df24`
99
- Prior canonical anchor: `BITCODE_SPEC_V28.md`
1010
- Prior generated proof appendix: `BITCODE_SPEC_V28_PROVEN.md`
1111
- Generated structured artifact inventory: active canonical `.bitcode/v29-spec-family-report.json`, `.bitcode/v29-canonical-input-report.json`, `.bitcode/v29-canon-posture-drift-report.json`, V29 gate-quality and promotion workflow evidence, and `BITCODE_SPEC_V29_PROVEN.md` as the generated proof appendix for V29 promotion
@@ -313,7 +313,8 @@ Accepted surfaces:
313313

314314
- `scripts/check-v29-gate10-local-staging-promotion-readiness.mjs` validates
315315
the Gate 10 specification, QA ledger, scripts, workflow wiring, runtime
316-
posture, and promotion-mode behavior.
316+
posture, and promotion-mode behavior before and after the generated V29/V30
317+
protocol package posture rewrite.
317318
- `.github/workflows/bitcode-gate-quality.yml` runs all V29 gate checks in
318319
draft posture and switches to promoted V29 checks after the promotion commit.
319320
- `.github/workflows/bitcode-canon-quality.yml` accepts both V28 active / V29

BITCODE_SPEC_V29_PROVEN.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
# Bitcode Spec V29 Proven
22

33
- canonicalVersion: `V29`
4-
- canonicalCommit: `c02638a13a464b1a15430cf9072fd13a4391435d`
5-
- canonicalCommitRecordedAt: `2026-05-21T14:33:57-03:00`
4+
- canonicalCommit: `3cfa3e71ef553ecb25221ed7116e29eccbc4df24`
5+
- canonicalCommitRecordedAt: `2026-05-21T15:25:23-03:00`
66
- worktreeState: `clean`
77
- generatorId: `bitcode.proven-generator.v1`
8-
- generatedAt: `2026-05-21T14:33:57-03:00`
8+
- generatedAt: `2026-05-21T15:25:23-03:00`
99
- outputPath: `BITCODE_SPEC_V29_PROVEN.md`
1010
- scenarioIds: `auth-issuer-rollback`, `rust-validator-proof-gap`, `config-policy-precedence-incident`, `unsafe-patch-review-recovery`, `infra-deployment-mismatch`, `privacy-boundary-proof-export`, `polyglot-gateway-benchmark-remediation`, `auth-many-asset-normalization`
1111
- branchModes: `patch`, `context`

BITCODE_SPEC_V30_NOTES.md

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,32 +3,38 @@
33
## Status
44

55
- Version: `V30`
6-
- V30 state: future notes scaffold only
7-
- Current canonical/latest target: `V27`
8-
- Current active draft target: `V28`
9-
- Prior canonical anchor: `BITCODE_SPEC_V27.md`
10-
- Prior generated proof appendix: `BITCODE_SPEC_V27_PROVEN.md`
6+
- V30 state: notes-only draft opening
7+
- Current canonical/latest target: `V29`
8+
- Current active draft target: `V30`
9+
- Canonical pointer: `BITCODE_SPEC.txt` -> `V29`
10+
- Active canonical anchor: `BITCODE_SPEC_V29.md`
11+
- Active generated proof appendix: `BITCODE_SPEC_V29_PROVEN.md`
12+
- Prior canonical anchor: `BITCODE_SPEC_V29.md`
13+
- Prior generated proof appendix: `BITCODE_SPEC_V29_PROVEN.md`
1114
- Generated structured artifact inventory: none for V30 yet
12-
- Source parity state: not opened; V30 source parity begins only after V30 draft opening
15+
- Source parity state: notes-only draft opening; V30 source parity begins only after V30 first-gate work
1316
- Scope: future notes for Protocol/BTD hardening after V28 commercial Protocol/Terminal MVP and V29 deeper Terminal work. Exchange is deferred beyond V35.
1417

1518
This NOTES file does not promote V30 and does not open V30 implementation.
16-
It preserves roadmap intent so V28 can remain focused on commercial Protocol/Terminal MVP QA, bugfixing, audit, and hardening.
19+
It preserves roadmap intent so V30 first-gate work can open from promoted V29 without rediscovering deferred Protocol/BTD hardening pressure.
1720

18-
## Notes companion rule
21+
## Notes-only draft rule
1922

20-
This file is planning memory only.
21-
Requirements become binding only when V30 is explicitly opened as the draft-target SPEC family.
23+
This file is planning memory only and is not first-gate implementation.
24+
Requirements become binding only when V30 is explicitly opened as a full draft-target SPEC family.
2225

2326
## Concise current-system reading
2427

25-
V27 is active canon.
26-
V28 is current draft target and owns commercial Protocol implementation, Terminal MVP QA, MCP API/ChatGPT App MVP, BTD/testnet/ledgerization, and demonstration-to-commercial boundary cleanup.
27-
V29 is expected to deepen Terminal workflows.
28+
V29 is active canon.
2829
V30 is expected to harden Protocol/BTD surfaces after V28/V29 reveal implementation pressure.
2930
Exchange is not V30 work.
3031

31-
## Intended V30 focus
32+
## Deferred from V29
33+
34+
V29 canonically closes deeper Terminal transaction depth, local/staging promotion readiness, and promotion automation.
35+
V30 inherits deferred hardening pressure around Bitcoin fee boundaries, GitHub delivery evidence, compute/runtime capability truth, storage/readback posture, and build/process proof surfaces.
36+
37+
## Candidate V30 workstreams
3238

3339
V30 owns Protocol/BTD hardening:
3440

@@ -40,13 +46,8 @@ V30 owns Protocol/BTD hardening:
4046
- source-to-shares proof cleanup revealed by V28/V29;
4147
- Protocol/BTD-specific tests, proofs, and telemetry hooks needed before Exchange returns beyond V35.
4248

43-
## Boundaries
49+
## Non-goals during V30 opening
4450

4551
V30 must not redefine `$BTD` supply, BTC fee separation, AssetPack range identity, owner-read/licensed-read law, measureminting, or ancestry.
4652
V30 must not absorb V31 Auxillaries expansion, V32 provation/testing depth, V33 interface depth, V34 deployment depth, or V35 telemetry/documenting depth except for narrow Protocol/BTD-owned hooks.
4753
V30 must not absorb Exchange or website Conversations; those return beyond V35.
48-
49-
## Return To V28
50-
51-
Do not start V30 implementation during V28.
52-
Use this scaffold only to keep V28 focused on commercial Protocol/Terminal MVP QA and hardening.

packages/protocol/test/protocol-package-boundary.test.js

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -45,23 +45,27 @@ test('@bitcode/protocol does not import the standalone protocol demonstration',
4545

4646
test('@bitcode/protocol commercial formalization exports package-native canon helpers', async () => {
4747
const protocol = await import('../src/index.js');
48+
const pointer = readFileSync(path.join(repoRoot, 'BITCODE_SPEC.txt'), 'utf8').trim();
49+
const expectedActiveCanon = pointer === 'V29' ? 'V29' : 'V28';
50+
const expectedDraftTarget = pointer === 'V29' ? 'V30' : 'V29';
51+
const expectedSpecFamilyMode = pointer === 'V29' ? 'promoted' : 'draft';
4852

49-
assert.equal(protocol.ACTIVE_CANON_VERSION, 'V28');
50-
assert.equal(protocol.DRAFT_TARGET_VERSION, 'V29');
53+
assert.equal(protocol.ACTIVE_CANON_VERSION, expectedActiveCanon);
54+
assert.equal(protocol.DRAFT_TARGET_VERSION, expectedDraftTarget);
5155
assert.equal(typeof protocol.buildV21SpecFamilyReport, 'function');
5256
assert.equal(typeof protocol.buildV21CanonicalInputReport, 'function');
5357
assert.equal(typeof protocol.buildV21GeneratedArtifactContents, 'function');
5458
assert.equal(typeof protocol.buildCanonPostureDriftReport, 'function');
5559
assert.equal(typeof protocol.PROVEN_GENERATOR_ID, 'string');
5660
assert.equal(typeof protocol.defaultProvenOutputPath, 'function');
5761
assert.equal(typeof protocol.generateCanonicalProvenMarkdown, 'function');
58-
assert.equal(protocol.defaultProvenOutputPath('V28'), 'BITCODE_SPEC_V28_PROVEN.md');
62+
assert.equal(protocol.defaultProvenOutputPath(expectedActiveCanon), `BITCODE_SPEC_${expectedActiveCanon}_PROVEN.md`);
5963
const specFamilyReport = protocol.buildV21SpecFamilyReport({
6064
version: 'V29',
61-
mode: 'draft',
62-
currentTarget: 'V28',
65+
mode: expectedSpecFamilyMode,
66+
currentTarget: expectedActiveCanon,
6367
});
64-
const canonicalInputReport = protocol.buildV21CanonicalInputReport({ currentTarget: 'V28' });
68+
const canonicalInputReport = protocol.buildV21CanonicalInputReport({ currentTarget: expectedActiveCanon });
6569
assert.equal(specFamilyReport.passed, true);
6670
assert.equal(canonicalInputReport.passed, true);
6771
});

protocol-demonstration/test/v21-specifying.test.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ function projectLabel(version) {
2020
function expectedActiveCanonicalInputArtifactCount(version) {
2121
const numeric = Number.parseInt(String(version || '').replace(/^V/u, ''), 10);
2222
if (!Number.isInteger(numeric)) return 3;
23-
if (numeric === 27 || numeric === 28) return 0;
24-
if (numeric >= 26) return 22;
23+
if (numeric >= 27) return 0;
24+
if (numeric === 26) return 22;
2525
if (numeric >= 22) return 3;
2626
if (numeric === 21) return 2;
2727
return 6;

scripts/check-bitcode-draft-notes.mjs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ function parseArgs(argv) {
2020
function printHelp() {
2121
process.stdout.write(
2222
[
23-
'Usage: node scripts/check-bitcode-draft-notes.mjs --version V27 --current-target V26 [options]',
23+
'Usage: node scripts/check-bitcode-draft-notes.mjs --version V30 --current-target V29 [options]',
2424
'',
2525
'Options:',
2626
' --version <VN> Draft target version to validate.',
@@ -55,9 +55,9 @@ function main() {
5555
const requiredPhrases = [
5656
`Spec ${version} Notes`,
5757
'## Status',
58-
`Canonical pointer: \`${path.join(repoRoot, 'BITCODE_SPEC.txt')}\` -> \`${currentTarget}\``,
59-
`Active canonical anchor: \`${path.join(repoRoot, `${activeSpecPrefix}_${currentTarget}.md`)}\``,
60-
`Active generated proof appendix: \`${path.join(repoRoot, `${activeSpecPrefix}_${currentTarget}_PROVEN.md`)}\``,
58+
`Canonical pointer: \`BITCODE_SPEC.txt\` -> \`${currentTarget}\``,
59+
`Active canonical anchor: \`${activeSpecPrefix}_${currentTarget}.md\``,
60+
`Active generated proof appendix: \`${activeSpecPrefix}_${currentTarget}_PROVEN.md\``,
6161
`${version} state: notes-only draft opening`,
6262
'## Notes-only draft rule',
6363
`## Deferred from ${currentTarget}`,
@@ -67,8 +67,8 @@ function main() {
6767
'compute',
6868
'storage',
6969
'build/process',
70-
'## Candidate V27 workstreams',
71-
'## Non-goals during V26 closure'
70+
`## Candidate ${version} workstreams`,
71+
`## Non-goals during ${version} opening`
7272
];
7373

7474
for (const phrase of requiredPhrases) {

scripts/check-v29-gate10-local-staging-promotion-readiness.mjs

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -193,20 +193,25 @@ function main() {
193193
'Runtime promotion preparation must update commercial package posture, package data, and package README.',
194194
);
195195

196+
const expectedActiveCanon = pointer === 'V29' ? 'V29' : 'V28';
197+
const expectedDraftTarget = pointer === 'V29' ? 'V30' : 'V29';
198+
const expectedProtocolReadmePosture =
199+
pointer === 'V29' ? 'V29` active, `V30` draft after V29 promotion' : 'V28` active, `V29` draft';
200+
196201
assertCheck(
197202
failures,
198-
packageCanonPosture.includes("ACTIVE_CANON_VERSION = 'V28'") &&
199-
packageCanonPosture.includes("DRAFT_TARGET_VERSION = 'V29'") &&
200-
packageState.includes('"activeCanonVersion": "V28"') &&
201-
packageState.includes('"draftTargetVersion": "V29"') &&
202-
packageState.includes('"activeProvenAppendixPath": "BITCODE_SPEC_V28_PROVEN.md"') &&
203-
packageState.includes('"draftSpecPath": "BITCODE_SPEC_V29.md"'),
204-
'Protocol package posture and seed state must be aligned to V28 active / V29 draft before promotion.',
203+
packageCanonPosture.includes(`ACTIVE_CANON_VERSION = '${expectedActiveCanon}'`) &&
204+
packageCanonPosture.includes(`DRAFT_TARGET_VERSION = '${expectedDraftTarget}'`) &&
205+
packageState.includes(`"activeCanonVersion": "${expectedActiveCanon}"`) &&
206+
packageState.includes(`"draftTargetVersion": "${expectedDraftTarget}"`) &&
207+
packageState.includes(`"activeProvenAppendixPath": "BITCODE_SPEC_${expectedActiveCanon}_PROVEN.md"`) &&
208+
packageState.includes(`"draftSpecPath": "BITCODE_SPEC_${expectedDraftTarget}.md"`),
209+
`Protocol package posture and seed state must be aligned to ${expectedActiveCanon} active / ${expectedDraftTarget} draft.`,
205210
);
206211
assertCheck(
207212
failures,
208-
protocolReadme.includes('V28` active, `V29` draft') && protocolReadme.includes('Gate 10'),
209-
'Protocol package README must name the draft posture and Gate 10 promotion boundary.',
213+
protocolReadme.includes(expectedProtocolReadmePosture) && protocolReadme.includes('Gate 10'),
214+
`Protocol package README must name the ${expectedActiveCanon}/${expectedDraftTarget} posture and Gate 10 promotion boundary.`,
210215
);
211216
assertCheck(
212217
failures,

0 commit comments

Comments
 (0)