Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion BITCODE_SPEC_V29.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
- Version: `V29`
- V29 state: canonical promotion complete; V29 is the active Terminal transaction-depth canon and the V29 hand-authored plus generated canon are aligned
- Current canonical/latest target: `V29`
- Canonical proof-source commit: `c02638a13a464b1a15430cf9072fd13a4391435d`
- Canonical proof-source commit: `3cfa3e71ef553ecb25221ed7116e29eccbc4df24`
- Prior canonical anchor: `BITCODE_SPEC_V28.md`
- Prior generated proof appendix: `BITCODE_SPEC_V28_PROVEN.md`
- 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
Expand Down Expand Up @@ -277,6 +277,9 @@ The promotion-readiness contract has five parts:
`packages/protocol/data/state.json` are commercial runtime posture carriers.
They must align to V28 active / V29 draft during Gate 10 work and be rewritten
to V29 active / V30 draft by promotion automation.
The Gate 10 checker is promotion-mode aware: it must accept the V28/V29 package
posture before the generated canon commit and the V29/V30 package posture after
the generated canon commit.

Gate 10 does not itself promote `BITCODE_SPEC.txt`.
It closes when `version/v29` can be pull-requested to `main` and the V29
Expand Down
5 changes: 3 additions & 2 deletions BITCODE_SPEC_V29_DELTA.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
- Version: `V29`
- V29 state: canonical promotion complete; this delta records the promoted V28-to-V29 Terminal transaction-depth and promotion-readiness closure set
- Current canonical/latest target: `V29`
- Canonical proof-source commit: `c02638a13a464b1a15430cf9072fd13a4391435d`
- Canonical proof-source commit: `3cfa3e71ef553ecb25221ed7116e29eccbc4df24`
- Prior canonical anchor: `BITCODE_SPEC_V28.md`
- Prior generated proof appendix: `BITCODE_SPEC_V28_PROVEN.md`
- 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
Expand Down Expand Up @@ -202,7 +202,8 @@ Closure acceptance:

- `check:v29-gate10` validates the V29 promotion-readiness surface from a clean
Gate 10 branch and can run in `--promotion-mode` after `BITCODE_SPEC.txt`
advances to `V29`.
advances to `V29`, including the promoted V29 active / V30 draft protocol
package posture.
- Gate-quality CI invokes all V29 gate scripts while V29 is still a draft and
switches to promoted V29 validation after the promotion workflow writes the
canonical pointer commit.
Expand Down
2 changes: 1 addition & 1 deletion BITCODE_SPEC_V29_NOTES.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
- Version: `V29`
- V29 state: canonical promotion complete; V29 notes record the accepted Terminal-depth, local/staging, and promotion-readiness evidence
- Current canonical/latest target: `V29`
- Canonical proof-source commit: `c02638a13a464b1a15430cf9072fd13a4391435d`
- Canonical proof-source commit: `3cfa3e71ef553ecb25221ed7116e29eccbc4df24`
- Prior canonical anchor: `BITCODE_SPEC_V28.md`
- Prior generated proof appendix: `BITCODE_SPEC_V28_PROVEN.md`
- 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
Expand Down
5 changes: 3 additions & 2 deletions BITCODE_SPEC_V29_PARITY_MATRIX.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
- Version: `V29`
- V29 state: canonical promotion complete; V29 parity truth, product-gate audit, generated proof, and promotion automation are aligned
- Current canonical/latest target: `V29`
- Canonical proof-source commit: `c02638a13a464b1a15430cf9072fd13a4391435d`
- Canonical proof-source commit: `3cfa3e71ef553ecb25221ed7116e29eccbc4df24`
- Prior canonical anchor: `BITCODE_SPEC_V28.md`
- Prior generated proof appendix: `BITCODE_SPEC_V28_PROVEN.md`
- 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
Expand Down Expand Up @@ -313,7 +313,8 @@ Accepted surfaces:

- `scripts/check-v29-gate10-local-staging-promotion-readiness.mjs` validates
the Gate 10 specification, QA ledger, scripts, workflow wiring, runtime
posture, and promotion-mode behavior.
posture, and promotion-mode behavior before and after the generated V29/V30
protocol package posture rewrite.
- `.github/workflows/bitcode-gate-quality.yml` runs all V29 gate checks in
draft posture and switches to promoted V29 checks after the promotion commit.
- `.github/workflows/bitcode-canon-quality.yml` accepts both V28 active / V29
Expand Down
6 changes: 3 additions & 3 deletions BITCODE_SPEC_V29_PROVEN.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
# Bitcode Spec V29 Proven

