Lunavect

Verification and compatibility

The current public release is Lunavect 0.2.5 (192). These records distinguish completed checks from unverified scenarios.

Download and release notes

0.2.5 release checks — September 28, 2026

Area Result
Release source Clean commit c225996674aa9fa6b33139e1c8b61c39424a1125, tagged v0.2.5, merged through PR #40. Merge 35bc3c35b0a74ce55086a564b65aa24f9e01b795 has exactly the archived source tree. Archive, signed export and provenance checks passed; no application code changed during release packaging.
Automated checks The saved local check for this exact source passed: 1,110 Swift tests passed, 78 skipped and zero failures (1,188 total); 169 Python tests passed, one skipped and zero failures (170 total). Editor companion checks, unsigned universal app/widget/helpers, resources and the built intent-resource test passed. PR source CI passed; the optional native-render, thread-sanitizer and synthetic-performance jobs were skipped. The release run reused this evidence and did not rerun tests against client settings.
Distribution Developer ID signed and Apple notarized, build 192. Anonymous downloads of all four release assets match packaged bytes, sizes and SHA-256 digests. The downloaded DMG app passed strict codesign, Gatekeeper, stapler, resources, hook-helper, App Group and awake-policy checks. Universal arm64/x86_64 app and widget slices were verified.
Update signatures ZIP and appcast signatures verify with the public key from the previous installed app. Deliberately damaged ZIP and feed copies are rejected. The latest public feed points to build 192 and the exact v0.2.5 ZIP URL.
Editor companions The exported app bundles VS Code companion 0.1.2 and JetBrains companion 0.1.1, confirmed against its manifest and the VSIX package version. Reinstall the VS Code companion from Settings → Connections to receive the new version. Prepared JetBrains 0.1.2 source is not part of the bundled installer.
Existing downloads All 15 previous releases retain their 62 asset identities, URLs, sizes and digests.
Claude sign-in Claude Code that is not signed in can report “API Usage Billing” without plan limits. Sign in using claude then /login in Terminal; absent plan limits in this state are not a release failure. The release checks did not sign in to a provider account.
Scope These are source, packaging and public-download checks. Installed updates, desktop rendering, Keep Awake behavior and the wider hardware/OS/client compatibility matrix require their own live evidence; earlier version-specific checks below remain historical.

The 0.2.5 DMG SHA-256 is 99053cf690aa503f16d9002d40ce3404f0626beeb76ff82373097ccea1c9241d.

0.2.4 release checks — September 27, 2026

Area Result
Release source Clean commit 6bd247109c967563d5ecd980f497512191bd5bbd, tagged v0.2.4, merged through PR #38. Merge b62752b68eafca2325944f34ea7008494a189f65 has exactly the archived source tree. Archive, signed export and provenance checks passed.
Automated checks The final local release check passed 736 Swift tests with 59 conditional skips, 110 Python tests with one optional SDK skip, 16 Node tests, and the additional built intent-resource test. The SDK-backed JetBrains lifecycle race passed separately. Universal app/widget/helper builds, resources, widget probes and pinned XcodeGen 2.46.0 parity passed. The final check and archive logs contain no compiler warnings. Source CI passed.
Native rendering Fresh smoke, legacy and gallery runs produced 64, 12 and 12 native PNGs with isolation and source-provenance checks. Four representative images were visually inspected. This is not a manual review of every image, a pixel comparison or owner visual acceptance; existing public artwork is unchanged.
Performance Three fresh synthetic samples passed. Median import, history merge and session arrangement times were 0.596 s, 4.931 s and 0.224 s; the cumulative XCTest process maximum RSS was 135.23 MiB. These are fixture measurements, not a claim about prolonged real-app energy use.
Distribution Developer ID signed and Apple notarized, universal build 191. Anonymous downloads of all four release assets match packaged bytes, sizes and SHA-256 digests. The downloaded DMG app passed strict codesign, Gatekeeper, stapler, resources, hook-helper, App Group and awake-policy checks. ZIP and feed signatures verify with the embedded public key; damaged copies are rejected. The latest feed points to 191. All 14 earlier releases retain their 58 asset identities, URLs, sizes and digests.
Public-to-public update Sparkle updated the installed public 0.2.3 (189) to public 0.2.4 (191). The actual app’s Check for updates action was invoked; Sparkle verified the feed and ZIP signatures, extracted the update and relaunched build 191. The installed executable matches the notarized release app. No manual app replacement was used.
Signed Terminal navigation A row action in the installed build 191 selected the exact live Apple Terminal tab and restored its minimized window. The fixture used an inert native process and no model request. First-time Automation consent, actual denial and permission revocation were not exercised.
Signed IDE navigation Actual row actions in the installed build 191 selected the exact Claude and Codex fixture terminals and focused their window in VS Code. IntelliJ IDEA 2026.2.3 passed both Reworked terminal providers and a Classic terminal. The fixtures ran the bundled 0.1.1 companions with inert native processes and no provider credentials or model requests. Separate native/protocol checks also passed ambiguous and closed targets.
Preferences and widgets The 42-key application preference snapshot changed only the last update-check time, derived limit-notification state and build-specific widget registration. All six shared preference values were unchanged; the settings section used by the test was restored. Both existing widgets rendered LIVE after the Sparkle restart, and only the installed host’s extension remained registered. Placements and preferences were not reset. This is system-renderer evidence, not a new owner visual acceptance.
Companion installation Both bundled companions are 0.1.1. The packaged VS Code extension was also installed into the normal local VS Code profile; JetBrains tests use an isolated IDE installation. Other users must reinstall their companion through Settings → Connections and reload/restart their editor.
Remaining scope Authenticated Claude/Codex provider panels, remote workspaces, other JetBrains versions/products, other macOS/CPU combinations, complete VoiceOver coverage and fresh macOS permission-denial/revocation flows were not verified. See IDE setup and compatibility.

