Files
ARCADIA-Studio/harness/release-contextual-source-layout-review-20260911.md
T

14 KiB
Raw Blame History

Contextual source form: minimum-height review, 2026-09-11

Codex-9e8r6t /root/release_audit. Bounded read-only investigation requested by root after native use of committed source df6f59562643b7771ecf0c972f8655f3e3f1c4da, Windows GUI 52DE82E434B636E18DB02D381842AA6DB84B721CFFD5502063F784F37246ACCE. Only this new report was written. No production changes, compiler, tests, native input, Git changes or new native acceptance are claimed.

Observed defect and cause

Root opened the fixed staged-source baseline at client size 1100×700 with ordinary side panels, used the empty OA Scenario's Lifeline action, named the consumer Assessment lifeline, then opened Create new source. I inspected the supplied screenshot .local/native-qa/contextual-source-20260911-v1/oa-source-open-clipped-name.png (SHA-256 E59F32D493FE1C46981ED74E85FA622C0EAAFE01CE33AA04DA9E5A4BBCE9FB7D; complete image is 1102×732 including window frame). Name receives focus but is only partly visible. The first meaningful input therefore requires an unexplained scroll before comfortable typing. Root reports that one downward body scroll of 173 pixels reveals Name, semantic parent and Use layer root; this latter operation was not independently repeated by this worker.

The screenshot and code agree on three contributing layers:

  1. behavior/scenario/workspace.rs:641 allocates both the canvas and pending form Fill inside the same column, dividing their remaining height equally. The still-mounted empty canvas occupies approximately y246–460. The form's retained consumer caption starts near y476.
  2. The source card's 12-pixel padding, pinned footer and 10-pixel separation leave its inner behavior-source-fields viewport only about y501–631, or 130 pixels. Pinned Back/Use starts near y642 and remains reachable; moving the footer into the scroller would lose a behavior that is currently correct.
  3. behavior/source_draft.rs:328–357 puts an 18-point heading, the owner/viewpoint sentence, the transaction explanation, and a separate Activity button before Name, with 8-pixel gaps. Name starts near y619, leaving only about 12 pixels before the viewport clips. This is introductory-content ordering compounded by the actual host height, not a failure to give Name keyboard focus. app.rs:2393 issues operation::focus(NAME_INPUT) and does not reveal it inside this child scroller.

The multiple-kind cases can consume more space: source_draft.rs:341 adds each of the two or three valid kinds as a separate vertical button. topology/view.rs:659 likewise divides diagram/form height equally, so it has the same structural exposure. New-machine creation uses the same child card, although its host differs. This review does not assert a separately observed native failure in those adapters.

The passing regression at behavior/contextual_source_tests.rs:741 is narrower than this outcome. It mounts the source card alone at 340×320 and 500×570 using the unit renderer, and asserts only the footer and scroller geometry. It neither supplies the roughly 194-pixel child height seen here nor checks the Name or parent-summary bounds. The test correctly established a pinned footer; it did not establish initial input visibility or native text wrapping.

Two bounded alternatives

Approach Concrete change Benefit and cost
A — compact essential fields first (recommended) Change only the shared source-card presentation. Start with a compact title, then Name, a single wrapped row of explicit kind choices when there are several, then the visible semantic-parent summary. For the single permissible Activity/Function case, name that already determined kind in the compact heading instead of spending a row on its redundant choice button. Put the longer consumer/viewpoint explanation and transaction guidance after these essentials; keep all current parent-search/selection controls and the pinned Back/Use footer. Fits the observed initial root-parent workflow in substantially fewer rows and helps all three adapters. It does not alter workspace allocation, scroll restoration, focus events, draft fields or semantic defaults. The existing retained consumer caption and selected behavior header continue to orient the engineer. Full names/ownership data remain authored as before; only explanatory ordering and bounded kind presentation change. Parent search/help may still need scrolling, appropriately after the initial fields. Actual font/layout measurement is still required before claiming fit.
B — give an open child more workspace height While a source child is open, allocate a larger share of the current canvas/form split to its editor (for example, a measured 1:3 canvas:form candidate), retaining the mounted canvas and its identity. Restore ordinary proportions on Back/Use. Gives the observed OA card more room without substantially reordering it and leaves more explanatory context visible. It reduces the diagram context and changes the measured canvas viewport/Fit result. A ratio alone is not a guarantee for long owner text or several vertical kind buttons. It requires changes in both scenario and topology host layout plus restoration tests, overlapping the separately owned workspace/FormShown work. It is a broader and less reliable first fix for this particular card.

A is the smallest coherent correction for the observed first-action failure. Its acceptance target is the actual initial Name, explicit valid kind and current root-parent summary, not a smaller font everywhere or a requirement that the engineer press Focus canvas. Do not remove the semantic-parent summary, silently choose System/Actor, merge source/consumer names, or mutate/scroll the diagram to make room. A full source-name-first row also avoids pushing focus below an unusually long contextual sentence. Very long recovered parent labels still need an explicit readability check; their bytes must not be shortened in state.

Automatic focus-and-reveal alone would hide the introductory kind choice above Name in multi-kind cases and introduce another asynchronous focus/scroll route. It is not the recommended substitute for sensible field ordering. Any later such work must reuse the authoritative host's FormShown/focus design.

Proposed regression and acceptance

After root ratifies a presentation edit, extend contextual_source_tests.rs rather than changing command tests merely to match widget order. Mount the real child with its retained consumer caption at the observed short height, and add a host-composition case using the normal scenario and topology split. Start at zero child scroll offset; inspect the full NAME_INPUT rectangle, the semantic-parent summary and each visible explicit-kind action against the actual child clip rectangle. Assert the Name rectangle is fully contained, the initial layer-root summary is visible, and Back/Use remains outside the field scroller and within the host. A stable test-only-readable container ID for the parent summary is sufficient; no new semantic state is needed.

Cover OA Activity, SA Function, the two/three-choice participant cases and an unnamed machine parent. Keep source and consumer names distinct; typing into the visible source field must retain the exact parent draft and accepted Project/SourceBundle. Include a long Unicode consumer heading and a recovered nested semantic parent as readability controls. Unit-renderer geometry alone must not be labeled proof of native paragraph wrapping. Pair it with root's 1100×700 normal-panels screenshot/action check on the rebuilt candidate: open child, see the complete Name/current kind/root ownership before any manual scroll, type, inspect Back/Use, then separately complete the existing semantic oracle workflow. Also check the wider window without changing model or canvas offsets during mere rendering.

No new execution is part of this report. Existing focused 23, guide 3, strict lint/build/fmt and predecessor full 675 evidence retain their original scopes; they do not invalidate or cover up this native usability finding.

Ownership and broader context

Current issue 2, Process & scenario diagrams approach, is owned for coherent canvas design by Codex-956atf (comments 243–244). Their chooser/FormShown/workspace changes remain separate. This source-card recommendation can be implemented in behavior/source_draft.rs and its owned focused tests after root's current immutable native trial; no shared scenario/App/focus changes are proposed in A. It does not close issue 2 or propose a parallel canvas redesign. Root decides timing, integration and native acceptance.

Ratified implementation: source freeze, gates pending

Root ratified alternative A after the read-only recommendation. Only behavior/source_draft.rs changes in production: compact 14-point heading and Name, a wrapped row for multiple kinds, then explicit unchanged semantic-parent text before the longer context/explanation and existing parent controls. A single determined kind is shown in the heading only when it equals the draft's actual selected kind. An incomplete recovered single-kind draft still gets its explicit repair button; rendering never picks a missing kind. No command, draft field, token, identity, validation, event admission, App focus or host geometry changed.

Three new nested contextual_source_layout_* tests use Iced's real graphics Paragraph shaping through a drawing-free renderer. They mount the source card with its retained consumer caption at 215 pixels total height, measure an approximately 130-pixel field viewport, and check full Name/root-parent/explicit-kind bounds, pinned footer, actual kind clicks and Unicode text input. The matrix covers OA/SA Work, four strict lifeline viewpoints, both machine layers, incomplete single-kind recovery, and a long wrapped selected semantic parent/consumer caption. These are prepared tests until terminal evidence below; they do not replace root's rebuilt native screenshot gate. The previous unit-renderer footer test remains unchanged and honestly scoped.

