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

21 KiB
Raw Permalink 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.

Postboot focused3: actual test failure, followed by a second reboot

All 238 inputs matched inputs3 before the resumed run. focused3-status.json records an actual terminal Cargo 101 from 13:55:21 to 13:57:36 UTC, before the second host reboot at 13:59:33 UTC. Compilation finished in 2 minutes 13 seconds; the affected matrix ran in 0.35 seconds: 25 passed, 1 failed, 653 filtered out. This result is not an interruption. The only failure was the long-parent test's own requirement that its eight-repetition parent paragraph exceed the approximately 130-pixel viewport. The earlier Name, three-kind, first-parent-line assertions passed; the remaining two layout tests and all 23 contextual command/recovery/history tests passed. Clippy, fmt and GUI did not launch.

Source inspection confirms Iced's vertical Scrollable gives its child infinite vertical layout space, and the real graphics Paragraph measures wrapping. The fixture length did not guarantee a paragraph taller than the viewport under measured font metrics; no failed production visibility assertion established a new layout defect. The original failure did not print its measured rectangles, so its exact paragraph height is unavailable.

The bounded correction changes tests only: increase the authored parent from 8 to 32 repetitions, keep the same 340×215 host and every existing visibility/raw-data assertion, retain the strict paragraph-height inequality with measured diagnostics, and additionally observe the actual source-fields Scrollable content bounds. Require that content to overflow and contain the complete parent paragraph. This strengthens the overflowing fixture without relaxing Name, kind choice, first-line or pinned-footer visibility. Production presentation, commands and tokens remain unchanged.

The corrected source SHA256 is 85D543CC288E48B4C13001E4E386B5B54D9B1E349A5AC31E4E307572F2D8FB3C. New inputs4.json (SHA256 669724858967D83AB7DA5F78BFAFB6065E2BCAB3BAD0E68D0A74FEB86C7195E7) and postboot2-input-check.json preserve the new freeze: only this test file changed among 238 inputs. run-gates4.ps1 is prepared and refuses overwrites. Compiler launch remains held by root pending disk-capacity recovery; the strengthened test has no execution claim yet. All focused1 failure, focused2 interruption and focused3 failure files remain untouched.

Independent readback closed this correction without a material finding: exact comparison with ca53f574 confirmed only five test-helper/fixture hunks and unchanged production. During root's disk recovery and Linux installation, the bounded checkpoint was archived in harness/experiments/contextual-source-layout-postboot-20260911: 11 files, 100,229 bytes, manifest SHA256 D24D3BA27C7A1950C66B34B3198953E1AF54A05109EE74F1FFFAA77598BC097C. Seven raw records are copied with exact-byte provenance; the remaining records explain the one-file input delta and prepared gate/staging scripts. The previous inputs3 manifest is linked from its untouched reboot archive. This is a pre-run checkpoint, not a new passed gate. Root owns the narrow raw-byte Git attribute rule and publication.

Focused4 terminal pass; remaining serialized gates

After root released capacity and the Windows compiler lease, prefocused4-check.json revalidated all 238 inputs unchanged against inputs4. focused4.log records successful compilation in 11 minutes 5 seconds and 26 passed, 0 failed, 653 filtered out in 9.54 seconds. The strengthened long-parent fixture now demonstrably satisfies both strict parent-paragraph overflow and actual scroll-content containment/overflow while retaining every original Name/kind/order/parent-first-line/footer/raw-state assertion. This is execution evidence for all three real-paragraph layout tests and the existing 23 contextual command/draft/recovery/history tests.

The same runner continues strict all-target desktop Clippy, formatting and the matching GUI build, without source edits or another full-suite run. Their results and any distinct immutable stage are pending until recorded below. The test inventory is 679; this affected 26-test pass is not a full 679-test pass. No native acceptance is inferred from layout tests.

Final matching Windows gate and immutable handoff

The serialized chain completed successfully with no further source edits:

Gate Terminal evidence Result
Affected contextual-source matrix focused4.log, focused4-status.json 26/26 passed; 653 filtered; 9.54 seconds execution
Strict desktop all-target Clippy clippy1.log, clippy1-status.json Exit 0; -D warnings; terminal 14:53:19 UTC
Workspace formatting fmt1-status.json (no console output/log created) Exit 0; cargo fmt --all -- --check; terminal 14:54:17 UTC
Matching Windows GUI build gui1.log, gui1-status.json Exit 0; 5 minutes 9 seconds; terminal 14:59:28 UTC

All gate files are under .local/contextual-source-layout-20260911. stage-final.ps1 checked every one of the 238 inputs against inputs4 before copying any artifact, checked the runtime DLL hash, and refused existing destinations. It completed successfully. No earlier stage or failure/interruption record was overwritten.

  • gui-verified/arcadia-studio.exe: SHA256 5657BAB5C841939B66F901EFE6C0FFB2D7CBBE8CC5F111A0CA3DE8073D3846CE, 112,239,104 bytes.
  • tests-final/arcadia-studio-tests.exe: SHA256 75AB0E151D85473631D5A145527F3F6B9768A3CD61CE66A0603A574E09557017, 107,735,040 bytes. It contains 679 tests; only the affected 26 were run.
  • Each stage has libunwind.dll: SHA256 F45604A12E8BCD839FD86F667C1BE1CC7C4F9DA2B3C69FF381AC708F0E1AE7D4, 190,976 bytes, plus its artifact manifest referencing inputs4 and predecessor GUI52.

Final production source remains source_draft.rs 85D543CC…F2D8FB3C and separately owned creation.rs 0FB19BE3…3CE9DFC. Windows compiler ownership was explicitly released to root after terminal gates and staging; the process check found no Cargo, rustc, Clippy, clang or lld process. This worker did not launch the GUI, modify Git/index/common ledgers, or perform Linux execution.

Root's next acceptance uses this distinct GUI5657 artifact at the real 1100×700 normal-panel host: verify initial Name/kind/root-parent visibility without scrolling, long-parent/multi-kind recovery, pinned actions and the staged machine-owner caption. Existing GUI52 semantic/native evidence retains its original scope. The full release, broader canvas work and full-suite/native acceptance are not claimed by this bounded handoff.

Exact passing records and both stage manifests are also preserved in harness/experiments/contextual-source-layout-verified-20260911: 13 files, 14,505 bytes; manifest SHA256 7B3C6609966413560EFEF537C9B1EF486EC22AE03411522D4C427EECC4DC1D2F. It references the existing archived inputs4 rather than duplicating it. Ten raw copies have exact-byte provenance. Fmt produced no output, so no log was created by Tee-Object; its actual terminal status is preserved without fabricating an empty raw log. Prior archives remain untouched. Root owns the narrow raw-byte attributes and coherent commit; this worker is finished with no compiler or other process remaining.