merge: docs — scan worker + AUD0 wire (PR #6)
CI (SIAX Cloud) / security (push) Successful in 12s
CI (SIAX Cloud) / contracts (push) Successful in 22s
CI (SIAX Cloud) / quality (push) Successful in 52s

This commit is contained in:
2026-09-16 23:11:53 +02:00
+17
View File
@@ -72,6 +72,9 @@ docker run -d -p 3000:3000 \
| `ZITADEL_INTROSPECTION_CLIENT_ID` | Prod | — | RFC 7662-introspection-klient (Zitadel app `c0py-introspect`) — utan dessa körs endast Bearer-presence-check (warn-logg i prod) |
| `ZITADEL_INTROSPECTION_CLIENT_SECRET` | Prod | — | Introspection-klientsecret (Infisical: `C0PY_ZITADEL_INTROSPECTION_CLIENT_SECRET`) |
| `ZITADEL_EXPECTED_AUDIENCE` | Prod | — | Projektnivå-aud (Zitadel projekt-id `391064954179944451`); PAT-introspection bär aud=[clientId, projectId] |
| `AUD0_BASE_URL` | Nej | — | AUD0 evidens-URL (`https://api.aud0.siax.io`) — utan denna+key tappas events (advisory, loggad) |
| `AUD0_API_KEY` | Nej | — | AUD0 Bearer (Infisical: `AUD0_AUTH_TOKEN`) |
| `CHROMIUM_EXECUTABLE_PATH` | Nej | `/usr/bin/chromium-browser` | Browser för scan-worker (image installerar `apk chromium`) |
| `DATABASE_URL` | Ja | — | Postgres-anslutning |
| `AUD0_BASE_URL` | Nej | — | AUD0 evidens-URL |
| `AUD0_API_KEY` | Nej | — | AUD0 autentisering |
@@ -97,6 +100,20 @@ docker run -d -p 3000:3000 \
| GET | `/v1/c0py/scans?registryId=` | ägarens scans, valbar filter |
| GET | `/v1/c0py/scans/:id` | 200 / 404 |
## Scan worker + AUD0
- API-containern kör en **in-process scan-worker** (poll 2s, atomic claim via
`FOR UPDATE SKIP LOCKED`): capture med playwright-core + system-chromium
(DNS-only domän måste vara nåbar från server6) → typed `EvidenceRecord`s
(runtime-html/dom/computed-style/stylesheet/asset/network-request/screenshot,
`confidence: measured`) → `scans.result` (JSONB) → status completed/failed.
- **AUD0 (fire-and-forget, advisory)**: `c0py.registry_created` (L1),
`c0py.scan_created` (L1), `c0py.scan_completed`/`c0py.scan_failed` (L2).
tenant_id = Zitadel resourceowner-org (server-side assertat; klienten kan
aldrig sätta tenant). AUD0-outage tappar events men blockerar aldrig API:et.
- `page.evaluate` körs som **ren string** — tsx/esbuild injicerar annars
`__name`-helpers som kraschar i browser-kontextet.
## Hälsocheck
```