All new logs, statuses, input snapshots and distinct artifacts will be retained under .local/contextual-source-layout-20260911/. The old GUI52DE82 and evidence remain unchanged. No full 676 rerun is planned for this presentation-only correction.

Independent readback caught a long-parent composition edge in the first draft of A: placing an unbounded recovered parent paragraph before the kind row could hide the explicit choices. The corrected source moves the kind row ahead of that paragraph. The regression now includes a recovered ParticipantInteraction draft with a deliberately overflowing Entity parent at the same 340×215 composed host: Name and all three choices remain fully visible; the parent label/first line begins inside the viewport, while its complete unchanged name/alias can scroll. This does not pretend unlimited authored text can fit in a finite panel. The usual initial layer-root summary remains fully visible. Reviewer confirmed the semantic/token prefix, Draft::command, existing parent controls and footer are byte-identical when compared as UTF-8.

The compiler remains unstarted while a separate root-authorized worker finishes the creation.rs staged-owner caption correction. Its ownership and any shared final gate scope will be recorded separately; no source-card permission is inferred for that file.

First compile boundary and corrected gate

focused1.log / focused1-status.json preserve Cargo exit101 before any tests: two test-helper errors were a glob/prelude column! ambiguity and use of the static-string widget Id constructor for a formatted String. Both were corrected only in the test helper (iced::widget::column!, Id::from(String)); production presentation remained unchanged. inputs3.json is the corrected source freeze; the earlier inputs1/2 remain explicitly prior/unexecuted or failed snapshots. The corrected focused2/Clippy/fmt/GUI runner is active, with all files under the new evidence directory. If interrupted before a per-gate terminal JSON, that gate is incomplete and has no pass claim.

Root separately verified the original GUI52 machine Create+Save through its six-file oracle. That is native evidence for the prior binary and does not validate the still-building presentation candidate; root owns its full native report and subsequent history checks.

Reboot checkpoint — explicitly interrupted, not a pass/failure

User announced an imminent reboot and asked to save progress. Root directed this worker to stop further gates. Ctrl+C was sent to the owned PowerShell/Cargo session2067; the session returned exit1 due to interruption. A subsequent Windows process inventory found no cargo.exe, rustc.exe, clippy-driver.exe, clang.exe, ld.lld.exe or lld-link.exe remaining. No forced Stop-Process was necessary and no owned process remains. The corrected focused2 compilation produced only its initial compilation line; no tests ran and there is no terminal Cargo/test result. The earlier focused1 Cargo101 remains an actual, separate test-helper compile failure.

Durable records: .local/contextual-source-layout-20260911/focused2-interrupted.json, process-cleanup.json, run-observation.json, the untouched raw focused2.log, and inputs3.json. Every recorded input hash was rechecked unchanged during shutdown preparation. Clippy/fmt/GUI stages were never launched. No distinct GUI stage exists; do not reuse the earlier GUI52 acceptance as validation of this WIP.

Frozen source changes for root's unvalidated WIP checkpoint: crates/oa-desktop/src/behavior/source_draft.rs SHA256 C8D36BD6BCD0818AAD2FBBC404B29085F4ADCAF8191B95A04208A7C2346C36E0 (reviewed presentation plus three prepared real-paragraph layout tests and the two mechanical compile fixes); separately owned behavior/creation.rs SHA256 0FB19BE3A5688C4BD3CA3643C47A97DA7E7F85ADD8A860CD046A0D9CB3CE9DFC (staged-owner caption). All source, logs and intermediate outputs were preserved. No index, commit, push, native UI or reboot operation was performed by this worker.

After reboot, verify these source/input hashes and coordinate the compiler lease, then use a fresh focused3 log/status/runner name because the existing runners intentionally refuse overwrite. The next focused filter remains contextual_source, expected26 tests (the previous23 plus three prepared layout tests); that count is an expectation until compilation and execution succeed. Then run strict all-target Clippy, formatting and matching distinct GUI build/staging. A broader full-suite rerun remains root's decision, not an automatic continuation.