77 KiB
77 KiB
Odin Port Backlog
Milestone 1: Core parity
- Port all TS domain enums + structs (baseline)
- Port script normalization (validation is minimal)
- Port layout pattern selection and page packing
- Port bubble placement + sizing
- Port deterministic seed generation (TS-style hash/parity logic)
Milestone 2: Service integration
- DeepSeek adapter with retry/backoff (transport-injected)
- fal.ai adapter with queue and concurrency caps (transport-injected)
- Error taxonomy + retry classification
- Real HTTP integrations via curl transport (DeepSeek + fal)
- Full DeepSeek envelope/content JSON decoding into typed domain script
- Replace fal response string extraction with typed JSON decoding
Milestone 3: Persistence + export
- Project save/load format (
.comic.json) with schema wrapper - Asset cache folder strategy (
<project_dir>/assets) - Exporters (PNG/CBZ/PDF) baseline implementation
- PNG/CBZ hardening: staged image files + zip packaging (+ ComicInfo.xml for CBZ)
- Migration scaffold (
schemaVersion+ migration switch)
Milestone 4: Desktop UI
- Story/script/character/panel/layout/bubble/export screen routing scaffold (
src/ui/screens.odin) - Workflow navigation guards (
src/ui/navigation.odin) - Background jobs + cancellation scaffold (
src/ui/jobs.odin,src/ui/controller.odin) - Rendering/runtime layer scaffold (
src/ui/views.odin,src/ui/runtime.odin)
Milestone 5: Hardening
- Lifecycle cleanup scaffold for state/controller (
src/core/dispose.odin,src/ui/dispose.odin) - Hardening tests for dispose/cleanup behavior (
tests/hardening_phase5.odin) - Initial ownership cleanup pass in tests/controllers (defer dispose on controllers, scripts, fixtures)
- Reduce remaining allocator leak warnings across adapters/views/tests via deeper allocation policy + explicit string/slice ownership rules
Milestone 6: CLI Runtime
- Command parser + executor (
src/app/cli.odin) - CLI-integrated app boot path (
src/app/main.odin) - CLI tests for parse/save/load workflow (
tests/app_cli_phase6.odin)
Milestone 7: Packaging + CI
- Packaging script for release artifacts (
scripts/package.sh) - CI workflow for build/test/package (
.github/workflows/odin-ci.yml) - Artifact upload in CI (tarball + sha256)
Milestone 8: Interactive TUI
- Added
tuiCLI mode with interactive command loop (src/app/cli.odin) - TUI commands for navigation/workflow/jobs/save/load/status
- Parser coverage update for
tuicommand (tests/app_cli_phase6.odin) - TUI polish: ANSI full-screen redraw + single-key aliases (
h/s/d/c/q,1..8screens)
Milestone 9: TUI Story Editing
- Added
newcommand to reset project state - Added
set idea <text>,set genre <text>,set audience <text>commands - Verified interactive behavior with scripted TUI smoke run
Milestone 10: TUI Generation Commands
- Added
generate scriptcommand wired to DeepSeek adapter path - Added
generate panelscommand wired to fal batch adapter path - Added
generate script <pages>override parsing - Added
generate panels page <n>scoped generation parsing - Added regression tests for missing-key/empty-script generation paths (
tests/app_cli_phase6.odin)
Milestone 11: TUI Layout + Export Commands
- Added
layout autocommand to generatepage_layoutsfrom script panels - Added
export <pdf|png|cbz> <path>command wired to export adapter - Added parser/test coverage for export command and layout/export precondition failures (
tests/app_cli_phase6.odin)
Milestone 12: Offline TUI Script Mode
- Added
generate script local [pages]for keyless local script generation - Added parser/test coverage for local script command and new command forms (
tests/app_cli_phase6.odin) - Fixed
set_workflow_stephistorical-steps reallocation leak insrc/core/state.odin
Milestone 13: Offline TUI Panels + Export Flow
- Added
generate panels local [page <n>]for keyless local panel image generation - Added parser/test coverage for local panel command and offline local flow (
tests/app_cli_phase6.odin) - Synced export UI state format after export command execution
Milestone 14: One-Command Offline Pipeline
- Added
quick local <pdf|png|cbz> <path>TUI command (local script + local panels + layout + export) - Added parser/test coverage for quick-local command (
tests/app_cli_phase6.odin) - Validated end-to-end quick-local PDF export in TUI smoke run
Milestone 15: Quick-Local Parameterization
- Added optional page-count argument:
quick local <pdf|png|cbz> <path> [pages] - Added parser/test coverage for quick-local page-count parsing and resulting script page count (
tests/app_cli_phase6.odin) - Validated quick-local CBZ export with page-count override in TUI smoke run
Milestone 16: One-Command Save+Export Pipeline
- Added
quick local all <project_path> <pdf|png|cbz> <export_path> [pages] - Refactored quick-local flow into reusable
run_quick_local_pipelinehelper - Added parser/integration tests for quick-local-all save+export behavior (
tests/app_cli_phase6.odin)
Milestone 17: TUI Doctor Diagnostics
- Added
doctorcommand for environment/tool diagnostics (DeepSeek key, fal key, curl, python3) - Added alias
?->doctor - Added parser/command tests and TUI smoke validation (
tests/app_cli_phase6.odin)
Milestone 18: TUI Alias & Flow Ergonomics
- Added
saveas <path>alias forsave <path>andopen <path>alias forload <path> - Added tests for
open/saveasalias workflow (tests/app_cli_phase6.odin) - Hardened owned cleanup in alias load/save test path to avoid unmarshal-token leak leftovers
Milestone 19: TUI Readiness Diagnostics
- Added
readycommand for workflow readiness checks (script/panels/layout/export) - Added alias
r->ready - Added parser/command tests and TUI smoke validation (
tests/app_cli_phase6.odin)
Milestone 20: TUI Guided Next-Step Hints
- Added
nextcommand to recommend the next actionable workflow command - Added alias
n->next - Added parser/command tests and TUI smoke validation for hint progression (
tests/app_cli_phase6.odin)
Milestone 21: TUI Plan/Checklist View
- Added
plancommand showing stage completion checklist + current next hint - Added alias
p->plan - Added parser/command tests and TUI smoke validation for checklist progression (
tests/app_cli_phase6.odin)
Milestone 22: TUI Auto-Advance Command
- Added
autocommand to execute the currentnextrecommended action - Added alias
x->auto - Added parser/command tests and TUI smoke validation for auto progression (
tests/app_cli_phase6.odin)
Milestone 23: TUI Auto-All Pipeline
- Added
auto all <pdf|png|cbz> <path>command to auto-run next steps until export - Added parser/command tests for
auto allparsing and export completion (tests/app_cli_phase6.odin) - Validated end-to-end
auto allTUI smoke export run
Milestone 24: Forced-Local Auto-All Mode
- Added
auto all local <pdf|png|cbz> <path> [pages]command to force fully-local auto pipeline - Added parser/command tests for
auto all localparsing and export completion (tests/app_cli_phase6.odin) - Validated end-to-end
auto all localTUI smoke export run
Milestone 25A: Native GUI Bring-up
- Added Raylib GUI runtime scaffold (
src/gui/runtime.odin) - Added CLI entrypoint
guiand command parsing support (src/app/cli.odin) - Implemented native window + screen router hotkeys + Story field editing + local action hotkeys (F5/F6/F7/F8)
- Added parse coverage for
guicommand (tests/app_cli_phase6.odin)
Milestone 25B: GUI Interaction Pass
- Added clickable GUI action buttons (New, Generate Script Local, Generate Panels Local, Layout, Export PDF)
- Added editable export path field in GUI and wired export button to field value
- Added on-screen command panel/checklist copy and retained hotkey fallbacks
Milestone 25C: GUI Navigation + Activity Visibility
- Added clickable screen navigation tiles in sidebar (in addition to 1..8 hotkeys)
- Added right-side action log panel with recent GUI actions/status messages
- Preserved workflow-guard behavior for blocked screen transitions with explicit status feedback
Milestone 25D: GUI Guided Controls
- Added GUI
Nextaction (button + F9) based on current guided workflow hint - Added GUI
Auto-Allaction (button + F10) to run local flow through export - Added on-screen current
Next:hint display and integrated action-log updates
Milestone 25E: GUI Export/Script Controls
- Added GUI export format selector (PDF/PNG/CBZ) used by export and guided actions
- Added GUI local-script pages input field, used by script generation/Next/Auto-All
- Kept hotkey parity and updated on-screen hints for new controls
Milestone 25F: GUI Project Path & File Actions
- Added editable GUI project path field (
./gui_project.comic.jsondefault) - Added clickable GUI Save/Open project buttons wired to storage adapter
- Integrated selected export format into GUI export action and refreshed command panel/status layout
Milestone 25G: GUI One-Click Session Workflow
- Added
Auto-All + SaveGUI button to run local full flow then persist project - Wired button to reuse guided local pipeline + storage adapter save path
- Updated command panel copy and action-log integration for one-click workflow
Milestone 25H: GUI Productivity Hotkeys
- Added GUI productivity shortcuts:
Ctrl+S(save),Ctrl+O(open),Ctrl+E(export) - Reused existing adapter actions for consistent behavior with button-driven flows
- Updated on-screen hotkey hints to expose productivity shortcuts
Milestone 25I: GUI Session Management UX
- Added GUI project path editing focus (
F12) + Save/Open button flow integration - Added GUI dirty-state indicator (
Dirty: yes/no) driven by edits/actions/save-open reset - Expanded command panel/action area to include Save/Open/Auto-All+Save session workflow
Milestone 25J: GUI Destructive-Action Safeguards
- Added unsaved-change guard for
NewandOpenbutton actions - Require
Shiftmodifier to confirm destructive New/Open when dirty - Added inline UI tip/status feedback and action-log entries for guarded actions
Milestone 25K: GUI Keyboard Safety Parity
- Added guarded keyboard reset shortcut
Ctrl+NwithCtrl+Shift+Nconfirm when dirty - Added guarded keyboard open shortcut
Ctrl+OwithCtrl+Shift+Oconfirm when dirty - Updated GUI hotkey hints/tooltips to document destructive keyboard confirmations
Milestone 25L: GUI Autosave Controls
- Added GUI autosave toggle button/state with interval-based autosave attempts
- Added autosave status visibility in HUD and action log entries for autosave outcomes
- Added keyboard toggle
Ctrl+Shift+Aand updated hotkey hints
Milestone 25M: GUI Visual Polish Pass
- Upgraded visual theme to modern card-based layout (header bar, rounded controls, soft borders)
- Added selected-state input styling and modernized nav/button hover/active visuals
- Reworked status/command/action-log sections into clear dashboard surfaces
Milestone 26A: GUI Screen-Specific Summaries
- Added dedicated screen summary card that changes content by active screen
- Surfaced screen-relevant state details (Story/Script/Panels/Layout/Export/Community)
- Replaced static command-only card with dynamic per-screen contextual summary
Milestone 26B: GUI Per-Screen Mini-Lists
- Added script-page mini-list in Script summary (first pages + overflow hint)
- Added layout-page mini-list in Layout summary (page/pattern/panel count)
- Added richer export summary details (last layout pattern + action hint)
Milestone 26C: GUI Mini-List View Toggles
- Added summary controls for Script/Layout mini-lists: show
TopvsAll - Added summary controls for Script/Layout ordering:
AscvsDesc - Wired toggle actions to status + action-log feedback
Milestone 26D: GUI Summary Clarity + Empty States
- Added compact KPI chips in summary header (pages/panels/layout counts)
- Added explicit empty-state guidance for Script/Panels/Layout screens
- Added export precondition messaging in summary when panels/layout are missing
Milestone 26E: GUI Summary Controls Ergonomics
- Added reusable summary-toggle helpers to unify Script/Layout show/sort behavior
- Added keyboard shortcuts for summary controls (
Ctrl+Hshow,Ctrl+Jsort) - Updated summary control labels + sidebar hotkey hints for discoverability
Milestone 26F: GUI Status Telemetry
- Added status-card telemetry for last save time and last export time
- Wired telemetry updates across save/export/manual-auto flows and autosave success
- Expanded status card layout to surface action recency at-a-glance
Milestone 26G: GUI Toast Feedback
- Added transient toast notifications sourced from latest action-log event
- Added basic severity coloring for failure/blocked vs success/info messages
- Positioned toast in main workspace for immediate action feedback
Milestone 26H: GUI Readiness Chips
- Added compact readiness chips in status card (Script/Panels/Layout/Export)
- Wired readiness states to live project data for at-a-glance pipeline progress
- Integrated readiness row into status layout without regressing existing telemetry
Milestone 26I: GUI Shortcuts Help Overlay
- Added in-app keyboard shortcuts overlay (modal-style surface) with grouped guidance
- Added help toggle via
/key and Help button, plusEscclose behavior - Prevented text-field edits while help overlay is open to reduce accidental input
Milestone 26J: GUI Destructive Confirmation Modal
- Added explicit dirty-state confirmation modal for New/Open destructive flows
- Added confirm/cancel interactions (buttons + Enter/Y confirm, Esc/N cancel)
- Gated action handlers while confirm modal is open to avoid accidental overlap
Milestone 26K: GUI Modal Input Isolation
- Added unified interaction lock when help/confirm overlays are visible
- Prevented background navigation/field-focus/action hotkeys while overlays are active
- Forced help overlay closed when opening destructive confirm modal to avoid stacked modals
Milestone 26L: GUI Pipeline Progress Meter
- Added readiness stage counting helper for Script/Panels/Layout/Export pipeline
- Added visual pipeline progress bar to status card (
ready/totalstages) - Integrated progress summary alongside next-step hint and existing status telemetry
Milestone 26M: GUI Action Readiness Gating
- Added visual disabled-state styling for dependent actions (Panels/Layout/Export)
- Added explicit precondition messages for blocked action attempts (button + hotkey paths)
- Added export precondition guards for
Ctrl+E/F8parity with button behavior
Milestone 26N: GUI Hover Guidance for Disabled Actions
- Added contextual hover hints explaining why Panels/Layout/Export are disabled
- Surfaced readiness guidance inline near action controls for faster recovery
- Kept guidance aligned with existing readiness guards and status messaging
Milestone 26O: GUI Recommended Action Highlighting
- Added recommended-action resolver from workflow next-hint to primary action labels
- Added visual emphasis styling for the currently recommended action button
- Added inline
Recommended:guidance when no blocking hover hint is active
Milestone 26P: GUI Export Format Path Sync
- Added format-to-suffix mapping and export-path normalization helpers
- Auto-updated export path extension on format toggle (PDF/PNG/CBZ)
- Added inline UI cue that format selection auto-fixes export extension
Milestone 26Q: GUI Status Severity Styling
- Added reusable message severity helpers (error/warning/info)
- Applied severity-aware status text coloring in status card
- Unified toast background coloring with shared severity classification
Milestone 26R: GUI Action-Log Utilities
- Added action-log utility controls in GUI (Clear + Copy status)
- Added keyboard shortcuts
Ctrl+L(clear log) andCtrl+Shift+C(copy status) - Updated sidebar/help-overlay shortcut documentation for new utilities
Milestone 26S: GUI Export Path Normalize Utility
- Added
Fix Extaction button beside export path input to normalize extension - Added keyboard shortcut
Ctrl+Shift+Ffor extension normalization - Updated sidebar/help-overlay shortcut hints for export-path normalization
Milestone 26T: GUI Export Path Presets
- Added format-aware default export path helper (
./comic_export.<ext>) - Added
Presetaction button beside export path input - Added keyboard shortcut
Ctrl+Shift+Pand updated in-app shortcut docs
Milestone 26U: GUI Format-Specific Preset Filenames
- Updated export presets to format-specific filenames (
comic.pdf,comic_png.zip,comic.cbz) - Kept preset hotkey/button flows aligned with existing format selection state
- Added inline export-path helper text documenting preset naming conventions
Milestone 26V: GUI Export Summary Detail Pass
- Extended Export screen summary with explicit target export path
- Added shared export-block reason helper for concise precondition messaging
- Upgraded Export summary guidance to show exact missing prerequisite(s)
Milestone 26W: GUI Export Path Copy Utility
- Added
Copyaction button beside export path controls - Added keyboard shortcut
Ctrl+Shift+Xto copy export path quickly - Updated sidebar/help shortcut docs to include export-path copy action
Milestone 26X: GUI Export Path from Project Directory
- Added helper to derive export output path from current project directory + format filename
- Added
Use Diraction button to set export path relative to project location - Added keyboard shortcut
Ctrl+Shift+Dand updated shortcut docs
Milestone 26Y: GUI Field Clipboard Ergonomics
- Added
Ctrl+Vpaste into currently selected input field - Added
Ctrl+Shift+Icopy currently selected field content to clipboard - Updated sidebar/help overlay shortcut references for field clipboard actions
Milestone 26Z: GUI Selected-Field Clear Actions
- Added
Clear Fieldaction button to clear currently focused input quickly - Added keyboard shortcut
Ctrl+Backspacefor selected-field clearing - Added clear-action status feedback + updated shortcut docs
Milestone 27A: GUI Autosave Interval Controls
- Added editable autosave-interval field in GUI controls (
seconds) - Added keyboard adjustments for autosave interval (
Ctrl+-/Ctrl+=) with bounds - Integrated interval value into status telemetry and shortcut/help copy
Milestone 27B: Autosave Interval Presets + Input Guardrails
- Added autosave preset buttons (
15/30/60) beside interval input - Added keyboard presets (
Ctrl+7/8/9) for fast interval switching - Added numeric-only typing guard for interval field and bounded parse normalization
Milestone 27C: GUI Quick Helper Reset
- Added
Reset Helpersaction button for export/pages/autosave helper fields - Added keyboard shortcut
Ctrl+0for one-shot helper-field reset - Updated sidebar/help shortcut docs for helper reset workflow
Milestone 27D: Project-Aware Export Path Sync on Open
- Added helper to sync export target to project directory after successful project open
- Applied sync behavior across modal-confirm, button, and keyboard open flows
- Updated open status feedback to include resolved export target path
Milestone 27E: Project Path from Export Directory Utility
- Added helper to derive project path from current export directory
- Added
From Expproject-path button andCtrl+Shift+Gshortcut - Updated shortcut docs in sidebar/help overlay for path sync utilities
Milestone 27F: Project Path Extension Normalization
- Added project-path normalization helper to enforce
.comic.jsonsuffix - Added
Fix Extbutton for project path andCtrl+Shift+Jshortcut - Updated sidebar/help shortcut docs for project-path normalization
Milestone 27G: Path Normalization on I/O Actions
- Added export/project path field normalization helpers for runtime actions
- Applied normalization before save/open/export and guided export hotkeys/actions
- Applied normalization in autosave + modal-confirm open flow to reduce path-related failures
Milestone 27H: Path Health Indicators
- Added helpers to validate project-path suffix and export-path/format consistency
- Surfaced live path-health status (
P/E) in status telemetry line - Kept indicators aligned with existing normalization + save/export workflows
Milestone 27I: Path Health Quick-Fix Controls
- Added compact status-card quick-fix buttons for invalid path indicators (
P/E) - Added keyboard quick-fix shortcuts (
Ctrl+Shift+Kproject,Ctrl+Shift+Mexport) - Updated sidebar/help shortcut docs for path quick-fix workflow
Milestone 27J: One-Shot Path Health Repair
- Added combined path-fix action to normalize both project and export paths in one step
- Added compact status control (
PE) for one-click all-path repair - Added keyboard shortcut
Ctrl+Shift+U+ updated shortcut docs for all-path fix
Milestone 27K: Path Health Guidance Copy
- Added path-health hint helper for invalid project/export path states
- Surfaced actionable inline guidance with specific quick-fix shortcuts/buttons
- Kept guidance synchronized with
P/E/PEstatus controls and path checks
Milestone 27L: Diagnostics Snapshot Utility
- Added diagnostics snapshot builder for clipboard-friendly runtime state summary
- Added GUI diagnostics copy actions (
Diagbutton,Ctrl+Shift+Y) - Updated sidebar/help shortcut docs for diagnostics export workflow
Milestone 27M: Diagnostics File + Help Overlay Compaction
- Added diagnostics file export action (
DiagFilebutton,Ctrl+Shift+R) using project-directory target - Added diagnostics-path helper and write-status feedback for file generation
- Refactored help overlay into compact grouped sections to prevent overflow and keep shortcuts readable
Milestone 27N: Action Log Snapshot Copy
- Added action-log snapshot serializer for clipboard export
- Added
LogCpcontrol and keyboard shortcutCtrl+Shift+Lto copy recent log lines - Updated help/sidebar shortcut guidance to document log snapshot workflow
Milestone 27O: Session Report Export
- Added combined session-report builder (diagnostics + action-log snapshot)
- Added
Reportaction button andCtrl+Shift+Wshortcut to write report file - Updated help/sidebar shortcut guidance for session-report export
Milestone 27P: Enriched Diagnostics Payload
- Expanded diagnostics snapshot with next-step hint and content counts (pages/panels/layouts/chars)
- Added runtime uptime field to diagnostics for temporal context
- Added report metadata section (
generated_uptime) in session-report output
Milestone 27Q: Time-Aware Action Log Entries
- Added per-entry timestamp tracking in circular action-log state
- Rendered action-log rows with relative age markers (
[Xs]) - Included age-prefixed entries in action-log snapshot exports
Milestone 27R: Action Log View Controls
- Added runtime controls for action-log line count (4/6) and order (newest/oldest)
- Added keyboard toggles (
Ctrl+Shift+Tlines,Ctrl+Shift+Border) - Added log-view HUD label and updated help/sidebar shortcut guidance
Milestone 27S: Log View Reset + Diagnostics Context
- Added
LogDefcontrol andCtrl+Shift+Zshortcut to reset log view defaults - Included current log-view settings in diagnostics/session-report payloads
- Updated help/sidebar guidance for expanded log tooling shortcuts
Milestone 28A: GUI Diagnostics/Report Write Helper Extraction
- Added shared helpers for diagnostics/report file writing status handling
- Replaced duplicated button/hotkey write blocks with helper calls
- Preserved behavior while reducing runtime event-loop duplication
Milestone 28B: GUI Clipboard Helper Extraction
- Added shared clipboard helper for text-copy status flows
- Replaced duplicated clipboard button/hotkey handlers with helper calls
- Preserved behavior while reducing runtime event-loop duplication
Milestone 28C: GUI Status/Log Push Helper Extraction
- Added shared
push_statushelper for status assignment + action-log append - Replaced repeated status/log blocks across diagnostics, log-view, and clipboard hotkeys/actions
- Preserved behavior while reducing runtime event-loop duplication
Milestone 28D: Autosave Interval Update Helper Extraction
- Added shared autosave-interval setter helper with bounds enforcement + status message formatting
- Replaced duplicated button/hotkey autosave-interval update blocks with helper calls
- Preserved behavior while reducing runtime event-loop duplication
Milestone 28E: Path Action Helper Extraction
- Added shared path-action helpers returning status messages (preset/sync/fix/all-fix)
- Replaced duplicated button/hotkey path-update blocks with helper +
push_statususage - Preserved behavior while reducing runtime event-loop duplication
Milestone 28F: Project Reset/Open Action Helper Extraction
- Added shared helpers for reset/open project session flows (state replace, screen sync, dirty/autosave updates)
- Replaced duplicated confirm/button/hotkey reset-open blocks with helper calls
- Preserved behavior while reducing runtime event-loop duplication
Milestone 28G: Project Save Action Helper Extraction
- Added shared helper for project save flows (path normalization, save call, dirty/autosave/save timestamps)
- Replaced duplicated Save button and
Ctrl+Ssave blocks with helper calls - Reused save helper in Auto-All+Save success path while preserving status semantics
Milestone 28H: Workflow Action Helper Extraction
- Added shared helpers for script/panels/layout/export/next/auto action execution with consistent dirty/export-timestamp updates
- Replaced duplicated button and F5–F10/
Ctrl+Eaction blocks with helper +push_statuscalls - Preserved behavior while reducing runtime event-loop duplication
Milestone 28I: Navigation Status Helper Extraction
- Added shared screen-navigation status helpers for button-driven sidebar navigation
- Replaced duplicated per-screen button navigation blocks with helper +
push_statuscalls - Preserved navigation guard/error behavior while reducing runtime event-loop duplication
Milestone 28J: Confirmation/Autosave/Helper-Reset Action Extraction
- Added shared helpers for destructive-action confirmation requests, autosave toggle messaging, and helper-field resets
- Replaced duplicated button/hotkey blocks (
New/Opendirty prompts, autosave toggles, helper reset) with helper +push_statuscalls - Preserved behavior while reducing runtime event-loop duplication
Milestone 28K: Summary/Paste/Clear Interaction Helper Extraction
- Added shared helpers for summary toggles (supported-screen guard), selected-field clear status, and clipboard paste-to-selected-field
- Replaced duplicated button/hotkey blocks (
summary show/sort,clear field,Ctrl+V,Ctrl+Backspace) with helper +push_statuscalls - Preserved behavior while reducing runtime event-loop duplication
Milestone 28L: Export-Format + Autosave-Tick Helper Extraction
- Added shared helper for export-format switching (format update + path sync + dirty/status handling)
- Added shared autosave-tick helper (interval gating, path normalization, save attempt, dirty/save timestamp updates)
- Replaced duplicated export-format button and autosave-loop blocks with helper +
push_statususage
Milestone 28M: Confirm-Resolve + Auto-All-Save Helper Extraction
- Added shared helper to resolve pending destructive confirm actions (
Reset/Open/None) into a single status path - Added shared helper for
Auto-All + Saveflow (auto pipeline + export timestamp + save) - Replaced duplicated confirm-yes switch and auto-save button block with helper +
push_statususage
Milestone 28N: Help/Log-Clear Micro-Helper Extraction
- Added shared helpers for help-overlay toggle/close and action-log clear messaging
- Replaced duplicated help toggle/close and log-clear button/hotkey blocks with helper usage
- Preserved behavior while reducing runtime event-loop duplication
Milestone 28O: Optional-Status Push Helper Extraction
- Added shared
push_status_if_nonemptyhelper for optional-message action paths - Replaced duplicated non-empty checks in summary toggles, clipboard paste, and autosave-tick status flow
- Standardized initial GUI status-log seed via shared status push helper
Milestone 28P: Log-View Toggle Helper Extraction
- Added shared helpers for log-view reset/toggle messaging (reset lines/order)
- Replaced duplicated log-view button/hotkey blocks (
LogDef,Ctrl+Shift+Z/T/B) with helper +push_statususage - Preserved behavior while reducing runtime event-loop duplication
Milestone 28Q: Diagnostics/Report Action Helper Consolidation
- Added shared helpers for diagnostics/report write/copy actions and action-log snapshot copy
- Replaced duplicated button/hotkey diagnostics/report/log-copy blocks with helper +
push_statususage - Preserved behavior while reducing runtime event-loop duplication
Milestone 28R: Diagnostics Action Context Struct Introduction
- Added
Diagnostics_Action_Context+ builder helper to consolidate wide diagnostics/report argument sets - Refactored diagnostics/report/log-copy button and hotkey handlers to pass context objects into helpers
- Preserved behavior while improving readability and reducing call-site parameter noise
Milestone 28S: Dirty+Status Push Helper Extraction
- Added shared
push_dirty_statushelper for common "mark dirty + push status" action paths - Replaced duplicated dirty/status blocks across autosave interval presets/hotkeys and path-fix hotkeys/buttons
- Preserved behavior while reducing runtime event-loop duplication
Milestone 28T: GUI Helper Test Coverage Expansion
- Added focused tests for extracted non-render GUI helpers (
parse_autosave_interval, autosave text setter, log-view toggles, export-format switch helper) - Added focused test for diagnostics action-context builder mapping
- Kept test allocator hygiene by explicitly deleting helper-produced strings in tests
Milestone 28U: GUI Helper Test Coverage Expansion II
- Added focused tests for path normalization/fix helpers (
normalize_project_path,fix_all_paths) - Added focused tests for summary-toggle supported-screen guards and dirty+status push helper behavior
- Resolved test ownership edge case (constant-string bad free) and kept allocator hygiene clean
Milestone 28V: GUI Helper Test Coverage Expansion III
- Added focused tests for optional-status push behavior (
push_status_if_nonempty) and confirmation-request state updates - Added focused autosave no-op test coverage for disabled/clean-state guard paths (
autosave_tick_with_message) - Expanded helper coverage without introducing render/runtime coupling
Milestone 28W: GUI Helper Test Coverage Expansion IV
- Added focused tests for log maintenance helpers (
clear_action_log_with_message,reset_log_view_with_message) - Added focused test for confirm-action resolver
.Nonebranch behavior - Increased non-render GUI helper confidence while keeping tests isolated from rendering loop
Milestone 28X: GUI Helper Test Coverage Expansion V
- Added focused tests for help-overlay toggle/close helpers and export-path preset/derivation helper flows
- Added focused test for project reset-session helper state effects (dirty reset + screen sync)
- Maintained allocator hygiene in new helper tests (including overwrite/delete ownership handling)
Milestone 28Y: GUI Helper Test Coverage Expansion VI
- Added focused tests for autosave toggle messaging and helper-field reset defaults
- Added focused tests for selected-field clear helper behavior (changed vs already-empty paths)
- Expanded non-render helper coverage while keeping full build/test gate green
Milestone 28Z: GUI Helper Test Coverage Expansion VII
- Added focused tests for path-health hints/predicates and screen-label helper mapping
- Added focused test for navigation-status helper successful path
- Continued non-render helper coverage growth with allocator-safe test cleanup
Milestone 29A: Action-Log Snapshot Memory Hardening + Tests
- Added focused action-log behavior tests (ring-buffer retention and clear/snapshot behavior)
- Fixed
build_action_log_snapshottemporary-string cleanup to eliminate builder leaks under repeated concatenation - Kept full build/test gate green with expanded suite
Milestone 29B: Diagnostics/Report String Lifecycle Hardening
- Made empty action-log snapshots consistently heap-owned strings for predictable cleanup
- Added explicit cleanup for intermediate diagnostics/report/log-snapshot strings in write/copy helper flows
- Updated helper tests for new snapshot ownership semantics and kept full suite green
Milestone 29C: Status Message Ownership Hardening
- Added
set_statushelper and routedpush_statusthrough owned string replacement semantics - Standardized GUI runtime status initialization/disposal and converted remaining direct status assignments to owned-status updates
- Updated helper tests to use owned status strings under new lifecycle semantics and kept full suite green
Milestone 29D: Action-Log Timestamp Reset Hardening
- Hardened
action_log_disposeto resetlast_push_atalongside entries/count state - Added focused tests for status replacement helper and action-log clear timestamp-reset behavior
- Kept full build/test gate green with expanded helper suite
Milestone 29E: Confirm/Open Helper Branch Test Expansion
- Added focused test for
open_project_sessionmissing-file branch (error propagation + state/timestamp/dirty preservation) - Added focused test for
resolve_confirm_action_with_messagereset branch dispatch behavior - Expanded non-render helper branch coverage while keeping full build/test gate green
Milestone 29F: Open/Confirm Success-Path Test Expansion
- Added focused success-path tests for
open_project_sessionand confirm resolver open-branch dispatch - Verified loaded-state replacement, dirty reset, export-path sync, and autosave timestamp refresh behavior
- Applied owned-controller disposal in new load-path tests to keep allocator hygiene clean
Milestone 29G: Diagnostics/Report Write-Path Test + Leak Hardening
- Added focused tests for diagnostics/report write helpers creating expected output files in temp project dirs
- Hardened diagnostics/report path helper call-sites with explicit path-string cleanup after writes
- Aligned diagnostics write-status assertion to current runtime wording and kept full suite green
Milestone 29H: Diagnostics/Open Failure-Path Test Expansion
- Added focused failure-path tests for diagnostics/report write helpers when project directory is missing
- Extended missing-file open-session test to assert project-path normalization side effect
- Kept full build/test gate green with expanded non-render helper branch coverage
Milestone 29I: Confirm/Open Path-Behavior Test Tightening
- Strengthened open-session success-path assertions to verify export-path project-directory sync (not just suffix)
- Strengthened confirm-resolver open-branch success assertions with project-directory sync checks
- Added focused confirm-resolver open-branch missing-file test for state/dirty/timestamp preservation
Milestone 29J: Autosave Success-Path Helper Test Expansion
- Added focused autosave-tick success-path test validating project write, dirty-clear behavior, and save timestamp update
- Verified autosave project-path normalization behavior under successful save flow
- Kept full build/test gate green with expanded non-render helper coverage
Milestone 30A: GUI Aesthetic Foundation Refresh
- Added reusable
draw_cardsurface helper with subtle shadow + consistent border treatment - Applied refreshed scene styling (soft gradient background, tuned sidebar/header separation, unified card surfaces)
- Switched key dashboard/summary/log surfaces to shared card rendering for more consistent visual hierarchy
Milestone 30B: GUI Aesthetic Hierarchy Pass
- Added
draw_button_primaryand applied primary styling to high-priority actions (Next,Auto-All,Auto-All + Save) - Refined base component theming (button/nav/input color tuning, selected input fill treatment)
- Tuned sidebar/headline/recommendation hint color hierarchy for clearer visual emphasis
Milestone 30C: GUI Spacing + Sidebar Information Architecture Pass
- Replaced dense sidebar hotkey wall with grouped shortcut cards via
draw_sidebar_shortcuts - Improved shortcut readability through sectioned labels (
Workflow,Tools) and tighter typography rhythm - Preserved full help-overlay detail while reducing main-view visual noise
Milestone 30D: Main-Canvas Spacing + Section Framing Pass
- Added framed card surfaces for
Project InputsandActionszones to improve visual grouping on the main canvas - Tuned field-label typography scale and hierarchy (18px labels, section headings, less noisy tip/editing treatments)
- Repositioned inline editing indicator and tightened supporting copy emphasis for cleaner rhythm
Milestone 30E: Overlay + Log/Status Readability Polish
- Refined help and confirm overlays with stronger contrast layering, shared card surfaces, and calmer section typography
- Improved action-log readability with subtle alternating row backgrounds and tuned log text colors
- Tuned status/log metadata typography sizing and color balance for cleaner dashboard scanning
Milestone 30F: Action-Zone Micro-Hierarchy Polish
- Added reusable
draw_hint_pillhelper for compact contextual guidance chips - Replaced noisy inline editing text with structured hint pills (
field focus, safety hint, next/auto hint) - Added subtle status-header divider line to improve status card scan rhythm
Milestone 30G: Confirm/Toast Emphasis Polish
- Added
draw_button_dangerstyle and applied it to destructive confirm CTA in modal overlay - Enhanced toast visual treatment with subtle shadow and border for clearer transient message legibility
- Preserved behavior while improving visual emphasis on high-risk actions and transient feedback
Milestone 30H: Status Card Badge + Micro-Readability Pass
- Added reusable
draw_status_badgehelper for compact status chips - Replaced plain dirty/autosave status text with badge-style indicators for faster visual parsing
- Fine-tuned status-card spacing/metadata alignment to maintain clean scan rhythm
Milestone 30I: Utility Control Density + Visual Weight Pass
- Added reusable
draw_small_buttonhelper for compact utility controls - Shifted low-priority utility controls (path tools, autosave presets, summary toggles, log toolbar) to compact button treatment
- Updated log-toolbar labels for improved clarity while reducing visual heaviness
Milestone 30J: Header Context Chip Polish
- Replaced plain top-header active-screen text with contextual hint-chip treatment for clearer glanceability
- Added compact project-pages context chip in header row to reinforce current workflow context
- Tuned header typography weight/size balance while preserving existing field-edit behavior
Milestone 30K: Sidebar/Nav Framing + Tip Presentation Polish
- Added framed card surface around the screen-navigation cluster to improve left-rail structure
- Replaced bottom plain-text caution tip with accented hint-pill treatment for visual consistency
- Preserved behavior while reducing loose text noise in the primary canvas
Milestone 30L: Section Title Rhythm + Log Header Consolidation
- Added reusable
draw_section_titlehelper for consistent section-heading styling - Applied section-title treatment to key canvas regions (
Project Inputs,Actions,Action Log) - Simplified action-log renderer by removing duplicate internal title drawing for cleaner hierarchy
Milestone 30M: Secondary Action Visual Tiering
- Added
draw_button_soft_accenthelper for medium-priority actions - Applied soft-accent treatment to Save/Open/Help controls to better separate them from neutral and primary CTAs
- Preserved behavior while improving action hierarchy legibility
Milestone 30N: Status/Log Metadata Pill Polish
- Replaced dense status metadata lines with compact save/export/path pill treatments for cleaner glanceability
- Added path-health badge stack (
P/E) and accented inline path-fix hint pill in status card - Added compact log-toolbar shortcut hint pill to improve discoverability without visual clutter
Milestone 30O: Topbar Container + Chip Refinement
- Added framed topbar container card to visually anchor header context controls
- Added dedicated
draw_topbar_chiphelper for refined topbar context pills - Updated header chip placements/styles for cleaner alignment and improved glance readability
Milestone 30P: Sidebar Brand/Footer Cohesion Pass
- Added framed sidebar brand card and section-title divider rhythm for a cleaner left-rail header
- Added compact sidebar footer support card (
/help reminder + overlay close hint) - Preserved behavior while improving left-rail visual cohesion and onboarding clarity
Milestone 30Q: Action/Log Toolbar Surface Unification
- Added reusable
draw_subtle_striphelper for lightweight grouped-control backgrounds - Applied subtle strip treatment to action-row and action-log toolbar regions for stronger grouping without heavy chrome
- Preserved behavior while improving scan rhythm across high-density control zones
Milestone 30R: Destructive-Action Visual Cue Pass
- Added
draw_button_warninghelper for low-intensity destructive/irreversible action emphasis - Applied warning-style treatment to
Newaction in the primary action row to better signal reset risk - Preserved behavior while improving safety affordance visibility
Milestone 30S: Active Navigation Marker Polish
- Enhanced active sidebar nav item styling with a subtle marker dot and adjusted label offset
- Preserved existing hover/active behavior while improving active-screen discoverability
- Kept full build/test gate green
Milestone 30T: Micro-Copy Pill Consistency Pass
- Replaced plain helper micro-copy near export format/path controls with compact hint-pill treatments
- Replaced summary toggle hotkey plain text with compact hint-pill treatment for visual consistency
- Preserved behavior while reducing scattered plain-text noise
Milestone 30U: Log Toolbar Layout Alignment Pass
- Re-aligned log toolbar button geometry to fit cleanly within the action-log card bounds
- Tightened toolbar label lengths and shortcut-hint placement to reduce overlap risk in dense log controls
- Preserved behavior while improving right-panel visual alignment
Milestone 30V: Status Card Density Rebalance
- Consolidated save/export/path metadata into a single compact status line inside the status card bounds
- Removed overflow-prone stacked metadata pills from the status region to reduce visual crowding
- Preserved behavior while improving status-card containment and scan clarity
Milestone 30W: Input-Row Rhythm Surface Pass
- Applied subtle strip surfaces behind each primary input row in the
Project Inputsregion - Extended strip treatment to path row + action row for stronger vertical rhythm continuity
- Preserved behavior while improving form scanability and visual cadence
Milestone 30X: Utility/Modal Secondary Emphasis Pass
- Applied soft-accent visual tier to helper controls (
Reset Helpers, autosave toggle) for clearer control grouping - Applied soft-accent styling to confirm modal
Cancelaction for stronger destructive/non-destructive contrast - Preserved behavior while improving action hierarchy readability
Milestone 30Y: Focus/Affordance Refinement Pass
- Enhanced selected-input affordance with subtle outer halo + focus border treatment for clearer field focus
- Extended active navigation cueing with a slim active rail marker inside selected sidebar items
- Preserved behavior while improving interaction-state discoverability
Milestone 30Z: Primary Action Guidance Chip Pass
- Replaced plain recommended/hint text near Next/Auto controls with consistent hint-pill treatment
- Added compact key-hint pills (
F9 Next,F10 Auto) under primary action buttons for faster keyboard discoverability - Preserved behavior while improving action-guidance visual consistency
Milestone 31A: UI Text-Overflow Resilience Pass
- Added shared
fit_text_for_widthhelper for width-aware truncation with ellipsis - Applied overflow-safe text rendering to hint/topbar/status badges and toast surface text
- Applied status-line overflow-safe rendering in status card to prevent long-message spillover
Milestone 31B: Button Label Overflow Resilience Pass
- Applied width-aware label fitting across button styles (default/primary/danger/warning/soft-accent + disabled states)
- Applied width-aware label fitting for compact utility buttons in enabled/disabled states
- Preserved behavior while preventing long labels from overflowing high-density control regions
Milestone 31C: Nav/Input Overflow Resilience Pass
- Applied width-aware label fitting to sidebar nav items (including active-state offset handling)
- Applied non-editing input-field text fitting to prevent long values from spilling outside input surfaces
- Preserved editing ergonomics by keeping full-value rendering while an input is actively selected
Milestone 31D: Sidebar Shortcut Overflow Resilience Pass
- Added
draw_sidebar_shortcut_linehelper with width-aware text fitting for left-rail shortcut copy - Replaced direct sidebar shortcut text draws with overflow-safe helper usage
- Preserved shortcut content while improving resilience to long copy and future wording changes
Milestone 31E: Help Overlay Overflow Resilience Pass
- Added
draw_help_linehelper with width-aware text fitting for help-overlay body copy - Replaced direct long shortcut lines in help overlay with overflow-safe helper usage
- Preserved content/structure while improving resilience to future shortcut-copy growth
Milestone 31F: Action Log Line Overflow Resilience Pass
- Added width-aware fitting for rendered action-log lines (including timestamp prefix)
- Prevented long log entries from spilling past right-panel bounds in compact log view
- Preserved log semantics while improving dense-session readability
Milestone 31G: Summary/Status Metadata Overflow Resilience Pass
- Added
draw_summary_linehelper and applied overflow-safe rendering to long dynamic summary lines (genre/audience/title/export target/block reason) - Applied overflow-safe rendering to status-card pipeline/next and metadata footer lines
- Preserved behavior while improving resilience under long project names/paths/messages
Milestone 31H: Overlay/Layout-Row Overflow Resilience Pass
- Applied overflow-safe fitting to confirm-overlay action sentence to guard long action labels/future copy changes
- Applied overflow-safe summary-line rendering for layout pattern rows (
- P#: pattern (n)) in both asc/desc views - Applied overflow-safe fitting to log-view metadata line (
View: n lines, order first) in utility bar
Milestone 31I: Chip Micro-Overflow Resilience Pass
- Applied width-aware fitting to compact stat-chip label/value rendering (
draw_stat_chip) for narrow chip bounds - Applied width-aware fitting to readiness-chip line rendering (
draw_readiness_chip) using chip width argument - Preserved chip semantics while preventing crowding/spill in compact telemetry surfaces
Milestone 31J: Screen Summary Uniform Overflow Pass
- Expanded overflow-safe summary rendering across remaining dynamic Screen Summary lines (story/script/panels/layout/bubbles/export)
- Replaced direct dynamic DrawText formatting with
draw_summary_linefor consistent truncation behavior - Preserved summary semantics while improving resilience under high-count data and long formatted values
Milestone 31K: Summary Helper Consistency Pass
- Applied width-aware fitting to section-title labels for tighter heading-bound resilience
- Added
draw_summary_sublinehelper for 16px secondary summary text with consistent width fitting - Replaced export "Last layout pattern" subline rendering with helper usage to reduce one-off formatting logic
Milestone 31L: Fitted-Text Helper Consolidation Pass
- Added shared
draw_text_fittedhelper to unify fit+draw behavior and reduce repeated truncation boilerplate - Refactored section-title/summary/help/sidebar shortcut helpers to use the consolidated text-fit renderer
- Preserved behavior while reducing one-off fitting/draw patterns and tightening future maintenance seams
Milestone 31M: Button Text Renderer Consolidation Pass
- Refactored all primary button draw variants to use shared
draw_text_fitted(default/primary/danger/warning/soft-accent) - Refactored enabled/disabled compact button text rendering and disabled-state standard button rendering to use shared helper
- Preserved behavior while reducing repeated fit+draw branches in high-touch control rendering paths
Milestone 31N: Surface/Chip Text Renderer Consolidation Pass
- Refactored nav-item labels and non-selected input text rendering to use shared
draw_text_fitted - Refactored hint/topbar/status chips plus stat/readiness chip text rendering to use shared helper
- Preserved behavior while reducing repeated fit+draw fragments across non-button UI surfaces
Milestone 31O: Status/Log Fitted-Text Consolidation Pass
- Refactored action-log row rendering and toast text rendering to use shared
draw_text_fitted - Refactored confirm-overlay action sentence and status-card text rows (status/pipeline/next/meta) to use shared helper
- 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
- Added direct helper tests for
fit_text_for_widthtruncation behavior (ellipsis + minimum-width rule) - Added helper passthrough tests for no-truncation and
px_per_char <= 0paths - Revalidated full suite after test additions (76 passing)
Milestone 32A: GUI File Split Kickoff (Text Helpers)
- Started structural decomposition of
src/gui/runtime.odinby extracting text-fit helpers intosrc/gui/text_helpers.odin - Moved
fit_text_for_widthanddraw_text_fittedinto the new module without behavior change - Revalidated full build/test gate after file split (76 passing)
Milestone 32B: GUI File Split (Widget Primitives)
- Extracted shared widget primitives from
src/gui/runtime.odinintosrc/gui/widgets.odin - 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) - Revalidated full build/test gate after split (76 passing)
Milestone 32C: GUI File Split (Overlays + Log Views)
- Extracted overlay/log rendering helpers from
src/gui/runtime.odinintosrc/gui/overlays.odin - Moved action-log/toast/status-color + help/sidebar/confirm overlay draw helpers without behavior changes
- Revalidated full build/test gate after split (76 passing)
Milestone 32D: GUI File Split (Summary + Readiness Views)
- Extracted summary/readiness rendering helpers from
src/gui/runtime.odinintosrc/gui/summary_views.odin - 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) - Revalidated full build/test gate after split (76 passing)
Milestone 32E: GUI File Split (Controls)
- Extracted control rendering helpers from
src/gui/runtime.odinintosrc/gui/controls.odin - 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) - Revalidated full build/test gate after split (76 passing)
Milestone 32F: GUI File Split (Path + Export Helper Layer)
- Extracted path/export normalization and sync helpers from
src/gui/runtime.odinintosrc/gui/path_helpers.odin - Moved format/path utility + path-message helpers (
format_suffix, normalization helpers, preset/sync/fix helpers, path-health checks) - Revalidated full build/test gate after split (76 passing)
Milestone 32G: GUI File Split (Diagnostics + Report Helpers)
- Extracted diagnostics/report helper layer from
src/gui/runtime.odinintosrc/gui/diagnostics.odin - Moved diagnostics snapshot/report builders, context struct/builder, diagnostics/report file writers, and clipboard snapshot helpers
- Revalidated full build/test gate after split (76 passing)
Milestone 32H: GUI File Split (Session + Status Helpers)
- Extracted session/status/helper-state layer from
src/gui/runtime.odinintosrc/gui/session_helpers.odin - Moved status/log push helpers, navigation/confirmation toggles, selected-field clear/paste helpers, and
Action_Loglifecycle helpers - Revalidated full build/test gate after split (76 passing)
Milestone 32I: GUI File Split (Workflow + Action Helpers)
- Extracted workflow/action helper layer from
src/gui/runtime.odinintosrc/gui/actions.odin - Moved generation/layout/export runners, next/auto-all helpers, summary toggle helpers, interval parsers, and autosave/session action helpers
- Revalidated full build/test gate after split (76 passing)
Milestone 32J: GUI File Split (Local Generation + Utility Helpers)
- Extracted local generation and utility helper layer from
src/gui/runtime.odinintosrc/gui/local_helpers.odin - Moved local script/panel builders, panel collection/count helpers, text append/pop helpers, recommended-label helper, and pending-action label helper
- Revalidated full build/test gate after split (76 passing)
Milestone 32K: GUI File Split (Shared Types)
- Extracted shared GUI types from
src/gui/runtime.odinintosrc/gui/types.odin - Moved
Summary_View_OptionsandPending_Confirm_Actiondeclarations to the dedicated types module - Revalidated full build/test gate after split (76 passing)
Milestone 32L: Runtime Import Cleanup Checkpoint
- Removed stale
runtime.odinimports left behind after module extraction (os,filepath,strconv,adapters) - Kept runtime import surface aligned to active dependencies only (
fmt,strings,raylib,core,shared,ui) - Revalidated full build/test gate after cleanup (76 passing)
Milestone 32M: Fullscreen Startup Mode
- Updated GUI runtime startup to size window to current monitor and toggle fullscreen on launch
- Verified build + GUI launch path with fullscreen initialization
- Revalidated build/test gate (
./build.sh,odin test tests)
Milestone 33A: Visual Redesign (Modern Theme Pass)
- Refreshed global shell styling with richer gradients, soft ambient highlights, and cleaner sidebar/topbar contrast
- Modernized core surfaces (cards/strips/chips) and controls (buttons/nav/input focus) with updated radii, shadows, and contemporary palette tuning
- Refined UI microcopy labels in primary form regions for cleaner modern presentation while preserving behavior
Milestone 33B: Layout Rhythm + Typography Pass
- Refined section heading typography/underline treatment for stronger hierarchy and cleaner modern framing
- Tuned topbar/input/action/status/log panel vertical rhythm (card heights, heading baselines, content offsets) for more consistent spacing cadence
- Preserved behavior while improving visual balance and readability in dense dashboard regions
Milestone 33C: Visual Course-Correction (Clean Minimal Pass)
- Rebalanced redesign styling toward a cleaner minimal look (reduced visual noise, flatter shell treatment, calmer surface/controls palette)
- Reverted over-aggressive spacing/offset shifts in topbar/status/log regions to restore stable layout rhythm while keeping modern polish
- Revalidated full build/test gate after visual corrections (76 passing)
Milestone 33D: Clutter Reduction + Readability Pass
- Reduced dashboard visual clutter by removing non-essential row-strip treatments and duplicate key-hint pills in the action region
- Consolidated top helper guidance into a single compact hint rail and simplified field-focus copy
- Improved form label readability with lighter typography weight/size and calmer color tone while preserving behavior
Milestone 33E: Minimalist Visual Reset Pass
- Flattened shell styling to a cleaner neutral canvas (removed decorative gradients/highlights and reduced ornamental contrast)
- Simplified card/strip component treatment to low-noise borders with restrained depth for a more professional utility-tool look
- Rebalanced primary/nav palette saturation and corner radii for calmer modern controls without changing behavior
Milestone 33F: Linear-like Dark Crisp Theme Pass
- Shifted shell/surfaces/controls to a dark neutral palette with crisp blue accents for primary/active affordances
- Updated summary/overlay/log text and chip/readiness/status color treatment for dark-background readability and contrast
- Revalidated full build/test gate after dark-theme pass (76 passing)
Milestone 33G: Fullscreen Reliability Follow-up
- Updated GUI window startup flow to maximize on launch and enforce borderless-windowed state for better full-screen coverage behavior
- Preserved existing rendering/input behavior while improving startup window mode handling on desktop
- Revalidated full build/test gate after window-mode adjustments (76 passing)
Milestone 33H: Fullscreen Utilization + Dark Theme Refinement
- 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 - Centered/anchored overlays and confirm modal to dynamic screen dimensions (no fixed 1240x820 dimming bounds)
- Revalidated build/test gate and launch path (
GUI window size after setup: 1920x1080, 76 tests passing)
Milestone 33I: Vertical Responsiveness + Overlay Anchoring Pass
- Added adaptive vertical anchoring for lower dashboard regions (status/summary/action-log blocks now track
screen_hvialower_y_loopbaseline) - Updated sidebar shortcut stacks and overlay/modal placement to derive positions from runtime screen height instead of fixed 820-based coordinates
- Revalidated build/test gate and runtime launch diagnostics (
GUI window size after setup: 1920x1080, 76 tests passing)
Milestone 33J: Overlap Cleanup + Debug Noise Removal
- Removed temporary runtime window-size debug print after fullscreen verification
- Repositioned summary controls/hint rail and bottom tip pill to dynamic lower-region anchors to avoid fixed-position overlap on tall screens
- Revalidated full build/test gate after overlap cleanup (76 passing)
Milestone 33K: Overlap Guard Sweep
- Added lower-region baseline clamp (
lower_y_loop >= 568) to prevent top/lower panel collisions when runtime height shrinks - Revalidated full build/test gate and GUI launch path after overlap guard adjustment
- Confirmed no regressions in automated suite (76 passing)
Milestone 33L: Export Path Robustness Fix
- Added export output parent-directory creation in adapter layer (
ensure_export_output_parent_dir) before file write/export execution - Eliminated
write pdf: Not_Existfailures for nested/non-existent export directories during GUI/TUI quick-local flows - Revalidated gate and manual nested-path quick-local run (76 tests passing)
Milestone 33M: 1366x768 Layout Guard Pass
- Relaxed lower-dashboard baseline clamp (
lower_y_loop >= 430) to avoid bottom-edge clipping on shorter displays while preserving separation from top region - Updated sidebar shortcut stack minimum anchor (
base_y >= 120) to keep left-rail cards inside viewport on low-height screens - Revalidated full build/test gate after low-height guard adjustments (76 passing)
Milestone 33N: Compact Mode Hint Suppression
- Added compact-mode switch (
screen_h < 860) in GUI runtime layout loop - Suppressed non-essential hint rails/pills in compact mode (field-focus rail, extension helper pills, summary/log shortcut hint pills, bottom tip rail)
- Revalidated full build/test gate after compact-mode behavior update (76 passing)
Milestone 34: Script Results Visibility (GUI)
- 34A: Script summary card promoted to page inspector with real per-page panel content previews
- 34B: Add script page navigation controls (prev/next buttons + keyboard)
- 34C: Add dedicated script detail pane (full-page text/dialogue surface)
- 34D: Add script utility actions (copy visible page, copy full script)
- 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)
- 35A: Add panel gallery/list with panel metadata/status in dedicated Panels detail surface
- 35B: Show panel generation health states (ready/missing/error) with retry actions
- 35C: Add panel detail inspector (prompt, seed, dimensions, source URL/path)
- 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
- 38A: Extract screen-size profiles (compact/standard/wide) into shared layout constants
- 38B: Remove remaining hardcoded geometry hotspots from runtime orchestrator
- 38C: Normalize semantic color tokens across widgets/controls/overlays
- 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)
- Upgraded Script screen summary into a real page inspector view (selected page, panel previews, first-dialogue snippets)
- Added script page cursor state to GUI summary options with runtime clamping
- Revalidated build/test gate after Script inspector upgrade (76 passing)
Milestone 34B: Script Page Navigation Controls (initial pass)
- Added Script summary prev/next page buttons (
< Pg,Pg >) in lower control rail - Added keyboard navigation (
Ctrl+[,Ctrl+]) with wrap-around behavior and status/log feedback - Revalidated full build/test gate after navigation control wiring (76 passing)
Milestone 34C: Script Detail Pane (initial pass)
- Added dedicated Script detail panel in lower-right workspace showing selected page panel descriptions and dialogue snippets
- Kept action-log surface on non-Script screens while using Script-specific detail rendering on Script screen
- Revalidated full build/test gate after detail-pane integration (76 passing)
Milestone 34D: Script Copy Utilities (initial pass)
- Added Script-only copy actions (
Copy Page,Copy All) in detail panel header - Added text builders for selected-page detail and full-script snapshots
- Revalidated full build/test gate after copy-action wiring (76 passing)
Milestone 35A: Panels Detail Surface (initial pass)
- Added Panels-focused detail panel in lower-right workspace with selected-panel metadata and readiness state
- Added panel navigation controls (
< Pn,Pn >) and keyboard navigation (Ctrl+[,Ctrl+]) with wrap-around + status feedback - Added compact panel list rows (selected marker, page/panel index, ready/missing state) for quick inspection
- Revalidated full build/test gate after panels visibility integration (76 passing)
Milestone 34F: GUI Script Source Toggle (Local/DeepSeek)
- Added script-source selector controls in GUI (
Local,DeepSeek) plus keyboard toggle (Ctrl+G) - Added DeepSeek key guard on toggle/action (
DEEPSEEK_API_KEYrequired) with explicit status feedback - Wired source mode into Script action and guided Next/Auto-All/Auto-All+Save flow decisions
- Added topbar script-source status badge with live key availability (
Script: <mode> (key:yes|missing)) and inline key-missing helper text - Improved DeepSeek HTTP error surfacing to include provider message text in GUI/CLI failures
- Hardened DeepSeek request-body serialization using typed JSON marshal (instead of manual string assembly) to prevent malformed request payloads
- Expanded DeepSeek response parser compatibility for multiple JSON shapes (camelCase, snake_case, and wrapped
scriptpayloads) - Added DeepSeek normalization resilience: if provider content parses but fails minimal schema, auto-fallback to deterministic script instead of hard-fail
- Fixed normalization-owned string safety for default title/synopsis values to avoid invalid frees and downstream autosave crashes
- Revalidated full build/test gate and GUI launch smoke after script-source toggle integration (76 passing)
Milestone 36C: Layout Validation Badges
- Added
validate_layout_pagehelper computing coverage %, missing bindings, and bounds violations - Added
draw_validation_badgehelper with ok/fail color treatment - Integrated validation badges into layout detail panel (coverage, bindings, bounds)
- Fixed layout detail panel Y-offsets to accommodate badge row
- Wired regen action to mark project dirty on layout change
- Revalidated full build/test gate (76 passing)
Milestone 37A: Bubble List per Selected Panel/Page
- Added
Summary_View_Optionsfields for bubble navigation (bubble_page_cursor,bubble_panel_cursor,bubble_edit_cursor) - Created
bubbles_views.odinwithdraw_bubbles_detail_panelrendering bubble list per panel - Added bubble row rendering with selected marker, type badge, and text preview
- Added panel navigation within layout page for bubble editing context
- Added Bubbles screen summary card with bubble count and guidance
- Revalidated full build/test gate (76 passing)
Milestone 37B: Bubble Create/Edit/Delete Controls
- Added
Addbutton in bubble detail panel to create new bubbles - Added
xdelete marker on selected bubble row with click-to-delete - Added
Auto Placebutton to auto-generate bubbles from script dialogue - Added bubble type selector buttons (Normal/Thought/Shout/Whisper/Narration/SFX) with click-to-change
- Added
action_add_bubble,action_delete_bubble,action_auto_place_bubbles_for_panel,action_update_bubblehelpers - Added button-click and keyboard (
Ctrl+[/Ctrl+]) panel navigation on Bubbles screen - Added mouse wheel navigation for panel cycling on Bubbles screen
- Revalidated full build/test gate (76 passing)
Milestone 37C: Bubble Edit Persistence
- Bubble edits stored in
controller.state.speech_bubblesmap (keyed by panel_id) - All bubble actions mark project dirty for autosave/save persistence
- Speech bubbles serialized via existing project save/load format (
.comic.json) - Revalidated full build/test gate (76 passing)
Milestone 34E: Layout Constants Extraction + Resolution Validation
- Extracted layout constants into
shared/layout.odin(LAYOUTstruct with sidebar_width, margins, floors) - Added
screen_profilehelper (Compact/Standard/Wide classification) - Added
compute_main_widthandcompute_lower_yhelpers replacing inline formulas - Added
is_compacthelper for height-based compact mode detection - Replaced all hardcoded
282sidebar references inruntime.odinwithshared.LAYOUT.sidebar_width - Replaced duplicate layout calculations in drawing phase with shared helpers
- Validated layout behavior at 1366x768 (Compact), 1920x1080 (Wide), and 2560x1440 (Wide)
- Revalidated full build/test gate (98 passing)
Milestone 39A: GUI Integration Smoke Tests
- Added
bubble_type_name/bubble_type_from_nameroundtrip tests - Added
clamp_bubble_cursorboundary condition tests - Added
validate_layout_pagecoverage calculation tests (100% coverage for full-page grids) - Added layout validation bounds violation detection tests
- Added layout validation missing bindings detection tests
- Revalidated full build/test gate (98 passing)
Milestone 39B: Error-Path Tests
- Added
action_regenerate_page_layoutinvalid page index test - Added
action_regenerate_page_layoutempty panels test - Added
action_add_bubblenil map initialization test - Added
action_delete_bubblenil map and invalid index tests - Added
action_delete_bubblelast-bubble removal (map key cleanup) test - Added
action_update_bubblenil map and invalid index tests - Added
action_update_bubbletype change and text change tests - Revalidated full build/test gate (98 passing)
Milestone 39C: Ownership/Lifecycle Audits
- Added
collect_layout_panels_for_pageedge case tests (empty, negative, out-of-range) - Added
count_bubbles_for_panelnil map and missing key tests - Added
clamp_layout_cursorboundary condition tests - Added bubble map disposal with owned strings test
- Documented memory leak patterns in bubble action tests (string literal vs owned string ownership)
- Revalidated full build/test gate (98 passing)
Milestone 40A: Release Packaging + Version Stamping
- Enhanced
scripts/package.shwith version stamping, git hash, and build date - Added VERSION file to package with build metadata (version, date, hash, os, arch)
- Added SHA256 checksum generation with fallback for macOS (
shasum) - Added package summary output (size, checksum, metadata)
- Integrated test suite run into packaging pipeline
- Created CHANGELOG.md with release history
- Updated README.md with current features, controls, and project structure
- Revalidated full build/test gate (98 passing)
Milestone 40B: GUI User Guide
- Created
docs/GUI_USER_GUIDE.mdwith screen-by-screen documentation - Documented all keyboard shortcuts in grouped tables
- Documented first-run workflow and autosave configuration
- Documented path management and quick-fix controls
- Added troubleshooting section for common issues
- Included guide in release package
Milestone 40C: Production Release Checklist + Known Issues
- Created
docs/RELEASE_CHECKLIST.mdwith pre-release verification steps - Added build/test gate, platform compatibility, and functional smoke test sections
- Added edge case, performance, and documentation verification checklists
- Added release packaging and post-release procedures
- Documented known issues by feature area (Bubbles, Layout, Export, GUI, TUI, Performance)
- Listed planned improvements for future releases
- Included checklist in release package
Phase 1: PDF Export + Shot Sizing + Negative Prompts + Art Styles
- Added
Art_Style_Keyenum with 8 styles (Manga, Western_Comic, Pixel_Art, Watercolor, Noir, Chibi, Sketch, Cyberpunk) - Added
ART_STYLE_KEYWORDSconstant map with detailed prompt keywords per style - Added
QUALITY_MODIFIERconstant for universal quality boost - Added
NEGATIVE_PROMPT_CHARACTERandNEGATIVE_PROMPT_PANELconstants - Added
Sdxl_Image_Sizeenum andget_image_size_for_shot_typemapping (7 shot types → 6 aspect ratios) - Updated
Fal_Transportsignature to acceptnegative_prompt,image_size,reference_images,reference_strength - Updated
default_fal_transportto build full request body with all new parameters - Updated
generate_character_referencewith style keywords, negative prompt, and square_hd sizing - Updated
generate_panel_imagewith style keywords, negative prompt, shot-type sizing, and character reference images - Added
render_page_to_imageproc using ImageMagick (magick) for page composition with panel positioning - Updated PDF export to render pages to images then combine via ImageMagick
- Updated CBZ/PNG export to render composed page images instead of raw panel copies
- Updated local panel generation (CLI + GUI) to create real PNG images via Python
- Updated export test fixture to create real PNG images via ImageMagick
- Switched from
converttomagickcommand for ImageMagick v7 compatibility - Revalidated full build/test gate (98 passing)
Phase 2: Character Consistency + Multi-Angle Sheets + Emotion Enum
- Added
Emotionenum with 6 values (Happy, Sad, Angry, Surprised, Neutral, Determined) - Updated
Dialoguestruct to useEmotionenum instead of string - Added
emotion_nameandparse_emotionhelpers with fuzzy matching - Updated DeepSeek response parser to convert emotion strings to enum
- Updated dispose code to skip emotion field (no longer a string)
- Added
Character_Sheet_Posestruct andCHARACTER_SHEET_POSESconstant (4 poses: front, three-quarter, profile, back) - Added
generate_character_sheetproc with sequential pose generation and IP-Adapter reference consistency - Added
generate_character_sheet_stubfor direct API access - Added
action_generate_character_referenceGUI action - Added
action_generate_character_sheetGUI action - Character reference images already passed to panel generation via
reference_images+reference_strength: 0.65 - Added 12 new tests for Phase 2 (emotion roundtrip, fuzzy parsing, art styles, shot sizing, character actions)
- Revalidated full build/test gate (110 passing)
Phase 3: Progress Tracking + CBZ/PNG Rendering + Character Parser + Genre Layouts
- Added
progressfield toBackground_Jobstruct - Added
update_job_progressproc to job manager - Added progress callback parameter to
generate_all_panels_batched - Created
core/character_parser.odinwith 10 extraction functions (age, gender, hair color/style, eye color, skin tone, body type, outfit, accessories, distinguishing features) - Added
parse_description_to_template,extract_color_palette,template_to_stringprocs pattern_matches_genrealready implemented with full genre-to-pattern mappingselect_best_patternalready uses tightest-fit algorithm with genre filtering- Added 21 new tests for Phase 3 (character parser, progress tracking, genre layouts)
- Revalidated full build/test gate (131 passing)
Phase 6: Appearance Count + Bubble Editing + Streaming
- Added
count_character_appearancesproc to iterate all panels and count character appearances - Tracks
first_appearance_panelfor each character - Added
update_bubble_text,update_bubble_position,reset_bubble_positionprocs to bubble module - Added
action_update_bubble_textGUI action for updating bubble text by ID - Added
Stream_Callbacktype andstream_comic_scriptproc for SSE streaming - Added
stream_comic_script_stubfor direct API access - Streaming parses SSE
data:chunks and accumulates JSON response - Added 9 new tests for Phase 6 (appearance count, bubble editing, streaming)
- Revalidated full build/test gate (143 passing)
Phase 7: Bubble Drag Positioning + Integration + Edge Cases
- Added
action_reposition_bubbleGUI action for repositioning bubbles by coordinates - Added
action_reset_bubble_positionGUI action for resetting bubble to default position - Added 4 bubble positioning tests (reposition, reset, not found, empty map)
- Added full pipeline integration test (script → panels → layout → bubbles)
- Added character parser workflow integration test
- Added 7 adapter edge case tests (validation, fallback, JSON extraction, escaping, response parsing)
- Fixed indentation bug in
action_update_bubble_textthat broke compilation - Revalidated full build/test gate (156 passing)