Every project

Changelog

What changed in each project, newest first. The entries come from each project's changelog file or GitHub releases. Projects without a written changelog show their commits, grouped by day. The site checks for new entries once a day.

196 entries from 9 projects, 152 of them numbered versions, since Jun 2026

November 2026

AI Hive

Version 0.56.1

  • Internal: the Claude model picker's labels and the per-model effort lookup read the model table through one function, and the Antigravity settings use the same cached reader as Claude's. No change to the app.

AI Hive

Version 0.56.0

  • Options > Automation > Keep the PC awake (off by default) stops Windows from going to sleep on its idle timer while AI Hive is open, so agents keep working overnight. The screen still turns off and locks.
  • A sleeping agent's card shows Claude's last recap under the conversation's summary, when no work came after it.
  • Ship finished lanes works on an integrator that is asleep: AI Hive resumes its conversation and types the request once it is ready. A scheduled message that comes due on a sleeping agent wakes it too, instead of being missed. Lane agents stay asleep through a ship.
  • A new Claude card names the model and permission mode Claude really starts on, such as "Opus 5.5" and auto, instead of "Opus" and manual. In New Agent, the effort Default follows the model you pick, the mode Default names the mode Claude starts in, and a new Manual entry asks before each action. An agent set to ask before each action reopens that way instead of in auto mode.
  • Clicking in Claude's input box after a collapsed paste such as "[Pasted text #1 +4 lines]" puts the caret where you clicked, and deleting a selection across one no longer eats the text before it.
  • An empty Claude input box no longer counts as an unsent draft, so idle Claude agents fall asleep again.

October 2026

AI Hive

Version 0.55.1

  • The Options panel lays its settings out in two columns, so the whole panel fits on a 1080p laptop screen. A window too short for it scrolls the panel, and one too narrow for two columns stacks them.
  • The Options panel's labels and buttons use the same 13px text as the rest of the window instead of a smaller, blurrier size.
  • The detected Claude Code install method moved from a caption in the Options panel to the tooltip of its Manage button.

AI Hive

Version 0.55.0

  • The New Workspace dialog has a Lanes box. Tick it and the workspace starts with Lanes on, so the first Claude agent you add gets its own lane and you can make it the integrator right away. It needs a git repository, and a GitHub clone always is one.
  • In New Workspace, an existing folder no longer leaves an empty gap sized for the GitHub fields.

AI Hive

Version 0.54.1

  • A program a Claude agent starts through Git Bash, like a dev server, now ends when you stop or close the agent, or when it goes to sleep. Before, it kept running on its own, and the gear on the card never showed it.
  • A background command an agent starts in its first 16 seconds now lights the gear, so sleep leaves that agent awake instead of ending the command.
  • The time an agent was last active is saved as soon as it changes, not up to 20 seconds later.

AI Hive

Version 0.54.0

  • New in Options: Free up RAM. Sleep inactive agents stops an agent that has been idle for an hour, or for up to 24 hours if you set it, so its memory goes back to Windows. Its card turns black with the conversation's summary, its dot in the sidebar turns gray, and a click resumes the same conversation. An agent that is working, asking you something, running a command or holding a prompt you haven't sent is never put to sleep. It is off until you turn it on.
  • Keep them asleep at startup, on as soon as you turn sleep on, leaves agents that were asleep or idle that long asleep when AI Hive opens instead of starting them all. Turn it off and every agent resumes at startup, as before.

AI Hive

Version 0.53.2

  • The context badge on a Claude card drops as soon as the conversation compacts, instead of showing the old, full reading until the next turn.

AI Hive

Version 0.53.1

  • Copying text from a Claude agent's window keeps a wrapped paragraph as one line, so a reply or prompt pastes the way Claude wrote it instead of breaking at every row. Tool output still keeps every line.

AI Hive

Version 0.53.0

  • Restart to update now restarts AI Hive for you. It saves, closes and opens the app again. If agents are still working, waiting on you or running a command, it lists them first: Restart now interrupts them, Wait keeps them running and the button counts down what is left. The update dialog has a Restart now button too.
  • Shift+Arrow, Home and End grow a selection you made in an agent's history where it is, instead of jumping back to the live screen.
  • The sidebar no longer leaves the gold name on a workspace you just switched away from.

AI Hive

Version 0.52.0

  • Dragging a selection past the top or bottom of an agent's window now scrolls through its history and keeps selecting, faster the further past the edge you hold the pointer. The selection also stays on its text when you scroll with the wheel or the scrollbar.
  • Menus and dropdown lists open at once instead of fading or sliding in.

AI Hive

Version 0.51.0

  • Bold word starts is now called Bionic reading, and its tooltip explains how a bold start helps some readers keep their place in a line.
  • Boldness is now called Contrast, and Options shows it only while Bionic reading is on.
  • With Bionic reading on, the line you are typing no longer turns bold when its text fills a row and the caret moves to the row below.

AI Hive

Version 0.50.0

  • Changing the terminal font or letter spacing no longer flickers through the old screen in the new font. Each terminal on screen shows "applying the new font" until the agent has redrawn, at most 3 seconds.
  • Options > Terminal font ends with "Load a custom font...". It takes .ttf, .otf and .ttc files, explains why it refused anything else, and keeps the font across restarts.
  • Bold word starts has a Boldness setting from 1 to 5 under the switch. Level 1 is the old plain bold, level 2 draws a heavier bold, and levels 3 to 5 also fade the rest of each word. It starts at 3, and each terminal font remembers its own level.
  • Dropdowns open below their box instead of covering it.
  • The New Agent dialog keeps one width while its conversation list loads. Long conversation previews are cut short in the list and show in full in their tooltip.

AI Hive

Version 0.49.0

  • Options > Appearance has a Terminal font picker and Letter spacing for the agent terminals. Pick Cascadia Mono, JetBrains Mono NL, IBM Plex Mono, Atkinson Hyperlegible Mono or OpenDyslexic Mono, or Theme font for the skin's own (Share Tech Mono in Adeptus Mechanicus). Default keeps Consolas, so nothing changes until you pick. Letter spacing adds 0 to 3 px between letters, and box-drawing lines stay solid at any spacing.
  • A new Bold word starts switch in Options > Appearance draws the first half of each word in bold in every terminal. Code, paths, links and the line you are typing keep their regular weight. It starts off.
  • The New Agent model list matches Claude's own /model menu, older models included (Opus 4.8, Sonnet 4.6 and the rest). The "[1m]" entries are gone: Opus, Sonnet and Fable already run with a 1M context window. Agents saved on one still launch as before.
  • The Default model and effort entries in New Agent say what Claude will run, for example "Default (high, saved by /effort)". Default uses the last pick /model or /effort saved in any terminal, which looked like the previous agent's settings carrying over.
  • Answering one of Claude's question forms puts a dot on the terminal scrollbar, a yellower shade of your prompt dots, so you can scroll back to what you answered.

AI Hive

Version 0.48.1

  • An agent you closed before typing anything to it comes back as a fresh session. It used to show "No conversation found with session ID" above its prompt, and in a folder with other conversations it could come back holding another agent's chat.
  • When the window stops responding for 3 seconds or more, AI Hive writes where it was stuck to hang.log, next to your session file. The next launch moves it to hang.log.1, so a freeze you had to close AI Hive in keeps its record. Attach both to a report of a freeze.

AI Hive

Version 0.48.0

  • At launch AI Hive starts the agents of the workspace it opens on first. Agents in your other workspaces wait until those have their prompt, then start two at a time, and opening one of those workspaces starts its waiting agents straight away. Starting all of them together used to freeze the window for up to 1.2 s while the agents in front of you loaded. A card still waiting shows its loader, and closing AI Hive before it starts brings it back next launch.

AI Hive

Version 0.47.0

  • Opening AI Hive no longer waits on GitHub. It used to fetch and install updates before showing a window, which took about a second on every launch. Now a new Options switch, Update AI Hive in the background (on by default), checks a minute after the window opens and then every hour. It installs a newer version while you work, the button by the version number reads "Restart to update", and the next launch runs it. An update that needs new Python packages waits for your click, and so does a folder that is off main or has local changes. Switched off, only the button checks.
  • The launch no longer copies your agents' conversations or scans them for plan-limit stops on the window's thread. Both run in the background while the window builds, which took about 0.6 s of freezing off the launch. Agents still wait for the backup copy before they start.

AI Hive

Version 0.46.1

  • The New Agent dialog opens without waiting for its list of past conversations. The list loads in the background while the resume picker says "Loading conversations", and OK stays off for a Claude agent until it arrives, so Enter can't start a fresh conversation you meant to resume. Over a folder with 131 conversations, the first opening went from about 400 ms to about 80 ms.

AI Hive

Version 0.46.0

  • AI Hive opens much faster when you have many workspaces and agents. The saved theme and console font now apply before the window is built, instead of restyling every widget and redrawing every terminal after it, and the sidebar builds once instead of once per workspace. On a copy of a 15 workspace, 18 agent session, building the window went from 14 to 18 seconds down to 2 to 3.
  • A new agent starts at its card's real size. It used to start at 100 columns by 30 rows and redraw when the card's size caught up, and a conversation resumed from the New Agent dialog stayed wrapped at 100 columns in the scrollback.
  • Each launch writes a PERF startup line to session.log with how long every step took, and a PERF stall line whenever the window freezes for more than 150 ms, naming the terminal output or redraw behind it. Nothing changes on screen.
  • Claude's install is looked up once per launch instead of once per agent, and the tooltip handler starts after the window appears, which trims a little more off the launch.

AI Hive

Version 0.45.3

  • The Adeptus Mechanicus theme has a new aquila crest: a double-headed eagle in phosphor green on a dark glass plate with a green edge. The old grey crest was hard to make out. The new one stays sharp at 150% display scaling.

AI Hive

Version 0.45.2

  • A Claude card taller than 48 rows keeps its scrollback when the card changes size. It used to lose everything above the last screenful, in resumed conversations and open ones alike, so the scrollbar went away and the mouse wheel did nothing.

AI Hive

Version 0.45.1

  • A long Claude reply no longer shows up two or three times over in a card's scrollback. When Claude redraws a reply taller than the card (after the idle recap, closing Ctrl+O, or coming back to the terminal), the rows that scrolled off a second time are copies, and AI Hive now drops them.

AI Hive

Version 0.45.0

  • Ctrl+F in a terminal opens a find box in its top right corner, like Chrome's page search. It searches the agent's whole history as you type, ignoring case, paints every match yellow and the current one orange, shows how many there are and marks each one on the scrollbar. Enter or F3 goes to the next match, Shift+Enter or Shift+F3 to the previous one, and Esc closes the box. Text you selected becomes the search. A phrase the agent wrapped onto two rows is not found. In a full-screen program such as less or vim, Ctrl+F still goes to the program.
  • A mouse wheel over a terminal's scrollbar reaches an agent that tracks the mouse at the spot under the pointer. It used to reach it at the terminal's left edge.

AI Hive

Version 0.44.3

  • In the Illuminated Manuscript and Adeptus Mechanicus themes, the top bar's buttons and pills sit in the middle of the header. They used to sit closer to its bottom edge.
  • The Adeptus Mechanicus aquila plaque is smaller and stays on the top border, so it no longer hangs over the usage pills.

