Files
ARCADIA-Studio/harness/experiments/canvas-editing-followup-20260912/activation-label-paint-handoff.md
T

4.0 KiB

Activation border / label backplate repair

Source-only contribution by /root/nested_call_design, isolated worktree .local/activation-label-paint-20260912, branch codex/activation-label-paint-956atf-20260912, base 419c78c07142961feff4f9ede46adf7d4bd014eb. Root owns integration, Gitea, compiler and native acceptance.

Committed correction: d50be10378e90498c2d4c293b377dd9f97ee00af. Isolated worktree is clean.

Verified diagnosis

Inspected .local/native-qa/canvas-followup-20260912-01/evidence/oa-outer-activation-selected-0.png with the image tool. Its SHA-256 is 63D85E7C13B688594D8CD429E5631BCF55F2D4528B3837316A9AE542F2E7CBA4. The screenshot shows interrupted selected outer execution borders immediately above C2, R2 and R1. Approximate screen x=441..666 label backplates overlap the x=663 outer border although displayed text ends near x=600. behavior.rs places message labels 26 units above each row, paints a white backplate up to 225 units wide and 22 high, then paints shortened text. Those backplates were painted after activation fills/outlines. The source predicts exactly the repeated gaps; this is painter ordering, not segmented activation geometry or lost reply correlation.

The examined renderer file is unchanged between root's native build 83f53c7 and the worktree base; its pre-repair SHA-256 is 3089D88A8FA66ECAA2151F2F55A85C71DE30E556457FCD52FDBD0CA1184B59D8. Related hit inspection found that 225-by-25 label hit rectangles took priority over activation rectangles in those same bands. Root explicitly authorized correcting that priority along with painting.

Bounded correction

Only crates/oa-desktop/src/behavior.rs and behavior/scenario_activation/tests.rs change. Backplates now paint after lifeline guides and before activation fills/strokes and cards. Message segments, arrowheads and text retain their foreground pass. This preserves guide masking beneath labels, keeps self-call segments/arrowheads above the masks, and leaves lifeline header fill/text above them. Repainting activation fills in the foreground was rejected because it could obscure anchored arrowheads and messages.

Hit order becomes titled boxes, precise message segments, activation rectangles, label rectangles, then broad message tolerance. Label extents themselves are unchanged. The formerly exposed Call shoulder now selects its Call while exact message points and label text outside activations remain message targets. No model/schema/anchors/dimensions, global palette, text content or truncation changes. Unselected pale borders and minimum-scale usability remain separate issue 26/native acceptance concerns.

Evaluators and status

activation_shoulders_under_label_backplates_select_their_call uses production OA and SA Project/Scene fixtures, long labels, and exact C2/R2/R1 shoulder points within the prior backplates. Preconditions exclude broad message-line slop. It checks C1 selection at those points, message-label selection outside activations, and precise endpoint selection for all four occurrences.

long_message_backplates_do_not_erase_selected_activation_border_pixels uses the existing supported headless WGPU renderer, production Canvas widget and Scene::draw. It inspects RGBA screenshot pixels at the selected outer border through three label-height bands, allowing antialiasing tolerance. It would detect the original white erasure rather than merely asserting a separately constructed paint-order list. Installed iced_wgpu source explicitly documents RGBA screenshots. It tests ordinary-scale pixel continuity, not minimum-scale legibility or a whole-window native workflow.

Executed: scoped standalone rustfmt (edition 2024, skip_children=true), source review and git diff whitespace checks. No compiler, Cargo, test execution, native interaction or root tracked edits. Root must run both new tests and required combined gates, then recheck the bound native OA/SA/reentrant scenarios, headers/labels/self loops, arrow endpoints and the same selected-border bands. Existing semantic, atomic creation, undo and source-equivalence tests remain intact.