Files
ARCADIA-Studio/harness/experiments/canvas-union-a57c334-20260911/canvas-root-prerequisite-final-review.md
T

8.4 KiB
Raw Blame History

Final root/prerequisite integration source review

Codex-ytr83r /root/wsl_startup_review, 2026-09-11. Read-only review of the isolated .local/canvas-union-ytr83r-20260911 worktree against baseline 32334c6 and frozen peer a31b40d0f8551ed87c8cd66250b9afb4809b3a79.

No actionable integration finding in the reviewed scope. This does not establish compilation or native acceptance. Root owns formatting and combined gates; the separate pan/B4 renderer implementation is not re-certified by this App/root-prerequisite review.

Source comparison

The 17 root-owned canvas paths match a31 except the intentional guide union. App's SHA256 remains 6EB8B4BCD8F73D4BFDAACF30985D8292547440D65EAF49F6BB82AC158FBC46D3, the exact prerequisite handoff reviewed earlier. Its sole difference from a31 is the preserved child-work correction (52 additions, 12 removals). The earlier full-function equality against baseline therefore still applies: add_element retains responsibility relation IDs, leaf-to-child transfer, unambiguous later-child inheritance and execute_batch candidate validation.

The guide correctly retains B4 lifecycle/uncertainty text and its search terms. The empty-path wording now directs Work (W) and a canvas click; the permanent Fragment palette instructions agree with the new controls. Existing advanced trace guidance is retained. No competing guide behavior was overwritten.

Scoped baseline comparisons confirm behavior/creation.rs, behavior/source_draft.rs and tests.rs unchanged. The staged-owner caption, minimum-card layout/tests and three child_work regressions survive. The prerequisite source, its boxed semantic workflow adaptations and published provenance are recorded in .local/canvas-prerequisite-union-report.md; this review did not rewrite them.

Former First event and mounted successors

No stale CanvasEvent::First, Shelf::Tools or ScrollArea::Canvas use remains in the inspected App/process/scenario/topology paths. The final event vocabulary, App dispatch and workspace controls agree.

The replacement is actual user input through the permanent palette, not a renamed synthetic First test. At behavior/scenario/workspace/tests.rs:352, production_empty_scenario_lifeline_tool_keeps_staged_source_inside_stable_canvas mounts the App at 1100×700, visits both OA and SA empty scenarios, clicks the actual L control then the canvas, and requires the correct owner's Lifeline draft. It opens the staged source child, preserves viewport bounds, uses Escape, and checks retained invocation/raw name plus unchanged snapshot/source/Undo/Redo. App's BeginOccurrence Lifeline branch calls State::update(Event::Start); other occurrence tools retain slot/lifeline admission through begin_occurrence. Dirty/pending admission is checked before either branch. The palette keeps lifeline, message styles, action, observation, reuse and Fragment reachable.

The same-size owner/document successor is scenario_workspace_same_size_owner_and_document_changes_remeasure_fit_viewport at line 1781. It reuses the same Mounted instance across OpenUse from owner A to B, requires the presentation viewport to be absent before settling, then observes the actual viewport again at unchanged dimensions. It subsequently replaces App/document while keeping the same semantic owner UUID, proves the document identity changed, again requires remeasurement, and validates Fit and unchanged source/history. This exercises the workspace sensor key (context.document, owner), rather than assuming a resize notification will occur.

The mounted Open/Back successor at line 1828 also retains the caller's camera pan/zoom, selected occurrence/tool/panel and actual Details offset across definition navigation and preselection changes. It checks the observer consumed the one-shot restoration; camera pan is not a synthetic scrollable offset. The five parent-focus regressions remain present, including saved/chained Tasks and changed owner/document/mount/modal conditions.

Interface and behavioral seams inspected

App's camera dispatch and root focus/chooser wrappers correspond to the pinned scenario/topology/canvas helpers. Scenario supplies current focus_stamp, take_form_focus, FormShown, camera_boundary and camera_zoom; process dispatch supplies the equivalent current-context/lifetime and pending/draft/source guards. Module declarations for canvas_workspace, form_session and scenario focus are present in the combined source. No additional missing prerequisite interface was identified.

Owner/document/revision guards remain on passive viewport/Details events; strict current context and clean-edit guards remain on authoring. The separate camera epoch permits its own ordered batch but invalidates stale presentation work on external boundary changes. Existing process/contextual identity and qualified selection behavior are retained from the frozen peer. This was a bounded integration review, not a new audit of every inherited peer algorithm.

