What this issue preserves
Waves W729–W739 worked the compiler and the corpus census. The compiler changes are landed; this issue holds the measurements and the open work, so the next wave starts from the numbers instead of re-deriving them.
The honest corpus, measured on one pinned binary
t27c classify first (a .t27 extension is a filename, not a type declaration):
| class |
files |
share |
SOURCE module … |
590 |
95.5% |
| NOT-CODE (Markdown document) |
14 |
2.3% |
ALT-SYNTAX spec X { … } |
8 |
1.3% |
| UNCLASSIFIED |
5 |
0.8% |
| MIXED |
1 |
0.2% |
| total |
618 |
|
Then test-report over all 578 sources, binary hash 56b7a6b6d8047566 recorded before and after:
run their tests 88 1293 tests passing
BLOCKED 490
And every blocked spec crossed with spec-status:
| status |
specs |
meaning |
| IMPLEMENTED |
168 |
written and genuinely failing — the defect population |
| UNWRITTEN |
154 |
no bodies; blocking is correct |
| NOPARSE |
144 |
does not parse |
| NOFN |
18 |
no functions at all |
| PARTIAL |
6 |
|
The real defect population is 168, not 490.
Three ways the denominator was wrong
- Files that are not source — 28 of 618 (
t27c classify).
- Sampled by alphabetical prefix — 131 specs gave 26.7% running; all 578 give 15.2%.
specs/a*…specs/f* holds the hand-maintained numeric and fpga modules.
- Unwritten counted as broken — all 101 specs of
unable to format type '@TypeOf(undefined)' contain @compileError("not yet implemented"). Fixed in W739; they now report honestly.
Compiler changes landed
| wave |
change |
effect |
| W729 |
type alias const X = u8 no longer emitted as @"u8" |
unblocked the alphabet SSOT |
| W730 |
primitives never escaped as identifiers |
@"prim" 8 → 0 of 130 |
| W730 |
bench-path double discard suppressed |
|
| W732 |
t27's bare slice [T] → Zig []T |
error class removed |
| W734 |
for x in collection (was range-only) |
4 of 5 specs parse |
| W735 |
parameter shadowing a module declaration |
+59 tests (router 19, testbench 16, timing 24) |
| W736 |
local shadowing, fn bodies only |
+15 tests (memory) |
| W739 |
stop formatting undefined |
101 specs report their true status |
Reference suite held at 145 tests through every change.
Open, with roots named
undeclared identifier 'assert' — 60 specs. Third census class, never worked to root. May well be the same disease as the 101 (status, not defect).
- Local shadowing in test/bench blocks — 9 specs. A test block's first assignment parses as
StmtAssign, not StmtLocal; extending the rename renamed references while the binding kept its old name, turning a shadow error into use of undeclared identifier. Attempted and reverted — see collect_shadowing_locals' doc comment.
if as an EXPRESSION without parentheses. parse_if_stmt has accepted it since W578; parse_if_expr still demands parens. Mirroring it — including the no_struct_literal guard — cost 46 of 145 reference tests, because a branch value may legitimately be a struct literal where a statement body may not. Attempted and reverted.
- Grammar gaps still open: newtype
struct X(T);, while (c) : (step), -> &str, module a::b, open slices arr[i..].
- The 168 written-and-failing specs have never been decomposed by cause.
Protocol notes worth keeping
- Never rebuild the compiler under a running census. The first full run had it rebuilt twice beneath it; 272 rows were measured across three binaries and the run was discarded, not salvaged. Pin the binary hash before and after.
- Classify by intent before symptom.
t27c spec-status answers UNWRITTEN/PARTIAL/IMPLEMENTED/NOPARSE/NOFN and did so all along.
Data: docs/reports/CORPUS-CENSUS-W737.tsv, docs/reports/CORPUS-BLOCKED-BY-STATUS-W738.tsv. Theorems T255–T276 in docs/theory/IGLA-FORMAL-RESULTS.md.
What this issue preserves
Waves W729–W739 worked the compiler and the corpus census. The compiler changes are landed; this issue holds the measurements and the open work, so the next wave starts from the numbers instead of re-deriving them.
The honest corpus, measured on one pinned binary
t27c classifyfirst (a.t27extension is a filename, not a type declaration):module …spec X { … }Then
test-reportover all 578 sources, binary hash56b7a6b6d8047566recorded before and after:And every blocked spec crossed with
spec-status:The real defect population is 168, not 490.
Three ways the denominator was wrong
t27c classify).specs/a*…specs/f*holds the hand-maintained numeric and fpga modules.unable to format type '@TypeOf(undefined)'contain@compileError("not yet implemented"). Fixed in W739; they now report honestly.Compiler changes landed
const X = u8no longer emitted as@"u8"@"prim"8 → 0 of 130[T]→ Zig[]Tfor x in collection(was range-only)undefinedReference suite held at 145 tests through every change.
Open, with roots named
undeclared identifier 'assert'— 60 specs. Third census class, never worked to root. May well be the same disease as the 101 (status, not defect).StmtAssign, notStmtLocal; extending the rename renamed references while the binding kept its old name, turning a shadow error intouse of undeclared identifier. Attempted and reverted — seecollect_shadowing_locals' doc comment.ifas an EXPRESSION without parentheses.parse_if_stmthas accepted it since W578;parse_if_exprstill demands parens. Mirroring it — including theno_struct_literalguard — cost 46 of 145 reference tests, because a branch value may legitimately be a struct literal where a statement body may not. Attempted and reverted.struct X(T);,while (c) : (step),-> &str,module a::b, open slicesarr[i..].Protocol notes worth keeping
t27c spec-statusanswers UNWRITTEN/PARTIAL/IMPLEMENTED/NOPARSE/NOFN and did so all along.Data:
docs/reports/CORPUS-CENSUS-W737.tsv,docs/reports/CORPUS-BLOCKED-BY-STATUS-W738.tsv. Theorems T255–T276 indocs/theory/IGLA-FORMAL-RESULTS.md.