AI Hive

Version 0.44.2

  • The + that picks which usage pills to show sits in the middle of its square. It used to sit low and to one side.
  • The sidebar collapse and expand button in the top bar is bigger, so its panel and arrow are easier to make out.

AI Hive

Version 0.44.1

  • The usage pills say "checking..." at launch instead of "unreadable" when the Claude login expired during a long break. AI Hive checks again every 2 seconds and fills the pill in as soon as the first Claude agent renews the login, instead of waiting up to 6 minutes.
  • The gear on an agent card no longer lights up from launch on for nearly every agent. It counted AI Hive's own activity log helper, which Claude starts a little later, as a background process.
  • With a terminal focused, the Win+V clipboard panel and the Win+. emoji panel now take the arrow keys, Enter and Esc. Before, those keys went to the agent and the panel couldn't be driven or closed from the keyboard. An emoji picked in the panel is typed into the agent. The panels open at the terminal's cursor, and a Japanese, Chinese or Korean input method works in a terminal, showing what you compose at the cursor until you commit it.

AI Hive

Version 0.44.0

  • Ctrl+Tab moves to the next agent in the workspace, left to right along a row and then down to the next row, wrapping back to the first. Ctrl+Shift+Tab goes the other way. If an agent is maximized, the next one takes its place.
  • Options > Help > Keyboard shortcuts lists every shortcut AI Hive has.
  • The button at the top left that hides the sidebar now shows which way it will go: an arrow pointing left while the sidebar is open, right while it is hidden. Its tooltip names the action and the shortcut.
  • Fullscreen (F11) no longer leaves a thin strip of wallpaper at the window's edges, and neither does the maximized window you return to.

AI Hive

Version 0.43.3

  • Hovering a category in the sidebar now shows plainly which one the pointer is on: the header gets a visible tint, its arrow lights up in the accent colour and its count brightens. The category's outline stays visible under the tint instead of disappearing.
  • An agent no longer shows a "?" when it hasn't asked anything. Claude sometimes signals a question it never asks, and the "?" then stayed lit on an agent that was done. AI Hive now waits until the question is actually in the conversation before it shows the "?".

AI Hive

Version 0.43.2

  • A narrow card header no longer cuts its chips off mid-word, such as "Opus 5.5 · high ·" or "10% of 1". As the card narrows, the header drops whole words in a fixed order: the task summary shrinks to a clipboard icon, then the word integrator goes, then the model's mode and effort, then the " of 1M" of the context badge, then the lane counts.

AI Hive

Version 0.43.1

  • A crowded card header no longer shortens the integrator's lane chip to "int...tor". The chip drops whole words instead, the word integrator first since its icon already says it, then the counts. The chip's tooltip still lists the role and every count.

AI Hive

Version 0.43.0

  • Giving an agent its own lane, from the New Agent dialog or Restart in own lane, now turns the workspace's Lanes toggle on, so the header no longer says Lanes is off beside a laned card.
  • Make integrator works on an agent without a lane once the workspace has a lane. After you confirm, the agent restarts in its own lane in a new conversation and becomes the integrator.
  • The + that brings back closed usage readouts is now a square button with the same bold + as the add workspace button.

Ironlog

15 commits

  • 2e2a712 Publish the current build: fixes from the joint Claude and Luna review
  • 0b46ce7 Report the carbs imported cans lose
  • 2729775 Mark the review fixes ready to ship
  • 42d47fb Offer the import when exercise edits are all an old install has
  • ee53431 Fix what Luna's full-diff review found
  • 800f1c1 Keep built-in holds timed after they are hidden
  • 8a015d2 Leave timed holds out of the day's rep count
  • 6ec0f67 Fix the bugs a joint Claude and Luna review found
  • 9f3fdfb Take the assets path from Vite's resolved config
  • 904f4e8 Throw away only generated files after a lane build
  • 0e6aae3 Write down the review flow for lanes and integration PRs
  • 346ca52 Write down the review flow for lanes and integration PRs
  • f5b93a5 Publish the current build: checkbox-styled lift toggles
  • ec2e29d Fix the unstyled lift toggles on the Exercises pane
  • bd43660 Style the lift toggles as checkboxes, not browser buttons

AI Hive

Version 0.42.1

  • After a usage limit, Claude Code's own "continuing automatically" gets to go first. AI Hive used to type Continue a few seconds after the reset, which cancelled Claude's own continuation. Now it waits until 7.5 minutes past the reset and steps in only if Claude hasn't continued.
  • Pressing Esc on Claude's automatic continue now also tells AI Hive not to resume that agent.
  • Before it continues a Claude agent whose reset time has passed, AI Hive checks the account's usage reading and keeps waiting while the limit is still spent. With no fresh reading, it waits up to 10 minutes, then goes by the clock as before.

AI Hive

Version 0.42.0

  • The Close merged agents dialog has a "Don't ask again" box, with a switch under Options > Agents (Confirm Close merged agents) that brings the dialog back.
  • Closing several merged agents at once fades their cards out in turn and rearranges the grid once, instead of once per agent.
  • Pressing F11 to leave fullscreen goes straight back to a maximized window, without flashing at half size first.

AI Hive

Version 0.41.2

  • The usage pills keep loading at startup when the first read fails and say "retrying..." while they try again within seconds. They only show that usage could not be read after 3 minutes of failures, or right away for an expired login.
  • A new agent in its own lane shows the loading animation while AI Hive creates its git worktree, instead of "terminal not running".

AI Hive

Version 0.41.1

  • An agent that writes about the usage-limit menu in its own reply no longer gets the hourglass. Only the real menu counts.

AI Hive

Version 0.41.0

  • Ctrl+Up maximizes the selected agent and Ctrl+Down shows every agent again. A focused terminal no longer receives these two keys.
  • A Claude card's usage-limit hourglass no longer comes back after a resume when Claude redraws the old limit message. A limit the conversation never recorded clears after 10 idle minutes.

AI Hive

Version 0.40.0

  • Resizing a Claude terminal re-wraps its whole scrollback at the new size, not just the bottom screenful. The reflow waits until the agent is idle.
  • A reply paragraph no longer shows up twice in a Claude card's scrollback after Claude redraws its screen while idle.
  • Closing a Codex agent no longer kills the Codex daemon that your other Codex windows share.
  • Codex's own daemon and MCP servers no longer light the gear badge, and the gear's kill menu no longer offers them.
  • Clicking a workspace in the sidebar or in the event log puts the cursor in its top-left agent (or the maximized one), so you can type right away.
  • The New Agent dialog shows the Full terminal box only for shells, scripts and custom commands. It was a forced, greyed-out tick for AI agents.
  • A task summary squeezed down to a lone ellipsis in a card's header turns into a clipboard icon that shows the whole task on hover. The close button is square and the usage text next to it is larger.

AI Hive

Version 0.39.1

  • A Codex card now shows the "?" when Codex asks for approval or asks a question, and stops pulsing as busy while it waits for your answer.

AI Hive

Version 0.39.0

  • Before a laned agent marks its work Task done, it merges the newest main into its lane and gets a GPT-6-Luna code review, fixing what the review finds. Lanes reach the integrator already up to date and reviewed.
  • Agents already running keep the old instructions until they restart.
  • After a restart, the newest reply of a reopened conversation gets its time stamp again, even when the reply was reprinted slowly or the card was cleared.

AI Hive

Version 0.38.1

  • Opening or closing the sidebar no longer lights every idle agent as working for two seconds.
  • The README explains the lane chip's counts, untracked files and its hover tooltip.

AI Hive

Version 0.38.0

  • Tooltips wrap at one readable width instead of stretching into a thin strip across the window. A new Tooltips switch in Options turns them all off.
  • Options has a Fullscreen switch that does the same as F11.
  • F11 no longer opens a black console window when pressed right after AI Hive starts.
  • In fullscreen, resting the cursor on the top or left edge brings the bars back in 0.75 s instead of 1.5 s, and the floating top bar leaves out the logo, name and version.
  • A Claude reply no longer shows up several times over in a card after the card changes width.
  • Close merged agents closes every merged agent in one click, not one per click.
  • A finished lane's chip judges conflicts by the commit it flagged as done, so later unfinished work no longer turns a shippable lane red.
  • The Claude model list says Haiku 5.5 instead of Haiku 4.5.

AI Hive

Version 0.37.2

  • The icons in a card's hover tray are now one size, the maximize button included, and the "⋯" that opens the tray is bigger.
  • Make integrator is no longer offered while the workspace already has an integrator. Stop the current one first to hand the role on.
  • The lane chip on a card shows a drawn branch icon instead of the small "⎇" glyph. The integrator's chip shows two lanes merging into one.
  • The folder and trash beside the workspace path are line icons that match Lanes, Layout, Map and Activity, and the path is easier to read.

AI Hive

Version 0.37.1

  • The new terminal shortcut is now Ctrl+T instead of Ctrl+N, so Ctrl+N goes back to the program running in the terminal.
  • The maximize and restore button on a card is now four plain arrows, a little larger than before.

AI Hive

Version 0.37.0

  • F11 goes fullscreen with only the agent grid on screen. Rest the pointer on the top edge for a moment to float the top bar and the workspace header over the grid, or on the left edge for the sidebar. Terminals never resize when they appear. F11 again puts the window back as it was.
  • Ctrl+N opens a new terminal, also while a terminal has focus.
  • Reply time stamps no longer vanish when a card is resized, retiled or rebuilt. They now work for Codex and Gemini agents, and a reopened Codex conversation gets its stamps back. Options > Reply times hides them.
  • The card's maximize button draws corner arrows, pointing out to maximize and in to restore, in the theme's header colors.

Vinted Country Flags

2.2.0 back on the grid

Shows the seller's country flag in the corner of every Vinted listing. Vinted never tells a buyer where a seller is, anywhere on the site.

Download vinted-country-flags-2.2.0.zip below, unpack it somewhere you will keep it, then in Chrome go to chrome://extensions, turn on Developer mode, click "Load unpacked" and pick the unpacked folder. If you already run 2.1.0, load the new folder and remove the old one.

What is fixed

Vinted changed what it serves on 2026-10-08, and 2.1.0 broke in three ways. Flags stopped on the catalog, the item-page lookup could name the visitor instead of the seller, and cards that hit a rate limit or scrolled past were never retried.

Grids past the first screenful now read the seller from the response the page already fetches for itself, on the homepage and on the catalog. The catalog endpoint 404s now, and asking for the grid again returns a different shuffle, so reading the page's own response is the only path that matches the cards on screen.

Rate limiting is tighter. The extension leaves a share of Vinted's bucket for the site's own calls, backs off when Vinted answers with a "Client Challenge" page instead of data, and frees a slot as soon as a card scrolls away.

Cards that cannot be read from their price fall back to a profile lookup, and a lookup that gets cancelled no longer leaves a second card blank.

The cache is cleared on upgrade. Some entries written by the old item-page lookup may have named the visitor, so they are dropped rather than trusted.

Testing

50 unit tests pass, up from 49 at 2.1.0. Parsers were checked against live vinted.ro pages: 96 of 96 cards named from the document, and 96 of 96 from the page-2 response.

GPL-3.0. Not affiliated with Vinted.