The 0.2.4 DMG SHA-256 is aea5d70043f193e7a22827e97e941a1659d987def29ddbda62d983df863abbbd.

Audit phases included in 0.2.4 — September 27, 2026

The pre-release audit corrected seven data/lifecycle/storage defect groups. Its navigation continuation removed synchronous MainActor Terminal automation and made IDE socket waits monotonic and cancellable. An expanded pass corrected six further cache/companion groups and hardened opened descriptor reads. The detailed audit working papers are kept outside the public repository. It added 15 behavior tests; the final full check passed 736 Swift tests with 59 explicit skips, 110 Python tests with one SDK skip, and 16 Node tests. Unsigned universal app/widget/helper builds, resources and provenance passed. A focused TSan run passed 43 tests, zero skips, with no TSan reports.

Fresh owned inert fixtures verified the actual Apple Terminal tab/window, restoring a minimized window, and the native Lunavect-to-VS-Code route for both fixture providers. VS Code also rejected ambiguous and closed targets. A separate SDK-backed run passed the JetBrains shutdown race that is skipped by the default suite; its live terminal UI was not rerun. The real system sleep-setting read also passed without changing power settings.

These paragraphs describe the earlier audit checkpoint, before packaging and installation. The changes are now included in 0.2.4. The release checks above supersede the earlier installed-app, live-navigation, render and update gaps only for the scenarios explicitly recorded there; they do not imply authenticated provider-panel coverage or the full IDE/hardware/OS matrix.

0.2.3 release checks — September 26, 2026

Area Result
Release source Clean commit 18908e8724b4cda78387d7fbeba15a95091d3eb8, tagged v0.2.3, merged through PR #34. Merge 010e87b has exactly the archived source tree. The archive manifest, signed export and provenance passed.
Automated checks The final local release check passed 709 Swift tests, with 59 conditional skips, plus 102 Python and 8 Node companion tests. The built intent-resource test passed separately. Universal app/widget/helper builds, widget probes, packaged resources and XcodeGen 2.46.0 parity passed. Source CI passed. The subsequent cleanup hardening passed all 105 Python tests.
IDE navigation Real local VS Code and IntelliJ IDEA 2026.2.3 selected the intended terminal and project window using inert Claude/Codex-named native fixture processes. JetBrains Classic and Reworked terminals were exercised, including the final native SessionNavigation.open path. Exited, ambiguous, stale and reused-process cases have regression coverage. Tests made no model requests and accessed no provider credentials.
Provider panels Routes for the official Claude Code and Codex VS Code extensions have interface/contract tests. Authenticated end-to-end panel behavior is not verified. JetBrains AI Chat/ACP panels, remote workspaces and JetBrains versions outside 2026.2 are not supported. Other JetBrains products were not exercised. See IDE setup and compatibility.
Distribution Developer ID signed, Apple notarized, universal build 189. Anonymous downloads of all four release assets match the packaged bytes, sizes and SHA-256 digests. The downloaded DMG app passed strict codesign, Gatekeeper, stapler, resources, hook-helper, App Group and awake-policy checks. ZIP and feed signatures verify with the embedded public key; damaged copies are rejected. The latest feed points to 189. All 13 earlier releases retain their 54 asset identities, URLs, sizes and digests.
Installation Installed from the notarized release DMG over build 188. Forty application preference values and all six shared preference values were unchanged; only derived limit-notification state and the widget-registration stamp changed. The packaged VS Code companion was also installed in the normal local VS Code profile. JetBrains was exercised in an isolated test installation.
Widgets Both existing desktop widgets rendered LIVE after installation and through the 10-minute registration confirmation at 23:18:38–39, then again after public-DMG validation at 23:19:07–08. Only the installed host and extension remained registered. No widget placements or shared preferences were removed. This is system-renderer evidence; owner visual confirmation of this specific update remains separate.
Release-tool cleanup Launch Services intermittently returned -10814 while retiring an owned intermediate or already absent temporary copy. The completed archive itself passed product and provenance checks; the exact temporary registration was retired and the installed host reasserted before notarization. Tooling now retries transient errors, accepts absence only after a fresh registry read, and reasserts the installed host even when cleanup fails. These follow-up script changes do not modify the published application binary.
Remaining scope Authenticated provider panels, the reporter’s Mac, other IDE/macOS versions and products, and a complete Sparkle download/install cycle were not exercised. Local terminal fixtures and widget logs do not establish every real-user combination.

The 0.2.3 DMG SHA-256 is 624c60510d2c4b3688e34c5816514ff8abb37419330dd04d276d8e3a3274c10f.

0.2.2 release checks — September 26, 2026

