Migration hardening
bunx smithers-orchestrator migrate now wraps corrupt legacy SQLite source stores with actionable DB_QUERY_FAILED guidance instead of leaking raw SQLite engine errors. The source store is left untouched when these failures are reported.
Migration also now wraps unopenable legacy SQLite source stores, including locked files, permission failures, and incomplete copies missing SQLite sidecar files, with Smithers guidance that points operators at the source-store problem.
For PostgreSQL migrations, bunx smithers-orchestrator migrate --to postgres validates the target URL before opening the source store. Missing --url, SMITHERS_POSTGRES_URL, or DATABASE_URL configuration is now reported directly instead of being masked by unrelated source-store failures.
Accounts loading
Legacy or unknownaccounts.json providers are now skipped with a warning instead of failing the entire accounts file. This keeps commands such as bunx smithers-orchestrator init working when an old account file still contains a removed provider entry, while valid accounts continue to load.
CLI flags
Documented negated flags now parse correctly.--no-vcs, --no-deps, and --no-mcp are no longer rejected as unknown flags on the commands that document them.
Gateway auth
Gateway JWT auth now rejects non-canonical base64url signature encodings. This closes an edge case where a mutated compact JWT signature segment could decode to the same HMAC bytes on some runtimes because of unused trailing base64url bits.Pi diagnostics
Pi launch diagnostics no longer default unknown providers to Google auth checks. When Smithers cannot infer the provider, diagnostics skip provider auth preflight and let Pi handle auth. Known provider or model hints now map to the correct API key environment variable for OpenAI, Anthropic, or Google diagnostics.Migration notes
No breaking changes are identified in 0.25.1. Users migrating a legacy SQLite store to PostgreSQL must provide--url, SMITHERS_POSTGRES_URL, or DATABASE_URL. Smithers now reports that requirement before trying to open the source database.
If migration reports DB_QUERY_FAILED for a corrupt or unopenable source store, follow the emitted guidance. These failure paths do not modify the source SQLite store.
If an old accounts.json contains a removed provider such as a legacy gemini subscription account, Smithers now skips that entry and loads the remaining valid accounts. Remove stale entries manually to silence the warning.