Skip to content

PROTOCOL v49: File ▸ New + group/image fixes#2

Merged
drietsch merged 2 commits into
mainfrom
release/v0.49.0
Jun 16, 2026
Merged

PROTOCOL v49: File ▸ New + group/image fixes#2
drietsch merged 2 commits into
mainfrom
release/v0.49.0

Conversation

@drietsch

Copy link
Copy Markdown
Contributor

Bundles the four engine changes the editor's new user-journey test tier depends on. Protocol bumps 48 → 49 (additive NewBlankDocument request — no existing payload changed); release publishes @paged-media/canvas-wasm@0.49.0 + introspect-wasm@0.49.0 on the v0.49.0 tag.

Changes

  • NewBlankDocument worker entry (paged-canvas): an engine-minted blank IDML (blank.rs, via the existing zip writer) installed through the normal CanvasModel::load path — backs the editor's real File ▸ New. + dispatch handler, protocol const → 49.
  • Group on a synthesised blank doc (paged-mutate): CreateGroup now materialises an empty frames_in_order z-table first. A doc built up via InsertNode keeps the table empty (register_frame_ref no-ops on it), so grouping failed "member is not a top-level spread item". The materialisation equals the renderer's legacy fallback order — render-neutral.
  • Image context (paged-canvas): elementGeometry.has_image = has_image_element || image_link.is_some() for Rectangle/Oval/Polygon, so PlaceImage surfaces the Image inspector (Frame Fitting). Also fixes Oval/Polygon previously hardcoding false.
  • Renderer test hygiene: cover Paint::SweepGradient in pipeline_lib — v46 added the variant but left the match non-exhaustive (a pre-existing cargo check --workspace --all-targets break).

Tests

  • paged-canvas-wasm dispatch: new_blank_document_* (2). paged-canvas: blank_idml_parses_to_one_page, place_image_makes_geometry_report_has_image. paged-mutate: create_group_on_empty_frames_in_order_materialises_and_succeeds. All existing group/layer/place-image tests green; cargo check --workspace --all-targets clean.

🤖 Generated with Claude Code

Dietmar Rietsch and others added 2 commits June 16, 2026 09:54
- canvas: NewBlankDocument worker entry — engine-minted blank IDML
  (blank.rs via the zip writer) backs the editor's File ▸ New. Protocol
  bump 48→49 (additive request; no payload changed).
- mutate: CreateGroup now materialises an empty `frames_in_order` z-table
  before grouping. A synthesised blank doc built up via InsertNode keeps
  the table empty (register_frame_ref no-ops on it), so grouping failed
  with "member is not a top-level spread item". Render-neutral.
- canvas: elementGeometry `has_image` = `has_image_element ||
  image_link.is_some()` for Rectangle/Oval/Polygon — PlaceImage surfaces
  the editor's Image inspector (Frame Fitting). Also fixes Oval/Polygon
  previously hardcoding `false`.
- renderer(test): cover `Paint::SweepGradient` in pipeline_lib (v46 left
  the match non-exhaustive — pre-existing workspace-check break).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
main's CI was red on three pre-existing issues (independent of the
PROTOCOL v49 release this branch carries):

- fmt: 27 files drift under the pinned rustfmt 1.94.1 → `cargo fmt --all`.
- cargo-deny: allow the pinned Vello git source; ignore three UNMAINTAINED
  (not vulnerable) advisories — paste (RUSTSEC-2024-0436), proc-macro-error
  (RUSTSEC-2024-0370), tsify-next (RUSTSEC-2025-0048).
- corpus/generated/diff.sh: the render/diff engine (corpus/samples/diff.sh)
  lives in the private paged-media/corpus repo, absent from a public core
  checkout. Skip the gate gracefully (no-op, exit 0) instead of `exit 2`;
  the real fidelity gate runs in the corpus repo's CI / local dev with the
  corpus present.

(nextest's SweepGradient break is fixed in the release commit.)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@drietsch drietsch merged commit b2dbd01 into main Jun 16, 2026
11 checks passed
@drietsch drietsch deleted the release/v0.49.0 branch June 16, 2026 08:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant