# Odin Port Backlog ## Milestone 1: Core parity - [x] Port all TS domain enums + structs (baseline) - [x] Port script normalization (validation is minimal) - [x] Port layout pattern selection and page packing - [x] Port bubble placement + sizing - [x] Port deterministic seed generation (TS-style hash/parity logic) ## Milestone 2: Service integration - [x] DeepSeek adapter with retry/backoff (transport-injected) - [x] fal.ai adapter with queue and concurrency caps (transport-injected) - [x] Error taxonomy + retry classification - [x] Real HTTP integrations via curl transport (DeepSeek + fal) - [x] Full DeepSeek envelope/content JSON decoding into typed domain script - [x] Replace fal response string extraction with typed JSON decoding ## Milestone 3: Persistence + export - [x] Project save/load format (`.comic.json`) with schema wrapper - [x] Asset cache folder strategy (`/assets`) - [x] Exporters (PNG/CBZ/PDF) baseline implementation - [x] PNG/CBZ hardening: staged image files + zip packaging (+ ComicInfo.xml for CBZ) - [x] Migration scaffold (`schemaVersion` + migration switch) ## Milestone 4: Desktop UI - [x] Story/script/character/panel/layout/bubble/export screen routing scaffold (`src/ui/screens.odin`) - [x] Workflow navigation guards (`src/ui/navigation.odin`) - [x] Background jobs + cancellation scaffold (`src/ui/jobs.odin`, `src/ui/controller.odin`) - [x] Rendering/runtime layer scaffold (`src/ui/views.odin`, `src/ui/runtime.odin`) ## Milestone 5: Hardening - [x] Lifecycle cleanup scaffold for state/controller (`src/core/dispose.odin`, `src/ui/dispose.odin`) - [x] Hardening tests for dispose/cleanup behavior (`tests/hardening_phase5.odin`) - [x] Initial ownership cleanup pass in tests/controllers (defer dispose on controllers, scripts, fixtures) - [x] Reduce remaining allocator leak warnings across adapters/views/tests via deeper allocation policy + explicit string/slice ownership rules ## Milestone 6: CLI Runtime - [x] Command parser + executor (`src/app/cli.odin`) - [x] CLI-integrated app boot path (`src/app/main.odin`) - [x] CLI tests for parse/save/load workflow (`tests/app_cli_phase6.odin`) ## Milestone 7: Packaging + CI - [x] Packaging script for release artifacts (`scripts/package.sh`) - [x] CI workflow for build/test/package (`.github/workflows/odin-ci.yml`) - [x] Artifact upload in CI (tarball + sha256) ## Milestone 8: Interactive TUI - [x] Added `tui` CLI mode with interactive command loop (`src/app/cli.odin`) - [x] TUI commands for navigation/workflow/jobs/save/load/status - [x] Parser coverage update for `tui` command (`tests/app_cli_phase6.odin`) - [x] TUI polish: ANSI full-screen redraw + single-key aliases (`h/s/d/c/q`, `1..8` screens) ## Milestone 9: TUI Story Editing - [x] Added `new` command to reset project state - [x] Added `set idea `, `set genre `, `set audience ` commands - [x] Verified interactive behavior with scripted TUI smoke run ## Milestone 10: TUI Generation Commands - [x] Added `generate script` command wired to DeepSeek adapter path - [x] Added `generate panels` command wired to fal batch adapter path - [x] Added `generate script ` override parsing - [x] Added `generate panels page ` scoped generation parsing - [x] Added regression tests for missing-key/empty-script generation paths (`tests/app_cli_phase6.odin`) ## Milestone 11: TUI Layout + Export Commands - [x] Added `layout auto` command to generate `page_layouts` from script panels - [x] Added `export ` command wired to export adapter - [x] Added parser/test coverage for export command and layout/export precondition failures (`tests/app_cli_phase6.odin`) ## Milestone 12: Offline TUI Script Mode - [x] Added `generate script local [pages]` for keyless local script generation - [x] Added parser/test coverage for local script command and new command forms (`tests/app_cli_phase6.odin`) - [x] Fixed `set_workflow_step` historical-steps reallocation leak in `src/core/state.odin` ## Milestone 13: Offline TUI Panels + Export Flow - [x] Added `generate panels local [page ]` for keyless local panel image generation - [x] Added parser/test coverage for local panel command and offline local flow (`tests/app_cli_phase6.odin`) - [x] Synced export UI state format after export command execution ## Milestone 14: One-Command Offline Pipeline - [x] Added `quick local ` TUI command (local script + local panels + layout + export) - [x] Added parser/test coverage for quick-local command (`tests/app_cli_phase6.odin`) - [x] Validated end-to-end quick-local PDF export in TUI smoke run ## Milestone 15: Quick-Local Parameterization - [x] Added optional page-count argument: `quick local [pages]` - [x] Added parser/test coverage for quick-local page-count parsing and resulting script page count (`tests/app_cli_phase6.odin`) - [x] Validated quick-local CBZ export with page-count override in TUI smoke run ## Milestone 16: One-Command Save+Export Pipeline - [x] Added `quick local all [pages]` - [x] Refactored quick-local flow into reusable `run_quick_local_pipeline` helper - [x] Added parser/integration tests for quick-local-all save+export behavior (`tests/app_cli_phase6.odin`) ## Milestone 17: TUI Doctor Diagnostics - [x] Added `doctor` command for environment/tool diagnostics (DeepSeek key, fal key, curl, python3) - [x] Added alias `?` -> `doctor` - [x] Added parser/command tests and TUI smoke validation (`tests/app_cli_phase6.odin`) ## Milestone 18: TUI Alias & Flow Ergonomics - [x] Added `saveas ` alias for `save ` and `open ` alias for `load ` - [x] Added tests for `open`/`saveas` alias workflow (`tests/app_cli_phase6.odin`) - [x] Hardened owned cleanup in alias load/save test path to avoid unmarshal-token leak leftovers ## Milestone 19: TUI Readiness Diagnostics - [x] Added `ready` command for workflow readiness checks (script/panels/layout/export) - [x] Added alias `r` -> `ready` - [x] Added parser/command tests and TUI smoke validation (`tests/app_cli_phase6.odin`) ## Milestone 20: TUI Guided Next-Step Hints - [x] Added `next` command to recommend the next actionable workflow command - [x] Added alias `n` -> `next` - [x] Added parser/command tests and TUI smoke validation for hint progression (`tests/app_cli_phase6.odin`) ## Milestone 21: TUI Plan/Checklist View - [x] Added `plan` command showing stage completion checklist + current next hint - [x] Added alias `p` -> `plan` - [x] Added parser/command tests and TUI smoke validation for checklist progression (`tests/app_cli_phase6.odin`) ## Milestone 22: TUI Auto-Advance Command - [x] Added `auto` command to execute the current `next` recommended action - [x] Added alias `x` -> `auto` - [x] Added parser/command tests and TUI smoke validation for auto progression (`tests/app_cli_phase6.odin`) ## Milestone 23: TUI Auto-All Pipeline - [x] Added `auto all ` command to auto-run next steps until export - [x] Added parser/command tests for `auto all` parsing and export completion (`tests/app_cli_phase6.odin`) - [x] Validated end-to-end `auto all` TUI smoke export run ## Milestone 24: Forced-Local Auto-All Mode - [x] Added `auto all local [pages]` command to force fully-local auto pipeline - [x] Added parser/command tests for `auto all local` parsing and export completion (`tests/app_cli_phase6.odin`) - [x] Validated end-to-end `auto all local` TUI smoke export run ## Milestone 25A: Native GUI Bring-up - [x] Added Raylib GUI runtime scaffold (`src/gui/runtime.odin`) - [x] Added CLI entrypoint `gui` and command parsing support (`src/app/cli.odin`) - [x] Implemented native window + screen router hotkeys + Story field editing + local action hotkeys (F5/F6/F7/F8) - [x] Added parse coverage for `gui` command (`tests/app_cli_phase6.odin`) ## Milestone 25B: GUI Interaction Pass - [x] Added clickable GUI action buttons (New, Generate Script Local, Generate Panels Local, Layout, Export PDF) - [x] Added editable export path field in GUI and wired export button to field value - [x] Added on-screen command panel/checklist copy and retained hotkey fallbacks ## Milestone 25C: GUI Navigation + Activity Visibility - [x] Added clickable screen navigation tiles in sidebar (in addition to 1..8 hotkeys) - [x] Added right-side action log panel with recent GUI actions/status messages - [x] Preserved workflow-guard behavior for blocked screen transitions with explicit status feedback ## Milestone 25D: GUI Guided Controls - [x] Added GUI `Next` action (button + F9) based on current guided workflow hint - [x] Added GUI `Auto-All` action (button + F10) to run local flow through export - [x] Added on-screen current `Next:` hint display and integrated action-log updates ## Milestone 25E: GUI Export/Script Controls - [x] Added GUI export format selector (PDF/PNG/CBZ) used by export and guided actions - [x] Added GUI local-script pages input field, used by script generation/Next/Auto-All - [x] Kept hotkey parity and updated on-screen hints for new controls ## Milestone 25F: GUI Project Path & File Actions - [x] Added editable GUI project path field (`./gui_project.comic.json` default) - [x] Added clickable GUI Save/Open project buttons wired to storage adapter - [x] Integrated selected export format into GUI export action and refreshed command panel/status layout ## Milestone 25G: GUI One-Click Session Workflow - [x] Added `Auto-All + Save` GUI button to run local full flow then persist project - [x] Wired button to reuse guided local pipeline + storage adapter save path - [x] Updated command panel copy and action-log integration for one-click workflow ## Milestone 25H: GUI Productivity Hotkeys - [x] Added GUI productivity shortcuts: `Ctrl+S` (save), `Ctrl+O` (open), `Ctrl+E` (export) - [x] Reused existing adapter actions for consistent behavior with button-driven flows - [x] Updated on-screen hotkey hints to expose productivity shortcuts ## Milestone 25I: GUI Session Management UX - [x] Added GUI project path editing focus (`F12`) + Save/Open button flow integration - [x] Added GUI dirty-state indicator (`Dirty: yes/no`) driven by edits/actions/save-open reset - [x] Expanded command panel/action area to include Save/Open/Auto-All+Save session workflow ## Milestone 25J: GUI Destructive-Action Safeguards - [x] Added unsaved-change guard for `New` and `Open` button actions - [x] Require `Shift` modifier to confirm destructive New/Open when dirty - [x] Added inline UI tip/status feedback and action-log entries for guarded actions ## Milestone 25K: GUI Keyboard Safety Parity - [x] Added guarded keyboard reset shortcut `Ctrl+N` with `Ctrl+Shift+N` confirm when dirty - [x] Added guarded keyboard open shortcut `Ctrl+O` with `Ctrl+Shift+O` confirm when dirty - [x] Updated GUI hotkey hints/tooltips to document destructive keyboard confirmations ## Milestone 25L: GUI Autosave Controls - [x] Added GUI autosave toggle button/state with interval-based autosave attempts - [x] Added autosave status visibility in HUD and action log entries for autosave outcomes - [x] Added keyboard toggle `Ctrl+Shift+A` and updated hotkey hints ## Milestone 25M: GUI Visual Polish Pass - [x] Upgraded visual theme to modern card-based layout (header bar, rounded controls, soft borders) - [x] Added selected-state input styling and modernized nav/button hover/active visuals - [x] Reworked status/command/action-log sections into clear dashboard surfaces ## Milestone 26A: GUI Screen-Specific Summaries - [x] Added dedicated screen summary card that changes content by active screen - [x] Surfaced screen-relevant state details (Story/Script/Panels/Layout/Export/Community) - [x] Replaced static command-only card with dynamic per-screen contextual summary ## Milestone 26B: GUI Per-Screen Mini-Lists - [x] Added script-page mini-list in Script summary (first pages + overflow hint) - [x] Added layout-page mini-list in Layout summary (page/pattern/panel count) - [x] Added richer export summary details (last layout pattern + action hint) ## Milestone 26C: GUI Mini-List View Toggles - [x] Added summary controls for Script/Layout mini-lists: show `Top` vs `All` - [x] Added summary controls for Script/Layout ordering: `Asc` vs `Desc` - [x] Wired toggle actions to status + action-log feedback ## Milestone 26D: GUI Summary Clarity + Empty States - [x] Added compact KPI chips in summary header (pages/panels/layout counts) - [x] Added explicit empty-state guidance for Script/Panels/Layout screens - [x] Added export precondition messaging in summary when panels/layout are missing ## Milestone 26E: GUI Summary Controls Ergonomics - [x] Added reusable summary-toggle helpers to unify Script/Layout show/sort behavior - [x] Added keyboard shortcuts for summary controls (`Ctrl+H` show, `Ctrl+J` sort) - [x] Updated summary control labels + sidebar hotkey hints for discoverability ## Milestone 26F: GUI Status Telemetry - [x] Added status-card telemetry for last save time and last export time - [x] Wired telemetry updates across save/export/manual-auto flows and autosave success - [x] Expanded status card layout to surface action recency at-a-glance ## Milestone 26G: GUI Toast Feedback - [x] Added transient toast notifications sourced from latest action-log event - [x] Added basic severity coloring for failure/blocked vs success/info messages - [x] Positioned toast in main workspace for immediate action feedback ## Milestone 26H: GUI Readiness Chips - [x] Added compact readiness chips in status card (Script/Panels/Layout/Export) - [x] Wired readiness states to live project data for at-a-glance pipeline progress - [x] Integrated readiness row into status layout without regressing existing telemetry ## Milestone 26I: GUI Shortcuts Help Overlay - [x] Added in-app keyboard shortcuts overlay (modal-style surface) with grouped guidance - [x] Added help toggle via `/` key and Help button, plus `Esc` close behavior - [x] Prevented text-field edits while help overlay is open to reduce accidental input ## Milestone 26J: GUI Destructive Confirmation Modal - [x] Added explicit dirty-state confirmation modal for New/Open destructive flows - [x] Added confirm/cancel interactions (buttons + Enter/Y confirm, Esc/N cancel) - [x] Gated action handlers while confirm modal is open to avoid accidental overlap ## Milestone 26K: GUI Modal Input Isolation - [x] Added unified interaction lock when help/confirm overlays are visible - [x] Prevented background navigation/field-focus/action hotkeys while overlays are active - [x] Forced help overlay closed when opening destructive confirm modal to avoid stacked modals ## Milestone 26L: GUI Pipeline Progress Meter - [x] Added readiness stage counting helper for Script/Panels/Layout/Export pipeline - [x] Added visual pipeline progress bar to status card (`ready/total` stages) - [x] Integrated progress summary alongside next-step hint and existing status telemetry ## Milestone 26M: GUI Action Readiness Gating - [x] Added visual disabled-state styling for dependent actions (Panels/Layout/Export) - [x] Added explicit precondition messages for blocked action attempts (button + hotkey paths) - [x] Added export precondition guards for `Ctrl+E`/`F8` parity with button behavior ## Milestone 26N: GUI Hover Guidance for Disabled Actions - [x] Added contextual hover hints explaining why Panels/Layout/Export are disabled - [x] Surfaced readiness guidance inline near action controls for faster recovery - [x] Kept guidance aligned with existing readiness guards and status messaging ## Milestone 26O: GUI Recommended Action Highlighting - [x] Added recommended-action resolver from workflow next-hint to primary action labels - [x] Added visual emphasis styling for the currently recommended action button - [x] Added inline `Recommended:` guidance when no blocking hover hint is active ## Milestone 26P: GUI Export Format Path Sync - [x] Added format-to-suffix mapping and export-path normalization helpers - [x] Auto-updated export path extension on format toggle (PDF/PNG/CBZ) - [x] Added inline UI cue that format selection auto-fixes export extension ## Milestone 26Q: GUI Status Severity Styling - [x] Added reusable message severity helpers (error/warning/info) - [x] Applied severity-aware status text coloring in status card - [x] Unified toast background coloring with shared severity classification ## Milestone 26R: GUI Action-Log Utilities - [x] Added action-log utility controls in GUI (Clear + Copy status) - [x] Added keyboard shortcuts `Ctrl+L` (clear log) and `Ctrl+Shift+C` (copy status) - [x] Updated sidebar/help-overlay shortcut documentation for new utilities ## Milestone 26S: GUI Export Path Normalize Utility - [x] Added `Fix Ext` action button beside export path input to normalize extension - [x] Added keyboard shortcut `Ctrl+Shift+F` for extension normalization - [x] Updated sidebar/help-overlay shortcut hints for export-path normalization ## Milestone 26T: GUI Export Path Presets - [x] Added format-aware default export path helper (`./comic_export.`) - [x] Added `Preset` action button beside export path input - [x] Added keyboard shortcut `Ctrl+Shift+P` and updated in-app shortcut docs ## Milestone 26U: GUI Format-Specific Preset Filenames - [x] Updated export presets to format-specific filenames (`comic.pdf`, `comic_png.zip`, `comic.cbz`) - [x] Kept preset hotkey/button flows aligned with existing format selection state - [x] Added inline export-path helper text documenting preset naming conventions ## Milestone 26V: GUI Export Summary Detail Pass - [x] Extended Export screen summary with explicit target export path - [x] Added shared export-block reason helper for concise precondition messaging - [x] Upgraded Export summary guidance to show exact missing prerequisite(s) ## Milestone 26W: GUI Export Path Copy Utility - [x] Added `Copy` action button beside export path controls - [x] Added keyboard shortcut `Ctrl+Shift+X` to copy export path quickly - [x] Updated sidebar/help shortcut docs to include export-path copy action ## Milestone 26X: GUI Export Path from Project Directory - [x] Added helper to derive export output path from current project directory + format filename - [x] Added `Use Dir` action button to set export path relative to project location - [x] Added keyboard shortcut `Ctrl+Shift+D` and updated shortcut docs ## Milestone 26Y: GUI Field Clipboard Ergonomics - [x] Added `Ctrl+V` paste into currently selected input field - [x] Added `Ctrl+Shift+I` copy currently selected field content to clipboard - [x] Updated sidebar/help overlay shortcut references for field clipboard actions ## Milestone 26Z: GUI Selected-Field Clear Actions - [x] Added `Clear Field` action button to clear currently focused input quickly - [x] Added keyboard shortcut `Ctrl+Backspace` for selected-field clearing - [x] Added clear-action status feedback + updated shortcut docs ## Milestone 27A: GUI Autosave Interval Controls - [x] Added editable autosave-interval field in GUI controls (`seconds`) - [x] Added keyboard adjustments for autosave interval (`Ctrl+-` / `Ctrl+=`) with bounds - [x] Integrated interval value into status telemetry and shortcut/help copy ## Milestone 27B: Autosave Interval Presets + Input Guardrails - [x] Added autosave preset buttons (`15/30/60`) beside interval input - [x] Added keyboard presets (`Ctrl+7/8/9`) for fast interval switching - [x] Added numeric-only typing guard for interval field and bounded parse normalization ## Milestone 27C: GUI Quick Helper Reset - [x] Added `Reset Helpers` action button for export/pages/autosave helper fields - [x] Added keyboard shortcut `Ctrl+0` for one-shot helper-field reset - [x] Updated sidebar/help shortcut docs for helper reset workflow ## Milestone 27D: Project-Aware Export Path Sync on Open - [x] Added helper to sync export target to project directory after successful project open - [x] Applied sync behavior across modal-confirm, button, and keyboard open flows - [x] Updated open status feedback to include resolved export target path ## Milestone 27E: Project Path from Export Directory Utility - [x] Added helper to derive project path from current export directory - [x] Added `From Exp` project-path button and `Ctrl+Shift+G` shortcut - [x] Updated shortcut docs in sidebar/help overlay for path sync utilities ## Milestone 27F: Project Path Extension Normalization - [x] Added project-path normalization helper to enforce `.comic.json` suffix - [x] Added `Fix Ext` button for project path and `Ctrl+Shift+J` shortcut - [x] Updated sidebar/help shortcut docs for project-path normalization ## Milestone 27G: Path Normalization on I/O Actions - [x] Added export/project path field normalization helpers for runtime actions - [x] Applied normalization before save/open/export and guided export hotkeys/actions - [x] Applied normalization in autosave + modal-confirm open flow to reduce path-related failures ## Milestone 27H: Path Health Indicators - [x] Added helpers to validate project-path suffix and export-path/format consistency - [x] Surfaced live path-health status (`P/E`) in status telemetry line - [x] Kept indicators aligned with existing normalization + save/export workflows ## Milestone 27I: Path Health Quick-Fix Controls - [x] Added compact status-card quick-fix buttons for invalid path indicators (`P`/`E`) - [x] Added keyboard quick-fix shortcuts (`Ctrl+Shift+K` project, `Ctrl+Shift+M` export) - [x] Updated sidebar/help shortcut docs for path quick-fix workflow ## Milestone 27J: One-Shot Path Health Repair - [x] Added combined path-fix action to normalize both project and export paths in one step - [x] Added compact status control (`PE`) for one-click all-path repair - [x] Added keyboard shortcut `Ctrl+Shift+U` + updated shortcut docs for all-path fix ## Milestone 27K: Path Health Guidance Copy - [x] Added path-health hint helper for invalid project/export path states - [x] Surfaced actionable inline guidance with specific quick-fix shortcuts/buttons - [x] Kept guidance synchronized with `P/E/PE` status controls and path checks ## Milestone 27L: Diagnostics Snapshot Utility - [x] Added diagnostics snapshot builder for clipboard-friendly runtime state summary - [x] Added GUI diagnostics copy actions (`Diag` button, `Ctrl+Shift+Y`) - [x] Updated sidebar/help shortcut docs for diagnostics export workflow ## Milestone 27M: Diagnostics File + Help Overlay Compaction - [x] Added diagnostics file export action (`DiagFile` button, `Ctrl+Shift+R`) using project-directory target - [x] Added diagnostics-path helper and write-status feedback for file generation - [x] Refactored help overlay into compact grouped sections to prevent overflow and keep shortcuts readable ## Milestone 27N: Action Log Snapshot Copy - [x] Added action-log snapshot serializer for clipboard export - [x] Added `LogCp` control and keyboard shortcut `Ctrl+Shift+L` to copy recent log lines - [x] Updated help/sidebar shortcut guidance to document log snapshot workflow ## Milestone 27O: Session Report Export - [x] Added combined session-report builder (diagnostics + action-log snapshot) - [x] Added `Report` action button and `Ctrl+Shift+W` shortcut to write report file - [x] Updated help/sidebar shortcut guidance for session-report export ## Milestone 27P: Enriched Diagnostics Payload - [x] Expanded diagnostics snapshot with next-step hint and content counts (pages/panels/layouts/chars) - [x] Added runtime uptime field to diagnostics for temporal context - [x] Added report metadata section (`generated_uptime`) in session-report output ## Milestone 27Q: Time-Aware Action Log Entries - [x] Added per-entry timestamp tracking in circular action-log state - [x] Rendered action-log rows with relative age markers (`[Xs]`) - [x] Included age-prefixed entries in action-log snapshot exports ## Milestone 27R: Action Log View Controls - [x] Added runtime controls for action-log line count (4/6) and order (newest/oldest) - [x] Added keyboard toggles (`Ctrl+Shift+T` lines, `Ctrl+Shift+B` order) - [x] Added log-view HUD label and updated help/sidebar shortcut guidance ## Milestone 27S: Log View Reset + Diagnostics Context - [x] Added `LogDef` control and `Ctrl+Shift+Z` shortcut to reset log view defaults - [x] Included current log-view settings in diagnostics/session-report payloads - [x] Updated help/sidebar guidance for expanded log tooling shortcuts ## Milestone 28A: GUI Diagnostics/Report Write Helper Extraction - [x] Added shared helpers for diagnostics/report file writing status handling - [x] Replaced duplicated button/hotkey write blocks with helper calls - [x] Preserved behavior while reducing runtime event-loop duplication ## Milestone 28B: GUI Clipboard Helper Extraction - [x] Added shared clipboard helper for text-copy status flows - [x] Replaced duplicated clipboard button/hotkey handlers with helper calls - [x] Preserved behavior while reducing runtime event-loop duplication ## Milestone 28C: GUI Status/Log Push Helper Extraction - [x] Added shared `push_status` helper for status assignment + action-log append - [x] Replaced repeated status/log blocks across diagnostics, log-view, and clipboard hotkeys/actions - [x] Preserved behavior while reducing runtime event-loop duplication ## Milestone 28D: Autosave Interval Update Helper Extraction - [x] Added shared autosave-interval setter helper with bounds enforcement + status message formatting - [x] Replaced duplicated button/hotkey autosave-interval update blocks with helper calls - [x] Preserved behavior while reducing runtime event-loop duplication ## Milestone 28E: Path Action Helper Extraction - [x] Added shared path-action helpers returning status messages (preset/sync/fix/all-fix) - [x] Replaced duplicated button/hotkey path-update blocks with helper + `push_status` usage - [x] Preserved behavior while reducing runtime event-loop duplication ## Milestone 28F: Project Reset/Open Action Helper Extraction - [x] Added shared helpers for reset/open project session flows (state replace, screen sync, dirty/autosave updates) - [x] Replaced duplicated confirm/button/hotkey reset-open blocks with helper calls - [x] Preserved behavior while reducing runtime event-loop duplication ## Milestone 28G: Project Save Action Helper Extraction - [x] Added shared helper for project save flows (path normalization, save call, dirty/autosave/save timestamps) - [x] Replaced duplicated Save button and `Ctrl+S` save blocks with helper calls - [x] Reused save helper in Auto-All+Save success path while preserving status semantics ## Milestone 28H: Workflow Action Helper Extraction - [x] Added shared helpers for script/panels/layout/export/next/auto action execution with consistent dirty/export-timestamp updates - [x] Replaced duplicated button and F5–F10/`Ctrl+E` action blocks with helper + `push_status` calls - [x] Preserved behavior while reducing runtime event-loop duplication ## Milestone 28I: Navigation Status Helper Extraction - [x] Added shared screen-navigation status helpers for button-driven sidebar navigation - [x] Replaced duplicated per-screen button navigation blocks with helper + `push_status` calls - [x] Preserved navigation guard/error behavior while reducing runtime event-loop duplication ## Milestone 28J: Confirmation/Autosave/Helper-Reset Action Extraction - [x] Added shared helpers for destructive-action confirmation requests, autosave toggle messaging, and helper-field resets - [x] Replaced duplicated button/hotkey blocks (`New`/`Open` dirty prompts, autosave toggles, helper reset) with helper + `push_status` calls - [x] Preserved behavior while reducing runtime event-loop duplication ## Milestone 28K: Summary/Paste/Clear Interaction Helper Extraction - [x] Added shared helpers for summary toggles (supported-screen guard), selected-field clear status, and clipboard paste-to-selected-field - [x] Replaced duplicated button/hotkey blocks (`summary show/sort`, `clear field`, `Ctrl+V`, `Ctrl+Backspace`) with helper + `push_status` calls - [x] Preserved behavior while reducing runtime event-loop duplication ## Milestone 28L: Export-Format + Autosave-Tick Helper Extraction - [x] Added shared helper for export-format switching (format update + path sync + dirty/status handling) - [x] Added shared autosave-tick helper (interval gating, path normalization, save attempt, dirty/save timestamp updates) - [x] Replaced duplicated export-format button and autosave-loop blocks with helper + `push_status` usage ## Milestone 28M: Confirm-Resolve + Auto-All-Save Helper Extraction - [x] Added shared helper to resolve pending destructive confirm actions (`Reset/Open/None`) into a single status path - [x] Added shared helper for `Auto-All + Save` flow (auto pipeline + export timestamp + save) - [x] Replaced duplicated confirm-yes switch and auto-save button block with helper + `push_status` usage ## Milestone 28N: Help/Log-Clear Micro-Helper Extraction - [x] Added shared helpers for help-overlay toggle/close and action-log clear messaging - [x] Replaced duplicated help toggle/close and log-clear button/hotkey blocks with helper usage - [x] Preserved behavior while reducing runtime event-loop duplication ## Milestone 28O: Optional-Status Push Helper Extraction - [x] Added shared `push_status_if_nonempty` helper for optional-message action paths - [x] Replaced duplicated non-empty checks in summary toggles, clipboard paste, and autosave-tick status flow - [x] Standardized initial GUI status-log seed via shared status push helper ## Milestone 28P: Log-View Toggle Helper Extraction - [x] Added shared helpers for log-view reset/toggle messaging (reset lines/order) - [x] Replaced duplicated log-view button/hotkey blocks (`LogDef`, `Ctrl+Shift+Z/T/B`) with helper + `push_status` usage - [x] Preserved behavior while reducing runtime event-loop duplication ## Milestone 28Q: Diagnostics/Report Action Helper Consolidation - [x] Added shared helpers for diagnostics/report write/copy actions and action-log snapshot copy - [x] Replaced duplicated button/hotkey diagnostics/report/log-copy blocks with helper + `push_status` usage - [x] Preserved behavior while reducing runtime event-loop duplication ## Milestone 28R: Diagnostics Action Context Struct Introduction - [x] Added `Diagnostics_Action_Context` + builder helper to consolidate wide diagnostics/report argument sets - [x] Refactored diagnostics/report/log-copy button and hotkey handlers to pass context objects into helpers - [x] Preserved behavior while improving readability and reducing call-site parameter noise ## Milestone 28S: Dirty+Status Push Helper Extraction - [x] Added shared `push_dirty_status` helper for common "mark dirty + push status" action paths - [x] Replaced duplicated dirty/status blocks across autosave interval presets/hotkeys and path-fix hotkeys/buttons - [x] Preserved behavior while reducing runtime event-loop duplication ## Milestone 28T: GUI Helper Test Coverage Expansion - [x] Added focused tests for extracted non-render GUI helpers (`parse_autosave_interval`, autosave text setter, log-view toggles, export-format switch helper) - [x] Added focused test for diagnostics action-context builder mapping - [x] Kept test allocator hygiene by explicitly deleting helper-produced strings in tests ## Milestone 28U: GUI Helper Test Coverage Expansion II - [x] Added focused tests for path normalization/fix helpers (`normalize_project_path`, `fix_all_paths`) - [x] Added focused tests for summary-toggle supported-screen guards and dirty+status push helper behavior - [x] Resolved test ownership edge case (constant-string bad free) and kept allocator hygiene clean ## Milestone 28V: GUI Helper Test Coverage Expansion III - [x] Added focused tests for optional-status push behavior (`push_status_if_nonempty`) and confirmation-request state updates - [x] Added focused autosave no-op test coverage for disabled/clean-state guard paths (`autosave_tick_with_message`) - [x] Expanded helper coverage without introducing render/runtime coupling ## Milestone 28W: GUI Helper Test Coverage Expansion IV - [x] Added focused tests for log maintenance helpers (`clear_action_log_with_message`, `reset_log_view_with_message`) - [x] Added focused test for confirm-action resolver `.None` branch behavior - [x] Increased non-render GUI helper confidence while keeping tests isolated from rendering loop ## Milestone 28X: GUI Helper Test Coverage Expansion V - [x] Added focused tests for help-overlay toggle/close helpers and export-path preset/derivation helper flows - [x] Added focused test for project reset-session helper state effects (dirty reset + screen sync) - [x] Maintained allocator hygiene in new helper tests (including overwrite/delete ownership handling) ## Milestone 28Y: GUI Helper Test Coverage Expansion VI - [x] Added focused tests for autosave toggle messaging and helper-field reset defaults - [x] Added focused tests for selected-field clear helper behavior (changed vs already-empty paths) - [x] Expanded non-render helper coverage while keeping full build/test gate green ## Milestone 28Z: GUI Helper Test Coverage Expansion VII - [x] Added focused tests for path-health hints/predicates and screen-label helper mapping - [x] Added focused test for navigation-status helper successful path - [x] Continued non-render helper coverage growth with allocator-safe test cleanup ## Milestone 29A: Action-Log Snapshot Memory Hardening + Tests - [x] Added focused action-log behavior tests (ring-buffer retention and clear/snapshot behavior) - [x] Fixed `build_action_log_snapshot` temporary-string cleanup to eliminate builder leaks under repeated concatenation - [x] Kept full build/test gate green with expanded suite ## Milestone 29B: Diagnostics/Report String Lifecycle Hardening - [x] Made empty action-log snapshots consistently heap-owned strings for predictable cleanup - [x] Added explicit cleanup for intermediate diagnostics/report/log-snapshot strings in write/copy helper flows - [x] Updated helper tests for new snapshot ownership semantics and kept full suite green ## Milestone 29C: Status Message Ownership Hardening - [x] Added `set_status` helper and routed `push_status` through owned string replacement semantics - [x] Standardized GUI runtime status initialization/disposal and converted remaining direct status assignments to owned-status updates - [x] Updated helper tests to use owned status strings under new lifecycle semantics and kept full suite green ## Milestone 29D: Action-Log Timestamp Reset Hardening - [x] Hardened `action_log_dispose` to reset `last_push_at` alongside entries/count state - [x] Added focused tests for status replacement helper and action-log clear timestamp-reset behavior - [x] Kept full build/test gate green with expanded helper suite ## Milestone 29E: Confirm/Open Helper Branch Test Expansion - [x] Added focused test for `open_project_session` missing-file branch (error propagation + state/timestamp/dirty preservation) - [x] Added focused test for `resolve_confirm_action_with_message` reset branch dispatch behavior - [x] Expanded non-render helper branch coverage while keeping full build/test gate green ## Milestone 29F: Open/Confirm Success-Path Test Expansion - [x] Added focused success-path tests for `open_project_session` and confirm resolver open-branch dispatch - [x] Verified loaded-state replacement, dirty reset, export-path sync, and autosave timestamp refresh behavior - [x] Applied owned-controller disposal in new load-path tests to keep allocator hygiene clean ## Milestone 29G: Diagnostics/Report Write-Path Test + Leak Hardening - [x] Added focused tests for diagnostics/report write helpers creating expected output files in temp project dirs - [x] Hardened diagnostics/report path helper call-sites with explicit path-string cleanup after writes - [x] Aligned diagnostics write-status assertion to current runtime wording and kept full suite green ## Milestone 29H: Diagnostics/Open Failure-Path Test Expansion - [x] Added focused failure-path tests for diagnostics/report write helpers when project directory is missing - [x] Extended missing-file open-session test to assert project-path normalization side effect - [x] Kept full build/test gate green with expanded non-render helper branch coverage ## Milestone 29I: Confirm/Open Path-Behavior Test Tightening - [x] Strengthened open-session success-path assertions to verify export-path project-directory sync (not just suffix) - [x] Strengthened confirm-resolver open-branch success assertions with project-directory sync checks - [x] Added focused confirm-resolver open-branch missing-file test for state/dirty/timestamp preservation ## Milestone 29J: Autosave Success-Path Helper Test Expansion - [x] Added focused autosave-tick success-path test validating project write, dirty-clear behavior, and save timestamp update - [x] Verified autosave project-path normalization behavior under successful save flow - [x] Kept full build/test gate green with expanded non-render helper coverage ## Milestone 30A: GUI Aesthetic Foundation Refresh - [x] Added reusable `draw_card` surface helper with subtle shadow + consistent border treatment - [x] Applied refreshed scene styling (soft gradient background, tuned sidebar/header separation, unified card surfaces) - [x] Switched key dashboard/summary/log surfaces to shared card rendering for more consistent visual hierarchy ## Milestone 30B: GUI Aesthetic Hierarchy Pass - [x] Added `draw_button_primary` and applied primary styling to high-priority actions (`Next`, `Auto-All`, `Auto-All + Save`) - [x] Refined base component theming (button/nav/input color tuning, selected input fill treatment) - [x] Tuned sidebar/headline/recommendation hint color hierarchy for clearer visual emphasis ## Milestone 30C: GUI Spacing + Sidebar Information Architecture Pass - [x] Replaced dense sidebar hotkey wall with grouped shortcut cards via `draw_sidebar_shortcuts` - [x] Improved shortcut readability through sectioned labels (`Workflow`, `Tools`) and tighter typography rhythm - [x] Preserved full help-overlay detail while reducing main-view visual noise ## Milestone 30D: Main-Canvas Spacing + Section Framing Pass - [x] Added framed card surfaces for `Project Inputs` and `Actions` zones to improve visual grouping on the main canvas - [x] Tuned field-label typography scale and hierarchy (18px labels, section headings, less noisy tip/editing treatments) - [x] Repositioned inline editing indicator and tightened supporting copy emphasis for cleaner rhythm ## Milestone 30E: Overlay + Log/Status Readability Polish - [x] Refined help and confirm overlays with stronger contrast layering, shared card surfaces, and calmer section typography - [x] Improved action-log readability with subtle alternating row backgrounds and tuned log text colors - [x] Tuned status/log metadata typography sizing and color balance for cleaner dashboard scanning ## Milestone 30F: Action-Zone Micro-Hierarchy Polish - [x] Added reusable `draw_hint_pill` helper for compact contextual guidance chips - [x] Replaced noisy inline editing text with structured hint pills (`field focus`, safety hint, next/auto hint) - [x] Added subtle status-header divider line to improve status card scan rhythm ## Milestone 30G: Confirm/Toast Emphasis Polish - [x] Added `draw_button_danger` style and applied it to destructive confirm CTA in modal overlay - [x] Enhanced toast visual treatment with subtle shadow and border for clearer transient message legibility - [x] Preserved behavior while improving visual emphasis on high-risk actions and transient feedback ## Milestone 30H: Status Card Badge + Micro-Readability Pass - [x] Added reusable `draw_status_badge` helper for compact status chips - [x] Replaced plain dirty/autosave status text with badge-style indicators for faster visual parsing - [x] Fine-tuned status-card spacing/metadata alignment to maintain clean scan rhythm ## Milestone 30I: Utility Control Density + Visual Weight Pass - [x] Added reusable `draw_small_button` helper for compact utility controls - [x] Shifted low-priority utility controls (path tools, autosave presets, summary toggles, log toolbar) to compact button treatment - [x] Updated log-toolbar labels for improved clarity while reducing visual heaviness ## Milestone 30J: Header Context Chip Polish - [x] Replaced plain top-header active-screen text with contextual hint-chip treatment for clearer glanceability - [x] Added compact project-pages context chip in header row to reinforce current workflow context - [x] Tuned header typography weight/size balance while preserving existing field-edit behavior ## Milestone 30K: Sidebar/Nav Framing + Tip Presentation Polish - [x] Added framed card surface around the screen-navigation cluster to improve left-rail structure - [x] Replaced bottom plain-text caution tip with accented hint-pill treatment for visual consistency - [x] Preserved behavior while reducing loose text noise in the primary canvas ## Milestone 30L: Section Title Rhythm + Log Header Consolidation - [x] Added reusable `draw_section_title` helper for consistent section-heading styling - [x] Applied section-title treatment to key canvas regions (`Project Inputs`, `Actions`, `Action Log`) - [x] Simplified action-log renderer by removing duplicate internal title drawing for cleaner hierarchy ## Milestone 30M: Secondary Action Visual Tiering - [x] Added `draw_button_soft_accent` helper for medium-priority actions - [x] Applied soft-accent treatment to Save/Open/Help controls to better separate them from neutral and primary CTAs - [x] Preserved behavior while improving action hierarchy legibility ## Milestone 30N: Status/Log Metadata Pill Polish - [x] Replaced dense status metadata lines with compact save/export/path pill treatments for cleaner glanceability - [x] Added path-health badge stack (`P`/`E`) and accented inline path-fix hint pill in status card - [x] Added compact log-toolbar shortcut hint pill to improve discoverability without visual clutter ## Milestone 30O: Topbar Container + Chip Refinement - [x] Added framed topbar container card to visually anchor header context controls - [x] Added dedicated `draw_topbar_chip` helper for refined topbar context pills - [x] Updated header chip placements/styles for cleaner alignment and improved glance readability ## Milestone 30P: Sidebar Brand/Footer Cohesion Pass - [x] Added framed sidebar brand card and section-title divider rhythm for a cleaner left-rail header - [x] Added compact sidebar footer support card (`/` help reminder + overlay close hint) - [x] Preserved behavior while improving left-rail visual cohesion and onboarding clarity ## Milestone 30Q: Action/Log Toolbar Surface Unification - [x] Added reusable `draw_subtle_strip` helper for lightweight grouped-control backgrounds - [x] Applied subtle strip treatment to action-row and action-log toolbar regions for stronger grouping without heavy chrome - [x] Preserved behavior while improving scan rhythm across high-density control zones ## Milestone 30R: Destructive-Action Visual Cue Pass - [x] Added `draw_button_warning` helper for low-intensity destructive/irreversible action emphasis - [x] Applied warning-style treatment to `New` action in the primary action row to better signal reset risk - [x] Preserved behavior while improving safety affordance visibility ## Milestone 30S: Active Navigation Marker Polish - [x] Enhanced active sidebar nav item styling with a subtle marker dot and adjusted label offset - [x] Preserved existing hover/active behavior while improving active-screen discoverability - [x] Kept full build/test gate green ## Milestone 30T: Micro-Copy Pill Consistency Pass - [x] Replaced plain helper micro-copy near export format/path controls with compact hint-pill treatments - [x] Replaced summary toggle hotkey plain text with compact hint-pill treatment for visual consistency - [x] Preserved behavior while reducing scattered plain-text noise ## Milestone 30U: Log Toolbar Layout Alignment Pass - [x] Re-aligned log toolbar button geometry to fit cleanly within the action-log card bounds - [x] Tightened toolbar label lengths and shortcut-hint placement to reduce overlap risk in dense log controls - [x] Preserved behavior while improving right-panel visual alignment ## Milestone 30V: Status Card Density Rebalance - [x] Consolidated save/export/path metadata into a single compact status line inside the status card bounds - [x] Removed overflow-prone stacked metadata pills from the status region to reduce visual crowding - [x] Preserved behavior while improving status-card containment and scan clarity ## Milestone 30W: Input-Row Rhythm Surface Pass - [x] Applied subtle strip surfaces behind each primary input row in the `Project Inputs` region - [x] Extended strip treatment to path row + action row for stronger vertical rhythm continuity - [x] Preserved behavior while improving form scanability and visual cadence ## Milestone 30X: Utility/Modal Secondary Emphasis Pass - [x] Applied soft-accent visual tier to helper controls (`Reset Helpers`, autosave toggle) for clearer control grouping - [x] Applied soft-accent styling to confirm modal `Cancel` action for stronger destructive/non-destructive contrast - [x] Preserved behavior while improving action hierarchy readability ## Milestone 30Y: Focus/Affordance Refinement Pass - [x] Enhanced selected-input affordance with subtle outer halo + focus border treatment for clearer field focus - [x] Extended active navigation cueing with a slim active rail marker inside selected sidebar items - [x] Preserved behavior while improving interaction-state discoverability ## Milestone 30Z: Primary Action Guidance Chip Pass - [x] Replaced plain recommended/hint text near Next/Auto controls with consistent hint-pill treatment - [x] Added compact key-hint pills (`F9 Next`, `F10 Auto`) under primary action buttons for faster keyboard discoverability - [x] Preserved behavior while improving action-guidance visual consistency ## Milestone 31A: UI Text-Overflow Resilience Pass - [x] Added shared `fit_text_for_width` helper for width-aware truncation with ellipsis - [x] Applied overflow-safe text rendering to hint/topbar/status badges and toast surface text - [x] Applied status-line overflow-safe rendering in status card to prevent long-message spillover ## Milestone 31B: Button Label Overflow Resilience Pass - [x] Applied width-aware label fitting across button styles (default/primary/danger/warning/soft-accent + disabled states) - [x] Applied width-aware label fitting for compact utility buttons in enabled/disabled states - [x] Preserved behavior while preventing long labels from overflowing high-density control regions ## Milestone 31C: Nav/Input Overflow Resilience Pass - [x] Applied width-aware label fitting to sidebar nav items (including active-state offset handling) - [x] Applied non-editing input-field text fitting to prevent long values from spilling outside input surfaces - [x] Preserved editing ergonomics by keeping full-value rendering while an input is actively selected ## Milestone 31D: Sidebar Shortcut Overflow Resilience Pass - [x] Added `draw_sidebar_shortcut_line` helper with width-aware text fitting for left-rail shortcut copy - [x] Replaced direct sidebar shortcut text draws with overflow-safe helper usage - [x] Preserved shortcut content while improving resilience to long copy and future wording changes ## Milestone 31E: Help Overlay Overflow Resilience Pass - [x] Added `draw_help_line` helper with width-aware text fitting for help-overlay body copy - [x] Replaced direct long shortcut lines in help overlay with overflow-safe helper usage - [x] Preserved content/structure while improving resilience to future shortcut-copy growth ## Milestone 31F: Action Log Line Overflow Resilience Pass - [x] Added width-aware fitting for rendered action-log lines (including timestamp prefix) - [x] Prevented long log entries from spilling past right-panel bounds in compact log view - [x] Preserved log semantics while improving dense-session readability ## Milestone 31G: Summary/Status Metadata Overflow Resilience Pass - [x] Added `draw_summary_line` helper and applied overflow-safe rendering to long dynamic summary lines (genre/audience/title/export target/block reason) - [x] Applied overflow-safe rendering to status-card pipeline/next and metadata footer lines - [x] Preserved behavior while improving resilience under long project names/paths/messages ## Milestone 31H: Overlay/Layout-Row Overflow Resilience Pass - [x] Applied overflow-safe fitting to confirm-overlay action sentence to guard long action labels/future copy changes - [x] Applied overflow-safe summary-line rendering for layout pattern rows (`- P#: pattern (n)`) in both asc/desc views - [x] Applied overflow-safe fitting to log-view metadata line (`View: n lines, order first`) in utility bar ## Milestone 31I: Chip Micro-Overflow Resilience Pass - [x] Applied width-aware fitting to compact stat-chip label/value rendering (`draw_stat_chip`) for narrow chip bounds - [x] Applied width-aware fitting to readiness-chip line rendering (`draw_readiness_chip`) using chip width argument - [x] Preserved chip semantics while preventing crowding/spill in compact telemetry surfaces ## Milestone 31J: Screen Summary Uniform Overflow Pass - [x] Expanded overflow-safe summary rendering across remaining dynamic Screen Summary lines (story/script/panels/layout/bubbles/export) - [x] Replaced direct dynamic DrawText formatting with `draw_summary_line` for consistent truncation behavior - [x] Preserved summary semantics while improving resilience under high-count data and long formatted values ## Milestone 31K: Summary Helper Consistency Pass - [x] Applied width-aware fitting to section-title labels for tighter heading-bound resilience - [x] Added `draw_summary_subline` helper for 16px secondary summary text with consistent width fitting - [x] Replaced export "Last layout pattern" subline rendering with helper usage to reduce one-off formatting logic ## Milestone 31L: Fitted-Text Helper Consolidation Pass - [x] Added shared `draw_text_fitted` helper to unify fit+draw behavior and reduce repeated truncation boilerplate - [x] Refactored section-title/summary/help/sidebar shortcut helpers to use the consolidated text-fit renderer - [x] Preserved behavior while reducing one-off fitting/draw patterns and tightening future maintenance seams ## Milestone 31M: Button Text Renderer Consolidation Pass - [x] Refactored all primary button draw variants to use shared `draw_text_fitted` (default/primary/danger/warning/soft-accent) - [x] Refactored enabled/disabled compact button text rendering and disabled-state standard button rendering to use shared helper - [x] Preserved behavior while reducing repeated fit+draw branches in high-touch control rendering paths ## Milestone 31N: Surface/Chip Text Renderer Consolidation Pass - [x] Refactored nav-item labels and non-selected input text rendering to use shared `draw_text_fitted` - [x] Refactored hint/topbar/status chips plus stat/readiness chip text rendering to use shared helper - [x] Preserved behavior while reducing repeated fit+draw fragments across non-button UI surfaces ## Milestone 31O: Status/Log Fitted-Text Consolidation Pass - [x] Refactored action-log row rendering and toast text rendering to use shared `draw_text_fitted` - [x] Refactored confirm-overlay action sentence and status-card text rows (status/pipeline/next/meta) to use shared helper - [x] Refactored log utility metadata line (`View: n lines, order first`) to use shared helper while preserving existing copy/behavior ## Milestone 31P: Text-Fit Helper Test Coverage Pass - [x] Added direct helper tests for `fit_text_for_width` truncation behavior (ellipsis + minimum-width rule) - [x] Added helper passthrough tests for no-truncation and `px_per_char <= 0` paths - [x] Revalidated full suite after test additions (76 passing) ## Milestone 32A: GUI File Split Kickoff (Text Helpers) - [x] Started structural decomposition of `src/gui/runtime.odin` by extracting text-fit helpers into `src/gui/text_helpers.odin` - [x] Moved `fit_text_for_width` and `draw_text_fitted` into the new module without behavior change - [x] Revalidated full build/test gate after file split (76 passing) ## Milestone 32B: GUI File Split (Widget Primitives) - [x] Extracted shared widget primitives from `src/gui/runtime.odin` into `src/gui/widgets.odin` - [x] Moved card/strip/chip/section-summary draw helpers (`draw_card`, `draw_subtle_strip`, `draw_hint_pill`, `draw_topbar_chip`, `draw_status_badge`, `draw_section_title`, `draw_summary_line`, `draw_summary_subline`) - [x] Revalidated full build/test gate after split (76 passing) ## Milestone 32C: GUI File Split (Overlays + Log Views) - [x] Extracted overlay/log rendering helpers from `src/gui/runtime.odin` into `src/gui/overlays.odin` - [x] Moved action-log/toast/status-color + help/sidebar/confirm overlay draw helpers without behavior changes - [x] Revalidated full build/test gate after split (76 passing) ## Milestone 32D: GUI File Split (Summary + Readiness Views) - [x] Extracted summary/readiness rendering helpers from `src/gui/runtime.odin` into `src/gui/summary_views.odin` - [x] Moved status progress/readiness helpers and screen summary rendering (`draw_stat_chip`, `draw_readiness_chip`, `ready_stage_count`, `draw_progress_bar`, `draw_readiness_row`, `export_block_reason`, `draw_screen_summary`) - [x] Revalidated full build/test gate after split (76 passing) ## Milestone 32E: GUI File Split (Controls) - [x] Extracted control rendering helpers from `src/gui/runtime.odin` into `src/gui/controls.odin` - [x] Moved button/nav/input primitives and control helpers (`button_clicked`, button variants, `draw_small_button*`, `button_readiness_hint`, `draw_button_recommended`, `draw_nav_item`, `draw_input_field`) - [x] Revalidated full build/test gate after split (76 passing) ## Milestone 32F: GUI File Split (Path + Export Helper Layer) - [x] Extracted path/export normalization and sync helpers from `src/gui/runtime.odin` into `src/gui/path_helpers.odin` - [x] Moved format/path utility + path-message helpers (`format_suffix`, normalization helpers, preset/sync/fix helpers, path-health checks) - [x] Revalidated full build/test gate after split (76 passing) ## Milestone 32G: GUI File Split (Diagnostics + Report Helpers) - [x] Extracted diagnostics/report helper layer from `src/gui/runtime.odin` into `src/gui/diagnostics.odin` - [x] Moved diagnostics snapshot/report builders, context struct/builder, diagnostics/report file writers, and clipboard snapshot helpers - [x] Revalidated full build/test gate after split (76 passing) ## Milestone 32H: GUI File Split (Session + Status Helpers) - [x] Extracted session/status/helper-state layer from `src/gui/runtime.odin` into `src/gui/session_helpers.odin` - [x] Moved status/log push helpers, navigation/confirmation toggles, selected-field clear/paste helpers, and `Action_Log` lifecycle helpers - [x] Revalidated full build/test gate after split (76 passing) ## Milestone 32I: GUI File Split (Workflow + Action Helpers) - [x] Extracted workflow/action helper layer from `src/gui/runtime.odin` into `src/gui/actions.odin` - [x] Moved generation/layout/export runners, next/auto-all helpers, summary toggle helpers, interval parsers, and autosave/session action helpers - [x] Revalidated full build/test gate after split (76 passing) ## Milestone 32J: GUI File Split (Local Generation + Utility Helpers) - [x] Extracted local generation and utility helper layer from `src/gui/runtime.odin` into `src/gui/local_helpers.odin` - [x] Moved local script/panel builders, panel collection/count helpers, text append/pop helpers, recommended-label helper, and pending-action label helper - [x] Revalidated full build/test gate after split (76 passing) ## Milestone 32K: GUI File Split (Shared Types) - [x] Extracted shared GUI types from `src/gui/runtime.odin` into `src/gui/types.odin` - [x] Moved `Summary_View_Options` and `Pending_Confirm_Action` declarations to the dedicated types module - [x] Revalidated full build/test gate after split (76 passing) ## Milestone 32L: Runtime Import Cleanup Checkpoint - [x] Removed stale `runtime.odin` imports left behind after module extraction (`os`, `filepath`, `strconv`, `adapters`) - [x] Kept runtime import surface aligned to active dependencies only (`fmt`, `strings`, `raylib`, `core`, `shared`, `ui`) - [x] Revalidated full build/test gate after cleanup (76 passing) ## Milestone 32M: Fullscreen Startup Mode - [x] Updated GUI runtime startup to size window to current monitor and toggle fullscreen on launch - [x] Verified build + GUI launch path with fullscreen initialization - [x] Revalidated build/test gate (`./build.sh`, `odin test tests`) ## Milestone 33A: Visual Redesign (Modern Theme Pass) - [x] Refreshed global shell styling with richer gradients, soft ambient highlights, and cleaner sidebar/topbar contrast - [x] Modernized core surfaces (cards/strips/chips) and controls (buttons/nav/input focus) with updated radii, shadows, and contemporary palette tuning - [x] Refined UI microcopy labels in primary form regions for cleaner modern presentation while preserving behavior ## Milestone 33B: Layout Rhythm + Typography Pass - [x] Refined section heading typography/underline treatment for stronger hierarchy and cleaner modern framing - [x] Tuned topbar/input/action/status/log panel vertical rhythm (card heights, heading baselines, content offsets) for more consistent spacing cadence - [x] Preserved behavior while improving visual balance and readability in dense dashboard regions ## Milestone 33C: Visual Course-Correction (Clean Minimal Pass) - [x] Rebalanced redesign styling toward a cleaner minimal look (reduced visual noise, flatter shell treatment, calmer surface/controls palette) - [x] Reverted over-aggressive spacing/offset shifts in topbar/status/log regions to restore stable layout rhythm while keeping modern polish - [x] Revalidated full build/test gate after visual corrections (76 passing) ## Milestone 33D: Clutter Reduction + Readability Pass - [x] Reduced dashboard visual clutter by removing non-essential row-strip treatments and duplicate key-hint pills in the action region - [x] Consolidated top helper guidance into a single compact hint rail and simplified field-focus copy - [x] Improved form label readability with lighter typography weight/size and calmer color tone while preserving behavior ## Milestone 33E: Minimalist Visual Reset Pass - [x] Flattened shell styling to a cleaner neutral canvas (removed decorative gradients/highlights and reduced ornamental contrast) - [x] Simplified card/strip component treatment to low-noise borders with restrained depth for a more professional utility-tool look - [x] Rebalanced primary/nav palette saturation and corner radii for calmer modern controls without changing behavior ## Milestone 33F: Linear-like Dark Crisp Theme Pass - [x] Shifted shell/surfaces/controls to a dark neutral palette with crisp blue accents for primary/active affordances - [x] Updated summary/overlay/log text and chip/readiness/status color treatment for dark-background readability and contrast - [x] Revalidated full build/test gate after dark-theme pass (76 passing) ## Milestone 33G: Fullscreen Reliability Follow-up - [x] Updated GUI window startup flow to maximize on launch and enforce borderless-windowed state for better full-screen coverage behavior - [x] Preserved existing rendering/input behavior while improving startup window mode handling on desktop - [x] Revalidated full build/test gate after window-mode adjustments (76 passing) ## Milestone 33H: Fullscreen Utilization + Dark Theme Refinement - [x] Added runtime full-screen setup verification and adaptive width usage in the main dashboard layout (`main_w_loop`/status-log split) to better use high-resolution displays - [x] Centered/anchored overlays and confirm modal to dynamic screen dimensions (no fixed 1240x820 dimming bounds) - [x] Revalidated build/test gate and launch path (`GUI window size after setup: 1920x1080`, 76 tests passing) ## Milestone 33I: Vertical Responsiveness + Overlay Anchoring Pass - [x] Added adaptive vertical anchoring for lower dashboard regions (status/summary/action-log blocks now track `screen_h` via `lower_y_loop` baseline) - [x] Updated sidebar shortcut stacks and overlay/modal placement to derive positions from runtime screen height instead of fixed 820-based coordinates - [x] Revalidated build/test gate and runtime launch diagnostics (`GUI window size after setup: 1920x1080`, 76 tests passing) ## Milestone 33J: Overlap Cleanup + Debug Noise Removal - [x] Removed temporary runtime window-size debug print after fullscreen verification - [x] Repositioned summary controls/hint rail and bottom tip pill to dynamic lower-region anchors to avoid fixed-position overlap on tall screens - [x] Revalidated full build/test gate after overlap cleanup (76 passing) ## Milestone 33K: Overlap Guard Sweep - [x] Added lower-region baseline clamp (`lower_y_loop >= 568`) to prevent top/lower panel collisions when runtime height shrinks - [x] Revalidated full build/test gate and GUI launch path after overlap guard adjustment - [x] Confirmed no regressions in automated suite (76 passing) ## Milestone 33L: Export Path Robustness Fix - [x] Added export output parent-directory creation in adapter layer (`ensure_export_output_parent_dir`) before file write/export execution - [x] Eliminated `write pdf: Not_Exist` failures for nested/non-existent export directories during GUI/TUI quick-local flows - [x] Revalidated gate and manual nested-path quick-local run (76 tests passing) ## Milestone 33M: 1366x768 Layout Guard Pass - [x] Relaxed lower-dashboard baseline clamp (`lower_y_loop >= 430`) to avoid bottom-edge clipping on shorter displays while preserving separation from top region - [x] Updated sidebar shortcut stack minimum anchor (`base_y >= 120`) to keep left-rail cards inside viewport on low-height screens - [x] Revalidated full build/test gate after low-height guard adjustments (76 passing) ## Milestone 33N: Compact Mode Hint Suppression - [x] Added compact-mode switch (`screen_h < 860`) in GUI runtime layout loop - [x] Suppressed non-essential hint rails/pills in compact mode (field-focus rail, extension helper pills, summary/log shortcut hint pills, bottom tip rail) - [x] Revalidated full build/test gate after compact-mode behavior update (76 passing) ## Milestone 34: Script Results Visibility (GUI) - [x] 34A: Script summary card promoted to page inspector with real per-page panel content previews - [x] 34B: Add script page navigation controls (prev/next buttons + keyboard) - [x] 34C: Add dedicated script detail pane (full-page text/dialogue surface) - [x] 34D: Add script utility actions (copy visible page, copy full script) - [x] 34F: Add GUI script-source toggle (Local/DeepSeek) with key-presence guard and next/auto-all integration - [ ] 34E: Validation pass for script view at 1366x768 / 1920x1080 / ultrawide ## Milestone 35: Panels Results Visibility (GUI) - [x] 35A: Add panel gallery/list with panel metadata/status in dedicated Panels detail surface - [x] 35B: Show panel generation health states (ready/missing/error) with retry actions - [x] 35C: Add panel detail inspector (prompt, seed, dimensions, source URL/path) - [x] 35D: Add panel pagination/virtualized list behavior for large projects ## Milestone 36: Layout Results Visibility (GUI) - [ ] 36A: Add page layout visual preview cards with panel cell geometry - [ ] 36B: Add per-page selector and pattern metadata side rail - [ ] 36C: Add layout validation badges (coverage, missing panel bindings, bounds) ## Milestone 37: Bubble Editing MVP (GUI) - [ ] 37A: Add bubble list per selected panel/page - [ ] 37B: Add create/edit/delete bubble text/type/speaker controls - [ ] 37C: Persist bubble edits to project save/load/export path ## Milestone 38: Responsive System + Theme Tokens - [x] 38A: Extract screen-size profiles (compact/standard/wide) into shared layout constants - [x] 38B: Remove remaining hardcoded geometry hotspots from runtime orchestrator - [x] 38C: Normalize semantic color tokens across widgets/controls/overlays - [x] 38D: Final contrast/readability QA for dark crisp theme ## Milestone 39: Reliability + Test Hardening - [ ] 39A: Add GUI integration smoke tests for full local flow + save/open/export - [ ] 39B: Add error-path tests (missing assets, invalid paths, blocked export) - [ ] 39C: Expand ownership/lifecycle audits for new GUI state surfaces ## Milestone 40: Release Packaging + Production Docs - [ ] 40A: Ship-ready package artifacts + checksums + version stamping - [ ] 40B: GUI user guide (workflow, shortcuts, troubleshooting) - [ ] 40C: Production release checklist and known-issues policy ## Milestone 34A: Script Inspector Upgrade (initial pass) - [x] Upgraded Script screen summary into a real page inspector view (selected page, panel previews, first-dialogue snippets) - [x] Added script page cursor state to GUI summary options with runtime clamping - [x] Revalidated build/test gate after Script inspector upgrade (76 passing) ## Milestone 34B: Script Page Navigation Controls (initial pass) - [x] Added Script summary prev/next page buttons (`< Pg`, `Pg >`) in lower control rail - [x] Added keyboard navigation (`Ctrl+[`, `Ctrl+]`) with wrap-around behavior and status/log feedback - [x] Revalidated full build/test gate after navigation control wiring (76 passing) ## Milestone 34C: Script Detail Pane (initial pass) - [x] Added dedicated Script detail panel in lower-right workspace showing selected page panel descriptions and dialogue snippets - [x] Kept action-log surface on non-Script screens while using Script-specific detail rendering on Script screen - [x] Revalidated full build/test gate after detail-pane integration (76 passing) ## Milestone 34D: Script Copy Utilities (initial pass) - [x] Added Script-only copy actions (`Copy Page`, `Copy All`) in detail panel header - [x] Added text builders for selected-page detail and full-script snapshots - [x] Revalidated full build/test gate after copy-action wiring (76 passing) ## Milestone 35A: Panels Detail Surface (initial pass) - [x] Added Panels-focused detail panel in lower-right workspace with selected-panel metadata and readiness state - [x] Added panel navigation controls (`< Pn`, `Pn >`) and keyboard navigation (`Ctrl+[`, `Ctrl+]`) with wrap-around + status feedback - [x] Added compact panel list rows (selected marker, page/panel index, ready/missing state) for quick inspection - [x] Revalidated full build/test gate after panels visibility integration (76 passing) ## Milestone 34F: GUI Script Source Toggle (Local/DeepSeek) - [x] Added script-source selector controls in GUI (`Local`, `DeepSeek`) plus keyboard toggle (`Ctrl+G`) - [x] Added DeepSeek key guard on toggle/action (`DEEPSEEK_API_KEY` required) with explicit status feedback - [x] Wired source mode into Script action and guided Next/Auto-All/Auto-All+Save flow decisions - [x] Added topbar script-source status badge with live key availability (`Script: (key:yes|missing)`) and inline key-missing helper text - [x] Improved DeepSeek HTTP error surfacing to include provider message text in GUI/CLI failures - [x] Hardened DeepSeek request-body serialization using typed JSON marshal (instead of manual string assembly) to prevent malformed request payloads - [x] Expanded DeepSeek response parser compatibility for multiple JSON shapes (camelCase, snake_case, and wrapped `script` payloads) - [x] Added DeepSeek normalization resilience: if provider content parses but fails minimal schema, auto-fallback to deterministic script instead of hard-fail - [x] Fixed normalization-owned string safety for default title/synopsis values to avoid invalid frees and downstream autosave crashes - [x] Revalidated full build/test gate and GUI launch smoke after script-source toggle integration (76 passing)