# Blaise phase sync map (checked 2026-09-20 against graemeg/blaise master) Blaise's 10 phases (README status: 1–5 + 7 complete, 6 ongoing, 8–10 planned). This file tracks where m2compiler-V3 stands against each, and records deliberate divergences so they aren't rediscovered. Refresh after every major step. ## Phase table | Blaise | Status there | Us | Status here | |---|---|---|---| | 1 Bootstrap pipeline | ✅ | Step 1 (M2→QBE hello) | ✅ done (`v3-step1`) | | 2 Type system (classes, records, ARC, exceptions) | ✅ | Steps 2–3 (scalars ✅, arrays ✅, sets ✅, records/pointers pending) + 1.10 Clarion classes | ⚠️ partial | | 3 Generics + interfaces | ✅ | Explicitly OUT (R10 blueprints rejected) | ❌ deliberate | | 4 OPDF debug info | ✅ | Deferred (listing only) | ❌ deferred | | 5 Self-hosting | ✅ | Step 8 (last) | ⚠️ same mechanism, later slot | | 6 RTL/StdLib expansion | 🔄 ongoing | Step 5 (Benjamin stdlib) | Not started | | 7 Native backend | ✅ | Not planned (QBE is terminal) | ❌ deliberate | | 8 Windows/macOS ARM64 | Planned | Out of scope (amd64_sysv) | ❌ | | 9 LSP + VS Code | Planned | Deferred vaguely | ❌ | | 10 Migration analyser | Planned | 1.12 TopSpeed grammar, 662-file corpus parse-clean | ✅ convergent | ## What "in sync" means here Process, not phases: phased steps with per-step design docs (their `design.adoc` rhythm → our `summary_stepN.md`), test-guarded progress, QBE-first backend for speed-to-hosting (their stated reason, ours too), fixpoint verification (their 3-stage byte-identical bootstrap → our planned `bootstrap/fixpoint.sh` over `.ssa`). Two places we're ahead of their learning curve, per graemeg's own v0.12.0 retrospective: our harness has been end-to-end (`qbe→cc→run`) since step 1 — exactly the gap (IR-only tests missing link/runtime bugs) he's now closing. Keep it that way: no step lands on IR inspection alone. ## Warnings adopted from Blaise experience - **Rolling bootstrap.** Their `scripts/rolling-bootstrap.sh` exists because new parser features break old binaries: once M2 compiles itself (step 8), a grammar extension can strand the stage-1 binary. Our `fixpoint.sh` must rebuild commit-by-commit from the last green binary, not just diff three stages. (Recorded pre-emptively; hits at step 8.) - **Stabilisation cycles.** Their v0.12.0 goes thin-on-features to harden the suite. After step 3.4 (composites complete), do the same before step 4 calls: a hardening pass over the 50+ suite (fuzz bounds, cross-span copies, trap paths) instead of new syntax. - **Turnkey gap.** Self-hosting ≠ turnkey: they still need GCC/FPC scaffolding. Our step 8 must define "done" as: pinned `qbe`+`cc` plus documented host-gm2 bootstrap, nothing else. ## Deliberate divergences (do not relitigate without cause) - No ARC/GC, no exceptions, no generics, no native backend, no second platform: Modula-2 scope discipline, not Pascal parity. - Self-hosting last, not middle: full-language-first was locked; the cost is accepted (hygiene rules from step 1 pay it down). - Two grammars, not one: modern `M2.atg` + legacy `TopSpeed-V3-M2.atg` (1.12). This mirrors their phase-10 split (modern core + migration sidecar) and quarantines the opposite dialect decisions (`_`, `<>`, `H`/`C`/`B` suffixes). Never merge them; the modern grammar stays Redux-clean. ## Drift log - 2026-09-20: map created. `plan.md` refreshed (0x-only, no-AST-module reality, two-grammar strategy, step-3 substeps). - Next refresh: after 3.4 (pointers) or any Blaise phase flip.