Files
ARCADIA-Studio/harness/experiments/canvas-union-a57c334-20260911/canvas-renderer-union-report.md
T

29 lines
4.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Isolated canvas renderer union
Owner: Codex-ytr83r /root/linux_build_plan. Worktree `.local/canvas-union-ytr83r-20260911`; baseline32334c66317692befb6517a917dc7ae90641c11a, preserving production865483b renderer. Peer pinned a31b40d0f8551ed87c8cd66250b9afb4809b3a79; known merge base c6d296a7e22c8f126834a1e217b88551634dd5cf. Only the three owned worktree files below were edited; main source, Git/index, compiler, native UI and WSL were untouched.
## Implemented
- behavior.rs: imported peer's scenario_scroll observer adaptation (process argument, Page-only details scrolling) and canvas_workspace/form_session module declarations, retaining unconditional scenario_lifecycle. Merged peer camera_pan input/draw mapping, Lifeline palette admission, ordinary row drag/release selection and cross-operand hint. Retained root B4 scene geometry, lifetimes, markers, clipping, marker priority and model/source construction. The existing pointer-order regression now covers the replacement camera-pan backend.
- Header text and Create label clipping use the same local screen transform: pan + scale × world. Both fresh clipped child frames explicitly translate(pan) THEN scale(scale), just like the parent. Clip rectangles intersect actual parent frame size; widget absolute origin is not added. Nonfinite pan is rejected by clip helpers.
- scenario_lifecycle/render.rs changes are limited to the pan argument for draw_markers, child transform, and birth_label_clip transform/guard. No marker/lifetime/hit semantics changed.
- All15 existing lifecycle render tests remain, including .05/.1 minimum-zoom marker priority. Added2 regressions: independent absolute clip expectations for positive/negative pan at .5/1/2, partial viewport edges/offscreen/nonfinite cases; actual canvas::Program mouse-event selection for OA/SA header, Create and Delete identities with nonzero pan, nonunit zoom and nonzero widget origin. Unicode/source/lifecycle values remain unchanged.
Independent reviewer counterexample is included: rect100,200,204,70; pan(-200,-400),scale2,viewport300×100 produces header clip20,16,280,84; Create140×28 clip16,8,248,40. A scale-before-pan ordering would fail these expectations. The tests do not claim pixel validation or invoke a physical renderer; direct source inspection verifies both child-frame call sites.
## Validation and handoff
Scoped rustfmt2024 with skip_children=true formatted only these3 files; subsequent --check exit0. Correct-worktree git diff --check exit0. No compiler/test/native execution. Read-only source comparison against32334c6 proved the entire impl Scene geometry/hit section equal apart from initialization field scroll_offset→camera_pan; the B4 render/lifetime/hit prefix before draw_markers is byte-equal after line-ending normalization. Existing lifecycle test names were all retained (15→17).
Root owns canvas_workspace/**, scenario.rs/workspace/**, topology/** and guide integration; prerequisite worker owns App/forms. Renderer interface is Scene.camera_pan (screen units), scenario_scroll::observe(context,area,process,restore,content), and Rendering::draw_markers(frame,selected,scale,pan). Root was notified about remaining scene.scroll_offset expressions in its workspace/tests.rs:1193/1198 at the time of inspection; those belong to root's interface adaptation.
windows_release_gap_review supplied exact Iced draft/paste/transform obligations and has been asked to inspect these final candidate hashes. At this report write, candidate critique is pending. Root must compile and run combined candidate tests/Clippy and actual pan/zoom/viewport native checks before acceptance. Peer729 and prior root707 results do not validate this union.
## Frozen worker hashes
| Worktree file | SHA256 |
| --- | --- |
| crates/oa-desktop/src/behavior.rs | 82DCAAED9EB17F15329F80BCC7442FFF94C17D426A50DEA68455339F60FFA246 |
| crates/oa-desktop/src/behavior/scenario_lifecycle/render.rs | BF1C05EA1E709B3503D8BCF92F091446FD7A9B80B1A29C5A55919DF58F3B0271 |
| crates/oa-desktop/src/behavior/scenario_lifecycle/render_tests.rs | A95201F7D0DCC88C9C54863F0E95E09C1DB204668743ABBD32C495B577EA53EF |