Blog
Mostly post-mortems. When something takes me far longer than it should have, the reason is usually more interesting than the fix, and writing it down is how I make sure I actually learned it.
6 September 2026/2 min read
The rename that stopped at the filenames
A commit renamed hermes-workspace to hephastion across 51 files and said the docs and identifiers were updated to match. The diff was zero insertions, zero deletions. Everything had moved, nothing had changed.
- hephastion
- git
- debugging
4 September 2026/3 min read
The engine swap that won on memory and lost on two functions
I evaluated swapping Mana's browser-automation plugin from Playwright+Chromium to the lighter Obscura engine. The memory numbers were real, 15x lower RSS, but the existing test suite couldn't have told me that, and the engine itself failed on the two functions the plugin depends on most.
- mana
- debugging
- machine-learning
3 September 2026/2 min read
The SSRF check that CodeQL refused to recognize
A correct hostname guard in Mana's plugin store kept failing CodeQL's SSRF scan through three rewrites, because the scanner was matching comparison shape, not logic. A path-traversal check in the same file needed the identical fix.
- mana
- security
- debugging
25 August 2026/2 min read
The static launcher that couldn't fit a pointer
Mana's fish-speech TTS server ran under WSL2 because torch.compile was supposedly unsupported on native Windows. It wasn't unsupported, it was two specific bugs, and fixing them left native Windows faster than the VM it replaced.
- mana
- debugging
- machine-learning
24 August 2026/2 min read
The throttle that forgot the window could hide
windows-launcher's main window disables Chromium's background throttling so the avatar stays smooth while unfocused. That flag never turned back on when the window was genuinely hidden, which it is by default on every startup.
- mana
- debugging
- performance
23 August 2026/3 min read
The scratch copy that only checked the top level
Mana's coding-agent test runner used to execute against the live workspace, so I moved it to a temp scratch copy. My first version of the node_modules junction only checked the workspace root, which would have silently broken every real test run against this exact repo.
- mana
- debugging
21 August 2026/12 min read
The momentum score that never grew a second signal
Hecate's growth windows filled right on schedule a week after launch. The raw momentum score built on top of them still ties five unrelated repositories at a cap, and the fix for that lives in a dashboard query, not in the underlying data.
- hecate
- data-engineering
- sql
21 August 2026/3 min read
The quantization that won on exactly one bug
I calibrated a custom quantization of Mana's coding model on real project code instead of generic text. Checked it honestly against the plain community quant across six prompts, two ties, one loss, two minor edges, and exactly one real correctness win.
- mana
- quantization
- llm
21 August 2026/3 min read
The vision model that didn't need to exist
I'd just spent VRAM swapping Mana's vision model to a smaller one to free headroom. A same-day benchmark run, done for an unrelated reason, showed the chat model already beat both vision candidates outright, so I deleted the second model instead of picking a winner.
- mana
- llm
- benchmarking
20 August 2026/2 min read
The conversion function that existed twice
Argos already had a correct UTF-8-to-UTF-16 helper. It was invisible to the one place that needed it, so that place quietly reinvented a broken one, and consolidating the two surfaced a second bug for free.
- argos
- cpp
- debugging
20 August 2026/2 min read
The promise that only listened for two events
Interrupting a reply, barge-in, the hotkey, a fresh reply arriving, never fired either event a playback promise was waiting on. Every interruption hung Mana's whole listen loop until the promise learned about a third one.
- mana
- debugging
- javascript
20 August 2026/2 min read
The reply text that arrived after it was already spoken
Mana's chat log used to wait for every queued sentence of audio to finish playing before showing a reply's text, so a long reply spoke for a while before its own transcript caught up. The fix had to land twice.
- mana
- debugging
20 August 2026/2 min read
The sandbox guard that forgot about drive letters
Mana's file tools are supposed to stay inside the repo. On Windows, one path.relative() edge case let them read or write anywhere on disk instead.
- mana
- security
- debugging
18 August 2026/2 min read
Sales are not a time series until you make them one
Mana's market tools could already tell you what something is worth right now. Teaching it to forecast meant turning a scatter of irregular sale events into something a model could actually read.
- mana
- forecasting
- data-engineering
18 August 2026/2 min read
The dtype that was not there
I burned hours fixing hyperparameters that were never the problem, because the actual bug was a dtype the training config never controlled in the first place.
- debugging
- pytorch
- veritarach
18 August 2026/2 min read
The README that promised more than it shipped
Fixing one broken install link in db-artisan's README turned up a second, bigger problem. The docs described five skills. Only one of them actually exists.
- db-artisan
- documentation
18 August 2026/2 min read
The touch targets an audit could not see
An automated mobile audit found fourteen controls too small to tap. It also missed three more, because an audit can only see the state it happens to load in.
- euphonia
- accessibility
- mobile
17 August 2026/2 min read
The forecast gate I almost got wrong
I guessed a rule for when Hecate's forecasts were trustworthy enough to show. The guess was wrong. Testing it against real data gave me a better one, and testing didn't stop once the feature shipped.
- forecasting
- hecate
- data-engineering
15 August 2026/2 min read
The checkpoint that was quietly guessing
The deployed classifier looked fine until I loaded the checkpoint directly and asked it about the first line of Pride and Prejudice. It barely had an opinion.
- debugging
- pytorch
- veritarach