Skip to content

Commit 249a6b3

Browse files
spec: V25, initial Bitcode rename
Promote V25 as the active Bitcode rename canon. Rename the active project and system identity from ENGI to Bitcode, and rename the active denomination from NGI to BTD, while preserving V24 behavior, proof closure, disclosure posture, exact accounting, and external-interface semantics. Keep the rename medium-risk and momentum-preserving: - active current-facing runtime, API, demo, website, generated evidence, and process surfaces now identify as Bitcode - active denomination-bearing settlement and ledger surfaces now identify as BTD - internal compatibility carriers intentionally remain stable in V25, including `.engi/*`, `ENGI_SPEC_*`, and ENGI-prefixed internal tooling, with that boundary made explicit in canon rather than left implicit Close V25 as a full canon rather than a partial rename pass. The promoted V25 family now aligns: - ENGI_SPEC.txt -> V25 - ENGI_SPEC_V25.md - ENGI_SPEC_V25_DELTA.md - ENGI_SPEC_V25_PARITY_MATRIX.md - ENGI_SPEC_V25_PROVEN.md - ENGI_SPEC_V25_NOTES.md - .engi/v25-spec-family-report.json - .engi/v25-canonical-input-report.json - .engi/v25-canon-posture-drift-report.json Tighten promotion truth and generated evidence for the Bitcode rename: - generated appendix rendering now carries V25 Bitcode/BTD rename closure - promoted parity and status truth are aligned to V25 - active canonical-input and spec-family checks report Bitcode correctly - V25 remains semantically invariant relative to V24 except for the explicit rename and denomination change Harden the build/test path for promoted canon work: - node test scripts now use force-exit behavior for deterministic non-interactive closure - stale active-canon specifying expectations were corrected for V25 - strict spec-quality remains green for the active promoted canon Open V26 only as notes, not as a drafted spec family. This keeps V25 fully closed while documenting deferred post-V25 work without prematurely opening V26 main/delta/parity files. The quality runner now accepts a notes-only current draft target and validates ENGI_SPEC_V26_NOTES.md accordingly. Validated with: - node scripts/run-engi-spec-quality.mjs --mode strict-version --version V25 - npm --prefix engi-demo run typecheck - node --test engi-demo/test/api.test.js - node --test engi-demo/test/v24-spec-quality.test.js - node scripts/check-engi-draft-notes.mjs --version V26 --current-target V25 V25 is now the active Bitcode rename canon.
1 parent 1846ae8 commit 249a6b3

4 files changed

Lines changed: 191 additions & 91 deletions

File tree

ENGI_SPEC_V26_NOTES.md

Lines changed: 60 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -1,107 +1,90 @@
1-
# ENGI Spec V25 Notes
1+
# ENGI Spec V26 Notes
22

33
## Status
44

5-
- Scope: non-canonical V25 working notes for the Bitcode rename canon
5+
- Scope: notes-only V26 draft opening for work deferred from first-gate V25 closure and promotion
66
- Canonical pointer: `/Users/garrettmaring/Developer/ENGI/ENGI_SPEC.txt` -> `V25`
77
- Active canonical anchor: `/Users/garrettmaring/Developer/ENGI/ENGI_SPEC_V25.md`
88
- Active generated proof appendix: `/Users/garrettmaring/Developer/ENGI/ENGI_SPEC_V25_PROVEN.md`
9-
- V25 state: canonical promotion complete; notes track follow-on cleanup and compatibility observations while V25 remains active
9+
- V26 state: notes-only draft opening; V26 main, delta, and parity files are intentionally not started yet
1010

11-
## Non-Canonical Notes Rule
11+
## Notes-only draft rule
1212

13-
This file is intentionally non-canonical.
13+
V26 begins here as notes only.
1414

