feat(engine): fail-closed X-Internal-Token-gate + commit-kedja i services/api (ENGINE_URL-wire-förberedelse) #58

Merged
admin merged 1 commits from feat/engine-internal-token into main 2026-09-15 01:45:39 +00:00
Owner

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.

## 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.
admin added 1 commit 2026-09-15 01:39:01 +00:00
feat(engine): fail-closed X-Internal-Token-gate + commit-kedja (GIT_SHA) i services/api
masterplan-lock / check (push) Successful in 3s
masterplan-lock / check (pull_request) Successful in 10s
Security Scan (SIAX Cloud) / security (push) Successful in 14s
CI (SIAX Cloud) / security (push) Successful in 17s
CI (SIAX Cloud) / security (pull_request) Successful in 17s
CI (SIAX Cloud) / integration (push) Successful in 25s
CI (SIAX Cloud) / quality (push) Successful in 35s
Security Scan (SIAX Cloud) / security (pull_request) Successful in 40s
CI (SIAX Cloud) / integration (pull_request) Successful in 49s
CI (SIAX Cloud) / quality (pull_request) Successful in 56s
ff11216813
- 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
admin closed this pull request 2026-09-15 01:45:32 +00:00
admin deleted branch feat/engine-internal-token 2026-09-15 01:45:32 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: admin/0pt#58