8.4 KiB
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 |