AI Hive

Version 0.36.1

  • Restart now gives the new agent a blank screen. The new Claude used to draw its banner and input box over the old one's last frame.
  • The card's maximize button uses the Windows caption icons: one square to maximize, two stacked squares to restore. They are larger than the old arrows, which looked alike.

AI Hive

Version 0.36.0

  • Close merged agents on the integrator's lane chip closes, after you confirm, every agent whose lane work is now on main and that holds nothing else: no commit ahead, no uncommitted file, not mid-turn. Their lanes go too. The integrator and every other agent stay open.
  • The Ship finished lanes confirmation has a Don't ask again box. Options

    Agents > Confirm Ship finished lanes turns the question back on.

  • Stop is gone from a terminal card's hover tray. Ctrl+C in the terminal does the same. Line-console cards, which have no Ctrl+C, keep it. Restart on a running agent now shows a restarting veil until the new prompt is live, instead of a frozen old frame.
  • A finished lane that shares a file with another lane keeps its green chip and gets a yellow border, instead of turning amber. Lane chips have squarer corners.
  • The model badge no longer shows backticks or a cut-off name like "Sonnet 5" after a /model pick.
  • The agent map's hub colors match the sidebar: green when idle, yellow while working.
  • Show usage moved to the left column in Options, under the chime rows.

AI Hive

Version 0.35.0

  • Click the integrator's lane chip and pick Ship finished lanes to ask it to ship. The item counts the lanes with a Task done commit, shows you the list to confirm, then types the request into the integrator. It stays greyed out while the integrator works or no lane is finished.
  • The test suite runs in parallel worker processes and finishes in about a minute and a half instead of six. It also stops leaving test folders behind in your Temp folder.
  • Old plan and review documents are gone from the project folder.

AI Hive

Version 0.34.1

  • Removes the old task hand-off code that 0.34.0 left without a button. Nothing you can see changes: scheduled sends and the auto-continue after a plan limit still type into agents the same way.
  • The collapsed sidebar rail and the workspace count badges now share one "working" pulse, so they breathe in step.

AI Hive

Version 0.34.0

  • Restart now gives you a fresh agent, as if you closed the card and opened a new one of the same kind. It drops a permission mode you switched into, a /model or /effort override, the AI title, the context badge and the assigned task. Name, folder, lane, font and the model, effort and permission mode you created it with stay.
  • The Start and Assign buttons are gone from the card's hover tray. Restart or any keystroke starts a stopped agent.
  • A collapsed sidebar now leaves a thin rail with one strip per workspace, colored like its count badge: amber while an agent works, green when idle, red on an error. Hover a strip for the name and counts, click it to open that workspace.
  • New "Show usage left" switch under Options, Appearance. Usage pills then read "Claude 79% left" instead of "Claude 21% used", and the ring empties as you use up the window. Red still means 85% used.

AI Hive

Version 0.33.0

  • The integrator no longer pulls main into your project's own folder after it merges. That folder is your working copy, and a pull could change files under your editor or dev server. It tells you main moved instead, so you pull when you're ready.
  • The integrator no longer bumps a version or edits a CHANGELOG in every project. It does both only when the project's docs/agents/integration.md asks for it, the way AI Hive's own does.

AI Hive

Version 0.32.0

  • You decide when finished work ships. AI Hive no longer types a note into the integrator each time a lane's agent commits "Task done". The lane chip still gets its ✓ and turns green. When you think there is enough for a pull request, ask the integrator to ship it, naming the lanes you want or none for everything marked done.
  • The integrator starts only when you ask it to, never on its own.

AI Hive

Version 0.31.0

  • A lane's chip on its card turns green once its agent commits "Task done". Amber or red for files another lane also changed still wins over green.
  • The workspace header's buttons are evenly spaced again. Change and Layout had a 20px gap between them while every other pair sat 6px apart.
  • The header's Change… button is now called Change folder.

AI Hive

Version 0.30.0

  • Finished work now ships without any clicks. When a laned agent finishes its task, it commits with a last line of just "Task done". AI Hive sees that commit, puts a ✓ on the lane's chip and tells the integrator. The integrator combines every finished lane into one pull request, runs the tests, gets a GPT-6-Luna code review, fixes what it finds and reviews again until the review is clean. Then it merges and updates your main folder, so the next launch runs the new version.
  • The integration queue is gone: no more Submit to integrator, Approve merge, Mark merged or the Activity panel's Integration section. Your integrator stays the integrator. Queue items saved by an older version are dropped when the session loads.
  • A laned agent now commits each finished task on its own, without asking. If it ends a turn with uncommitted changes anyway, it gets one reminder to commit them.
  • When a closed card's lane is kept only because of uncommitted files, the notice names up to three of them.

AI Hive

Version 0.29.0

  • The card actions that lived in the header's right-click menu (start, stop, restart, assign a task, scheduled send, Restart in own lane, Make integrator) are now buttons in the tray that opens when you hover the ⋯ in a card header, next to A- / A+ / maximize. Each has a tooltip naming it. The right-click menu is gone. A lane action AI Hive can't do right now shows disabled, and its tooltip says why.
  • The hover tray closes when you move the pointer slowly off it, up or down. Before, it could stay stuck open on a display with fractional scaling.
  • A second click on a dropdown's button now closes the dropdown. Before, it closed and opened again at once. This affects the repo activity arrow, the usage "+" picker, the chime rows' note button in Options, and the background-shell and lane chips.
  • A click anywhere on a sidebar category row expands or collapses it, not only on the arrow. A double-click on the name still renames it.
  • The Activity panel's "No integrator yet" hint points at the ⚑ button in the card's hover tray instead of the right-click menu that is gone.

AI Hive

Version 0.28.5

  • Closing an agent no longer says "Lane kept" with an unmerged commit when that work is already on main as a different commit. This happened when the integrator cherry-picked a lane into a batch, and after a squash or rebase merge. AI Hive now removes the lane once every change in it is on main. A lane with even one change main lacks is still kept.

AI Hive

Version 0.28.4

  • AI Hive pulls what merged on GitHub every time it starts, so a restart always runs the latest approved changes. Before, nothing moved your folder after a merge, and a folder left on an old branch never updated at all. It still never touches local changes or commits that are not on GitHub.
  • The integrator now gets a second code review from GPT-6-Luna (through your Codex CLI) before it opens a pull request, and lists each finding and what it did about it in the PR.

AI Hive

Version 0.28.3

  • No change to the app itself. The release test that drives a real Claude Code agent works again with Claude Code 2.1.290, which changed how its "do you trust this folder" question marks the selected answer.

AI Hive

Version 0.28.2

  • The A- / A+ / maximize buttons that appear when you hover the ⋯ in a card header now touch each other and the tray edge, with no dead gaps, and fill the full header height.
  • Moving the pointer above or below those buttons now hides them, instead of leaving them open until you leave sideways.
  • Layout, Map, Activity and Lanes in the workspace header have line icons instead of font symbols, which some systems drew as colour emoji.
  • Open folder and Change... look like the other header buttons, and the Lanes toggle sits before them.
  • On a window too narrow for the terminals plus the Activity panel, the panel now slides over the terminals instead of pushing the window wider than the screen.
  • The model dropdown labels Sonnet as 5.5.

AI Hive

Version 0.28.1

  • The ⚙ badge in a card header (a background command is still running) is now as narrow as the gear itself, instead of a wide pill that pushed the task summary aside.
  • The workspace header's delete button is now a 🗑 trash can, and it turns red on hover like the other delete buttons.
  • Hovering Open repo now outlines the whole button, right edge included.
  • The Open repo ▾ list of recent pull requests and commits loads in the background a few seconds after AI Hive starts, so it opens with the list already there. Opening it refreshes the list in place when it is more than 3 minutes old, and a refresh that fails keeps the list you had.

AI Hive

Version 0.28.0

  • Lanes can now be turned on per workspace. Each git workspace's header has a ⎇ Lanes toggle (off for new workspaces): on, the New Agent dialog ticks Own lane for that workspace's new Claude agents.
  • The Options switch is now "Lanes in every workspace". On, it turns every workspace's toggle on and locks it. Off, each workspace decides.
  • The New Agent dialog offers Own lane in every git workspace, so one agent can have a lane while the rest of the workspace shares the folder.
  • An existing agent can move into a lane with Restart in own lane in its card's right-click menu. It starts a new conversation in its own worktree, and the old conversation stays in the New Agent picker.
  • Turning lanes off no longer pauses anything. A lane keeps its warnings, its chip and its way to the integrator until you close its card, and a pull request awaiting approval can be merged even after its lane is gone.
  • New "What are lanes?" explainer, from the ? beside the header toggle and from the New Agent dialog, and a one-time hint when a workspace gets two lanes without an integrator.
  • Fixed: right after a restart, an agent could briefly be pinned back to its previous conversation.

AI Hive

Version 0.27.1

  • Closing a laned agent now keeps its lane when the agent deleted one of the local files that .worktreeinclude copied in (a .env), the same as when it edited one. Before, the lane was removed and the deletion with it.
  • When AI Hive can't finish checking a lane's local files, it now keeps the lane and says so, instead of taking the lane for clean and removing it.

AI Hive

Version 0.23.2

  • The shared board now keeps only its newest 40 activity notes. Older ones move to board-archive.md next to it, so agents spend fewer tokens reading the board before each task. Nothing is deleted.
  • The board's agent list shows what each agent is working on (its conversation title) instead of "-" when it has no assigned task.

AI Hive

Version 0.23.1

  • Terminals restored after a reopen keep the width they started at, also on a small or heavily scaled screen. Before, a resumed conversation there could be wrapped narrower than its card.

AI Hive

Version 0.27.0

  • Agent lanes get an integration queue. Right-click a laned Claude agent's header and pick Make integrator, then choose Submit to integrator on another lane's chip. One lane at a time, AI Hive sends the integrator a short brief: it merges the newest base branch into that lane's work, bumps the version, runs the tests on exactly that commit and opens a pull request that names it. It never merges.
  • The Activity panel's new Integration section lists every submitted lane. Approve merge there is the only way a pull request gets merged, and AI Hive does it itself: it refuses if the pull request changed since it was tested or the base branch can't be confirmed with GitHub, and sends it back to the integrator if the base branch moved since then. Anything unexpected waits for you with the reason and the "?" chime, and is never approved again by itself.
  • A pull request merged on GitHub instead of with Approve merge waits for you: Mark merged checks with GitHub, then moves the queue on. A lane whose work was squash-merged can be removed from its "lane kept" notice.
  • A lane with no work of its own now catches up with the base branch by itself while its agent is idle, and the agent is told.
  • The integration queue needs a GitHub remote and a logged-in GitHub CLI (gh). It pauses while Agent lanes is off and survives a restart.

AI Hive

Version 0.26.1

  • A task given to a Claude agent as it starts is now always submitted. In a fresh git folder (every new agent lane is one) Claude could take the task's text and its Enter as one paste, so the task sat typed in the input box and never ran. AI Hive now presses Enter only once Claude shows the text.

AI Hive

