diff --git a/docs/overnight/LOG.md b/docs/overnight/LOG.md index 09f47ad..cfa4a6e 100644 --- a/docs/overnight/LOG.md +++ b/docs/overnight/LOG.md @@ -7,3 +7,11 @@ Run: `npm run build:preview` then serve `dist` (dev server shows a blank page). ## Baseline - 688 vitest tests pass at fork. +## Round 1: The 03:12 Window (Infrastructure) +- **What:** scroll-driven maintenance window across the Infrastructure chapter. HUD sub-line ("MAINTENANCE WINDOW · 03:12" -> BACKUP -> CONVERT · TRANSFER -> VERIFY -> "CUTOVER OK · 03:51", "ROLLBACK CHECKPOINT" on reverse scroll), storm sky tint, soft capped lightning (<=0.31 Hz, >=2.8 s apart), district power-down/relight, amber backup packets to a far "offsite" block, rain on the lens (LensFinishPass uRain), diagram nodes 01-04 lighting per step. Progress is scroll-driven, so scrolling back is a rollback. +- **Why:** makes the "night shift" idea literal and dramatises the real Nextcloud migration (backups, convert, transfer, verify, cutover) with no invented copy. Closes the gaps "Infrastructure has no world beat" and "no rain / sky event". +- **Build:** src/journey/maintenance-progress.ts, src/scene/world/maintenance-window.ts, useMaintenanceWindow.ts, maintenance.css; edits in environment, districts, palette, cinematic-grade, JourneyHud, AppShell. Reduced motion/static: no scene, diagram and sub-line still step. Low tier: dim/relight only. +- **Verdict: KEEP with fixes** (Fable review on hardware GL, 1440 and 390): storm tint and lightning strengthened, clock holds 03:51 to end of chapter, phone sub-line fits. 709 tests green (+21), budgets clean (initial JS 111.7 KB gz, scene chunk +6.9 KB). +- **Known weakness:** the reading panel covers the scene during p 0.1-0.75, so district power-down, packets and offsite are barely visible; relight uses the normal accent so the payoff reads as "back to normal". Audio rain bed skipped. Do not revisit before round 5. +- Screenshots: docs/overnight/round1/ (before-* vs p*-1440/390). + diff --git a/docs/overnight/round1/before-00-1440.webp b/docs/overnight/round1/before-00-1440.webp new file mode 100644 index 0000000..3b939da Binary files /dev/null and b/docs/overnight/round1/before-00-1440.webp differ diff --git a/docs/overnight/round1/before-05-1440.webp b/docs/overnight/round1/before-05-1440.webp new file mode 100644 index 0000000..2cbf32b Binary files /dev/null and b/docs/overnight/round1/before-05-1440.webp differ diff --git a/docs/overnight/round1/before-25-1440.webp b/docs/overnight/round1/before-25-1440.webp new file mode 100644 index 0000000..1917ed2 Binary files /dev/null and b/docs/overnight/round1/before-25-1440.webp differ diff --git a/docs/overnight/round1/before-50-1440.webp b/docs/overnight/round1/before-50-1440.webp new file mode 100644 index 0000000..b9460aa Binary files /dev/null and b/docs/overnight/round1/before-50-1440.webp differ diff --git a/docs/overnight/round1/before-80-1440.webp b/docs/overnight/round1/before-80-1440.webp new file mode 100644 index 0000000..1c36521 Binary files /dev/null and b/docs/overnight/round1/before-80-1440.webp differ diff --git a/docs/overnight/round1/before-97-1440.webp b/docs/overnight/round1/before-97-1440.webp new file mode 100644 index 0000000..d485c1d Binary files /dev/null and b/docs/overnight/round1/before-97-1440.webp differ diff --git a/docs/overnight/round1/before-next-1440.webp b/docs/overnight/round1/before-next-1440.webp new file mode 100644 index 0000000..8a8b883 Binary files /dev/null and b/docs/overnight/round1/before-next-1440.webp differ diff --git a/docs/overnight/round1/before-rev40-1440.webp b/docs/overnight/round1/before-rev40-1440.webp new file mode 100644 index 0000000..ac6c1db Binary files /dev/null and b/docs/overnight/round1/before-rev40-1440.webp differ diff --git a/docs/overnight/round1/before-rev60-1440.webp b/docs/overnight/round1/before-rev60-1440.webp new file mode 100644 index 0000000..ed05940 Binary files /dev/null and b/docs/overnight/round1/before-rev60-1440.webp differ diff --git a/docs/overnight/round1/lightning-p06-1440.webp b/docs/overnight/round1/lightning-p06-1440.webp new file mode 100644 index 0000000..669eb48 Binary files /dev/null and b/docs/overnight/round1/lightning-p06-1440.webp differ diff --git a/docs/overnight/round1/p00-1440.webp b/docs/overnight/round1/p00-1440.webp new file mode 100644 index 0000000..6aa1708 Binary files /dev/null and b/docs/overnight/round1/p00-1440.webp differ diff --git a/docs/overnight/round1/p00-390.webp b/docs/overnight/round1/p00-390.webp new file mode 100644 index 0000000..24ff6f4 Binary files /dev/null and b/docs/overnight/round1/p00-390.webp differ diff --git a/docs/overnight/round1/p05-1440.webp b/docs/overnight/round1/p05-1440.webp new file mode 100644 index 0000000..91a3734 Binary files /dev/null and b/docs/overnight/round1/p05-1440.webp differ diff --git a/docs/overnight/round1/p05-390.webp b/docs/overnight/round1/p05-390.webp new file mode 100644 index 0000000..b9843cf Binary files /dev/null and b/docs/overnight/round1/p05-390.webp differ diff --git a/docs/overnight/round1/p25-1440.webp b/docs/overnight/round1/p25-1440.webp new file mode 100644 index 0000000..daf1a90 Binary files /dev/null and b/docs/overnight/round1/p25-1440.webp differ diff --git a/docs/overnight/round1/p25-390.webp b/docs/overnight/round1/p25-390.webp new file mode 100644 index 0000000..9ea1e56 Binary files /dev/null and b/docs/overnight/round1/p25-390.webp differ diff --git a/docs/overnight/round1/p50-1440.webp b/docs/overnight/round1/p50-1440.webp new file mode 100644 index 0000000..33af162 Binary files /dev/null and b/docs/overnight/round1/p50-1440.webp differ diff --git a/docs/overnight/round1/p50-390.webp b/docs/overnight/round1/p50-390.webp new file mode 100644 index 0000000..8a7e311 Binary files /dev/null and b/docs/overnight/round1/p50-390.webp differ diff --git a/docs/overnight/round1/p80-1440.webp b/docs/overnight/round1/p80-1440.webp new file mode 100644 index 0000000..c52f1ea Binary files /dev/null and b/docs/overnight/round1/p80-1440.webp differ diff --git a/docs/overnight/round1/p80-390.webp b/docs/overnight/round1/p80-390.webp new file mode 100644 index 0000000..e96543b Binary files /dev/null and b/docs/overnight/round1/p80-390.webp differ diff --git a/docs/overnight/round1/p97-1440.webp b/docs/overnight/round1/p97-1440.webp new file mode 100644 index 0000000..ad5fbaa Binary files /dev/null and b/docs/overnight/round1/p97-1440.webp differ diff --git a/docs/overnight/round1/p97-390.webp b/docs/overnight/round1/p97-390.webp new file mode 100644 index 0000000..5c67921 Binary files /dev/null and b/docs/overnight/round1/p97-390.webp differ diff --git a/docs/overnight/round1/pnext-1440.webp b/docs/overnight/round1/pnext-1440.webp new file mode 100644 index 0000000..a19c24f Binary files /dev/null and b/docs/overnight/round1/pnext-1440.webp differ diff --git a/docs/overnight/round1/pnext-390.webp b/docs/overnight/round1/pnext-390.webp new file mode 100644 index 0000000..b9f41eb Binary files /dev/null and b/docs/overnight/round1/pnext-390.webp differ diff --git a/docs/overnight/round1/prev40-1440.webp b/docs/overnight/round1/prev40-1440.webp new file mode 100644 index 0000000..f38977f Binary files /dev/null and b/docs/overnight/round1/prev40-1440.webp differ diff --git a/docs/overnight/round1/prev40-390.webp b/docs/overnight/round1/prev40-390.webp new file mode 100644 index 0000000..1daa7b5 Binary files /dev/null and b/docs/overnight/round1/prev40-390.webp differ diff --git a/docs/overnight/round1/prev60-1440.webp b/docs/overnight/round1/prev60-1440.webp new file mode 100644 index 0000000..6f122d2 Binary files /dev/null and b/docs/overnight/round1/prev60-1440.webp differ diff --git a/docs/overnight/round1/prev60-390.webp b/docs/overnight/round1/prev60-390.webp new file mode 100644 index 0000000..7dcb4dd Binary files /dev/null and b/docs/overnight/round1/prev60-390.webp differ diff --git a/docs/overnight/round1/storm-p06-1440.webp b/docs/overnight/round1/storm-p06-1440.webp new file mode 100644 index 0000000..ded97d3 Binary files /dev/null and b/docs/overnight/round1/storm-p06-1440.webp differ diff --git a/src/App.vue b/src/App.vue index dbe46d3..8e593ff 100644 --- a/src/App.vue +++ b/src/App.vue @@ -14,6 +14,7 @@ import './styles/wayfinding.css'; import './styles/route.css'; import './styles/gantry.css'; import './styles/cards.css'; +import './styles/maintenance.css'; import './styles/print.css'; defineProps<{ inputs: Readonly }>(); diff --git a/src/components/AppShell.vue b/src/components/AppShell.vue index 35c02d4..b30df84 100644 --- a/src/components/AppShell.vue +++ b/src/components/AppShell.vue @@ -18,6 +18,7 @@ import { useAudioIntent } from '@/composables/useAudioIntent'; import { useCardEntrances } from '@/composables/useCardEntrances'; import { useJourneySections } from '@/composables/useJourneySections'; import { useKeyboardNavigation } from '@/composables/useKeyboardNavigation'; +import { useMaintenanceWindow } from '@/composables/useMaintenanceWindow'; import { useMotionPreferences } from '@/composables/useMotionPreferences'; import { useRouteMemory } from '@/composables/useRouteMemory'; import { assetUrl } from '@/content/asset-url'; @@ -81,6 +82,8 @@ const journeyBinding = useJourneySections( computed(() => motion.policy.value.allowSceneRequest), ); const journey = journeyBinding.snapshot; +/* The 03:12 window (Infrastructure): the plate's sub-line and the diagram steps. */ +const maintenanceSubline = useMaintenanceWindow(journey); useCardEntrances(); const route = useRouteMemory(canonicalSectionIds, () => journey.value.activeSectionId); const resume = computed(() => { @@ -258,6 +261,7 @@ onUnmounted(() => removePageListeners()); :exit="exitFor(journey.activeSectionId)" :next-label="nextLabelFor(journey.activeSectionId)" :next-exit="nextExitFor(journey.activeSectionId)" + :subline="maintenanceSubline" />