Skip to content

Commit 4917e39

Browse files
V31 Gate 10: Close promotion readiness
Wire V31 promotion automation, Gate Quality and Canon Quality promoted-state checks, and the version/v31 canon promotion workflow. Add V31 generated artifact support, Auxillaries telemetry proof-hook promotion evidence, source-safe QA ledger, and promotion-readiness specifications. Validated V31 gate checks, protocol and API builds/tests, focused Auxillaries UI/API tests, generated artifact replay, promotion dry-run, diff hygiene, and secret-shape sweep.
1 parent e147132 commit 4917e39

20 files changed

Lines changed: 1160 additions & 31 deletions
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
{
2+
"reportId": "v31-auxillaries-telemetry-proof-hooks",
3+
"version": "V31",
4+
"proofSourceCommit": "e147132e4b98a930561363185eee9d21a8aca005",
5+
"generatedAt": "2026-05-22T03:08:03-03:00",
6+
"generatorId": "bitcode.proven-generator.v1",
7+
"worktreeState": "dirty-preview",
8+
"passed": true,
9+
"sourceSafe": true,
10+
"checkedFileCount": 11,
11+
"checkedFiles": [
12+
"packages/api/src/routes/auxillaries-contract.ts",
13+
"packages/api/src/routes/__tests__/auxillaries-contract.test.ts",
14+
"uapi/hooks/useUserData.ts",
15+
"uapi/hooks/useUserData.js",
16+
"uapi/app/auxillaries/components/AuxillariesExternalsPane.tsx",
17+
"uapi/tests/userDataRoute.test.ts",
18+
"uapi/tests/auxillariesExternalsPane.test.tsx",
19+
"BITCODE_SPEC_V31.md",
20+
"BITCODE_SPEC_V31_DELTA.md",
21+
"BITCODE_SPEC_V31_NOTES.md",
22+
"BITCODE_SPEC_V31_PARITY_MATRIX.md"
23+
],
24+
"requiredTelemetrySubjects": [
25+
"profile",
26+
"account",
27+
"provider_connection",
28+
"interface_admission",
29+
"wallet",
30+
"btd_pane",
31+
"organization_authority",
32+
"policy_decision",
33+
"readiness_diagnostic",
34+
"recovery_run"
35+
],
36+
"proofHookCoverage": [
37+
"theorem ids",
38+
"replay step ids",
39+
"evidence roots",
40+
"telemetry roots",
41+
"blocker ids",
42+
"repair outcomes",
43+
"source-safety classes",
44+
"proof roots"
45+
],
46+
"compatibleWith": [
47+
"V32"
48+
],
49+
"failures": []
50+
}
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
{
2+
"reportId": "v31-canon-posture-drift-report",
3+
"version": "V31",
4+
"checkedActiveCanonVersion": "V31",
5+
"checkedDraftTargetVersion": "V32",
6+
"pointerVersion": "V30",
7+
"proofSourceCommit": "e147132e4b98a930561363185eee9d21a8aca005",
8+
"generatedAt": "2026-05-22T03:08:03-03:00",
9+
"generatorId": "bitcode.proven-generator.v1",
10+
"worktreeState": "dirty-preview",
11+
"passed": false,
12+
"checkCount": 10,
13+
"blockingFailureCount": 7,
14+
"blockingFailures": [
15+
"pointer-active-canon-alignment: BITCODE_SPEC.txt points to V30 while runtime expects V31.",
16+
"canon-posture-constant-alignment: canon-posture constants resolve V30/V31 with operator label V30 active canon / V31 system draft.",
17+
"proven-appendix-alignment: active generated appendix path is BITCODE_SPEC_V30_PROVEN.md.",
18+
"policy-ref-alignment: policy reference is policy://bitcode/spec-v30-active-v31-system-draft/current.",
19+
"runtime-state-alignment: buildInitialState() reports Bitcode Spec V30 active canon / V31 system draft with canon posture V30/V31.",
20+
"public-state-alignment: publicState() reports Bitcode Spec V30 active canon / V31 system draft with canon posture V30/V31.",
21+
"readme-alignment: README states V31 active canon and BITCODE_SPEC_V30_PROVEN.md as the current generated appendix."
22+
],
23+
"runtimeSpecVersion": "Bitcode Spec V30 active canon / V31 system draft",
24+
"publicSpecVersion": "Bitcode Spec V30 active canon / V31 system draft",
25+
"activeProvenAppendixPath": "BITCODE_SPEC_V30_PROVEN.md",
26+
"policyRef": "policy://bitcode/spec-v30-active-v31-system-draft/current",
27+
"checkedFiles": [
28+
"protocol-demonstration/README.md",
29+
"protocol-demonstration/public/index.html",
30+
"protocol-demonstration/public/app.js",
31+
"protocol-demonstration/server.js"
32+
],
33+
"checks": [
34+
{
35+
"checkId": "pointer-active-canon-alignment",
36+
"passed": false,
37+
"detail": "BITCODE_SPEC.txt points to V30 while runtime expects V31."
38+
},
39+
{
40+
"checkId": "canon-posture-constant-alignment",
41+
"passed": false,
42+
"detail": "canon-posture constants resolve V30/V31 with operator label V30 active canon / V31 system draft."
43+
},
44+
{
45+
"checkId": "proven-appendix-alignment",
46+
"passed": false,
47+
"detail": "active generated appendix path is BITCODE_SPEC_V30_PROVEN.md."
48+
},
49+
{
50+
"checkId": "policy-ref-alignment",
51+
"passed": false,
52+
"detail": "policy reference is policy://bitcode/spec-v30-active-v31-system-draft/current."
53+
},
54+
{
55+
"checkId": "runtime-state-alignment",
56+
"passed": false,
57+
"detail": "buildInitialState() reports Bitcode Spec V30 active canon / V31 system draft with canon posture V30/V31."
58+
},
59+
{
60+
"checkId": "public-state-alignment",
61+
"passed": false,
62+
"detail": "publicState() reports Bitcode Spec V30 active canon / V31 system draft with canon posture V30/V31."
63+
},
64+
{
65+
"checkId": "server-api-alignment",
66+
"passed": true,
67+
"detail": "server.js keeps API posture sourced from SPEC_VERSION and buildPublicState(...)."
68+
},
69+
{
70+
"checkId": "browser-shell-placeholder-alignment",
71+
"passed": true,
72+
"detail": "public/index.html exposes canon-posture placeholders and no stale hardcoded hero posture."
73+
},
74+
{
75+
"checkId": "browser-shell-render-alignment",
76+
"passed": true,
77+
"detail": "public/app.js renders canon posture from runtime state and omits stale V15 explainer keys."
78+
},
79+
{
80+
"checkId": "readme-alignment",
81+
"passed": false,
82+
"detail": "README states V31 active canon and BITCODE_SPEC_V30_PROVEN.md as the current generated appendix."
83+
}
84+
]
85+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
{
2+
"reportId": "v31-canonical-input-report",
3+
"version": "V31",
4+
"proofSourceCommit": "e147132e4b98a930561363185eee9d21a8aca005",
5+
"generatedAt": "2026-05-22T03:08:03-03:00",
6+
"generatorId": "bitcode.proven-generator.v1",
7+
"worktreeState": "dirty-preview",
8+
"checkedTargetVersion": "V31",
9+
"pointerVersion": "V30",
10+
"passed": true,
11+
"failureCount": 0,
12+
"failures": [],
13+
"specPath": "BITCODE_SPEC_V31.md",
14+
"notesPath": "BITCODE_SPEC_V31_NOTES.md",
15+
"provenPath": "BITCODE_SPEC_V31_PROVEN.md",
16+
"parityPath": "BITCODE_SPEC_V31_PARITY_MATRIX.md",
17+
"requiredGeneratedArtifactPaths": [
18+
".bitcode/v31-spec-family-report.json",
19+
".bitcode/v31-canonical-input-report.json",
20+
".bitcode/v31-canon-posture-drift-report.json",
21+
".bitcode/v31-auxillaries-telemetry-proof-hooks.json"
22+
],
23+
"requiredGeneratedArtifactCount": 4
24+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
{
2+
"reportId": "v31-spec-family-report",
3+
"version": "V31",
4+
"proofSourceCommit": "e147132e4b98a930561363185eee9d21a8aca005",
5+
"generatedAt": "2026-05-22T03:08:03-03:00",
6+
"generatorId": "bitcode.proven-generator.v1",
7+
"worktreeState": "dirty-preview",
8+
"checkedVersion": "V31",
9+
"mode": "draft",
10+
"currentTarget": "V30",
11+
"pointerVersion": "V30",
12+
"passed": true,
13+
"failureCount": 0,
14+
"failures": [],
15+
"requiredFiles": [
16+
"BITCODE_SPEC_V31.md",
17+
"BITCODE_SPEC_V31_DELTA.md",
18+
"BITCODE_SPEC_V31_NOTES.md",
19+
"BITCODE_SPEC_V31_PARITY_MATRIX.md"
20+
],
21+
"supportFiles": [
22+
"BITCODE_SPECIFYING.md",
23+
"BITCODE_SPEC_TEMPLATEGUIDE.md"
24+
],
25+
"requiredStatusLabelCount": 4,
26+
"requiredPromotedStatusLabelCount": 1,
27+
"requiredSpecSectionCount": 18,
28+
"requiredAppendixSectionCount": 14,
29+
"requiredProofFamilyCount": 9,
30+
"requiredGeneratedArtifactCatalogSectionCount": 9,
31+
"requiredGeneratedArtifactPathCount": 4,
32+
"requiredNotesSectionCount": 4,
33+
"requiredSubsystemCoverageCount": 18
34+
}

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,13 @@ jobs:
3838
node scripts/check-bitcode-canon-posture-drift.mjs --active-canon V30 --draft-target V31
3939
node scripts/check-bitcode-spec-family.mjs --version V30 --mode promoted --current-target V30
4040
node scripts/check-bitcode-spec-family.mjs --version V31 --mode draft --current-target V30
41+
elif [ "$POINTER" = "V31" ]; then
42+
node scripts/check-bitcode-canonical-inputs.mjs --current-target V31
43+
node scripts/check-bitcode-canon-posture-drift.mjs --active-canon V31 --draft-target V32
44+
node scripts/check-bitcode-spec-family.mjs --version V31 --mode promoted --current-target V31
45+
if [ -f BITCODE_SPEC_V32.md ]; then
46+
node scripts/check-bitcode-spec-family.mjs --version V32 --mode draft --current-target V31
47+
fi
4148
else
4249
echo "Unexpected BITCODE_SPEC.txt pointer: $POINTER" >&2
4350
exit 1

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,12 @@ jobs:
104104
node scripts/check-v31-gate7-interfaces-pane-admission-cross-surface-contracts.mjs --skip-branch-check
105105
node scripts/check-v31-gate8-auxillaries-ux-accessibility-responsive-proof.mjs --skip-branch-check
106106
node scripts/check-v31-gate9-auxillaries-telemetry-proof-recovery-runs.mjs --skip-branch-check
107+
node scripts/check-v31-gate10-promotion-readiness.mjs --promotion-mode --skip-branch-check
108+
elif [ "$POINTER" = "V31" ]; then
109+
node scripts/check-bitcode-spec-family.mjs --version V31 --mode promoted --current-target V31
110+
node scripts/check-bitcode-canonical-inputs.mjs --current-target V31
111+
node scripts/check-bitcode-canon-posture-drift.mjs --active-canon V31 --draft-target V32
112+
node scripts/check-v31-gate10-promotion-readiness.mjs --promotion-mode --skip-branch-check
107113
else
108114
echo "Unexpected BITCODE_SPEC.txt pointer: $POINTER" >&2
109115
exit 1
Lines changed: 154 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
1+
name: V31 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-v31:
24+
name: V31 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/v31' &&
31+
github.event.pull_request.head.repo.full_name == github.repository
32+
)
33+
}}
34+
runs-on: ubuntu-latest
35+
36+
steps:
37+
- name: Checkout version branch
38+
uses: actions/checkout@v4
39+
with:
40+
ref: ${{ github.event.pull_request.head.ref || github.ref_name }}
41+
token: ${{ github.token }}
42+
fetch-depth: 0
43+
44+
- name: Setup pnpm
45+
uses: pnpm/action-setup@v4
46+
47+
- name: Setup Node
48+
uses: actions/setup-node@v4
49+
with:
50+
node-version: "24"
51+
cache: pnpm
52+
53+
- name: Install dependencies
54+
run: pnpm install --frozen-lockfile
55+
56+
- name: Validate V31 promotion readiness
57+
run: |
58+
POINTER="$(cat BITCODE_SPEC.txt)"
59+
if [ "$POINTER" = "V30" ]; then
60+
node scripts/check-bitcode-spec-family.mjs --version V31 --mode draft --current-target V30
61+
node scripts/check-bitcode-canon-posture-drift.mjs --active-canon V30 --draft-target V31
62+
node scripts/check-bitcode-canonical-inputs.mjs --current-target V30
63+
node scripts/check-v31-gate1-spec-roadmap-opening.mjs --skip-branch-check
64+
node scripts/check-v31-gate2-auxillaries-package-route-contracts.mjs --skip-branch-check
65+
node scripts/check-v31-gate3-profile-account-state.mjs --skip-branch-check
66+
node scripts/check-v31-gate4-connects-provider-readiness.mjs --skip-branch-check
67+
node scripts/check-v31-gate5-wallet-btd-pane-readiness.mjs --skip-branch-check
68+
node scripts/check-v31-gate6-organization-team-role-policy-authority.mjs --skip-branch-check
69+
node scripts/check-v31-gate7-interfaces-pane-admission-cross-surface-contracts.mjs --skip-branch-check
70+
node scripts/check-v31-gate8-auxillaries-ux-accessibility-responsive-proof.mjs --skip-branch-check
71+
node scripts/check-v31-gate9-auxillaries-telemetry-proof-recovery-runs.mjs --skip-branch-check
72+
node scripts/check-v31-gate10-promotion-readiness.mjs --promotion-mode --skip-branch-check
73+
node scripts/promote-bitcode-canon.mjs --version V31 --commit HEAD --dry-run
74+
elif [ "$POINTER" = "V31" ]; then
75+
node scripts/check-bitcode-spec-family.mjs --version V31 --mode promoted --current-target V31
76+
node scripts/check-bitcode-canonical-inputs.mjs --current-target V31
77+
node scripts/check-bitcode-canon-posture-drift.mjs --active-canon V31 --draft-target V32
78+
node scripts/check-v31-gate10-promotion-readiness.mjs --promotion-mode --skip-branch-check
79+
else
80+
echo "Unexpected BITCODE_SPEC.txt pointer: $POINTER" >&2
81+
exit 1
82+
fi
83+
pnpm test:qa:v28:pipeline-readback
84+
pnpm --filter @bitcode/protocol typecheck
85+
pnpm --filter @bitcode/protocol test
86+
pnpm --filter @bitcode/btd typecheck
87+
pnpm --filter @bitcode/btd test
88+
npm --prefix protocol-demonstration test
89+
npm --prefix protocol-demonstration run test:v28-mvp-qa
90+
pnpm --filter @bitcode/pipeline-asset-pack typecheck
91+
pnpm --filter @bitcode/pipeline-hosts typecheck
92+
pnpm --filter @bitcode/pipeline-asset-pack exec jest --config jest.config.cjs --passWithNoTests --forceExit
93+
pnpm --filter @bitcode/pipeline-hosts exec jest --config jest.config.cjs --passWithNoTests --forceExit
94+
pnpm --dir uapi exec jest --runTestsByPath \
95+
tests/api/readReviewRoute.test.ts \
96+
tests/api/pipelineHarnessRoute.test.ts \
97+
tests/terminalPipelineHarnessClient.test.ts \
98+
tests/terminalDepositReadWorkbench.test.ts \
99+
tests/terminalTransactionQuery.test.ts \
100+
tests/terminalTransactionReadModel.test.ts \
101+
tests/terminalProtocolProjection.test.ts \
102+
tests/terminalInterfaceIntegrationRegression.test.ts \
103+
tests/terminalWalletBtcOperation.test.ts \
104+
tests/terminalJournalReconciliation.test.ts \
105+
tests/terminalOrganizationAuthority.test.ts \
106+
tests/protocolCommercialBoundary.test.ts \
107+
tests/terminalTransactionDetailCards.test.tsx \
108+
tests/terminalTransactionDetailSnapshot.test.ts \
109+
tests/terminalUxBrowserProof.test.tsx \
110+
tests/pipelineExecutionLogHeader.test.tsx \
111+
tests/userDataRoute.test.ts \
112+
tests/profileStep.test.tsx \
113+
tests/auxillariesExternalsPane.test.tsx \
114+
tests/auxillariesContent.access.test.tsx \
115+
tests/auxillariesWorkspacePanels.access.test.tsx \
116+
tests/api/vcsRoutes.test.ts \
117+
tests/api/auxillariesGithubConnectionRoute.test.ts \
118+
--runInBand
119+
pnpm --dir uapi exec playwright install chromium --with-deps
120+
pnpm --dir uapi run test:e2e:terminal-ux
121+
git diff --check
122+
123+
- name: Promote V31 canon files
124+
if: >-
125+
${{
126+
github.event_name == 'pull_request' &&
127+
github.event.pull_request.head.ref == 'version/v31'
128+
}}
129+
env:
130+
HEAD_BRANCH: ${{ github.event.pull_request.head.ref }}
131+
run: |
132+
if [ "$(cat BITCODE_SPEC.txt)" = "V31" ]; then
133+
echo "BITCODE_SPEC.txt already points to V31."
134+
exit 0
135+
fi
136+
PROOF_SOURCE_COMMIT="$(git rev-parse HEAD)"
137+
npm run promote:canon -- --version V31 --commit "$PROOF_SOURCE_COMMIT"
138+
git config user.name "github-actions[bot]"
139+
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
140+
git add \
141+
BITCODE_SPEC.txt \
142+
BITCODE_SPEC_V31.md \
143+
BITCODE_SPEC_V31_DELTA.md \
144+
BITCODE_SPEC_V31_NOTES.md \
145+
BITCODE_SPEC_V31_PARITY_MATRIX.md \
146+
BITCODE_SPEC_V31_PROVEN.md \
147+
protocol-demonstration/src/canon-posture.js \
148+
protocol-demonstration/README.md \
149+
packages/protocol/src/canon-posture.js \
150+
packages/protocol/data/state.json \
151+
packages/protocol/README.md \
152+
.bitcode
153+
git commit -m "Promote Bitcode canon to V31"
154+
git push origin "HEAD:$HEAD_BRANCH"

0 commit comments

Comments
 (0)