Skip to content

Master Plan

MadGapun edited this page Jun 2, 2026 · 55 revisions

Master-Plan

Stand: 2026-06-01 · Lebendiges Dokument · Wird mit jedem Schritt aktualisiert.

Arbeitsprinzip: Master-Plan-First. Neue Ideen werden erst hier eingeordnet (mit Status ⬜ und ggf. Issue), dann nach Plan abgearbeitet — nicht ad-hoc gebaut und spaeter nachgezogen.

Akzeptanzkriterium: Eine Position ist nur ✅ wenn Code im Repo + Tests gruen + Wiki-Eintrag vorhanden — alle drei. Sonst bleibt sie 🟨 oder ⬜.

PBP ist seit fast einem Jahr in Entwicklung (Erstrelease v0.0.x → aktuell v1.7.0-beta.74). Dieser Plan dokumentiert was schon da ist (retroaktiv, ✅) und was kommt (⬜). Reihenfolge innerhalb eines Clusters folgt Abhaengigkeit. Reihenfolge zwischen Clustern: A → H → B → C → D → E → F → G → I → J.

Legende Status:

  • ⬜ geplant / Roadmap
  • 🟨 in Arbeit / teilweise umgesetzt
  • ✅ fertig (Code + Tests + Wiki)
  • ⏸ bewusst zurueckgestellt (Begruendung in Master-Plan-Optimierung)
  • ⛔ aus Scope rausgenommen / deprecated

Detail-Plaene pro Cluster (Issue-Level):

Risiken / Trade-offs / Annahmen: Master-Plan-Optimierung.


Teil A — Datenbasis & Persistenz

Foundation: Schema, Multi-Profil, Skills mit Zeitraeumen, Suchkriterien. Alles Aendern an Stellen/Bewerbungen/Dokumenten laeuft durch DB-Helper mit Lifecycle (Audit, Lerneffekt, Statistik).

Nr Funktion Issue Wiki Status
A1 SQLite-Schema mit _migrate-Funktion (v1 → v42, ALTER-only) mehrere Architektur
A2 Multi-Profil-System (mehrere Karrieren parallel verwalten) Tab-Profil
A3 Skills mit Zeitraeumen (start/end pro Skill) Tab-Profil
A4 Positionen / Ausbildung / Projekte (STAR-Struktur) Tab-Profil
A5 Suchkriterien (MUSS/PLUS/AUSSCHLUSS-Keywords, Regionen, Gewichtungen) Suchkriterien
A6 Profile-Cluster-Klassifikation (9 Cluster) #590 Profile-Cluster
A7 Typisierte IDs (Praefix-System: APP-, JOB-, DOC-) #505
A8 Profil-Importieren / Exportieren Tab-Profil
A9 Hash-Resolve mit Profil-Prefix (resolve_job_hash)
A10 Update-Whitelist mit _ALLOWED_UPDATE_FIELDS
A11 Hard-Guard save_jobs gegen leere URLs aus Scraper-Quellen #645 Stellen-Qualitaet
A12 Inhalts-Duplikat-Erkennung (Titel+Firma → duplikat) #641
A13 DB-Backup-Strategie + automatisches Restore Architektur
A14 Mojibake-Repair fuer doppelt-encodete Strings
A15 SQLite WAL-Mode + busy_timeout fuer Parallel-Reads

Teil B — Jobsuche & Quellen

34 Quellen-Adapter, Scraper-Health-System, Auto-Reactivate-Backoff, Profile-Cluster-Empfehlung. Die einzelnen Quellen sind in Plan-Jobsuche gelistet.

