lib/engine.ts har alltid SKICKAT X-Internal-Token på varje engineFetch, men services/api verifierade den ALDRIG — en deployad motor skulle accepterat anonym trafik från vem som helst som nådde porten (samma spoofing-buggklass som X-402-clusteret).
Ändringar
Fail-closed gate (raw-ASGI, constant-time compare): INTERNAL_TOKEN satt ⇒ alla routes utom /health kräver exakt token → 401. Osatt ⇒ inert (lokal dev); prod-deployen sätter den alltid (infra/docker-compose.yml har redan env-wiringen).
Commit-kedja i services/api/Dockerfile: ARG GIT_SHA + OCI org.opencontainers.image.revision + /health.reporting revision (samma policy som 0pt-motor/scripts/verify-image.sh — unknown är synligt, aldrig tyst falskt).
Tester: tests/test_internal_token_gate.py (off/public/401-pass; teardown-reload så senare testfiler aldrig ärver bakat token).
Edge-sidan påverkas ej (ENGINE_URL fortfarande unset → health engine: not_configured).
Följer i nästa pass: deploy av motorn på server6 (coolify-nätet, 0pt-engine:8000) + ENGINE_URL/INTERNAL_TOKEN på edgen + live-verifiering av engine:ok.
## Varför
lib/engine.ts har alltid SKICKAT `X-Internal-Token` på varje engineFetch, men services/api verifierade den ALDRIG — en deployad motor skulle accepterat anonym trafik från vem som helst som nådde porten (samma spoofing-buggklass som X-402-clusteret).
## Ändringar
1. **Fail-closed gate** (raw-ASGI, constant-time compare): `INTERNAL_TOKEN` satt ⇒ alla routes utom `/health` kräver exakt token → 401. Osatt ⇒ inert (lokal dev); prod-deployen sätter den alltid (infra/docker-compose.yml har redan env-wiringen).
2. **Commit-kedja** i services/api/Dockerfile: ARG GIT_SHA + OCI `org.opencontainers.image.revision` + `/health.reporting revision` (samma policy som 0pt-motor/scripts/verify-image.sh — `unknown` är synligt, aldrig tyst falskt).
3. **Tester**: tests/test_internal_token_gate.py (off/public/401-pass; teardown-reload så senare testfiler aldrig ärver bakat token).
## Verifiering (lokal, ren venv)
- services/api full svit: **62 passed, 2 skipped (dokumenterade known-gaps), 0 failed**
- Edge-sidan påverkas ej (ENGINE_URL fortfarande unset → health `engine: not_configured`).
Följer i nästa pass: deploy av motorn på server6 (coolify-nätet, 0pt-engine:8000) + ENGINE_URL/INTERNAL_TOKEN på edgen + live-verifiering av engine:ok.
- X-Internal-Token skickades av edgen men verifierades ALDRIG — gate som
raw-ASGI-middleware: INTERNAL_TOKEN satt => alla routes utom /health kräver
exakt token, 401 (constant-time) annars. Ospecificerad token = inert (dev).
- Dockerfile: ARG GIT_SHA + OCI-label + /health.reporting revision
- compose var redan skriven för INTERNAL_TOKEN — motorn hade bara aldrig
deployats med den
- tester: tests/test_internal_token_gate.py (3: off/public/401-pass) — hela
services/api-sviten 62 passed, 2 skipped (dokumenterade known-gaps), 0 fail
CODEOWNERS rules
requested review from sax3l 2026-09-15 01:39:01 +00:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Varför
lib/engine.ts har alltid SKICKAT
X-Internal-Tokenpå varje engineFetch, men services/api verifierade den ALDRIG — en deployad motor skulle accepterat anonym trafik från vem som helst som nådde porten (samma spoofing-buggklass som X-402-clusteret).Ändringar
INTERNAL_TOKENsatt ⇒ alla routes utom/healthkräver exakt token → 401. Osatt ⇒ inert (lokal dev); prod-deployen sätter den alltid (infra/docker-compose.yml har redan env-wiringen).org.opencontainers.image.revision+/health.reporting revision(samma policy som 0pt-motor/scripts/verify-image.sh —unknownär synligt, aldrig tyst falskt).Verifiering (lokal, ren venv)
engine: not_configured).Följer i nästa pass: deploy av motorn på server6 (coolify-nätet, 0pt-engine:8000) + ENGINE_URL/INTERNAL_TOKEN på edgen + live-verifiering av engine:ok.