Area Result
Release source Clean commit 905bf352505263ab0b75240e98e22d2d4daa2011, tagged v0.2.2, merged through PR #31. The merge tree matches the archived source exactly; archive, submit and export provenance passed. Includes the previously local README/site introduction and demo from Claude’s commit 0812cb4. The older audit worktree contained no additional unpublished application fixes.
Automated checks Full local release check: 97 Python and 696 Swift tests passed, 58 conditional skips and no failures; the built intent-resource test passed separately. Universal app/widget build, widget probes, resource/helper checks and XcodeGen 2.46.0 parity passed. Source CI passed. After the packaging cleanup correction, the full local check passed again with 100 Python and 696 Swift tests, the same 58 conditional skips, and all build/resource/provenance gates.
Terminal navigation The detached-hook regression failed before the fix; the real Apple Terminal integration verified a live tab, restored minimized window and exited tab retaining a reused device. Details and limits are recorded below.
Distribution Developer ID signed and Apple notarized, build 188. Anonymous DMG, ZIP, appcast and checksum downloads match the packaged bytes. The downloaded DMG app passed strict codesign, Gatekeeper, stapler, resources, hooks, App Group and helper-policy checks. ZIP and feed signatures verify with the embedded public key; deliberately damaged copies of both are rejected. The latest feed points to 188. All 12 previous releases retain their 50 asset identities, URLs, sizes and digests.
Installation Installed the notarized release DMG over local build 187. Forty application preference values and all six shared preference values were unchanged; only the derived limit-notification state and version-specific widget-registration stamp changed. Existing Claude/Codex observations continued after launch.
Build-Mac widget incident During release submission cleanup, the still-installed build 187 lost its widget host lookup at 20:21:46 and showed placeholders. Packaging subsequently registered the exported build 188 again. Removing that export alone was insufficient: Launch Services also retained three records for already deleted check/archive products. Retiring those exact stale records left only the installed app and widget registered. Both desktop widgets then stayed LIVE through build 188’s 10-minute confirmation at 20:47:29, and through the corrected full-check cleanup and downloaded-DMG verification. No widget placements or preferences were removed; the owner confirmed both widgets displayed data again.
Tooling correction The check runner retires its own product before deletion; package tools retire their exported source in a finally block and reassert the installed host. The distribution cleanup handles its exact missing intermediate path before retiring it. The installed app and aliases are protected; cleanup failure still restores the installed host. These changes affect release tooling, not the already archived application binary.
Remaining scope The reporter’s Mac, live iTerm2 interaction, real Automation denial, a complete Sparkle download/install cycle, and other macOS/hardware combinations were not exercised. The local widget recovery is not proof of every future update path.

The 0.2.2 DMG SHA-256 is fe328a97c9d50a145f66bd714419eb5b37603bd03dc96d5e094b5a7a9b8dd120.

Local Terminal navigation fix — September 26, 2026

A report from another Mac showed a live Claude session failing to open in Apple Terminal with the generic “session may be open” warning. The remote Mac’s logs were not available, so its exact cause remains unconfirmed. Local reproductions established two defects: a hook runner detached with setsid() lost the client’s terminal device, and an exited Terminal tab could retain a TTY later reused by another live session. The old focus script returned success for that exited tab while the correct window remained minimized.

Hooks now follow bounded process ancestry, Claude catalog rows recover their own device by PID, and older hook locations cannot replace a current catalog location. A root-owned login process can hide the terminal app’s name without losing a known device; navigation matches it only against running Terminal/iTerm2 instances. The directory fallback resolves path aliases and rejects multiple distinct devices. Apple Terminal focus skips tabs with no running processes. Automation denial and timeout retain their specific recovery messages instead of becoming the generic warning.

Validation: the detached-hook regression failed on the original code in a run without a controlling terminal. (Correction, September 28: run from a Terminal tab, the fixture’s own launcher inherited the test host’s terminal and made the folder fallback ambiguous, so the test failed for a fixture reason. The launcher now detaches first; the navigation fix itself was unaffected.) The focused Swift suite completed 117 tests, with 112 passing, five optional skips and no failures. An explicitly enabled integration test used an operator-owned native process and detached child in the real Apple Terminal, then exercised production catalog parsing and SessionNavigation.open. It verified the actual foreground window, unminimized state and live tab, including an exited tab with a reused TTY. No model prompt or account request was needed for this fixture. The two live mechanisms do not establish which one occurred on the reporter’s Mac; iTerm2 interaction and an actual denied macOS permission were not exercised live (error propagation was tested synthetically).

Local candidate: signed universal Release build 187 compiled successfully, passed strict signature, resource, hook-helper and App Group checks, and was installed over build 186. The built source files were hash-compared with the tested working tree. Widget preferences were unchanged after installation; the app restarted and resumed quota updates. This is a local candidate, not a published or notarized release.

0.2.1 release checks — September 24, 2026

Area Result
Release source Clean merge commit 6afaf480b6af5b2b37641bd87b7d00ab9434dfd7, tagged v0.2.1 (PR #27); archive provenance passed, and submit and export verified the archive’s build manifest.
Fix A Claude Desktop session paused on background commands was hidden two seconds after its reply with automatic hiding at 20 minutes. Cause: a status-bar script’s whole-second “done” cancelled the background-pause exception, and a newer catalog poll left the row with the session start as its activity time. Two tests replay the observed inputs and failed before the fix. With the fixed build the same two-minute pause stayed visible and running throughout.
Automated checks Full local check on the release content: 97 Python and 692 Swift tests passed (57 conditional skips), universal build, widget probes, resources and provenance. Source CI passed.
Distribution Developer ID signed and Apple notarized, build 186, universal. The DMG app passed strict codesign, Gatekeeper and stapler checks inside the mounted image. The ZIP signature verifies with the public key embedded in the app, and a modified copy is rejected; the feed points to 186. Anonymous DMG, ZIP, appcast and checksum downloads matched the packaged bytes; the downloaded DMG app passed the same checks and the latest feed points to 186.
Installed build The app from the release DMG was installed over local build 185 with install.sh. Hook events kept arriving after launch and the SubagentStop handler stayed in Claude Code’s settings. Two medium desktop widgets, limits and activity, rendered LIVE after installation. At the app’s 10-minute registration confirmation macOS dropped the widget extension (“LS doesn’t have a containing bundle”) while notarized export copies of Lunavect were still registered with Launch Services, and the widgets showed placeholders. After those copies were unregistered and the installed widget was registered again, both widgets were LIVE and stayed LIVE through a full relaunch schedule, including the 10-minute confirmation.
Remaining scope A complete Sparkle installation cycle and other macOS versions remain unverified. Inside a running turn the background count can include commands that already finished: Claude Code reports exact background work only when a turn ends.

The 0.2.1 DMG SHA-256 is 7313133bce9f21b811c841f09b664b6535582bd4eb4ce4e864bd3c28be2aaadd.

0.2.0 release checks — September 24, 2026

Area Result
Release source Clean merge commit d167391736c34e4c84e5b21c49c3544aa756bdb2, tagged v0.2.0 (PR #23); archive provenance passed, and submit and export verified the archive’s build manifest.
Automated checks Full local check on the release commit’s content: 97 Python and 690 Swift tests passed (57 conditional skips), universal build, widget probes, resources and provenance. Source CI passed after one fix: a widget transparency test compared its render with host accessibility flags that ImageRenderer does not inherit.
Distribution Developer ID signed and Apple notarized, build 184. Anonymous DMG, ZIP, appcast and checksum downloads matched the packaged bytes. The DMG app passed strict codesign, Gatekeeper and stapler checks and declares English as its development region. The ZIP signature verifies with the public key embedded in the app, and a modified copy is rejected; the latest feed points to 184.
Installed build The app from the release DMG was installed over local build 183 with install.sh. The widget extension 0.2.0 was the only active registration, with no lookup failures after launch. Lunavect’s SubagentStop handler was present in Claude Code’s settings, and a background command started mid-turn was recorded on the working session. Two medium desktop widgets rendered LIVE throughout the following hour.
Remaining scope A complete Sparkle installation cycle, real failure and limit banners and other macOS versions remain unverified.

The 0.2.0 DMG SHA-256 is 3748dc7d0099aba234e273beb5ed2a02154f2a49283cd7da6467eb3b0ac4ff73.

Background tasks, failure reasons and limit alerts before 0.2.0 — September 24, 2026

0.1.9 release checks — September 23, 2026

Area Result
Release source Clean commit 1979255872af7fcc51a2060a8898a81f5f16b421, tagged v0.1.9 (PR #20); archive provenance passed. A later test-only commit in the same PR waits for the session panel’s rows to settle before measuring.
Automated checks Full local check: 84 Python and 617 Swift tests passed (55 conditional skips), universal build, widget probes, resources and provenance. Source CI passed.
Distribution Developer ID signed and Apple notarized, build 181. Anonymous DMG, ZIP, appcast and checksum downloads matched the packaged bytes. The downloaded DMG app passed strict codesign, Gatekeeper and stapler checks. The ZIP signature verifies with the public key embedded in the app, and a modified copy is rejected; the latest feed points to 181.
Installed build The app from the release DMG was installed over 0.1.8 with install.sh after stale copies left by the archive and check builds were unregistered. Both desktop widgets stayed LIVE from launch through the 10-minute confirmation and later timeline updates, with no placeholders or lookup failures.
Remaining scope A complete Sparkle installation cycle and other macOS versions remain unverified.

The 0.1.9 DMG SHA-256 is b7082dc27c507f17422489c961c63aae18df945cb13c7eac15eac481a69244fc.

Codex memory agent — September 23, 2026

After Codex began consolidating memories on the test Mac, Connections reported Session catalog is incomplete for Codex while its limits stayed fresh. The catalog itself was complete: thread/list returned 94 threads on one page in under 0.1 s. One hook-reported session working in ~/.codex/memories with apply_patch had no rollout, no state-database row and no title, and thread/read answered thread not loaded. Lunavect kept it as an active session and asked the app-server for it on every poll, which marked the catalog incomplete. Codex sessions in CODEX_HOME/memories are now internal agents. The new classification test fails without the change (the agent appears as a current session) and passes with it; a store test confirms that internal agents are never read back as known active sessions.

0.1.8 release checks — September 23, 2026

Area Result
Release source Clean commit 87b969908aa3e1d298b9aaae1dc14d26a043bbde, tagged v0.1.8 (PR #17); archive provenance passed.
Automated checks The eight WidgetRegistrationTests passed locally, including the four-step schedule. The full check passed in source CI.
Distribution Developer ID signed and Apple notarized, build 180. Anonymous DMG, ZIP, appcast and checksum downloads matched the packaged bytes. The downloaded DMG app passed strict codesign, Gatekeeper and stapler checks. The ZIP signature verifies with the public key embedded in the app, and a modified copy is rejected; the latest feed points to 180.
Compatibility Signing identity, bundle IDs, App Group, update key and preference defaults are unchanged. All 20 assets of releases 0.1.3–0.1.7 still match their packaged SHA-256 digests at their original URLs.
Installed build The app from the release DMG was installed over 0.1.7 with install.sh and launched. The first-launch repair produced about eight seconds of placeholders; the 5-second confirmation restored LIVE. Two registration changes followed: unregistering a copy left registered by the archive step (33 seconds after launch) and removing an older 0.1.3 copy from /Applications (after 4.5 minutes). Both widgets stayed LIVE through these changes and the 30-second, 2-minute and 10-minute confirmations, with no further lookup failures.
Remaining scope A complete Sparkle installation cycle for this release and other macOS versions remain unverified.

The 0.1.8 DMG SHA-256 is 0a1e3c0a5813e0f800994b9c368d75b12e96b7fe18b8ead78827336e91434a24.

0.1.7 release checks — September 23, 2026

Area Result
Release source Clean commit e3e65df894822baf335f3177a92b0014272c173c, tagged v0.1.7 (PR #15); archive provenance passed.
Automated checks Full local check: 84 Python passed; 615 Swift passed, 55 conditional skips (670 total); built intent resources passed separately. Universal app/widget build, compatibility probes, resources, hooks and provenance passed. XcodeGen 2.46.0 parity and source CI passed.
Distribution Developer ID signed and Apple notarized, build 179. Anonymous DMG, ZIP, appcast and checksum downloads matched the packaged bytes. The downloaded DMG app passed strict codesign, Gatekeeper and stapler checks. The ZIP signature verifies with the public key embedded in the app, and a modified copy is rejected; the latest feed points to 179.
Compatibility Signing identity, bundle IDs, App Group, update key and preference defaults are unchanged. Older public release assets retain their identities, digests and URLs.
Installed build The app from the downloaded DMG was installed over local build 178 with install.sh and launched. The first-launch repair produced about ten seconds of placeholders; the 5-second confirmation restored LIVE. The 30-second confirmation coincided with leftover registrations from the packaging tools and returned placeholders until the next registration change, which restored LIVE. Three later relaunches stayed LIVE through both confirmations. In repeated experiments, re-registration outside an install never broke rendering (21 of 21); failures clustered around bundle replacement and cleanup.
Remaining scope A confirmation can still coincide with post-update cleanup; relaunching Lunavect repairs it. A complete Sparkle installation cycle for this release and other macOS versions remain unverified.

The 0.1.7 DMG SHA-256 is 512b6644e2ce03f2d67aa2543deba82509d47c4dbf505b61222423cc33052237.

Widget registration, background CPU and terminal focus — September 23, 2026

Both existing desktop widgets showed placeholders for about four hours after local build 176 was installed, while the extension reported successful timelines and shared data stayed fresh. NotificationCenter rejected each archive with WidgetArchiver.ValidationError.bundleStubNotSupported / Bundle could not be looked up. The app’s one-time launch repair had already run; no later registration change occurred. Re-registering the installed host and its extension restored both widgets to LIVE within a second. On a later local launch the same failure followed the launch repair’s extension restart and cleared at the next registration change. Each launch now re-confirms registration after 5 and 30 seconds without restarting the extension, and install.sh retires the previous copy before its final registration. After installing build 178, both widgets stayed LIVE through installation, launch repair and both checks, with every archive load successful. An actual Sparkle update cycle was not exercised.

Build 176 used 17 min 50 s of CPU in 4 h (7.5% average, including startup). Samples attributed most of it to per-character CharacterSet construction in session ID validation, re-decoding hook records and Claude Desktop metadata on every poll, opening the Codex state database on every poll and resolving every process path. Build 178 averaged 2.9% over 5 min of steady state with an active session and the animated menu-bar character; the earlier hot frames no longer appear and the remainder is mainly menu-bar animation and polling. The two measurements differ in duration and conditions; this is not a battery claim.

The unreleased terminal-focus path no longer searches running processes for Desktop, editor or background sessions, no longer treats a node process in the project folder as Claude, never launches a terminal that is not running and rejects device names with a trailing newline. Navigation tests inject focus instead of scanning the test machine’s processes.

The Swift suite passed 670 tests with 55 optional skips and no failures; 84 Python tests passed. New regressions cover cached-file invalidation, late Codex thread records, installer registration order (fails against the previous script), repeated registration checks and terminal-focus inputs. Builds 177 and 178 are local signed updates, not notarized or published. Public 0.1.6 remains build 165.

Local tool-launched Claude session filtering — September 22, 2026

A live extra catalog row was traced to a print-mode Claude CLI launched by a shell inside an existing Claude Desktop task. The catalog labelled it interactive; its ancestry still reached Desktop, so the previous adapter presented it as an independent conversation. The exact identity of the earlier row in the owner’s screenshot was not recovered. The observed equivalent establishes this mechanism, not every earlier transient report.

The development filter requires a command process between agent runtimes. Direct runtime/supervisor chains stay unknown, and explicitly declared background tasks remain independent even when a hook reports nested ancestry. This distinction was added after an intermediate live probe incorrectly classified supervised background jobs. The final build preserved all 13 background records in the sampled catalog, including retained history; this is not a count of active tasks. Known internal origins survive missing catalog/hook evidence; an explicit independent resume is allowed.

The focused session, hook, visibility, lifecycle and efficiency suite passed 52 tests with no failures. After adding a background-merge assertion, that test passed again. Coverage includes an actual native parent/command/child process fixture, independent Desktop/Terminal launches, missing/orphan/cyclic ancestry, catalog gaps, counters, observations and independent resume. The universal Release archive and Developer ID export passed strict signatures, product resources, App Group, headless hook and helper-policy checks.

Local 0.1.6 build 167 was installed. Its loaded native accessibility tree showed one working task and zero waiting; the finished Claude task subsequently followed the existing automatic-hide preference. A screenshot attempt lost the transient popover, so visual inspection was not completed. Widget preferences were identical; defaults changed only helper-build registration, widget-registration stamp and cached automatic menu icon. NotificationCenter rendered both existing widgets as LIVE at 18:22 without resetting system services or placements.

Build 167 is a local signed update, not notarized or published. Public 0.1.6 remains build 165. The full release check was not run for this local change, and long-term absence of all possible phantom sessions is not established. Private diagnostic evidence is retained outside Git.

0.1.6 release checks — September 22, 2026

Area Result
Release source Clean commit 91ccef1dea35297302d5d95f6cfd6112203b0d83, tagged v0.1.6; archive provenance passed.
Automated checks Full local check: 83 Python passed; 600 Swift passed, 55 conditional skips; built intent resources passed separately. Universal app/widget build, compatibility probes, resources, hooks and provenance passed. XcodeGen 2.46.0 parity and source CI passed.
Distribution Developer ID signed and Apple notarized, build 165. Anonymous DMG, ZIP, appcast and checksum downloads matched the packaged bytes. The downloaded DMG app passed strict codesign, Gatekeeper, stapler, resource, App Group and helper-policy checks. Public ZIP/feed signatures match the embedded update key; the latest feed points to 165.
Compatibility Signing identity, bundle IDs, App Group, update key and preference defaults are unchanged. Older public release assets retain their identities, digests and URLs.
Installed build The same notarized 0.1.6 (165) app was installed locally and launched. Widget preferences were identical; only helper-build and widget-registration defaults changed. NotificationCenter rendered both existing widgets as LIVE after installation; direct desktop visual verification remains separate.
Remaining scope The event-tracking regression and isolated scroll invalidation are verified; the original transient false-wait incident was not captured, live FPS improvement was not measured, and an automatic Sparkle upgrade for this exact release is unverified. Desktop scheduling on other Macs remains unverified.

The 0.1.6 DMG SHA-256 is 55e26c876b11448cc32f51526bc36f7ac647c70707b529d5f022d0b978ceabe2.

Local menu-bar delivery and session scrolling — September 22, 2026

A regression through the actual AppDelegate status subscription reproduced a waiting count remaining at one during AppKit event tracking after the session store had already changed the task to running. The old RunLoop.main scheduler delivered only after default-mode processing resumed. Delivering on DispatchQueue.main clears waiting and publishes running during tracking, without opening the panel. The test failed twice on the previous binding and passes with this change. This establishes one stale-display mechanism; the owner’s earlier transient incident had already disappeared and its exact source was not captured.

Scroll offsets now publish only to the small overflow control. Mutable row/viewport geometry is read by native gesture handling without invalidating the SwiftUI session list on every pixel. A 240-offset regression verifies zero whole-panel publications, while gesture checks verify that hit testing reads updated geometry without a representable update. Existing overflow, paging, drag, swipe and lifecycle checks passed. There were 48 focused test executions across three green runs (one repeated counter test), with no failures. The red counter test is retained as local evidence.

The universal Release archive and Developer ID export passed strict signatures, product resources, App Group, headless hook and awake-policy checks. Local 0.1.5 build 164 was installed; the live native accessibility tree loaded nine rows, six running and zero waiting. Computer Use repeatedly lost access to the transient popover during scrolling, so a live scroll/FPS comparison and final screenshot were not obtained. The pre-install process sample was not a controlled FPS baseline. Automated invalidation checks do not establish a measured frame-rate improvement.

Existing widget preferences were identical after installation. App defaults changed only the helper build, widget-registration stamp and automatic-update check timestamp. NotificationCenter briefly reported missing containing bundles during replacement, then rendered both existing Lunavect widgets as LIVE at 16:16:10. System widget services and placements were not reset. Direct desktop visual verification remains separate. Build 164 was a local signed update, not notarized or published; at that check public 0.1.5 remained build 162. The full release check was not run for this local update.

Local widget recovery, September 21, 2026

Both existing desktop widgets displayed placeholders while the extension produced successful timelines and shared data remained fresh. NotificationCenter rejected those timelines with WidgetArchiver.ValidationError.bundleStubNotSupported / Bundle could not be looked up. The system also logged missing containing bundles during registration changes. Re-registering the installed host followed by its embedded extension restored both existing widget instances to LIVE at 23:12; subsequent reloads and foreground transitions through 23:15 also remained LIVE. Only the Lunavect extension and host were restarted; system widget services, placements and preference files were not reset. Computer Use exposed only the Screen Time widget window, so direct visual confirmation of the two recovered widgets remains separate from this system-renderer evidence.

Installer cleanup now removes the development extension before registering the installed host. Distribution cleanup re-registers a validated installed host and its matching extension after removing temporary registrations; it does not launch apps or alter installed files/preferences. Nine focused installer/distribution tests passed, including rollback and invalid/foreign bundle cases. Both new invalidation regressions fail against the prior scripts. Shell syntax passed. This is a local tooling fix, not a new app/DMG release; long-term WidgetKit scheduling is not proven by these checks.

Local segmented Codex rollout recovery — September 21, 2026

A live ordinary Desktop task remained active while build 162 reported only catalog/unknown state. Its rollout filename contained a second UUID after the thread ID. The legacy suffix guard rejected that file, and filename discovery also missed the new form. The fix accepts the bounded optional segment suffix, discovers only the primary thread ID once, and requires a matching session metadata header for segmented activity files. Directory containment, symlink rejection, lifecycle timestamps, runtime writer checks and internal-agent filtering remain intact.

The new activity/discovery regressions failed before the fix and passed afterward. Focused activity, discovery, session, hidden-session and store-lifecycle checks passed 74 tests with two conditional skips. A rebuilt read-only live probe changed the same task from unknown/catalog to running/localEvent with a live writer. The signed Release app/widget archive and Developer ID export passed strict signatures, resources, App Group and helper-policy checks.

Local build 163 was installed and the native panel showed both ordinary working tasks, including the previously missing task with its recovered elapsed timer; the hidden count remained unchanged. Widget preferences were identical, and 38 of 40 existing app-default values were identical; only helper-build registration and the widget-registration stamp changed. This local build has not been published or notarized, and the full release check was not run. At that check, public 0.1.5 remained build 162.

The previous 0.1.5 release checks remain recorded below.

Download and release notes · GitHub Actions

0.1.5 release checks — September 21, 2026

Area Result
Release source Clean commit 83ddad43fc79bd918ee76e6d18f4364d82144d6f, tagged v0.1.5. Signed archive source provenance passed.
Automated checks Local scripts/check.sh: 79 Python tests and 594 Swift tests passed; 55 conditional Swift skips; no failures. Built intent resources passed separately. Universal app/WidgetKit build, runtime probes, hooks, resources and provenance passed. XcodeGen 2.46.0 parity and release CI passed.
Distribution Developer ID signed and Apple notarized, build 162. Anonymous DMG, ZIP, appcast and checksum downloads matched the packaged bytes. The downloaded DMG app passed strict codesign, Gatekeeper, stapler, resource, App Group and helper-policy checks. Public ZIP/feed signatures match the app’s update key; the latest feed points to this build.
Compatibility Existing signing identity, bundle IDs, App Group, update key and preference defaults are unchanged. Older public release assets retain their original identities, digests and URLs.
Remaining scope A complete Sparkle installation cycle for this release, desktop widget scheduling on other Macs and the separately reported empty waiting indication remain unverified. The local regressions and installed development-build observations below cover the identified causes.

The 0.1.5 DMG SHA-256 is 30c7ef3277639303563ae08ed13da4be3d754f6c289cb34f7c08740f22ca66b5.

0.1.5 regression coverage

Two session-lifecycle regressions reproduce an expired waiting count while local event reads fail or remain pending. Internal-agent fixtures reproduce a Codex worker being treated as a current waiting session, including after fresh hook events. Classification uses explicit parent/source metadata and preserves ordinary tasks, independent chats and older saved records. Positive origin survives temporary catalog gaps. Source databases and provider archives are not modified.

Six widget registration tests cover version/path changes, transient and persistent failures, cancellation, excluded bundles and signalling only a synthetic extension at the exact matching executable path. Local installed builds confirmed startup recovery, retention of widget preferences and removal of a known internal worker while real tasks remained. An actual Sparkle download/install cycle and the separately reported empty waiting indication were not independently reproduced.

0.1.4 release checks — September 14, 2026

Area Result
Release source Clean commit d832c57259861f327add2213c614dfd7bd5bbd7e, tagged v0.1.4. Archive source provenance passed.
Automated checks Local scripts/check.sh passed: 79 Python tests; 638 Swift tests with 55 conditional skips and no failures; universal Release app, WidgetKit, hook, product resources, intent metadata and provenance checks. Release CI passed.
Focused behavior 48 focused checks, 2 conditional skips and no failures. Delayed timer callbacks retain each visible dot step, phrase changes follow two displayed cycles, and reserved dot width stays fixed. Added confirmation phrasing and inline-filename cases preserve quoted/code-example exclusions.
Native interface Menu-bar artwork, the update notice and dot states in all three styles were rendered and visually inspected. Development build 156 launched with current sessions; user preferences and shared widget settings were retained. Only the helper registration build record changed.
Distribution Developer ID signed and Apple notarized, build 157. Anonymous downloads of the DMG, ZIP, appcast and checksums matched the packaged bytes. The downloaded app passed strict codesign, Gatekeeper, stapler, product-resource and helper-policy checks. ZIP and feed signatures passed, and the latest appcast matches this release.
Remaining scope Existing Claude replies are not reprocessed; unfamiliar request wording can still be missed. Automatic installation of this exact release and prolonged animation behavior under real system load have not been verified live.

The 0.1.4 DMG SHA-256 is c5d4d6a7362c6926e412de5129f046f8cc59c828731fb20b0d5687d3e4bc6bfe. Previous release downloads retain their original URLs.

0.1.3 release checks — September 14, 2026

Area Result
Release source Clean commit a7c051b331cf1efcb751e2c5c8d2fff8ecf767ec, tagged v0.1.3. Source provenance remained unchanged throughout the signed archive.
Automated checks Local scripts/check.sh passed: 79 Python tests; 637 Swift tests with 55 conditional skips and no failures; universal Release build with WidgetKit, hook, resource, intent metadata and provenance checks. Release CI passed.
Covered behavior Widget timestamp refresh and stale recovery; resumed Claude work superseding old waiting questions; compaction lifecycle; bounded count badges, idle artwork and two-cycle phrases across all three menu-bar styles.
Native gallery Twelve native images rendered with fictional data under the existing isolation policy and were visually inspected. The new settings image exposes icon choices directly. A fresh Finder capture shows the actual mounted 0.1.3 DMG; its layout is unchanged.
Distribution Developer ID signed and Apple notarized, build 154. Public DMG, ZIP, appcast and checksum files were downloaded anonymously and matched the packaged bytes. The downloaded DMG app passed strict codesign, Gatekeeper, stapler, product-resource and helper-policy checks; ZIP and feed signatures verified. The latest appcast matches this release.
Compatibility Bundle IDs, App Group, data paths and update key are unchanged. Saved appearance preferences retain their decoding behavior.
Actual update Automatic installation of this exact release and its desktop widget refresh have not been verified live. Earlier update evidence below is separate.

The 0.1.3 DMG SHA-256 is 269b42b0e1840789417f61a97100fe4c29193c70a8b20cb2ba46236c2f855575. Previous release downloads remain available at their original URLs.

0.1.2 release checks — September 13, 2026

Area Result
Release source Clean commit 5395a84312242c9afbfd62dbcd358e57dec1d0cd, tagged v0.1.2. Source provenance stayed unchanged through the archive.
Automated checks Release CI: 572 Swift tests passed, 55 optional tests skipped; 77 Python tests passed, 2 skipped. Universal unsigned app, WidgetKit extension, helpers, product resources and source provenance passed; the built intent metadata check also passed.
Focused behavior 42 focused checks passed, one opt-in check skipped. Coverage includes explicit closing questions, normal responses, quoted/code examples, idle polls, resumed work, terminal states, expiry and the waiting count.
Native view Russian and English session views rendered under the existing sandbox policy and were visually inspected. A recognized question was orange and counted as waiting; the completed answer was green. Forbidden-access probes and unchanged sentinel checks passed.
Distribution Developer ID signed, Apple notarized, build 149. Public DMG, ZIP, appcast and checksums were downloaded anonymously and matched their packaged bytes. The downloaded DMG’s app passed codesign, Gatekeeper and stapler checks; the ZIP and feed signatures verified.
Compatibility The optional inference flag preserves decoding of existing session records. Signing identity, bundle IDs, shared data paths and update key are unchanged. Recognition covers selected Russian, English and German phrasing and can miss unfamiliar wording.
Actual update An installed automatic upgrade to this exact release has not yet been verified. The previous successful Sparkle update below is separate evidence.

The 0.1.2 DMG SHA-256 is b7ce7431159941525424192a146bdd24ce9a09237093123899c038d4e2e6bffe. Existing 0.1.0 and 0.1.1 release assets retain their original digests and URLs.

0.1.1 release checks — September 13, 2026

Area Result
Release source Clean commit b03e2181dd11d6d36b38808046fef11ad777be00, tagged v0.1.1. Archive provenance confirmed the source was unchanged during the build.
Automated checks Release CI: 569 Swift tests passed, 56 optional tests skipped; 75 Python tests passed, 2 skipped. Universal unsigned app, WidgetKit extension, helpers, resource checks and source provenance passed.
Distribution Developer ID signature, Apple notarization ticket, unchanged App Group and arm64/x86_64 slices checked.
Public download DMG, update ZIP, signed appcast and checksums downloaded anonymously from GitHub; bytes matched the packaged files. The app inside the downloaded DMG passed strict codesign, Gatekeeper and stapler validation.
Update signatures Published ZIP and appcast signatures verified against the app’s update public key.
Actual update Sparkle installed 0.1.1 (147) from development build 145 on an ordinary quit. The installed executable matched the release. All 38 captured app preferences and shared widget preferences were unchanged; persisted data remained present. Activity files continued receiving live updates between captures.
Widget layout Current layouts rendered with fictional data, including English, Russian and German states. Compact durations, expanded graph space and intermediate Y-axis labels were checked. Manual subscription dates were removed from widget faces.
Widget background The owner confirmed adjustable glass on the development build on this Mac. The native material probe passed three archive cycles for three widget kinds, including disabled and incompatible-runtime fallbacks. This is not certification of every macOS version or accessibility setting.
Helper registration After the update, a stale macOS helper registration failed to resolve its executable. Refreshing the app registration and repeating its existing startup maintenance restored helper 147; it started once and exited normally after becoming idle. System sleep remained enabled. A closed-lid cycle was not tested.
Existing downloads The previous 0.1.0 release assets remain at their original URLs with unchanged digests.

The 0.1.1 DMG SHA-256 is 5fe1908dbe9455bb96692762d605432a6c255f7c1245d6a37adbf01a6df44d1f. The updater uses the signed ZIP and appcast, not the DMG.

Test counts above belong to the release source, not subsequent documentation or screenshot-tool changes. An unsigned CI pass alone does not establish installed behavior or signing.

Homebrew and installer

The cask points to the 0.2.5 DMG and the SHA-256 recorded in the 0.2.5 checks above. The branded Finder layout retains its application icon, Applications link and transfer arrow. Installer layout.

The earlier 0.1.0 (103) package passed an isolated Homebrew install and uninstall on September 12. That exercise preserved the existing application and validated the downloaded signature and notarization. A Homebrew upgrade between distinct versions is a separate scenario; the real Sparkle update above does not establish it.

Public screenshots

The current gallery contains twelve native 2× images captured on September 23 from the 0.1.8 production UI and a single fictional dataset: light/dark sessions, limits, statistics, menu-bar styles, appearance settings and four widget layouts. All twelve were visually inspected; compared with the September 14 set, only dates, times, the animated icon frame and period totals changed. The sandbox preflight, exact image set, dimensions and source-provenance checks passed.

The README and website showcase scenes are composed from 4× native renders with the same kind of fictional dataset; only system chrome around the renders is drawn. How the scenes are made. Settings and session controls were rendered in offscreen AppKit windows with private preview dependencies. The images demonstrate layout, not interactive settings flows, external-client navigation, desktop WidgetKit placement or system glass compositing. Older screenshots, the retouched desktop capture and the unused movie have been removed. Source and reproduction instructions.

Compatibility and remaining checks

The deployment minimum is macOS 14. The 0.2.5 release checks were performed on macOS 26.6.2 with Apple silicon; the release source was built with Xcode 26.6 and Swift 6.3.3. A deployment target and universal binary slices express supported build targets, not proof of every runtime scenario.

Area Remaining limit
Other Macs Intel hardware, macOS 14/15 and every supported OS revision have not been exercised.
First-time setup Clean-Mac setup, different account plans and client versions, failed sign-in and retry need broader coverage.
Session lifecycle More real-client coverage is needed for prolonged tasks, cancellation, sleep/wake, offline periods and returning to the exact original session.
Desktop widgets Both existing widgets rendered LIVE after the public Sparkle upgrade to build 191 on the test Mac. New placement/editing, other Macs and every future scheduling condition are not fully verified. WidgetKit schedules refreshes.
Updates The public 0.2.3 (189) → 0.2.4 (191) Sparkle upgrade passed. Older 0.1.0 profiles, disabled automatic updates, interrupted/offline/retry paths and Homebrew upgrades between distinct versions remain separate unverified scenarios.
Accessibility Full VoiceOver, keyboard navigation and widget appearance with increased contrast or reduced transparency need live verification.
Battery use Short process samples and synthetic benchmarks do not establish prolonged idle energy consumption.
Experimental features Optional glass and closed-lid Keep Awake are not guaranteed across Macs or future macOS releases. Glass is off by default.

Missing or expired allowances are unavailable, never unlimited. Activity only counts observed or explicitly recovered intervals; gaps are not invented work.

Check scopes explains what each automated check establishes. Third-party resource provenance and unresolved permission status remain documented in NOTICE and IconSources.md.

Reporting a problem

Open an issue with the app version, macOS version, Mac architecture and reproducible steps. Redact private session titles, paths and credentials from attachments.