From 36636f5c25ea89455cdb8dd068040448912708cc Mon Sep 17 00:00:00 2001 From: Agent Zero Date: Mon, 24 Aug 2026 01:40:34 +0200 Subject: [PATCH] docs(d2): utcnow family fixed, sqlite-001 results, handover notes for successor agent --- PROGRESS.md | 15 +++++++++++++++ docs/test-bugs.md | 8 ++++---- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/PROGRESS.md b/PROGRESS.md index 701e8d6..f287bb6 100644 --- a/PROGRESS.md +++ b/PROGRESS.md @@ -63,10 +63,25 @@ | C7 | Dashboard-Widgets als Plugin-Contributions (contacts/tasks/calendar) + Contact-Counts über neuen ContactsContract | ✅ Contract exponiert get_counts; dashboard.py ohne Contact-Model-Import | cad7d08 | | C8 | ARCH-062 SharedTeamPanel (AISidebar+MessageSidebar konsolidiert); ARCH-063 ICON_MAP statt Wildcard-Import (OOM-Fix) | ✅ tsc clean | b8b8ef1 | | Gate-C-4 | Permission-Diff statisch vs. Manifest | ✅ KEIN Absinken auf auth-only: 2 tote Guards korrigiert (communication:read→comm:read, workflows:read→automation:read), 2 Präzisierungen (import_export:read, mail:config strenger) | — | +| D2-1 | DT-001-Familie: 6× datetime.utcnow() → datetime.now(UTC) (worker ×2, audit, webhook_service inkl. Inline-Hack bereinigt, backup_service, mcp_client); 0 utcnow verbleibend | ✅ Syntaxchecks + App-Import OK; Wire-Format des Webhooks unverändert (isoformat+Z) | d89044d | +| D2-2 | SQLITE-001: automation tests von SQLite in-memory auf ephemeres PostgreSQL umgestellt (CREATE/DROP pro Lauf, pgvector-Extension, komplettes Model-Discovery für cross-plugin FKs) | ✅ 30/30 Tests grün; dabei 3 Testlogik-Bugs gefixt: DryRun-FK (echte Automation vor Run), Rate-Limit-Assertion-Richtung (< → >=), Budget-Float approx | d89044d | **Block A ABGESCHLOSSEN** — Gate A bestanden (32f63ad). **Block B ABGESCHLOSSEN** — Gate B bestanden (alle 5 Checks bewiesen). **Block C ABGESCHLOSSEN** — C1–C8 implementiert, Gate-C-Checks 4+5 bewiesen; Checks 1–3 (Playwright gegen Build, Workspace-E2E, Normal-User-E2E) erfordern E2E-Lauf → Block E. +**Block D GESTARTET** — D2 komplett (d89044d). Offen: D1 (pytest-Massen), D3 (API-/Testpfade + ARCH-051/055/056/057), D4 (Security-Triage BUG-019/020 + ARCH-027), D5 (Marathon-Triage), D6 (Legacy-Migration ARCH-059/023). + +### Bekannte Vorbestände (Block D Triage) +- 9 Contact/Company-Test-Failures existieren seit vor Block B (Stash-Verifikation 2026-08-23): KeyError 'id' bei Create/Delete/Link-Flows — Ursache ungeklärt, gehört zur pytest-Massen-Triage. +- 5 PluginLoader-Test-Failures sind Vorbestand (Stash-Verifikation): Tests erwarten UI-Text 'Failed to load plugin', aktueller Loader zeigt deutsche Texte. +- Geister-Komponenten: Backend-Manifeste referenzieren @/pages/AIAssistant + 5 Contact-Detail-Tabs, die im Frontend nicht existieren (siehe unten). + +### Handover-Hinweis für Nachfolge-Agent +- Reparaturplan: docs/fix-plan-v3.md (Blöcke 0/H/A/B/C done, D gestartet, E/F/G offen) +- Findings-Status: docs/test-bugs.md (✅/⏳ je Finding) +- Verifikationsmuster: Stash-Test gegen Pre-Block-Commit für Vorbestands-Nachweis; Endpoint-Diff via OpenAPI-Snapshot; Cross-Plugin-Scan als Gate +- Test-DB: .env.test (leocrm_test), automation-Tests erstellen eigene ephemere DBs +- Forgejo-Issues/Milestones laut AGENTS.md §9 noch NICHT angelegt — nur PROGRESS.md-Tracking ### Geister-Komponenten (Block D Triage) Backend-Manifeste referenzieren Frontend-Komponenten, die nicht existieren: diff --git a/docs/test-bugs.md b/docs/test-bugs.md index 247d9cd..77c63f2 100644 --- a/docs/test-bugs.md +++ b/docs/test-bugs.md @@ -1045,7 +1045,7 @@ Playwright E2E: 10 passed, 24 failed (BUG-011/012/013 — Mock-Daten und data-te - **Datei:** app/core/worker.py:cleanup_audit_log_job, cleanup_trash_job, cleanup_knowledge_job - **Problem:** `datetime.utcnow() - timedelta(days=...)` verwendet naive datetime. AGENTS.md verbietet naive datetime — TIMESTAMPTZ only. Sollte `datetime.now(UTC)` sein. - **Schweregrad:** Medium -- **Status:** ⏳ Nicht gefixt +- **Status:** ✅ Gefixt 2026-08-24 (Block D/D2): Beide Cleanup-Jobs auf datetime.now(UTC) umgestellt, lokale Imports erweitert; 0 utcnow-Referenzen verbleiben im Codebase ### ARCH-040: worker.py — cleanup_knowledge_job importiert direkt von Plugin (Core→Plugin) - **Datei:** app/core/worker.py:cleanup_knowledge_job @@ -1129,7 +1129,7 @@ Playwright E2E: 10 passed, 24 failed (BUG-011/012/013 — Mock-Daten und data-te - **Datei:** app/routes/audit.py:179 - **Problem:** `datetime.utcnow() - timedelta(days=retention_days)` verwendet naive datetime. AGENTS.md verbietet naive datetime — TIMESTAMPTZ only. Sollte `datetime.now(UTC)` sein. - **Schweregrad:** Medium -- **Status:** ⏳ Nicht gefixt +- **Status:** ✅ Gefixt 2026-08-24 (Block D/D2): Retention-Cutoff auf datetime.now(UTC) umgestellt, UTC-Import ergänzt ### ARCH-054: entity_permissions.py — _check_entity_ownership greift auf falsche Datenstruktur - **Datei:** app/routes/entity_permissions.py:259 @@ -1159,7 +1159,7 @@ Playwright E2E: 10 passed, 24 failed (BUG-011/012/013 — Mock-Daten und data-te - **Datei:** app/services/webhook_service.py:send_webhook - **Problem:** `__import__("datetime").datetime.utcnow().isoformat() + "Z"` verwendet naive datetime. AGENTS.md verbietet naive datetime — TIMESTAMPTZ only. Sollte `datetime.now(UTC)` sein. - **Schweregrad:** Medium -- **Status:** ⏳ Nicht gefixt +- **Status:** ✅ Gefixt 2026-08-24 (Block D/D2): Inline-__import__-Hack entfernt, sauberer UTC-Import; Wire-Format unverändert (isoformat().replace('+00:00','Z')) ### ARCH-059: ai_copilot_service.py — Legacy AIConversation/AIMessage statt kommunikation - **Datei:** app/services/ai_copilot_service.py:18-21 @@ -1171,7 +1171,7 @@ Playwright E2E: 10 passed, 24 failed (BUG-011/012/013 — Mock-Daten und data-te - **Datei:** app/services/backup_service.py:create_backup - **Problem:** `backup.completed_at = datetime.utcnow()` verwendet naive datetime. AGENTS.md verbietet naive datetime — TIMESTAMPTZ only. Sollte `datetime.now(UTC)` sein. - **Schweregrad:** Medium -- **Status:** ⏳ Nicht gefixt +- **Status:** ✅ Gefixt 2026-08-24 (Block D/D2): completed_at auf datetime.now(UTC) umgestellt; UTC war bereits im Import ### ARCH-061: routes/index.tsx — Leeres Route-Objekt (Dead Code) - **Datei:** frontend/src/routes/index.tsx:58-59