docs(compliance): add BLOCKERS.md (§1.4) #16
@@ -0,0 +1,72 @@
|
||||
# BLOCKERS.md — 0pt (§1.4)
|
||||
|
||||
> Policy: enligt SIAX-F0KUSREPO-PROMPT §1.4 (Blockerarpolicy) dokumenteras varje
|
||||
> blockerare som inte kan lösas själv eller plattformsbrett här — exakt vad som
|
||||
> krävs för att lyfta den. En obesvarad blockerare som inte står i denna fil
|
||||
> räknas som ett fel i leveransen (Appendix C #20).
|
||||
>
|
||||
> Märkning: 🔴 = öppen blockerare · 🟡 = beslutad/accepterad skuld (frågan är
|
||||
> avgjord, men konsekvensen kvarstår i koden/driften) · Bevis per post (AR-5).
|
||||
>
|
||||
> Verifierad färsk **2026-08-11** mot `main` @ `5c36dc300f45fed6ae789a5edccc0dfcbfb98918`
|
||||
> (`git.siax.io/sax3l/0pt`). Detta dokument fanns inte tidigare i repot
|
||||
> (bekräftad frånvaro vid en tidigare audit-passering) — denna fil är den
|
||||
> första skrivningen, inte en uppdatering.
|
||||
|
||||
---
|
||||
|
||||
## B-1 🟡 — WAF-bypass-/evasionstacken (`services/scrapers/*`)
|
||||
|
||||
| Fält | Innehåll |
|
||||
|---|---|
|
||||
| **Vad blockerar** | `services/scrapers/waf_bypass.py`, `engine.py` och `engine_v2.py` innehåller en FlareSolverr-/Tor-/proxyrotationsstack som strider mot `CLAUDE.md` §1:s uttryckliga förbud mot WAF/bot-detektionsbypass. En kirurgiskt ren borttagnings-PR (**#7**, `chore(compliance): ta bort den förbjudna WAF-bypass-/evasionstacken`) verifierades ren men stängdes **omergad** 2026-08-09. |
|
||||
| **Vad krävs för att lyfta den** | Ett uttryckligt, dokumenterat kontoägarbeslut: behåll, bygg om, eller ta bort stacken. |
|
||||
| **Vem beslutar** | Simon Axelsson (kontoägare). |
|
||||
| **Nuvarande status** | **Redan beslutad (behåll) — 2026-08-11.** Kontoägaren tillfrågades direkt via en interaktiv beslutsprompt, som svar på PR #7:s borttagningsförslag, och valde uttryckligen **behåll**. Beslutet är nu dokumenterat i `AGENTS.md` (rad ~21–30) och `SECURITY.md`, mergat till main via PR **#15** (docs-only, merge-commit `5c36dc3` — samma commit som är denna verifierings `main`-HEAD). PR #7 kvarstår **closed/unmerged** och rörs inte av detta dokument eller detta uppdrag. Ingen affärs- eller juridisk motivering utöver "behåll" är dokumenterad, och ingen ska hittas på om den saknas i framtida rapporter. `services/scrapers/{waf_bypass,engine,engine_v2}.py` är oförändrade av denna PR och ligger utanför detta dokuments och detta uppdrags mandat. |
|
||||
| **Bevis** | `git log -- services/scrapers/waf_bypass.py` (`bb6be0f`, `afd301f`); Gitea API `repos/sax3l/0pt/pulls/7` (`state: closed`, `merged: false`, `closed_at: 2026-08-09T09:49:05Z`); Gitea API `repos/sax3l/0pt/pulls/15` (`merged: true`, `merged_at: 2026-08-11T09:36:17Z`); `AGENTS.md` rad 21–30 (denna checkout). |
|
||||
|
||||
---
|
||||
|
||||
## B-2 🔴 — Ingen Coolify-app provisionerad, inget Infisical-projekt
|
||||
|
||||
| Fält | Innehåll |
|
||||
|---|---|
|
||||
| **Vad blockerar** | `.gitea/workflows/cd.yml` har fortfarande en literal platshållare: `COOLIFY_APP_ID: "TODO-no-coolify-app-provisioned-yet"`. Jobbet är medvetet guardat att lyckas grönt utan att faktiskt deploya (`exit 0` + varning om token/UUID saknas). `siax.repo.json`/`siax.config.json` saknar Infisical-referens. Detta matchar repots egna `docs/compliance/BACKLOG.md` (P1-5, P1-6) och `GOLDEN-STANDARD-REPORT.md` (D4 ❌, C8 ❌, D7 ➖). |
|
||||
| **Vad krävs för att lyfta den** | Skapa appen i `cloud.siax.io` (Coolify), sätt `COOLIFY_APP_ID` i `cd.yml` och `COOLIFY_TOKEN` som Gitea-repo-secret. Skapa ett Infisical-projekt `0pt` med env-mappning och migrera bort från Vercel-env i takt med cutover. |
|
||||
| **Vem beslutar** | Ingen produktbeslutsfråga i sig — operativt arbete som kräver admin-access till kontrollplanet (`cloud.siax.io` / `vault.siax.io`). |
|
||||
| **Nuvarande status** | Fortfarande öppen. Verifierad färsk denna session: `cd.yml` bär fortfarande TODO-platshållaren på nuvarande `main`-HEAD. Kontrollerat om ett parallellt P0-1-uppdrag i samma arbetsflöde redan hunnit provisionera en app/projekt — inget sådant syns i repots egna deploy-artefakter vid tidpunkten för denna verifiering. Denna session saknar `SIAX_TOKEN`/inloggning mot `cloud.siax.io`/Infisical, så ett levande skick bortom repots egna signaler kunde inte kontrolleras direkt — endast repo-interna bevis nedan är verifierade. |
|
||||
| **Bevis** | `.gitea/workflows/cd.yml` rad 25 (denna checkout); `docs/compliance/BACKLOG.md` P1-5/P1-6; `docs/compliance/GOLDEN-STANDARD-REPORT.md` D4/D7/C8. |
|
||||
|
||||
---
|
||||
|
||||
## B-3 🔴 — DNS-zonerna (`0pt.app`, `0pt.dev`) delegerade till Vercel, inte egen PowerDNS
|
||||
|
||||
| Fält | Innehåll |
|
||||
|---|---|
|
||||
| **Vad blockerar** | Live NS-uppslag (denna session, 2026-08-11) visar att både `0pt.app` och `0pt.dev` fortfarande delegeras till `ns1.vercel-dns.com`/`ns2.vercel-dns.com` — trots att PowerDNS (server5/server6, se z0ne-DNS-migrationen) redan håller skuggkopior av dessa zoner. |
|
||||
| **Vad krävs för att lyfta den** | Byt NS-poster hos registrar (Name.com) till `ns1.siax.io`/`ns2.siax.io`; verifiera att zoninnehållet i PowerDNS matchar produktionens faktiska poster innan cutover (dump/backup krävs per §1.4:s regel om irreversibla DNS-delegeringsbyten); ta därefter bort eller markera skuggkopiorna som primära. |
|
||||
| **Vem beslutar** | Simon Axelsson — DNS-cutover för en produktionsdomän räknas som en operation som kräver dump/backup före körning enligt §1.4. |
|
||||
| **Nuvarande status** | Fortfarande öppen. Verifierad färsk denna session (`nslookup -type=NS 0pt.app` / `0pt.dev`, 2026-08-11): båda svarar fortfarande med Vercel-nameservrar. |
|
||||
| **Bevis** | `nslookup -type=NS 0pt.app` och `0pt.dev` (körd denna session, 2026-08-11). |
|
||||
|
||||
---
|
||||
|
||||
## B-4 🔴 — `middleware.ts` exekverar inte i den liva Vercel-produktionsbygget
|
||||
|
||||
| Fält | Innehåll |
|
||||
|---|---|
|
||||
| **Vad blockerar** | Trots att auth-koden i `middleware.ts` är fail-closed i källan, och trots att en färsk fix (PR #11, `fix(security): require auth on GET /api/orders and GET /api/admin/metrics`, commit `15a0dbe`) redan är mergad till `main`, svarar de liva produktionsrutterna fortfarande anonymt. **Verifierat färskt denna session**: `GET https://0pt.app/api/0pt`, `/api/orders` och `/api/admin/metrics` gav samtliga **HTTP 200** anonymt (2026-08-11). Detta är repots egen dokumenterade lucka P0-1/S1 i `BACKLOG.md`/`GOLDEN-STANDARD-REPORT.md` — rotorsaken är okänd. |
|
||||
| **Vad krävs för att lyfta den** | Någon med Vercel-deploy-access måste undersöka byggutmatningen (Next 16 + `src/`-trädet, ev. edge-runtime-konfiguration) för att fastställa varför `middleware.ts` inte körs i produktionsbygget, fixa det, och verifiera med en levande anonym request → 401 efter fix. |
|
||||
| **Vem beslutar** | Ingen produktbeslutsfråga — tekniskt rotorsaksarbete som kräver Vercel-projektåtkomst som denna session saknar. |
|
||||
| **Nuvarande status** | Fortfarande öppen, och **allvarligare än BACKLOG.md:s ursprungliga formulering antyder**: koden är nu fixad (PR #11 mergad) men produktionen speglar ändå inte koden — detta bekräftar att gapet är i bygg-/deploykonfigurationen, inte (bara) i applikationskoden. |
|
||||
| **Bevis** | `docs/compliance/BACKLOG.md` P0-1; `docs/compliance/GOLDEN-STANDARD-REPORT.md` C1/C3; `curl -o /dev/null -w '%{http_code}'` mot samtliga tre rutter (körd denna session, 2026-08-11, samtliga 200). |
|
||||
|
||||
---
|
||||
|
||||
## Undantag (formellt, oförändrat av detta dokument)
|
||||
|
||||
Detta dokument beskriver ovanstående blockerare **utan att lösa dem**. Ingen av
|
||||
posterna ovan har medfört ändringar i `services/scrapers/{waf_bypass,engine,engine_v2}.py`,
|
||||
`services/scrapers/requirements.txt`, `services/infra/docker-compose.data-stack.yml`,
|
||||
`docs/compliance/BACKLOG.md`, eller PR #7 (varken återöppnad eller mergad). Den frågan
|
||||
är explicit under hantering i ett separat, parallellt spår per uppdragets instruktion.
|
||||
Reference in New Issue
Block a user