Version 0.26.0

  • Agent lanes now keep agents aware of each other without reading the whole board. Each laned agent's card shows its branch, commits ahead and uncommitted files, and turns amber when another agent's lane (or the base branch) changed one of the same files, red when the two would conflict.
  • A laned agent is warned the moment it edits a file another lane changed, or edits outside its own lane, and is told on its next prompt when the base branch changed a file it changed. Each warning comes once per round of work. Laned agents read a small roster file instead of the whole board.
  • The board roster shows each agent's lane, how far ahead it is and which files it is touching. The Activity panel lists lanes and their changed files, the Agent/File Map shows one tree for the whole repository, and new overlaps and conflicts appear in the event log.
  • The lane chip's menu opens the lane folder, and updates a lane with no work of its own to the newest base branch.
  • A .worktreeinclude file in the repository names ignored local files (like a .env) to copy into every new lane. A lane whose copy you edited is kept when its agent closes, not deleted with it.
  • Turning Agent lanes off now always reaches agents that are running, even when one of them is reading the lane file at that moment.

AI Hive

Version 0.25.0

  • New in Options: Agent lanes, off by default. Turned on, every new Claude agent in a git workspace works in its own copy of the repository (a git worktree on its own branch, next to your project folder), so agents can no longer overwrite, reset or accidentally commit each other's changes. Untick "Own lane" in the New Agent dialog to keep an agent in the workspace folder.
  • Closing a laned agent cleans its lane up only when nothing in it is unsaved or unmerged, and only once no program is still running in it (AI Hive tries again for a minute). Otherwise the lane is kept and AI Hive tells you what is in it; its conversation stays in the New Agent dialog's Conversation list, and picking it brings the lane back where it was.
  • A workspace inside a larger repository starts with "Own lane" unticked, since its lane would copy the whole repository. A workspace folder that is not part of the repository's files gets no lane at all.
  • Turning Agent lanes off stops new lanes. Agents that already have one keep working in it.

AI Hive

Version 0.24.0

  • The New Agent dialog has a Count stepper: pick Claude Code (or any type), press + to choose how many, and that many agents open at once, numbered on from the name you gave. It starts at 1 and can't go past the workspace's free slots. Resuming a past conversation keeps it at 1.
  • New Workspace can start from a GitHub repository: paste its URL and AI Hive clones its default branch (main, master or any other name) into a new folder and opens a workspace there.

AI Hive

Version 0.23.0

  • Codex cards now resume their own conversation when you reopen AI Hive, and show the model, reasoning level and context-window usage live in the header.
  • A card's summary is now the conversation title you see in the CLI's resume list. A task assigned in AI Hive shows only until that title exists.
  • A Codex card's summary stays on the conversation's opening prompt instead of jumping to a later message once the conversation gets long.

September 2026

AI Hive

Version 0.22.6

  • When Claude Code continues on its own after a usage limit resets, the hourglass no longer comes back and stays for a day. Any leftover hourglass also clears within a minute once the conversation shows new work.
  • An agent stopped by a usage limit is now resumed even if a background task hit the same limit again later. Before, AI Hive could decide there was nothing to resume and leave it idle.

AI Hive

Version 0.22.5

  • A reply's date and time stamp now shows when Claude actually finished the reply. It used to jump to whenever the terminal was next redrawn, for example when you switched to its workspace hours later.
  • Reply stamps no longer go missing in terminals where a Stop hook prints a line under every reply (such as a hook that echoes the time).

AI Hive

Version 0.22.4

  • The update button beside the version is a cleaner refresh icon.
  • "Up to date" now shows for 4 seconds and then the button returns on its own. While it shows it is just a message, not something to click.

AI Hive

Version 0.22.3

  • Internal: the test suite is split into one file per area of the app, and a test can no longer be left out of the run by mistake.

AI Hive

Version 0.22.2

  • The model list in the New Terminal dialog is current: Fable 5.1, Opus 5.5, Sonnet 5 and Haiku 4.5, plus the 1M-context versions and Opus Plan (Opus plans, Sonnet executes).

AI Hive

Version 0.22.1

  • Conversations are found when Claude Code keeps its data somewhere other than your user folder (the CLAUDE_CONFIG_DIR setting).
  • Fixed an error that could be logged when a label was removed right after its text changed.
  • Internal: the test suite runs in a throwaway profile, can never start a real Claude in your project folders, and finishes in about a third of the time. Unused code for spawning agents automatically was removed.

AI Hive

Version 0.22.0

  • Update AI Hive from inside the app. The button beside the version badge checks GitHub, shows what changed, and updates this folder when you click Update. You restart AI Hive yourself when your agents are at a good point.
  • This changelog.

AI Hive

Version 0.21.1

  • Internal: shorter project notes for the agents working on AI Hive. No change to the app.

AI Hive

Version 0.21.0

  • Event log window (Log button or Ctrl+Shift+L): what every agent in every workspace did, with unanswered questions highlighted.
  • Usage pills share one poller: faster while agents work, slower when idle, and a pill only greys out when its reading is really stale.
  • Pick your own WAV or MP3 for each chime in Options, preview it, or go back to the built-in sound.
  • A second click on Options now closes the panel.

AI Hive

Version 0.19.7

  • New question chime, and an optional chime when a reply finishes.
  • Usage pills: per-agent colours, red from 85%, Claude and GPT labels, and a new Codex / ChatGPT usage pill.
  • Gemini agents get the full card header: model, effort, mode, summary and context.
  • Usage-limit cut-offs are caught more reliably, and the reset time is read correctly across time zones and daylight saving.
  • Card font and maximize buttons collapse into a hover tray.
  • Right-click menu on links, and the input box no longer gets stranded after a menu closes.
  • Reveal in folder opens the file's own folder.

Common Expense Tracker

Live at expenses.thebarbellengineer.com

  • The page and the sharing server run together on one Cloudflare Worker on their own domain, so shared trackers work without any setup.
  • The admin token that mints invite codes lives in a Worker secret, never in the page or the repo.

One More Tile

0.33.1 Versus and menu fixes

  • In online versus, a joining player now sees the host on the scoreboard and in the opponents panel.
  • A guest who wins is told they won, not "Player 3 wins".
  • You can host your most recent canvas online straight from its Continue card.
  • The join panel says you joined once the board has arrived.

One More Tile

0.33.0 Safer online play

  • In a game with two or more guests, one guest could pretend to be the host: push a board at the others, fake or cancel a match, or disconnect another guest, which could end a match for everyone. That's no longer possible.
  • Joining a friend's game no longer makes your own solo progress on that canvas look empty.
  • Nobody can fill a room with fake players to keep your friends out.
  • During a versus match, nobody can stitch on your board or replace it, and sudoku digits only count between "Go!" and the final whistle.
  • The online library now ships with the game instead of loading from another site, and online play works when you open the game file straight off disk.
  • The versus lobby says plainly that each player reports their own score.

One More Tile

0.32.0 Versus mode

  • Race up to three friends for the canvas, on one screen or online with a code.
  • On one screen you share the canvas, and each region goes to whoever stitched most of it. A nearly finished region can still be stolen.
  • Online, everyone solves their own copy of the same puzzle. You see your rivals' progress and a minimap of where they're working, never their colours.
  • Three rules: play out the full canvas, first to a number of regions, or most regions when the clock stops.
  • A match never touches your saved progress.
  • During a match, region quotes appear as a small notice instead of a dialog over the board.
  • Fixed: sudoku digits placed with a mouse or controller now count for the player who placed them, touch stitches in split-screen go to the right player, and players 2 to 4 can undo their own moves.

One More Tile

0.31.0 A brand-new puzzle from any canvas

  • "New weave" in the menu gives any canvas a completely different puzzle: same painting and regions, new solution and clues.
  • Each weave keeps its own save, so you can go back to the original and pick up where you left off.
  • Share codes and co-op carry the weave, so friends get the same puzzle.

One More Tile

0.30.0 No more waiting to start

  • Every canvas ships ready-made. Opening one used to take up to 35 seconds the first time. Now it's the length of the loading animation.
  • Every player gets exactly the same puzzle on every browser.

August 2026

Vinted Country Flags

2.1.0 the homepage

Shows the seller's country flag in the corner of every Vinted listing. Vinted never tells a buyer where a seller is, anywhere on the site.

Full notes

Download vinted-country-flags-2.1.0.zip below, unpack it somewhere you will keep it, then in Chrome go to chrome://extensions, turn on Developer mode, click "Load unpacked" and pick the unpacked folder.

What is new

The homepage gets flags. It never did, which is a gap where most visits start.

Two things were in the way. Catalog cards are numbered product-item-id-<id>--image, but every homepage card shares one testid, feed-item--image, and carries its item id only in the link over the photo, so the selector matched nothing. And nothing could have answered those cards anyway: /api/v2/catalog/items does not return the homepage feed at all, 0 of 20 overlapped on vinted.ro, and the endpoint that does serve it answers 400 to the same query replayed by anyone but Vinted's own front end.

The homepage does name every seller, though, twice over and for free. The first screenful is server rendered and the payload the page hydrates from is still sitting in the document with "user":{"id":...} on every item. Everything after it arrives on the request the page fires when the feed paginates, where the same fact is spelled user_id, and the extension reads that answer as it goes past rather than asking for its own. Together they named the seller of 70 of 70 cards on vinted.ro, 20 from the document and 50 from one pagination response, for no request at all.

Knowing the seller is not knowing the country, and 70 known sellers is 70 lookups at one a second. So the homepage spends two catalog requests it will never match a card with, purely to learn exchange rates, and then reads the country off the price like any other card. Two rather than one because the fingerprint refuses to answer until it knows the euro rate, and a single draw carried two euro sellers, one short of the three it takes to trust a rate. That answered 66 of the 70 cards, agreeing with the sellers' actual profiles on all 13 spot-checked, and left five lookups instead of seventy.

Euro markets skip those two requests. The fingerprint cannot work where every seller prices in euro, so the homepage there falls back to a lookup per card, same as its catalog pages.

None of it is per-domain. Checked on the vinted.ro, vinted.de and vinted.fr homepages: same card markup, same payload shape, every card mapped to a seller.

49 unit tests, five of them new. GPL-3.0. Not affiliated with Vinted.

Vinted Country Flags

2.0.0 every Vinted market

Shows the seller's country flag in the corner of every Vinted listing. Vinted never tells a buyer where a seller is, anywhere on the site.

Full notes

Download vinted-country-flags-2.0.0.zip below, unpack it somewhere you will keep it, then in Chrome go to chrome://extensions, turn on Developer mode, click "Load unpacked" and pick the unpacked folder.

What is new

All 27 Vinted markets, up from vinted.ro only.

The country rule is no longer hardcoded. The market table is read from /api/v2/countries at runtime, so a currency that stops pinning a country stops pinning it on its own, and a new market appears without a release. That also dropped five dead currency rows and picked up Australia.

The rate limit is measured rather than guessed. From a cold bucket exactly 30 requests to /api/v2/users succeed and the 31st gets a 429; paced at one per second, 45 in a row draw nothing. So it is a token bucket of 30 refilling at about 1/s, shared per IP across domains. That bucket now lives in a service worker, so every tab and every Vinted domain spends one budget instead of one each. Pushback honours the Retry-After the response carries.

The cache moved to the worker too. A seller resolved on vinted.fr is already known on vinted.de, because seller ids are global across markets.

Fixes

/api/v2/users/{id} returns country_code: "UK" for Britain, which is not an ISO country and resolved to no flag. It now joins country_id against Vinted's own table, which also sidesteps Greece reporting as EL.

The price fingerprint's guard was one unit of buyer currency. That is a real guard in lei and none at all in forints, where every price clears a one-forint grid. It is anchored to about 0.20 EUR now and refuses to run until it knows the rate that converts it.

Prices parse in every market's number format, taken from the page language rather than assumed.

Euro markets are slower, on purpose

Eighteen of the 27 price in euro. Every seller there prices in the currency you see, so the free signal says nothing: 0 of 259 items sampled on vinted.fr carried the conversion data the other markets give away. Each card costs one seller lookup, so the grid fills in over about 90 seconds rather than appearing at once, viewport first, and the popup tells you how many are left. Roughly a fifth of those sellers turn out to be foreign, which is why it is worth the wait.

252 flags, covering every ISO country, since a seller can live somewhere Vinted does not operate.

44 unit tests. GPL-3.0. Not affiliated with Vinted.

Common Expense Tracker

Share one tracker live, end-to-end encrypted

  • Share a tracker with a link and a password. Two people can edit it from different devices, and each change reaches the other one over a WebSocket in well under a second.
  • Every record is encrypted in the browser (AES-GCM) with a key wrapped by your password (PBKDF2-SHA256, 600,000 iterations). The server stores only ciphertext and can't read a thing.
  • Changes sync one record at a time, so two people editing different expenses never overwrite each other.
  • Shared trackers are capped at 2 MB, and making a new one needs an invite code, so a stranger can't fill the server.
  • 125 unit tests, a two-client protocol smoke test, and a UI check that drives two headless Chrome profiles as two devices.

Common Expense Tracker

Export, import and a single-file app

  • Export any set of months as JSON or CSV. Importing replaces only the months in the file and leaves the rest alone.
  • npm run build inlines everything into one standalone HTML file. Save it anywhere and double-click it, no install.

Common Expense Tracker

A balance bar, one list of people, and amounts that fit

  • The bottom line shows a bar of what each person paid against the fair share, with the amount that changes hands drawn as a hatched band.
  • People are one list for the whole tracker, managed from the header, and they carry over from month to month.
  • Amounts of any size stay inside the summary panel: its type shrinks to fit instead of overflowing.
  • RON only. The per-month EUR switch is gone.
  • "240.924,00" now parses. The amount field accepts only digits and separators.
  • Light and dark themes.

Common Expense Tracker

First version

  • Add each month's shared costs, see who paid what, and get the transfers that square everyone up.
  • Amounts are stored as whole cents, never floats, so splitting 10,00 three ways gives 3,34 / 3,33 / 3,33.
  • Everything stays in the browser. No account, no server.

Automation Test Platform

Security hardening

An audit of how the dashboard stores user accounts and site passwords, ahead of open-sourcing it. Everything below is fixed; the through-line is that the app now assumes it may be hosted on a public domain rather than sitting on one laptop.

Full notes

Privilege escalation: environment injection into spawned processes

POST /api/runs passed the request body straight through to spawn(), so any account with tests.run could set NODE_OPTIONS=--require … (or CYPRESS_RUN_BINARY, PATH, LD_PRELOAD) and execute arbitrary code as the dashboard's user. Saved schedules were the same hole with a timer on it. Requested environment is now allowlisted to the E2E_ / WP_ / TEST_ / DASHBOARD_ namespaces, and validated when a schedule is saved rather than at 3am when it fires. A run may also no longer carry its own baseUrl: only the PR Builder, which builds its target server-side, can target an unregistered site.

Site passwords are encrypted at rest

data/custom-sites.json held "adminPass": "admin" in the clear. It is now AES-256-GCM, keyed from DASHBOARD_SECRET_KEY or a generated data/secret.key (0600), and existing files are migrated on first boot. data/ itself is locked to the running account. Adding a site now requires a password — the old silent default meant a site with none would send admin/admin at whatever host its URL pointed to.

Bound to loopback by default

app.listen(PORT) bound every interface while the banner said localhost, over plain HTTP with non-Secure cookies. Now 127.0.0.1 unless HOST says otherwise, with TRUST_PROXY to make req.secure and req.ip meaningful behind a proxy and a boot warning when the bind is not loopback.

Path traversal in run and target ids

Express percent-decodes route parameters after matching, so ..%2f..%2f reached path.join() in the report, artifact and run-record routes. Both ids are now validated before they touch the filesystem.

Accounts

  • The seeded admin gets a generated password, printed once, instead of the published constant admin!.
  • mustChangePassword is enforced rather than advisory: the account is signed in but inert until it sets its own password. New accounts and admin resets set it.
  • Password floor raised to 12 characters, with checks against the username and a short list of the obvious ones.
  • scrypt cost raised to 32 MiB with the parameters stored per record, so it can be raised again later; a successful sign-in re-hashes older records transparently.
  • Unknown usernames now cost the same work as wrong passwords — the previous early return leaked which accounts exist through response timing.
  • Throttling is per account and per client address, escalating, and no longer hands back a clean slate when a lock expires. The maps are bounded.
  • Session ids are stored as SHA-256 digests, with an absolute 7-day cap on top of the sliding idle timeout.

Browser-side

  • Strict CSP (no external origins), nosniff, X-Frame-Options: DENY, HSTS over TLS. The login page's inline script moved to login.js so script-src can be 'self'. Playwright reports get a narrowly relaxed policy so they still run.
  • Same-origin check on every state-changing request, behind SameSite=Lax.
  • Artifacts that a browser would execute (.html, .svg, .xml) are served as downloads — they are test output from sites you may not control.
  • Passwords are typed into a real masked dialog instead of window.prompt(), which paints them onto the screen.

Chess 2.0

2 commits

  • d2ff73f Keep vendored files byte-identical to upstream
  • 16b561f Vendor PeerJS, flip the board for Black, and let a dropped game be resumed

One More Tile

0.28.0 A calmer interface

  • The top bar is one tidy row, with extra actions in a ⋯ menu.
  • Options has sections for colour, music, difficulty and controller.
  • The loading screen, home menu and canvas grid are clearer, and Continue shows your progress and play time.

Chess 2.0

2 commits

  • 6df294d Add online PvP via WebRTC with host-proposed rule-change negotiation
  • 3cb137c Add Arcade/Swiss visual themes, feature toggles, and board-editor refinements

Ironlog

11 commits

  • 1d19b79 Publish the current build: charts, records, and the label scanner
  • 48270e3 Add a personal records card to the Progress pane
  • 6f4a7c7 Fix the label scanner: the contrast stretch was eating the text
  • 0d9b691 Fix the chart defects the harness turned up, and drop the harness
  • 727d55d Add barcode lookup to the label scanner, and fix its crop geometry
  • bf0a5b5 Remove .vite dependency cache from the repo
  • ea72ce9 Untrack .vite dependency cache
  • 7d2f403 Give the weight input room back on a phone
  • 92611c9 Update live link — the site is actually published now
  • e97d3d2 Add session rating, legacy data import, and Pages deployment
  • 0ab1986 Reach full feature parity with the original build

Chess 2.0

