Language Relay 2.5.3 (build 28) – 2026-09-24 - compact menu mark: filled for Russian, outline for English - value modes show RU or EN; accessibility and tooltip always name the active layout - conversion and offscreen UI tests pass, including distinct pixels for both languages in all visible modes Language Relay 2.5.2 (build 27) – 2026-09-17 - bridge watchdog: a busy flag older than five seconds is released at the next gesture and written down as busy-timeout, so a dead run can no longer swallow the repair gestures - build 27: a released flag is counted and dated in its own slots, because the gesture the release lets through overwrites layout_pilot_last_status in the same call and the busy-timeout reading was gone before the owner could see it - build 27: the bridge row prints the released flags after the state, 'ready · started-shift · 1 timeout 12s ago'; --bridge-json carries timeouts and timeoutAgo, and the lua test asserts the timeout is still visible after the releasing gesture - bridge lua 2.4.1: layoutPilotStatus() adds timeouts and timeoutAgo, layoutPilotStatusLine() carries nine fields - every exit of the repair path passes through a reset, including a raising accessibility read, and the path without one is covered by an offscreen lua test - layoutPilotStatus() reports tap, busy flag, secure input, last status and settings; the panel prints it in the bridge row and repairs it with one restart bridge press - at launch the app reads the bridge once and restarts it only when the tap is off or a busy flag is stuck, and says so in the row - panel frame 420 x 672: the bridge row plus the room the setup card had been squeezing out of the rows below it Language Relay 2.5.1 (build 25) – 2026-09-17 - build 25: one slot name header-character for the family, dead hidden-mode state removed Language Relay 2.5.0 (build 23) – 2026-09-17 - the blocker speaks through the shared hint card: mark 40 pt, the state as the title, the detail as one line, buttons open and hide - one reading of the setup state feeds the card, the collapsed button and the QA route, so the panel says one thing about one blocker - --live-json: a read only watch over the input source that prints every layout switch it saw, with the second it happened at - the watch turns the run loop between samples, so a real switch is seen; the first build read the source it had at launch Language Relay 2.4.1 (build 21) – 2026-09-16 - relay 2.4.1 build 21: version line in the header, one popover instance, menus leave with the panel, segment names follow the selection - dense character restored, the mark is two opposite arrows with a red tip on the outgoing one; the arch of 2.4.0 is withdrawn Language Relay 2.4.0 (build 16) – 2026-09-16 - header right edge in the family order (rule 32): version · settings · pin · ×, the version leaves the line under the product name - bottom line as three nodes (rule 22): hint-keys · hint-esc · hint-status, the split Calendar Control and MEM PRISM already expose - accessibility identifiers are contract names (rule 34): settings, sound, setup, layout-switch, gesture-shift, gesture-option, open-accessibility - new product mark: the arch relay-arch, one idea and four strokes, chosen out of three variants (docs/design/relay-mark-2.4.0.md) - live character rebuilt: 80 voxels, stepped arch, ink feet and a red landing foot; a click mirrors it on x and the foot changes side - menu bar carries the mark glyph as an 18 pt template image (rule 26) instead of the mono voxel block - pin migrates once to transient (rule 29); appear and close stay on the shared tokens Language Relay 2.3.9 (build 15) – 2026-09-16 - one appear transition from the shared token motion-panel-appear (200 ms, 0 under Reduce Motion); language-relay design reports panelAppear, windowAppear, windowAppearShift - the panel is transient by default: an outside click closes it, the header pin ◉/○ (between settings and ×, same glyphs as MEM PRISM) keeps it open; ×, Escape, Command-W, the bar click and --testbed hide close it the same way - N1 exports 2026.09.16-n1 vendored byte for byte, the shared AIMHintCard.swift compiled in and covered by the design receipt - --testbed show|hide|toggle presents the panel for agent checks without activation, in the bottom-right corner; the user's app stays frontmost, the cursor does not move - UI self-test asserts the appear tokens, the pin default and the pin button; QA table docs/QA-2026-09-16.md run on the testbed without a synthetic click Language Relay 2.3.8 (build 13) – 2026-09-14 - Command-W closes the panel like Escape and ×; the root view carries the key equivalent because the accessory app has no main menu - Tab and Shift-Tab reach every button with the 2 px focus ring even when macOS Full Keyboard Access is off; the popover gets an explicit key view loop - the footer names only the repair gestures that are switched on: ⇧⇧ ⌥ · repair, ⇧⇧ · repair, ⌥ · repair or gestures off - --render-ui out.png [--expanded] [--health ready|denied|unavailable] renders the bridge and permission states offscreen; --key-loop prints the Tab order - QA table with 40 checks in docs/QA-2026-09-14.md; the UI self-test covers the Command-W equivalent, the key view reach and the footer keys Language Relay 2.3.7 (build 12) – 2026-09-14 - one window contract: header live mark 40 pt · name · version · settings · × on one line; footer keys · esc close · version · status, 11 pt on the 16 pt grid - settings opens setup details, switch layout and quit; × and Escape both close the panel - light relay character v2: 36 voxels, assembles 0.7 s after the first drawn frame, 2 pt hover lift, click scatters and swaps the arrows - timer only during a run and while the popover is visible: layout switch, cue and gesture keep the app at or below 2 % CPU - product page: what's new from release-notes.txt, real panel screenshot in the hero, N1 social card with the character, zip download with SHA-256 Language Relay 2.3.6 (build 11) – 2026-09-14 - live product mark: the relay voxel character in the panel header, cursor parallax, scatter → assemble on click - the same character as an 18 pt template image in the menu bar next to the active alphabet cell - shared AIMVoxelModels.swift and AIMVoxelView.swift vendored byte for byte, verified by the design receipt - language-relay design reports liveMark, voxelModelsVersion, voxelModelsSHA256 and voxelCount - product page: shared aim-i18n.js switch (en default, ру), interactive character in the hero Language Relay 2.3.5 (build 10) – 2026-09-13 - generated N1 Swift/CSS tokens with verified artifact receipts - 420×488 native panel with bundled Plex fonts - keyboard focus survives panel refreshes; local arrow navigation - finite setup disclosure transition with an immediate reduced-motion state - language-relay design exposes the installed design identity Language Relay 2.3.4 – 2026-09-12 - native-white G2 palette with bundled IBM Plex Mono, neutral controls and short active indicators - panel fixed at 420×488 for collapsed and expanded setup, 8 pt controls, 16 pt shell - setup warnings check Hammerspoon's verified Accessibility/bridge state - bridge protocol 2.3.3 separated from the native app version - six offscreen health/disclosure layouts and a background update lane with verified rollback copies Language Relay 2.3.3 – 2026-09-07 - default correction scope is Last Word, with a one-time migration from the phrase default - standard repairs go through undo-friendly edit events; direct AXValue writes stay an explicit fallback - background coverage for special-character suffixes, default scope, direct-AX routing and bridge shutdown - menu-bar Quit and language-relay quit stop the Hammerspoon repair bridge - website copy and demo refreshed around word repair