Skip to content

Latest commit

 

History

History
330 lines (314 loc) · 51 KB

File metadata and controls

330 lines (314 loc) · 51 KB

UX Change Log

Brief descriptions of user experience changes, newest first.

  • Audio diagnostics: when audio fails, the message now tells parents to plug in a USB speaker or USB audio adapter and notes that sound should start within a few seconds, so they know a reboot isn't needed.
  • Art/Music: mode indicators now centered in the top bar with a dim "↹ Tab to switch" hint to the right, so Tab no longer reads as a third mode.
  • Art: bottom hint is now mode-aware: "Type to paint! Every letter is a color, mix them together. Arrow keys move." in paint mode, "Type to write! Arrow keys move. Enter for a new line." in write mode.
  • Play: division by zero now shows 🤷 instead of silently echoing the expression.
  • Play: rounded results prefix with ≈ (e.g. 321111/321120 → ≈ 1) so near-integers aren't mistaken for exact answers.
  • Play: leading zeros in numbers are stripped (01 → 1) so expressions like 321132 / 01 evaluate instead of being treated as text.
  • Boot speed: removed 1s sleep in xinitrc (xinit already guarantees X readiness), faster font size polling (20ms intervals instead of fixed 300ms sleep), deferred display brightness probe to after first frame. Total savings ~1.2-1.5s.
  • Parent menu: new "Support info" item shows Purple version, device summary, and audio status, with scrollable Device info and Audio info sub-screens for diagnostics. When audio is detected as broken at boot, the entry label gains "(audio not working)" and the live-boot splash adds a matching one-line warning.
  • Littles mode: long-hold Escape now shows a dedicated "Exit Littles Mode?" screen instead of silently exiting and opening the parent menu. Options: Yes exit, No go back (default), Parent Menu.
  • On charger with lid open, computer now shuts down after 60 minutes idle instead of staying on forever. Battery (10 min) and lid-closed (10 min) timers unchanged.
  • Title bar shows boot mode on the left: "USB" (blinks while caching, then "USB · ⏏ Remove OK" when safe) or "Installed" with disk icon.
  • Hold backslash (\) for 3 seconds to open parent menu. Alternative to Escape long-hold for keyboards where Escape is unreliable.
  • Install failure screen now shows the specific error and "Press Enter for technical details" to view the last 10 log lines (photographable for support).
  • Post-install reboot: after install completes, Textual exits and a plain-text screen shows "All done! You can remove the USB drive now. Press Enter to restart." Runs from a static binary on tmpfs so it works even after USB removal.
  • Parent menu and terminal mode now show whether Purple Computer is running from USB or installed on the computer.
  • Art room: movement commands accept trailing color ("down 5 blue", "go 10 red"). Color-then-number draws forward ("blue 5" = 5 blue squares). Direction + text writes/paints in that direction ("left hello" writes "hello" going left). Turn/spin accept a distance ("turn 5" = spin then go 5, "turn left 10" = face left then go 10). Removed numeric angle support (90/180/270) from turn.
  • Play room repeat is now inline-only ("repeat 3 dog, cat"), matching music/art rooms. Removed multi-line block syntax (repeat/end).
  • Sleep screen status messages shortened and use emojis (lid, battery, USB).
  • Boot: eliminated GRUB error message and gray screen flash. Boot goes straight from black to purple "Starting up..." screen with no intermediate states.
  • Sleep screen: stays visible when lid is reopened (press any key to wake, same as idle sleep). Shows dynamic power status: how long lid was closed, charger state, auto-shutdown timing, and USB context on live boot. Helps parents understand power behavior at a glance.
  • Install confirmation modal: "Yes, install" / "No, go back" bordered buttons matching Clear Rooms modal pattern, with up/down navigation.
  • All rooms: centralized typo tolerance. Emoji/color lookups auto-correct typos ("dinno" shows dinosaur, "purpel" shows purple). Play room: "sya" triggers speech, "repet 3" starts repeat, "3 timess cat" works. Music room: "chooze xylaphone" switches instrument. Corrections shown in recall hint.
  • Art code REPL: "turn left/right" is now absolute (matches parent intuition). "spin"/"rotate" for relative 90° CW. "face" for explicit absolute. "back N" moves opposite heading. Bare color names ("blue", "dark red") switch colors. "paint hello"/"write hello" for inline text. Fuzzy matching on typos ("forwrd" runs forward, "bleu" switches to blue) with correction hints. Unrecognized text does nothing instead of painting individual letters.
  • ESC picker shows full-width "Open Code"/"Close Code" in Music/Art when code panel is allowed.
  • Parent menu: "Code Panel: On/Off" renamed to "Allow Code Panel: Yes/No". Disabling fully closes the code panel and removes subtitle. Re-enabling in Music/Art immediately shows "hold space" subtitle.
  • "Hold space" subtitle only appears when code panel is allowed.
  • Power button shutdown is now near-instant (was ~10 seconds waiting for services to stop).
  • Installer powers off after completion instead of rebooting (no more hanging on "press Enter to restart").
  • Art room: "color red", "color blue", etc. sets brush color by name. "color t" sets by key mapping.
  • Art room: "lift" toggles pen up/down. "pen up"/"penup" and "pen down"/"pendown" for explicit control.
  • Art room: color autocomplete shows named colors after typing "color " in REPL.
  • Art room: brush color persists across paint commands (typing "t" then "forward 5" paints in t's color).
  • Code panel: viewport no longer shifts up by 1 row when opening (viewport growth now matches freed indicator space).
  • All rooms: commands on a single line (e.g. "turn right turn right") are now split and executed individually; one failing command no longer breaks the rest.
  • Art room: cursor stops at canvas edges instead of wrapping to the other side (typing, painting, and code mode).
  • Art room: paint mode in code follows heading direction (turn down, then paint chars go downward).
  • Art room: new turn commands: turn up/down/back/backward/around and turn 90/180/270/360.
  • Art room: forward synonyms: go, move, walk, step (e.g. "go 5" = "forward 5").
  • Art room: hint text changed from "Hold Space + arrows to paint" to "Type to paint."
  • Art room: paint/write selector stays visible when code panel is open.
  • Art room: holding space to open code panel no longer types spaces in write mode.
  • Art room: write mode works when code panel is open (text goes to canvas, not code input).
  • Code panel: canvas no longer changes size when panel opens/closes (pinned height).
  • Code panel: breathing room added above code input row.
  • Code panel: escape no longer closes the panel (clears input only). Type "exit" or hold Space to close.
  • Code panel mode persists across room switches. Switching rooms auto-opens panel in Music/Art. Play shows compact indicator (already a REPL). Mode ends on explicit close only.
  • Code panel: room picker (Esc tap) shows "Close Code" option as a third row when code panel is open. Space key is a shortcut to close from the picker.
  • Code panel: compact 1-row room indicator shown instead of hiding indicator entirely.
  • Space-hold REPL toggle: typing another key while space is held now flushes the space immediately, fixing character ordering when typing fast (e.g. "left 10" no longer becomes "left1 0").
  • Art code panel: heading arrow integrates into existing cursors. Paint mode: arrow replaces one edge of the 3x3 ring. Write mode: arrow appears one cell away in the heading direction. Arrows always visible in code mode (default: right). Bare direction commands (e.g. "down 5") implicitly turn to face that direction before moving.
  • Music code panel: "choose instrument" now updates the instrument name in the header.
  • Parent menu: "Code Panel: On/Off" toggle controls whether space-hold opens the code panel in music/art rooms. Littles mode always disables it.
  • Littles Mode: added "No-Screen Music" option. Screen stays dark with minimal text, keys still play sounds. For kids who should focus on the sounds, not the screen.
  • "Try" hints now cycle on Enter instead of Tab. Removed "Tab: more hints" text.
  • REPL code panel: removed letters on/off, paint on/off, write on/off keywords (now controlled via Tab).
  • REPL panel (music/art) now uses the same input widgets as Play room: "Code \u2192" prompt, keyword underlining, tab completion, recall hint (Enter to try again), and cycling Try hints. Tab completes keywords or falls through to mode switch (music/letters, paint/write). Single-line repeat syntax: repeat 3 forward 10, turn right.
  • Removed Code Space (multi-line editor with font switching). Play room now supports repeat N/end blocks directly in the prompt. Music and Art rooms get a REPL overlay panel (hold Space ~0.5s to toggle). Enter runs each command live. No font changes.
  • All rooms reset to defaults when leaving or clearing: music resets instrument to piano and letters mode off, art resets to paint mode with default color.
  • Code space: title bar hidden (slightly larger font), room headers no longer show "letters off"/"paint on"/"write on" labels (were confusing in code context).
  • Closing code space (via menu X or room switcher) now stops any currently running code, matching Esc behavior.
  • Title bar rebuilt as single render_line widget: room title always centered, indicators always right-aligned to viewport border. Consistent positioning in both normal and code mode. Code panel uses bright purple border, hints panel has light background with "Code to try:" in gutter. "Press Tab for Menu" and "Space: Run" use orange background for visibility. No divider between code editor and hints (gutters touch).
  • Esc now stops demo playback in any room and opens the room switcher. Music room loop hint changed from "Space+Space: stop" to "Esc: stop" (both still work). Looping state now shows red "Looping and recording // Play on top" instead of green "Looping!".
  • Music room code runner: key colors now cycle properly (purple, blue, red, off) instead of all staying blue.
  • Shutdown confirm screen now auto-dismisses after 3 seconds with a visible countdown. Power button must be tapped twice within that window to shut down.
  • Volume steps redistributed for more even perceived loudness: 0/15/35/60/85/100 instead of 0/25/50/75/100. Labels: Sound Off, Whisper, Quiet, Medium, Loud, Full.
  • Color legend no longer shifts the viewport off-center; it floats to the right of the border independently.
  • Pressing brightness media keys now shows a toast: "Go to the Parent Menu to change brightness" (shown once, not repeated while visible).
  • Power management overhaul: simplified from 3 states (sleep face, screen off, shutdown) to 2 states (sleep face, shutdown). Removed DPMS screen-off. Timers now adapt to charger: on charger with lid open, 5 min to sleep face, no auto-shutdown. On battery, 2 min to sleep face, 10 min to shutdown. Lid close shows sleep face immediately and shuts down after 10 min (was 30 sec). Lid reopen resets all timers.
  • Live boot awareness: splash screen on first USB boot explains Purple will need the USB again after shutdown. Sleep face and parent menu also show USB reminders during live boot.
  • Music Room: looping hint now says "Play on top, keep recording!" so kids know it's still recording. Hint text responds to caps/double-shift changes immediately (was only updating on room switch).
  • Music Room loop layers now preserve their instrument: previously recorded layers play back with the instrument they were recorded with, not the currently selected one.
  • Parent menu: "Install on this computer" is grayed out with "(re-insert USB)" when the USB drive has been removed. Updates live if USB is re-inserted while menu is open.
  • Boot now waits for the GPU display to be ready before starting, fixing black screen on older hardware (MacBook 2014, some ThinkPads). Removed forced DPCD backlight parameter that could turn off the screen on unsupported panels.
  • Live USB safe-to-remove indicator: when booted from USB, a blinking USB icon appears in the title bar while the system caches to RAM. Once done, it changes to a green eject symbol meaning the USB can be safely removed.
  • Littles Mode music: space bar no longer triggers the loop station. Loop hints are hidden. Kids just press keys to play sounds.
  • Art Code Space hints: replaced individual direction commands with a square-drawing example using repeat/turn/forward. Removed tilde (~) as shortcut for repeat template (backtick still works).
  • Code Space tab menu: "Tab: Menu" changed to "Press Tab for Menu" with higher contrast color when inactive, so users can discover how to open the menu.
  • Modal hint text: standardized format across all modals (consistent arrow symbols, "Esc cancel" everywhere escape works, no "to" filler words, uniform spacing). Fixes "Esc to cancel" wrapping onto two lines in Code Space and Littles Mode dialogs.
  • Littles Mode: parent menu option to lock the app into a single activity (Music or Art) for young kids. Disables room switching, Tab, Code Space, and the room picker. Long-press Escape still opens the parent menu.
  • Code Space toggle: parent menu option to enable/disable Code Space entirely. When off, Code Space is hidden from the room picker and can't be activated.
  • Clear Rooms confirmation: fixed dialog max-height so the "No, go back" button and Escape hint are no longer clipped off-screen. Added Escape hint.
  • Play mode "Tab: more hints" text now replaced with equal-width spaces instead of hidden when autocomplete is active, preventing hint text from shifting due to center alignment.
  • Power button tap now shows "Press power button again to shut down" confirmation screen. Any other key cancels back to normal. Idle sleep screen unchanged.
  • Debug ISO: every build now produces a .debug.iso alongside the normal ISO. Debug ISO shows GRUB menu, kernel messages, systemd startup, X11 errors on screen, and drops to a debug shell if Purple crashes.
  • Music Code Space: added "letters on" / "letters off" commands to toggle letter sounds mid-code, matching art mode's "paint on" / "write on" pattern. Header shows current letters state in code mode.
  • Code Space: Tab+Enter now runs code (same as Tab+Space). Menu label changed from "x: close" to "x: exit code" to clarify it exits the entire code space.
  • Code Space tab menu is now an inline bar in the bottom gutter instead of a modal popup. Shows "tab space: run · c: clear · x: close" dimmed when inactive, lights up when Tab is pressed (sticky tab).
  • Play mode "Try" hints auto-cycle every 60 seconds and on room switch. Tab also cycles them when no autocomplete is active. "Tab: more hints" shown when Tab is available for cycling.
  • Code Space editor bottom border shows "Shift Space: run Tab: menu" hint text.
  • Code Space toggle in Esc switcher now shows "Press Space or Enter" when selected, matching other buttons.
  • Volume adjustment no longer freezes: removed per-step mixer reinit and made amixer call non-blocking.
  • Display settings (brightness/contrast) no longer freeze: made xrandr calls non-blocking and cached display outputs.
  • Music room header: when code space is open, shows just the instrument name (hides "Tab" and "Letters" toggle since letters aren't programmable from code mode).
  • Art room header: when code space is open, shows "paint on" / "write on" labels instead of "Tab".
  • Art room cursor: when code space is open, cursor is a gold ☺ smiley instead of the 3x3 paint ring. Doesn't blink unless there's text underneath (blinks to reveal the text).
  • Code space tab menu: added "Clear (C)" option to clear the code buffer. Close shortcut changed from C to X.
  • Volume modal: Tab key now dismisses the modal (previously got stuck).
  • Room switching no longer flickers: room content swaps under the picker overlay before it dismisses, so you never see the old room flash.
  • Room picker redesigned: Code Space toggle is now a wide button spanning the full width of the 3 rooms with a toggle indicator (● on / ○ off). Volume and Clear Rooms (renamed from Start Fresh) are side by side below at 50% width each. Clear Rooms shortcut changed from Enter to C. "Extras" label added above the non-room options. Bottom hint simplified to "Arrow keys to move, Enter to pick" (removed "Space: Code Space" and separate arrow labels). Confirmation dialog updated to say "Yes, clear rooms."
  • Code mode: removed 2 wasted rows below the compact indicator by removing margin and adjusting font ratio from 0.667 to 0.69, allowing a slightly larger font in code split mode.
  • Code space: scrollbar appears in right gutter when content overflows the visible area. Scrollbar is visual only, arrow keys control scrolling.
  • Code space: 1-cell gutter padding around text editor and hints panel so text isn't against the border. Keywords (repeat, end, choose, fast, slow, etc.) are underlined in the editor across all rooms. Music hints corrected to show real instruments (marimba, xylophone, ukulele, musicbox). Instrument names autocomplete after "choose" or "instrument". Fast/slow tempo difference widened (fast: 40ms, slow: 600ms, was 80ms/400ms).
  • Volume knob now reinitializes the audio system when adjusted, recovering from stale audio connections (fixes sound randomly stopping in VMs).
  • Room picker redesigned: Code Space, Volume, and Start Fresh are now 3 equal boxes in a row (same size as room boxes) with icons (robot for code, volume icon, broom for clear). Code Space toggle shows robot icon. Start Fresh confirmation dialog uses up/down navigation (consistent with brightness adjust) and is properly sized. Sticky shift banner replaced with a small shift icon (⇧) near the caps lock indicator in the title bar. Code editor is now 2/3 width with an adjacent 1/3 hints panel showing room-specific code examples. Room hints ("Try pressing letters...") hidden when code space is open. Play room input stays visible when code space opens but cursor blink is disabled.
  • Code Space improvements: Art mode autocomplete for paint/write/left/right/up/down commands. Music mode autocomplete for choose/instrument/fast/slow. Art mode defaults to paint on, unrecognized text paints characters on canvas. Music code supports "fast" and "slow" line prefixes for tempo control. Play mode code results aggregated into single block with compact display (no "= N emoji" labels). Code header changed from "Ask → Your code says:" to "Your code says...". COLOR_RESULT tokens in code output now render as color swatches. Art canvas clears before code runs, music colors reset before code runs. Play room scrolls to bottom when closing code space. Removed art mode "Keep drawing / New drawing" confirmation dialog when switching rooms. Added "Start Fresh" option in room picker (with "Are you sure?" confirmation) to clear all rooms and code buffers at once.
  • Music room loop station: replaced invisible space-replay with a loop pedal. Space starts recording (progress bar + countdown), Space again starts looping with a cycling position indicator. Notes played on top are automatically added to the loop (no explicit merge step). Space or Escape stops. 20s max recording with auto-loop when full. Hint bar shows state-specific instructions.
  • Code Space polish: restored 3-row room indicator as default (compact 1-row only when code space open). Removed line numbers and tildes from code editor for kid-friendliness. Added inline autocomplete ghost text near cursor. Viewport border dims when code space open, bright purple border on code editor. Room picker hint now shows "Space: Code Space". Volume modal supports left/right arrows.
  • Code Space overhaul: replaced block-based code panel with per-room text editor. Kids type code and run it with Shift+Space. Each room has its own buffer that persists across room switches. Room picker redesigned with 3 rows: rooms, code space toggle, and volume button. Removed Code room, watch-me recording, pane switching, and shift+space/shift+enter shortcuts.
  • Code panel: removed diagonal zoom effect during open transition. Changed color scheme from blue/navy to dark purple (space theme). Code is now a proper button in the room picker (press 4 or C) instead of a dashed text option. Added focus indicators: focused panel gets a purple border, unfocused panel is dimmed. Code panel auto-focuses when opened.
  • Shift actions: sticky shift timeout increased to 8s with a full-width yellow banner showing contextual hints (e.g. "Letter: UPPERCASE", "Space: play", "Enter: switch pane"). Shift+Space replays code panel, Shift+Enter toggles focus between viewport and code panel. Escape picker shows a pane row (Main/Code) when code panel is open, with up/down to switch between pane and room rows.
  • Autocomplete suggestions ranked by kid-likelihood (e.g. "tr" suggests tree before triangle) instead of alphabetically. Rankings defined in rankings.txt, unified across emojis and colors.
  • Expanded profanity filter with 17 new words. Filtered speech now shows a muted speaker icon (🔇) that fades after 1.5 seconds instead of showing "··" forever.
  • Inline code panel: press C in room picker to toggle a live code trail below the viewport. Blocks appear as you play music, draw in art, or evaluate expressions. Arrow down to edit, backspace to delete, space to replay. Font shrinks to 2/3 with a zoom-perspective curtain transition. Each room has its own panel content. Room picker now shows 3 rooms (Play, Music, Art) with Code as a separate dimmer option below a divider. Held keys produce only one block in music. Escape in panel returns to room (doesn't open picker). Character keys in music/art exit panel focus and pass to room. Switching rooms closes the panel. Panel scrolls with up/down arrows when focused, showing scroll indicators. Art panel has a Logo-like guided flow (Move/Paint, direction, distance) that executes turtle commands on the canvas. Play panel has an expression input with it variable for accumulating results.
  • Viewport widened from 112 to 134 columns, using more horizontal screen space on all displays. Font size calculation now fills both dimensions evenly instead of leaving wide black bars on the sides.
  • Volume keys now control actual system volume (via ALSA). Previously they only showed a visual toast. Sounds are also louder overall: instrument synthesis uses 90% peak level (was 50%) and per-sound volume caps removed.
  • Installer: post-install reboot now uses a 30-second countdown instead of waiting for Enter (which was unreliable across hardware). Confirmation input loop simplified from dd/od pipeline to bash read.
  • Sleep screen: removed countdown timers and lid-closed warnings (kids don't need them). Lid shutdown delay reduced from 2 minutes to 30 seconds. Idle shutdown reduced from 30 to 25 minutes, removed the separate "dim" and "shutdown warning" stages.
  • Code room: adjustment mode now dims non-active blocks and shows a solid gold frame (with ▲▼ arrows) instead of blinking. Repeat blocks use Scratch-inspired brackets that visually wrap the repeated section, with "Repeat block" (one block) and "Repeat line" (all blocks) options in the Tab menu. While adjusting a repeat, left/right arrow resizes the bracket scope and up/down changes the repeat count.
  • Play room: speech indicator shows ·· while generating TTS audio, then 🔊 while playing, so it no longer looks frozen during synthesis.
  • TTS cache: punctuation and case no longer cause cache misses (e.g. "hello!" and "Hello" now share the same cached audio).
  • Speech filter: blocked content is silenced instead of speaking a random silly word, fixing TTS cache misses on leet-speak number strings.
  • Play room: left/right arrows now move the cursor in the ask prompt. Backspace and typing work at cursor position. Tab is the only way to accept autocomplete (hint updated to show "Tab").
  • Code room: replaced invisible multi-level drill-down with visible VOICE blocks. Music and Art room lines now show a separate block for instrument/mode (e.g. "Mar" for Marimba, "Ltr" for Letters, "Pnt" for Paint). Each block is independently adjustable with Enter + up/down. Instruments captured during Watch Me and set during playback.
  • Font auto-sizing: app now measures actual terminal dimensions at startup and adjusts Alacritty font size to fit, replacing brittle DPI-based calculation. Shows "Loading..." during adjustment.
  • Power button: tapping power while on the sleep screen now shuts down (previously did nothing). Fixed power button stopping working after waking from sleep. Added safety checks so lid close shutdown can't get permanently stuck.
  • Boot: suppressed kernel driver errors, Ubuntu MOTD, and Xorg startup messages so only the purple splash screen is visible during startup.
  • Code room: MODE_SWITCH blocks are locked once content blocks follow them, preventing room changes that would make existing blocks meaningless.
  • Code room: Space and Escape now properly stop playback even when playback has switched to another room. Escape also stops playback when code room is active.
  • Watch Me mode: Escape no longer opens the room picker after ending Watch Me.
  • Code room: Play (QUERY) blocks now show full text and stretch to fit, with ellipsis if too wide. Compose text appears live in the block itself instead of only at the bottom. Room picker in Tab menu now matches the regular room order (Play, Music, Art) and supports number key selection.
  • Art room: replaced disappearing "Press Tab to switch tools" overlay with a permanent hint bar below the canvas
  • Code room: Enter now starts a new line (inserts MODE_SWITCH in adjustment mode). Menu key inserts an enter symbol. Enter symbol also available in Tab menu. Enter icon changed to nerd font symbol.
  • Code room: up/down arrows now always navigate between lines. Press Enter on adjustable blocks (mode, pause, stroke, repeat) to enter adjustment mode, then up/down changes the value. The block blinks gold while adjusting. Enter or Escape exits adjustment mode.
  • Watch Me mode: pressing Space in Music room now ends Watch Me (space = "play", so it's a natural stop gesture). In Play/Art rooms, space still types normally during Watch Me.
  • Watch Me mode: Escape now exits back to Code room (was previously swallowed). Long-hold Escape exits Watch Me and opens parent menu. Auto-ends after 15 seconds of inactivity.
  • Art room: text typed in write mode now has a transparent background matching the canvas (removed row-based tinting)
  • Removed save slot indicators from Code Room main view: saves 3 rows for the code canvas, save/load still accessible via Tab menu
  • Volume toast replaced with custom widget: no more flickering or duplicate toasts when changing volume rapidly, and toast properly hides when opening room picker or parent menu
  • Caps mode now applies to all text in Code room, Code menu, Room picker (Escape menu), and fixed "Tab" labels in Art/Play modes.
  • Room picker options are now 4-high: blank row, icon + room name + icon, "Press N", blank row. Wider boxes to fit the new layout.
  • Replaced trumpet instrument with ukulele: warm plucked-string sound that sits better on laptop speakers.
  • Unified background color: removed darker outer border, everything is now one consistent purple. Added spacing between viewport and room indicators for breathing room.
  • Room picker: each option now shows the room name and "Press N" on separate lines instead of "N RoomName"
  • Bottom bar: room badges now show icon + name (e.g., "Play", "Music"), centered, with uniform width. Names go ALL CAPS when caps lock is on.
  • Music mode: replaced Steel Drum and Kalimba instruments with Xylophone and Trumpet for more variety and familiarity
  • Art mode: toggling caps mode no longer strips background colors from typed text (row tints and paint colors now preserved)
  • Play mode: fixed continuation lines being indented 1 cell too far when colored text blocks wrap across multiple lines
  • Caps Lock key now toggles caps mode on a single press (previously required double-tap like Shift)
  • Room picker and install confirmation dialog: up/down arrows now work in addition to left/right for navigation
  • Music room: grid key labels, note names, and percussion names now respect caps mode (show uppercase when caps lock is on)
  • Power button: hold detection moved out of Textual into asyncio for reliability across hardware. Pressing power button during parent terminal shell now triggers system shutdown via logind instead of crashing.
  • Code mode (F4): renamed from "Command" to "Code" so parents immediately see the value (coding for kids) and the room lineup reads Play, Music, Art, Code
  • Code mode: "Watch me!" replaces F5 recording. Empty canvas shows "Watch me!" prompt, Enter opens room picker, kid plays in chosen room, F4 returns with captured blocks. Also available via Tab menu. F5 key removed entirely.
  • "Adjust Display" menu item hidden on hardware where xrandr brightness/contrast controls don't work (e.g. Surface Laptop 2)
  • Rooms renamed: Explore is now Play, Play is now Music, Doodle is now Art
  • Music room: Space with no F5 recording replays recent key presses (last 10 seconds or since last pause)
  • Music room: F5 recording and playback can now happen simultaneously (overdub, play over yourself)
  • F5 badge added to bottom menu bar with keyboard icon
  • Recording indicator changed from generic record symbol to "Capturing keys" text with better spacing
  • All recording-related text clarified to say "key presses" (toasts, hints) to avoid confusion with voice recording
  • Boot splash: solid purple screen with "Starting up..." message during boot, using VT escape codes on tty1 (console output redirected to tty2). Replaces Plymouth, which was unreliable across hardware.
  • Music room: Enter now changes instrument in Letters mode too (previously only worked in Music mode).
  • Play room: number words (one, two, three) and comma-separated lists now work. "one, two, three dinos" shows a dino abacus. Multiplication with emojis shows grouping ("2 x 3 cats" shows 3 groups of 2 cats).
  • Play room: type "..." to continue patterns. Number sequences (5 4 3 ...), emoji pyramids (5 cats ...), ranges (2 4 6 ... 20), and growing sequences (cats ... 5) all work.
  • Play room: Enter on empty input recalls last command into the input field (instead of replaying speech). Hint below input shows "Enter to recall: ..." after first command.
  • Play room: colors now act as adjectives, modifying the next item. "red apple green banana" shows a red apple and green banana instead of mixing all colors together.
  • Music room: note/percussion labels now properly centered in cells. Added "Enter: change instrument" hint at the bottom.
  • Recording: F5 now always starts/stops recording (no more F5 playback). New recording overwrites previous. Space in Music room plays back the recording.
  • Music room: note/percussion labels now show with ♪ on either side (e.g. "♪ G ♪") near the upper-right of the cell, in a muted color to avoid confusion with the main key letter
  • Code mode (F4): renamed from "Build" to "Code" to clarify it's coding; icon changed to console; gutter icons now match room title bar icons (Nerd Font); Tab menu "Mode..." replaced with "Room..." showing 3 rooms (Music, Art, Play) with default sub-modes
  • Art: default mode changed from Write to Paint; Paint now appears on left side of Tab header
  • Code mode: MODE_SWITCH blocks now show room icon (same as title bar); non-default sub-modes show a hint suffix; cycling targets now cycles rooms instead of all 5 sub-modes
  • Code mode: direct coding UX, auto-inserts default mode on empty canvas, Up/Down inline adjusts adjustable blocks (MODE_SWITCH/PAUSE/STROKE/REPEAT), Tab menu trimmed to 7 flat items (removed Record/Adjust/Enter), context-sensitive hint bar shows what Up/Down does
  • Code mode: Scratch-inspired block redesign with 6 block types (KEY, QUERY, STROKE, PAUSE, REPEAT, MODE_SWITCH); uniform 5-char grid; explicit PAUSE blocks replace invisible timing gaps; no auto-collapse; mode-aware editing (Play uses compose mode for QUERY blocks, Art paint uses STROKE blocks); v1 save format auto-migrated to v2
  • Art: text on painted backgrounds now uses black or white for contrast (was always white/dark); grayscale paint backgrounds no longer disappear when typing over them
  • Play: narrow emoji (heart, snow, etc.) always get a padding space to prevent visual overlap in terminal
  • Play: plus expressions now show + between items (e.g. apple + banana shows 🍎 + 🍌)
  • Play: "red clue" and "red + clue" now produce the same inline format with arrow
  • Play: unknown words now render as per-letter colored blocks instead of plaintext
  • Play: auto-mix results (e.g. "red apple") now show + between items in the input display
  • Play: emoji on colored backgrounds now have spaces between them for readability
  • Play: long lines now wrap at colored block boundaries with arrow-indented continuation lines, fixing clipped padding on wrapped colored letters
  • Play: bare negative numbers (e.g. "-5") now show as colored text blocks instead of a plain "= -5" math result
  • Play: color+emoji results (e.g. "blue cat") now display inline on one line when compact enough, instead of separate lines
  • Play: replaced ▶ triangle with → arrow throughout (Ask prompt, answer lines, color swatches) for a cleaner look
  • Play: keyboard color map (4-row legend) now shows in the bottom right, same as Art paint mode. Updates active row indicator as you type.
  • Play: Tab now accepts autocomplete suggestions (in addition to right arrow). Hint shows "→ Tab".

  • Play: number digits in colored blocks now use the full grayscale gradient (1=white to 0=black) matching Art room, instead of flat gray

  • Play: when math typos are auto-corrected (e.g. "=" treated as "+"), a "→" line shows the corrected expression above the answer

  • Play: abacus now starts at 11 instead of 10; 10 shows as dots with 5+5 grouping so it's countable

  • Play: color adjectives (bright, dark, light, pale, deep, vivid, dull, muted, neon, soft, rich, warm, cool) modify colors, showing base swatch and result (e.g. "bright green", "dark light blue")

  • Play: emoji consolidated into single pack file (packs/core-emoji); added ~80 new emoji (shapes, body parts, household items, space, animal sounds); removed common-word synonyms (good/bad/great/sweet) that made text substitution weird; "love" now maps to ❤️ instead of 😍

  • Play: color swatch mixing arrow changed from → to ▶ to match the triangle used everywhere else

  • Play: default colors updated to Crayola-style values (red, blue, green) so they match what kids expect

  • Play: abacus rows now show ones at bottom and largest place value at top, matching standard abacus layout

  • Play: "green potato peanut" now shows potato emoji on green bg + "peanut" letters in green (colors + emojis + text mix together)

  • Play: both ask and answer lines use ▶ triangle, aligned. Ask is purple, answer is white. 🔊 icon appears before the triangle when TTS is active

  • Play room: autocomplete now accepted with right arrow instead of space. Space always types a space, so you can type partial words without forced completion.

  • Play room: typing a complete word (like "apple") shows its emoji/color in the hint area as confirmation, instead of the hint disappearing.

  • Play room: numbers ≤9 show plain spaced dots; 10 to ~9 billion show a colored abacus (10 colors); beyond that show colored number blocks

  • Play room: simple addition shows grouped dots (● ● ● ● ●); simple multiplication shows repeated groups (● ● ● ● ● ●)

  • Play room: colors auto-mix with emojis, other colors, and text without needing + ("red apple" → 🍎 on red, "red blue" → mixed purple, "tavi red" → mixed letter blocks)

  • Play room: + operator still works the same way but is now optional for mixing

  • Play room: only letters and numbers become colored blocks (symbols like + stay as plain text)

  • Play room: unrecognized text now shows colored blocks with letters visible on top (instead of blank colored blocks)

  • Play room: number dot visualization uses larger dots (⬤ instead of •); bare number input (e.g. "67") shows only dots without repeating the number

  • Code mode: cursor is now a blinking insertion point between blocks (like a text cursor); Enter inserts visual line breaks; backspace deletes the block before the cursor

  • Art room: gutter is now a purple checkerboard pattern instead of solid black, visually distinct but not jarring

  • Code mode: consecutive identical blocks auto-collapse into one block with "xN" count badge

  • Code mode: up/down arrows now adjust block count (when count > 1) or gap timing (when count is 1)

  • Code mode: REPEAT blocks at end of a line show repeat count in the gutter

  • Recordings auto-collapse consecutive identical actions into counted blocks

2026-03

  • Music room loop: single space during looping is now ignored to prevent accidental stops. Double-tap space (two presses within 2 seconds) stops the loop. Hint updated to "Space+Space: stop". Escape still stops immediately.
  • Mouse cursor now hidden globally using XFixes (previously only hidden on root window, still visible inside Alacritty).
  • Post-install reboot no longer hangs: uses forced reboot with sysrq fallback instead of graceful systemd shutdown.
  • Room picker: removed "Extras" title. Code Space toggle now shows robots on both sides, radio-style On/Off circles on a second line, and "Turn On"/"Turn Off" hint. Volume and Clear Rooms show icons on both sides like rooms do. When code space is active, picker opens focused on the Code Space row. Fixed compact room indicator not docking to bottom of screen in code space mode (CSS specificity fix).
  • Play room: "Try" hints cycle through different suggestions each time the room is opened (dinos, sharks, colors, speech, autocomplete tips). "Enter to recall" changed to "Enter to try again" for kid-friendliness.
  • Removed function keys entirely: No more F1-F4 for room switching or F10-F12 for volume. Bottom bar shows room icons only (no F-key labels). Mute icon appears on right side when volume is zero. Room switching via Escape picker (tap Escape, press 1-4 or arrow left/right, Enter to confirm). Volume via up/down arrows in picker or hardware media keys. Keyboard calibration removed from parent menu and startup.
  • Parent menu: Shut Down option: Added "Shut Down" to parent menu for immediate shutdown. "Exit" renamed to "Exit Parent Menu" for clarity.
  • Dynamic padding in Alacritty: Enabled dynamic_padding so leftover pixels are distributed evenly around the cell grid, centering it with purple padding on all edges
  • Font sizing simplified: Replaced runtime Alacritty cell probe with hardcoded JetBrainsMono ratio; reduced fill from 80% to 75% for more headroom on small screens
  • Music room: Enter cycles instruments (Marimba, Steel Drum, Kalimba, Music Box) in Music mode; header shows current instrument name
  • Music room: note name flashes on keypress in Music mode, dim text appears below key letter for ~1 second then fades (e.g. "G", "F#", "kick")
  • Toast notifications for mode switches: Music room Tab (Music/Letters), Music room Enter (instrument name), Art room Tab (Paint/Write), and F5 recording start/stop all show a brief toast
  • Install from Parent Menu: In live boot mode, Parent Menu now shows "Install on this computer" option with a confirmation dialog; GRUB menu is hidden (boots straight to live mode); parents never need to interact with GRUB
  • Art paint: hold letter then arrow paints continuously: Holding a character key and then pressing an arrow now paints that character's color while moving, same as holding arrow first then letter
  • Kid-proof power button: Tap shows sleep screen (cute, not scary, any key wakes); hold 3s shows "Bye!" and shuts down (phone-like); logind set to ignore so TUI controls all power UX
  • Lid close delayed shutdown: Lid close now turns screen off immediately but waits 2 minutes before shutting down (was 5 seconds); opening lid cancels shutdown; prevents accidental shutdowns when kid briefly closes lid
  • Code mode: Play clears state first: Pressing Play in Code mode now clears the target mode's canvas/colors before replaying, so playback reproduces the recording from a clean slate
  • Code mode: bright gutter blocks: Mode icons in the left gutter are now solid bright colored blocks instead of dim text icons
  • Code mode: Up/Down navigates lines: Arrow keys now jump between lines (like a text editor) instead of adjusting timing
  • Code mode: timing adjust moved to Tab menu: Gap timing, repeat count, and target cycling are now in the Tab menu under "Adjust"
  • Removed F9 theme toggle: Dark mode is now always active; F9 key and theme badge removed from the function bar
  • Larger UI: Font sizing now uses maximum size that fits the screen instead of 75% fill; UI is bigger on all screens. Code space font ratio derived from layout constants instead of hardcoded.
  • Code Mode v2: F5 recording: F5 starts intentional cross-mode recording (replaces always-on capture); press F5 again to stop; press F5 a third time to play back; blinking ⏺ indicator in title bar while recording, ▶ while playing
  • Code Mode v2: Tab menu: Tab opens a vertical menu modal in Code mode with Record, Insert, and Program sections; "Record in..." starts recording in a specific mode/sub-mode; replaces Enter code mode
  • Code Mode v2: multi-line blocks: Blocks display across multiple lines with mode icons (♫ 🔤 ✎ 🖌 🔍) in a left gutter; MODE_SWITCH blocks start new lines; long sections wrap with indented continuation
  • Code Mode v2: Enter inserts ↵: Enter key now inserts a ↵ control block (useful in Play and Art) instead of entering code mode
  • Code Mode v2: repeat max 99: Repeat block maximum increased from 9 to 99
  • Music room Space: Space now plays the last F5 recording instead of heuristic-based replay
  • Code Mode (F4): Replaced turtle-graphics Code mode with cross-mode visual programming; automatically records Music and Art actions as colored blocks with timing gaps; Space plays the program back live in the real mode; up/down adjusts timing between blocks; 9 save slots (hold number to save, tap to load)

2026-02

  • Passwordless system: Removed default password; system auto-logs in with no password prompt, passwordless sudo for all commands
  • Music room numbers speak in Letters mode: Number keys (0-9) now say their name aloud in Letters sub-mode, just like letter keys do
  • Deterministic TTS: Speech synthesis now produces identical output for identical input; single letters use phonetic pronunciation (A -> "ay"); short utterances padded for prosody stability; WAV output trimmed and normalized; aggressive caching avoids re-synthesis; common words pre-generated at startup
  • Music room word recognition: In Letters mode, if typed letters spell a known word (cat, dog, sun, etc.), the word is spoken aloud after replay finishes
  • Music room sub-modes: Tab switches between Music (instrument sounds) and Letters (speaks letter names aloud via TTS); header indicator shows current sub-mode; sessions record which sub-mode each key was pressed in, so replay preserves the mix
  • Music room replay: Press space to replay your recent key sequence with original timing; sessions auto-reset after 30 seconds of inactivity; pressing keys during replay starts a new session
  • Sticky shift replaces double-tap shift: Removed double-tap character shift (caused accidental capitals). Shift key tap activates sticky shift for one character. Double-tap Shift toggles caps lock. Caps Lock key remapped to Shift. Added shift indicator (⇧) in title bar.
  • Live boot default: USB now boots directly into Purple Computer with no installation needed; internal disk is untouched; "Install Purple Computer" available as GRUB menu option
  • Demo: smart camera tracking: Camera now uses dominant-region detection (top vs bottom half) instead of centroid averaging, so it correctly bounces between input area and rendered results; faster response (0.5s vs 2s intervals)
  • Demo: closing screen zoom: "This is Purple Computer" types zoomed in, then zooms out for "Coming soon" line
  • Demo: art music-room text shifted right: "Now let's go to Music room" text shifted right by 1 cell; no zoom-out transition before Music room
  • Demo: auto-pan via OpenCV: Camera automatically follows cursor activity during zoomed-in periods using frame differencing, replacing hardcoded pan coordinates
  • Demo: smooth zoom transitions + camera panning: Zoom transitions now animate smoothly per-frame (smoothstep easing) instead of jumping to a midpoint crop; camera pans follow text as it flows during typing via new ZoomTarget action
  • Demo: dynamic zoom: Demo scripts can now include ZoomIn/ZoomOut markers; post-processing applies smooth zoom effects for text readability
  • Demo: heart segment text: Heart drawing now clears the canvas first, then after drawing adds centered text: "This is Purple Computer." and "Coming soon to your old laptop!"
  • Demo: Music room intro text: After the palm tree drawing completes, text appears at bottom right: "Now let's go to Music room / Play with music and color"
  • Demo: expanded play segment: Demo now showcases emoji math, color mixing, speech, and a welcome message instead of a short 3-line greeting
  • Demo: art intro text: Art segment now types "This is Art room. Write and paint!" with color swatches before drawing the palm tree
  • Demo: Music room glissando: Smiley face builds faster (quicker eyes/nose), then a rapid back-and-forth over the mouth creates a glissando finale
  • Voice clip generation: scans composition segments: generate_voice_clips.py now extracts phrases from demo.json segments (not just default_script.py); supports --variants N to generate multiple audition copies
  • Color words in free text: Typing "purple truck" now shows a purple color swatch alongside the truck emoji; previously color words were ignored without a + operator
  • Vibrant color mixing: Red + blue now produces a vibrant purple instead of a muddy dark one; switched from Kubelka-Munk K/S to Beer-Lambert spectral mixing
  • Composable demo segments: demos can now be composed from named segments via demo.json; --save NAME on play-ai and install-doodle-demo writes segments and auto-builds the composition; per-segment speed control via SetSpeed action
  • Art AI: draw_technique replaces shape examples: planner now generates per-component draw_technique guidance instead of relying on 11 hardcoded shape examples; execution prompt condensed from ~160 lines to ~50 lines of 3 core techniques (horizontal fills, diagonal chains, layered depth)
  • Art AI: human feedback option: press f during judging (triage or per-component) to give free-text feedback that feeds into the next iteration's drawing prompt
  • Art AI: single context view per component: per-component judging now shows only the full canvas with red highlight (no separate zoomed crop), reducing feh dismissals from two to one
  • Art AI: better curvature for organic shapes: new shape_profile field in composition describes curvature with y-coordinates; execution prompt now has an "arched body" example; both plan and component-library sections pass shape profiles to the drawing AI
  • Art AI: quit stops entire training loop: pressing q during human judging now exits the full training loop, not just the current round
  • Art AI: full-image context in component judging: per-component judging shows the full canvas with the component region highlighted (red rectangle) for spatial context
  • Art AI: auto-adjust bounds on disconnection: after rendering a composite, coherence check detects disconnected components and automatically adjusts bounds
  • Art AI: smarter human judging: auto-skips identical components, allows quitting mid-session with q, shows summary of reviewed/skipped/remaining counts
  • Art AI: human judging mode: --human flag replaces AI judge with interactive side-by-side comparison, letting a human pick the better component version
  • Art AI: multi-candidate iteration with focused mutation: AI now generates multiple candidates per iteration (mutation, informed regen, fresh regen) to escape local maxima; judge provides per-criterion scores and specific improvement targets; contradictory learnings are automatically resolved
  • Art AI: structural connection accuracy: AI now plans where parts attach to each other, draws connection points correctly (e.g., fronds at top of trunk), and judge penalizes anatomically wrong connections
  • Demo playback: fix right-side artifacts by clamping cursor coordinates to canvas bounds in demo script generation
  • Art AI: entertaining draw order: AI now draws the subject first with per-element color mixing (fun to watch), minimizes large monotone background fills (boring to watch), and judge penalizes flat backgrounds
  • Art AI: better shape judging and refinement: AI judge now evaluates shape quality (organic curves vs boxy rectangles), refinement escalates from targeted tweaks to full restructuring after repeated losses, and color mixing recipes are passed through to the drawing AI

2026-01

  • Display settings in parent menu: Parents can now adjust screen brightness and contrast via Parent Menu > Adjust Display; settings persist across sessions
  • Visible gutter border: Canvas gutter now has a distinct color (black in dark mode, white in light mode) so users can see the non-drawable border area
  • ESC toggles mode picker: Pressing ESC while mode picker is open now closes it instead of reopening
  • Simplified mode picker: Mode picker now shows 3 options (Play, Music, Art) instead of 4; Write/Paint are now tools within Art, not separate modes
  • Mode picker hint simplified: Replaced text instructions with just arrow symbols (◀ ▶) for pre-readers
  • F-keys work in mode picker: Pressing F1/F2/F3 while mode picker is open dismisses it and switches directly
  • Art tool overlay: Non-blocking overlay appears briefly when entering Art, showing current tool and "Tab to switch"; dismisses on first action or after 1.2s
  • Art tool indicator: Header now shows both tools (Write and Paint) with current tool highlighted; Tab hint between them

2025-01

  • Escape tap mode picker: Tapping Escape opens a mode picker modal; Esc badge added to mode indicator bar
  • Tab toggles paint/write: Removed space-space toggle, now only Tab switches between paint and write modes in Art (avoids accidental triggers while drawing)
  • Space-space toggle: Double-tap space toggles write/paint both ways, requires consecutive spaces
  • Mode switch dismisses prompt: Switching modes while "keep drawing" prompt is showing dismisses it and switches normally
  • Color mixing fix: Similar colors no longer produce brighter results when mixed
  • Demo hides mouse: Demo recordings no longer show the mouse cursor
  • Legend 3 shades: Color legend shows light/medium/dark gradient per row
  • Cursor thick sides: Paint cursor uses heavy lines for sides, light corners
  • Legend updates: Improved color legend visibility in paint mode
  • Paint mode contrast/cursor/legend: Better cursor visibility and contrast in paint mode
  • Add spaces to operators: Play room adds spaces around operators when inserting words
  • Caps fixes and directional typing: Fixed caps behavior and directional typing in paint mode
  • Double tap shift timing: Only trigger shift on double-tap after a pause or space
  • Paint colors don't blend with bg: Paint strokes use pure colors, not blended with background
  • Double tap in paint mode: Double-tap no longer capitalizes in paint mode
  • Arrow held behavior: When an arrow is held, don't auto-advance in other direction when painting
  • Rename modes: Renamed modes for clarity (Music, Play, Paint)
  • Add gutter: Added gutter around canvas so cursor ring can extend to edges