What shipped
pnpm monorepo (Phase 26)
Converted the repo to a pnpm workspace. Application/ is now app/, full git history preserved via isolated git mv. efx-physic-paint lives in packages/ as a workspace package — ready for the standalone window work in v0.8.0.
Paint engine overhaul (Phase 33)
20 plans of fixes, polish, and new features on top of the existing perfect-freehand + p5.brush stack.
3-mode paint system — Each frame is now explicitly Flat, FX, or Physical (placeholder). Modes are mutually exclusive per frame. Switching shows a conversion dialog, brush style resets on mode change, and the mode persists per layer across sessions.
Inline color picker — Canvas-adjacent 260px panel with 4 color modes: Box (SV square + hue), TSL, RVB, and CMYK. All slider tracks render live gradients. HEX input, auto-apply, 12 recent colors, persistent saved favorites. Replaces the old sidebar color swatch.
Wireframe overlay — Selected strokes show a dashed path + bounding box so you can actually see what you're grabbing, especially in FX mode.
Stroke draw-reveal animation — Select a stroke, pick a frame range, and it distributes the points across frames using speed-based weighting (slow drawing = more frames, fast = fewer). Single undo entry.
Circle cursor — Photoshop-style brush size cursor that scales with zoom.
Brush persistence — Color and si Jump to bottom ↓ s. Default is #203769 at 35px.
Undo/FX cache fixes — Cmd+Z no Jump to bottom ↓ ders the canvas in both flat and FX mode. FX cache invalidates on color change, clear, and mode switch.
What didn't ship
Phases 27–32 (replacing perfect-freehand + p5.brush with a headless efx-physic-paint adapter) were abandoned after the batch rendering approach produced inferior visual quality and O(n²) re-render performance. The physics engine will come back in v0.8.0 as a standalone window with a transport protocol instead of an in-process adapter.