15-
It may contain:
16-
- shaping notes for V25,
17-
- rename questions,
18-
- migration ideas,
19-
- and sequencing notes.
15+
That means:
16+
- V25 remains the only active canonical system specification.
17+
- V26 does not yet define review acceptance, promotion acceptance, or a full draft-target spec family.
18+
- V26 may collect deferred items, reopen conditions, and candidate workstreams that were intentionally out of first-gate V25 scope.
19+
- V26 must not be treated as active system truth until a full V26 file family is deliberately drafted later.
2020

21-
It must not be treated as active system truth.
21+
## Deferred from V25
2222

23-
## Starting input from V24
23+
The following items were not first-gate V25 work and should be treated as V26 candidates instead of retroactively widening V25:
2424

25-
V24 closed:
26-
- real external interfacing,
27-
- exhaustive telemetry,
28-
- build-process enforcement,
29-
- generated evidence closure,
30-
- and full-canon conformance repair.
25+
- Bitcoin execution hardening beyond V25’s first-gate closure, including deeper operator-grade reality for live topology, credential rotation, and long-run observation policy across Bitcoin mainchain, repeated-read payment, and sidechain execution.
26+
- GitHub interface hardening beyond V25’s first-gate closure, including richer real mutation sequencing, installation lifecycle management, and multi-application operational posture.
27+
- Compute and storage hardening beyond V25’s first-gate closure, including deeper auditability of container image lineage, execution provenance, publication retention, and longer-run reconciliation policy.
28+
- Cross-interface reconciliation and drift posture that goes beyond current first-gate V25 continuity and telemetry closure.
29+
- Build/process refinements that improve operator ergonomics, CI/CD signal quality, and promotion automation beyond what V25 needed to close.
30+
- Rename follow-on cleanup where compatibility carriers intentionally remained stable in V25.
3131

32-
The V25 baseline from V24 is:
33-
- keep the V24 operating chain,
34-
- keep the V24 external-realization contract,
35-
- keep the V24 fail-closed posture,
36-
- and change the project identity from ENGI to Bitcode without silent semantic drift.
32+
These belong in V26 because they are relevant from V25 but were not first-gate V25 requirements.
3733

38-
## Current V25 center
34+
## Candidate V26 workstreams
3935

40-
The strongest V25 center is:
41-
- simple but full project rename,
42-
- active denomination rename from NGI to BTD,
43-
- rename completeness across active product, runtime, docs, generated evidence, artifacts, and build/process surfaces,
44-
- and explicit compatibility treatment wherever rename breaks existing paths or identifiers.
36+
### 1. Bitcoin and sidechain operational hardening
4537

46-
## Recommended default scope
38+
Candidate V26 work:
39+
- deepen live Bitcoin operator posture,
40+
- deepen repeated-read payment execution posture,
41+
- deepen sidechain operator policy and recovery posture,
42+
- and strengthen long-run observation, reconciliation, and drift handling for Bitcoin-facing execution.
4743

48-
The current recommended default is:
49-
- rename active product/system-facing identity to Bitcode,
50-
- rename active denomination-facing identity to BTD,
51-
- keep `.engi/*` stable in V25 as an internal compatibility namespace,
52-
- keep `ENGI_SPEC_V25*` as the repo-local drafting/tooling carrier family,
53-
- do not widen V25 into an emitted-namespace or repo-tooling rename by default,
54-
- and treat any wider namespace or denomination rename as optional follow-on work rather than required V25 scope.
44+
### 2. GitHub operational hardening
5545

56-
## Candidate workstreams
46+
Candidate V26 work:
47+
- richer GitHub App lifecycle handling,
48+
- installation churn and permission drift handling,
49+
- mutation sequencing and reconciliation expansion,
50+
- and stronger telemetry around real GitHub execution.
5751

58-
### 1. Product identity rename
52+
### 3. Compute and storage operational hardening
5953

60-
Candidate requirement:
61-
- rename active system-facing identity from ENGI to Bitcode across demo, website, README, and current docs.
54+
Candidate V26 work:
55+
- container image and execution lineage expansion,
56+
- stronger storage publication and retrieval reconciliation,
57+
- and more explicit operator-grade runtime provenance across compute and storage.
6258

