Files
ARCADIA-Studio/harness/release-process-fit-layout-audit-20260907.md
T
Codex e2ecfea69b
Rust checks / check (ubuntu-latest) (push) Canceled after 0s
Rust checks / check (windows-latest) (push) Canceled after 0s
Checkpoint source 7 workflows and in-progress diagram authoring redesign
Preserve current core, source, REST, desktop, recovery, documentation and validation work, including AGENTS.md and the development summary. This is a work-in-progress checkpoint: the new compact palette has outstanding compilation errors and native acceptance; earlier passing gates retain their documented scope.
2026-09-10 10:06:55 -07:00

189 lines
12 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.
# 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.