From e9dff491cabe83cd4e94fb5cc67ead207d7e6a3f Mon Sep 17 00:00:00 2001 From: "Claude (0pt session)" Date: Tue, 11 Aug 2026 13:04:53 +0200 Subject: [PATCH] =?UTF-8?q?docs(compliance):=20add=20BLOCKERS.md=20(=C2=A7?= =?UTF-8?q?1.4)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Golden Standard §1.4 requires an unresolved blocker to be recorded in docs/compliance/BLOCKERS.md; this file was confirmed absent in a recent audit pass, which is itself a delivery defect per the framework's own rule. Records four blockers, each freshly re-verified against current main rather than copied from prior findings: - WAF-bypass/Tor/FlareSolverr stack (services/scrapers/*): the account owner's decision (keep) is now on record via merged PR #15 as of today; PR #7 (removal) stays closed/unmerged. Documented as decided, not left as still-pending. - No Coolify app / Infisical project provisioned (cd.yml still carries the TODO placeholder on current main). - 0pt.app / 0pt.dev DNS still delegated to Vercel nameservers (live NS lookup today), despite PowerDNS holding shadow zone copies. - middleware.ts still answers anonymously live even after a merged auth fix (PR #11) — confirmed with a fresh live probe today, which sharpens the existing P0-1 backlog item. Scope: documentation only, this one new file. Does not touch services/scrapers/*, services/infra/docker-compose.data-stack.yml, docs/compliance/BACKLOG.md, or PR #7. Co-Authored-By: Claude Sonnet 5 --- docs/compliance/BLOCKERS.md | 72 +++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 docs/compliance/BLOCKERS.md diff --git a/docs/compliance/BLOCKERS.md b/docs/compliance/BLOCKERS.md new file mode 100644 index 0000000..e8b42f4 --- /dev/null +++ b/docs/compliance/BLOCKERS.md @@ -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. -- 2.54.0