- canonicalVersion: `V29`
- canonicalCommit: `c02638a13a464b1a15430cf9072fd13a4391435d`
- canonicalCommitRecordedAt: `2026-05-21T14:33:57-03:00`
- canonicalCommit: `3cfa3e71ef553ecb25221ed7116e29eccbc4df24`
- canonicalCommitRecordedAt: `2026-05-21T15:25:23-03:00`
- worktreeState: `clean`
- generatorId: `bitcode.proven-generator.v1`
- generatedAt: `2026-05-21T14:33:57-03:00`
- generatedAt: `2026-05-21T15:25:23-03:00`
- outputPath: `BITCODE_SPEC_V29_PROVEN.md`
- 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`
- branchModes: `patch`, `context`
Expand Down
41 changes: 21 additions & 20 deletions BITCODE_SPEC_V30_NOTES.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,32 +3,38 @@
## Status

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

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

## Notes companion rule
## Notes-only draft rule

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

## Concise current-system reading

V27 is active canon.
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.
V29 is expected to deepen Terminal workflows.
V29 is active canon.
V30 is expected to harden Protocol/BTD surfaces after V28/V29 reveal implementation pressure.
Exchange is not V30 work.

## Intended V30 focus
## Deferred from V29

V29 canonically closes deeper Terminal transaction depth, local/staging promotion readiness, and promotion automation.
V30 inherits deferred hardening pressure around Bitcoin fee boundaries, GitHub delivery evidence, compute/runtime capability truth, storage/readback posture, and build/process proof surfaces.

## Candidate V30 workstreams

V30 owns Protocol/BTD hardening:

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

## Boundaries
## Non-goals during V30 opening

V30 must not redefine `$BTD` supply, BTC fee separation, AssetPack range identity, owner-read/licensed-read law, measureminting, or ancestry.
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.
V30 must not absorb Exchange or website Conversations; those return beyond V35.

## Return To V28

Do not start V30 implementation during V28.
Use this scaffold only to keep V28 focused on commercial Protocol/Terminal MVP QA and hardening.
16 changes: 10 additions & 6 deletions packages/protocol/test/protocol-package-boundary.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -45,23 +45,27 @@ test('@bitcode/protocol does not import the standalone protocol demonstration',

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

assert.equal(protocol.ACTIVE_CANON_VERSION, 'V28');
assert.equal(protocol.DRAFT_TARGET_VERSION, 'V29');
assert.equal(protocol.ACTIVE_CANON_VERSION, expectedActiveCanon);
assert.equal(protocol.DRAFT_TARGET_VERSION, expectedDraftTarget);
assert.equal(typeof protocol.buildV21SpecFamilyReport, 'function');
assert.equal(typeof protocol.buildV21CanonicalInputReport, 'function');
assert.equal(typeof protocol.buildV21GeneratedArtifactContents, 'function');
assert.equal(typeof protocol.buildCanonPostureDriftReport, 'function');
assert.equal(typeof protocol.PROVEN_GENERATOR_ID, 'string');
assert.equal(typeof protocol.defaultProvenOutputPath, 'function');
assert.equal(typeof protocol.generateCanonicalProvenMarkdown, 'function');
assert.equal(protocol.defaultProvenOutputPath('V28'), 'BITCODE_SPEC_V28_PROVEN.md');
assert.equal(protocol.defaultProvenOutputPath(expectedActiveCanon), `BITCODE_SPEC_${expectedActiveCanon}_PROVEN.md`);
const specFamilyReport = protocol.buildV21SpecFamilyReport({
version: 'V29',
mode: 'draft',
currentTarget: 'V28',
mode: expectedSpecFamilyMode,
currentTarget: expectedActiveCanon,
});
const canonicalInputReport = protocol.buildV21CanonicalInputReport({ currentTarget: 'V28' });
const canonicalInputReport = protocol.buildV21CanonicalInputReport({ currentTarget: expectedActiveCanon });
assert.equal(specFamilyReport.passed, true);
assert.equal(canonicalInputReport.passed, true);
});
Expand Down
4 changes: 2 additions & 2 deletions protocol-demonstration/test/v21-specifying.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@ function projectLabel(version) {
function expectedActiveCanonicalInputArtifactCount(version) {
const numeric = Number.parseInt(String(version || '').replace(/^V/u, ''), 10);
if (!Number.isInteger(numeric)) return 3;
if (numeric === 27 || numeric === 28) return 0;
if (numeric >= 26) return 22;
if (numeric >= 27) return 0;
if (numeric === 26) return 22;
if (numeric >= 22) return 3;
if (numeric === 21) return 2;
return 6;
Expand Down
12 changes: 6 additions & 6 deletions scripts/check-bitcode-draft-notes.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ function parseArgs(argv) {
function printHelp() {
process.stdout.write(
[
'Usage: node scripts/check-bitcode-draft-notes.mjs --version V27 --current-target V26 [options]',
'Usage: node scripts/check-bitcode-draft-notes.mjs --version V30 --current-target V29 [options]',
'',
'Options:',
' --version <VN> Draft target version to validate.',
Expand Down Expand Up @@ -55,9 +55,9 @@ function main() {
const requiredPhrases = [
`Spec ${version} Notes`,
'## Status',
`Canonical pointer: \`${path.join(repoRoot, 'BITCODE_SPEC.txt')}\` -> \`${currentTarget}\``,
`Active canonical anchor: \`${path.join(repoRoot, `${activeSpecPrefix}_${currentTarget}.md`)}\``,
`Active generated proof appendix: \`${path.join(repoRoot, `${activeSpecPrefix}_${currentTarget}_PROVEN.md`)}\``,
`Canonical pointer: \`BITCODE_SPEC.txt\` -> \`${currentTarget}\``,
`Active canonical anchor: \`${activeSpecPrefix}_${currentTarget}.md\``,
`Active generated proof appendix: \`${activeSpecPrefix}_${currentTarget}_PROVEN.md\``,
`${version} state: notes-only draft opening`,
'## Notes-only draft rule',
`## Deferred from ${currentTarget}`,
Expand All @@ -67,8 +67,8 @@ function main() {
'compute',
'storage',
'build/process',
'## Candidate V27 workstreams',
'## Non-goals during V26 closure'
`## Candidate ${version} workstreams`,
`## Non-goals during ${version} opening`
];

