Skip to content

Fix 23 problems from the log (http, runner, db) - #211

Merged
danielehrhardt merged 1 commit into
mainfrom
godmode/59-fix-23-problems-from-the-log-http-runner
Oct 19, 2026
Merged

danielehrhardt merged 1 commit into
mainfrom
godmode/59-fix-23-problems-from-the-log-http-runner

Conversation

@danielehrhardt

Copy link
Copy Markdown
Contributor

Task #59 was already finished before this scheduled check-in. I re-checked now: origin/main hasn't moved, so there's nothing to merge, migration id 97 is still free, and the branch has one clean commit (7f01fac).

Why the fallback model kept reverting to Sonnet

  • The stored value changed from claude-opus-5 to sonnet sometime between 10-17 20:05Z and 10-19 06:49Z. The effort setting went from high to xhigh in the same window. Neither change left an audit entry.
  • Only agents' settings changes were audited. Saves through PUT /api/settings weren't, and that is the route the desktop app, a paired phone, the cloud and the second Mac in the device group all use.
  • I ruled out a setup copy from the other Mac (never applied here), a backup restore, migrations, restarts and the default value. The app's model pickers only save on a click.
  • Which client sent it can't be told from what was recorded. The filer's "it was on Sonnet again at 12:05" was the same session repeating the 06:52Z fix; the value has stayed claude-opus-5 since.

What changed

  • Every settings save is now audited: each changed setting with its old and new value, plus where it came from (this Mac's app, a phone by name, a cloud user, the other Mac by name, or a setup copy on a runner). A save that changes nothing writes no entry. The instructions for every agent and the extra CLI flags are recorded as changed without their text, because they can hold passwords.
  • The default fallback is Opus 5 (claude-opus-5). Any AI-settings save also stored the old default claude-sonnet-5. A migration moves exactly that stored value to Opus and writes an audit entry for it; a model someone picked stays as it is.
  • A broken settings save is now refused: a request like {"runner": null} used to be stored and made every later settings save fail, even after a restart. The review agent found this.
  • The ElevenLabs error is no longer logged as a server error. GET /api/calls/:id/audio timed out at 09:35Z during the network drop. Outside services that can't be reached (the cloud, ElevenLabs, speech services) now log at info, so they stop becoming tickets.

Checks

  • The typecheck passes in every package.
  • All 345 tests in the 15 touched test files pass. 18 more test files that touch the audit log or settings also pass. The only failures were 2 in mods.test.ts; they pass once a variable inherited from the Godmode run is unset, so this change didn't cause them.
  • A review agent checked the diff and found nothing blocking. I made its useful suggestions.

Not code bugs

None of these needed a change:

Nothing is needed from you. The next time the fallback model changes, the audit log will say who changed it and from where.


Task #59 · done by Self-Healer with Godmode Bot

… by default

The fallback model changed without an audit entry: only agents' settings
changes were audited. Saves from the app, a phone, the cloud, the other
computer of a device group and a runner's setup copy now record each changed
setting (from/to) and where the save came from. Instructions for every agent
and extra CLI flags are noted as changed without their text.

The default fallback is Opus 5 instead of Sonnet 5; saved settings that still
carry the old default follow (migration 97, audited). A section saved as
something other than an object is refused: it broke every later save.

Outside services that don't answer (codes ending in _unreachable, e.g.
ElevenLabs timing out) log as "request unanswered" at info, like a runner
timeout, instead of as server errors.
@danielehrhardt
danielehrhardt merged commit b3981b4 into main Oct 19, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant