Files
ARCADIA-Studio/harness/experiments/canvas-a31b40d-windows-native-20260911/canvas-cleanup-review.md

3.6 KiB

Frozen canvas cleanup: independent source review

Reviewer: /root/canvas_cleanup_review, 2026-09-11. Read-only source review of the exact 11-file diff from 88c17a448f to a31b40d0f8. Every current file SHA256 matches the freeze manifest in canvas-obsolete-paths-handoff.md. No source/index/shared-record edits, compilation, tests, native application, Linux/WSL or VPN operations were performed. This note is the only reviewer write.

Verdict

No actionable correctness or regression finding in this cleanup. Source inspection supports proceeding to the root-owned compile, full desktop regression, strict Clippy and native gates. This is not runtime or release acceptance.

  • Scene and Graph production constructors formerly initialized the removed scroll offset to zero; their live views already supplied camera pan and scale. Removal preserves raw ordered pointer coordinates and the inverse transform (screen - bounds.origin - camera_pan) / scale, matching draw translation followed by scaling. The viewport passes the event and absolute per-event cursor without a scroll translation; installed iced_widget 0.14.2 Canvas forwards these unchanged, and iced_core 0.14.0 Cursor::position_in subtracts the bounds origin.
  • Scenario caller restoration still copies the complete Presentation and the independent Details offset. The previous restore pending array was always [false, true]; the sole token now represents exactly that live Details channel. Document/owner/token guards and consumption remain, and the mounted observer still applies the offset once, reads actual clamping, then reports its receipt. A consumed or wrong token cannot restore again.
  • Removing First preserves the live BeginOccurrence(Lifeline) path. The adapted retained-message test checks rejection for previous owner and wrong layer, current pending owner, complete Project/source and history. Removing Tools shelf permutations leaves both opening and closing the live Selection shelf, including form offset, stable viewport/actions, draft and invocation checks.
  • All 21 scenario workspace test functions remain. All five scenario_form_focus_* functions and shared form_session.rs remain unchanged; the latter matches SHA256 F5027FB3A5A5599A182E7D1A10DBA56DD66EB1F23A4BA4C4A1744C9A6A5B6E61. Parent focus/session behavior is outside the production diff.
  • The adapted direct tests retain meaningful nonzero camera pan and multiple scales, exact slot/endpoint/occurrence identity, ordered event batches, source/history checks, and viewport containment assertions. These direct tests are complemented by unchanged mounted real-camera input tests, including gesture invalidation, caller restoration, toolbar lifetime rejection, keyboard/focus, and source preservation. The mounted caller test now checks the actual acknowledged Details offset rather than a synthetic-zero field.

Minor documentation observation

Unchanged comments still describe obsolete scroll ancestors at crates/oa-desktop/src/behavior.rs:1796 and crates/oa-desktop/src/behavior/topology/view.rs:70. These do not change behavior or block this cleanup; future nearby editing can describe viewport bounds and retained widget state instead.

Coordination boundary

Root owns the issue claim and current Gitea/main instruction reconciliation. A read-only origin HEAD query resolves the legacy GitLab remote to codex/behavior-draft-lifecycle (ea2e8e9), whose locally available tree has no AGENTS.md; no fetch or reference mutation was performed. Root's Gitea default-branch check remains the relevant shared-instruction gate.