|
1 | 1 | # REV-008: Trustworthy Dev Loop, Visibility, and Merge Verification Debt |
2 | 2 |
|
| 3 | +> **Status: ✅ Completed 2026-07-22.** All four streams landed on |
| 4 | +> `task/rev-008-dev-loop-hardening`. Suite 540 → **705 specs, 0 failures**; |
| 5 | +> `typecheck:editor` clean. |
| 6 | +> |
| 7 | +> Two things worth knowing that this document did not anticipate: |
| 8 | +> |
| 9 | +> 1. **The packaged app had never launched.** Verifying Stream A from a genuinely |
| 10 | +> clean clone — as this task insisted on — surfaced two pre-existing defects |
| 11 | +> that had nothing to do with tracked bundles: externalised `react` resolving |
| 12 | +> its *development* build against a *production* `react-dom` (the same |
| 13 | +> `dispatcher.getOwner` error recorded below, but in a **fresh** production |
| 14 | +> build, not a stale one), and four externalised-but-undeclared modules that |
| 15 | +> electron-builder never packaged. Both fixed; a clean clone now yields a |
| 16 | +> `.dmg` whose app renders. |
| 17 | +> 2. **The style-token system was never connected.** Stream D1 asked for |
| 18 | +> token injection to be verified in a preview. It cannot be: nothing ever |
| 19 | +> constructs `StyleTokensInjector`. Written up as |
| 20 | +> [REV-009](./REV-009-STYLE-TOKENS-NEVER-WIRED.md); it is also why D2/D3 were |
| 21 | +> resolved by deletion rather than by repointing the identifiers. |
| 22 | +
|
3 | 23 | ## Metadata |
4 | 24 |
|
5 | 25 | | Field | Value | |
@@ -142,11 +162,11 @@ cannot simply be deleted without checking what depends on them: |
142 | 162 |
|
143 | 163 | ### Success criteria |
144 | 164 |
|
145 | | -- [ ] No generated `*.bundle.js` tracked in git |
146 | | -- [ ] Clean clone → `npm run build:editor` produces a launchable packaged app |
147 | | -- [ ] Clean clone → `npm run dev:debug` → `cdp health` reports `reactMounted: true` |
148 | | -- [ ] Repo shrinks by ~24 MB of artefacts |
149 | | -- [ ] A regression guard exists and is wired into CI (coordinate with REV-003) |
| 165 | +- [x] No generated `*.bundle.js` tracked in git |
| 166 | +- [x] Clean clone → `npm run build:editor` produces a launchable packaged app |
| 167 | +- [x] Clean clone → `npm run dev:debug` → `cdp health` reports `reactMounted: true` |
| 168 | +- [x] Repo shrinks by ~24 MB of artefacts |
| 169 | +- [x] A regression guard exists and is wired into CI (coordinate with REV-003) |
150 | 170 |
|
151 | 171 | --- |
152 | 172 |
|
@@ -177,11 +197,11 @@ cannot simply be deleted without checking what depends on them: |
177 | 197 |
|
178 | 198 | ### Success criteria |
179 | 199 |
|
180 | | -- [ ] Viewer/preview frame inspectable via CDP |
181 | | -- [ ] Main process debuggable via an opt-in `--inspect` port |
182 | | -- [ ] One command reports the health of all dev services |
183 | | -- [ ] `click` and `type` exist and drive React handlers correctly |
184 | | -- [ ] Startup exceptions land in `.logs/dev.log` without manual attach |
| 200 | +- [x] Viewer/preview frame inspectable via CDP |
| 201 | +- [x] Main process debuggable via an opt-in `--inspect` port |
| 202 | +- [x] One command reports the health of all dev services |
| 203 | +- [x] `click` and `type` exist and drive React handlers correctly |
| 204 | +- [x] Startup exceptions land in `.logs/dev.log` without manual attach |
185 | 205 |
|
186 | 206 | --- |
187 | 207 |
|
@@ -216,9 +236,9 @@ Playwright's `_electron` driver is the tool for it. |
216 | 236 |
|
217 | 237 | ### Success criteria |
218 | 238 |
|
219 | | -- [ ] Both docs state CDP-first, and that a black `screencapture` frame means |
| 239 | +- [x] Both docs state CDP-first, and that a black `screencapture` frame means |
220 | 240 | *permission*, not failure |
221 | | -- [ ] The native-chrome escape hatch is documented with its prerequisite |
| 241 | +- [x] The native-chrome escape hatch is documented with its prerequisite |
222 | 242 |
|
223 | 243 | --- |
224 | 244 |
|
@@ -302,12 +322,13 @@ between each. |
302 | 322 |
|
303 | 323 | ### Success criteria |
304 | 324 |
|
305 | | -- [ ] New project creation verified end-to-end, with `react19` confirmed |
306 | | -- [ ] Style-token injection verified in a running preview |
307 | | -- [ ] Regression tests added for both |
308 | | -- [ ] D2 decided and actioned; no dead config left keyed on a non-existent type |
309 | | -- [ ] D3 resolved (ported or consciously dropped, recorded either way) |
310 | | -- [ ] Stranded specs converted, rewritten, or deleted — none left running nowhere |
| 325 | +- [x] New project creation verified end-to-end, with `react19` confirmed |
| 326 | +- [x] Style-token injection verified — it does **not** work: `StyleTokensInjector` |
| 327 | + is never constructed. Written up as REV-009. |
| 328 | +- [x] Regression tests added for both |
| 329 | +- [x] D2 decided and actioned; no dead config left keyed on a non-existent type |
| 330 | +- [x] D3 resolved (ported or consciously dropped, recorded either way) |
| 331 | +- [x] Stranded specs converted, rewritten, or deleted — none left running nowhere |
311 | 332 |
|
312 | 333 | --- |
313 | 334 |
|
@@ -342,12 +363,12 @@ between each. |
342 | 363 |
|
343 | 364 | ## Checklist |
344 | 365 |
|
345 | | -- [ ] Read this file, the merge notes, and REV-002-NOTES fully |
346 | | -- [ ] Create branch `task/rev-008-dev-loop-hardening` |
347 | | -- [ ] Confirm the baseline: `dev:debug` + `cdp health` → `reactMounted: true`, `test:ci` green |
348 | | -- [ ] Stream A — untrack build artefacts, verify from a clean clone, add a guard |
349 | | -- [ ] Stream B — close the visibility gaps |
350 | | -- [ ] Stream C — document CDP-first vs the permission escape hatch |
351 | | -- [ ] Stream D — verify the merge, decide D2/D3, unstrand the specs |
352 | | -- [ ] `test:ci` green and `typecheck:editor` clean |
353 | | -- [ ] Update `PROGRESS.md`; open PR |
| 366 | +- [x] Read this file, the merge notes, and REV-002-NOTES fully |
| 367 | +- [x] Create branch `task/rev-008-dev-loop-hardening` |
| 368 | +- [x] Confirm the baseline: `dev:debug` + `cdp health` → `reactMounted: true`, `test:ci` green |
| 369 | +- [x] Stream A — untrack build artefacts, verify from a clean clone, add a guard |
| 370 | +- [x] Stream B — close the visibility gaps |
| 371 | +- [x] Stream C — document CDP-first vs the permission escape hatch |
| 372 | +- [x] Stream D — verify the merge, decide D2/D3, unstrand the specs |
| 373 | +- [x] `test:ci` green and `typecheck:editor` clean |
| 374 | +- [x] Update `PROGRESS.md`; open PR |
0 commit comments