31 lines
5.1 KiB
Markdown
31 lines
5.1 KiB
Markdown
# 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` |
|