From 73d2e109cd549775e6a7d1b9f0d19554670d2ce6 Mon Sep 17 00:00:00 2001 From: Agent Zero Date: Sun, 23 Aug 2026 18:41:21 +0200 Subject: [PATCH] docs: block a progress - arch-043/052/008/009 fixed and verified --- PROGRESS.md | 7 ++++++- docs/test-bugs.md | 8 ++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/PROGRESS.md b/PROGRESS.md index 424d0b3..a6f72de 100644 --- a/PROGRESS.md +++ b/PROGRESS.md @@ -33,7 +33,12 @@ | HC-A Backend | action_mapper feste Regex-Intents | ✅ Contribution-API | 4994906 | | Gate H | Plugin-Contribution ohne Core-Änderung beweisen | ✅ BESTANDEN (2/2) | 801743b | -**Offen Block A:** ARCH-043, ARCH-052, ARCH-008/009 (Permission-Wildcards), A2-Deactivation-Cleanup (ARCH-012/013/015/033–037/044) → dann Gate A. +| ARCH-043 | automation Tenant.limit(1) statt System-Tenant | ✅ get_system_tenant() + system_tenant_slug Setting | 17516d2 | +| ARCH-052 | storage get_file_metadata Event-Loop im async Kontext | ✅ get_file_metadata_async() + Fail-Fast-Guard | 17516d2 | +| ARCH-008 | Permission-Namensschema inkonsistent | ✅ Kanon modul:aktion festgelegt, Manifest-Validator erzwingt es | 7953077 | +| ARCH-009 | Tote 3-Segment-Rollen-Patterns (core:*:X) + 14 Route-Literals | ✅ Migration 0141 + Route-Fix, Roundtrip bewiesen | 7953077 | + +**Offen Block A:** A2-Deactivation-Cleanup (ARCH-012/013/015/033–037/044) → dann Gate A. **Offen gesamt:** B (Contacts-Entkopplung als Kernstück), C (Frontend-Routen/Workspace/Settings/Dashboard), D (pytest-Massen + Security-Triage), E (Production-Härtung), F3 (Guide-Updates), G (DSGVO). **Bekannte Vorbestände:** BUG-099 (workstream.py gelöscht in 7d86592, Tests importieren es noch — 7 Failures). test_trigger_core besteht isoliert. diff --git a/docs/test-bugs.md b/docs/test-bugs.md index b0d184d..7905c36 100644 --- a/docs/test-bugs.md +++ b/docs/test-bugs.md @@ -843,13 +843,13 @@ Playwright E2E: 10 passed, 24 failed (BUG-011/012/013 — Mock-Daten und data-te - **Datei:** app/plugins/builtins/kommunikation/plugin.py:44, app/routes/dashboard.py:23 - **Problem:** kommunikation verwendet 'comm:read', dashboard verwendet 'dashboard:read'. Andere Plugins verwenden 'pluginname:read'. - **Schweregrad:** Medium -- **Status:** ⏳ Nicht gefixt +- **Status:** ✅ Gefixt 2026-08-23 (Block A): Kanon-Schema modul:aktion festgelegt (docs/permissions.md), Manifest-Validator erzwingt es bei Load-Time, Quellvertragstest verhindert 3-Segment-Literals in app/routes ### ARCH-009: Default-Rollen core:*:read matcht nicht Plugin-Permissions - **Datei:** alembic/versions/0019_rbac_groups.py:80, app/core/permissions.py:46-50 - **Problem:** `core:*:read` (3 Segmente) matcht nicht `contacts:read` (2 Segmente) wegen `len(g_parts) != len(r_parts)` Prüfung. - **Schweregrad:** High -- **Status:** ⏳ Nicht gefixt +- **Status:** ✅ Gefixt 2026-08-23 (Block A): Migration 0141 konvertiert Bestandsrollen core:*:X → *:X (Roundtrip per psql bewiesen); 14 Route-Literals delegations/policies/templates auf 2-Segment korrigiert; Hash-Gate unverändert grün ### ARCH-010: Cross-Plugin-Checker scannt nur builtins standardmäßig - **Datei:** scripts/check_cross_plugin_imports.py:233 @@ -1069,7 +1069,7 @@ Playwright E2E: 10 passed, 24 failed (BUG-011/012/013 — Mock-Daten und data-te - **Datei:** app/plugins/builtins/automation/plugin.py:register_plugin_contributions - **Problem:** `select(Tenant).limit(1)` nimmt den ersten Tenant in der DB, nicht den aktuellen Tenant. In Multi-Tenant-Setups werden Contributed Agents/Automations im falschen Tenant erstellt. - **Schweregrad:** High -- **Status:** ⏳ Nicht gefixt +- **Status:** ✅ Gefixt 2026-08-23 (Block A): Konfigurierbarer system_tenant_slug (Default 'default', wie seed_admin) in Settings; wiederverwendbarer Helper get_system_tenant() im Core-Layer (app/core/db); beide automation-Stellen nutzen ihn; Test beweist Slug-Lookup gegen Decoy-Ersteintrag ### ARCH-044: ai_ui_control/plugin.py — on_deactivate ruft super().on_deactivate() VOR service_container.remove() - **Datei:** app/plugins/builtins/ai_ui_control/plugin.py:on_deactivate @@ -1123,7 +1123,7 @@ Playwright E2E: 10 passed, 24 failed (BUG-011/012/013 — Mock-Daten und data-te - **Datei:** app/core/storage.py:get_file_metadata - **Problem:** `loop = asyncio.new_event_loop()` für S3 fallback — erstellt einen neuen Event Loop in einem async Kontext. Kann zu Deadlocks führen wenn bereits ein Loop läuft. - **Schweregrad:** Medium -- **Status:** ⏳ Nicht gefixt +- **Status:** ✅ Gefixt 2026-08-23 (Block A): Neue get_file_metadata_async() awaited backend.exists() direkt; Sync-Funktion ist Wrapper mit Fail-Fast-Guard gegen verschachtelte Loops im laufenden Loop; bestehende Sync-Tests unverändert grün ### ARCH-053: audit.py — datetime.utcnow() naive datetime in retention cleanup - **Datei:** app/routes/audit.py:179