-
-
Notifications
You must be signed in to change notification settings - Fork 1
Master Plan
Stand: 2026-06-10 (beta.102) · 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 → aktuelle v1.7.0-Beta-Reihe). 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):
- Plan-Datenbasis (A)
- Plan-Jobsuche (B)
- Plan-Stellen (C)
- Plan-Bewerbungen (D)
- Plan-Dokumente (E)
- Plan-Lokale-KI (F)
- Plan-Frontend (G)
- Plan-MCP-Layer (H)
- Plan-Distribution (I)
- Plan-Roadmap-v18 (J)
Risiken / Trade-offs / Annahmen: Master-Plan-Optimierung.
Verbindlich seit 2026-06-09 (User-Vorgabe): v1.7.0 verlaesst die Beta erst, wenn das fertige Produkt fuer komplett unerfahrene Anwender fehlerfrei laeuft — Menschen ohne PBP- und ohne KI-Vorwissen. Das ist schaerfer als „Tests gruen": es zielt auf die End-to-End-Erfahrung beim Erstkontakt.
Konkret muss zutreffen:
-
Lauffaehige, fehlerfreie Suite — die volle
pytest-Suite ist mit den vom Installer mitgelieferten Extras ([docs]/[scraper]) gruen, und der CI-Gate (K5) faengt Regressionen automatisch ab. -
Kein user-sichtbarer Fehler im Normalpfad — keine White-Screens, keine
„Inhalt konnte nicht geladen werden"-Toasts, keine
no such table-/Schema- Crashes in Tools, die ein Erstnutzer ueber Claude oder das Dashboard ausloest. - Kern-Workflows ohne Sackgasse — Ersterfassung → Jobsuche → Bewertung → Bewerbung → Dokumente → Nachfass, jeweils ohne Total-Timeout (B21) und mit verstaendlichen Fehlermeldungen statt Tracebacks.
-
Abgeschlossener User-Test —
--latesterst nach ausdruecklichem User-Wort (siehe CLAUDE.md).
Offene Beta-Blocker (Stand 2026-06-10, nach beta.101): die ⬜-Positionen in B (B13/B15/B16), F (F6/F15), G (G8/G11) und I (I8/I9) — plus der Abschlusstest des Users (Beta-Exit Punkt 4). Alle bekannten Bugs sind gefixt: #692/#691/#690/#686/#685/#684 (K1-K10), die Neulings-Audit-Befunde #694-#697 (K11-K15) und die User-Test-Funde #699/#700/#701-Teilfix (K16-K18) sind in beta.101 enthalten; #668 ist entschaerft (Live-Verifikation durch den User offen). #687/#688/#689/#698 sind Enhancements (C23/B24/F21/C24) und keine Beta-Blocker; #701-Vollausbau laeuft als A18 (beta.102-Kandidat). Cluster J ist v1.8 und kein Beta-Blocker.
Gezielter Stabilisierungs-Durchlauf gegen user-sichtbare Fehler, plus der bisher fehlende automatische Test-Gate.
| Nr | Funktion | Issue | Status |
|---|---|---|---|
| K1 | Prompt-Delegation FastMCP-3.x-robust: /tipps_und_tricks + /profil_sync luden „Inhalt konnte nicht geladen werden" (FastMCP 3.x kennt _prompt_manager nicht mehr, Exception wurde verschluckt). Statische Texte als modul-level Builder (build_*_prompt, Single Source), kein Zugriff mehr auf FastMCP-Interna |
#692 | ✅ |
| K2 |
kontakt_verknuepfen Meeting-Link: link_contact fragte Tabelle meetings statt application_meetings ab → no such table
|
#685 | ✅ |
| K3 |
kontakt_verknuepfen akzeptiert CON--Praefix: IdKind.CONTACT ergaenzt, damit parse_id/strip_prefix die Kontakt-ID entprefixen (Output emittierte CON-, Input lehnte es ab) |
#684 | ✅ |
| K4 |
stellenbeschreibung_nachladen kappte bei 2000 Zeichen: fetch_description_from_detail(max_chars=...), explizites Nachladen nutzt 20000 (Bulk-Scraper bleiben bei 2000) |
#690 | ✅ |
| K5 | CI-Test-Gate (.github/workflows/tests.yml): volle Suite bei push/PR mit [docs,dev,scraper]-Extras + Playwright-Chromium. Schliesst die Luecke, dass Regressionen (fehlende Extras, FastMCP-Major-Bump) bisher unbemerkt blieben |
— | ✅ |
| K6 |
fastmcp in pyproject.toml auf >=3.0,<4 begrenzt — ein erneuter Major-Bump kann nicht mehr lautlos Interna brechen |
#692 | ✅ |
| K7 | Issue-Hygiene: 14 im Code erledigte, aber offen gebliebene Issues geschlossen (beta.81–100) | — | ✅ |
| K8 |
stellen_auto_aussortieren (#691): (a) Platzhalter/leere LLM-Begruendung 'KURZBEGRUENDUNG' wird zentral in _clean_match_reason bereinigt; (b) Wall-Clock-Budget-Default 180→50s (unter dem ~60s-MCP-Client-Timeout) + die zwei ungeschuetzten DB-Reads abgesichert → schemakonformes status='teilweise' statt hartem outputSchema-Validierungsfehler |
#691 | ✅ |
| K9 | Jobsuche-Orchestrator (#668): Phase-1 (httpx-Quellen) sammelt Ergebnisse jetzt via as_completed statt in Submit-Reihenfolge (Fortschritt bewegt sich mit der schnellsten Quelle, statt bis zu 90-180s an der zuerst-submitteten zu haengen) + globales Phasen-Budget fuer haengende Quellen. Behebt "Jobsuche laeuft komplett in Timeout (0%)". Live-Verifikation durch User offen |
#668 | ✅ |
| K10 | Doku→Bewerbung-Matching (#686): analyse_plan_erstellen erkennt Firmen jetzt auch aus dem Dokument-INHALT (_company_match_key, Rechtsformen-Stopliste) und matcht gegen bestehende Bewerbungen → neues Feld bewerbungs_zuordnungen + Dubletten-Hinweis in der Empfehlung. Regressionstest test_v17_doku_bewerbung_match_686
|
#686 | ✅ |
| K11 | Onboarding-Sackgassen in gefuehrten Prompts: nicht-existentes anschreiben_generieren + falsche fit_analyse/lebenslauf_angepasst_exportieren-Signaturen im Workflow bewerbung_vorbereitung; Umlaut-Toolnamen (skill_hinzufügen, bewerbung_status_ändern, position_hinzufügen) in 4 Live-Prompts; workflow_starten normalisiert Umlaut-Namen + klarer Fehler statt status='gestartet' bei unbekanntem Workflow; Kein-Profil-Fall im Ersterfassungs-Prompt; willkommen-Quellen-Zahl; faq-Verweis auf Wiki statt unlesbarem docs/FAQ.md; tote Alt-Prompt-Bloecke entfernt |
#694 | ✅ (beta.101) |
| K12 | Stille Falsch-Erfolge: Existenz-Guards in stelle_bewerten (verhindert Phantom-Statistik) + bewerbung_status_aendern (inkl. APP--Praefix-Support + bool-Auswertung); profil_erstellen merged Bestandsfelder statt sie mit Leerwerten zu ueberschreiben (Datenverlust-Fix, empirisch belegt); jobsuche_starten-Guard ohne Suchkriterien (verhindert BA-Default-Keyword-Flut) |
#695 | ✅ (beta.101) |
| K13 | Neulings-Robustheit: ehrliche Leere-DB-Antworten der Dokument-Tools (0 Dokumente ≠ "alle analysiert"; kein_profil mit Handlungsanweisung); pbp_capabilities-Sync: kennlerngespraech_abschliessen korrekt beschrieben (Onboarding-Wizard, NICHT Interview-Nachgang), King-Features beta.78-100 ergaenzt (Tasks, Dokument-Lifecycle, stelle_reaktivieren, Wiedergaenger, Ablehnungsgruende-Editor, Minus-Keywords, onboarding_hints) |
#696 | ✅ (beta.101) |
| K14 | Installation fuer Neulinge: macOS-Doku ehrlich (Python-Voraussetzung + Gatekeeper-Hinweis in README/Release-Notes-Template/Wiki); Chromium-Install-Schritt in INSTALLIEREN.command (Paritaet zu install.sh); ServicePointManager-Typo im BAT-PowerShell-Fallback; Release-Notes-Block um Schritt 6/7 ergaenzt (Claude-Desktop-Neustart + Erstbefehl "Starte die Ersterfassung"); ZIP-Unterordner-Hinweis; Linux-Claude-Desktop-Korrektur |
#697 | ✅ (beta.101) |
| K15 | Wiki-Sync beta.92-101: User-Doku-Welle (Home, FAQ, Erste-Schritte, MCP-Tools, Workflows, Architektur, Jobportale, Tab-Seiten) + Plan-Begleitseiten (MCP-Layer, Jobsuche B21/B23-Kollision, Bewerbungen D20-D23, Dokumente #643-Dublette) + Zahlen-Normierung (177 Tools, Schema v46, 34 Quellen) | — | ✅ (beta.101) |
| K16 | Blacklist-Schutz fuer laufende Bewerbungen: blacklist_verwalten(typ='firma') prueft vor dem Eintragen auf Bewerbungen mit kritischem Status (interview/zweitgespraech/angebot/interview_abgeschlossen) → Warnung mit betroffenen Bewerbungen statt Eintrag; force=True uebersteuert. User-Test-Fund 10.06. (beinahe-Verlust einer Interview-Bewerbung) |
#699 | ✅ (beta.101) |
| K17 | Auto-Reconciler respektiert Termine: (a) kein Auto-Nachfass wenn fuer die Bewerbung ein zukuenftiger Termin (geplant/bestaetigt) existiert; (b) Dashboard trennt echte Termine (Anstehende Termine) von Follow-up-Erinnerungen (eigener Block) | #700 | ✅ (beta.101) |
| K18 | Zeitdarstellung Teilfix: relative Datums-Labels im Dashboard (heute/morgen/in X Tagen) rechnen auf lokalem Datum statt UTC (Kipp-Fehler um Mitternacht UTC); Vollausbau Timestamp-Standard siehe A18 | #701 | ✅ (beta.101) |
| K19 | Feinschliff-Welle aus der eigenen Dashboard-Tour (beta.101 gegen DB-Kopie, alle 8 Bereiche geklickt, 0 JS-Fehler): nackte React-0 (is_private-Integer), stale hints.json (v1.6.2-Banner), Follow-ups ohne Uhrzeit statt "02:00", Singular/Plural + n=1-Hinweis bei Gehaltskennzahl, Elwosa-Pick ueberspringt Linien mit leeren Platzhaltern, Wiki-Snippets-Zahlen, Hilfe-Text + MINUS-Keywords, KPI-Label "Faellige Nachfaesse", Quellen-Zahl auf 35 normiert (len(SOURCE_REGISTRY)). Nebenbei live verifiziert: #668 + #701-Teilfix |
#702 | ✅ (beta.102) |
Regressionstests: test_v167_quickfixes (#692), test_v17_kontakt_link_684_685
(#684/#685), test_v17_refetch_690 (#690), test_v17_auto_aussortieren_691 (#691),
test_v17_doku_bewerbung_match_686 (#686), test_v17_prompts_workflows_694 (#694),
test_v17_guards_695 + test_v17_profil_merge_695 (#695),
test_v17_doku_leere_db_696 + test_v17_capabilities_696 (#696),
test_v17_user_test_699_700 (#699/#700). Volle Suite gruen (Stand beta.101: ueber 1700 Tests).
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 → v46, 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 | — | — | ✅ |
| A16 | Skill-Datenqualitaet: Junk-Heuristik verschaerft (Satzfragmente raus) + skills_bereinigen-Tool fuer Altbestand + ehrliches Skill-Loeschen |
#681 | Tab-Profil | ✅ (beta.96) |
| A17 | Informelle Notizen voll editierbar: profil_bearbeiten(notizen, ...) kann jetzt lesen (strukturiert), ersetzen + loeschen pro Sektion — vorher nur anhang/aendern
|
#680 | Tab-Profil | ✅ (beta.97) |
| A18 | Einheitlicher Timestamp-Standard (Cross-Cutting, beta.102-Kandidat): alle DB-Timestamps UTC mit Offset (keine naiven/aware-Mischung in application_events/meetings/follow_ups), zentrales "Jetzt" im Backend, Frontend-Relativlabels auf Europe/Berlin, Serverzeit im Dashboard sichtbar. Teilfix (Dashboard-Labels) in K18/beta.101 | #701 | — | ⬜ |
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 | — | ✅ |
| B23 | Interne Jobsuche nach Zeitplan (taeglich/woechentlich/alle 3 Tage; nur Scraper-Quellen, Browser-Quellen bleiben manuell). Teil des Automatik-Schedulers | #678 | Tab-Einstellungen | ✅ (beta.94) |
| B24 | Snapshot-Nachhol-Trigger: Stellen ohne Volltext-Snapshot in der Tagesroutine nachziehen (Flag + Auto-Engine-Step; deterministischer HTTP-Refetch, Ollama optional) | #688 | — | ⬜ |
| 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 + Frontend-Tab |
#663 | — | ✅ (Backend beta.85, Frontend beta.90) |
| C21 |
stelle_reaktivieren MCP-Tool (Anti-DB-Bypass-Lueckenschluss) |
#664 | — | ✅ |
| C22 | Ablehnungsgruende loeschen (mit Pflicht-Neuzuordnung) + umbenennen (Cascade auf jobs, Merge) + ablehnungsgrund_loeschen-Tool. User-Test-Fix |
#663 | Tab-Einstellungen | ✅ (beta.92) |
| C17 | Outcome-Signal in fit_analyse (Warnung bei aussortierten Aehnlichen) |
#648 | Tab-Stellen | ✅ |
| C23 | Volltext-Snapshot beim Anlegen einer Stelle (unveraenderliches Feld beschreibung_snapshot + Quelle/Zeitstempel; schuetzt vor Offline-Gehen der URL; Schema-Anteil bei A1) |
#687 | — | ⬜ |
| C24 | Hochschulabschluss-Malus konfigurierbar: als Scoring-Dimension in scoring_konfigurieren (Default -2 rueckwaertskompatibel, ignorieren=True moeglich, wirkt bei scores_neu_berechnen). beta.102-Kandidat |
#698 | — | ⬜ |
| 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 beta.85, Frontend beta.90) |
| D19 | Generisches Task/Todo-System: Schema v45 + 4 MCP-Tools + REST-API + Frontend-Sektion | #666 | — | ✅ (Backend beta.85, Frontend beta.90) |
| D20 |
recherche_speichern Bugfix: Bewerbung-Recherche landete in applications.fit_analyse (Kollision + unsichtbar) — jetzt ins anzeigbare research_notes der verknuepften Stelle geroutet, Dedupe, klare Meldung ohne Stelle |
#672 | Tab-Bewerbungen | ✅ (beta.97) |
| D21 | Recherchen in Timeline/Details sichtbar machen (eigener Abschnitt, alle Kategorien) | #673 | Tab-Bewerbungen | ✅ (beta.98 — recherchen-Abschnitt in bewerbung_details + Detail-Dialog, auf-/zuklappbar pro Kategorie) |
| D22 | Ein-Schritt-Persistenz fuer Recherche-Tools + Kategorie-Routing (eigene Tabelle research_notes, Schema v46) |
#674 | MCP-Tools | ✅ (beta.98 — Tabelle research_notes + add/get-Helper; firmen_recherche/branchen_trends/skill_gap_analyse persistieren optional direkt) |
| D23 | Aufgaben mit „Erledigt bis"-Datum (Frontend-Datumsfeld) + prominente Dashboard-Warnung bei Ueberfaelligkeit (get_overdue_tasks → Workspace-Summary) |
#683 | Tab-Bewerbungen | ✅ (beta.100) |
| 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_analysiert → angewendet fuer Korrespondenz entkoppeln |
#658 | Plan-Dokumente | ✅ |
| E16 | Lifecycle-Spalte aktiv/archiviert/veraltet + Auto-Veralten |
#657 | Plan-Dokumente | ✅ |
| 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 ⬜) |
| F22 | Lern-System: Pattern-Analyse aus User-Aktivitaet (LLM, opt-in Telemetrie) — war faelschlich als zweites F15 nummeriert | #594 | Lern-System | ✅ |
| F21 | Transparenz + Steuerung der lokalen KI: sichtbar machen was Ollama tut und lernt (Lernprotokoll, Insight-Loeschen, Komplett-Reset) | #689 | — | ⬜ |
| F18 | Ollama-Lern-Automatik: Pattern-Analyse + Doku-Lernen laeuft periodisch (Intervall einstellbar) statt nur bei offenem Dashboard. Teil des Automatik-Schedulers | #677 | Tab-Einstellungen | ✅ (beta.94) |
| F19 | Elwosa nennt die echte Uhrzeit: {zeit}-Platzhalter (format_uhrzeit) statt fester Zeiten im Linientext |
#679 | Elwosa | ✅ (beta.95) |
| F20 | Ollama-Zeitkontext: aktuelles Datum vor jeden lokalen LLM-Prompt (_run_local), damit Zeitraeume/Aktualitaet gegen das echte Jahr gerechnet werden |
#679 | — | ✅ (beta.96) |
| 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 | 🟨 |
| G12 | App-weite ErrorBoundary (ein Tab-Crash blankt nie die ganze App, Sidebar bleibt) + White-Screen-Fix (fehlender SelectInput-Import im Datenschutz-Tab) + Telemetrie-MCP (telemetrie_status/_setzen) als Recovery. User-Test-Fix |
#676 | Tab-Einstellungen | ✅ (beta.93) |
| G13 | Outcome-Quoten (expired/rejection/withdrawal) + Segmentierung am PBP-Startdatum (gesamt/seit_pbp/vor_pbp) in get_statistics; Statistik-Kachel mit Umschalter. Aktiv-vs-Inbound-Schnitt bewusst offen (kein zuverlaessiger Marker) |
#682 | Tab-Statistiken | ✅ (beta.99) |
| Nr | Funktion | Issue | Wiki | Status |
|---|---|---|---|---|
| H1 | FastMCP-Server-Setup mit 11 Tool-Modulen | — | MCP-Tools | ✅ |
| H2 | 177 MCP-Tools (volle UI-Parity) | mehrere | MCP-Tools | ✅ |
| H3 | 24 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 | — | ✅ |
| 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 | — | — | ⬜ |
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 | — | ⬜ |
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.
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.
Eine Position gilt nur als ✅ wenn alle drei zutreffen:
- Code ist im Repo, lauffaehig.
-
Tests sind gruen — die jeweils relevanten in
tests/. -
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).
- 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 1679 passed, 1 skipped — Stand Beta-Stabilisierung 2026-06-09, +7 Regressionstests; automatischer Gate via K5).
-
MCP-Tool-Count: aktuell 177 Tools, 24 Prompts,
pbp_capabilitiesist die kuratierte Uebersicht. -
QA-Selbsttest (beta.90): voller Test-Lauf + Migration v43→v45 auf einer Real-DB-Kopie + 10/10 REST-Endpoints (FastAPI-TestClient) gruen. Wiki-Drift (beta.74→beta.90) korrigiert, beta.78-90-Features user-seitig dokumentiert. Details:
docs/QA-Audit-beta90.md. -
Beta-Stabilisierung (2026-06-09): FastMCP-3.x-Prompt-Bug (#692),
kontakt_verknuepfenMeeting+CON-Praefix (#685/#684), Nachlade-Cap (#690), auto_aussortieren-Schema+Begruendung (#691) gefixt — je mit Regressionstest; Jobsuche-Timeout (#668) entschaerft; CI-Test-Gate eingefuehrt (K5); fastmcp gepinnt (K6); 14 im Code erledigte Issues geschlossen (Hygiene). Volle Suite gruen (1679 passed). Siehe Teil K.
Priorisierung + Zeitschaetzung in Master-Plan-Optimierung.
🗺 Plan
- Master-Plan
- Master-Plan-Optimierung
- Plan-Datenbasis (A)
- Plan-Jobsuche (B)
- Plan-Stellen (C)
- Plan-Bewerbungen (D)
- Plan-Dokumente (E)
- Plan-Lokale-KI (F)
- Plan-Frontend (G)
- Plan-MCP-Layer (H)
- Plan-Distribution (I)
- Plan-Roadmap-v18 (J)
Einstieg
Tabs
Features
- Elwosa
- Lern-System
- Lokale KI & KI-Steuerung
- Profile-Cluster
- Suchkriterien & Gewichtungen
- Profil aus Dokumenten
- Workflows
- Jobportale
- Stellen-Qualitaet
Reference