Crawler Phase 4 – CLI (T-050..T-052)

ID757
Statuscompleted
Typai_task
Erstellt vonmcp-tasks (ai)
Erstellt2026-04-21 03:02:47.156843
Abgeschlossen2026-04-21 03:07:37.511748

Beschreibung

typer-basiertes CLI mit Composition-Root (alle Adapter verdrahten), Commands: crawl, list, report, diff, recheck-external, purge, status. Worker-Loop orchestriert Queue → ProcessUrl → Finalize. E2E-Test gegen Fixture-Server.

Aktionen

Bearbeiten

Ergebnisse

claude (claude) success
Tokens- (In: -, Out: -)
Dauer-
Zeit2026-04-21 03:07:36
Antwort:
Phase 4 CLI abgeschlossen.

Struktur (src/interfaces/cli/):
- wiring.py: Composition-Root (Container) — Repositories-Dataclass + Builder-Methods für alle Use Cases; load_db_settings + Adapter-Wiring.
- worker.py: QueueWorker mit asyncio.Semaphore-Concurrency, dequeue-Loop, Error-Capture in CrawlErrorRepository.
- main.py: typer-App mit 6 Commands (crawl, list, report, diff, recheck-external, status).
- commands/: je eine Datei pro Command.
  - crawl.py: CrawlCliInput-Dataclass (vermeidet PLR0913), run_crawl orchestriert StartCrawl → Worker → Finalize, sync_run_crawl als asyncio.run-Wrapper.
  - list_crawls.py, report.py, diff.py, status.py: jeweils JSON-Rendering.
  - recheck_external.py: asyncio-Runner.

Bug-Fix beim E2E: MariaDB DATETIME(3) speichert ms-Präzision. SystemClock trunkiert µs auf ms-Präzision (_MICROSECONDS_PER_MILLISECOND-Konstante), damit first_seen_at (von Python) nicht nach DB-Round-Trip das last_seen_at der nächsten Transaktion überholt.

Quality-Gateways (alle grün):
- G1 Ruff, Ruff format, Mypy --strict (112 files), Radon cc/mi, MaxLOC 80 — PASS
- G2 Unit-Tests 73/73 PASS
- G3 Integrationstests 9/9 PASS
- G4 Import-linter: 3 Contracts kept
- G5 pip-audit: no vulnerabilities
- G6 schema-drift: 13 tables in sync
- E2E-Test: `crawl` gegen fixture_server.py (aiohttp mit deterministischen SEO-Fehlern), asserts page_count ≥ 5 und erkennt h1_multiple-Flag auf /double-h1.

CLI-Nutzung:
  ./venv/bin/python -m src.interfaces.cli.main crawl --base-url https://x --mode fast
  ./venv/bin/python -m src.interfaces.cli.main list --limit 20
  ./venv/bin/python -m src.interfaces.cli.main report --crawl-id 1
  ./venv/bin/python -m src.interfaces.cli.main diff --from 1 --to 2
  ./venv/bin/python -m src.interfaces.cli.main status --crawl-id 1
  ./venv/bin/python -m src.interfaces.cli.main recheck-external --crawl-id 1

← Zurück zur Task-Liste