Record verified canvas paint correction and integration evidence

This commit is contained in:
2026-09-12 16:55:24 -07:00
parent d61f1f3877
commit e0685b8e52
191 changed files with 34517 additions and 9 deletions
@@ -0,0 +1,93 @@
# Native canvas follow-up at 83f53c7
This report describes Windows native observations of source
`83f53c7c6e277e250f06d2ae6bfa6a7988bd2e4b`, not acceptance of the complete release.
The [same-source Windows gates](release-canvas-followup-20260912.md) pass 834
desktop tests, strict all-target Clippy and the matching GUI build. Executable
SHA-256: `49eb87b4a239c586a16b9efbfd036b3823adc8b62a8992feeaa934bca4f5743b`.
The native process used disposable compact and bound fixtures in an isolated
profile. It launched at 22:41:22 UTC and closed normally at 22:58:28 UTC on
2026-09-12, with a retained process exit code of zero. Both output logs are empty.
The [portable archive](experiments/canvas-native-83f53c7-20260912/manifest.json)
contains the exact build identity, procedure, screenshots, source checkpoints,
oracle receipts and closure record. Source comparisons use the previously
identified actual core oracle; they compare the complete Project and exact
SourceBundle, including the compact fixture's Unicode/CRLF included file.
## Architecture and state focus
Starting from a single pointer selection of Target work, the native architecture
sequence was Delete, Save, Undo, Save, Redo, Save, Undo, Shift+Delete. No intervening
canvas click or F6 was used. Each saved removal matches the independently derived
baseline Delete of placement `de1e7e00-0000-4000-8000-00000000001f`; each saved
restoration exactly matches the original Project and SourceBundle. Shift+Delete
opens the confirmation for Target work. Cancel and Save leave the exact baseline.
This verifies the originally observed loss of keyboard ownership is corrected
for this sequence.
In the persisted SA state view, first-click selection of SA Ready followed by
Delete exposes the unplaced-element picker. Save matches the independent Delete
of placement `de1e7e00-0000-4000-8000-00000000003f`. Undo removes that picker and
restores the selected state; immediate Shift+Delete opens the confirmation for
SA Ready without another canvas click. After Cancel and Save, both source files
and the complete Project exactly match the baseline. This exercises the actual
Iced child-slot replacement that failed before e2c027e.
Inspector Name editing is protected: Home, Delete changes only the pending text
from SA Ready to A Ready; Shift+Delete edits the text again without opening model
deletion or removing the drawn state. Revert restores the original name and clears
pending edits. No Canvas or Focus canvas button is required in either workflow.
Persisted state uses a different keyboard policy from process/scenario controls:
F6 after Inspector Revert is a no-op, and Tab enters Inspector Name. Source review
confirms state Owner has no F6 handler. This is a cross-workspace inconsistency,
not evidence of a failed implemented state F6 shortcut. In the scenario workspace,
F6 from an Inspector field visibly clears text focus, and Tab advances to the
Select palette control. F6/Tab are toolbar navigation, not occurrence traversal.
These observations do not establish process/scenario Save focus continuity.
An interleaved held-drag/Save native test was not performed; the available atomic
drag API cannot hold the mouse across another action. Mounted regression evidence
is separately scoped in the earlier report.
## Bound nested scenarios
The real bound fixture contains OA and SA C1, C2, R2, R1 scenarios and an OA
reentrant reverse call. At 100%, clicking the exposed inner and outer activation
interiors selects their exact C2 and C1 occurrences. The reverse-call bar selects
C2 on L1. Inner and outer reply endpoints visibly terminate on their respective
activation edges. Inspector readback includes OA C1 requested_pressure 420.0,
OA R1 measured_pressure 418.0 correlated to C1, SA C2 requested_pressure 380.0
with its explicit synchronous interface allocation, and SA R2 measured_pressure
378.0 derived from that exact C2 allocation. These are sampled native readbacks;
the full fixture identities and values are covered by core source comparisons.
Save, native Open of the same bound source, return to its scenario, and Save pass
exact complete Project/SourceBundle comparison. No semantic modification was
made to the bound fixture. The window was resized using its observed borders to
1102x732 outer pixels (1100x700 client). The scene remains navigable, and Fit gives
66% zoom. At 100% the right lifeline header is partly clipped within the narrow
canvas; Fit exposes it with considerably smaller text.
Native inspection found a real rendering defect despite the passing Scene tests:
opaque, 225-unit message-label backgrounds erase the outer activation border in
22-unit bands above C2/R2/R1. The visible shortened text ends before the bar, but
its background and label hit rectangle extend over it. Screenshot
`oa-outer-activation-selected-0.png` is the primary witness. Rendering acceptance
therefore fails at 83f53c7. Correction d61f1f3 moves backplates behind activations
and gives exposed bars priority over label rectangles while preserving precise
message hits. Its tests/build/native acceptance are separate from this trial.
Unselected bars and message labels are visibly faint on white, especially at
66% zoom. Issue 26 records this broader contrast concern; the paint-order repair
does not address it. Native self/crossed/ALT/PAR rendering was not exercised in
this trial. Geometry tests and generated fixtures do not substitute for those
remaining native checks or for peer lifecycle integration.
## Scope and coordination
Live outcomes remain in Gitea issues 15, 21, 25 and 26. The architecture/state
focus regression passes this bounded native trial; nested rendering needs the
identified correction and recheck. Broader free geometry, resizing, Details UX,
lifeline union, graphical/source/API parity and complete release acceptance remain
open. Linux/WSL checks remain deferred by the user.