for (const phrase of requiredPhrases) {
Expand Down
23 changes: 14 additions & 9 deletions scripts/check-v29-gate10-local-staging-promotion-readiness.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -193,20 +193,25 @@ function main() {
'Runtime promotion preparation must update commercial package posture, package data, and package README.',
);

const expectedActiveCanon = pointer === 'V29' ? 'V29' : 'V28';
const expectedDraftTarget = pointer === 'V29' ? 'V30' : 'V29';
const expectedProtocolReadmePosture =
pointer === 'V29' ? 'V29` active, `V30` draft after V29 promotion' : 'V28` active, `V29` draft';

assertCheck(
failures,
packageCanonPosture.includes("ACTIVE_CANON_VERSION = 'V28'") &&
packageCanonPosture.includes("DRAFT_TARGET_VERSION = 'V29'") &&
packageState.includes('"activeCanonVersion": "V28"') &&
packageState.includes('"draftTargetVersion": "V29"') &&
packageState.includes('"activeProvenAppendixPath": "BITCODE_SPEC_V28_PROVEN.md"') &&
packageState.includes('"draftSpecPath": "BITCODE_SPEC_V29.md"'),
'Protocol package posture and seed state must be aligned to V28 active / V29 draft before promotion.',
packageCanonPosture.includes(`ACTIVE_CANON_VERSION = '${expectedActiveCanon}'`) &&
packageCanonPosture.includes(`DRAFT_TARGET_VERSION = '${expectedDraftTarget}'`) &&
packageState.includes(`"activeCanonVersion": "${expectedActiveCanon}"`) &&
packageState.includes(`"draftTargetVersion": "${expectedDraftTarget}"`) &&
packageState.includes(`"activeProvenAppendixPath": "BITCODE_SPEC_${expectedActiveCanon}_PROVEN.md"`) &&
packageState.includes(`"draftSpecPath": "BITCODE_SPEC_${expectedDraftTarget}.md"`),
`Protocol package posture and seed state must be aligned to ${expectedActiveCanon} active / ${expectedDraftTarget} draft.`,
);
assertCheck(
failures,
protocolReadme.includes('V28` active, `V29` draft') && protocolReadme.includes('Gate 10'),
'Protocol package README must name the draft posture and Gate 10 promotion boundary.',
protocolReadme.includes(expectedProtocolReadmePosture) && protocolReadme.includes('Gate 10'),
`Protocol package README must name the ${expectedActiveCanon}/${expectedDraftTarget} posture and Gate 10 promotion boundary.`,
);
assertCheck(
failures,
Expand Down
Loading