docs(06): create phase 6 plan — performance & production hardening

6 plans across 4 waves covering structlog/Loki observability, Locust
load testing, multi-stage Dockerfile hardening, trusted-proxy rate
limiting, and RUNBOOK.md. Verification passed (0 blockers).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
curo1305
2026-06-02 20:35:03 +02:00
co-authored by Claude Sonnet 4.6
parent b7503cdff4
commit 70c09f6cd4
10 changed files with 1778 additions and 14 deletions
@@ -845,19 +845,19 @@ locust \
---
## Open Questions
## Open Questions (RESOLVED)
1. **Upload endpoint for load testing**
1. **Upload endpoint for load testing** (RESOLVED: 06-03 `<interfaces>` block — use POST /api/documents/upload direct multipart endpoint for load test; presigned flow excluded per D-05)
- What we know: `services/extractor.py` uses `tempfile.NamedTemporaryFile`; the upload flow may be two-step (presigned URL) or one-step depending on the current documents.py implementation
- What's unclear: Whether Locust needs to implement the three-step presigned flow (upload-url → PUT to MinIO → confirm) or if a simpler direct POST exists
- Recommendation: Read `backend/api/documents.py` lines for the upload endpoint before finalizing the locustfile; if two-step, implement the MinIO PUT step using `self.client.put` to MinIO's host:9000
2. **Load test user bootstrap**
2. **Load test user bootstrap** (RESOLVED: 06-03 Task 1 human checkpoint — use `on_start` register-then-login pattern; catch 409 conflict)
- What we know: Locust needs a valid user to authenticate; no seed user for load testing exists yet
- What's unclear: Whether to create the user via the registration API (on_start) or pre-seed via Alembic
- Recommendation: Use `on_start` to register if not exists (catch 409), then login — self-contained, no DB dependency
3. **Loki tmpfs mount persistence**
3. **Loki tmpfs mount persistence** (RESOLVED: 06-02 Task 3 — named volume `loki_data:/loki` used; loki service not subject to read_only)
- What we know: Loki service needs a writable `/loki` directory for chunk storage
- What's unclear: Whether the named volume `loki_data:/loki` is sufficient or if Loki's own container permissions require a matching UID
- Recommendation: Use named volume (not read_only on loki service — it's not a user-facing service)