diff --git a/docs/teilprojekte.md b/docs/teilprojekte.md
index a606c83..515f16b 100644
--- a/docs/teilprojekte.md
+++ b/docs/teilprojekte.md
@@ -2578,47 +2578,41 @@ Split-Horizon; Zugang via TP41-**WARP** gelöst (Geli 2026-09-10 via Android). D
**interne** Namen blieb dabei übersehen — deshalb reopened, s.o.
-### TP49 · Gitea #76 — CF-Access: Wildcard-Policy öffnet alle internen Dienste für jeden GitHub/Google-User ▸ 🔴 ABSOLUTE PRIORITÄT
+### TP49 · Gitea #76 — CF-Access: `login_method`-Includes auf Policy-Ebene ▸ 🔴 ABSOLUTE PRIORITÄT
-*(Angelegt 2026-10-06 auf Christoph-Direktive. Fund stammt vom 2026-07-10 und stand seither
-unbehoben in der Memory `project_cf_tunnel_1033` — beim Sichern der Memories wiederentdeckt.)*
+*(Angelegt 2026-10-06 auf Christoph-Direktive. Fund vom 2026-07-10, stand seither unbehoben in
+der Memory `project_cf_tunnel_1033` — beim Sichern der Memories wiederentdeckt.
+**Am 2026-10-06 live nachgeprüft: der Ursprungsbefund ist kleiner als notiert.**)*
-#### Der Befund (2026-07-10, nie behoben)
-Eine Policy am CF-Access-Wildcard `*.emsenhuber.net` (App `16aaec78`) trägt
-`login_method:github` und `login_method:google` **als include**. Das ist ein Denkfehler mit
-Wirkung nach außen: 🔴 **`login_method:` matcht JEDEN, der sich über diesen IdP anmeldet —
-nicht nur den Owner.** Ein beliebiger GitHub- oder Google-Account kommt damit durch.
+#### ⚠️ Korrigierte Lage (2026-10-06, live gegen die CF-API)
-Betroffen sind **alle Dienste hinter dem Wildcard**: `hass`, `grafana`, `portainer`, `pve` u.a. —
-also Smart-Home (inkl. Presence/Türen), Container-Control und Hypervisor-Management.
+**Der interne Wildcard ist sauber.** TP41 hat `*.emsenhuber.net` (App `16aaec78…`) auf
+Access-Groups umgestellt — nachgeprüft, Policies `bf-users` / `bf4` / `claude-mcp` binden an
+`zt-humans` (drei einzelne E-Mail-Adressen), `zt-home` (`ip:90.146.33.177/32`) und
+`zt-automation` (service_token). ✅ **Kein `login_method` mehr an `hass`/`grafana`/`portainer`/`pve`.**
-#### Warum es so lange offen blieb
-Der Befund war als „offen, user-gated" markiert und wurde bewusst nicht einseitig geändert
-(Aussperr-Risiko). Er stand danach nur in einem Session-Memory und in keiner TP-Liste — beim
-Aufräumen der Memories am 2026-10-06 kam er wieder hoch.
+**Offen ist genau ein Eintrag**, gefunden per Sweep über alle 9 Apps:
+`420.teilzeitladen.xyz` (Terpenfinder, **öffentlich**), Policy `christoph` trägt
+`login_method:github`. Der zweite Include (`onetimepin`) ist **unkritisch** — das ist der
+gewünschte E-Mail-Einmalcode.
-#### Erster Schritt: messen, nicht annehmen
-1. `GET /accounts/{id}/access/apps` → existiert `16aaec78` noch?
-2. `GET …/access/apps/{id}/policies` → welche `include`-Regeln, welche `login_method`-Einträge?
-3. **Sweep über ALLE Apps** — gibt es weitere Policies mit `login_method:`?
-4. Existiert der reusable Bypass `a8129e37` noch? (Am 2026-07-10 detacht, **nicht** gelöscht.)
+**Auswirkung:** ein beliebiger GitHub-Account sieht den Terpenfinder. Kein Zugriff auf die
+interne Infrastruktur — die kritische Tür war schon zu. Aber es ist eine offene Tür auf einer
+öffentlichen Domain, die „nur für uns" sein sollte.
-#### Fix (falls bestätigt)
-`login_method:*` aus den Includes entfernen; Zugang über `email:…` der tatsächlichen Personen.
-⚠️ Vorher abstimmen, wer Zugang braucht — sonst sperrt man sich aus.
+#### Fix
+`login_method:github` aus dem Include entfernen; `onetimepin` bleibt. Danach prüfen, dass
+`christoph` und `geli` über ihre E-Mail-Adressen weiter hineinkommen.
+⚠️ Vorher abstimmen (Christoph-Entscheid 2026-07-10) — Aussperrung wäre der teurere Fehler.
-#### Gotchas (spart Suchzeit)
-- Reusable Policy nur per **App-PUT** (`policies:[{id,precedence}]`) detachbar — **nicht** via
- `/policies`-DELETE („can not delete reusable policies").
-- Policy-`precedence` muss **eindeutig** sein (Kollision mit Bypass = 1).
-- Writes nur via `CF_API_TOKEN`/curl; der `cloudflare`-MCP (OAuth) ist **read-only**.
- ⚠️ Token-Status vor Schreibaktionen live prüfen — `CF_API_TOKEN` galt am 2026-09-07 als ungültig
- (401), `CF_DNS_API_TOKEN` ist gültig, hat aber nur `DNS:Edit`.
+#### Gotchas (live bestätigt)
+- 🔴 **Access-App-IDs sind 32 Hex** — die Kurzform `16aaec78` liefert `12045 invalid_application_id`.
+ Volle ID zuerst per `GET /accounts/{id}/access/apps` holen.
+- Writes nur via `CF_API_TOKEN`/curl (MCP ist read-only). Token am 2026-10-06 als `active` verifiziert.
+- Reusable Policy nur per **App-PUT** detachbar, nicht per `/policies`-DELETE.
#### Abgrenzung
-**Nicht** TP41 (CF-Access-Reparatur, abgeschlossen) — das war der Auth-Kern; dies ist ein
-inhaltlicher Policy-Fehler, der dabei übersehen wurde. **Nicht** TP44 (CF-Estate in Nautobot) —
-Dokumentation, nicht Berechtigung. Verwandt: TP46 (#72).
+**Nicht** TP41 (hat genau diesen Wildcard bereits saniert), **nicht** TP44 (Dokumentation).
+⚠️ `420.teilzeitladen.xyz` gehört zum Projekt **blaueblüten** — Projektgrenze beachten.
-**→ Abschluss, wenn alle Apps auf `login_method`-Includes geprüft und die betroffenen Policies
-auf `email:`-Includes umgestellt sind.**
+**→ Abschluss, wenn der GitHub-Include entfernt und den beiden Personen der Zugang bestätigt ist.**