Skip to content

fix(editor): restore continuous-page drawing and smooth navigation - #40

Open
markm39 wants to merge 12 commits into
mainfrom
fix/seamless-canvas
Open

markm39 wants to merge 12 commits into
mainfrom
fix/seamless-canvas

Conversation

@markm39

@markm39 markm39 commented Oct 19, 2026 •

Copy link
Copy Markdown
Contributor

Restore a continuous editor where ink and selected image/text assets remain editable across page seams during saves. Serialize autosaves, preserve chronological ink/overlay history and page-local export projections, allow 25% overviews and one-finger navigation when finger drawing is off. Invalid native payloads enter recovery without overwriting original bytes.

Use prepared iOS GPU rendering with rendering-context live previews, temporary pressure outlines and independent resolved tile caches. Drawable acquisition and GPU-context disposal run off the input thread; frame delivery is cancellable and rendering stays on the main thread. Shader preparation is cancellable and pending loads settle on closure. Keep viewport updates outside the editor's React render path, reserve selected asset/handle touches, virtualize the sidebar and gate history on confirmed native loading. Android retains its renderer policy.

The exact Mobile Ink 0.3.10 archive is pinned to source fbb8017594896ebcaf0f6ddf6b7632c7250a2a1d with SHA-256 metadata; all 437 packaged iOS/source/library files match source and installed dependencies. This is reproducible while the engine PR awaits required review.

Validation:

  • 122 Node tests and TypeScript pass; native audit helpers typecheck.
  • GPU audits pass all six native correctness workflows, cross-page export, persisted 20,000-stroke lecture content and invalid-data recovery. Earlier native workflows also cover crossing text, rotated crop/resize and chronological history.
  • The fbb8017 Release build passes all six native cases: cross-page ink, cross-page asset history/export, invalid payload recovery and all three dense scenarios. Filesystem checks confirm 100 pages, exactly 20,000 saved strokes, and byte-for-byte preservation of the malformed fixture.
  • Writing render p95 is 1.82 ms across 1,150 frames, maximum 34.03 ms, main delay maximum 32.76 ms. Pan/zoom p95 is 17.74 ms across 50 frames, maximum 34.20 ms, main maximum 36.97 ms. Both gesture windows have zero main delays >=100 ms. First keyboard use still stalls for 1,308.41 ms. The strict overall timing gate FAILS the 16.7 ms pan target and 100 ms keyboard limit; neither threshold is relaxed.
  • The runner excludes only animation-idle waiting for paused blur animators. App run-loop waiting, production animations and native timing checks remain enabled.
  • The engine full CI and 122 app Node tests/TypeScript pass. Missing/incomplete recordings, queue/render stalls >=100 ms and drawing/pan render p95 >16.7 ms still fail the gate. No stall-free or physical Pencil latency claim is made; keep this PR unmerged until required gates pass.

Simplify/security self-reviews: no remaining code findings. Existing large editor/image/text/toolbar owners retain coupled lifecycle and gesture state; history, saving, geometry, export indexing, touch routing and audit helpers are separate bounded modules. No user notes or profiling traces are committed.

@markm39
markm39 marked this pull request as ready for review October 19, 2026 17:40

This branch has not been deployed

No deployments
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