4.4 KiB
Staged machine owner display correction — 2026-09-11
Owner: Codex-9e8r6t /root/palette_finish. Root authorized only the display path
in crates/oa-desktop/src/behavior/creation.rs and this report. No compiler,
native input, Git operations or changes to source-draft/command/recovery code
were made. The existing-source chooser remains owned by its existing worker.
Observed problem and cause
On immutable GUI 52DE82 at 1100×700, root created a pending SA machine named
Field team operating modes, opened Create new owner, explicitly chose
SystemActor Field rescue team, then Use. The parent correctly displayed
New · System actor · Field rescue team, but its ordinary owner picker also
displayed Selected: Missing element — choose a replacement and a no-matching
participant prompt. Root's screenshot is
.local/native-qa/contextual-source-20260911-v1/sa-machine-staged-false-missing.png.
picker_view looked up every selected ID through reference_label against the
accepted Project. The staged owner's reserved ID intentionally is absent from
that catalog. The parent already renders d.source.label(d.owner) above the
picker; that helper returns a label only when the staged draft's ID equals the
currently selected ID. The incorrect warning came from the redundant accepted
catalog lookup, not from a missing staged owner.
Frozen correction
Only four display changes in picker_view:
let selected = match picker {
Picker::Owner => d.owner,
Picker::Context => d.context,
};
+ let staged_owner = picker == Picker::Owner && d.source.label(selected).is_some();
let title = match picker {
+ Picker::Owner if staged_owner => "Or choose an existing participant",
Picker::Owner => "Owned by participant",
Picker::Context => "Scenario context · optional",
};
- if let Some(id) = selected {
+ if let Some(id) = selected
+ && !staged_owner
+ {
out = out.push(text(format!("Selected: {}", reference_label(p, id))).size(12));
out = out.push(text(match picker {
+ Picker::Owner if staged_owner => "No existing participants match this search. The new owner above remains selected.",
Picker::Owner => "No matching participant. Refine the search or choose Create new owner.",
The selected staged owner is shown once by the existing New label. Existing
participants remain searchable/selectable as explicit alternatives. No staged
record is injected into Project, choices, pagination or accepted catalog
membership. The source labels, choice messages, validation, command batches,
reserved IDs, commit behavior and recovery state are unchanged.
Frozen creation.rs SHA256:
0fb19be3a5688c4bd3ca3643c47a97da7e7f85add8a860cd046a0d9cb3ce9dfc.
The exact delta and hash were sent to behavior_audit; release_audit is
coordinating the combined source freeze and compiler gate.
Source-backed controls and native follow-up
| State | Result of the new condition |
|---|---|
| Owner ID equals active staged source ID | New owner label remains; accepted-catalog missing row is omitted; empty search explains the new owner remains selected |
| Existing accepted owner selected while a different staged draft is retained | State::label returns None; ordinary selected owner label and search behavior remain |
| Missing accepted owner ID with no matching staged ID | Original reference_label missing-element warning remains |
| No owner selected | Existing no-selection/empty-catalog guidance remains |
| Scenario context picker, including a stale context | Owner-only condition is false; original context label, missing warning and empty-context behavior remain |
These are source-path checks, not executed widget tests. No broad new test was added for this wording/condition correction, as requested. No compile or native pass is claimed here.
Root's acceptance path: on the matching rebuilt GUI, repeat the exact minimum window machine/owner route, confirm the New owner appears once without the false missing warning, and confirm search/selection of an existing owner still works. For an empty or unmatched accepted catalog, the text must distinguish existing choices from the selected staged owner. Retain a separate real missing accepted owner control in source/recovery review. The independently specified machine, owner, first-view and one-step history/source oracle remains unchanged.