v0.1.28
What's Changed
- Release v0.1.28 (95469bf)
- Serve the installer and the vis-agent command as release assets (e1f1062)
- Crown the start menu with the Blockether yellow (49ccf1b)
- Keep the start menu reading parked drafts when the menu is re-anchored (18eadb0)
- Ship a dark-theme vis logo and un-matte the transparent marks (ec83439)
- Fix numpy and PIL sandbox shim gaps for image work (5d1944e)
- Take the keyboard down before the attachment sheet (8f2a0f3)
- Delete a session without waiting on its live teardown (7d90486)
- Point the design-shots section at cap/shot! (d45ddf0)
- Make TUI screenshots one call and paint italic and underline like a terminal (367bbe1)
- Build the OAuth file refresher lazily so its lock path is the user's (0ff2630)
- Re-anchor the start menu on resize instead of closing it (a859de2)
- Fix disclosure copy targets landing one row above the painted body (c2cd40d)
- Photograph where the Blockether yellow goes on the start menu (19416e9)
- Read the environment at runtime, not at native-image build time (0d980d9)
- Give every machine its own coloured rail in the sessions list (e8b2b56)
- Give every commit on main its own CI run (e819e86)
- Rasterize a bold run as bold, not as the mono face's only weight (46590f6)
- Never cancel a CI run for the commit already on main (451fa1e)
- Select the runtime an update names (a09ee8b)
- Invert the vis-table card header onto its own dark band (52c059f)
- Clone the dev checkout on main when there is none (3f0f266)
- Separate machines in the sessions list with air and a banner (ed538a7)
- Keep the vis-table card's row bands inside the frame (0e3fafe)
- Dress the vis-table card as a sheet: muted rules, banded head, zebra rows (e5e3827)
- Prove the canvas flush beats reflection, not a stopwatch (0bf4e7d)
- Float sessions holding unsent work and keep their attachments (563738c)
- Offer none authentication in the paramiko shim SSH server (ca2d8e1)
- Make the urllib3 shim a package, not one flat module (297543c)
- Lighten the live badge to a green FILL, not the green ink (86575fd)
- Rasterize captured TUI frames in Clojure, in the theme's own colours (7d62afb)
- Report the inspected session's turn and form-level failures (9f70095)
- Ignore Wrangler local dev state (d05b62c)
- Give the live count the unread badge's filled block, in green (6480d32)
- Refresh the companion incremental build info (0cdb59d)
- Record svar 0.7.100 in the dependency audit (6b7b4cb)
- Judge the PIL pixel-read budget by canvas ratio, not wall clock (9641dff)
- Report the real cause when a lazy Python shim fails to import (a60ade9)
- Render a vis-table preview as one stretched card (7d21dbd)
- Pin ruff at 0.3.4, whose reported version is the released one (36d8e80)
- Cross-validate the vis-table pipeline on the TUI (a53af23)
- Cap a turn whose provider never answered at a tight first-output ceiling (6060ebd)
- Stop cancel from settling a live turn's durable row (0a92426)
- Keep attached CSV rows out of model context and rebuild the grid (0e4242f)
- Fail a Python lint/format target that holds no Python (6dc17be)
- Bracket the live count in a scope chip (afa1480)
- Name the publisher's relay by default on the gateway too (774e9b9)
- Let the scope strip own the fleet's live and unread counts (31c4bb4)
- Let a device name the relay that sealed its grant (7a87cbf)
- Add ruled-grid and cell-inspector table design proposals (8781c07)
- Reformat the bs4 shim with ruff (1614301)
- Count the files a Python lint read, not the ones with findings (09383af)
- Show unread as the filled badge, not a bare number (3abd1b8)
- Report rows changed from sqlite3 executemany (de25ca3)
- Make the urllib3 shim match urllib3 2.x behaviour (6c0f573)
- Render tables through a vendored python-tabulate (943f7b7)
- Page the CSV table viewer instead of filtering it (faf5f94)
- Show a chip's live count as a coloured (N) (5086b22)
- Drop unresolvable fault locations from Clojure test results (bfb63ad)
- Keep an Android device Google only disliked one message from (9c803ef)
- Decide a notification's size before a provider does (4a3d96c)
- Add a vis-table design gallery variant (6500d3d)
- Name the relay a machine chose, and say so when it refuses one (1e938b3)
- Make the requests and httpx shims behave like the real clients (fe5175e)
- Ask a stumbling relay twice and never hand a grant to cleartext (63b849b)
- Fetch the relay healthcheck URL the workflow was given (300444b)
- Register through the relay when a machine holds no push key (8f0d4a2)
- Expose httpx.Response.elapsed in the sandbox shim (ea0f30b)
- Price strict tools by the provider's real grammar slots (b6e7249)
- Render attached CSV as an interactive table in TUI and companion (6ea932a)
- Grant the relay workflow only what a deploy needs (f39021e)
- Bound the relay's request body and never leak a stack trace (84bd31f)
- Stream iterable request bodies instead of form-encoding them (94970f5)
- Correct the APNs environment-retry comment for a stateless relay (e19c030)
- Seal the relay's grants and delete its database (1bdd8f5)
- Meter the relay's public routes before they can cost anything (a821eed)
- Deploy the relay from CI on every commit that touches it (56fe513)
- Relay push through a grant so a gateway needs no signing key (e2b8afa)
- Size the fleet scope chips to the app control scale (3347936)
- Keep sessions with unsent messages in the companion list as dirty rows (052ac30)
- Accept a label caption on vis_attach and vis_attach_bytes (063e9fa)
- Constrain sampling of the tools whose payload can be mis-serialized (b0b8699)
- Document red-then-green regression discipline and link regression tests to their issues (28c3efb)
- Document that APNs and FCM credentials bind to the app build (21d1e8b)
- Report companion search as a fleet question (ab5bc6b)
- Make struct_patch
matcha sub-expression selector under every locator (6d78ec1) - Organize companion sessions by machine (ea200ee)
- Keep a timed-out Python block's output and budget HTTP evals (7bc2c93)
- Derive per-tool strict sampling from the wire schema (14d11f6)
- Add companion design gallery for screenshotted UI proposals (8412114)
- Keep enforceable schema constraints on the model-facing wire (4b82fb4)
- Detect awaitables by type so BeautifulSoup survives auto-settle (4d21cb7)
- Name the sending gateway in every push alert (db80d9a)
- Accept a scheme-less gateway address in the connect form (a298199)
- Paint authored line breaks in the companion thinking card (25988a4)
- Correct the tool-schema docstring: nothing re-validates inbound input (2537cc5)
- Run the container gateway on the JVM instead of the native binary (bc473e2)
- Keep a shell command's own line structure in the COMMAND card (9663526)
- Coerce a stringified patch edits batch instead of refusing it (8173058)
- Keep tool-authored blank lines inside op-card sections (f020753)
- Enforce queue retraction at the single queued-turn writer (62941ef)
- Run settings MCP and provider verbs as magit transients (da6cf30)
- Render a pending git call with the finished card's renderers (436cc17)
- Coerce reversed and non-positive cat windows instead of failing the read (d4e1c0c)
- Make the TUI queue mirror survive repeats, cancels and acks (d7f582c)
- Pin the Character/codePointAt registration every YAML read needs (39acd84)
- Render a running native call with the finished card's own renderer (42dec7b)
- Name the offending cat range window in the rejection message (bd36a7b)
- Correct the queue-mirror identity docstring for optimistic rows (6fb6376)
- Show a queued TUI submission the instant it is sent (a9324f3)
- Extract the magit transient into an embeddable component (cf9327a)
- Key the live render cache on a running call's display fields (15ef8f4)
- Render a running native call as its own op-card (d39ddf8)
- Guard TUI submissions in flight against double queueing (67ee89f)
- Move providers into TUI Settings (b789941)
- Carry native input on every pending tool-call block (f4aafdc)
- Pin svar 0.7.99 so provider responses are never interned (cf3e00b)
- Default TUI frame renders to the bundled JetBrains Mono (8b379d1)
- Pass the requested font family through the PIL shim bridge (c591fd6)
- Detect a dead GraalPy context by asking it, not by matching error text (15df749)
- Cap rendered TUI frame PNGs at 1024px per side (396c009)
- Heal Python extension symbols whose context was torn down (a165416)
- Pin svar 0.7.98 so tool arguments are never interned (6400859)
- Narrow the tool-call door to model drift and extension EDN (7a5b765)
- Bind the session environment for Python hook callbacks (133de48)
- Record the measured cost of dropping builder swap and heap limits (c13bb7f)
- Measure the wire image cap on the base64 payload (0dfa763)
- Render TUI capture frames legibly and under a 2000px cap (7a9eb30)
- Stamp every Python sandbox shim with file and version (a176541)
- Pin svar 0.7.97 for strings-only tool arguments (a8443d0)
- Drop launcher-owned runtime and update commands from the binary (555a52d)
- Guarantee every wire image is measured under the pixel ceiling (9782a13)
- Normalize svar tool calls to strings at one engine door (583c359)
- Cap wire image dimensions so many-image requests survive (5b8d5df)
- Pin the owned source checkout instead of cloning it (bf42529)
- Cross the PIL draw bridge once per run and convert rasters without reflection (75f894a)
- Glue the magit transient band to the dialog's bottom chrome (b12b18a)
- Pin that a tapped notification lands on its session screen (dab9632)
- Batch PIL draw ops into one cdylib call (ea08bab)
- Open the session a tapped notification is about after a cold start (71ecc2a)
- Stringify keyword tool-argument values at the svar edge (8b2363d)
- Pin the status-bar padding of the chrome-less session screen (dc86aa5)
- Batch PIL shim drawing through one live imaging image (9715dde)
- Keep companion chrome when a notification opens a session (bc36b82)
- Anchor magit transient band to its own hint bar (dcc6d81)
- Fall back to any healthy container engine in release-native (27d4e9b)
- Carry the vis-agent command through a source update (69f2c71)
- Accept bare runtime words in vis-agent update (271f5f9)
- Document Python layout-read warnings and venv interpreter resolution (031d08c)
- Never prompt for a credential the machine mints itself (543df09)
- release: update release notes for v0.1.27 (14db65e)
Package changes
com.blockether/vis
- Release v0.1.28 (95469bf)
- Serve the installer and the vis-agent command as release assets (e1f1062)
- Crown the start menu with the Blockether yellow (49ccf1b)
- Keep the start menu reading parked drafts when the menu is re-anchored (18eadb0)
- Ship a dark-theme vis logo and un-matte the transparent marks (ec83439)
- Fix numpy and PIL sandbox shim gaps for image work (5d1944e)
- Take the keyboard down before the attachment sheet (8f2a0f3)
- Delete a session without waiting on its live teardown (7d90486)
- Point the design-shots section at cap/shot! (d45ddf0)
- Make TUI screenshots one call and paint italic and underline like a terminal (367bbe1)
- Build the OAuth file refresher lazily so its lock path is the user's (0ff2630)
- Re-anchor the start menu on resize instead of closing it (a859de2)
- Photograph where the Blockether yellow goes on the start menu (19416e9)
- Read the environment at runtime, not at native-image build time (0d980d9)
- Give every machine its own coloured rail in the sessions list (e8b2b56)
- Give every commit on main its own CI run (e819e86)
- Never cancel a CI run for the commit already on main (451fa1e)
- Select the runtime an update names (a09ee8b)
- Clone the dev checkout on main when there is none (3f0f266)
- Separate machines in the sessions list with air and a banner (ed538a7)
- Prove the canvas flush beats reflection, not a stopwatch (0bf4e7d)
- Float sessions holding unsent work and keep their attachments (563738c)
- Offer none authentication in the paramiko shim SSH server (ca2d8e1)
- Make the urllib3 shim a package, not one flat module (297543c)
- Lighten the live badge to a green FILL, not the green ink (86575fd)
- Rasterize captured TUI frames in Clojure, in the theme's own colours (7d62afb)
- Report the inspected session's turn and form-level failures (9f70095)
- Ignore Wrangler local dev state (d05b62c)
- Give the live count the unread badge's filled block, in green (6480d32)
- Refresh the companion incremental build info (0cdb59d)
- Record svar 0.7.100 in the dependency audit (6b7b4cb)
- Judge the PIL pixel-read budget by canvas ratio, not wall clock (9641dff)
- Report the real cause when a lazy Python shim fails to import (a60ade9)
- Pin ruff at 0.3.4, whose reported version is the released one (36d8e80)
- Cap a turn whose provider never answered at a tight first-output ceiling (6060ebd)
- Stop cancel from settling a live turn's durable row (0a92426)
- Keep attached CSV rows out of model context and rebuild the grid (0e4242f)
- Bracket the live count in a scope chip (afa1480)
- Name the publisher's relay by default on the gateway too (774e9b9)
- Let the scope strip own the fleet's live and unread counts (31c4bb4)
- Let a device name the relay that sealed its grant (7a87cbf)
- Add ruled-grid and cell-inspector table design proposals (8781c07)
- Reformat the bs4 shim with ruff (1614301)
- Show unread as the filled badge, not a bare number (3abd1b8)
- Report rows changed from sqlite3 executemany (de25ca3)
- Make the urllib3 shim match urllib3 2.x behaviour (6c0f573)
- Render tables through a vendored python-tabulate (943f7b7)
- Page the CSV table viewer instead of filtering it (faf5f94)
- Show a chip's live count as a coloured (N) (5086b22)
- Keep an Android device Google only disliked one message from (9c803ef)
- Decide a notification's size before a provider does (4a3d96c)
- Add a vis-table design gallery variant (6500d3d)
- Name the relay a machine chose, and say so when it refuses one (1e938b3)
- Make the requests and httpx shims behave like the real clients (fe5175e)
- Ask a stumbling relay twice and never hand a grant to cleartext (63b849b)
- Fetch the relay healthcheck URL the workflow was given (300444b)
- Register through the relay when a machine holds no push key (8f0d4a2)
- Expose httpx.Response.elapsed in the sandbox shim (ea0f30b)
- Price strict tools by the provider's real grammar slots (b6e7249)
- Render attached CSV as an interactive table in TUI and companion (6ea932a)
- Grant the relay workflow only what a deploy needs (f39021e)
- Bound the relay's request body and never leak a stack trace (84bd31f)
- Stream iterable request bodies instead of form-encoding them (94970f5)
- Correct the APNs environment-retry comment for a stateless relay (e19c030)
- Seal the relay's grants and delete its database (1bdd8f5)
- Meter the relay's public routes before they can cost anything (a821eed)
- Deploy the relay from CI on every commit that touches it (56fe513)
- Relay push through a grant so a gateway needs no signing key (e2b8afa)
- Size the fleet scope chips to the app control scale (3347936)
- Keep sessions with unsent messages in the companion list as dirty rows (052ac30)
- Accept a label caption on vis_attach and vis_attach_bytes (063e9fa)
- Constrain sampling of the tools whose payload can be mis-serialized (b0b8699)
- Document red-then-green regression discipline and link regression tests to their issues (28c3efb)
- Document that APNs and FCM credentials bind to the app build (21d1e8b)
- Report companion search as a fleet question (ab5bc6b)
- Make struct_patch
matcha sub-expression selector under every locator (6d78ec1) - Organize companion sessions by machine (ea200ee)
- Keep a timed-out Python block's output and budget HTTP evals (7bc2c93)
- Derive per-tool strict sampling from the wire schema (14d11f6)
- Add companion design gallery for screenshotted UI proposals (8412114)
- Keep enforceable schema constraints on the model-facing wire (4b82fb4)
- Detect awaitables by type so BeautifulSoup survives auto-settle (4d21cb7)
- Name the sending gateway in every push alert (db80d9a)
- Accept a scheme-less gateway address in the connect form (a298199)
- Paint authored line breaks in the companion thinking card (25988a4)
- Correct the tool-schema docstring: nothing re-validates inbound input (2537cc5)
- Run the container gateway on the JVM instead of the native binary (bc473e2)
- Keep a shell command's own line structure in the COMMAND card (9663526)
- Coerce a stringified patch edits batch instead of refusing it (8173058)
- Render a pending git call with the finished card's renderers (436cc17)
- Coerce reversed and non-positive cat windows instead of failing the read (d4e1c0c)
- Pin the Character/codePointAt registration every YAML read needs (39acd84)
- Render a running native call with the finished card's own renderer (42dec7b)
- Name the offending cat range window in the rejection message (bd36a7b)
- Render a running native call as its own op-card (d39ddf8)
- Carry native input on every pending tool-call block (f4aafdc)
- Pin svar 0.7.99 so provider responses are never interned (cf3e00b)
- Default TUI frame renders to the bundled JetBrains Mono (8b379d1)
- Pass the requested font family through the PIL shim bridge (c591fd6)
- Detect a dead GraalPy context by asking it, not by matching error text (15df749)
- Heal Python extension symbols whose context was torn down (a165416)
- Pin svar 0.7.98 so tool arguments are never interned (6400859)
- Narrow the tool-call door to model drift and extension EDN (7a5b765)
- Bind the session environment for Python hook callbacks (133de48)
- Record the measured cost of dropping builder swap and heap limits (c13bb7f)
- Measure the wire image cap on the base64 payload (0dfa763)
- Stamp every Python sandbox shim with file and version (a176541)
- Pin svar 0.7.97 for strings-only tool arguments (a8443d0)
- Drop launcher-owned runtime and update commands from the binary (555a52d)
- Guarantee every wire image is measured under the pixel ceiling (9782a13)
- Normalize svar tool calls to strings at one engine door (583c359)
- Cap wire image dimensions so many-image requests survive (5b8d5df)
- Pin the owned source checkout instead of cloning it (bf42529)
- Cross the PIL draw bridge once per run and convert rasters without reflection (75f894a)
- Glue the magit transient band to the dialog's bottom chrome (b12b18a)
- Pin that a tapped notification lands on its session screen (dab9632)
- Batch PIL draw ops into one cdylib call (ea08bab)
- Open the session a tapped notification is about after a cold start (71ecc2a)
- Stringify keyword tool-argument values at the svar edge (8b2363d)
- Pin the status-bar padding of the chrome-less session screen (dc86aa5)
- Batch PIL shim drawing through one live imaging image (9715dde)
- Keep companion chrome when a notification opens a session (bc36b82)
- Fall back to any healthy container engine in release-native (27d4e9b)
- Carry the vis-agent command through a source update (69f2c71)
- Accept bare runtime words in vis-agent update (271f5f9)
- Document Python layout-read warnings and venv interpreter resolution (031d08c)
- Never prompt for a credential the machine mints itself (543df09)
- release: update release notes for v0.1.27 (14db65e)
com.blockether/vis-channel-tui
- Make TUI screenshots one call and paint italic and underline like a terminal (367bbe1)
- Fix disclosure copy targets landing one row above the painted body (c2cd40d)
- Read the environment at runtime, not at native-image build time (0d980d9)
- Rasterize a bold run as bold, not as the mono face's only weight (46590f6)
- Invert the vis-table card header onto its own dark band (52c059f)
- Keep the vis-table card's row bands inside the frame (0e3fafe)
- Dress the vis-table card as a sheet: muted rules, banded head, zebra rows (e5e3827)
- Rasterize captured TUI frames in Clojure, in the theme's own colours (7d62afb)
- Render a vis-table preview as one stretched card (7d21dbd)
- Cross-validate the vis-table pipeline on the TUI (a53af23)
- Page the CSV table viewer instead of filtering it (faf5f94)
- Render attached CSV as an interactive table in TUI and companion (6ea932a)
- Keep tool-authored blank lines inside op-card sections (f020753)
- Enforce queue retraction at the single queued-turn writer (62941ef)
- Run settings MCP and provider verbs as magit transients (da6cf30)
- Make the TUI queue mirror survive repeats, cancels and acks (d7f582c)
- Render a running native call with the finished card's own renderer (42dec7b)
- Correct the queue-mirror identity docstring for optimistic rows (6fb6376)
- Show a queued TUI submission the instant it is sent (a9324f3)
- Extract the magit transient into an embeddable component (cf9327a)
- Key the live render cache on a running call's display fields (15ef8f4)
- Render a running native call as its own op-card (d39ddf8)
- Guard TUI submissions in flight against double queueing (67ee89f)
- Move providers into TUI Settings (b789941)
- Default TUI frame renders to the bundled JetBrains Mono (8b379d1)
- Pass the requested font family through the PIL shim bridge (c591fd6)
- Cap rendered TUI frame PNGs at 1024px per side (396c009)
- Render TUI capture frames legibly and under a 2000px cap (7a9eb30)
- Glue the magit transient band to the dialog's bottom chrome (b12b18a)
- Anchor magit transient band to its own hint bar (dcc6d81)
- Never prompt for a credential the machine mints itself (543df09)
com.blockether/vis-foundation-voice
- Read the environment at runtime, not at native-image build time (0d980d9)
com.blockether/vis-language-clojure
- Read the environment at runtime, not at native-image build time (0d980d9)
- Drop unresolvable fault locations from Clojure test results (bfb63ad)
com.blockether/vis-language-python
- Fail a Python lint/format target that holds no Python (6dc17be)
- Count the files a Python lint read, not the ones with findings (09383af)
com.blockether/vis-provider-anthropic
- Build the OAuth file refresher lazily so its lock path is the user's (0ff2630)
- Read the environment at runtime, not at native-image build time (0d980d9)
com.blockether/vis-provider-github-copilot
- Read the environment at runtime, not at native-image build time (0d980d9)
com.blockether/vis-provider-openai-codex
- Build the OAuth file refresher lazily so its lock path is the user's (0ff2630)
- Read the environment at runtime, not at native-image build time (0d980d9)
com.blockether/vis-provider-openrouter
- Read the environment at runtime, not at native-image build time (0d980d9)
com.blockether/vis-provider-zai
- Read the environment at runtime, not at native-image build time (0d980d9)
Full Changelog: v0.1.27...v0.1.28