## Problem Wave 3 progress is tracked in **three places** that drift: | Source | Stale example (2026-05-24) | |--------|---------------------------| | **#1380** issue body | M2 spine **444/586** (master is **567/586**) | | [`docs/roadmap-wave3.md`](docs/roadmap-wave3.md) | Language/stdlib tables vs merged PRs | | ROADMAP **#78** | Batch notes vs **#1751** close-out | **#1769** ✅ closed a one-off sync PR; there is **no automated guard** preventing the tracker from lying after the next merge batch. ## Goal Add `script/check-wave3-roadmap-sync.php` (or extend `script/bootstrap-inventory.php --check` pattern) that fails when: 1. Open language issues in `docs/roadmap-wave3.md` disagree with **#1380** checklist 2. Optional: M2 spine `require_once` count in issue **#1380** / **#1419** footer matches `test/selfhost/compiler_lib_spine_smoke/main.php` Wire opt-in gate into `ci-fast.sh` inventory phase (default **off** until stable). ## Implementation hints | Piece | Path | Notes | |-------|------|-------| | Checker | `script/check-wave3-roadmap-sync.php` | Parse `docs/roadmap-wave3.md` tables + `gh`-less regex for issue states | | Test | `test/unit/Wave3RoadmapSyncTest.php` | Assert checker passes on `master` | | CI | `script/ci-fast.sh` | `WAVE3_ROADMAP_SYNC_GATE=1` opt-in | | Docs | `docs/README.md` | Document regen: `php script/capability-matrix.php` + manual wave3 table | ### Suggested checks (v1) ```text - Count open language rows in roadmap-wave3.md == 1 (#1354 only) - Stdlib open count == 0 - Spine require_once count == wc -l compiler_lib_spine_smoke/main.php ``` ## Acceptance criteria ```bash php script/check-wave3-roadmap-sync.php WAVE3_ROADMAP_SYNC_GATE=1 ./script/ci-fast.sh ``` Docker: ```bash docker run --rm -v "$(pwd):/compiler" -w /compiler php-compiler:22.04-dev \ php script/check-wave3-roadmap-sync.php ``` No GitHub Actions. ## Dependencies - **#1380** — living tracker (update body when checker lands) - **#1751** — wave 3 close-out (**#1354** attributes) - **#1419** — M2 spine batch tracker (orthogonal footnote) ## Links - ROADMAP **#78** Phase 1 Language - [`docs/roadmap-wave3.md`](docs/roadmap-wave3.md)
Problem
Wave 3 progress is tracked in three places that drift:
docs/roadmap-wave3.md#1769 ✅ closed a one-off sync PR; there is no automated guard preventing the tracker from lying after the next merge batch.
Goal
Add
script/check-wave3-roadmap-sync.php(or extendscript/bootstrap-inventory.php --checkpattern) that fails when:docs/roadmap-wave3.mddisagree with Roadmap wave 3: full PHP language + stdlib gaps tracker (#1354–#1379) #1380 checklistrequire_oncecount in issue Roadmap wave 3: full PHP language + stdlib gaps tracker (#1354–#1379) #1380 / M2 spine growth: batch tracker (compiler_lib_spine_smoke → full inventory) #1419 footer matchestest/selfhost/compiler_lib_spine_smoke/main.phpWire opt-in gate into
ci-fast.shinventory phase (default off until stable).Implementation hints
script/check-wave3-roadmap-sync.phpdocs/roadmap-wave3.mdtables +gh-less regex for issue statestest/unit/Wave3RoadmapSyncTest.phpmasterscript/ci-fast.shWAVE3_ROADMAP_SYNC_GATE=1opt-indocs/README.mdphp script/capability-matrix.php+ manual wave3 tableSuggested checks (v1)
Acceptance criteria
Docker:
docker run --rm -v "$(pwd):/compiler" -w /compiler php-compiler:22.04-dev \ php script/check-wave3-roadmap-sync.phpNo GitHub Actions.
Dependencies
Links
docs/roadmap-wave3.md