Fix inline architecture naming and captured Escape cancellation
Rust checks / check (ubuntu-latest) (push) Canceled after 0s
Rust checks / check (windows-latest) (push) Canceled after 0s

This commit is contained in:
2026-09-10 11:10:24 -07:00
parent 1797516f46
commit 7d1df4f369
9 changed files with 722 additions and 21 deletions
@@ -0,0 +1,140 @@
# Compact palette implementation verification — 2026-09-10
Owner: Codex `/root/palette_finish`, assigned by root. Base branch
`codex/release1-continuation`, starting HEAD `1797516`. No commit or push is
performed by this worker. Root owns native QA, guide changes, integration and the
shared release ledgers.
Read repository AGENTS.md, Gitea issue #1/comments, Wiki Home, open PR inventory
(empty), and `harness/release-capella-basic-editing-20260907.md` before editing.
Ownership and results are recorded in issue #1.
## Changes
* Qualify the Iced `column!` macro in the palette to remove E0659.
* Borrow the projected scene when F2 finds its selected node instead of moving
its view out of `Arc`, removing E0507.
* Remove redundant or-pattern parentheses and the unused old `Edit` event.
* Reject non-finite placement coordinates before they can become inline-editor
or recovery-draft geometry. Existing context/epoch guards continue rejecting
cancelled or stale canvas gestures.
* Bound the inline name card to the remaining canvas height and make its content
scrollable, so a wrapped performer title or validation error can remain inside
the canvas. The card stays in the canvas stack and does not add a toolbar row.
Four new regression tests live in
`crates/oa-desktop/src/app/architecture_authoring/tests.rs`:
1. OA and SA contextual creation preserves root ownership while adding the
allocation and placement atomically; exact source bundle Undo/Redo and camera
values are checked.
2. A real Iced canvas F2 event requires canvas keyboard focus, dispatches the
selected node to inline rename, retains its exact engineering name, and
preserves placements/camera and exact source bundle Undo/Redo.
3. Blank creation/rename submission and Escape never accept a placeholder or
change the accepted source bundle.
4. NaN/infinite canvas coordinates cannot poison draft geometry or recovery
validation; the next valid click still opens naming.
## Verification
All Cargo commands use `.local/toolchain/env.ps1`,
`CARGO_BUILD_JOBS=1`, `--locked`, and the worker's exclusive Cargo lease.
The first repaired build passed 15 existing `architecture_` filtered tests,
with 569 filtered out. Log: `.local/palette-focused-initial-20260910.log`.
It exposed the unused `Edit` warning, subsequently removed. An initial new-test
compile caught an incorrect SourceBundle assertion; it was corrected before
the final tests.
The full current desktop suite passed **588 tests, 0 failures, 0 ignored**:
`cargo test --locked -p oa-desktop --bin arcadia-studio -- --test-threads=1`.
Compilation/link took 44.58 s and test execution 113.14 s. This includes the
four new regressions and existing placement/recovery/connection/transition
coverage. Log: `.local/palette-desktop-tests-20260910.log`.
`cargo build --locked -p oa-desktop --bin arcadia-studio` passed in 2m 03s,
including root's updated guide text. Log: `.local/palette-gui-build-20260910.log`.
`cargo fmt --all -- --check` passed; its empty success log is
`.local/palette-fmt-20260910.log`.
Built executable:
`C:\Users\User\Documents\Git\ARCADIA-Studio\.local\target-gnullvm\debug\arcadia-studio.exe`
(109,516,288 bytes), modified `2026-09-10T17:42:00.6365121Z`.
SHA-256: `1B47C096624BB1101BEC8B18E63CD601A259DFF8C1BEC24581C31C6B511F9411`.
Root received this path/hash for an isolated native-QA staging copy.
`cargo clippy --locked -p oa-desktop --all-targets -- -D warnings` passed in
47.56 s. Log: `.local/palette-clippy-20260910.log`.
All assigned gates are complete. The worker released its Cargo lease and source
freeze to root; subsequent workers must obtain the next lease from root. Source
and report changes remain uncommitted for root's integration. No native UI was
operated by this worker.
## Scope and remaining acceptance
Automated application/canvas tests establish state transitions and exact history;
they do not establish native focus, visual compactness or pointer ergonomics.
Root must inspect the newly built executable at wide/minimum sizes, especially
bottom/right-edge naming, long names, wrapped errors, expanded palette labels,
Enter/Escape, F2, existing insertion/Locate and contextual allocation.
Canvas origin must remain stable through arming, naming, validation, commit and
cancel; only the explicit palette width toggle may resize the canvas. Continue
the independent basic-editing oracle, Save/reopen/recovery and OA/SA transition
destination checks. No Windows release acceptance or Linux runtime acceptance
is inferred from this implementation report.
## Follow-up: stale submission rejection
Independent local review and the separate Codex-956atf host's issue #1 comment
#12 identified a remaining stale-submit defect after the first verification:
Submit set `placing=true`, then a stale document/revision guard returned with
only a status string. That hid the retained inline name card. Earlier passing
gates above did not cover this rejected-submit path.
Codex-9e8r6t `/root/palette_finish` resumed the assigned architecture scope and
sole Cargo lease. Guard rejection now restores `placing=false` and copies the
explanation into the card's error, without rebinding its document/revision or
changing its name, point or intent.
A new regression covers Create/Rename × stale document/revision (four cases),
repeated Submit without rebinding, actual inline-view presence, exact serialized
saved draft, accepted Project/source/revision/camera preservation, Escape, and
successful fresh creation with exact Undo after cancellation. The focused
`architecture_` gate passed 20 tests, 569 filtered out, in 2.22 s after 48.63 s
compilation. Log: `.local/palette-stale-submit-tests-20260910.log`.
Root's native `1B47C096…` check then found that the first Escape was consumed by
the focused Iced name field and only unfocused it. The original global keyboard
subscription intentionally ignores captured Escape; that policy remains intact.
A separate subscription is now present only while architecture naming is inline,
and dispatches a narrowly rechecked `CapturedEscape` event. The Cancel handler
also restores `Cancelled · Select / move` status; ordinary architecture Escape
delegates to that handler. The only app.rs edits are this subscription entry and
the pre-existing architecture Escape guard delegation.
Two additional regressions exercise actual Iced TextInput update/capture followed
by the subscription mapper and App update: first-keypress Create/Rename cancel
preserves exact accepted model/source/revision/camera, while absent architecture,
armed placement and the existing-element picker do not react to captured Escape.
Ignored Escape and captured Enter are not mapped by the new subscription.
The final `architecture_` gate passed **22 tests**, 569 filtered out, in 4.12 s
after 2m 19s compilation. Log: `.local/palette-escape-tests-20260910.log`.
The same locked desktop build command passed in 1m 12s; log:
`.local/palette-candidate2-build-20260910.log`. Workspace formatting check passed;
log: `.local/palette-candidate2-fmt-20260910.log`.
Second candidate at the same local build path: 109,518,848 bytes, modified
`2026-09-10T17:59:06.6655664Z`.
SHA-256: `E6D6B1D975A11F242D288039E8F07D20E5474EA9C7CFCDE93F1318046EA548D4`.
Root received this identity for a new staging copy. Strict desktop Clippy
(`--locked -p oa-desktop --all-targets -- -D warnings`) passed in 1m 07s;
log: `.local/palette-candidate2-clippy-20260910.log`. Cargo lease is released to
root again. No worker-owned Cargo process remains.
Root's existing native stage remains the earlier `1B47C096…` binary and is not
overwritten. The full integrated suite is deferred until the other-host behavior
and forms changes are integrated; the earlier 588-test scope is preserved above.