Saxonberg Server API
    Preparing search index...

    Type Alias PostureTransferResult

    PostureTransferResult:
        | { host: Stuff & Slotted; ok: true; slot: string }
        | { ok: false; reason: string; summary: string }

    Outcome of transferPosture. On success the controller emits its verb-specific narration; on failure the controller emits the summary as a Scene frame and ctx.note({kind: 'controller-rejected', reason}) so the dispatch-response envelope carries the structured signal. verb is folded into the "no-accepting-slot" message ("you can't sit on the wallpaper") since that's the one failure mode where verb name reads naturally.

    reason is a stable kebab-case identifier that controllers forward into the controller-rejected note kind: 'no-posture-slot' when the target accepts no slot for this posture, 'occupied' when every candidate slot is full, 'transfer-failed' when the underlying SlotApi.transferOccupancy throws.