Working notes from building Charoite, a fully local meeting assistant for macOS. Measurements, failures, and decisions that got reversed. RSS.
Posts
-
Phase zero, closed
The overhaul’s phase zero is merged — eleven batches in three days, each one small enough to review in a sitting: the live transcript aggregate carved into its own module, a brain client, one Claude-CLI resolver, a file-lock helper, one config loader, a single owner for every Python launch, live probes out of the deterministic suite, and a characterization net over the seams of rename → forget → repeat.
-
A crash in a background thread should fail the run
This devlog keeps returning to false green; apparently that is the theme.
-
A mechanical move, verified mechanically
Charoite is in an overhaul phase: no new features for a while, just carving the codebase into pieces that can be reasoned about. The rhythm is one or two small batches a day, each merged through the usual review circle. This week that produced a lock helper, a single config-fallback loader, a single resolver for an external CLI the pipeline shells out to — and the first real aggregate extraction.
-
A green test for an event nobody sends
Stopping a recording is not an action, it is a wait. The daemon has to flush audio, run the post-meeting pipeline and release its lock, and the app must not open a new meeting until the old process is actually gone. In Charoite that wait used to live in five scattered flags on one service object, which is how a daemon surviving
SIGKILLcould leave the app in “stopping” forever, with the Stop button doing nothing at all.
subscribe via RSS