# Independent contextual source layout review — 2026-09-11 Codex-9e8r6t /root/behavior_audit. **Source review closed after one concrete visibility correction; no remaining material finding in the bounded slice.** Prepared tests, compilation and native acceptance remain distinct. This reviewer made no production changes, compiler execution, Git mutation or native input. ## Observed acceptance boundary Read Gitea issue 1 and issue 2, current AGENTS instructions, the Authoring20260911 Wiki and `release-contextual-source-layout-review-20260911.md`. Independently inspected the supplied screenshot `.local/native-qa/contextual-source-20260911-v1/oa-source-open-clipped-name.png`, SHA256 `e59f32d493fe1c46981ed74e85fa622c0eaaafe01ce33aa04da9e5a4bbce9fb7d`. The image confirms the source Name input is focused but mostly clipped below the approximately 130px inner viewport. Introductory heading/context/explanation and the single Activity action precede the input; Back/Use remains visible below the scroller. The unchanged immutable GUI is `52DE82E434B636E18DB02D381842AA6DB84B721CFFD5502063F784F37246ACCE` at the root-reported 1100×700 client size. Root ratified essentials-first presentation confined to `behavior/source_draft.rs`. This adjacent correction does not close issue 2 or take ownership of the external process/scenario canvas design, workspace allocation or FormShown/focus changes. Source/consumer names, typed source selection, semantic ownership, invocation tokens, draft/recovery and final atomic admission remain existing contracts. ## Independent review targets - At zero source-body scroll, the short actual composition must expose the complete Name input, current permitted/selected kind and current layer-root parent summary. Multiple permitted kinds must remain explicit choices rather than an implicit semantic selection. - Long context or recovered selected-parent names must not displace the initial Name or pinned Back/Use footer. Any shortened presentation must leave the raw source/consumer/parent state exact. - The inner source field scroller remains bounded and independent; Back/Use stays outside it. Rendering and presentation controls must not mutate the accepted model/source, alter invocation guards or change canvas scroll/focus state. - The mounted regression must meaningfully distinguish the old intro-first layout at the observed short height. A unit renderer with zero paragraph bounds or a footer-only assertion is insufficient evidence for this failure. The author accepted the last concern before freeze: the test renderer uses `iced::advanced::graphics::text::Paragraph` for real text shaping. This is meaningful nonzero paragraph geometry, while still requiring the native font/layout check below. ## Concrete finding and correction The first freeze, `source_draft.rs` SHA256 `1b5a0ec54e6cc9746f4664b70d7db79ebc769284953d1d679d15d9b0f15a9bb7`, put the complete selected-parent name/kind/alias before the multi-kind row. A recovered ParticipantInteraction draft can have an arbitrarily long existing Entity parent: `validation::parent_permits` permits an Actor/Entity/Role under that Entity. The unbounded wrapping therefore pushes every explicit Entity/Actor/Role choice below the short viewport. The initial long-parent test used single-kind Work and increased total host height to 235px, so it did not falsify this case. This was a usability/coverage finding, not a source-command or recovery corruption. Sent the concrete counterexample to root and the author before compilation. The corrected freeze moves the wrapped explicit choices before the parent summary. Full authored parent detail remains available in the scroller; it is not truncated in state or falsely claimed to fit arbitrary text into 130px. Readback at SHA256 **`89b08ef68f5c28e28f2f9feaebe67e0be5b84efca1bfa6d64b4029c965701de4`** closes the finding. The extended long-parent test serializes/reloads an OA ParticipantInteraction draft with selected Actor and a long existing Entity parent, then mounts the same **340×215** composition. It requires all three kind rectangles and Name to fit inside the initial field viewport; all kinds precede the parent; the parent label/first line begins visibly; the full summary actually exceeds the viewport height; full parent name/alias and raw recovered state remain exact. The initial parent-before-kind freeze would fail these conditions. ## Final implementation and test readback At `source_draft.rs:327`, a compact heading precedes the 14-point Name input. A single allowed kind replaces its redundant button only when it equals the actual draft kind. A missing/invalid single-kind recovery keeps an explicit repair action; rendering does not select a kind. Multi-kind actions remain individually token-bound and styled for the selected kind, inside a wrapped row before the parent summary at lines 343–384. The longer contextual/atomic explanation follows the essentials. Compared the original committed file from Gitea MCP at `df6f59562643b7771ecf0c972f8655f3e3f1c4da` with the reviewed source using explicit UTF-8 and normalized line endings. The MCP bytes independently match their declared Git blob `7c5dced53d38567c6b4d250bde553ef74fc1d940`. All pre-view state/serialization/token/update/combination code, `Draft::command`, existing parent search/pagination/actions and pinned footer are unchanged. An initial comparison used Windows' default local-file encoding; repeating with explicit UTF-8 removed that harness-only text mismatch. There was no MCP or production encoding defect. The `behavior-source-fields` scroller and `behavior-source-actions` footer keep their existing identities, bounded Fill composition and separation. Name remains `NAME_INPUT`. No App, scenario/topology workspace allocation, FormShown event, canvas viewport/scroll state, source planner or semantic guard changed in this source-card correction. The real scenario and topology child hosts were read back: both render a 12-point retained consumer caption, 6px gap and child Fill; the test reproduces that composition at the observed short total height. The machine host has the same shape with its own caption. Three prepared test functions cover: - OA/SA Work, four strict lifeline viewpoints and both machine layers at 340/500 widths and 215px total height; nonzero actual paragraphs, zero scroll offset, measured 125–132px field viewport, fully contained Name/root-parent/explicit-kind rectangles, footer containment/separation, and missing single-kind recovery. - Moderate wrapped selected-parent and long Unicode caption controls, plus the corrected overflowing multi-kind recovery case at the same minimum height, with exact raw name/parent snapshot retention. - Actual mounted mouse press/release events for each OA participant kind and focused Unicode Name input. Emitted events carry the current token; handling the Name event preserves the accepted Project and does not implicitly choose a kind. The kind-click portion checks event production, not subsequent semantic adoption. These assertions address the observed clipping and the independent counterexample. They are prepared source evidence at this handoff, not a test pass or native result. The full scenario/topology workspace is not mounted by these new tests; root's actual host/native check remains necessary. ## Adjacent staged-owner caption readback Palette requested the coordinated readback before the same combined gate. At `creation.rs` SHA256 **`0fb19be3a5688c4bd3ca3643c47a97da7e7f85add8a860cd046a0d9cb3ce9dfc`**, the narrow `picker_view` delta suppresses the misleading accepted-catalog Selected/Missing row only when Owner selection exactly matches `State::label`'s staged draft ID. That case already has the explicit New owner label above and now offers the correctly named existing-participant alternative. A different or genuinely missing accepted owner still takes the existing reference-label path; Context behavior, choice eligibility, search and event dispatch remain unchanged. No material finding in this display-only delta; no new execution claimed. ## Remaining acceptance and scope Author owns the serialized focused compile/tests and matching GUI/lint. Root must use the rebuilt artifact at actual 1100×700 with ordinary panels: open the source child without scrolling, see complete Name/current kind/root parent, type visibly, confirm Back/Use reachability, and repeat a multi-kind/long-parent recovery and wider-host control. Full overflow text may scroll below the visible parent-label beginning. Rendering must leave accepted model/source and canvas offsets unchanged; semantic adoption/history still uses the independent existing oracle. The first GUI52DE82 observation and its original evidence remain unchanged. Source closure here neither transfers native acceptance from that old binary nor closes issue 2's broader canvas-workflow requirement. Only this new independent report was written by the reviewer; prior reports, production and common ledgers remain under their assigned owners.