Nr Funktion Issue Wiki Status
B1 Scraper-Plugin-Architektur (LegacyAdapter + AdapterResult) #499 Jobportale
B2 34 Quellen-Adapter (HTTP/API, Browser, JobSpy) mehrere Jobportale 🟨 (6 produktiv, 7 defekt, siehe Health-Stand)
B3 Scraper-Health-System mit Auto-Reactivate-Backoff (24h/48h/72h/168h) #432 Jobportale
B4 Aktiver Quellen-Probe via quellen_health_check #624 🟨 (Probe-URLs teilweise veraltet)
B5 Profile-Cluster-basierte Quellen-Empfehlung #590 Profile-Cluster
B6 Workday-DAX-Cluster fuer Konzern-Bewerbungen #590 Jobportale
B7 Suchprofile (mehrere parallel verwaltbar) #564 Suchkriterien
B8 Scoring (6 Kriterien: Skills/Erfahrung/Branche/Standort/Gehalt/Modell) mehrere Tab-Stellen
B9 URL-Pflege-Pipeline (Detail-URL > jobId-rekonstruiert > Such-URL Fallback) #436, #645 Stellen-Qualitaet
B10 Stellenbeschreibung-Auto-Refetch (max 8/Lauf, Backoff bei 3 Fehlern) #622 Tab-Stellen
B11 URL-Aging-Auto-Cleanup (404/expired → dismiss veraltet_url) #645 Stellen-Qualitaet 🟨 (beta.73 ausgespielt, beta.72 hat es noch nicht)
B12 7 defekte Quellen — URL-Updates fuer ferchau/ingenieur_de, Deprecation fuer monster/solcom #653 Jobportale 🟨 (URL-Fixes + Deprecation ✅ beta.77; gulp/kimeta/heise_jobs in B18)
B13 quellen_health_check Probe-URLs aktualisieren offen
B14 Chrome-Extension-Fallback fuer Login-Wall-Quellen Jobportale
B15 Quellen-Rotation im job_runner #590-C.4
B16 Eigene Karriereseiten-URLs als Custom-Source #627
B17 Neuer Adapter: Adzuna API (REST, kostenlos, deutsche Stellen) #654 Jobportale
B18 Playwright-Adapter fuer SPA-Quellen (gulp/kimeta/heise_jobs) — bewusst zurueckgestellt, siehe Optimierung #656
B19 Minus-Keywords: weiche Score-Abwertung zusaetzlich zu harten Ausschluss-Keywords (Backend: Tools + Scoring) #667
B20 Minus-Keywords Frontend-Sektion + Gewicht-Slider #667 ✅ (Backend beta.84, Frontend beta.89)
B21 Scraper-Auto-Skip bei consecutive_failures >= 5 (Total-Timeout-Bugfix) #668
B22 stelle_manuell_anlegen Duplikat-Erkennung verfeinern (Titel-Aehnlichkeit statt nur Firma+Keyword, URL als starkes Signal, force=true-Override statt hartem Block) #670

Teil C — Stellen-Lifecycle & Bewertung

