You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
V48 (specification-only): Freeze historical canon checks; living full-system check
Document meta specifying law: promoted era specs/proofs/version-bound checks are
immutable canon-at-that-time and must not be rewritten for later tree drift; the
living full-system check alone must be all-encompassing and correct for present
sole-canon. Align V48 notes, specifying README, era-pin shims, and glossary.
Copy file name to clipboardExpand all lines: BITCODE_SPECIFYING.md
+68-1Lines changed: 68 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -46,7 +46,8 @@ The priority order for specifying truth is:
46
46
8. named realization/demo specs and adjunct docs, only where the active spec family explicitly references them
47
47
48
48
Older versioned specs are historical.
49
-
They may be cited for provenance, but the active `SPEC` must not require them for current semantic recovery.
49
+
They may be cited for provenance as **canon at that time**, but the active `SPEC` must not require them for current semantic recovery.
50
+
Promoted historical specs, proofs, and version-bound checks are **immutable** for later realization drift (§4.3); only the living full-system check for the current draft/active pointer is rewritten for present sole-canon correctness (§13.1).
50
51
51
52
## 1.1 Drafting Input Rule
52
53
@@ -435,6 +436,40 @@ Once a version is promoted:
435
436
436
437
Stale status language is a canonical defect.
437
438
439
+
## 4.3 Historical Canon Immutability (Promoted Specs, Proofs, and Checks)
440
+
441
+
**Meta specifying technique:** promoted eras are frozen snapshots of **canon at that time**. Current-tree work must never rewrite history so that historical checks stay green.
442
+
443
+
### Law
444
+
445
+
1.**Once promoted, a version's canon artifacts for that era must not change** for the purpose of tracking later realization.
446
+
That freeze covers, at minimum:
447
+
- the hand-authored family (`BITCODE_SPEC_VN.md`, `NOTES`, `DELTA`, `PARITY_MATRIX` as promoted),
448
+
- generated `BITCODE_SPEC_VN_PROVEN.md` and `.bitcode/vN-*` structured artifacts for that promotion,
449
+
- version-bound gate checkers, package proof generators, and tests that attest **that era's** predicates against **that era's** source and route vocabulary.
450
+
2.**Old version checks must never be edited** to chase later renames, package hierarchy moves, route pluralization, Terminal retirement, component layout moves, vocabulary renames, or sole-canon modularization of a future draft.
451
+
3.**Historical promoted specs remain referenceable as canon-at-that-time.** Auditors, PROPER reconstructions, and provenance citations use them as fixed law for the era they closed — not as living code maps of the current tree.
452
+
4.**The living full-system check is only for current canon** (the draft-target family while drafting, then the newly pointed family after promotion). That check must be:
453
+
- all-encompassing (full-system, full re-implementability, full auditability — §2),
454
+
- completely correct for **present** sole-canon realization,
455
+
- fail-closed when the current tree or current family drifts,
456
+
- and free of "fix history so the old suite still passes" shortcuts.
457
+
5. When a future realization would make a historical check fail against the new tree, the correct tools are:
458
+
-**era-pin / skip-with-reason** (or pointer-gated non-execution) for the historical check while the current pointer has moved past that era,
459
+
-**PROPER** reconstructions (§3.2) when specifying itself is under test against an already-promoted target,
460
+
- and **new** current-version proofs/checks that restate obligations against the present tree.
461
+
The incorrect tool is rewriting the historical checker, historical proof file, or historical `.bitcode/vN-*` artifact so it matches today's paths or product names.
462
+
463
+
### Why this exists
464
+
465
+
Bitcode treats each promotion as a closed ledger entry of system law. If V43–V47 checks were rewritten every time V48 moved `/read`→`/reads` or retired Terminal, "canon at V47" would cease to exist as an auditable artifact. Era-pinning preserves that ledger without blocking the living draft's obligation to be total and true.
466
+
467
+
### Relation to drafting
468
+
469
+
- Draft work on version `N` may freely change `BITCODE_SPEC_VN_*`**until** promotion closes that version.
470
+
- After promotion, version `N` joins the freeze set; version `N+1` carries the living full-system family and living full-system checks.
471
+
- Citation of older specs remains allowed for provenance; recovery of **current** meaning from older specs remains forbidden (§1, §2.4).
472
+
438
473
---
439
474
440
475
# 5. Full `SPEC` Required Structure
@@ -1166,6 +1201,38 @@ When the active version is changing specifying, promotion, or full-canon structu
1166
1201
1167
1202
This dual-family validation is the preferred way to detect a specifying rule that accidentally encodes the quirks of the current draft rather than a reusable full-canon standard.
1168
1203
1204
+
## 13.1 Living Full-System Check vs Frozen Historical Checks
1205
+
1206
+
Validation must separate **living current-canon checks** from **frozen era checks** (§4.3).
1207
+
1208
+
### Living full-system check (current canon only)
1209
+
1210
+
The check that guards the **draft target** (and, after promotion, the **newly pointed** active family) must be:
1211
+
1212
+
-**all-encompassing** — full-system, full re-implementability, full auditability, full promotion-derivability (§2, §5, §12),
1213
+
-**completely correct** for the present sole-canon tree and present product vocabulary,
1214
+
-**fail-closed** on drift in hand-authored family, generated canon, parity, tests, and package realization,
1215
+
- and **sole authority** for "may this version promote / is this pointer honest?"
1216
+
1217
+
That living check is rewritten as the draft advances **before** promotion. After promotion, it freezes with the era and a new living check is born for the next draft target.
Version-bound checkers, package proof tests, and generated-artifact checks for **already-promoted** versions:
1222
+
1223
+
-**must not be modified** to match later package layouts, routes, or component paths,
1224
+
-**must remain runnable or era-pinnable** as evidence of canon-at-that-time,
1225
+
-**must not be deleted** solely because the current tree moved (prefer pointer-gated skip / era-pin with an explicit reason),
1226
+
- and **must not be used** as the living gate for the current draft — only as historical attestation or PROPER inputs.
1227
+
1228
+
### Operational pattern (package and CI)
1229
+
1230
+
- Pointer-gated workflows: historical version promotion workflows stay on disk; they do not re-fire as current required gates once the pointer has advanced.
1231
+
- Specifying package tests: historical proof files that hard-code prior-era paths may import an era-pin shim that skips with reason when the current realization has superseded that era (for example `packages/specifying/test/era-pinned-superseded-routes.js`).
1232
+
- Required CI for draft work: green the **living** uapi/package suite and the **current draft's** specifying proofs — not by rewriting V2x–V(n−1) checkers.
1233
+
1234
+
If a historical check becomes impossible to execute even under era-pin, record that as an accepted boundary in the **current** draft's parity/notes; do not "repair" the historical checker.
|**Active canon**| Version pointed by `BITCODE_SPEC.txt` on `main` (currently V47 until V48 promotion). |
1054
1054
|**Canon / canonical**| Spec family + proven artifacts treated as rebuild law for a version. |
1055
+
|**Canon at that time**| Frozen promoted era (specs + proofs + version-bound checks) — never rewritten for later tree drift (`BITCODE_SPECIFYING.md` §4.3). |
1055
1056
|**Complete Implementation Derivability**| A reader rebuilds current Bitcode from the active family alone (`BITCODE_SPECIFYING.md`). |
1056
1057
|**DELTA**| Version decision log (`BITCODE_SPEC_VN_DELTA.md`). |
1057
1058
|**Draft target**| Version under construction (V48 on `version/v48`) — not yet `BITCODE_SPEC.txt` pointer. |
1059
+
|**Era-pin**| Skip-with-reason for historical package proofs when current realization superseded that era (do not rewrite the frozen proof). |
0 commit comments