Files
ARCADIA-Studio/harness/reviews/state-multiselect-merged-20260923.md
T

31 lines
5.1 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.
# State and ordinary multiselect merged-source review
Reviewed the staged `.local/peerunion` source on `codex/multiselect-union-956atf-20260923`, combining `e34ba27e26ede3ab55f276acc250d92b2e0c3204` and `bed7f825fd00ec32299032a664a5f5d753aad86d`. The read-only e34 baseline was `.local/scunion`, **not** root production. Scope: merged App admission/reconciliation, menu dispatch, State/ordinary canvas interactions with newer Scenario/Text/Properties behavior. No source mutation, compiler, GUI, expensive Git scan or archived helper execution.
**No concrete blocking regression found in this bounded source review. Suitable to freeze for combined gates; not combined-runtime acceptance.**
- `app.rs:1382–1470` retains e34's complete early Text/source/allocation/Scenario admission block verbatim. New selection/state envelope checks at `:1350–1380` precede it and do not mutate state on refusal. Scenario revision/visit/epoch, separate camera lifetime, and Properties target/pending-input checks still run before reveal/allocation reconciliation. The new State singleton guard likewise refuses queued Select/Move/Remove before those shared side effects.
- `app/multiselect.rs:88–99` scopes ordinary selection through `route_context` and State selection through a validated `state_context`; it does not introduce a Scenario adapter. Reconciliation uses exact occurrence targets and State placement ownership (`:141–249`), preserving row identity rather than substituting its owner node. `app.rs:1529–1533` reconciles after ordinary dispatch; the allocation early-return path also reconciles (`:1483–1488`). Existing early Text implementation is byte-identical to e34 and retains its nested update dispatch.
- `model_menu.rs:99–121` validates the captured occurrence against visibility and request identity. At `:236–339`, group entries precede the State popup; the singleton State popup is still appended/reached. `app.rs:2613–2630` retains pending-draft refusal, dispatches group selection directly through `update`, and only uses legacy `select` for other menu actions. This avoids collapsing a group before processing its captured snapshot.
- `behavior/state_canvas.rs:220–235,1540–1544` preserves the meaningful distinction between canceling edits and canceling all gestures: dirty input retires model editing without clearing an ongoing read-only pan. Group currentness checks include selection snapshot, editability, tool and viewport (`:790–811`); retirement consumes the event before it can become a fresh keyboard edit (`:1528–1606`). The new selection route in `behavior/state_view.rs:43–46` still reaches App's early envelope, while other events retain State dispatch.
- Ordinary and State selection strips reserve 56 pixels (`views.rs:695`, `behavior/state_view.rs:248`); the State missing-element picker also reserves its 34-pixel slot (`:147–151`). This preserves canvas size/focus-tree continuity during group selection and Hide/Undo. Both new native example Diagram literals include `layout: None`.
- Direct byte comparison confirms `source_defaults.rs`, `source_project.rs`, both source-project implementation modules, `app/scenario_spacing.rs`, and `app/text_workspace.rs` are unchanged from e34. No writer/default migration was silently replaced by the selection merge. The newer Scenario picker guard and Properties action row remain in merged `views.rs`.
## Targeted combined acceptance checks
Reuse the delivered ordinary/State core, App and mounted tests, but run them on the frozen merged input set. In addition, retain the e34 Scenario/Text/Properties regressions so source-only preservation is exercised together with new reconciliation. The discriminating seams are: a captured State/ordinary group action after Text Apply or navigation; a same-visit stale Scenario action while a new reveal exists; a State mixed row/placement selection with a pending inspector draft; and group Hide/Undo while the missing-element picker changes contents. Require model/source/history, selection, camera and pending ownership to remain correct together. These are coverage requirements, not newly proven defects.
Native held-drag cancellation and dirty-State read-only pointer pan remain unobserved unless actually exercised. Existing mounted/core evidence must not be relabeled as native closure. The prior ordinary preview-cache ordering concern remains a targeted redraw check, not an established stale-commit bug; this merge review supplies no new reachable failing trace.
## Reviewed byte pins
| File below `crates/oa-desktop/src/` | SHA256 |
| --- | --- |
| `app.rs` | `21fbca718bea0bf77414b18e0552768235c6f5b3af6f71a80b77a89521a59445` |
| `app/multiselect.rs` | `1b1c29c2153aa976272e38136433731b6c3b53f0610ab53f03341ec664f8b361` |
| `model_menu.rs` | `99a6792cb4187ec4fa9031005fb9bc2b03b41c70df00dffa9047a1dfd41304d2` |
| `behavior/state_canvas.rs` | `9ccf0682bf1b97db408662a750d9c29b627eb7dc51cb61056e11ceeac62baf88` |
| `behavior/state_view.rs` | `234ff0f4969c1e6067100795d1e75f5f6a7e8c22e374392becb83b23912f4f2d` |
| `diagram.rs` | `99d9ccd2ed0daf4716a36bfc1a22ce3caf6d5165bd30a3c1d8b21577b262783d` |
| `views.rs` | `c6a8e67e5a5cde7a2f31e4c5488980555d5a38d854bb60e1c9477688d719237c` |