Skip to content

[openworlds-audit][LOOP-2] Camp Sidebar: 'Begin Resting' CTA disabled — long rest has no engine write-lane #282

Description

@100yenadmin

Loop-2 Critical finding CS-01 from docs/ui-audit/screens/camp-sidebar.md (new standalone audit). Parent epic: #249 (Atlas — Camp Sidebar lives inside Atlas via campMode).

Symptom

The entire Camp screen culminates in a "Begin Resting" CTA that is permanently disabled with title="Display-only — resting is not yet wired to the engine; nothing is saved". Every supporting control (Manage rations, Use rations checkbox, Healing radio, Recipes picker, Watch roles, Special roles, TALK_PROMPTS) feeds into a moment that never lands. The whole sidebar is theater.

File:line

  • viewer/openworlds/camp-sidebar.jsx:293-295 — the disabled CTA
  • viewer/openworlds/camp-sidebar.jsx:42-48 — local roles state never POSTed
  • viewer/openworlds/camp-sidebar.jsx:49-51recipe / healing local state, never sent

Acceptance criteria

  • When surface.can_act (live session attached), the CTA POSTs to /move with a payload like:
    {
      "kind": "rest",
      "type": "long",
      "watch": ["<heroId-watch1>", "<heroId-watch2>"],
      "cook": "<heroId-cooking>",
      "recipe": "hearty",
      "hunting": "<heroId-hunting>",
      "camouflage": "<heroId-camouflage>",
      "healing": "spells",
      "use_rations": true,
      "campaign": "<campaign_id>"
    }
  • Engine resolves the rest (HP / spell slots / abilities / hit dice refreshed; rations consumed; watch perception rolls), narrates the morning, advances the clock.
  • Toast confirms the rest landed.
  • When !can_act, the CTA remains preview-only with the existing title attr.

Why it matters

This is the single most felt missing wire on the whole Atlas screen — every other camp control was designed to flow into this one moment. Closing it converts the Camp UI from "honest preview" to "real game state change", which is the highest-leverage interaction in any session.

Adjacent: #268 (Spellbook browse — Rest & Prepare modal on Character has the same disabled-CTA shape and would land in the same family of changes).

Epic: #249. EPIC F (wire-prototypes). Umbrella: #242.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestepic:wire-prototypesEPIC F — wire (or retire) display-only prototypesseverity:criticalBlocks play or shatters CRPG framing (#242 Phase 5)tier-1Tier 1: Claude Code pluginui-auditFrom the 2026-05-29 UI/UX audit (docs/ui-audit/)

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions