189 lines
12 KiB
Markdown
189 lines
12 KiB
Markdown
# Process Fit and focused-layout audit
|
||||
|
|
|
|||
|
|
Initial read-only audit followed by the authorized implementation below. Root's BCC1 native routing
|
|||
|
|
check passed the short visible path, terminal-stub selection and qualified B
|
|||
|
|
selection. This is a separate viewport/layout defect, not a routing regression.
|
|||
|
|
|
|||
|
|
## Verified cause
|
|||
|
|
|
|||
|
|
- `behavior/topology.rs:235`: Fit uses measured viewport **width**, but its height
|
|||
|
|
term is always `450 / graph.height`. The measured `Size.height` is ignored.
|
|||
|
|
- `behavior/topology/view.rs:316`: the inner canvas scroller is assigned
|
|||
|
|
`(window_height - 360).clamp(190,600)`; pending forms use
|
|||
|
|
`(window_height - 510).clamp(160,240)`. Neither subtracts actual header, palette,
|
|||
|
|
qualified-summary or form allocation height.
|
|||
|
|
- `view.rs:324`: the sensor surrounds that allocated box plus 8px padding. Iced
|
|||
|
|
`iced_widget-0.14.2/src/sensor.rs:217,239,250` publishes `layout.bounds().size()`,
|
|||
|
|
not its intersection with the outer viewport. Substituting sensor height for
|
|||
|
|
450 alone therefore leaves the off-screen-box problem.
|
|||
|
|
- `view.rs:559`: a second outer scroller contains the entire heading, owner picker,
|
|||
|
|
focus button, two palette rows, help, variable navigation and inner canvas.
|
|||
|
|
`panes` divides that page and the independent editor vertically when pending.
|
|||
|
|
- `views.rs:228`: Focus removes explorer/inspector only. It does not compact any
|
|||
|
|
vertical controls. `behavior.rs:717` and `view.rs:78–261` explain the tall stack.
|
|||
|
|
|
|||
|
|
For the observed 1444×932 window, canvas top y566 leaves at most 366px even before
|
|||
|
|
the footer; Fit can still create 450px of graph. The allocated inner scroller is
|
|||
|
|
572px high, so much of it lives below the outer fold. Seeing Nested below the fold
|
|||
|
|
is consistent with the code. The current action fits a synthetic 450px drawing
|
|||
|
|
height, not the visible viewport. Outer scrolling can reach it but does not make
|
|||
|
|
the Fit claim accurate. Existing test `fitting_a_branch_keeps_all_nodes_visible...`
|
|||
|
|
uses viewport height460 and only asserts450, so never falsifies smaller viewports.
|
|||
|
|
|
|||
|
|
## Smallest coherent correction
|
|||
|
|
|
|||
|
|
Keep the existing main/form split and graphical model; replace only the explicit
|
|||
|
|
process graph's nested page layout with a height-constrained column:
|
|||
|
|
|
|||
|
|
1. A stable compact header/control shelf: owner/focus controls, then accessible
|
|||
|
|
Tools, Selection details/definition navigation, and Fit/zoom controls. Keep its
|
|||
|
|
always-visible rows small (about80–100px at1100×700); place the existing palette,
|
|||
|
|
help and full qualified identity text in a bounded scrollable details area
|
|||
|
|
opened explicitly. Focus starts with that details area collapsed. Every action
|
|||
|
|
and complete From/To identity remains reachable; no silent text truncation or
|
|||
|
|
removal of raw-draft guards. Do not collapse/alter the actual pending editor.
|
|||
|
|
2. The graph scroller takes `Fill` in the remaining **allocated pane** height.
|
|||
|
|
It must not sit inside an outer scrollable that permits its allocation to
|
|||
|
|
extend off-screen. Measure its inner usable viewport, excluding card padding
|
|||
|
|
and any scrollbar allowance, independently of scaled graph content.
|
|||
|
|
3. Fit uses `min(available_width/graph_width, available_height/graph_height,1)`.
|
|||
|
|
Preserve the existing bounded minimum zoom policy, but report that limit if a
|
|||
|
|
huge graph cannot fit at the minimum; do not promise a full fit in that case.
|
|||
|
|
Resizing, opening details, changing qualified selection or opening the form
|
|||
|
|
updates this measured area and recomputes Fit. Manual100% stays100% and scrolls.
|
|||
|
|
4. Preserve `panes`' independent pending editor with fixed Apply/Cancel above its
|
|||
|
|
own `process-form` scroller. At the existing minimum570px center height, a
|
|||
|
|
roughly285px graph pane minus at most100px shelf leaves about185px usable canvas;
|
|||
|
|
the editor retains its current approximately200px-or-more field viewport.
|
|||
|
|
Without a form, Focus gives most of the center height to the graph.
|
|||
|
|
|
|||
|
|
This should be a bounded `topology/view.rs`, `topology.rs::scale`, and layout-test
|
|||
|
|
change, with only small state/events for Tools/Selection details if needed.
|
|||
|
|
`behavior.rs` may need its title/owner header factored into the compact shelf.
|
|||
|
|
No core/analysis/source/recovery schema change, no expansion of the512-node preview.
|
|||
|
|
Persist only existing authored drafts; disclosure/viewport state remains transient.
|
|||
|
|
|
|||
|
|
## Scroll-tree and verification boundaries
|
|||
|
|
|
|||
|
|
Keep permanent shelf, canvas and form sibling slots. Put conditionals inside each
|
|||
|
|
slot; do not prepend/remove siblings containing the real `process-canvas` or
|
|||
|
|
`process-form` trees. Retain IDs and owner/document observer identity. A shelf
|
|||
|
|
disclosure may resize the graph but must not remount it, change selection or erase
|
|||
|
|
manual scroll. The existing unchanged pending-form scroll-state regression is a
|
|||
|
|
required falsifier; merely naming a new scrollable with the same ID is insufficient.
|
|||
|
|
|
|||
|
|
Focused checks should exercise the actual shared layout helpers and Iced tree:
|
|||
|
|
|
|||
|
|
- Minimum1100×700 and native1444×932 available center sizes; graph viewport entirely
|
|||
|
|
inside its pane before/after full qualified summary, Tools and pending editor.
|
|||
|
|
- Fit at measured heights180,320,600 with a tall fixture; every graph bound within
|
|||
|
|
measured usable dimensions (unless explicit minimum-zoom limit), and100% unchanged.
|
|||
|
|
- Real scroll state through select→qualified select→pending form→cancel and focus
|
|||
|
|
toggle; full raw invalid draft unchanged and Apply/Cancel always visible.
|
|||
|
|
- Existing nested picker/definition/Back and reconnect tests unchanged, plus native
|
|||
|
|
Fit after100% scrolling and after a resize, with exact accepted source unchanged.
|
|||
|
|
|
|||
|
|
Avoid a patch that merely swaps450 for another window-height estimate or sensor
|
|||
|
|
height while retaining the outer clipped allocation. That would leave the measured
|
|||
|
|
native failure intact.
|
|||
|
|
|
|||
|
|
## Follow-up implementation checkpoint
|
|||
|
|
|
|||
|
|
Owned delta: `behavior.rs` compact owner header; `topology.rs` transient Tools/
|
|||
|
|
Selection shelf state and measured Fit; `topology/view.rs` stable remaining-height
|
|||
|
|
explicit graph; `topology/layout_tests.rs`; one `cfg(test)` annotation on the
|
|||
|
|
unchanged legacy summed-scroll accessor in `topology/direct.rs`.
|
|||
|
|
|
|||
|
|
The explicit graph now uses a permanent header/shelf/canvas structure. **Tools**
|
|||
|
|
opens its existing authoring palette including **Qualified link / assembly…**.
|
|||
|
|
**Selection details** opens complete addresses and definition/Back actions. The
|
|||
|
|
details scroller is112px (64px with pending editor), or closed by default; the
|
|||
|
|
canvas gets remaining Fill height. Its inner sensor measures actual usable space.
|
|||
|
|
Fit reserves24px horizontally and10px vertically, keeps5% minimum/100% maximum,
|
|||
|
|
and visibly reports when the minimum leaves graph content outside the viewport.
|
|||
|
|
Manual zoom behavior is unchanged. The independent editor/actions remain mounted.
|
|||
|
|
|
|||
|
|
Explicit pointer transforms use Canvas offset only; an old ordered-page offset
|
|||
|
|
cannot move a hit target. New prepared tests exercise actual mouse selection with
|
|||
|
|
Page y370 and Canvas(11,19) at45%/100%, small-height Fit/minimum notice policy,
|
|||
|
|
exact rejected raw draft retention during disclosures/focus, and real Iced layout/
|
|||
|
|
scroll operations across compact shelves, form open/close and pane resizing.
|
|||
|
|
The existing pending-form canvas-tree regression remains unmodified.
|
|||
|
|
|
|||
|
|
Authorized outer-tree correction: `views.rs` keeps process main at row child1
|
|||
|
|
through Focus. The sidebar's container remains as a clipped zero-width slot with
|
|||
|
|
an empty Space child while focused, so hidden controls cannot intercept input.
|
|||
|
|
Inspector is removed only after main. Other page layouts retain their existing
|
|||
|
|
branches. A new whole-`views::view` tree test checks the actual canvas scroll-state
|
|||
|
|
marker and exact pending raw draft through Focus/disclosure changes in both layers.
|
|||
|
|
This supplements actual layout/scroll tests; it does not claim pixel/native proof.
|
|||
|
|
The full-app test proves tree identity, exact disclosure/Focus events and raw
|
|||
|
|
state; actual offsets are exercised in the production pane helpers with Iced's
|
|||
|
|
debug renderer. That helper additionally scrolls the pending form to600 while
|
|||
|
|
requiring canvas(90,180) and pinned actions to remain unchanged. Native full-app
|
|||
|
|
offset retention after Focus still needs direct verification.
|
|||
|
|
|
|||
|
|
Six focused `process_fit_` tests now pass. Full source list also includes this
|
|||
|
|
narrow `views.rs` seam. Existing pending-form scroll regression is unchanged.
|
|||
|
|
Current exact native control path is **Tools → Qualified link / assembly…** and
|
|||
|
|
**Selection details → full addresses / Open contribution definition / Back**.
|
|||
|
|
Focused exit label is **Restore panels**; old ordered-view layout remains as before.
|
|||
|
|
|
|||
|
|
The current automated gates are recorded below. The earlier564 desktop pass and
|
|||
|
|
BCC1 native routing evidence retain their previous-binary scope.
|
|||
|
|
|
|||
|
|
### First focused execution and correction
|
|||
|
|
|
|||
|
|
Root's initial compile identified the generic helper's missing text-renderer
|
|||
|
|
bound; root applied the required `iced::advanced::text::Renderer` bound.
|
|||
|
|
The next compile succeeded and `process_fit_` ran:4 passed,2 failed, preserved in
|
|||
|
|
`.local/source7-latest-fit-tests-attempt2-scroll.log`. Failures were genuine remounting defects:
|
|||
|
|
actual canvas offsets became(0,0), and Focus shifted the main tree path.
|
|||
|
|
|
|||
|
|
Locked Iced0.14.2 `Row::push` and `Column::push` discard children whose size hints
|
|||
|
|
have a Fixed(0) dimension (`iced_core::Size::is_void`). Thus the supposedly stable
|
|||
|
|
zero-height shelf and zero-width sidebar slots disappeared. This was not a wrong
|
|||
|
|
ID or first-scrollable test bug. The bounded correction uses `Column::from_vec`
|
|||
|
|
for explicit header/shelf/canvas and `Row::from_vec` for process sidebar/main;
|
|||
|
|
these retain the supplied children verbatim, with Fill dimensions set explicitly.
|
|||
|
|
All retention expectations remain unchanged. The local test additionally proves
|
|||
|
|
there is exactly one `process-canvas` ID and that its actual offset is(90,180)
|
|||
|
|
before any diff. Corrected source passed the rerun without changing the failed
|
|||
|
|
expectations; the original failure remains part of the evidence.
|
|||
|
|
|
|||
|
|
## Final gates and runnable preview
|
|||
|
|
|
|||
|
|
`.local/source7-latest-preview-status.json` records exit0 for every gate:
|
|||
|
|
|
|||
|
|
| Gate | Result / command duration |
|
|||
|
|
| --- | --- |
|
|||
|
|
| Six `process_fit_` tests |6/6;54.02s including compilation |
|
|||
|
|
| Existing pending-form scroll regression |1/1;1.09s |
|
|||
|
|
| Existing branch Fit/selection regression |1/1;1.73s |
|
|||
|
|
| Locked workspace binaries build |Passed;51.63s |
|
|||
|
|
| Format check |Passed;4.02s |
|
|||
|
|
| Strict workspace/all-target Clippy |Passed;42.95s |
|
|||
|
|
| Subsequent full desktop |570/570,0failed/0ignored;200.63s command,198.82s tests |
|
|||
|
|
|
|||
|
|
The full desktop result is independently recorded in
|
|||
|
|
`.local/source7-latest-full-desktop-status.json` and
|
|||
|
|
`.local/source7-latest-full-desktop-tests.log`. Focus intentionally preserves the
|
|||
|
|
chosen disclosure; only its initial default is collapsed. No new accepted-source
|
|||
|
|
or recovery fields were introduced by the Fit fix.
|
|||
|
|
|
|||
|
|
Open `dist/ArcadiaStudio-preview-source7-20260907-x86_64-pc-windows-gnullvm/arcadia-studio.exe`
|
|||
|
|
with its runtime files beside it. Alternatively extract the whole corresponding
|
|||
|
|
ZIP, then open the executable. This is a development-profile preview. Independent
|
|||
|
|
package integrity verification records565files, all37teachingfiles, ZIP SHA256
|
|||
|
|
`1fac10b30daf2f8e1dac29e9469485e4bea142e77ff5a13e4c9d1e41ff03abb2`, and the
|
|||
|
|
adjacent `.zip.provenance.json`. The executable SHA256 is
|
|||
|
|
`DC50C887BFE9C73565E3C5DC2AE451BEBC48EC25DF7A1F7C5D97E9C853F2C93A`.
|
|||
|
|
|
|||
|
|
Root's native observation on this packaged binary: clean-PATH launch succeeded;
|
|||
|
|
the accepted OA caller graph at1444×932 fitted at68% with all four cards visible.
|
|||
|
|
A1102×932 width was also observed, **not** the700-pixel minimum-height case.
|
|||
|
|
The user's Escape stopped Computer Use before final checks. The app may remain
|
|||
|
|
open; no clean-close or final unchanged model/source oracle is claimed. The
|
|||
|
|
remaining minimum-height, pending-form, disclosure/Focus scroll and broader
|
|||
|
|
OA/SA native cases above remain acceptance work.
|