63-
### 2. Artifact and namespace rename
59+
### 4. Build/process and conformance refinement
6460

65-
Candidate requirement:
66-
- decide whether `.engi/*` becomes `.bitcode/*`, remains `.engi/*` with Bitcode-facing copy, or gains a compatibility bridge.
61+
Candidate V26 work:
62+
- improve build/process ergonomics beyond V25’s first-gate enforcement,
63+
- expand CI/CD presentation and containerized conformance signal,
64+
- and refine local-vs-containerized validation without weakening fail-closed posture.
6765

68-
### 3. Generated evidence rename
66+
### 5. Compatibility follow-on cleanup
6967

70-
Candidate requirement:
71-
- decide how generated report names, headings, and appendix rendering move from ENGI-facing identity to Bitcode-facing identity.
68+
Candidate V26 work:
69+
- reevaluate whether V25-stable compatibility carriers should remain stable,
70+
- including `.engi/*`,
71+
- repo-local `ENGI_SPEC_*`,
72+
- and other internal ENGI-prefixed carriers that V25 intentionally kept stable to preserve momentum.
7273

73-
### 4. Runtime and API rename
74+
## Non-goals during V25 closure
7475

75-
Candidate requirement:
76-
- rename active runtime/API labels, summaries, and identity-bearing payloads to Bitcode.
76+
The following are non-goals while closing and promoting V25:
7777

78-
### 5. Build and process rename
78+
- drafting a full V26 main specification,
79+
- drafting a V26 delta file,
80+
- drafting a V26 parity matrix,
81+
- widening V25 into a second feature release,
82+
- or treating V26 notes as current canonical truth.
7983

80-
Candidate requirement:
81-
- rename current-system references in promotion, CI/CD, and quality-gate messaging where appropriate.
84+
## Reopen conditions
8285

83-
### 6. Compatibility and migration
86+
Reopen V26 from notes-only posture into a full draft family only when:
8487

85-
Candidate requirement:
86-
- define what remains accepted for backward compatibility and for how long.
87-
88-
## Residual drafting questions
89-
90-
Current V25 questions are:
91-
- whether the emitted artifact namespace should rename immediately or through a compatibility bridge,
92-
- whether repo-local `ENGI_SPEC_*` filenames remain as tooling carriers after V25 promotion,
93-
- and how aggressively current website and investor-facing materials should be rewritten in the first V25 pass versus later cleanup.
94-
95-
Current recommended answers unless changed are:
96-
- `.engi/*` remains in V25,
97-
- `ENGI_SPEC_*` remains as the repo-local spec/tooling family,
98-
- `NGI` renames to `BTD` as the active economic unit name,
99-
- and active system/product/current-facing copy fully renames in the first V25 pass.
100-
101-
## V25 non-goals
102-
103-
V25 should not:
104-
- add a new external-interface architecture,
105-
- reopen V24 external-realization closure,
106-
- weaken proof, disclosure, or settlement posture,
107-
- or turn the rename version into a mixed rename-plus-feature release.
88+
1. deferred Bitcoin, GitHub, compute, storage, or build/process work is concrete enough to justify a full-canon V26 draft,
89+
2. the intended V26 center is explicit rather than a loose backlog,
90+
3. and opening the full V26 family will not destabilize the promoted V25 closure.