Verification limits and exact reviewed files

Direct no-filter Git blob comparisons verified all 16 unchanged peer files, including new untracked canvas modules; ordinary Git diff reports those untracked additions as absent when comparing against the peer, so it was not used as their byte proof. The three protected baseline comparisons and scoped diff whitespace validation passed. A second SHA256 readback found all 21 reviewed files unchanged. No compiler, tests, GUI, WSL, Git mutation or source edit was run by this reviewer. Assertions described above are verified test source, not freshly executed results. The peer's 729/Clippy pass and our earlier 707 pass remain tied to their original inputs; root's new combined results must identify the current union. The source-card layout, parent focus, actual canvas tasks and pan/B4 clipping/hit behavior still require the combined gates.

All paths below are relative to crates/oa-desktop/src/; these SHA256 values define this review's exact scope. The larger renderer file was read only for module-interface presence and is deliberately excluded from the accepted hash set because its dedicated worker/root owns that union.

Path Bytes SHA256
app.rs 220191 6EB8B4BCD8F73D4BFDAACF30985D8292547440D65EAF49F6BB82AC158FBC46D3
app/process_canvas.rs 30804 5A913BFA1E9E08D3A8AF314D2A883D55D1F1EED30E288546946F77C9F61CEB9C
behavior/canvas_workspace.rs 7758 9303ED4F74EE0317E4ABEAB134F7C31F50EAC5EB5D85940D771CD3AD595258FA
behavior/canvas_workspace/control.rs 7804 2B8D97B8C0E3FF1B1A2C32187B1D0EB25EDF39BA582B5FB3303BC880F674F7BA
behavior/canvas_workspace/focus.rs 8943 CC58CB3838F546150D22FE4DD83A3FFD52504C279FEBAEB8D0B4A6A3B8A73950
behavior/canvas_workspace/tests.rs 27020 D84D022574A6F1D69F203D9383502227FB9FC23605C6FB48779CA9F09BEE546D
behavior/canvas_workspace/viewport.rs 14436 AF1C7C1E802D1207EE6C7BD66B703811A250D7B56511512AF6C0945C776E68A7
behavior/contextual_source_tests.rs 49518 044BD412DC45FFE440B1E251993946942DC3759DCB2D5DFE71BD8D6EF61CBCC7
behavior/scenario.rs 152266 CE99D5902F16629BE84F3F10F45CF632EEF037D22401E54482057552D983D017
behavior/scenario/workspace.rs 25995 29F3BC14AA19AD110E60BAAAEA644A53DAABC0CFA7C8CA4542E9D5A2C11CB9D0
behavior/scenario/workspace/tests.rs 80083 57649638930E4B47DCBC3F9F6A2F991DA4393DBC1EF243BBC09E01D40932F5BA
behavior/topology.rs 84212 26E24AD0F781A3304C46299B3BD906917E57FAC262E7F52FBA4ADC80A4358EC5
behavior/topology/contextual.rs 28432 5D0AC5B3E258FC70987A00EDE1E603681D99746596F2FCC46AD2B3667D65203A
behavior/topology/direct.rs 36121 FA9CEAE78174D09904A9EBF90B0792AE9A2D8D26E3BE56A3891D5DE5345E49D0
behavior/topology/direct_tests.rs 51170 EDCCFE3CE8B224065A3540AA53C6340F13DB0CECD48ECC0A3904CD832A483964
behavior/topology/layout_tests.rs 36842 9031B2B2BD7AF47ADA3F1811C71F3EE372B07A545FB59C319A99D625F2D29EB6
behavior/topology/view.rs 23136 B2D502C11426BFFB8763515F2A56AA4C9F8E203BB36D65EB34F81C123FC406A6
guide.rs 116479 57DC7FFAD9FE07392C95F4493BE1931C48E2FB417ABB0F3B64B8007006AAFC7A
behavior/creation.rs 29301 438A245EAD397060767C790C51A8F21CD5021342627999DEB4695CF3BD22091A
behavior/source_draft.rs 39485 85D543CC288E48B4C13001E4E386B5B54D9B1E349A5AC31E4E307572F2D8FB3C
tests.rs 75189 686DE3E6896CB322E3BA642FE5EF04F570E2FA04EB1956E08E958F3378FA4F1C