Troubleshooting

Preserve the boundary

A diagnostic is not permission to bind publicly, disable Authelia, run as loca, expose /home, broaden the workspace, add a wildcard trusted host, or print credentials. Stop the service if diagnosis requires any of those changes.

Web and authentication

SymptomLikely causeSafe action
Authelia challenge repeatsEdge session, cookie, time, or forward-auth configuration problemDiagnose the existing edge gate. Do not bypass it or expose port 52320.
Web shell loads but /api returns 401Missing or stale upstream session cookieComplete the current process launch-token exchange at https://deek.loca.zone, not the loopback origin.
Browser worked before a restart, then /api failsA routine restart does not invalidate a valid cookie; the authority, cookie, or persisted signing credential changed or failed independentlyVerify the public authority and managed credential state. Do not assume a fresh token exchange repairs the underlying change.
Token exchange fails only on the public hostPublic authority is absent from the browser-trust fence, or nginx forwarded a different HostKeep the exact service argument --trusted-host deek.loca.zone and preserve that host at the proxy. Do not add a wildcard.
A loopback cookie does not work publiclyUpstream binds cookies to normalized hostname and portExchange the token on the public HTTPS origin. Cookies are not portable between authorities.
Launch URL was disclosedLaunch-token credential incidentRestart to rotate the launch token. If token use is suspected, have the deployment owner use the approved credential-management procedure to rotate or delete the client-connection/browser-session record, then restart to revoke every browser cookie.

Static assets and non-/api routes are public in the upstream server model. The loca edge must gate the entire browser surface; a visible shell does not prove API authentication or isolation.

Build and startup

SymptomLikely causeSafe action
Profile boot reports missing host artifactsSource dependencies exist but the repository build has not completedRun pnpm run build from the reviewed source root, then promote a new immutable runtime copy.
Startup reports missing frontend or client-plugin bundlesThe Web artifacts were not builtRebuild; do not edit generated output by hand.
Browser UI is older than the source revisionpnpm dsh does not check artifact freshnessRebuild and redeploy the same reviewed revision.
--host 0.0.0.0 exits with a usage errorUpstream intentionally refuses wildcard Web bindingKeep --host 127.0.0.1; nginx is the only public entry point.
Unit cannot write persistent stateStateDirectory=deek, DSH_HOME, or the workspace contract is wrongStop the service and repair the unit/state declaration. Never make the tree writable by loca or everyone.
State appears under another homeDSH_HOME=/var/lib/deek is missing or blankStop the service, restore the required environment, and reconcile any stray state without displaying credentials.

Use systemctl is-active deek.service and the listener check from Operations before opening secret-bearing logs. If journal inspection is unavoidable, use a restricted terminal and redact the entire launch-URL query before sharing any line.

Provider and model errors

SignalMeaningAction
MISSING_CREDENTIALThe selected route cannot resolve its credentialStore the key through Settings → Models or repair its existing managed reference. Do not add the value to the unit.
UNKNOWN_MODELThe recorded provider/model route no longer existsSelect a configured model or restore the intended provider definition.
Composer shows Select model and blocks inputA saved default points to a provider that was deletedSelect another configured model.
Model discovery returns 401The provider rejected the current credentialReplace the key through the write-only Models UI. Do not print the old or new value.
A custom gateway rejects every requestIts OpenAI-compatible request shape differsReview upstream’s provider compatibility fields; change only the documented route settings.
Existing session keeps the previous modelModels are recorded in the session after its first requestStart a new session when the new default must apply.

Provider changes take effect on the next request and normally need no service restart.

Workspace and permissions

SymptomLikely causeSafe action
New Web UI cannot composeNo workspace has been selectedAdd and select only /var/lib/deek/workspace.
Intended file is outside the pickerIt has not been staged into the dedicated workspaceCopy a reviewed, non-secret working set into the workspace through an operator-controlled process. Do not expose /home or /opt/deek/app.
Mutation is denied outside the workspaceThe default workspace-write boundary is workingMove only the required disposable input into the workspace; do not switch to unrestricted permissions.
A read or network request reaches beyond the workspaceUpstream does not confine reads or network under workspace-writeRemove the resource from process visibility or block it at the host/network boundary. Approval settings are not a substitute.
A permission change has no effect on an open sessionStored General settings apply to later Web sessionsCreate a new session after reviewing the setting.

Plugins and profiles

  • A successful plugin add, remove, or update changes bundle membership on disk, but the running profile retains the bundle set from startup. Restart after an approved bundle change.
  • Ordinary profile/home patch edits can hot-reload when the profile uses patchReload: live; still review the resulting composed configuration.
  • An MCP server command and an external plugin execute as trusted host code outside the agent sandbox. Remove the package or patch rather than weakening the sandbox to make it work.
  • The loca deployment does not permit ad hoc plugin installation into the live service state. Follow the reviewed immutable-release path in Plugin Model.

Escalation record

Capture only non-secret facts:

  • deployed Git revision;
  • unit active/inactive result;
  • listener address and port;
  • public HTTP status before authentication;
  • exact error code or redacted message;
  • browser authority used;
  • whether failure began after a restart, update, provider change, or plugin change.

Never attach a launch URL, cookie, API key, credentials file, environment dump, raw startup journal, or user workspace content.