Files
ARCADIA-Studio/harness/release-scenario-workspace-independent-review-20260910.md
T

43 lines
2.5 KiB
Markdown

# Independent scenario workspace review — 2026-09-10
Codex-9e8r6t /root/palette_finish. Reviewed commit
`3978bbe23c3d50563ad87fea5552de3d52f39d6b` against its parent, the new tests,
App context/modal gates, existing scroll observer and actual cached
`iced_widget-0.14.2/src/sensor.rs`. No source edits, Cargo or native input.
## Actionable finding: viewport observation loses owner identity
**P2 — Fit overview can stop working after same-size scenario navigation.**
Affected code: `crates/oa-desktop/src/behavior/scenario.rs`, `State::enter`,
and `crates/oa-desktop/src/behavior/scenario/workspace.rs`, `canvas_pane`.
Reproduction condition: mount scenario A and obtain its viewport measurement;
navigate to scenario B at the same canvas viewport size, without opening a
shelf or changing focus/header height; then choose Fit overview on a scene
larger than that viewport. `enter` resets presentation to defaults for B,
including `viewport = None`. The Sensor wraps the identity-resetting scroll
observer but has its own stable outer widget state and default unit key.
Iced's Sensor retains `has_popped_in` and `last_size` through `diff`; unchanged
size and key produce neither on_show nor on_resize. B therefore never receives
the current measurement. Its fit scale falls back to 1.0 until another action
changes the canvas dimensions. The same identity-lifetime issue can preserve a
historical caller viewport on Back after resizing in a callee.
The existing mounted A-to-B tests verify actual scroll reset/restoration and
manual camera values, but do not assert B obtains a measured viewport at an
unchanged allocation. Pure Presentation tests manually provide that measurement
and therefore cannot expose this failure.
Requested fix: key the Sensor by `(context.document, context.scenario)` or
otherwise re-observe its current size at that identity boundary, while preserving
the existing child scroll restoration contract. Add a mounted same-size A-to-B
regression that proves B gets a measurement and Fit produces a scale below one
without a resize. The author acknowledged the finding and is implementing this
fix and regression under their lease. No executed fix result is claimed here.
No second actionable counterexample was established in this bounded review of
stale pointer epochs, passive scroll/viewport guards, invalid Back normalization,
raw pending forms, stable disclosure/focus slots or scale/hit-coordinate paths.
This does not replace root's immutable full-suite run or native acceptance.