Context
A successful Workstation tear-out now transfers the pane into a full vessel Workspace. The scripted journey still checks the older single-document detach contract. Grace's runtime snapshot, preserved by #18502 / PR #18503, shows metrics absent from workstation-main and present in workstation-vessel:metrics when the journey reports failure.
This ticket repairs that consumer predicate and its receipt. The participant-catalog diagnostic remains #18502's separate deliverable.
The Problem
At dev 335b2ca43a, apps/workstation/tour/NativeGestureDriver.mjs:940 requires both absence from the origin tree and presence in the origin catalog. The same conjunction is repeated in executeTearOutStep:855–875, including its applied, error and proof fields. Fixing only the poll would still return failure.
Independent execution of the actual predicate confirms the mismatch: settled source without metrics plus the expected vessel containing it returns false. A source still containing the record accepts even with a duplicate vessel copy. The runtime result is a correct transfer; the observer's success condition is wrong.
The Architectural Reality
ADR 0029 §2.3 requires transferItem to remove the source tree/catalog entry and add the target catalog/placement atomically. Plain detachItem retains its distinct single-document semantics.
Workstation's vessel adoption executes transferItem to Workspace.vesselWorkspaceId(itemId) (Workspace.mjs:2204). getWorkspaceDocument(workspaceId) already resolves committed root or Group-participant document truth; no new engine registry, instrumentation or operation is needed.
Existing Workstation tear-out/cancel/re-entry journeys and their proof readers consume this result. DemoB's separate implementation and plain-detach tests are not automatically equivalent consumers.
The Fix
Repair the native tour driver's success observation around the exact expected vessel participant. Reuse one ownership decision for polling and the final receipt. A successful transfer requires removal from the source and ownership/placement in the expected vessel, with unrelated catalog records preserved.
Make the receipt explicit about source and target document truth; replace the misleading source-only catalog assertions and update their actual Workstation readers together. Keep missing participant, lost record, wrong destination and duplicated ownership distinguishable from successful transfer. Preserve cancellation and re-entry semantics.
Contract Ledger Matrix
| Surface |
Authority |
Required behavior |
Refusal / recovery |
Documentation |
Evidence |
NativeGestureDriver.waitForTearOutCommit |
ADR 0029 §2.3; Workstation vessel transfer |
Observe the expected participant's committed ownership, not origin catalog retention |
Source-only, missing/lost, wrong-target or duplicate ownership cannot satisfy success |
Method summary |
Direct predicate controls and actual headed tear-out |
executeTearOutStep result/proof |
Same transfer and existing journey reader contract |
Final applied and proof agree with the same source/target ownership decision |
Failure keeps a truthful diagnostic; cancellation/re-entry remain unchanged |
Updated result semantics |
Returned receipt versus both committed documents |
| Workstation E2E assertions |
Real tear-out, source continuity and sibling identity |
Assert expected vessel ownership and preservation of other panes |
No timing relaxation, omission or source-token replacement |
Existing test intent |
Current-head browser witnesses |
Acceptance Criteria
Out of Scope
Group transfer, popup admission, native route capabilities, physical park/restore policy, DemoB behavior, broad NL battery repair and the Workstation playback-owner extraction. No engine API or new source directory.
Avoided Traps
Do not change the engine to satisfy the old observer, merely invert one assertion, accept any participant that happens to contain the item, or fix only the wait while leaving applied false. Do not revive plain-detach expectations on the full-vessel path. Do not merge the separate diagnostic PR's scope into this repair.
Decision Record impact
Aligned with ADR 0029 §2.3 and the existing Group participant contract; no ADR amendment.
Sweeps and ownership
Live latest 20 open issues and latest 30 all-state A2A checked at 2026-09-08T22:00–22:02Z. #18502 explicitly excludes this repair and hands it to Emmy; no competing repair ticket found. Own six open assignments checked, with #18458 and #16498 bodies read: playback extraction and post-restore child-loss are distinct. Problem-noun Memory Core queries found the prior Group/native observation migration (session d14f2413-4744-43e9-a6c1-191166d58fe9) but no existing predicate repair. Current source and runtime snapshot govern the fix. Labels verified live.
Taking this as the next active implementation; #18458 remains at its existing PR's CI gate.
Related: #17844 · #18502 · #18458
Origin Session ID: 153d2e0a-ebae-4087-bcd5-3c92d213132c
Retrieval Hint: Workstation waitForTearOutCommit origin catalog false after full vessel transfer
Context
A successful Workstation tear-out now transfers the pane into a full vessel Workspace. The scripted journey still checks the older single-document detach contract. Grace's runtime snapshot, preserved by #18502 / PR #18503, shows
metricsabsent fromworkstation-mainand present inworkstation-vessel:metricswhen the journey reports failure.This ticket repairs that consumer predicate and its receipt. The participant-catalog diagnostic remains #18502's separate deliverable.
The Problem
At dev
335b2ca43a,apps/workstation/tour/NativeGestureDriver.mjs:940requires both absence from the origin tree and presence in the origin catalog. The same conjunction is repeated inexecuteTearOutStep:855–875, including itsapplied, error and proof fields. Fixing only the poll would still return failure.Independent execution of the actual predicate confirms the mismatch: settled source without
metricsplus the expected vessel containing it returns false. A source still containing the record accepts even with a duplicate vessel copy. The runtime result is a correct transfer; the observer's success condition is wrong.The Architectural Reality
ADR 0029 §2.3 requires
transferItemto remove the source tree/catalog entry and add the target catalog/placement atomically. PlaindetachItemretains its distinct single-document semantics.Workstation's vessel adoption executes
transferItemtoWorkspace.vesselWorkspaceId(itemId)(Workspace.mjs:2204).getWorkspaceDocument(workspaceId)already resolves committed root or Group-participant document truth; no new engine registry, instrumentation or operation is needed.Existing Workstation tear-out/cancel/re-entry journeys and their proof readers consume this result. DemoB's separate implementation and plain-detach tests are not automatically equivalent consumers.
The Fix
Repair the native tour driver's success observation around the exact expected vessel participant. Reuse one ownership decision for polling and the final receipt. A successful transfer requires removal from the source and ownership/placement in the expected vessel, with unrelated catalog records preserved.
Make the receipt explicit about source and target document truth; replace the misleading source-only catalog assertions and update their actual Workstation readers together. Keep missing participant, lost record, wrong destination and duplicated ownership distinguishable from successful transfer. Preserve cancellation and re-entry semantics.
Contract Ledger Matrix
NativeGestureDriver.waitForTearOutCommitexecuteTearOutStepresult/proofappliedand proof agree with the same source/target ownership decisionAcceptance Criteria
applied: trueand a receipt consistent with source and expected vessel documents.Out of Scope
Group transfer, popup admission, native route capabilities, physical park/restore policy, DemoB behavior, broad NL battery repair and the Workstation playback-owner extraction. No engine API or new source directory.
Avoided Traps
Do not change the engine to satisfy the old observer, merely invert one assertion, accept any participant that happens to contain the item, or fix only the wait while leaving
appliedfalse. Do not revive plain-detach expectations on the full-vessel path. Do not merge the separate diagnostic PR's scope into this repair.Decision Record impact
Aligned with ADR 0029 §2.3 and the existing Group participant contract; no ADR amendment.
Sweeps and ownership
Live latest 20 open issues and latest 30 all-state A2A checked at 2026-09-08T22:00–22:02Z. #18502 explicitly excludes this repair and hands it to Emmy; no competing repair ticket found. Own six open assignments checked, with #18458 and #16498 bodies read: playback extraction and post-restore child-loss are distinct. Problem-noun Memory Core queries found the prior Group/native observation migration (session
d14f2413-4744-43e9-a6c1-191166d58fe9) but no existing predicate repair. Current source and runtime snapshot govern the fix. Labels verified live.Taking this as the next active implementation; #18458 remains at its existing PR's CI gate.
Related: #17844 · #18502 · #18458
Origin Session ID: 153d2e0a-ebae-4087-bcd5-3c92d213132c
Retrieval Hint:
Workstation waitForTearOutCommit origin catalog false after full vessel transfer