Skip to content

docs: correct .env.example and add navigation to the operator docs - #44

Merged
Mr-Sunglasses merged 2 commits into
mainfrom
docs/env-example-and-deploy-navigation
Sep 3, 2026
Merged

docs: correct .env.example and add navigation to the operator docs#44
Mr-Sunglasses merged 2 commits into
mainfrom
docs/env-example-and-deploy-navigation

Conversation

@Mr-Sunglasses

Copy link
Copy Markdown
Member

Summary

What changed? .env.example is rewritten into seven numbered sections with
its inaccurate claims corrected, and the operator docs gain the navigation
needed to find a deployment path without reading 900 lines top to bottom.

Why is it needed? Four statements in .env.example did not match the code,
and the two failure modes that cost the most setup time were undocumented.

Claims corrected, each checked against app/config.py, app/engines.py,
compose.yaml, and Dockerfile:

Claim in the file Reality
macOS-only engines are "rejected here" Nothing validates VOCAGATEWAY_ENGINE against the host. engine_runs_here is reached only from EngineFactory.validate(), i.e. the WebUI and PUT /v1/admin/config. VOCAGATEWAY_ENGINE=vocamac in a container starts fine and leaves /health/ready at 503.
BIND_HOST and PORT are "only meaningful under network_mode: host" True of BIND_HOST only. VOCAGATEWAY_PORT is also the container-side target of the published mapping, so it is safe to change on the default bridge network.
VOCAGATEWAY_IMAGE runs "a prebuilt multi-architecture image" It renames what gets built. up --build still builds locally and applies the tag; pulling needs docker compose pull + up --no-build. The native/cuda/vulkan services carry fixed tags and ignore it.
"direnv is set up not to export anything from here" No .envrc is shipped (it is gitignored). What keeps .env out of a native run is the justfile's dotenv-load := false.

Two omissions added, both reproduced with docker compose config:

  • An empty VOCAGATEWAY_TOKEN passes docker compose config on the shipped
    placeholder. Settings.from_env() then falls through to _generate_token(),
    which cannot write over the existing secret file, so the gateway runs on a
    secret it never prints — /health/live green, every authenticated request
    401.
  • compose.yaml forwards only the keys it names, so VOCAGATEWAY_DATA_DIR,
    MODELS_DIR, CONFIG_FILE, TOKEN_FILE, and the macOS engine paths are read
    from .env and dropped. Confirmed absent from the resolved config. The
    VOCAGATEWAY_GIT_COMMIT* warning that previously lived only in the README is
    now here too.

Navigation:

  • README gains Deploy in three steps and a Contents list. The Voca family and Consumers move below the deployment material so the quick starts
    are what a new reader meets first. No heading is renamed, so existing anchors
    still resolve.
  • New docs/README.md index, linked from the README and AGENTS.md.
  • Contents lists in deployment.md, configuration.md, and
    troubleshooting.md — the last grouped by symptom rather than a flat wall of
    20 headings.
  • configuration.md's environment table gains an In .env? column
    recording what Compose forwards, pins, or ignores.

Also corrects the vocaphone submodule path to gateway/ (per AGENTS.md, which
flags server/ as wrong) and the matching stale server/.env reference in a
justfile comment.

Verification

  • Every internal link and anchor across the nine markdown files resolves
    (checked programmatically, including the moved README sections)
  • .env.example still works as a template: copied to a file, token
    appended, docker compose config --quiet passes
  • Both new claims reproduced against docker compose config — repeated keys
    resolve last-wins; unlisted VOCAGATEWAY_* keys never reach the service
  • just --list parses the edited justfile
  • just test — not run: no Python, Dockerfile, or lockfile changed, so
    quality.yml and container.yml skip this PR by path filter
  • Container build — not applicable
  • Docs updated for setup, network, and configuration changes

Privacy and security

  • No secrets, recordings, transcripts, or private hostnames added
  • No weakening of bearer auth, upload limits, retention, or default binding.
    The security posture is documented more sharply, not relaxed: the empty
    token and the silently-ignored .env keys are now called out where an
    operator will see them.

`.env.example` carried several claims that do not match the code:

- macOS-only engines were described as "rejected here". Nothing validates
  `VOCAGATEWAY_ENGINE` against the host: `engine_runs_here` gates only the
  WebUI and `PUT /v1/admin/config`. `VOCAGATEWAY_ENGINE=vocamac` in a
  container starts fine and leaves `/health/ready` at 503.
- `VOCAGATEWAY_PORT` was grouped with `BIND_HOST` as "only meaningful under
  network_mode: host". It is also the container-side target of the published
  mapping, so it is safe to change on bridge.
- `VOCAGATEWAY_IMAGE` was described as running a prebuilt image. Compose
  still builds and applies the tag; pulling needs `pull` + `up --no-build`.
  The native/cuda/vulkan services ignore the variable entirely.
- The header claimed direnv is configured not to export from here. No
  `.envrc` is shipped; what keeps `.env` out of a native run is the
  justfile's `dotenv-load := false`.

It was also missing the two things that cost the most setup time: the empty
`VOCAGATEWAY_TOKEN` placeholder passes `docker compose config` and yields a
gateway with an unknowable generated secret, and variables `compose.yaml`
does not name (`DATA_DIR`, `MODELS_DIR`, `CONFIG_FILE`, the macOS engine
paths) are read from `.env` and silently dropped. Both verified against
`docker compose config`. The file is now in seven numbered sections.

Navigation:

- README gains "Deploy in three steps" and a Contents list; the two
  product-family tables move below the deployment material so the quick
  starts are what a new reader meets first.
- New `docs/README.md` index; `deployment.md`, `configuration.md`, and
  `troubleshooting.md` gain contents lists (troubleshooting's is grouped by
  symptom).
- `configuration.md`'s env table gains an "In `.env`?" column recording what
  Compose actually forwards.

Also corrects the vocaphone submodule path to `gateway/` per AGENTS.md, and
a stale `server/.env` reference in a justfile comment.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mr-Sunglasses has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@netlify

netlify Bot commented Sep 3, 2026

Copy link
Copy Markdown

Deploy Preview for voca-gateway canceled.

Name Link
🔨 Latest commit e690955
🔍 Latest deploy log https://app.netlify.com/projects/voca-gateway/deploys/6a994a0804f6760008c494ca

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mr-Sunglasses has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@Mr-Sunglasses
Mr-Sunglasses merged commit f640565 into main Sep 3, 2026
4 checks passed
@Mr-Sunglasses
Mr-Sunglasses deleted the docs/env-example-and-deploy-navigation branch September 3, 2026 10:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant