From 8fb8f1ad0963480ac81dda8b52d851c37cda5961 Mon Sep 17 00:00:00 2001 From: fireshaper Date: Thu, 15 Oct 2026 21:27:17 -0400 Subject: [PATCH] Step 24.5: client: return banner, status, and setting Co-Authored-By: Claude Opus 5.5 --- DECISIONS.md | 8 + apps/web/src/components/AwaySummary.tsx | 2 + apps/web/src/components/FleetSleep.tsx | 77 ++++++++ apps/web/src/components/IndependentPilots.tsx | 2 + apps/web/src/screens/Dashboard.tsx | 3 + apps/web/src/screens/Settings.tsx | 30 ++- apps/web/test/fleet-sleep.test.tsx | 172 ++++++++++++++++++ docs/screenshots/24-5-away-banner-desktop.png | Bin 0 -> 193467 bytes docs/screenshots/24-5-away-banner-phone.png | Bin 0 -> 90158 bytes .../24-5-bridge-asleep-desktop.png | Bin 0 -> 710747 bytes docs/screenshots/24-5-bridge-asleep-phone.png | Bin 0 -> 264076 bytes docs/screenshots/24-5-settings-desktop.png | Bin 0 -> 683219 bytes docs/screenshots/24-5-settings-phone.png | Bin 0 -> 234047 bytes memory-bank/architecture.md | 1 + memory-bank/progress.md | 2 +- packages/engine/src/game/commands.ts | 9 + packages/engine/test/fleet-sleep.test.ts | 18 ++ packages/schema/src/requests.ts | 2 + packages/schema/src/routes.ts | 9 + packages/schema/test/routes.test.ts | 2 + 20 files changed, 335 insertions(+), 2 deletions(-) create mode 100644 apps/web/src/components/FleetSleep.tsx create mode 100644 apps/web/test/fleet-sleep.test.tsx create mode 100644 docs/screenshots/24-5-away-banner-desktop.png create mode 100644 docs/screenshots/24-5-away-banner-phone.png create mode 100644 docs/screenshots/24-5-bridge-asleep-desktop.png create mode 100644 docs/screenshots/24-5-bridge-asleep-phone.png create mode 100644 docs/screenshots/24-5-settings-desktop.png create mode 100644 docs/screenshots/24-5-settings-phone.png diff --git a/DECISIONS.md b/DECISIONS.md index f900acb..ad9c39f 100644 --- a/DECISIONS.md +++ b/DECISIONS.md @@ -1831,3 +1831,11 @@ Implementation decisions not spelled out in `memory-bank/implementation-plan.md` - **"Back to work" stamps the time itself**, as well as through the catalog flag: the engine stamps after the handler, and the command's reply (the player state) should already read awake. - **Waking needs no other change**: pilots asleep were left waiting at the time of the last catch-up, which is the moment of the waking command, so the next catch-up has them decide from then. + +## Step 24.5 + +- **The banner and the Bridge status show only with an Independent pilot.** Sleep only stops Independent pilots; with none, "Fleet asleep" would ask the player to wake nobody. +- **The Bridge status sits right under the header**, before the ship panels, so a returning player sees it on a phone without scrolling. +- **The banner shows inside the away screen when it opens**, which needs unseen summaries. A fleet that went quiet with nothing new to report still shows the Bridge status. +- **Changing the threshold is itself a manual decision**: it's a game command the player makes, so it also wakes the fleet. +- **"3 days", not "72 h"**: thresholds over 48 hours that are whole days are written in days. diff --git a/apps/web/src/components/AwaySummary.tsx b/apps/web/src/components/AwaySummary.tsx index 699b504..08af687 100644 --- a/apps/web/src/components/AwaySummary.tsx +++ b/apps/web/src/components/AwaySummary.tsx @@ -7,6 +7,7 @@ import { formatCredits, locationName, toLocation } from "../format"; import { formatLocalTime } from "../screens/DispatchSheet"; import { useGameAction, useLoadedPlayer } from "../state/actions"; import { Button, Icon, Sheet } from "../ui"; +import { SleepBanner } from "./FleetSleep"; import { PilotLogbook, pilotLogbook } from "./PilotLogbook"; /** "While you were away": deliveries resolved since the player last looked (Step 9.2). */ @@ -46,6 +47,7 @@ export function AwaySummary() { return ( +