Releases: Whq02/MercuryCLI
Release list
Mercury v1.0.0-beta.17
Provenance: every archive manifest is signed with the Mercury release key (mercury doctor shows the verdict; docs/TRUST.md says how to check).
Mercury 1.0.0-beta.17
- Changed the session box to five rows with a small sprite of your creature: the SESSIONS strip under the chat and the roll-up line beside the critter are gone, so the chat has more rows; /critter switches between the small and the full critter, /critter on and /critter off name them, /critter pick chooses the creature, and the choice is kept across boots
- Changed the session box's title to VIEW: a click on it switches the critter between small and full, the same as /critter
- Added a FILES box to the left rail naming the folder: a click, ↵ on it or /files opens the project tree over the chat in the picker's frame, folders open and close, the file you are on is marked, a changed file carries its git mark, / filters by name, ↵ on a file puts its path into the composer and closes the menu, and esc or a click outside closes it; a setting restores the rail as shipped
- Changed the panels that close with esc to close on a click outside them too: the model picker, the file tree, and the settings, status, config and usage panel; the click closes the panel and touches nothing beneath it
- Added m on both Boot faces to open the model picker with its effort row: the model and effort you pick become the default for new sessions, and the bottom row reads "⇧→ concourse · m to select model-default" at every terminal height, a fresh install's included
- Changed the concourse's m key: with the new-session entry focused it opens the same default picker, and on a session row it opens the full picker for that session; the short list is gone, and no picker shows a frontier line
- Changed the model picker to open centred in the chat, as it does over the board and the Boot face; a setting puts it back at the left edge
- Changed every family's model list to refresh in the background when a picker opens: OpenRouter, Gemini, Hugging Face and local rows join OpenAI, changed rows land in place with a one-line notice, and the Boot face and session-row pickers refresh too, so GPT no longer shows "connecting" until a session has started
- Changed the first-run cards to sit centred on the screen, with a light brown trust tone and rewritten words; a setting restores the top-left cards
- Fixed the bottom row on small screens losing its way back while a notice stood: the way back stays on the right and the notice is cut to fit
- Added shift+B while a shell command runs: the command goes to the runner as a background task and the agent is freed, with a notice saying where it went; the hint row and the ready line name the key only while a command runs
- Changed every provider's busy refusal to be retried quietly on a growing wait for about thirty seconds, then with a retry line, and a red line only when the wait is spent; a calm line names the provider on recovery, and esc ends a wait
- Fixed the transcript's sign-in line not naming the account: it reads "Login successful — signed in as ", and /status keeps the organisation name after a switch
- Fixed the effort chip showing "(asked)" for its first second: it shows its value from the first frame
- Fixed the compact board's contract offer card overflowing at 80×14 and 82×17: its question and its Yes and No rows fit
- Fixed two small-screen faults after a failover: at 80 columns the sentence keeps its "/model to return" tail, and the band says ready only once the session has landed
- Fixed the chat showing "thinking" while a sub-agent ran: it keeps "waiting for the agent" until the runner reports idle
- Fixed a transcript loaded while its last line was still being written reporting itself degraded
- Fixed the workspace trust card flashing at boot in a linked worktree of a trusted repository
- Fixed the daemon's log lines putting their timestamp at the end: every line leads with it
- Fixed Grep missing anchored globs under a symlinked search root on macOS: ripgrep receives the root's real path
- Fixed the boot-time account read using a different base address from the usage read
- Fixed the note telling a background sub-agent its tool search was disabled while its deferred tools worked, and the picker's unavailable GPT rows showing a context figure the live rows lack
- Added a release check that judges every hand-typed model id against the live model lists and refuses an id the lists lack
- Fixed the process sweep on Linux reading every Mercury process as not ours: it reads the executable's name, not the main thread's
- Fixed a stopped named teammate's row on the crew board refusing to respawn on r, and a row staying marked as running when its spawn failed because the team did not exist; the main agent is told when an agent is stopped or resumed from the board
- Fixed a daemon that exited just after answering a new window costing the window a retry: startup repeats its daemon check once
- Changed the status line above the composer to rest on "ready · · ", with the /effort receipt standing on that line for eight seconds in the calm grey before the words return
- Added a new-session line at the top of the concourse board when sessions exist: ↑ reaches it, ↵ starts a session, and m on it opens the default model picker, while m on a session row keeps opening that session's own picker
- Changed /logins in the chat to open on the same sign-in sentence the first-run walk uses
- Fixed an image pasted while a turn was running reaching the provider as a stored reference, so every later request failed with a 400 about an unknown image source; the image now reaches every provider as its bytes and a session already carrying the reference recovers on its next send
- Fixed shift+B saying nothing when the runner refused to background the command: the refusal's sentence now shows on the notice row
- Fixed the FILES box and its tree browsing the folder the window opened in after a hop into a session from another project: both follow the session's folder, and a picked file's path is relative to it
- Fixed a sub-agent's quiet provider retries not counting against its recovery time: they count, and the main chat's quiet retries look as they did
Mercury v1.0.0-beta.16
Provenance: every archive manifest is signed with the Mercury release key (mercury doctor shows the verdict; docs/TRUST.md says how to check).
Mercury 1.0.0-beta.16
- Fixed the Anthropic sign-in showing the previous account after a switch: every screen shows the new account the moment its credential is saved
- Fixed the Edit tool restyling quotes in a file of no known language: only prose gets typographic quotes; everything else lands byte for byte
- Changed an edit of unread lines in a file the session has read to land in one call, its result carrying the edited lines with fresh anchors; a file not read at all still asks for one read first
- Fixed a pasted text chip losing its bytes when its send crashed: the bytes are stored at the paste and found again by their hash, and a chip whose bytes are gone says so
- Fixed a usage cap on the session's own turn not raising the failover offer card: the card appears and marks that provider's row
- Fixed the rail's context figure staying stale until the model picker opened: it follows the live model list as soon as the runner has fetched it
- Fixed the mode chip and the mode band painting nothing for a new chat's first second: a chat shows its model, effort and mode from its first frame
- Fixed a new Gemini chat refusing with "no credential" while the account or key was present: the refusal names the source it tried, the status it got and how to recover
- Fixed pressing x twice on a running sub-agent's row not stopping a named teammate while reporting success: the stop reaches every kind of row, and the receipt says applied only once the row has ended
- Changed the shell result's note about scrubbed session variables to appear once per session, then only as a short line when a command names one
- Fixed the THEMIS blocklist refusing a read-only git config query for the hooks path: the rule matches a write of the key alone
- Added an ISO timestamp to every line of the daemon's log
- Fixed the cache-clock record landing under a mirrored copy of the config home's path: it lands beside the session's transcript
- Fixed WebFetch refusing when its summariser model is not signed in: it summarises with the session's own model, or returns the page with a note
- Fixed /status exiting Mercury when CI is set with no API key: it reads the refusal as no key and paints the stored account
- Fixed a background command's completion reaching the agent only at the end of its turn: it is offered at the next tool boundary
- Fixed a new chat refusing to start when the saved default model's family had no credential: the chat starts on the newest signed-in family with one warning naming the way back, and /model in that chat saves a new default
- Changed the Gemini model picker's refusal to name the source it tried and the HTTP status, with the remedy on its own line
- Fixed a test fixture key reaching a real credential store: a login write is refused when the config home is the operator's, and a stored key of the fixture's shape is named as a test key with the command to remove it
- Fixed a Mercury window opened during the previous daemon's shutdown waiting thirty seconds and then refusing to start a chat: the new window starts its own daemon as soon as the old one has left
- Changed a typed message and a background completion waiting together at the end of a turn: the message starts the next turn and the completion is read inside it
- Fixed a confirmed failover losing its note when the model landed: the landing publishes the switched model, so the note and the strip's mark stay
- Changed the model picker to open at once on the GPT rows it has and refresh the live list in the background, replacing changed rows in place with a one-line notice
- Added messages between agents: a background sub-agent can message its main agent and the main agent can reach a sub-agent, each read at the receiver's next tool boundary or turn end, with a receipt when it is read
- Fixed a Google account's Gemini chat refused with HTTP 401 while its model list worked: the chat uses Google's native generation call with tool calls and thought signatures preserved, a Gemini API key keeps the compatibility call, and a refusal carries Google's own reason
- Changed the Gemini sign-in card to walk you through it: the API key first (the AI Studio key page opens, one paste), or a Google account as six numbered steps that each open their Console page; a refused sign-in returns to the step that answers it
- Changed a Gemini busy refusal to be retried quietly for about a minute before the red error, with one calm line above a recovered answer and Escape ending a wait at once; other providers keep today's single retry, and "Retrying in 0 seconds" reads "Retrying now"
- Fixed every side job of a GPT session (the chat's title, the away summary, the tool summaries, the web fetch summary and the rest) asking for a helper model OpenAI had retired: the helper comes from the account's live model list, or the session's own model when the list has none
- Fixed the web fetch tool returning its summariser's error as the page summary: an error counts as a failed attempt and the session's own model is asked; a release-day check compares every typed model id with the live lists
- Added a Mercury processes row to the doctor: it lists stale Mercury processes with their pid, terminal, age and reason and ends them only after showing the list and asking; nothing is ended at boot; mercury doctor processes with --end-stale does the same headless; on Windows the row reads processes through the system's management interface
- Fixed a Moonshot sign-in's default model and picker rows coming from a typed table instead of the live model list, so a retired model became a refused chat: the default and the rows follow the fetched list, and a model the list lacks is refused before the call with the catalogue's own words; three retired GPT ids left the typed table
- Added a Model lists row to the doctor that checks every typed model id against the live list its family served: a typed id the list lacks is a warning; Z.AI publishes no list and keeps its dated table, and the release-day check can probe its ids by one minimal completion each behind --probe-by-completion
- Changed the DeepSeek and Moonshot model-list readers to say in one sentence when a body is not JSON or an endpoint could not be reached, with the cause's code
- Fixed the test census on Windows reading Windows paths as POSIX, so it missed every driver
- Fixed four things the Windows walk found: the capture config read as UTF-8, a read-only git config query cleared by the write block, the Gemini catalogue's unreachable state naming the source and the remedy, and the rail's context row read after the picker closes
- Changed a stream cut the model continued from to paint one calm line, Continued after 1 stream cut, in place of the red error card; the red card stays only when the recovery fails; every cut writes its details to the debug log
- Changed two lines typed in a row behind a finished background command to share one turn, with the command's notice read inside it; a shell line still ends the batch
Mercury v1.0.0-beta.15
Provenance: every archive manifest is signed with the Mercury release key (mercury doctor shows the verdict; docs/TRUST.md says how to check).
Mercury 1.0.0-beta.15
- Added one update command for every install channel: mercury update inside a Homebrew or npm install asks once and runs that channel's own upgrade with its output streamed, then re-reads the installed version; --yes skips the question; --check, --status, --rollback and the doctor say the same in every channel; an npm-made install is named for what it is
- Added a once-per-release line to the boot screen's bottom-right corner, "vX.Y.Z available · mercury update", from the update notice's cached answer; the chat's expiring line stays
- Fixed the shared daemon shutting down when the Mercury that started it closed, which cost every other open Mercury its runner: the daemon now passes to the oldest open Mercury still holding a session and stops only when the last one closes; a restart armed by a new build waits for every live session, including one opened after the arming
- Fixed a refused send dropping the pasted text: the pastes come back with the words, so the next send carries them
- Renamed /release-notes to /update-notes (the old name still answers for one release): the card shows the running release's section with the earlier releases one key away in the transcript pager, and a headless print carries every release
- Fixed a long command result ending in a tall empty band, and the last character of a full-width line hiding under the pane's edge: the text is measured at whole cells and the gutter keeps its width, so a line that filled the old span wraps one column earlier at 120 columns and above
- Removed Minerva, the notepad curator: its room and /tabula, the /minerva command, the ask line on the rail's notes card, the MINERVA tab of the prompts panel, the boot-menu row and the minerva sub-model container are gone; the notepad and /note stay as manual capture under a TABULA card, the prompts panel keeps its three tabs, and /submodels is the Console's picker; a configuration that still carries Minerva's settings is read without complaint
- Added one notice into a session's own context when its provider's usage window is about to close: the provider, the window, the percent used, the reset and what to do before the stop; once per window, and never from a provider that states no usage
- Fixed the context figure on the rail reading a provider's published window as a fact: it carries a mark until the account's live list answers, then shows the list's figure
- Fixed the command palette, the file opener and the content search vanishing when opened in the first seconds of a session: the layout no longer remounts when the session's process connects
- Fixed the words on a closed chat that never held a message: its stopped row says it is removed, not archived, and its receipt no longer promises a transcript; a queued row's state fits its cell at 120 columns
- Added to the doctor's sandbox row on Linux whether unix sockets are blocked, from the sandbox's own facts: blocked with the helper, open without it, open when the setting allows all unix sockets
- Added a card for a failed Workshop cell with its code, the whole error and the output tail, one keystroke from its row through /tasks and the cell's id
- Added the Sleep tool to a background sub-agent's roster; its wait ends when the shells it launched settle, never on a bare timer
- Fixed a receipt on the composer's hint row being cut off at ordinary widths: while a receipt or notice stands the hints step aside and it takes the whole row, so a default-provider change reads its model id whole at 80 columns
- Changed the failover route's amber sentence to stand two minutes after the switch and after each change of state instead of the whole week; the strip's model segment carries a failover mark for as long as the session runs on the failover route, and /model is still the way home
- Fixed the running turn's token figure counting the reply's characters instead of tokens: it reads the wire's output tokens for every provider once usage has arrived, thinking included, and shows its estimate mark until then
- Fixed the Edit tool turning straight quotes into typographic ones inside code when the file already held some: the quote-style preservation applies to prose alone, and code lands byte for byte in every language
- Fixed the rail not showing a new mission's card until something else repainted it
- Fixed a new chat starting at high effort although the operator had saved another level: a chat born from the boot screen or the New Session strip takes the saved level, and the daemon's high stands only when nothing is saved
- Fixed words typed after a mid-turn model or effort change running on the old model when the turn still had tool rounds ahead: they wait for the turn's end and run as the next turn on the switched model; a sub-agents or workflows switch made mid-turn lands at the turn's end too, with the record following the runner's word
- Fixed a mission set in a chat's first seconds being lost: a mission armed while the chat is still landing follows the session at admission, so its card, its rail row and the runner's stop check see it
- Fixed the rate-limit fixture seam (/mock-limits, armed builds only) arming the runner's latch instead of the screen's on a daemon-hosted chat, so the failover offer card's scenarios read the process the card derives from; the cap latch logs its observe, clear and read on the debug log
- Fixed the first caret move after typing in a chat's first seconds being undone: a click or an arrow key placed before the session's process connects now holds, instead of the caret jumping back to the end of the text one render later
Mercury v1.0.0-beta.14
Provenance: every archive manifest is signed with the Mercury release key (mercury doctor shows the verdict; docs/TRUST.md says how to check).
Mercury 1.0.0-beta.14
- Removed the dead and stale provider beta headers from every request, and removed the context-management and cache-scope estates, the server-side refusal fallback opt-in with its advisor, and the experimental betas with task budgets and redact-thinking; a request on the default path is byte-equal to before but for the headers named
- Fixed an empty reply on the OpenAI and Z.AI routes printing one note and re-sending every time: the note says why the reply carried no words (silence, the output cap, or an empty stream) and only the empty stream is sent again, once
- Added the shell card for a hosted shell's row in Runs: the whole command, its directory, the elapsed time, the exit code and the last lines of output with a count of the lines shown; a long command is clipped so the output stays visible on a short window
- Fixed Continue Last Session calling a session the daemon still holds runner-less: it re-attaches
- Fixed the effort chip, and the model and permission-mode words on the strip, missing a change when the facts feed dropped the event: they catch it within a bounded window
- Updated the DeepSeek rows to the pricing page, and DeepSeek's models now come from its live list with the dated rows standing in when the list is refused; the retired Flash id opens the Flash card
- Fixed a pasted image arriving as text when the message answered an open question
- Fixed the /config row for /seats needing a keystroke before it showed the capacity, and a rewind on a resumed session losing its chain
- Fixed a session that finished elsewhere minting a note the next message answered: it mints none, and a finished session not yet opened wears its state glyph in amber on the board until it is opened
- Fixed background commands that finished together starting one turn each: they start one turn
- Fixed the enter screen's ready glyph painting as an emoji; the narrow board carries a park refusal's words; a notice of several rows stacks under the composer for its moment; the spinner's phase byline and the trace timing that never painted are gone
- Fixed a dialog command's result of more than one line painting as one clipped line: it paints as rows on the chat; closing the only chat before its first message leaves two screens, not a third stop on a dead chat
- Fixed a model or effort change made while a turn runs applying only after the messages waiting for the next turn: it lands at the turn boundary, before them
- Fixed the Computer tool refusing every window of the terminal application: it refuses the window that holds the session and checks the window again before each act
- Fixed an edit refusal claiming the lines it refused were read: it names which check failed and what to read next
- Fixed a filename pattern with no separator walking the whole tree: it walks only as deep as it says; an over-cap read carries its next window on every path, and a notebook names a bounded cell slice
- Fixed the sandbox dependency check on Linux creating a process at boot, and added the sandbox's unix-socket filter helper to the Linux archive so a Linux sandbox blocks unix sockets and /sandbox no longer warns
- Updated the release gate to keep every suite's output and count the checks it skips
Mercury v1.0.0-beta.13
Provenance: every archive manifest is signed with the Mercury release key (mercury doctor shows the verdict; docs/TRUST.md says how to check).
Mercury 1.0.0-beta.13
- Removed the run governor that ended a turn for repeating a tool call with nothing written in between, and the repetition breaker that ended a turn on repeated identical results: a session is never stopped for repeating itself, and an empty provider reply is announced and the request sent again once
- Fixed the live token counter reading near zero while a tool call's input streams: it counts the streamed input, and the wide layout's count keeps pace with the stream
- Fixed an edit refused for lines the model had not read costing a read and a retry: the refusal carries those lines, numbered with their anchor, and a read past the window cap answers its first window with the offset to continue
- Added a prune of superseded file results when the context reaches forty percent of the model's window, a setting, so a long session no longer carries dead results until it overflows
- Fixed the lease verbs disagreeing on their argument's name: claim and release both take paths, read the older word as the same list, and a claim with neither is refused naming both
- Fixed an empty shell command accepted as a background task: it is refused before it spawns
- Fixed a background agent's background command recorded from defaults, missing from the tasks board and never reported back to the agent: the record carries its launch facts, the board lists it, and the agent is told when it finishes
- Fixed a lookup's empty answer from grep, pgrep, cmp, diff or test reported as a failure: it is a result naming the exit code, and a real failure keeps its error
- Fixed the JavaScript kernel's environment going unstated: the Eval tool says it is an ES module without require, where Node's crypto lives and how long an idle kernel is kept; a failed cell names the fact and the import; a declaration whose initializer threw is no longer reported as surviving, and a declaration after a block's closing brace persists
- Fixed a script run from inside a Mercury session refusing the session's own environment stamp as foreign
- Fixed a failed Workshop cell reporting the runtime's plumbing instead of its error: a syntax error carries the parser's diagnosis with line and column, a failed bridge call names the call and the cell line, and the transcript's error wrapper no longer rides inside the cell's message
- Updated the eleven bundled skills, rewritten from current documentation at about half their length
- Fixed the DeepSeek route sending the reasoning effort inside the thinking object where the API takes it at the top level
- Fixed the summary line under a turn counting repeated reads of one file as files read: it counts reads
- Fixed the Boot face's MCPs & Skills page calling the session empty while the bundled skills and the built-in server load: its empty states name what they list
- Fixed --model and --effort on the command line losing to a resumed session's saved values, and /model forgetting its choice at the next boot: an explicit flag wins, the resume card names which won, and /model saves the choice as the default
- Fixed a rejected credential retried ten times with growing waits: it is refreshed once, then the request settles as a sign-in blocker naming the account and the remedy
- Fixed a run recording completed with deliverables still open: no run reports complete while requested deliverables stay open, and an older record that does reopens on resume
Mercury v1.0.0-beta.12
Provenance: every archive manifest is signed with the Mercury release key (mercury doctor shows the verdict; docs/TRUST.md says how to check).
Mercury 1.0.0-beta.12
- Fixed the Git tool refusing a session opened in a folder above its repository: it takes a folder, finds the repository above or directly below it, and names the folder when it refuses
- Fixed stopping a background shell run that had already finished: the answer names when it completed, its exit code and its output file, and is not an error
- Fixed a model switch overflowing the new model's context window: the switch card counts the conversation against the target's window and compacts it first, the summary is written by a model whose window holds the history, and the overflow notice carries Mercury's own count
- Fixed the image limits on the OpenAI route: the pre-send check follows the provider's own rule per image and per request, and an image the provider refused leaves every later request, including after a resume
- Fixed the notice for an agent stopped by a runner restart: it names the reason, after a crash, a settings change or a relaunch
- Fixed the daemon spawning a throwaway warm runner at every boot: the first chat claims the runner that was warmed
- Fixed a boot from a folder that no longer exists: one plain line instead of a crash screen and a crash notice on the next boot
- Fixed the doctor writing the global config and a verify index on every run: a health check is read-only, and its daemon sign-in row no longer calls a catalogue timing gap a fault or asks for a daemon restart
- Fixed a teammate that died at its first request being reported as running, a team lost when its lead restarted, and a workflow failure line that carried no cause
- Fixed delegated agents refused on the OpenAI route after a usage window reset and a sign-in again: the session follows the current sign-in's window and model list, and a refusal names the window alone
- Fixed the account board's family headers reading a slot ceiling as a count: they name the family alone
- Added the Godot scene tree read over the engine debugger during a profile boot, plain answers for queries during a capture or profile boot, and a doctor warning for a retired Godot setting still set
- Changed shutdown to write nothing to a terminal that is gone, and verified the release-channel check's timeout
Mercury v1.0.0-beta.9
Provenance: every archive manifest is signed with the Mercury release key (mercury doctor shows the verdict; docs/TRUST.md says how to check).
Mercury 1.0.0-beta.9
- Fixed a woken session losing its preserved thinking: the history it sends is the one the live session sent, and the record of what was sent survives the wake
- Fixed a new sign-in not reaching the engine behind an open chat, which kept refusing delegated agents with the old account's usage window
- Fixed the cockpit losing the top of its rail after a long notice, and not following the window's size on Windows
- Fixed a task notification redrawn under every new message until it aged out, and a boot that waited on a tool probe
- Added a ledger of unread notices: an idle agent that missed a completion is nudged after three minutes, and its crew row shows the count
- Added refactors through the language service: rename, move a declaration, and code actions by kind, each previewed as data before it is applied
- Added Godot captures, frame statistics and settled profiles as engine jobs, a bridge per Godot instance, a runtime query surface, file leases without a team, a proof-drift check, and the engine's own profiler over the debugger protocol
- Changed the catalog to withhold a tool whose machine dependency is absent, with a doctor row naming why
- Changed the words a message sent mid-turn arrives with, and its row now carries the time it was sent
- Added the box's state and the session's scratchpad to what the model is told
Mercury v1.0.0-beta.11
Provenance: every archive manifest is signed with the Mercury release key (mercury doctor shows the verdict; docs/TRUST.md says how to check).
Mercury 1.0.0-beta.11
- Fixed a line sent while a sub-agent was running being taken by that sub-agent and shown twice in the chat: it now reaches the session's own model once, with the time it was sent
- Removed the daemon's memory limit on session runners: a session is never parked or restarted for its memory use, and its sub-agents are never stopped by it
Mercury v1.0.0-beta.10
Provenance: every archive manifest is signed with the Mercury release key (mercury doctor shows the verdict; docs/TRUST.md says how to check).
Mercury 1.0.0-beta.10
- Fixed the GPT route's tool calls: empty optional fields dropped at the decode, curly quotes straightened where a command, a pattern, a symbol or a path never wants one, and an Edit refusal that names the lines already read
- Added a bundled shell to the Windows archive: a box with no bash runs the shell tool through Mercury's own bash-compatible engine
- Fixed delegated agents refused long after a usage window reset, and an expired sign-in reported as a used-up window
- Fixed the first-run screen, the enter screen and the mascot painting wrong colours in Apple's Terminal and other 256-colour terminals
Mercury v1.0.0-beta.8
Provenance: every archive manifest is signed with the Mercury release key (mercury doctor shows the verdict; docs/TRUST.md says how to check).
Mercury 1.0.0-beta.8
- Changed sovereign mode to be the one bypass: the Boot Menu's Sovereign mode row skips every permission question, computer use included, and the computer-use ask card's fifth answer turns it on
- Added the computer-use access type under it: asks, permissive or full, with asks as the default; with sovereign mode on the default is full, and a saved value wins either way; permissive lets the model work in the application in front when the turn began and asks once before any other
- Fixed a line sent during a compaction standing under the composer for good when the session's runner was replaced before it took the line: the row is removed and a notice names the words to send again; a line the runner keeps is delivered once, in order, and its plate reads held while the compaction runs
- Added the engine job service to the Godot tooling: Mercury runs headless Godot workers itself, in parallel, each on a frozen copy of the project, with a compile gate in seconds and results as data; `mercury godot run|check|jobs|cancel|result` for scripts
- Changed the preserved-thinking notice: the chat no longer shows it; the doctor and health rows carry the count and the cause