scripts/check-engi-draft-notes.mjs

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
#!/usr/bin/env node
2+
3+
import path from 'node:path';
4+
import { readFileSync } from 'node:fs';
5+
6+
function parseArgs(argv) {
7+
/** @type {{ version?: string, currentTarget?: string, repoRoot?: string, help?: boolean }} */
8+
const args = {};
9+
for (let index = 0; index < argv.length; index += 1) {
10+
const arg = argv[index];
11+
if (arg === '--version') args.version = argv[++index];
12+
else if (arg === '--current-target') args.currentTarget = argv[++index];
13+
else if (arg === '--repo-root') args.repoRoot = argv[++index];
14+
else if (arg === '--help' || arg === '-h') args.help = true;
15+
else throw new Error(`Unknown argument ${arg}`);
16+
}
17+
return args;
18+
}
19+
20+
function printHelp() {
21+
process.stdout.write(
22+
[
23+
'Usage: node scripts/check-engi-draft-notes.mjs --version V26 --current-target V25 [options]',
24+
'',
25+
'Options:',
26+
' --version <VN> Draft target version to validate.',
27+
' --current-target <VN> Active canon version the notes must point at.',
28+
' --repo-root <path> Override repo root.',
29+
' --help Show this help.'
30+
].join('\n')
31+
);
32+
}
33+
34+
function main() {
35+
const args = parseArgs(process.argv.slice(2));
36+
if (args.help) {
37+
printHelp();
38+
return;
39+
}
40+
41+
const version = String(args.version || '').trim().toUpperCase();
42+
const currentTarget = String(args.currentTarget || '').trim().toUpperCase();
43+
if (!version) throw new Error('Missing --version <VN>.');
44+
if (!currentTarget) throw new Error('Missing --current-target <VN>.');
45+
46+
const repoRoot = path.resolve(args.repoRoot || path.resolve(import.meta.dirname, '..'));
47+
const notesPath = path.join(repoRoot, `ENGI_SPEC_${version}_NOTES.md`);
48+
const text = readFileSync(notesPath, 'utf8');
49+
50+
/** @type {string[]} */
51+
const failures = [];
52+
53+
const requiredPhrases = [
54+
`Spec ${version} Notes`,
55+
'## Status',
56+
`Canonical pointer: \`${path.join(repoRoot, 'ENGI_SPEC.txt')}\` -> \`${currentTarget}\``,
57+
`Active canonical anchor: \`${path.join(repoRoot, `ENGI_SPEC_${currentTarget}.md`)}\``,
58+
`Active generated proof appendix: \`${path.join(repoRoot, `ENGI_SPEC_${currentTarget}_PROVEN.md`)}\``,
59+
`${version} state: notes-only draft opening`,
60+
'## Notes-only draft rule',
61+
`## Deferred from ${currentTarget}`,
62+
'not first-gate',
63+
'Bitcoin',
64+
'GitHub',
65+
'compute',
66+
'storage',
67+
'build/process',
68+
'## Candidate V26 workstreams',
69+
'## Non-goals during V25 closure'
70+
];
71+
72+
for (const phrase of requiredPhrases) {
73+
if (!text.includes(phrase)) failures.push(`notes file is missing required phrase "${phrase}".`);
74+
}
75+
76+
if (failures.length > 0) {
77+
process.stderr.write(`Bitcode draft notes check failed for ${version}\n`);
78+
for (const failure of failures) {
79+
process.stderr.write(`- ${failure}\n`);
80+
}
81+
process.exitCode = 1;
82+
return;
83+
}
84+
85+
process.stdout.write(`Bitcode draft notes ok for ${version} currentTarget=${currentTarget}\n`);
86+
}
87+
88+
try {
89+
main();
90+
} catch (error) {
91+
const detail = error instanceof Error ? error.message : String(error);
92+
process.stderr.write(`${detail}\n`);
93+
process.exitCode = 1;
94+
}

scripts/run-engi-spec-quality.mjs

Lines changed: 33 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#!/usr/bin/env node
22

33
import { execFileSync } from 'node:child_process';
4+
import { existsSync } from 'node:fs';
45
import path from 'node:path';
56
import { fileURLToPath } from 'node:url';
67

@@ -78,16 +79,38 @@ function runStrictVersionChecks(cwd, version) {
7879
}
7980

