Prd/CLAUDE.md
Lucy Doupalů be9f14ce34 Helpdesk - operator console + patched GrapheneOS Dialer for call handling
A small helpdesk system: an office Pixel running a patched GrapheneOS Dialer
answers technician calls, records both call legs as separate channels, and a
Ruby backend transcribes them through Whisper and files an AI summary against
the caller.

Squashed to a single commit for sharing. No credentials are included; secrets
live outside the repo in /etc/helpdesk/env on the server or a gitignored
.claude/env.local locally. See .claude/env.local.example for the shape.

Start at README.md, then docs/architecture.md.
2026-07-27 18:50:32 +02:00

45 lines
2.6 KiB
Markdown

# Working on this repo (instructions for Claude)
## Keep the docs in sync with the code. Every change. No exceptions.
Any edit that changes behaviour, structure, config, commands, endpoints, env vars, or a default (a model
id, a port, a path) makes some doc wrong. Fix that doc in the SAME change. Before you finish, ask: "does a
doc now say something false?" If yes, you are not done.
Where things are documented — update the one your change touches:
- Top-of-file summary + grep anchors in each substantial code file. Update when you change what the file
does or move key logic.
- `README.md` — what this is, how to run locally, the file map.
- `docs/architecture.md` — the pieces, the call flow, the two auth planes, storage, the AI subsystem.
- `docs/operations.md` — the server: deploy, rollback, the `/etc/helpdesk/env` variable table, backups, CI.
- `docs/device-api.md` — the phone-to-backend wire contract: endpoints, the HMAC recipe, the event state
machine, reconciliation timings.
- `docs/phone-connectivity.md` — how the patched Dialer finds, authenticates to, and talks to the backend,
plus the troubleshooting table.
- `docs/onboarding.md`, `docs/runbooks/*` — accounts/certs/SSH, and the device build + flash.
- Each component's own `README.md`.
Concrete: add an endpoint → `docs/device-api.md`. Add/rename an env var → the table in
`docs/operations.md`. Change a model default or the wiki-grounding behaviour → `docs/architecture.md` (AI
subsystem). Change how the phone connects or a config property → `docs/phone-connectivity.md`.
## Docs philosophy (why they're few)
Few durable standalone docs (what it is, what it does, where things live). Everything detailed lives IN the
code with grep anchors, so a reader jumps straight there. Do not add pages that only restate code — every
extra page is more surface to rot. No historical/status/planning docs in the repo (those are git-excluded
scratch like `todo-phased.md`).
## Style
Plain language. No buzzwords (no leverage / robust / seamless / caveat / delve / vibrant …). Run the
humanizer skill over prose you write or touch. **No em dashes or en dashes — use a plain hyphen `-`.**
Verify every claim against the code as it runs now before writing it.
## Don't break
- Local dev must keep booting with `ruby components/backend/server.rb` and no env (JSON store, no DB).
- Secrets never enter the repo — names and paths only. Values live in `/etc/helpdesk/env` (server) or
`.claude/env.local` (local, gitignored).
- The app connects to PostgreSQL as the `helpdesk` role, never `postgres`. Parameterized queries only.