* fix(utility): use claude-acp as default inference agent id
The utility-agent SQLite schema, frontend dialog defaults, and edit
fallback all pointed at the legacy "claude-code" identifier, but the
only registered Claude inference agent is "claude-acp" (since the ACP
migration in #566). Opening Settings > Utility Agents and picking
Claude resolved to an unknown agent id, so the Model dropdown rendered
"no model found" and the agent could not be configured.
Switch the defaults to "claude-acp" and migrate existing rows so
previously-seeded built-ins (which were saved with agent_id="" and
later coerced to "claude-code" by the dialog fallback) now populate
their model list correctly.
Closes#1269
* fix(utility): cover empty agent_id seeds and add migration test
Address PR review feedback on #1271:
- Extend the agent_id backfill migration to also rewrite rows seeded
with an empty string. seedBuiltinAgents() inserts built-in rows with
ON CONFLICT(id) DO NOTHING, so older deployments that landed
agent_id="" never got repaired by re-seeding.
- Set AgentID = "claude-acp" explicitly in getBuiltinAgents() so future
first-run seeds match the schema default without depending on the
dialog fallback or the backfill migration.
- Add sqlite_migration_test.go covering both the legacy "claude-code"
and empty-string backfill paths, plus a seed-contract assertion that
every built-in row references "claude-acp" on first run.
* fix(utility): clarify migration comment and check rows.Err in test
Address PR review feedback (round 2) on #1271:
- Reword the agent_id backfill comment as a legacy-data backfill note
and point at builtinSeedAgentID as the current seed path, so a future
reader doesn't chase the old "seeds insert agent_id=''" behavior that
this PR already fixed.
- Add rowsxDB.Err() check after the seed iteration loop, before the
count guard, so a mid-scan error fails the test instead of silently
shrinking the row count.
---------
Co-authored-by: Kandev Agent <agent@kandev.dev>