Out-of-scope discoveries. Nothing here is executed in the phase that found it; each item is carried forward for a future Planner to schedule or reject.
Format: - [source phase] **Item** — description.
These are the only rows the maintainer marked P1 that Phase 1.5 did not ship. Each is deferred for a stated reason, not dropped.
- [Phase 1.5] Anti-aliased pencil, brush hardness, textured and technical-marker brushes — all four need sub-pixel coverage, which directly contradicts the pixel-exact invariant that the byte-level determinism guarantee rests on. This needs a product decision first (an explicit "anti-aliased layer type"? a separate render mode?), not a quiet implementation. Blocked on a decision, not on effort.
- [Phase 1.5] Flow / accumulating opacity — pixel writes replace rather
than blend, which is exactly what makes the eraser erase instead of
painting white. Opacity therefore ships as the alpha written, so painting
twice at 50 % gives 50 %, not 75 %. True flow needs a blend mode in the
write path; that is a real change to
write_lenient/write_strictand should be designed alongside layer blend modes. - [Phase 1.5] OS clipboard interop (accepting screenshots and images
from other applications) — needs a platform clipboard crate in
pixelcad-app, i.e. a new dependency and a network fetch. The internal clipboard (cut/copy/copy-composite/paste/duplicate) is fully implemented. - [Phase 1.5] Interactive scale and rotate handles on the marquee — the operations all ship as commands and are reachable from the toolbar, numerically and by shortcut. Drag-handles with live preview are a separate interaction-design job.
- [Phase 1.5] Skew — needs resampling, so it inherits the same anti-aliasing decision as the first item.
- [Phase 1.5] RGB and HSL colour entry — HEX entry ships; the other two are a colour-picker widget rather than a model change.
- [Phase 1.5] Rulers — the grid, zoom presets and a live zoom readout ship; graduated rulers along the viewport edges did not. Small, purely presentational, and worth doing with the Navigator (P2).
- [Phase 1.5] Shift-constrained drawing (0/45/90° lines, square/circle from a rectangle drag) — needs the modifier state threaded from Slint into the drag handler, which is a small but real plumbing change.
- [Phase 1] Undo-history memory is unbounded — the engine keeps a full
Documentsnapshot per undo step. Correct and simple, but a 1024×1024 canvas with 200 steps costs ~800 MB. Needs tiles, diffs, or a bounded window that recomputes by replay. Phase 1.5 made this worse in one respect:canvas.resizeandselection.scalecan now change the document's size mid-history, so any future tiling scheme must cope with snapshots of differing dimensions. - [Phase 1]
image.importstores raw base64 RGBA — a 512×512 import is ~1.4 MB of base64 inside the project file. Now more visible, because every paste is animage.import, so a session with many pastes grows quickly. A compressed payload or an external blob directory would fix it. - [Phase 1.5] No non-rectangular selection beyond the lasso — magic
wand and select-by-colour are marked P1 in spirit but were listed under
"Pixel mode" in the P2 selection-modes table; they are cheap now that a
coverage mask exists (
Selection::from_mask). - [Phase 1] No layer blend modes beyond normal alpha-over, no groups, no masks, no clipping layers.
- [Phase 1] No automated visual-regression testing of the GUI — the headless GUI tests prove the logic is correct, but nothing compares rendered images.
- [Phase 1] No CI and no Linux/Windows validation — blocked on a
reference machine, per
ROADMAP.md's deferred cross-phase item. - [Phase 1] No file dialogs — Open and Save take a path typed into a text field.
- [Phase 1.5] No new-document dialog — the GUI always starts at 64×64.
canvas.resizeandcanvas.cropnow exist, so this is only UI. - [Phase 1.5]
text.drawrasterises immediately — text is not a re-editable object. The matrix marks persistent shapes and text as P2, which is really Phase 2's vector model.
The vector-shape-object session shipped; guides/snapping/grid/symmetry and annotations remain as their own sessions. Items deferred by the 2A plan:
- [Phase 2] Guides, snapping, grid tools, symmetry tools — Phase 2, session 2B.
- [Phase 2] Annotations (labels, dimension lines, text objects) — Phase 2, session 2C.
- [Phase 2] Interactive resize handles and live-preview transforms (mapping #17) — objects move by drag/nudge/commands today; corner handles are an interaction-design job on the new object model.
- [Phase 2] Shape z-order interleaving between raster layers — objects always render above the stack; a per-layer object tier needs an interleaving rule.
- [Phase 2] Shape groups, shape styles beyond colour, hit-testing tolerance — exact-pixel hit-testing shipped; tolerance and styling belong to later sessions.
The command-system session (palette, textual editor, macros, CLI automation API) shipped; the vector half of Phase 2 is its own session. Items deferred by the session-1 plan:
- [Phase 2] Vector shapes, guides, snapping, grid/symmetry tools, annotations — the second half of the Phase 2 description; planned as Phase 2, session 2.
- [Phase 2] Macro parameters/variables — macros run with fixed
coordinates only; parameterizable macros need an argument syntax in the
.pxcgrammar. - [Phase 2] Global cross-project macro library — macros live in the project file by design (self-containment); a personal library in the config directory is an alternative store that needs import/export to stay replayable.
- [Phase 2] Macro import/export — see the global library row.
- [Phase 2] JSON output for
list-commands/query— the CLI automation API is stable text today; JSON would need a serializer dependency and a versioning story. - [Phase 2] File save/export from the command line — needs the deferred file-dialog work (Phase 1 backlog); the in-GUI command editor runs document commands only.
- [Phase 2] CLI console and PATH handling inside the GUI — the macOS
Command panel keeps a "Console" WIP panel for these; the editor itself is
LIVE (
ui-roadmap-mapping.mdrow #2).
The maintainer's feature matrix marks these for later phases and they are recorded here only so they are not rediscovered from scratch: pressure and tilt input, object eraser, closed-region fill, material picker, document palette, persistent shapes, labels and dimensions, drawing sheets and viewports, non-destructive transforms, snapping, document units, navigator, vector lasso, scope-aware select-all, fine/coarse nudge, numeric move, exact dimensions, repeat transform, multi-representation clipboard, selection modes (object / node / edge-face / layer / AI), layer locking, groups, typed layers, and the AI features (object select, generative fill and erase, background removal, Image Creator).
New WIP controls surfaced by the redesign. Destination tags reference
docs/design/ui-roadmap-mapping.md, which is the single source of truth;
the numbers below are that table's row numbers.
- [Phase 1.75] Bespoke pixel-grid icon set (mapping #28) — the vendored Lucide set is a general-purpose stroke set; a set drawn on the same 16px grid as the canvas would suit this product better. General polish, not a blocker.
- [Phase 1.75] macOS native unified title bar (mapping #27) — the sketch's macOS Head bar implies traffic-light-integrated custom chrome; Slint 1.8 exposes no portable API for it, so Phase 1.75 kept the native title bar. General cosmetic polish.
- [Phase 1.75] Linux movable/dockable panels + macOS add/reduce items
(mapping #21–24) — tracked as the
Cross-phase — Windowing & panel layoutROADMAP line item, not here, per the maintainer's request that this live inROADMAP.md. - [Phase 1.75] Undo-to / redo-to a point (mapping #5) — RMB on the undo/redo icons; needs history-list UI and addressing into the undo stack, which fit Phase 2's textual command model.
- [Phase 1.75] Copy element under the cursor with nothing selected (mapping #6) — needs hit-testing, which arrives with Phase 2's vector model.
- [Phase 1.75] Multi-document file tabs and the macOS file tree (mapping #16) — no phase currently covers multi-document sessions; the UI renders one real tab/tree entry and WIP affordances.
- [Phase 1.75] Interactive move/rotate handles (mapping #17) — fixed commands and nudging exist; drag-handles with live preview are the same interaction-design job as the deferred marquee handles from Phase 1.5.
- [Phase 1.75] Canvas style / Media bay / Find / unified search (mapping #13–15, #14, #4) — see the mapping table for the per-item destination; all render as WIP dropdowns listing their sketch sub-items.
- [Phase 1.75] In-GUI command line and AI features (mapping #2, #1) — explicitly Phase 2 (command palette / textual command editor) and Phase 4 (AI) respectively; the UI placeholders exist and are labelled.
- [Phase 1.75] macOS "Master management" (mapping #26) — the spec's meaning is unconfirmed; the placeholder is preserved until the maintainer defines it.
- [Phase 1.75] Autosave timer (mapping #30) — the setting field ships; actually saving on the timer is UI-side work that becomes meaningful once file dialogs land (see the Phase 1 entry below).