2 commits

  • 6f86206 Add on-board indicator for the square a piece just captured on (#2)
  • 3eacd7f Make Evolution/Gambling togglable mid-game, add win overlay, reposition scoreboard (#1)

Ironlog

5 commits

  • c539465 Restore the easter eggs, unified calendar and body-composition rows
  • 35ff1a8 Close the parity gap: exercise library, gear, and both calendars
  • 0d38744 Port the macro journal to the food tab
  • 5b4480e Port the plate loader to the plates tab
  • 8095c6f Rebuild as a Vite + React + TS source project; port the workout tab

HiraKataQuest

0.4.0 A real vocabulary, kanji reference, and honest scores

Added

  • The word list grew from about 250 words to nearly 700. The hiragana deck now carries the common JLPT N5 vocabulary, plus 25 more katakana loanwords, so practising words no longer runs out of material.
  • A "Kanji" button on words that have a kanji spelling (off by default; turn on "Kanji reference" in Study scope). It is colored by how the word is normally written: green when it is usually kanji, blue when it is mixed, grey when it is usually kana. Tapping it opens a reference card with the kanji, the reading, the meaning, and, for words that sound alike, the other kanji that share that reading with a one-line note on the difference. Purely informative: it is never quizzed and never scored.
  • Filter the Words tab by category (hiragana), with removable chips, both when browsing and when building a word set.
  • A "From my strong kana" set generator. It builds a word set out of words whose every kana you already score 85 or better in both writing and reading, so review material comes from what you have actually learned.

Changed

  • Writing mode now opens the Library instead of a random character. Picking what to practise is the first thing you do, which is how Reading mode already worked. Tapping a character or word drops you straight into practice, and Back returns to the Library.
  • Handwriting scores are a measurement now, not a cap. Two scores used to be suspiciously common: a well-formed character the recognizer merely misread always landed on exactly 65, and a scribble that cleared a low bar always landed on exactly 45. Both were ceilings rather than measurements. Recognition now nudges the score instead of capping it, extra strokes actually cost something, no scoring mode is blind to the shape any more, and a backwards stroke is charged once rather than twice. A clean katakana "e" that used to show 65 with a "looks more like" complaint now scores 93; a single random line scores 7 instead of 45.
  • The score on the feedback card and the score in the Library finally agree. The Library used to average the raw form dial while the card showed the adjusted number, so the same attempt could read 65 on one screen and 88 on the other. It now stores and averages the number you were actually shown. Practice recorded before this update keeps counting toward your averages.
  • Katakana are no longer misread as the kanji they came from. Thirty lookalike pairs (the katakana "e" and the kanji for "work", and so on) are now treated as the same drawing, because nothing in the ink can tell them apart.
  • The reading quiz keeps a steady layout. The prompt no longer jumps when you answer, typing works the way it does in flashcard practice (the keyboard stays open, the Done key checks and moves on, an empty answer skips), and memory-hint stories bold the reading they are teaching.

HiraKataQuest

0.3.3 Smarter Library search and visible scores

Added

  • Your writing score now shows on each word in the Library list. Words in the Characters/Words list already tinted green by score; now they also print the number ("Avg 82 · Best 90", or "Not practiced yet"), matching the grid view and the character rows.
  • Reading progress keeps the romaji alongside it. In Reading mode the word list used to replace a word's romaji with its progress stats; it now shows the romaji as usual and puts the progress on its own line, so you never lose the reading.

Changed

  • Library search ranks results by relevance. An exact match now floats to the top instead of being buried under incidental substring hits, so searching "hat" finds the word "hat" first rather than "that" and "what". Romaji search works the same way, with or without spaces ("boushi" or "bo u shi").
  • The reading-progress line labels the typed-answer score "Typing" instead of the terser "Type".

One More Tile

0.26.0 Coming back to a canvas is near-instant

  • A canvas you've already played opens in about a second. Angels went from about 37 seconds to under one. A difficulty you haven't tried yet still has to be woven the first time.
  • Picross patches get harder with the difficulty, and every one is still solvable by logic alone.
  • Changing difficulty never redraws a patch you've already started.

July 2026

HiraKataQuest

0.3.1 Quiz polish and memory hints for every kana

Added

  • Memory hints now cover every kana, not just the basic hiragana. Katakana and the voiced, combined, and extended kana all get keyword-and-story hints, most with two or three alternate images to pick from. Composed kana (like きゃ or ヴァ) also show an always-on Structure note that spells out how the piece is built from its parts, separate from the memory hint itself.
  • Encouragement as you build a streak in Reading mode. Answer a run of reading questions correctly (in the quiz or in flashcard practice) and the reveal greets you with a short, escalating line of encouragement instead of a flat "Correct!". A gentle note marks a broken streak.
  • The writing quiz shows you how the answer is written. When you reveal a writing-quiz answer, its stroke-order animation now plays in the corner (the same demo free practice uses), so a missed character teaches the fix, not just the finished shape.
  • An Undo button in the writing quiz. The bottom bar's Back button is now Undo, which reverts just your last stroke so a slip on a many-stroke character no longer means clearing the whole thing.
  • Sort your writing-quiz results, and retake the ones that need work. The end-of-quiz summary can now order its items by score (lowest or highest first), and a new button re-quizzes every character or word you scored below a target you set right there (default 80, with quick-pick 60/70/80/90 chips). It is the writing counterpart to Reading mode's "retake the ones I missed".
  • A clearer "Add new set" button on the Practice sets tab (was a plain "New").

Changed

  • The Quiz-me "Practice from" list now shows only the sets in the script you're currently studying, matching the Library's Sets tab.

One More Tile

0.25.0 Personal co-op moments

  • In co-op, the "four mistakes" prompt goes only to the player who made them, and "Clear my errors" clears only your tiles.
  • Region quotes go to the players who helped finish that region. Everyone else gets a notice and can read it if they like.
  • Controllers can press the buttons on quotes and prompts.

One More Tile

0.24.1 Clearer Save button

  • Saving your progress has its own 💾 button. The dialog explains how to hand your board to a friend, and warns that importing one replaces their progress on that canvas.

HiraKataQuest

0.3.0 Dark mode, memory hints, and a Practice sets tab

Added

  • A dark mode. New Appearance setting at the bottom of the Options (Study-scope) sheet: System / Light / Dark. It stays Light until you choose, so nothing changes on update. Dark is a warm, paper-like night theme (not a harsh inversion): the writing worksheet itself darkens, with the ghost glyph and grid dimmed to match, and your brush gets a separate ink for dark mode (a light chalk by default) so strokes stay legible on the dark sheet. The same brush-ink row edits whichever appearance is active. System follows your phone's own dark-mode setting. Score tints, the score-feedback card, and every Library surface get dark-appropriate colors too. (Also fixes a latent bug where the status-bar icons could turn invisible on phones set to system dark mode.)
  • Memory hints for the basic hiragana. Every one of the 46 basic hiragana now carries a keyword and a short story that tie its shape to its sound. A "How to remember" chip appears in writing practice and on flashcard and quiz answer reveals, and a "Hint" button offers the story before you answer (text-only in the writing quiz, since the shape is the answer). Each kana ships with alternates, so you can open "More ways to remember" and promote whichever image sticks; the choice is saved per character. It all sits behind a Memory hints switch in Options (on by default) and never affects your scores.
  • Practice sets now have their own tab. The sets you curate, plus the built-in starter sets, live on a dedicated Sets tab at the top of the Library beside Characters and Words, scoped to the script you're studying. A New button starts a Character set or Word set, and the top-bar search filters sets by name. This replaces the old "Add practice set" / "See sets" buttons in Options.

One More Tile

0.23.0 Play on phones and tablets

  • Tap or drag to stitch, two fingers to pan and zoom, and a light or dark brush switch. Tap a sudoku cell to select it, and tap again to change its digit.
  • Typing a code or PIN no longer triggers board shortcuts.
  • Your last stitch is saved even if you close the tab right away.
  • The music setting is remembered, and with music off the track isn't downloaded at all.
  • Co-op undo takes back only your own moves.
  • Friends on slightly different versions can still play together.

HiraKataQuest

0.2.3 Practice sets scoped to the chosen script

Changed

  • The practice-sets manager now shows only the script you have selected in Options: pick Hiragana and you see just your hiragana sets, pick Katakana and you see just your katakana sets (Words and Character sets of that script still appear together). The "See sets" count next to it now reflects that same per-script number instead of the combined total.

HiraKataQuest

0.2.2 Reading-mode fixes

Fixed

  • Practicing a saved set in Reading mode now works. It opens the set's characters or words as reading flashcards; previously the button did nothing in Reading mode (it only worked in Writing mode).
  • The read-aloud speaker is no longer a dead button when your phone's text-to-speech engine has no Japanese voice: tapping it now opens the system Text-to-speech settings so you can install a Japanese voice or switch to an engine (such as Google Text-to-Speech) that has one.
  • The "Looks different in handwriting" note is visible without scrolling on the reading flashcards for さ, き, and り — those cards now give the reveal area more room so the note sits in view under the reading.

HiraKataQuest

0.2.1 Undo, and practice-sheet sizes that earn their names

Added

  • Undo your latest stroke: a new Undo button next to Clear in writing practice reverts just the last stroke you drew, so one slip doesn't cost the progress on the rest of the character or word.

Changed

  • The repetition layouts are now sizes — XL, L, M, S (replacing 1×1/2×2/3×3, whose grid names meant nothing for words). XL is one big scored copy — the default, and what the quiz uses. L, M, and S tile the sheet with progressively smaller copies, and every step down is guaranteed to give you both visibly smaller cells and strictly more copies to practice on — for single characters and words of any length. Your saved layout carries over (old 2×2 becomes L, old 3×3 becomes S).
  • Repetition sheets now fill the canvas with complete rows instead of a fixed 4 or 9 slots — no more ragged, half-empty corner, and taller screens simply get more practice squares. Cells never shrink below a writable minimum (~40dp) for very long words.

HiraKataQuest

0.2.0 Practice sets sorted by recency

Added

  • Sort practice sets by how recently you touched them: the sets manager's sort menu gains "Updated: Newest first" and "Updated: Oldest first". Creating, renaming, or editing a set's members counts as touching it, so the set you just worked on rises to the top of "Newest". (Backed by a new updatedAt column — Room v5→v6, additive; existing sets inherit their creation time.)

Changed

  • The sets list keeps your chosen sort order across editing a set, running a quiz from one, and app restarts — it only changes when you pick a different order from the menu. (It previously reset to Name: A→Z every time the manager was rebuilt.)

Fixed

  • Picking a sort order, or an edit bumping a set to #1, now scrolls the sets list back to the top — previously the list stayed anchored where it was, so the new order (or the freshly bumped set) sat invisibly above the screen.

HiraKataQuest

0.1.9 Meaning practice, answer read-aloud, and word-practice fixes

Added

  • Flashcards can now test a word's meaning too: a new "Also test meaning" option on the reading flashcards (words only). After you answer the reading, the card asks what the word means — in the same style you're already using (type it in Typing mode, or pick it from choices in Multiple choice) — and reveals both results together.
  • Reading mode reads the answer aloud: once you submit an answer — on a flashcard or in the reading quiz — the character or word is spoken, so you hear the reading you just recalled. On by default; turn it off with the new "Read aloud automatically" switch in the Options menu (Reading's counterpart of the Writing narration toggle — the answer is never spoken early).
  • The brush color picker now offers black plus one preset for each main rainbow color, sized so every swatch fits the row.

Changed

  • Flashcard typing flow: the romaji field and its Check/Next button now share one row, the answer locks once checked, and the keyboard stays open for the whole run — you can drive an entire session from the keyboard's Done key.
  • The flashcard keeps the character/word the same size before and after the reveal (the result area is reserved instead of appearing and resizing things).

Fixed

  • Ink now stays inside the box each stroke started in — strokes can no longer bleed into a neighboring character's cell on word sheets.
  • Practicing a word from the Library now offers both Again and Next (Next cycles through the word list), matching character practice.
  • The whole-word "Average" pill no longer sits flush against the paper's bottom edge.

One More Tile

0.20.0 A classic home menu

  • Single Player, Co-op, Continue, Options and Credits in one list.
  • Continue jumps back into your last canvas.
  • Sort the canvas grid by name, date added or size.

One More Tile

0.19.0 Options menu

  • Recolour the whole interface with presets or a hue slider.
  • Music volume and a default difficulty for new canvases.

HiraKataQuest

0.1.8 Opening-screen and "About kana" polish

Changed

  • Beginner mode now sits in a small, horizontally-centered footer at the bottom of the start screen (previously a full-width row above the mode cards). Its label is smaller and the switch scales down with the system font size.
  • "About kana" (opened from "New to kana?") was rewritten: it now opens with what kana are and why the correct stroke order and direction matter, keeps hiragana and katakana, adds a short note on why kanji are left out of this app, and points you to the ⓘ next to the voiced, combined, and extended kana in the Study-scope menu instead of listing them here.

Fixed

  • Turning Beginner mode on no longer nudges the start-screen cards upward: the "New to kana?" link now appears in place without shifting anything above it.

HiraKataQuest

0.1.7 Brush effects, Beginner mode, and read-aloud

Added

  • Brush effects — pick the style your strokes are drawn with, next to the ink color in the Options sheet: Brush (the original), Calligraphy 筆 (the line swells on slow, heavy strokes and thins on fast flicks, with pointed ends), Fountain pen (thin and crisp), and Marker (bold and translucent, so overlaps darken). Purely visual: it never affects your handwriting score.
  • Beginner mode — a toggle on the opening screen (off by default). When on, it reveals plain-language ⓘ help for hiragana, katakana, and the voiced, combined, and extended kana groups, plus a "New to kana?" overview. Its own ⓘ explains what the mode is and who it helps. Leave it off for a cleaner screen.
  • Kana concept explainers — the ⓘ help above, written for first-time learners (shown only in Beginner mode).
  • Read aloud automatically — an optional Study-scope setting (Writing only): each new character or word is spoken by the device voice the moment it appears, so you hear the reading without tapping the speaker.

Fixed

  • Reading flashcards — the typed-romaji answer and reading no longer slip behind the keyboard on smaller screens, and the printed glyph now sits centered on the card instead of low.

HiraKataQuest

Responsiveness: large-font & multi-device hardening

Fixed

  • Large system fonts no longer break the UI (found on a Realme GT 7 Pro; the app was hand-tuned to a Pixel 7 at font scale 1.0):
    • the 1×1/2×2/3×3 layout picker labels no longer wrap/clip in the control strip;
    • the flashcard reveal (reading · audio · meaning) no longer renders shredded text next to the speaker, and the big glyph can no longer overflow its card;
    • the quiz setup's "Exact number" label/hint no longer wraps awkwardly ("+" orphaned on its own line);
    • the practice-set cards' Quiz · Practice · Edit · Rename · Delete actions always fit on ONE line (the labels shrink together when space is tight);
    • the Library's search field gets real width while searching (the view toggle, Sort menu, and "Quiz me!" hide until search closes).
  • The opening screen scrolls (still centered) instead of clipping on short screens / huge fonts; its cards' width modifier fixed for very wide screens.

Changed

  • Edge-to-edge: the app now draws behind the system bars (transparent bars, washi background showing through) with content inset via safeDrawing — also future-proofs Android 15's forced edge-to-edge and display cutouts.
  • The practice screen's guide panel and action bar grow with the system font scale (the canvas absorbs the difference); same for the writing quiz header.
  • Dense "icon-like" chrome (gojūon chart cells, selection grid cells, corner score badges, the layout-picker labels) is now font-scale-independent — sized like icons; the list views remain the fully font-scaling path.
  • Word-grid columns widen with the font scale (fewer, wider columns).

HiraKataQuest

In-app updates (no Play Store)

Added

  • In-app self-updater — on launch the app checks the project's GitHub Releases for a newer version and, if one exists, shows an "Update available" dialog. Tap Update to download the new APK and hand it to Android's installer (Later dismisses; Skip silences that one version). No Play Store, no extra app. Uses plain HttpURLConnection (no new dependency); a flaky/offline network fails silently. The one-time "install unknown apps" grant is requested on first use.
  • Proper release signing — release builds are now signed with a dedicated release keystore (via a gitignored keystore.properties), so update-over-install works reliably. BuildConfig is enabled for the version comparison.

Changed

  • Version bumped to 0.1.1 (versionCode 2).
  • New permissions: INTERNET, REQUEST_INSTALL_PACKAGES; added a FileProvider to serve the downloaded APK to the installer.

Automation Test Platform

Run pacing, per-site control, and a combined report

Three problems surfaced running the full 11-product suite from the dashboard, plus a reporting gap. This release addresses all four.

Full notes

1. Staggered launch (fixes out-of-memory crashes)

Why: the orchestrator launched every authenticated site's Playwright process simultaneously (Promise.all(runnable.map(runTests))). Eleven concurrent WordPress stacks plus a swarm of headless Chromium instances exhausted machine memory, so the OS refused new allocations and several sites died mid-startup with PHP Fatal error: Out of memory / nginx 502 Bad Gateway (observed on several sites). Which sites lost was down to luck under contention, so the failures looked random.

What changed (config.js, server/orchestrator.js):

  • Sites now launch one at a time with a delay between starts — SITE_START_STAGGER_MS (default 45000 ms). Each site clears its memory-heavy startup (browser launch + auth + first page load) before the next begins, so peak memory stays bounded.
  • Optional hard cap MAX_CONCURRENT_SITES (default 0 = off) as a complementary safeguard; a freed slot lets the next queued site launch.
  • New launchWithStagger() + cancellableDelay() replace the simultaneous Promise.all; a whole-run cancel no longer has to wait out the stagger.

2. Priority start order (largest suites first)

Why: the biggest, longest suites should start earliest — they need the most runway and the freest memory. Previously sites ran in selection/tree order.

What changed (config.js, server/orchestrator.js):

  • SITE_START_PRIORITY (default apprentice, architect, ttb, quiz) is applied to both the auth phase and the launch phase via orderTargets(), regardless of selection order. Remaining sites keep their original relative order. Storage / render order is untouched.

3. Per-site control + instant free-up (unblocks new runs)

Why: a site was marked "busy" for the entire run and only released at whole-run finalize(). So a product that already failed kept blocking a new run for that product until every other product finished — you couldn't re-run the failed one in the meantime.

What changed (server/orchestrator.js, server/index.js, public/app.js, public/style.css):

  • A site is released from the busy set the moment it reaches a terminal state (passed/failed/error/cancelled), not at whole-run finalize.
  • busySites is now a Map<site, runId> with an ownership-checked releaseSite() — so an old run's finalize can never free a site a newer run has already re-acquired.
  • Per-site Cancel — cancelSite() + POST /api/runs/:id/targets/:site/cancel kills just that site's process (children are tagged with _site), marks it cancelled, frees it, and finalizes the run only once nothing else is active (maybeFinalize(), gated on launchComplete; finalize() made idempotent).
  • Per-site Re-run button on finished/failed cards starts a fresh single-site run (the site is already free, so the busy guard passes).
  • New per-site card buttons render in the Live view (renderSiteActions()).

4. Combined run report (one shareable, printable page)

Why: results were only viewable per product (one Playwright report per site). There was no single view of a whole multi-product run to read, share, or export.

What changed (server/combined-report.js (new), server/index.js, public/app.js, public/style.css):

  • New route GET /api/runs/:id/combined-report renders a self-contained HTML page merging every product of a run into one document, built on demand from the persisted run.json (so it works for historical runs too — no artifact regeneration).
  • Content: run header + summary tiles (products / tests / passed / failed / skipped / flaky), then one section per product with its pass/fail/skip counts, a detailed list of the failed tests (title, file:line, error), a "did not run" note for auth-failed/empty products, and a link to each product's full Playwright report for trace/screenshot drill-down. All interpolated strings are HTML-escaped.
  • Print-friendly (@media print, page-break-avoid): open it (it opens in a new tab) and Ctrl/⌘+P → Save as PDF — no manual PDF step.
  • An "↗ Combined report" button appears on a finished run in both the Live view and the History detail panel.

Files touched

  • config.js — SITE_START_STAGGER_MS, MAX_CONCURRENT_SITES, SITE_START_PRIORITY
  • server/orchestrator.js — staggered/ordered launch, per-site cancel + ownership-aware busy release, idempotent finalize, per-site child tagging, slimTarget exposes paths/grep/custom
  • server/combined-report.js — new; the combined-report HTML builder
  • server/index.js — combined-report route + per-site cancel route
  • public/app.js — per-site Cancel/Re-run buttons, combined-report links (Live + History)
  • public/style.css — .card-actions, small button + run-head link styling

Local configuration note (not a code change to review)

On the machine this runs on, the local site domains didn't match the canonical names hardcoded in the committed suite config (.playwright/sites.config.ts). To run against the real local sites, the suite's sites.config.ts URLs were pointed at the actual local domains. This is a machine-specific override, intentionally kept out of this dashboard change; the long-term fix is to rename the local sites to the canonical names and drop the override.

HiraKataQuest

Reading/Writing split: opening screen, reading quiz & flashcards

Added

  • An opening screen (home) to pick Reading or Writing — the app now starts on a top-level chooser, and you can switch modes anytime from the new Reading | Writing toggle in the Study-scope sheet.
  • Reading mode — two new ways to study without handwriting:
    • a reading quiz — see the printed glyph or word and answer by multiple choice or by typing the romaji (lenient matching); word items can optionally also test the English meaning.
    • a flashcard study mode — flip a printed card to reveal the reading, audio, and meaning; a "Type the reading" toggle adds a romaji input field.
  • Reading accuracy tracking — recorded per glyph/word as two independent percentages (multiple-choice and typed). The Library tints cells by their average (no "best" — reading is pass/fail), shows both percentages in list rows, and can sort by Average / Multiple-choice / Typed, ascending or descending.
  • New Room v5 table reading_progress (MIGRATION_4_5).

Changed

  • Writing mode always uses the handwritten (KanjiVG-stroke) ghost. The old Printed / Handwritten "Character style" selector is replaced by the Reading | Writing mode toggle.
  • The Activity now uses windowSoftInputMode=adjustResize and the flashcard card is responsive, so nothing clips behind the on-screen keyboard.

Tests

  • Build + unit tests green (added RomajiMatchTest); device-verified on a Pixel 7, including the live v4→v5 migration.

HiraKataQuest

Library sorting, smart set-building & Options-sheet polish

Added

  • Sort the Library list by your scores — a Sort menu in the Library app bar (list view only; the chart keeps its fixed gojūon order) reorders characters or words by average or best score, ascending or descending, with a Default order reset. Not-yet-practiced items sink to the bottom, and changing the order snaps the list back to the top so the new leaders are visible.
  • Smart "All" when building a practice set — in Add practice set, the All button opens a popup that selects only the items you still need to drill: "Only under a score of" (default 85, −/+ stepper, tap-to-type a whole number 1–99, and 70 / 80 / 90 / 99 quick-pick chips) plus a checkbox "Exclude {characters|words} I have not studied yet" (on by default). Turn the cap off to select everything (the previous behavior). Applies on Select.
  • Score-aware selection list — the set-builder's list rows now mirror the Library browse rows (score-color tint + "avg · best"/"Not practiced yet") and carry the same Sort menu, so weak items are easy to spot; selection shows as a checkbox plus a border over the score tint.

Changed

  • Brush ink color moved into the Options (Study-scope) sheet as a labeled Brush ink color row (with its color swatch); the app-bar slot it vacated now holds the Sort menu.
  • The Options sheet fits on a ~6.3″ phone (e.g. Pixel 7) without scrolling at default font sizes — tightened section spacing, dividers, and toggle-row padding (still uncramped; the ~90 %-height scroll fallback remains for very large fonts).

HiraKataQuest

Handwriting rendering: fixed-width brush & Printed/Handwritten style

Added

  • Character style — Printed vs Handwritten — a persisted CharacterForm setting (selector in the Study-scope sheet). Printed keeps the typographic font ghost you read on signs and screens; Handwritten draws the guide ghost from the same KanjiVG strokes the demo and scorer use (a grey brush), for both practice and the quiz. Rendering only — it never changes what is studied, demonstrated, or scored.
  • A "character X of Y" / "word X of Y" position line under the reading in the practice guide panel (the item's place in the active-script scoped list).

Changed

  • The stroke-order demo now renders as a bold, glyph-proportional brush (previously a thin 3.5 dp wireframe), matching the printed form of the glyph.
  • User ink is now a uniform fixed-width brush — dropped pen-pressure (finger contact size), speed thinning, and head/tail tapers, so a chubby finger and a thin stylus draw identically and the ink matches the demo. Width is the same fraction of the glyph as the demo at every size, so words, composite glyphs, and 2×2/3×3 grids thin automatically. Scoring is unaffected (it reads the raw points).
  • Removed the redundant Replay button from the stroke-order controls (Play already restarts the animation).

HiraKataQuest

Audio pronunciation (device text-to-speech)

Added

  • Tap to hear a kana or word — a small speaker button sits next to every reading (practice guide panel, Library list rows + word cards, and the quiz prompt + summary) and speaks it with the device's Japanese text-to-speech voice. Uses the framework TextToSpeech (ja-JP) fed the raw kana glyph — no new dependency, permission, manifest, or Room change. If the Japanese voice is not installed the button opens the system voice-data installer; if TTS is unavailable it greys out. Availability re-checks on resume, so a freshly installed voice starts working without a restart. (The dense gojūon chart cells intentionally omit the button — no room.)

HiraKataQuest

Library search & free-practice polish

Added

  • Romaji search in the Library — words are now findable by their reading, not just kana/meaning: ねこ matches neko, ne ko, ねこ, or cat. The query and every searched field are run through a shared searchNormalize() (drops all whitespace, lowercases), so romaji typed with or without spaces and in any case compare equal, and multi-word glosses match too ("ice cream" ⇒ "icecream"). Word readings come from the ViewModel's pronunciationOf. Kana input is unchanged (still scoped to the active Hiragana/Katakana tab).

Changed

  • Library search field uses a normal search-input text size (bodyLarge, 16 sp) instead of the oversized title style, so a longer query like "ka me ra" fits the narrow title slot without the single-line field scrolling and clipping the first character.
  • Multi-copy layouts are repetition worksheets for words too — in 2×2/3×3, a word (like a single character) now shows Clear · Next with no Submit/scoring; the Submit→score two-step exists only in the 1×1 layout.
  • Per-kana word score chips are responsive — an equal-weight row that resizes to fit a 4+ kana word on one line inside the canvas, with insets that clear the paper card's rounded corner (both practice and quiz).

HiraKataQuest

Guided study removed; built-in default practice sets

Removed

  • The guided SRS study session — the app is now free practice + the "Quiz me!" quiz only. Deleted SrsScheduler, LessonGenerator, StudySession, and PracticeActionBar (the Again/Hard/Good/Easy grade bar; FreePracticeActionBar split into its own file), plus the three domain/learning test files. SessionPhase collapsed to LOADING/FREE; the COMPLETE summary, the "Start a study session" / "Start next session" entry points, and the Library's "Learned/Locked" status labels are gone.

Added

  • Built-in default practice sets — ~32 sets seeded once per install (persisted default_sets_seeded flag): for each script, the 10 gojūon rows + the Voiced / Combined / Extended kana categories + starter word sets (Colors / Nature / Seasons; Food & drink / Countries / Everyday items). They are ordinary editable sets afterward, and a deleted default does not return.

Changed

  • Whether writing is scored is now governed solely by the Score my writing setting — there is no separate graded flow.
  • Unscored Library cells / rows / cards use a neutral tint (previously a learned/unlocked highlight); the score-spectrum coloring is unchanged.
  • Room untouched at v4 — the review_cards / character_progress / vocabulary_progress tables + entities/DAOs + RoomLearningRepository remain as dormant, unused schema (removing them would need a destructive migration).

Tests

  • Suite is now 84 unit tests, 0 failures (removed the SRS / lesson-generator / vocabulary-unlock suites; trimmed ScriptScopeTest to its pure filter/gating cases; added default-practice-set seeding tests).

HiraKataQuest

Code-review round 4 (practice-sets & scoring hardening)

Fixed

  • Library drag-select no longer inverts: dragging across already-selected items now deselects them. The gesture read a stale captured selection set; it now reads the live set via rememberUpdatedState.
  • Duplicate-key crash-proofing — word lists, grids, and selection rows now use unique Compose list keys, so a future homograph word (e.g. あめ rain/candy, はし bridge/chopsticks) can't hard-crash the Library. (Shipped data is clean today.)
  • Word stroke-order demo play/pause reflects whether any kana is animating, so the control no longer shows the wrong icon or restarts a single kana out of sync.
  • Layout switch mid-review clears pending FREE feedback and the submitted flag, so changing the 1×1/2×2/3×3 layout no longer strands an "Again/Next" card over a blank sheet.
  • Quiz with scoring Off now counts written-but-unscored items as written instead of mislabeling them "Skipped".
  • SRS interval overflow — the review interval is capped at MAX_INTERVAL_DAYS (100 years), preventing integer overflow after very long GOOD/EASY streaks.
  • Brush width is clamped against degenerate/transient canvas layouts (no giant ink blob during a layout change).
  • Startup warms the SharedPreferences disk load off the main thread.
  • Doc reconciliations for ReviewCard (repetitions / due-date semantics).

Tests

  • Suite grew to 129 unit tests, 0 failures (regressions added for layout-reset, scoring-off recording, SRS interval cap, stroke-attribution ties, degenerate geometry scoring).

HiraKataQuest

Practice sets & word quizzes

Added

  • Practice sets — user-curated, named lists of characters or words, persisted via Room v4 (practice_sets + practice_set_items, additive MIGRATION_3_4). Built in a Library selection mode (tap + drag-range select, list/grid toggle) and managed in a sets manager (rename / delete / edit members / Quiz / Practice, a sort menu, and a color-coded per-set average score).
  • Word quizzes — the "Quiz me!" flow now handles whole words as well as single characters (words scored per-kana with an average). The quiz setup gained a source picker: the current study scope, or any saved set.

Changed

  • The Study-scope ("Filter") sheet opens to full content height.

HiraKataQuest

Per-kana word scoring, FREE two-step, and Library score UI

Added

  • Per-kana whole-word scoring — a multi-kana word traced on one sheet is scored per kana (StrokeAttribution assigns each stroke to its nearest cell); per-kana score chips + an average render on the canvas and persist to history.
  • FREE-practice two-step: write → Submit (scores, keeps the ink, shows feedback) → Again (retry the same glyph) / Next (advance); an empty canvas offers Skip.
  • Per-kana stroke-order previews for words, sharing one playback-controls row.
  • Library score color-coding — a red→green spectrum tints chart squares, word cards, and list rows, with a corner score badge.
  • Brush ink-color picker — trace in any color (HSV dialog in the Library top bar); purely visual, persisted, never affects scoring or scheduling.
  • "Score my writing" Form/Fit/Both/Off picker added to the Library's Study-scope sheet (previously quiz-only). Off ⇒ FREE practice collapses to Clear · Next and records no history row (SRS/unlock unaffected).

Changed

  • Scoring is restricted to a single 1×1 cell; multi-copy 2×2/3×3 layouts are treated as repetition worksheets (no score).
  • Word stroke-preview sizing fixed so 3+ kana words show every demo at once (no clipping).

Fixed (review rounds during this batch)

  • scoringMode / scoreStats preserved across session rebuilds (was silently reset by "Start next session").
  • Stale async handwriting-recognition results can no longer clobber the current glyph's score.
  • First-trace introduce + increment run sequentially so the trace count can't be lost.
  • ScriptScope word gating is per-reading-unit, so a mixed dakuten+yōon word (でんしゃ) is offered only when actually unlockable.
  • Stale word-score chips cleared on scoring-mode change; word-preview effects scoped by engine identity.
  • Added the project's first ViewModel tests.

HiraKataQuest

Full kana inventory (all hiragana + katakana)

Added

  • Extended kana (third opt-in) — small tsu (っ/ッ), small vowels, ゔ/ヴ, 22 foreign-sound katakana composites (ファ/ティ/ヴァ/シェ …), and obsolete ゐゑ/ヰヱ. Completes the inventory: 113 hiragana + 136 katakana, ~397 words.
  • Yōon (second opt-in) — contracted syllables (きゃ/しゅ/きょ …), the app's first composite characters (2-code-point glyphs whose strokes are composed from a base kana + a small ゃ/ゅ/ょ). KanaUnits groups a base + small kana into one reading unit.
  • Dakuten / handakuten (first opt-in) — voiced (が/ざ/だ/ば) and semi-voiced (ぱ) kana for both scripts, classified from the glyph via Unicode NFD (KanaKind).
  • Katakana — a second script alongside hiragana (46 homologues + ー), a persisted activeScript setting, and a Hiragana/Katakana selector in the Library.

Each advanced group is off by default (a Library toggle folds it in) so beginners meet only the base gojūon first. The learning engine and Room schema were reused unchanged (new rows are additive; off-scope cards are inert orphans).

Changed

  • Deck grown from 5 characters to the full 46-character basic gojūon (あ〜ん), then to the complete voiced/yōon/extended sets, all via the KanjiVG stroke-geometry pipeline.
  • Vocabulary grown to hundreds of composability-validated words per script.

Fixed

  • startNextSession no longer drops activeScript / opt-in settings on rebuild.
  • Script/scope toggles act as in-place Library filters instead of bouncing the user out.

HiraKataQuest

/05: Rebrand & smart-learning polish

Added

  • Rebrand to "HiraKataQuest" with a new hinomaru launcher icon.
  • Handwriting-quality scorer (domain/scoring/ — geometry form/fit dials + ML Kit digital-ink recognition; advisory only, never touches SRS), persisted via Room v3.
  • "Quiz me!" write-from-memory mode.
  • Library overlay for free practice of any character/word, plus a list ⇄ chart (gojūon cheat-sheet) view.

Changed

  • Stroke geometry re-sourced from KanjiVG (CC BY-SA); ink rendered as a variable-width brush ribbon.
  • Force-dark opt-out (light-only theme) after a dark-mode device inversion.

HiraKataQuest

Phase 3: Smart Learning System

Added

  • Spaced repetition (SrsScheduler, simplified SM-2) and session generation (LessonGenerator) — pure, clock-injected, unit-tested.
  • Vocabulary unlocking — words unlock once every required kana is learned.
  • Session state machine (PracticeViewModel): REVIEWS → NEW/PRACTICE → VOCABULARY → COMPLETE → FREE; grades AGAIN/HARD/GOOD/EASY.
  • Persistence — Room v1→v2 (MIGRATION_1_2: rename practice_attempts → practice_history, add source, add SRS/progress/vocabulary tables), exportSchema.
  • The project's first tests (45 JUnit4).

HiraKataQuest

Phase 2: Animated stroke-order demonstrations

Added

  • StrokeAnimationEngine — strokes draw themselves in recorded order, direction, and rhythm, with visible pen lifts; play / pause / replay / speed (0.5×–2×) / auto-repeat.
  • Timed strokeAnimations data generated offline from the SVG stroke paths; the static numbered diagram (StrokeOrderDiagram) became the fallback for glyphs without timing.

Fixed

  • Guide-panel controls no longer crush to zero width on short screens.
  • strokeAnimations are consistency-checked against strokes[] and voided (with a fallback to the static diagram) when malformed.

HiraKataQuest

Phase 1: Static tracing MVP

Added

  • Initial app: single PracticeScreen — character guide (top), a custom Compose tracing Canvas with a 2×2 genkōyōshi grid + light-grey ghost glyph + stylus/finger input with pressure capture (middle), and Clear / Next / grade buttons (bottom).
  • Drawing engine (StrokePoint / UserStroke / DrawingSession, CanvasState), MVVM structure, Material 3, minimal Room, and the first 5 hiragana (あいうえお).

June 2026

One More Tile

0.9.1 Reliability fixes

  • Clearing your last mistakes can finish a region.
  • No region strands a few tiles inside another one. On Flash, two stray tiles went back to the region around them.

One More Tile

0.6.0 Music

  • Background music in the header.
  • The 3×3 highlight stays inside the current region.
  • The header works on small screens.

One More Tile

0.4.0 Region quotes

  • Finishing some regions shows a character quote, and you can replay it by clicking the region.
  • Solved picross patches stay in colour after a reload.

One More Tile

0.3.0 More canvases

  • Several canvases, each with its own saved progress and its own puzzle.
  • Regions follow the edges in the painting, so each finished region shows a recognisable piece of it.
  • Share your progress as a code or a file.
  • A play timer.

One More Tile

0.2.0 Hints and undo

  • Undo, a 3×3 highlight under the cursor, and hints that explain the move.
  • The easier tiers need only plain counting.

One More Tile

0.1.0 First release

  • A fill-a-pix puzzle with sudoku and picross mixed in, five difficulty tiers, gamepad support and autosave. Solving it reveals a pixel-art painting.

Chess 2.0

4 commits

  • e4111d1 Improve control dropdowns: 2x2 grid, custom arrow, mobile sizing
  • 9721aef Shrink and reposition evolution counter on small boards
  • 8e1936a Add draw rules, scoreboard, gambling, undo, responsive board
  • fa5da47 Chess 2.0 - RPG evolution chess in a single HTML file