# Verification checklist

Run from the extracted setup root. Use the complete selected Compose prefix
from README.md in place of the core prefix where appropriate.

1. `sha256sum --check checksums.sha256`: every distributed file says OK before
   you customize it. It will intentionally differ after editing configuration.
2. `docker compose --env-file secrets.env config --quiet`: zero exit checks
   Compose structure/interpolation, not images, hardware or application behavior.
3. `docker compose --env-file secrets.env run --rm --no-deps migrator validate-config --resolve-env`:
   zero exit checks the mounted configuration and supplied values, not network access.
4. `docker compose --env-file secrets.env ps --all`: `storage-init` and `migrator`
   exit zero; long-lived core services are running, and checks with configured
   health probes are healthy.
5. `curl --fail https://YOUR_HOST/api/info/v1/server_info`: HTTP 200 and JSON
   establish public API reachability. This is not a database/storage/model check.
6. Open `https://YOUR_HOST/management/`, sign in, reload a nested page, and check
   requests stay under `/api` and assets under `/management/`.
7. Record non-sensitive test audio in a client, stop, play it back and verify
   completed transcription in the intended workspace.
8. Send a chat prompt and check a non-empty response. Agent/Scripto tool use
   requires its own configured runtime and separate verification.

## Self-hosted inference

Run on the inference host. Export the key without putting it into command
history: `read -rsp 'Inference key: ' INFERENCE_API_KEY; export INFERENCE_API_KEY`.

```sh
curl --fail http://127.0.0.1:8000/health
curl --fail http://127.0.0.1:8001/health
curl --fail -H "Authorization: Bearer $INFERENCE_API_KEY" http://127.0.0.1:8002/v1/models
curl --fail -H "Authorization: Bearer $INFERENCE_API_KEY" http://127.0.0.1:8002/v1/audio/transcriptions -F model=whisper -F response_format=json -F file=@sample.wav
curl --fail -H "Authorization: Bearer $INFERENCE_API_KEY" -H 'Content-Type: application/json' http://127.0.0.1:8002/v1/chat/completions -d '{"model":"llm-default","messages":[{"role":"user","content":"Reply with a short greeting."}],"max_tokens":256}'
unset INFERENCE_API_KEY
```

Supply your own short non-sensitive `sample.wav`. The transcription should have
a non-empty `text`; chat should have non-empty message content (allow enough
tokens for reasoning). Models-list success alone does not prove upstream
inference. Compare a known phrase to the transcript; HTTP success cannot assess
accuracy. If using a non-default model, update both request and route/config IDs.
