82 lines
4.9 KiB
Markdown
82 lines
4.9 KiB
Markdown
# BACKLOG — 0pt (FAS 5)
|
||
|
||
> P0 = säkerhetskritiskt · P1 = hög · P2 = medel · P3 = låg · P4 = hygien · P5 = struktur · P6 = senare.
|
||
> Alla luckor hänvisar till docs/architecture/ARCHITECTURE.md §7 (S1–S12) och GOLDEN-STANDARD-REPORT.
|
||
> **[BYPASS]** = berört av det medvetna användarbeslutet (rör ej kod).
|
||
|
||
## P0 — säkerhet, görs först (kräver produktbeslut + egna PR:er)
|
||
|
||
| ID | Lucka | Åtgärd | Kräver |
|
||
|---|---|---|---|
|
||
| P0-1 | **S1** — middleware körs inte i prod (live: 200 anonymt) | Rotorsaksanalys (Next 16 + src/-träd + Vercel build-output), sedan verifierad 401 anonymt | Prod-deploy + test mot live |
|
||
| P0-2 | **S2** — tenant tas ur body/query | Alla /api/0pt/*-handlers läser `x-0pt-verified-tenant` (middleware-header) | Fungerande middleware (P0-1) |
|
||
| P0-3 | **S3** — hela icke-/api/0pt-API:t utan auth | Auth på orders/payments/admin/subscriptions/uploads/estimates/screen/ai | Auth-design (Zitadel-session eller bearer) |
|
||
| P0-4 | **S4** — escrow-release utan identitet | `POST /payments/{id}/release` kräver verifierad ägare + betalningsbekräftelse före `delivered` | P0-3 |
|
||
| P0-5 | **S5** — CL0UD fail-open | fail-closed + `assertPolicyConfigSafe` (mönster från auth) + NODE_ENV-spärr | — |
|
||
| P0-6 | **S8** — FastAPI-engine utan auth | `X-Internal-Token`-verifiering (constant-time) på alla engine-endpoints | Koordinering med deploy |
|
||
| P0-7 | **S10** — connection_config ur body (SSRF-primitiv) | Allow-list av hosts/protokoll + tenant-scoped källdefinitioner; aldrig godtycklig URL | — |
|
||
| P0-8 | **C11** — middleware typkontrolleras ej | Inkludera middleware.ts i tsconfig.check.json; eslint blockerande | — |
|
||
|
||
## P1 — hög
|
||
|
||
| ID | Lucka | Åtgärd |
|
||
|---|---|---|
|
||
| P1-1 | **S6** — AUD0 no-op utan URL | Wire AUD0_URL från Infisical; verifiera event-emission live |
|
||
| P1-2 | **S7** — db-grant påstår kryptering | Implementera AES-GCM med GRANT_ENC_KEY, read-only-validering, lagring + audit — eller ta bort påståendet |
|
||
| P1-3 | **S12** — svag session | exp-kontroll, rotation, användar-binding |
|
||
| P1-4 | **S9** **[BYPASS]** | Produktbeslut: behåll/bygg-om bypass-stacken (GPL-fläckar + juridiskt läge). Teknisk radering är INTE planerad — beslut om framtida läge fattas av Simon |
|
||
| P1-5 | **D4** — Coolify-app ej provisionerad | Provisionera app i cloud.siax.io, fyll COOLIFY_APP_ID + COOLIFY_TOKEN (Infisical) |
|
||
| P1-6 | **C8** — Infisical ej inkopplat | Infisical-projekt 0pt + env-mapping; Vercel-env avvecklas i takt med cutover |
|
||
|
||
## P2 — medel
|
||
|
||
| ID | Lucka | Åtgärd |
|
||
|---|---|---|
|
||
| P2-1 | **D5** — ingen backup/restore | När DB provisioneras: pg_dump-schema + offsite (jfr fleet-blockerare), restore-test i kalender |
|
||
| P2-2 | **C13** — retention/deletion-after-job | TTL-jobb + DELETE-väg + audit |
|
||
| P2-3 | **C10→P0-7-efterföljd** | Källquery-vägar tenant-scopade |
|
||
| P2-4 | **D6** — observabilitet | Strukturerad loggning + correlation-id-propagering; OTel-agent senare |
|
||
|
||
## P3 — låg
|
||
|
||
| ID | Lucka | Åtgärd |
|
||
|---|---|---|
|
||
| P3-1 | **A4/A5-efterföljd** | Registera 0pt-capabilities i CL0UD capability-registry (API/CLI/MCP/SDK) från contracts/openapi.yaml |
|
||
| P3-2 | **S2-efterföljd** | Tenantmodell bekräftas mot CL0UD-tenantregister (1:1 Zitadel-org?) |
|
||
| P3-3 | **C2-efterföljd** | X-Tenant-Id-headerkontroll vs body → enhetlig policy |
|
||
| P3-4 | **Engine-DB** | asyncpg inkopplad; Postgres som riktig store för ordrar/jobb (idag in-memory) |
|
||
|
||
## P4 — hygien (kan göras i en session utan produktbeslut)
|
||
|
||
| ID | Åtgärd |
|
||
|---|---|
|
||
| P4-1 | `duckdb` saknas i services/scrapers/requirements.txt trots import — lås versionen |
|
||
| P4-2 | `package.json` namn `"my-v0-project"` → `@siax/0pt` (spårbarhet) |
|
||
| P4-3 | sql/002/003 refereras men saknas — antingen skapa eller korrigera referenserna |
|
||
| P4-4 | Committed `__pycache__/*.pyc` + `services/scrapers/output/*.json` (skrapdata) — flytta ut ur git (ej radering av funktionalitet) |
|
||
| P4-5 | `.github/workflows/ci.yml` (legacy GitHub-mirror) — beslut om GitHub-avveckling; behålls tills dess (AR-1) |
|
||
| P4-6 | In-memory-state-fix: Map per instans → delad store (förutsätter P3-4) |
|
||
|
||
## P5 — struktur
|
||
|
||
| ID | Åtgärd |
|
||
|---|---|
|
||
| P5-1 | runbook/SLO-uppföljning i drift (oncall-rotation) |
|
||
| P5-2 | Docs: konsumentled (Protosell/VehIQ-integrationer) verifieras och dokumenteras |
|
||
|
||
## P6 — senare
|
||
|
||
| ID | Åtgärd |
|
||
|---|---|
|
||
| P6-1 | Designsystem-konvergens mot @siax/ui (öppen fråga §8.8) |
|
||
| P6-2 | NER (spaCy), OCR (self-hosted på N0D), kvalitetslager (docs/P0_DATASET_QUALITY_FLOW.md) |
|
||
| P6-3 | OpenSanctions-avtal: verifiera kommersiella villkor före produktionsvolym |
|
||
| P6-4 | AI-parsning → INF0-gateway (consumes INF0) |
|
||
|
||
## Bypass-undantag (formellt)
|
||
|
||
Följande backlog-poster berör den medvetet behållna bypass-stacken och ska inte
|
||
åtgärdas som "radera koden": P1-4. All övrig backlog rör inte
|
||
`services/scrapers/*`, `services/infra/docker-compose.data-stack.yml` eller
|
||
`adaptive_router.py` (AR-1-undantag).
|