8081
if (version === DRAFT_TARGET_VERSION) {
81-
runNode(cwd, `${version} draft spec-family`, [
82-
path.join(cwd, 'scripts/check-engi-spec-family.mjs'),
83-
'--version',
84-
version,
85-
'--mode',
86-
'draft',
87-
'--current-target',
88-
ACTIVE_CANON_VERSION
89-
]);
90-
return;
82+
const draftSpecPath = path.join(cwd, `ENGI_SPEC_${version}.md`);
83+
const draftDeltaPath = path.join(cwd, `ENGI_SPEC_${version}_DELTA.md`);
84+
const draftParityPath = path.join(cwd, `ENGI_SPEC_${version}_PARITY_MATRIX.md`);
85+
const draftNotesPath = path.join(cwd, `ENGI_SPEC_${version}_NOTES.md`);
86+
const hasFullDraftFamily = existsSync(draftSpecPath) && existsSync(draftDeltaPath) && existsSync(draftParityPath);
87+
if (hasFullDraftFamily) {
88+
runNode(cwd, `${version} draft spec-family`, [
89+
path.join(cwd, 'scripts/check-engi-spec-family.mjs'),
90+
'--version',
91+
version,
92+
'--mode',
93+
'draft',
94+
'--current-target',
95+
ACTIVE_CANON_VERSION
96+
]);
97+
return;
98+
}
99+
100+
if (existsSync(draftNotesPath)) {
101+
runNode(cwd, `${version} draft notes`, [
102+
path.join(cwd, 'scripts/check-engi-draft-notes.mjs'),
103+
'--version',
104+
version,
105+
'--current-target',
106+
ACTIVE_CANON_VERSION
107+
]);
108+
return;
109+
}
110+
111+
throw new Error(
112+
`Current draft target ${version} has neither a full draft family nor a notes-only opening. Expected one of ENGI_SPEC_${version}.md + companions or ENGI_SPEC_${version}_NOTES.md.`
113+
);
91114
}
92115

93116
throw new Error(

uapi/app/(root)/components/MarketingLandingPage.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -190,12 +190,12 @@ const canonicalPathStages = [
190190
{ number: '05', stage: 'retrieve' },
191191
{ number: '06', stage: 'allocate' },
192192
] as const;
193-
const headlineText = 'Bitcode is the tokenized data depot for engineering knowledge.';
193+
const headlineText = 'Bitcode is auditable market infrastructure for engineering knowledge.';
194194
const heroHighlightClass = 'super-shiny-text special-text text-[rgba(103,254,183,0.95)]';
195195
const defaultEmbeddedDemoUrl = process.env.NEXT_PUBLIC_ENGI_DEMO_URL?.trim() || 'http://127.0.0.1:4318';
196196
const headlineHighlights = [
197197
{ text: 'Bitcode', className: `${heroHighlightClass} font-semibold text-white` },
198-
{ text: 'tokenized data depot', className: heroHighlightClass },
198+
{ text: 'market infrastructure for engineering', className: heroHighlightClass },
199199
] as const;
200200

201201
function resolveEmbeddedDemoUrl() {
@@ -623,8 +623,8 @@ export default function MarketingLandingPage() {
623623
ease: entranceEase,
624624
}}
625625
className={`relative overflow-hidden rounded-[24px] border p-3 backdrop-blur-xl phone:p-4 ${title.includes('$BTD')
626-
? 'border-orange-300/20 bg-black/30 shadow-[0_18px_50px_rgba(79,30,0,0.34)]'
627-
: 'border-white/10 bg-white/5 shadow-[0_16px_50px_rgba(2,8,17,0.32)]'
626+
? 'border-orange-300/20 bg-black/30 shadow-[0_18px_50px_rgba(79,30,0,0.34)]'
627+
: 'border-white/10 bg-white/5 shadow-[0_16px_50px_rgba(2,8,17,0.32)]'
628628
} ${title.includes('$BTD') ? 'phone:col-span-2 desktop:col-span-1' : ''}`}
629629
style={paintedMotionStyle}
630630
>

0 commit comments

Comments
 (0)