diff --git a/RELEASE_NOTES/v0.8.2.md b/RELEASE_NOTES/v0.8.2.md index 4a20ccd1d..cdd94bab4 100644 --- a/RELEASE_NOTES/v0.8.2.md +++ b/RELEASE_NOTES/v0.8.2.md @@ -1,8 +1,9 @@ # OpenPencil v0.8.2 `v0.8.2` is a prerelease focused on higher-fidelity Figma and HTML imports, -lower transient memory use, smoother large-document workflows, safer `.op` -persistence, and backward-compatible schema evolution. +multi-screen AI design generation, lower transient memory use, smoother +large-document workflows, safer `.op` persistence, and backward-compatible +schema evolution. This update expands both the data OpenPencil can preserve and the controls available for editing that data. It also separates expensive conversion and @@ -32,6 +33,12 @@ still remain available. copy, or opened without modifying the file on disk. - HTML import accepts complete pages, multi-file projects, and ZIP packages with local resources, nested CSS imports, and common text encodings. +- The design agent generates multi-screen apps: screen groups can run in + parallel, shared navigation is unified across screens, and app-mode screen + navigation is wired into the generated document. +- Panning and zooming very large documents uses layer caching and + level-of-detail so gestures stay responsive instead of dropping to a few + frames per second. ## Figma Import Fidelity @@ -146,6 +153,28 @@ still remain available. practical to reduce duplicated buffers, queue size, and peak transient allocations. +## Canvas Performance on Large Documents + +- Pan and zoom on very large documents (tens of thousands of nodes viewed + zoomed out) are substantially smoother. Each change below was measured + against a live profiling session rather than inferred. +- The SVG path cache is budgeted by bytes instead of entry count, so a working + set of many thousands of visible paths no longer re-parses its own contents + every frame. +- Text below roughly three device pixels skips shaping and paints a + representative bar, and leaf content below sub-pixel size skips painting + entirely. +- Shadows and blurs that would render below one pixel skip their save-layers, + avoiding render-pass breaks and forced command submits that were expensive on + GL-backed Metal. +- Pan gestures blit a retained offscreen layer with in-place scroll strips and + an approximate scaled zoom. The layer survives across gestures, and the + gesture-end frame restores full quality progressively, one tile per frame. +- The event loop places periodic wait deadlines on a fixed grid so elapsed + deadlines are not re-armed immediately, removing an idle timer spin. +- `OP_SLOW_FRAME_LOG=1` prints frames over 32ms with blit, scroll, and build + attribution for diagnosing future regressions. + ## `.op` Saving and Overwrite Safety - Desktop Save and Save As are serialized background jobs, preventing @@ -227,12 +256,104 @@ still remain available. automation workflows. Remote fetches retain bounded reads and SSRF protections. +## AI Design Agent + +### Multi-Screen App Generation + +- Screen groups can run genuinely in parallel under the parallel-agents + setting, with live progress, per-group replay on completion, and distinct + per-group agent identities. Sequential runs announce their setting too, so + the active mode is always visible. +- Multi-screen plans give each screen group its own root frame placed beside + the previous one, instead of collapsing every subtask onto a single root. + Plans with zero or one screen label keep the previous single-root behavior, + and append mode stays single-root. +- Generated multi-screen documents carry screen markers and `onTap` navigation, + so app-mode preview navigates between screens instead of degrading to one + scrolling page. The wiring pass is deterministic, idempotent, and additive + only. +- Shared navigation bars are unified across sibling screens and injected into + screens whose name matches a reference tab, so a failed navigation subtask + can no longer leave a screen bare. Authored navigation is never removed. +- Active tabs are retargeted per screen even when a model draws every screen's + navigation identically, and push-in detail screens (those with a header back + control) no longer receive an injected tab bar. +- Tab labels match brand-prefixed screen names by whole tokens, so a screen + named like `Wander - Trips` binds its `Trips` tab. +- Screens the skeleton committed but never filled are detected by shape, retried + through a dedicated fill budget that does not consume the general turn cap, + and reported honestly in the transcript, the run summary, and an `(unfilled)` + canvas label when they still come up empty. +- Design routing reads a canvas signal, so a continuation request in a language + the ASCII keyword gate did not match still reaches the design loop when the + canvas already holds a mobile-width screen. Explicit overrides still win. + +### Design Quality and Geometry Repair + +- Geometry diagnostics detect cross-subtree text collisions, and loop completion + is gated on unresolved blockers rather than reported as done with known + defects outstanding. +- A `fill_container` card that collapsed to a sliver beside a fixed-width + sibling in a horizontal rail is widened to the widest fixed reference, before + the overflow clip pass rather than after it. Evenly split and deliberately + mixed fixed rails are left untouched. +- Mobile content and section rails are enforced and linted, including appended + subtrees and rail edge cases, and primary mobile screens are required to carry + navigation. +- Badges, pills, avatars, status dots, and compact painted text capsules get the + corner radii the surrounding design already establishes, and mobile-app + guidance teaches that tappable CTAs carry a corner radius. +- Decorative stack layers are exempt from the empty-shell blocker, which was + pushing models to stuff content into the back layers of a card deck, and a + transparent text-bearing front card gains a surface fill when a painted layer + bleeds through. +- Nested card roles survive cleanup, near-full-bleed orphan cards are rescued, + rejected radial sections are recovered, status indicator dots are kept out of + stub cleanup, and clipped child strokes in fit-content rows are padded. +- Logical text alignment values are accepted rather than rejected, and compact + status geometry is stabilized. + +### Providers, Models, and Skills + +- The Gemini CLI provider is retired. Antigravity and Grok Build are available + as agent providers and as MCP CLI integrations; the Google Gemini API provider + is unaffected. +- Antigravity slug model IDs are discovered correctly, and model capability + tiers were updated (MiniMax M3, Claude Fable, and Kimi K3 are treated as + full-tier). +- When a CLI connect or model-discovery probe times out, OpenPencil keeps the + captured output instead of discarding it, recognizes authentication prompts, + and shows an actionable hint — a first-run CLI blocked on browser OAuth no + longer reports only a generic timeout. +- Skill prompts are no longer silently truncated: five skills that had drifted + past their injection budgets were compressed, the generation budget is the + intended full-tier value, and both truncation paths now warn instead of + tail-cutting quietly. +- Skill names are unique across the registry, so lookup by name is no longer + order-dependent. The public `get_guidelines` topic key is unchanged. +- Failed subtasks keep their full spec for single-shot retry, the salvage pass + retries at minimal complexity instead of repeating the full ladder, + rate-limit exhaustion is classified as non-retryable, rolled-back design + batches are marked as errors, and screens committed before a turn cap are + salvaged rather than discarded. +- Aborted design validation terminates instead of continuing to run, and the + desktop design terminal preserves its progress output. + ## Editing and Rendering - Component swaps, masks, layer/fill compositing, image tile scale, and page background color are configurable instead of being import-only metadata. - Fill-rule editing, per-corner radii, layer blur, and background blur now reach the shared scene and paint paths. +- Image fills can be cropped interactively, with the crop preview and controls + in the property inspector, and image upload is wired through the file menu + and the fill editor. +- Container strokes paint above their children on canvas and in SVG export, + matching the expected stacking instead of being covered by child content. +- Editing a property refreshes the affected scenes, so canvas output no longer + lags behind inspector changes. +- The right rail is hidden when nothing is selected instead of showing an empty + inspector. - Missing-font prompts and font-management surfaces are available across native and web hosts, with imported fonts invalidating affected layout scenes. - Native user fonts are persisted and rediscovered at startup; web user fonts @@ -306,6 +427,8 @@ still remain available. - Windows desktop startup falls back safely when the preferred native OpenGL configuration cannot be wrapped by the renderer. +- Windows save commits are serialized, avoiding overlapping publications on the + platform where the replace step is least forgiving. - Image search, image generation, Figma conversion, HTML conversion, and save sessions use bounded or cancellable background work instead of extending the input event path. @@ -341,6 +464,9 @@ still remain available. the installed document in the main WASM runtime. Total browser-process peak memory still depends on the document, Worker, storage implementation, and browser, and the complete canonical document still enters the main runtime. +- The Gemini CLI agent provider and its MCP CLI integration are removed. + Existing Gemini CLI connections no longer appear in Agent Settings; the Google + Gemini API provider is unaffected. - Account sign-in is intentionally unavailable in this prerelease. - The public web SDK remains read-only. - The retired TypeScript application workspace is not part of this release.