Skip to content

Latest commit

 

History

History
176 lines (158 loc) · 9.73 KB

BACKLOG.md

File metadata and controls

176 lines (158 loc) · 9.73 KB

BACKLOG

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.

Deferred P1 items from the Paint feature matrix

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_strict and 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.

Open (general)

  • [Phase 1] Undo-history memory is unbounded — the engine keeps a full Document snapshot 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.resize and selection.scale can now change the document's size mid-history, so any future tiling scheme must cope with snapshots of differing dimensions.
  • [Phase 1] image.import stores raw base64 RGBA — a 512×512 import is ~1.4 MB of base64 inside the project file. Now more visible, because every paste is an image.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.resize and canvas.crop now exist, so this is only UI.
  • [Phase 1.5] text.draw rasterises 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.

Phase 2 (Concept System) session 2A deferrals

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.

Phase 2 (Concept System) session 1 deferrals

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 .pxc grammar.
  • [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.md row #2).

P2–P4 tiers (not yet scheduled)

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).

Phase 1.75 (UI shell) deferrals

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 layout ROADMAP line item, not here, per the maintainer's request that this live in ROADMAP.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).