Nr Funktion Issue Wiki Status
C1 stellen_anzeigen mit Filter/Score/Quellen Tab-Stellen
C2 stelle_bewerten (Score) mit Ablehnungsgruende-Whitelist #108
C3 stellen_bulk_bewerten mit Filtern (#514 Anti-DB-Bypass) #514 MCP-Tools
C4 stellen_bulk_bewerten 90s-Wall-Clock-Budget #646 FAQ
C5 stellen_auto_aussortieren via Lokaler AI (Profil-Match) #586 Lokale-KI
C6 stellen_auto_aussortieren Hard-Cap + Wall-Clock-Budget #646 FAQ
C7 stelle_manuell_anlegen (LinkedIn/XING via Chrome-Extension) #160
C8 stelle_bearbeiten mit url=-Parameter (Backfill) #645 Stellen-Qualitaet
C9 stelle_vergleichen (Skills + Score + Gehalt + Standort) #580
C10 stelle_mergen (Master + Duplikat zusammenfuehren) #470
C11 aehnliche_stellen_finden (Token-Overlap) #580
C12 fit_analyse mit MUSS/PLUS-Hits + Risiko-Faktoren mehrere Tab-Stellen
C13 scoring_konfigurieren (Slider fuer Gewichtungen) Suchkriterien
C14 stellen_qualitaet_pruefen (URL-Health + Beschreibungs-Vollstaendigkeit) #645 Stellen-Qualitaet 🟨 (beta.73, beta.72 noch nicht)
C15 Adaptive Hints "Score unsicher / Beschreibung fehlt" #594 Lern-System
C16 Pin / Unpin von Top-Kandidaten Tab-Stellen
C18 fit_analyse mit 3-Stufen-Empfehlung (EMPFOHLEN/BEDINGT/NICHT_EMPFOHLEN) + k.o.-Kriterien #662 Plan-Stellen
C19 scoring_vorschau robust gegen Bracket-Keys mit Einheit (50km) #661
C20 Ablehnungsgruende editierbar: dyn. Whitelist + 4 MCP-Tools + is_active-Spalte #663 🟨 (Backend ✅ beta.85, Frontend ⬜ beta.86)
C21 stelle_reaktivieren MCP-Tool (Anti-DB-Bypass-Lueckenschluss) #664
C17 Outcome-Signal in fit_analyse (Warnung bei aussortierten Aehnlichen) #648 Tab-Stellen

Teil D — Bewerbungs-Lifecycle

Nr Funktion Issue Wiki Status
D1 Bewerbungs-Wizard (Anschreiben + Doku-Zuordnung + Status) Tab-Bewerbungen
D2 Status-Lifecycle (offen → beworben → interview → angenommen/abgelehnt) Tab-Bewerbungen
D3 Event-Timeline pro Bewerbung (jedes Status-Update als Event) Tab-Bewerbungen
D4 Follow-up / Nachfass mit Auto-Reminder Workflows
D5 Recruiter-Inbound-Workflow (Anfrage → optional ablehnen oder anlegen) MCP-Tools
D6 Bewerbung ↔ Stelle n:m-Verknuepfung (eine Stelle → mehrere Varianten) #472
D7 Bewerbungs-Bericht-Export (PDF/XLSX/ZIP) #313
D8 Bewerbungs-Print-Layout (HTML-Protokoll mit Timeline+Doku) #313
D9 bewerbung_event_datum_setzen (Status-Datum nachtraeglich korrigieren) #631 MCP-Tools
D10 Kontakte-System (Recruiter, Hiring Manager, ...) mit Kategorien #607
D11 Kontakte aus Bestand importieren (Bewerbungen + Mails durchsuchen) #563
D12 Phantom-Bewerbungen aus CV-Dateinamen verhindern #642 FAQ
D13 Mail-Doku-Verknuepfung (email_verknuepfen mit getrennten ID-Raeumen) #644
D14 Interview-Reflexion (eigene Notizen pro Interview-Termin)
D15 Nachfass-Trigger bei Status ohne Update >7 Tage (Adaptive Hint + Elwosa) #650 Tab-Bewerbungen
D17 nachfass_planen Dubletten-Check (MCP-Teil) #665
D18 nachfass_planen Frontend: Direkt-Abhaken-Button in "Offene Aktionen" #665 ⬜ (Backend done via REST-Endpoints in beta.85)
D19 Generisches Task/Todo-System: Schema v45 + 4 MCP-Tools (todo_*) + REST-API #666 🟨 (Backend ✅ beta.85, Frontend ⬜ beta.86)

Teil E — Dokumenten-Pipeline

Nr Funktion Issue Wiki Status
E1 Dokumenten-Upload + Auto-Klassifikation (CV/Anschreiben/Zeugnis/Mail/...) Tab-Dokumente
E2 Lokale-AI-Profil-Extraktion (Skills, Stationen aus CV/Zeugnis) Profil-aus-Dokumenten
E3 /dokumente_verarbeiten-Prompt (Routing: Profil/Mail/Anhang/Termin) #634 Profil-aus-Dokumenten
E4 Tiefenanalyse nach Basis-Extraktion (basis_analysiert weiterprozessieren) #640
E5 Bewerbungs-Anhang-Erkennung (bewerbungs_dokumente_erkennen) Tab-Dokumente
E6 Lebenslauf-/Anschreiben-Generierung + Export (DOCX/PDF)
E7 Mail-Import (.msg/.eml/IMAP) + Auto-Status-Erkennung
E8 Mail-Anhang-Auto-Extract zu Dokumenten + Verknuepfung
E9 Auto-Klassifikation eingehender Mails via Lokale AI Lokale-KI
E10 Doku-Integrity-Check (DB-Eintrag vs. Datei auf Disk + Auto-Fix) #441
E11 Dokumente verarbeiten — alle bewerbungsrelevanten Typen (Einladungen/Absagen/Termine) #643 Plan-Dokumente
E12 Auto-Tiefenanalyse-Step fuer basis_analysiert-Dokumente (max N/Lauf) #651
E13 Few-Shot fuer Recruiter-Anfrage-Klassifikator (Recall-Problem fixen) #649
E14 Doku-Typen erweitern + Per-Typ-Handler-System #655 Profil-aus-Dokumenten
E15 Dokument-Lifecycle Reparatur: basis_analysiertangewendet fuer Korrespondenz entkoppeln #658 Plan-Dokumente
E16 Lifecycle-Spalte aktiv/archiviert/veraltet + Auto-Veralten #657 Plan-Dokumente

Teil F — Lokale KI & Elwosa

Nr Funktion Issue Wiki Status
F1 LLM-Service-Routing (LOCAL/CLAUDE/MANUAL, TaskKind-Tabelle) #512 Lokale-KI
F2 Ollama-Integration mit Status-Caching + Auto-Detect #591 Lokale-KI
F3 Ollama-Modell-Selection mit models_detail (Name, Size, Family) #592 Lokale-KI
F4 Ollama Cold-Start-Fix (keep_alive 60min, Pre-Warmup) #638 Lokale-KI
F5 Ollama als permanente KI-Backbone fuer Hintergrund-Tasks #638 Lokale-KI
F6 Token-Klassen-Anzeige + Pre-Flight-Schaetzung pro Tool #632 🟨 (Stufe 1 ✅, Pre-Flight-Schaetzung ⬜)
F7 Ollama-Genauigkeits-Statistik (auto-aussortiert vs. spaeter reaktiviert/beworben) #638 Lokale-KI
F8 Few-Shot-Beispiele aus User-History fuer match_job_to_skills #638
F9 validate_job_quality TaskKind (Stelle vollstaendig genug?) #645 Stellen-Qualitaet 🟨 (beta.73, beta.72 noch nicht)
F10 Ollama aus PBP heraus starten (wenn gestoppt) #637
F11 Elwosa Live-Statusanzeige mit Persoenlichkeit #599 Elwosa
F12 Elwosa Tonfall-Modi (aus/sachlich/minimal/humorvoll) #612 Elwosa
F13 Elwosa Varianz-Pools (Same-Day-Anti-Repeat) #614 Elwosa
F14 Elwosa Wiki-Snippets pro Page-Wechsel #594 Elwosa
F15 Elwosa Ollama-Live-Generierung + Claude-Eskalation (Ebene 1/2) #669
F17 Elwosa KI-freies Safety-Net: Validierungs-Retry + Tageslebenszeichen-Garantie (rotierender Pool) #669
F16 Wiedergaenger-Erkenner: KI-freier DB-Check (Ebene 0) + Claude-Kontext in fit_analyse (Ebene 2). Firma+Domaene schon X-mal mit Grund Y verworfen #671 ✅ (Ebene 0+2; Ollama-Ebene 1 optional ⬜)
F15 Lern-System: Pattern-Analyse aus User-Aktivitaet (LLM, opt-in Telemetrie) #594 Lern-System

Teil G — Frontend & Dashboard

Nr Funktion Issue Wiki Status
G1 8-Tab-Layout (Dashboard / Profil / Stellen / Bewerbungen / Dokumente / Kalender / Statistiken / Einstellungen) Dashboard
G2 Dashboard mit Workspace-Card "naechster sinnvoller Schritt" Tab-Dashboard
G3 AdaptiveHintBanner pro Page (#594 Stufe 4) #594 Lern-System
G4 Split-View Festanstellung / Freelance Tab-Stellen
G5 Verwaltungsnummern (S-/B-/D-/K-Praefix, Klick = in Zwischenablage kopieren) Erste-Schritte
G6 Statistik-Charts + Bewerbungsbericht-Export Tab-Statistiken
G7 Gefahrenzone (DB-Reset, Komplett-Deinstallation) Tab-Einstellungen
G8 Live-Updates Frontend zeigt Claude-Aenderungen ohne Refresh #630
G9 Sidebar-Menue-Vorrang-Fix #625
G10 Ollama-Leistung-Card in Einstellungen #638 Lokale-KI
G11 Onboarding-Hints fuer ungenutzte Features (Suchprofile, Aufwand, Reflexion) — Backend: ✅, Frontend folgt #652 MCP-Tools 🟨

Teil H — MCP-Layer & Diagnose

Nr Funktion Issue Wiki Status
H1 FastMCP-Server-Setup mit 11 Tool-Modulen MCP-Tools
H2 152 MCP-Tools (volle UI-Parity) mehrere MCP-Tools
H3 23 Prompts (vorgefertigte Workflow-Starter) MCP-Tools
H4 pbp_capabilities (kuratierte Tool-Uebersicht) #514
H5 pbp_diagnose (Gesundheits-Check + Auto-Fix) mehrere
H6 pbp_mcp_diagnose (Tool-Call-Telemetrie fuer Timeout-Diagnose) #636 MCP-Tools
H7 pbp_grenze_melden (Edge-Case-Reporter) #514
H8 scraper_diagnose mit Reaktivierungs-Tool #432
H9 Anti-DB-Bypass-Pattern (Claude darf nicht direkt in SQLite) #514
H10 Slow-Call-WARNING ins Server-Log (>= 5s) #636
H11 Wall-Clock-Budget fuer Bulk-Tools (90s/180s) #646 FAQ
H12 pbp_capabilities Tool-Count-Sync (gesamt 152 vs. kuratiert 95 transparent) #647
H13 profil_bearbeiten: Umlaut-Normalisierung fuer aktion/bereich #659
H14 CLAUDE.md: hartes Verbot eigener Ablehnungsgruende + Fit-Verdict-Stil #663 #662

Teil I — Distribution & Installer

Nr Funktion Issue Wiki Status
I1 INSTALLIEREN.bat (Windows, Doppelklick-Install) Installation
I2 INSTALLIEREN.command (macOS) Installation
I3 installer/install.sh (Linux) Installation
I4 DEINSTALLIEREN.bat mit klarer Abgrenzung (Claude Desktop bleibt) Installation
I5 Komplett-Deinstallation aus der Gefahrenzone (UI-getrieben) Tab-Einstellungen
I6 Installer-Autostart (PBP nach Installation automatisch starten) #639
I7 Cross-Platform-Build-Pipeline (GitHub Actions)
I8 Code-Signing (Win + macOS)
I9 Auto-Updater

Teil J — Roadmap v1.8 (Plugin-Plattform & Integrationen)

Explizit User-Vorgabe: das soll als Plug-Ins kommen, nicht als Kern-Code.

Nr Funktion Issue Wiki Status
J1 Plugin-Plattform v1.7 (Sub-Add-Ins, Capability-Manifest, stabile Ingest-API) #504
J2 Thunderbird-Add-On "An PBP senden" #478
J3 Outlook-Office-Add-In "An PBP senden" #480
J4 Calendar-Sync (iCalendar-Export, optional CalDAV/Graph) #481
J5 Newsletter-Ingest (StepStone/JobLeads/freelance.de/LinkedIn/XING) #525
J6 Interview-Training-Arc (eigener PBP-Bereich) #452
J7 Community-Tagesimpulse (User koennen Sprueche beisteuern) #513

Reihenfolge-Logik

Warum Datenbasis (A) und MCP-Layer (H) zuerst, dann Domains (B-G)? Schema + MCP-Layer sind Querschnitts-Module. Jede neue Domain ist von ihnen abhaengig. Wenn das Schema sich aendert nachdem 5 Domains drauf bauen, ist es teurer als wenn 5 Domains an einem fertigen Schema dranhaengen.

Warum Jobsuche (B) vor Stellen-Lifecycle (C) vor Bewerbungen (D)? Pipeline-Reihenfolge. Erst kommt die Stelle ueber Scraping rein (B), dann wird sie bewertet/aussortiert (C), dann wird daraus eine Bewerbung (D). Wer B fixed muss nicht zwingend C/D anfassen.

Warum Lokale KI (F) als eigener Cluster, nicht in einzelne Tools verteilt? Weil das Ollama-Routing in services/llm_service.py zentral ist. Jeder Task-Typ (Doku-Klassifikation, Profil-Match, Stelle-Validierung, ...) nutzt dieselbe Routing-Tabelle. Aenderung dort wirkt ueberall.

Warum Elwosa in F und nicht in G (Frontend)? Elwosa ist konzeptuell Persoenlichkeit + Trigger-Engine, nicht UI. Die UI in der Sidebar ist nur das Frontend einer Backend-Logik die selber Lokale AI nutzen kann. G ist nur die Anzeige.

Warum Plugin-Plattform (J) erst nach allem anderen? Weil Plugins gegen eine stabile Ingest-API andocken. Erst muss die API stabil sein, dann darf sie nach aussen geoeffnet werden. Andersrum entsteht Wildwuchs.


Was nicht im Plan steht (bewusst aus Scope)

PBP ist kein:

  • Job-Search-Aggregator-Hosting — wir scrapen lokal, kein Backend-Cache, kein "PBP-Cloud-Service".
  • ATS-System — keine Recruiter-Tools fuer Firmen.
  • Karriere-Coaching-Service — die KI gibt Sparring, ist aber kein Coach-Ersatz.
  • CV-Builder-fuer-andere — kein Multi-User-Hosting, jede Installation ist persoenlich.
  • Direkt-Bewerbungs-Versender — PBP traegt Anschreiben + CV bei, der User schickt selbst (keine Auto-Send-Funktion).
  • Headhunter-Marktplatz — keine Verbindung Recruiter ↔ User-Profile.
  • Gehalts-Statistik-Datenbank — wir nutzen externe Daten (Stepstone-Gehaltsanalyse etc.), bauen keine eigene.

Akzeptanzkriterium pro Position

Eine Position gilt nur als ✅ wenn alle drei zutreffen:

  1. Code ist im Repo, lauffaehig.
  2. Tests sind gruen — die jeweils relevanten in tests/.
  3. Wiki-Eintrag existiert mit:
    • Kurzbeschreibung der Funktion
    • Wie nutzt man sie (Beispiel-Call oder UI-Screenshot)
    • Welche Parameter / Optionen gibt es
    • Bekannte Einschraenkungen
    • Verweis auf Issue + relevante Code-Pfade

Solange ein Punkt fehlt, bleibt die Position 🟨 oder ⬜. Diese Disziplin ist ab beta.74 verbindlich (siehe CLAUDE.md).


Was wird getrackt

  • Plan-Fortschritt: Status-Spalten oben werden mit jedem Schritt aktualisiert.
  • Wiki-Vollstaendigkeit: Stub-Verweise werden ergaenzt sobald die Position fertig ist.
  • Issue-Verlinkung: Jede Position verweist auf das relevante GitHub-Issue (wenn vorhanden).
  • Test-Anzahl: wird im CI gemessen (aktuell 1441 passed, 1 skipped).
  • MCP-Tool-Count: aktuell 152 Tools, 23 Prompts, pbp_capabilities ist die kuratierte Uebersicht.

Naechste Schritte

Priorisierung + Zeitschaetzung in Master-Plan-Optimierung.

Clone this wiki locally