Route the first fact.
Capture browser console, failed API request, asset hash, and Host stderr.
Validate provider ID, base URL, protocol, and at least one model.
Preserve the settings response and redacted provider section.
Inspect route registration and catalog errors.
The upgrade changed the wire boundary.
llm.providers({})One wrapped RPC response.
listProviders() joins listConfigurableProviders().
A stale source-build frontend or partially mixed package closure can therefore fail before provider configuration is evaluated. That is a concrete compatibility boundary, not a universal diagnosis.
Recover without erasing state.
dsh --version
dsh --profile web --dump-config > web-effective-config.txt
dsh plugin --profile web list --depth 0
- 01Stop old DSH processes and verify which executable the shell launches.
- 02Restart the same profile, then hard-reload the browser.
- 03For a source checkout, rebuild the checked-out commit; source launch does not detect stale bundles.
- 04Inspect profile-owned packages without installing duplicate DSH core packages.
- 05Repair only the field rejected by the settings response.
- 06Prove persistence after reload and run one bounded request in a new Session.
Record provider and model IDs plus the credential reference. Never paste .credentials.yaml or secret values into an issue.
Primary evidence.
Keep the complete recovery runbook.
The canonical guide covers installed releases, source builds, mixed profile packages, custom endpoints, image claims, Session routing, and end-to-end proof.
Read and star on GitHub