You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
A six-lens audit of the desktop app on 27 Aug 2026 produced sixteen defects.
Two were fixes of mine that hadn't worked and are corrected in #4481. These
fourteen are verified, reproduced against the code, and not yet fixed.
Filed individually so they survive the session that found them. Each carries the
reproduction, the file:line, a proposed diff, and the test that should fail
before the fix.
The SSH runner behind remote training has three defects: a launch that blocks
for the whole run, a stop that targets a process group that does not exist,
and a workdir that creates a literal ~ directory. Remote training will not
work end to end until these are fixed.
The engine sends Access-Control-Allow-Origin: * on unauthenticated loopback. /settings masks the API key, so a local page cannot steal it — but it can
read transcripts and drive the app.
The pattern worth noticing
Seven of the bugs found across this whole effort share one shape: a check
confirmed something was attempted rather than that it had an effect. A
button that existed but was never clicked; a run labelled "cancelled" while the
process ran on; a signal sent to a console that did not exist; four release
assets present but two unopenable; a tool tally read after the queue was
drained; a delete hardened at the wrong layer; a fake speaking a status
vocabulary the real runner does not use.
Two of those were in fixes of mine, and both passed their own tests. Mutation
testing — revert the fix, the test must fail — is what caught them.
A six-lens audit of the desktop app on 27 Aug 2026 produced sixteen defects.
Two were fixes of mine that hadn't worked and are corrected in #4481. These
fourteen are verified, reproduced against the code, and not yet fixed.
Filed individually so they survive the session that found them. Each carries the
reproduction, the file:line, a proposed diff, and the test that should fail
before the fix.
High
fetch_urlfollows redirects, so the approval card authorises one URL and the engine fetches anotheresc()does not escape quotes: a model-authored link injects HTML attributes, and it is persistedMedium
DELETE /chats/<id>answers{"ok": true}whether or not anything was deletedchats/drops the connection on/chats,/projectsand/searchlaunch_at_loginis persisted before it is attempted, and off macOS it can never workDecision::Adoptis unreachablespawn_env, the wholePYTHONPATH/PYTHONHOMEdefence, has no production callerLow
runActionhas no error handling: Export, Check for updates and MCP are silently inert when the engine is unreachablealert()andprompt()survive at three sites, in a page that documents JS dialogs as non-functional hereNot from the audit, but open
for the whole run, a
stopthat targets a process group that does not exist,and a workdir that creates a literal
~directory. Remote training will notwork end to end until these are fixed.
Access-Control-Allow-Origin: *on unauthenticated loopback./settingsmasks the API key, so a local page cannot steal it — but it canread transcripts and drive the app.
The pattern worth noticing
Seven of the bugs found across this whole effort share one shape: a check
confirmed something was attempted rather than that it had an effect. A
button that existed but was never clicked; a run labelled "cancelled" while the
process ran on; a signal sent to a console that did not exist; four release
assets present but two unopenable; a tool tally read after the queue was
drained; a delete hardened at the wrong layer; a fake speaking a status
vocabulary the real runner does not use.
Two of those were in fixes of mine, and both passed their own tests. Mutation
testing — revert the fix, the test must fail — is what caught them.