# Changelog Alle wichtigen Änderungen am Bewerbungs-Assistent werden hier dokumentiert. Format orientiert sich an [Keep a Changelog](https://keepachangelog.com/de/1.1.0/), Sektionen: **Added** (neue Features), **Changed** (bestehendes geändert), **Fixed** (Bugs), **Deprecated** (bald weg), **Removed** (weg), **Known Issues** (bekannt kaputt in diesem Release). > 🛡 **DSGVO-Hinweis (2026-05-10):** Im Repo-History wurden 11 Issues > mit personenbezogenen Daten Dritter (Recruiter-Namen, Mail-Adressen, > konkrete Bewerbungs-Listen) komplett geloescht. Issue-Nummern > #313, #315, #362, #523, #529, #531, #532, #538, #566, #587, #602 > existieren nicht mehr — Verweise darauf in dieser CHANGELOG fuehren > zu 404. Ueber 100 weitere Issues wurden anonymisiert (Firmen → ``, > Emails → ``). Praeventiv-Werkzeug: > `scripts/scrub_pii.py`. Pflicht-Workflow in CLAUDE.md dokumentiert. > 🛡 **DSGVO-Nachtrag (2026-10-24):** Zwei Issues nannten reale Firmen aus dem > Bewerbungsbestand und sind geloescht: **#1158** (neu als #1274, erledigt) und > **#947** (neu als #1275, offen fuer die Bilder der Anleitung und die Probe mit > einem Menschen). Die Neufassungen tragen Text und Kommentare unveraendert, nur > die Firmennamen sind durch `` ersetzt. Verweise auf #947 und #1158 in > dieser CHANGELOG fuehren zu 404. Ausloeser: `issue_text_pruefen` erkannte einen > der Namen in Umschrift nicht (#1277). Ebenfalls geloescht: **#1276** (ein > Titel mit einem Namensteil, neu als #1277). > > 🛡 **DSGVO-Nachtrag (2026-08-19):** Ein maschineller Sweep ueber alle > 781 Issue-Bodies, Kommentare und Release-Notes fand in **zehn > Alt-Issues** noch reale Firmennamen. Diese sind geloescht: **#88, > #434, #471, #474, #481, #530, #540, #568, #658, #709** — Verweise > darauf fuehren zu 404. Neun davon waren geschlossen und historisch; > das offene **#481** (Kalender-Export) wurde anonymisiert als **#928** > neu angelegt, der ics-Teil war ohnehin seit v1.8.0-beta.3 geliefert. > Der Sweep ist seither sauber (772 Artefakte, null Treffer) und > gehoert als `scripts/gh_pii_sweep.py` in jede Session-Abschlussrunde. > > **Update 2026-07-23:** Die Issues **#763** und **#766** enthielten reale > Firmennamen aus der Bewerbungshistorie (Stellen-Tabelle) und wurden > komplett geloescht — Verweise darauf in den v1.7.9-/v1.8.0-beta.8- > Eintraegen fuehren zu 404. Die Inhalte sind im Master-Plan (B27/C28) > und in den Eintraegen selbst dokumentiert. Seitdem gilt DoD-Punkt 9: > Scrub-Pflicht vor JEDEM GitHub-Text, Loeschen statt Editieren. ## [1.8.5] - 2026-11-10 — Einladung richtig beantwortet, Sicherung mit Leseprobe, Zurückschalten fragt nach Meldest du Claude eine Einladung, fragt es nicht mehr nach Eindrücken aus einem Gespräch, das noch nicht war. Eine Sicherung gilt erst als erstellt, wenn PBP sie geöffnet und geprüft hat, ein gescheitertes Zurückspielen wiederholt sich nicht mehr, und der Komplett-Export (ZIP) enthält jetzt deine Dokumente. Claude schaltet PBP nur nach deiner Bestätigung auf eine andere Version. Eine Version, die sich bei dir einmal nicht starten ließ, kannst du in den Einstellungen erneut versuchen – PBP gibt dem Update nicht mehr allein die Schuld. ### Das Wichtigste für dich **Was du tun musst** - Nichts. Hast du den **Komplett-Export (ZIP)** bisher als Sicherung deiner Dokumente genutzt: er enthielt deine Dokumente nicht (sie liegen je Profil in Unterordnern). Lade ihn einmal neu herunter. **Neu und behoben (kurz)** - Status „Interview“ über Claude: der nächste Schritt hängt vom Termin ab (Termin eintragen, vorbereiten oder Gesprächsnotizen). - Sicherung: „erstellt“ erst nach einer Leseprobe der Kopie; ein Zurückspielen, das halb scheitert, wiederholt sich nicht und meldet seinen Ausgang im Dashboard. - Komplett-Export (ZIP) mit allen Dokumenten und einer stimmigen Anleitung. - Claude schaltet die Version nur nach deiner Bestätigung zurück. - Gescheiterte Version: neutraler Text und „Erneut versuchen“ (mit Rückfrage) in den Einstellungen und im Chat. ### Fixed - **Status „Interview“: falscher nächster Schritt** (#1342): Meldete jemand eine Einladung und Claude setzte den Status „Interview“, antwortete `bewerbung_status_aendern` mit „Du hattest ein Interview! Dokumentiere deine Eindrücke …“ — obwohl der Termin erst kommt. Die zeitbewusste Auswahl aus 1.7.146 (#1153) wirkte nur in `bewerbung_details`. Jetzt gilt sie auch in der Antwort auf den Statuswechsel (eine Funktion für beide Wege, `bewerbung_stand.aktionen_zum_status`): Liegt der Termin vor uns, geht es um die Vorbereitung; gibt es keinen, um das Eintragen des Termins; erst nach dem Termin kommen die Gesprächsnotizen. Lassen sich die Termine nicht lesen, sagt die Antwort das, statt zu raten. - **Zurückspielen einer Sicherung wiederholte sich** (#1350, Punkt 1): Scheiterte beim Einspielen der zweite Teil (die Dokumente), blieb die Vormerkung stehen, und bei jedem weiteren Start wurde die Datenbank erneut aus der Sicherung überschrieben — alles, was dazwischen eingetragen wurde, war weg. Jetzt wird die Datenbank über eine Nebendatei getauscht und die Vormerkung gelöscht, sobald sie getauscht ist; die Dokumente kommen über einen Nebenordner und ersetzen die bisherigen erst, wenn das Entpacken gelungen ist. Der Ausgang (ganz, teilweise, gescheitert) steht in der Sicherungs-Karte unter Einstellungen, bis du ihn mit „Verstanden“ quittierst. - **Komplett-Export ohne Dokumente** (#1350, Punkt 2): Die Route packte nur Dateien der obersten Ebene, die Dokumente liegen aber in `dokumente//`. Jetzt enthält das Paket alle Dokumente samt Unterordnern; die beigelegte Anleitung nennt die echten Installer und Datenordner. Gesperrte Dateien werden in der Anleitung genannt, das Paket wird vor dem Angebot geöffnet und gezählt. - **„Sicherung erstellt“ ohne Leseprobe** (#1350, Punkt 3): Die Kopie wird nach dem Schreiben geöffnet (Integritätsprüfung, Tabellen) und das Dokumenten-ZIP auf Prüfsummen und Dateizahl geprüft. Eine unlesbare Kopie wird verworfen und als Fehler gemeldet; ein unvollständiges ZIP steht als „nur Datenbank gesichert“ mit Hinweis da. - **`update_zurueckschalten` ohne Rückfrage** (#1355): Als einziges der Update-Werkzeuge hatte es kein `bestaetigt`. Jetzt antwortet es ohne `bestaetigt=True` nur mit der Auskunft und ändert nichts, wie `update_jetzt_installieren`. Der Knopf im Dashboard bleibt, wie er ist (der Mensch klickt selbst). - **Gescheiterte Fassung: ehrlicher Text, „Erneut versuchen“ geht wirklich** (#1358, Teil von #1352): Scheitert der erste Start einer neuen Fassung aus einem Grund in den Daten (gesperrte oder beschädigte Datenbank, volle Platte), steht sie in der Liste `gescheitert`, und PBP sagte, sie werde „nicht noch einmal automatisch installiert“ – als läge es am Update. Der Knopf „Erneut versuchen“ lief ins Leere, denn die Installation lehnte jede Fassung aus dieser Liste ab. Jetzt nennt der Text beide mögliche Ursachen und den nächsten Schritt. Eine ausdrückliche Installation (Klick nach Rückfrage, oder `update_jetzt_installieren` mit `bestaetigt=True`, dessen Rückfrage den Grund nennt) nimmt die Fassung aus der Liste; die Automatik tut das nie. Die Übersicht (`GET /api/auto-update`, `update_status`) nennt die Liste (`gescheitert`), die neue Version trägt den Merker `gescheitert`. Der Startbaustein (`src/bewerbungs_assistent_boot/`) bleibt unverändert (`FORMAT = 1`, ein Test hält seine Prüfsumme). ### Changed - Gegenprobe: je Fix wurde der Schutz einmal ausgebaut, die neuen Tests wurden rot (Interview-Antwort: 5 von 7, Vormerkung und Leseprobe: 2 bzw. 1, Bestätigung beim Zurückschalten: 1, Freigabe der gescheiterten Fassung: 4). - Offen aus den Review-Funden und nicht in dieser Fassung: der Rest von #1352 (Fehlerklassen im Startbaustein, nächste Linie), #1350 Punkt 4 (geführter Umzug auf einen neuen Rechner) und Punkt 5 (Gegenprobe-Katalog `sicherung`), #1355 Punkte 1 bis 4 (Zweck-Sätze, unsichtbare Werkzeuge in Hilfe und Wiki, Wächter, Abgrenzung zweier Werkzeug-Paare). Dach-Issue: #1332. *Schema v52 (unverändert), 283 MCP-Werkzeuge, 10379 Tests.* ## 📦 Wie installiere oder aktualisiere ich PBP? **Unter Windows** brauchst du kein Git, kein Python, kein Vorwissen — nur einen ZIP-Download und einen Doppelklick. **Unter macOS** muss vorher einmalig Python 3.11+ installiert sein (siehe unten), **unter Linux** Git und Python. Voraussetzung ueberall: [Claude Desktop](https://claude.ai/download) ist installiert (Linux: alternativ Claude Code CLI). ### Windows (empfohlen, bequemster Weg) 1. **ZIP herunterladen:** [PBP-1.8.5.zip](https://github.com/MadGapun/PBP/archive/refs/tags/v1.8.5.zip) 2. **Entpacken:** Rechtsklick auf die ZIP → *„Alle extrahieren..."* → Zielordner waehlen (z.B. `C:\PBP`). Darin liegt ein Unterordner `PBP-...` — dort hinein wechseln. 3. **Installieren:** Doppelklick auf **`INSTALLIEREN.bat`** 4. Das Setup laedt Python, alle Pakete und Chromium herunter (~3–5 Minuten) und konfiguriert Claude Desktop. 5. Auf dem Desktop liegt jetzt eine Verknuepfung **„PBP Bewerbungs-Portal"** — Doppelklick startet das Dashboard. 6. **Claude Desktop oeffnen** (lief es schon: komplett beenden — Rechtsklick aufs Claude-Symbol unten rechts in der Taskleiste → *Beenden* — und neu starten) und tippen: **„Starte die Ersterfassung"** 7. Taucht PBP nicht auf: Claude Desktop nochmal komplett beenden und neu starten — siehe [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ). ### macOS 1. **Einmalig vorab: Python 3.11+** — am einfachsten der [Installer von python.org](https://www.python.org/downloads/) (Doppelklick), alternativ `brew install python@3.12` 2. **ZIP herunterladen** (siehe Windows-Link) und **entpacken** (Doppelklick; im ZIP liegt ein Unterordner `PBP-...`) 3. **Doppelklick auf `INSTALLIEREN.command`** 4. Falls macOS warnt („kann nicht geoeffnet werden"): Rechtsklick auf die Datei → *„Oeffnen"* → nochmal *„Oeffnen"* ### Linux ```bash git clone --branch v1.8.5 --depth 1 https://github.com/MadGapun/PBP.git cd PBP bash installer/install.sh ``` `v1.8.5` ist die Version DIESES Releases. Ohne `--branch` klont man `main` — den jeweils neusten Entwicklungsstand, nicht unbedingt die stabile Version (#1150). ### Update von einer aelteren Version **Einfach drueberinstallieren** — deine Daten bleiben erhalten: - Windows: `%LOCALAPPDATA%\BewerbungsAssistent\data\pbp.db` - macOS/Linux: `~/.bewerbungs-assistent/pbp.db` Schema-Upgrade laeuft automatisch beim ersten Start, ein Backup wird vorher erstellt (Ordner `data\backups\`). ### Detaillierte Anleitung & Troubleshooting 📖 [Wiki → Installation](https://github.com/MadGapun/PBP/wiki/Installation) · [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ) --- ## [1.8.4] - 2026-11-10 — Standardgründe zurückholen, Wiedergänger behalten ihren Grund, Stellenart-Filter vollständig Alle Standard-Ablehnungsgründe lassen sich mit einem Knopf zurückholen, mit Vorschau vor dem Ändern. Stellen, die die Wiedergänger-Prüfung aussortiert, tragen wieder ihren fachlichen Grund statt „Sonstiges“. Der Filter „Stellenart“ auf der Bewerbungsseite kennt alle Anstellungsformen. ### Das Wichtigste für dich **Was du tun musst** - Nichts. Stellen, die die Wiedergänger-Prüfung bis 1.8.3 mit „Sonstiges“ aussortiert hat, bekommen ihren Grund beim ersten Start von selbst zurück. **Neu und behoben (kurz)** - Knopf „Standardgründe wiederherstellen“ unter Einstellungen › Ablehnungsgründe. - Aussortieren über die Wiedergänger-Prüfung speichert den fachlichen Grund. - Filter „Stellenart“ auf der Bewerbungsseite mit allen Formen und „Form unbekannt“. ### Added - **Standardgründe wiederherstellen** (#1323): Unter Einstellungen › Ablehnungsgründe holt **„Standardgründe wiederherstellen“** alle Standardgründe zurück: fehlende werden angelegt, abgeschaltete eingeschaltet. Zuerst zeigt PBP, was sich ändert; geschrieben wird erst nach „Wiederherstellen“. Eigene Gründe bleiben unverändert, und ein Grund, der schon in anderer Schreibweise da ist, kommt nicht doppelt. Claude kann dasselbe mit `ablehnungsgruende_wiederherstellen` (Vorschau, dann `bestaetigung=True`). ### Fixed - **Wiedergänger-Aussortierung verlor ihren Grund** (#1321): Sortierte `stelle_wiedergaenger_pruefen` mit `auto_aussortieren=True` eine Stelle aus, stand dort „Sonstiges“ statt des Grundes der früheren Stellen — schon beim Speichern, nicht erst beim Neustart. Statistik, Lerneffekt und spätere Wiedergänger-Muster sahen damit den falschen Grund. Jetzt wird der fachliche Grund gespeichert, die Notiz nennt die Wiedergänger-Prüfung, und bestehende Einträge bekommen ihren Grund beim Start zurück. - **Filter „Stellenart“ auf der Bewerbungsseite** (#1326): Er kannte nur Festanstellung und Freelance. „Freelance“ zeigte alles außer Festanstellung (auch Zeitarbeit, Praktikum, Werkstudent, Ausbildung), „Festanstellung“ zusätzlich alle Bewerbungen ohne Angabe. Jetzt stehen alle Formen zur Wahl, dazu „Form unbekannt“ — genau die Bewerbungen, deren Karte grau ist. ### Changed - `services/ablehnungsgruende.py`: `standardgruende_wiederherstellen(db, bestaetigt)` speist Dashboard (`POST /api/dismiss-reasons/standard-wiederherstellen`), Werkzeug und Vorschau; die Normalisierung kennt die Vorsilbe `wiedergaenger:`. - Neues Folge-Issue #1330: ein über Claude umbenannter Standardgrund kommt beim Start unter altem Namen zurück. *Schema v52 (unverändert), 283 MCP-Werkzeuge, 10342 Tests.* ## 📦 Wie installiere oder aktualisiere ich PBP? **Unter Windows** brauchst du kein Git, kein Python, kein Vorwissen — nur einen ZIP-Download und einen Doppelklick. **Unter macOS** muss vorher einmalig Python 3.11+ installiert sein (siehe unten), **unter Linux** Git und Python. Voraussetzung ueberall: [Claude Desktop](https://claude.ai/download) ist installiert (Linux: alternativ Claude Code CLI). ### Windows (empfohlen, bequemster Weg) 1. **ZIP herunterladen:** [PBP-1.8.4.zip](https://github.com/MadGapun/PBP/archive/refs/tags/v1.8.4.zip) 2. **Entpacken:** Rechtsklick auf die ZIP → *„Alle extrahieren..."* → Zielordner waehlen (z.B. `C:\PBP`). Darin liegt ein Unterordner `PBP-...` — dort hinein wechseln. 3. **Installieren:** Doppelklick auf **`INSTALLIEREN.bat`** 4. Das Setup laedt Python, alle Pakete und Chromium herunter (~3–5 Minuten) und konfiguriert Claude Desktop. 5. Auf dem Desktop liegt jetzt eine Verknuepfung **„PBP Bewerbungs-Portal"** — Doppelklick startet das Dashboard. 6. **Claude Desktop oeffnen** (lief es schon: komplett beenden — Rechtsklick aufs Claude-Symbol unten rechts in der Taskleiste → *Beenden* — und neu starten) und tippen: **„Starte die Ersterfassung"** 7. Taucht PBP nicht auf: Claude Desktop nochmal komplett beenden und neu starten — siehe [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ). ### macOS 1. **Einmalig vorab: Python 3.11+** — am einfachsten der [Installer von python.org](https://www.python.org/downloads/) (Doppelklick), alternativ `brew install python@3.12` 2. **ZIP herunterladen** (siehe Windows-Link) und **entpacken** (Doppelklick; im ZIP liegt ein Unterordner `PBP-...`) 3. **Doppelklick auf `INSTALLIEREN.command`** 4. Falls macOS warnt („kann nicht geoeffnet werden"): Rechtsklick auf die Datei → *„Oeffnen"* → nochmal *„Oeffnen"* ### Linux ```bash git clone --branch v1.8.4 --depth 1 https://github.com/MadGapun/PBP.git cd PBP bash installer/install.sh ``` `v1.8.4` ist die Version DIESES Releases. Ohne `--branch` klont man `main` — den jeweils neusten Entwicklungsstand, nicht unbedingt die stabile Version (#1150). ### Update von einer aelteren Version **Einfach drueberinstallieren** — deine Daten bleiben erhalten: - Windows: `%LOCALAPPDATA%\BewerbungsAssistent\data\pbp.db` - macOS/Linux: `~/.bewerbungs-assistent/pbp.db` Schema-Upgrade laeuft automatisch beim ersten Start, ein Backup wird vorher erstellt (Ordner `data\backups\`). ### Detaillierte Anleitung & Troubleshooting 📖 [Wiki → Installation](https://github.com/MadGapun/PBP/wiki/Installation) · [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ) --- ## [1.8.3] - 2026-11-09 — Notizen an Stellen, eine Farbe je Anstellungsform, Ablehnungsgründe abschaltbar Zu jeder Stelle lassen sich eigene Notizen festhalten, getrennt vom Anzeigentext; sie gehen in die Bewerbung mit. Jede Anstellungsform hat überall dieselbe Farbe, und jeder Standard-Ablehnungsgrund lässt sich abschalten. Beim Start öffnen sich keine schwarzen Fenster mehr, freelancermap liefert wieder, und Pflichtbegriffe zählen nur noch als ganze Phrase. ### Das Wichtigste für dich **Was du tun musst** - **Einmal die Punkte neu berechnen lassen:** sag Claude „Berechne die Punkte neu“. Pflichtbegriffe aus mehreren Wörtern zählen jetzt nur noch zusammenhängend (#1287); bei Stellen, die bisher Scheintreffer hatten, sinken die Punkte. Bis dahin meldet die Fit-Analyse dort eine Abweichung. - **Einmal die Ablehnungsgründe ansehen** (Einstellungen › Ablehnungsgründe). Hast du früher einen Standardgrund gelöscht (etwa „Kein Hochschulabschluss“) und sind noch Stellen damit aussortiert, steht er nach dem Update abgeschaltet in der Liste. Standardgründe, die es bei dir nie gab und die nie benutzt wurden, stehen eingeschaltet da — schalte ab, was für dich nie ein Grund ist. **Neu und behoben (kurz)** - Eigene Notizen an jeder Stelle, von dir oder von Claude, getrennt vom Anzeigentext. - Jede Anstellungsform hat überall dieselbe Farbe, mit Namen auf der Karte. - Auch Standard-Ablehnungsgründe lassen sich abschalten; kein Grund entsteht mehr still neu. - Keine aufpoppenden Konsolenfenster mehr, wenn PBP Ollama startet. - freelancermap liefert wieder, schnell und mit Volltextsuche. - Pflichttreffer nur noch als ganze Phrase; „Projektleiterin“ trifft „Projektleiter“. - Lebenslauf-Bewertung und Vorschläge rechnen mit deinem heutigen Können, nicht mit der früheren Spitze. ### Added - **Notizen an Stellen** (#1316): Zu jeder Stelle lassen sich eigene Notizen festhalten, auch bevor du dich bewirbst — im Stellen-Dialog unter „Deine Notizen zur Stelle“ oder indem du Claude bittest, etwas an der Stelle zu notieren (`stelle_bearbeiten(notiz=...)`). Jede Notiz zeigt, wann sie entstand und ob sie von dir oder von Claude stammt. Notizen sind kein Teil der Anzeige: Sie zählen nie in die Punkte, das Nachladen der Beschreibung lässt sie stehen, und legst du eine Bewerbung aus der Stelle an, stehen sie in deren Verlauf. Alte Notizen hinter einer Zeile „---“ in der Beschreibung bietet PBP an, in die Notizen zu verschieben — nur auf deinen Klick und mit Vorschau. Die Fit-Analyse liefert die Notizen in einem eigenen Feld. - **Standard-Ablehnungsgründe abschaltbar** (#1297): Unter Einstellungen › Ablehnungsgründe lässt sich jeder Standardgrund abschalten. Ein abgeschalteter Grund steht in keiner Auswahl mehr: nicht im Aussortieren-Dialog, nicht für Claude, nicht für die Wiedergänger-Automatik, nicht für eigene Regeln, und er macht keine Stelle mehr zum Wiedergänger, weder in der Fit-Analyse noch in der Stellenliste. Bisher so aussortierte Stellen bleiben, wie sie sind; PBP nennt beim Abschalten, wie viele es sind. Ein „gelöschter“ Standardgrund bleibt abgeschaltet, auch einer, der vor 1.8.3 gelöscht wurde. „Sonstiges“ bleibt immer an. ### Fixed - **Konsolenfenster beim Start** (#1317): Startete PBP Ollama, öffneten dessen Hilfsprogramme (Grafikkarten-Erkennung, Modell-Laden) je ein schwarzes Fenster, das gleich wieder zuging. PBP startet Ollama jetzt mit einer versteckten Konsole, die die Hilfsprogramme erben. - **Pflichttreffer nur noch als ganze Phrase** (#1287): Die Fit-Analyse meldete mehrteilige Pflichtbegriffe wie „Data Office“ als Treffer, wenn nur die Einzelwörter irgendwo in der Anzeige standen; öffnete ein anderer Begriff die Stelle, brachten solche Scheintreffer sogar Punkte. Jetzt zählen Liste, Punkte und das MUSS-Tor dieselben Treffer. Gebeugte und gegenderte Formen zählen mit („Projektleiterin“, „Ingenieure“ für „Projektleiter“, „Ingenieur“). Damit stimmt der beim Anlegen gespeicherte Wert wieder mit der Fit-Analyse überein. - **freelancermap liefert wieder** (#1302): Die interne Suche brach nach 90 Sekunden ab und verwarf alles Gefundene, weil PBP für jedes Projekt einzeln die Detailseite abrief. PBP liest jetzt die Ergebnisliste direkt von der Suchseite — drei Suchbegriffe brauchen rund 4 Sekunden statt über 30 — und nutzt die Volltextsuche. Fällt eine Quelle trotzdem aus, nennt die Quellen-Diagnose den Grund in Worten, und die Quelle steht im Auftrag für die Suche im Browser, bis sie wieder liefert. Ein eigenes Suchprofil für freelancermap gilt jetzt auch für die interne Suche. Projekte von dort sind immer Freelance. - **Eine Farbe je Anstellungsform** (#1301): Festanstellung blau, Freelance grün, Zeitarbeit violett, Praktikum orange, Werkstudent gelb, Ausbildung braun, grau heißt „unbekannt“ — auf der Stellenkarte, in den Stellendetails, auf der Bewerbungskarte und in der Stellenliste für Claude. Bisher war Freelance je nach Ansicht grün, violett oder smaragd, und Festanstellungen waren auf der Karte gar nicht markiert. Jede Karte nennt die Form auch beim Namen. In den Details einer Bewerbung lassen sich alle Formen wählen, ohne Angabe steht „Nicht angegeben“ statt still „Festanstellung“. - **Ablehnungsgründe entstanden still neu** (#1297): Der erste Gebrauch eines fehlenden Grundes legte ihn an, und ein Freitext wie „Zertifikats-Nachweis fehlt“ wurde zu „Kein Hochschulabschluss“. Beides passiert nicht mehr. Nennt Claude einen abgeschalteten oder unbekannten Grund, wird nichts aussortiert, und Claude bekommt die Liste der eingeschalteten Gründe (bisher wurde er still zu „Sonstiges“). - **Skill-Stand überall** (#1264): Lebenslauf-Bewertung („Experte“ heißt heute Stufe 4 oder 5), angepasster Lebenslauf und Begriffs-Vorschläge rechneten noch mit der früheren Spitze eines Skills; ein ruhender Skill galt als Expertenwissen. Jetzt zählt der heutige Stand, und die Zeiträume eines Skills nennen ihn mit. - **Erstauswahl der Quellen** (#1280): Nach „Passt so“ stand die Karte bis zur Antwort des Servers ohne Reaktion da. Sie verschwindet jetzt beim Klick. ### Changed - Neues Modul `services/stellen_notizen.py`, neue Tabelle `job_notes` (additiv, Löschbereich „stellen“). `services/ablehnungsgruende.py`: `waehlbare_gruende(db)` ist die eine Liste der zulässigen Gründe. `services/profile_service.py`: `stufe_heute()`. - Die Suchlauf-Zeitgrenzen gelten jetzt für alle Quellen, die im Browser laufen (freelancermap und Indeed 120 s statt 90 s). - Browser-Tests warten auf Zustände statt einmal zu zählen (#1271). *Schema v52 (unverändert, neue Tabelle `job_notes` als Safety-Net), 282 MCP-Werkzeuge, 10319 Tests.* ## 📦 Wie installiere oder aktualisiere ich PBP? **Unter Windows** brauchst du kein Git, kein Python, kein Vorwissen — nur einen ZIP-Download und einen Doppelklick. **Unter macOS** muss vorher einmalig Python 3.11+ installiert sein (siehe unten), **unter Linux** Git und Python. Voraussetzung ueberall: [Claude Desktop](https://claude.ai/download) ist installiert (Linux: alternativ Claude Code CLI). ### Windows (empfohlen, bequemster Weg) 1. **ZIP herunterladen:** [PBP-1.8.3.zip](https://github.com/MadGapun/PBP/archive/refs/tags/v1.8.3.zip) 2. **Entpacken:** Rechtsklick auf die ZIP → *„Alle extrahieren..."* → Zielordner waehlen (z.B. `C:\PBP`). Darin liegt ein Unterordner `PBP-...` — dort hinein wechseln. 3. **Installieren:** Doppelklick auf **`INSTALLIEREN.bat`** 4. Das Setup laedt Python, alle Pakete und Chromium herunter (~3–5 Minuten) und konfiguriert Claude Desktop. 5. Auf dem Desktop liegt jetzt eine Verknuepfung **„PBP Bewerbungs-Portal"** — Doppelklick startet das Dashboard. 6. **Claude Desktop oeffnen** (lief es schon: komplett beenden — Rechtsklick aufs Claude-Symbol unten rechts in der Taskleiste → *Beenden* — und neu starten) und tippen: **„Starte die Ersterfassung"** 7. Taucht PBP nicht auf: Claude Desktop nochmal komplett beenden und neu starten — siehe [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ). ### macOS 1. **Einmalig vorab: Python 3.11+** — am einfachsten der [Installer von python.org](https://www.python.org/downloads/) (Doppelklick), alternativ `brew install python@3.12` 2. **ZIP herunterladen** (siehe Windows-Link) und **entpacken** (Doppelklick; im ZIP liegt ein Unterordner `PBP-...`) 3. **Doppelklick auf `INSTALLIEREN.command`** 4. Falls macOS warnt („kann nicht geoeffnet werden"): Rechtsklick auf die Datei → *„Oeffnen"* → nochmal *„Oeffnen"* ### Linux ```bash git clone --branch v1.8.3 --depth 1 https://github.com/MadGapun/PBP.git cd PBP bash installer/install.sh ``` `v1.8.3` ist die Version DIESES Releases. Ohne `--branch` klont man `main` — den jeweils neusten Entwicklungsstand, nicht unbedingt die stabile Version (#1150). ### Update von einer aelteren Version **Einfach drueberinstallieren** — deine Daten bleiben erhalten: - Windows: `%LOCALAPPDATA%\BewerbungsAssistent\data\pbp.db` - macOS/Linux: `~/.bewerbungs-assistent/pbp.db` Schema-Upgrade laeuft automatisch beim ersten Start, ein Backup wird vorher erstellt (Ordner `data\backups\`). ### Detaillierte Anleitung & Troubleshooting 📖 [Wiki → Installation](https://github.com/MadGapun/PBP/wiki/Installation) · [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ) --- ## [1.8.2] - 2026-11-07 — Anstellungsart und Entfernung stimmen, eigene Filter und Sprache der Anzeige Stellen aus dem Browser kommen mit der richtigen Anstellungsart und Remote-Angabe an, und beides lässt sich nachträglich ändern. Ortsangaben wie „Hamburg u.a.“ oder „Deutschland (remote)“ ergeben keine falschen Entfernungen mehr. Eigene Filter lassen sich speichern, als Ansicht oder als Regel; rein englische Anzeigen lassen sich ausblenden oder aussortieren. ### Das Wichtigste für dich **Was du tun musst** - **Nichts Besonderes.** Wer das Auto-Update eingeschaltet hat, bekommt 1.8.2 wie jedes Update. Stellen, bei denen Remote als „True“ gespeichert war, werden beim ersten Start von selbst bereinigt und neu bewertet. **Neu und behoben (kurz)** - Anstellungsart und Remote kommen bei der Übernahme aus dem Browser richtig an und lassen sich danach von Hand ändern. - Falsche Entfernungen bei Zusätzen, Ländern und mehreren Orten sind behoben. - Eigene Filter als Ansicht oder Regel; Sprache der Anzeige als Filter und als Regel. - Die Automatik sortiert keine Stellen mehr als „falsches Fachgebiet“ aus, die deine Pflichtbegriffe tragen. - Die Gewichte ganzer Kategorien (MUSS, PLUS, MINUS …) lassen sich auch über Claude setzen. - Die Sicherung beim Deinstallieren gelingt auch bei englischem Datumsformat. ### Added - **Eigene Filter, benannt und gespeichert** (#1307): mit Claude (`stellen_filter_verwalten`) als **Ansicht** (nur filtern; im Stellen-Tab unter „Ansicht“, für Claude `stellen_anzeigen(ansicht=...)`) oder als **Regel**, die passende NEUE Treffer nach jeder Suche und jeder Übernahme aus dem Browser aussortiert. Dieselben Bedingungen wie beim Aussortieren vieler Stellen (Titel und Anzeige enthalten / enthalten nicht, Quelle, Firma, Punkte, Alter, Sprache) und dieselbe Prüfung (`services/stellen_filter.py`). Anlegen, Anzeigen, Testen, An/Aus, auf den Bestand Anwenden (erst Vorschau) und Löschen. Eine Regel nimmt nur Gründe aus der Liste, sortiert beim Anlegen nichts aus und lässt zurückgeholte Stellen, Stellen mit gelesenem Urteil und Stellen mit Bewerbung stehen; das Aussortier-Protokoll nennt die Regel. Im Dashboard stehen die Regeln unter Einstellungen › Automatik. - **Sprache der Anzeige** (#1308): PBP erkennt beim Lesen, ob eine Anzeige deutsch, englisch, gemischt oder in einer anderen Sprache ist; ohne oder mit zu kurzem Text ist sie „unbekannt“ und wird von keinem Sprachfilter getroffen. Filter `sprache` in `stellen_anzeigen`, `stellen_bulk_bewerten` und im Stellen-Tab („Ohne rein englische“), Abzeichen an englischen Stellen, Hinweis „verlangt Deutsch“, wenn eine englische Anzeige Deutschkenntnisse fordert. - **Kategorie-Gewichte über Claude** (#1304): `suchkriterien_bearbeiten(kategorie='scoring', aktion='gewichten', werte=['plus'], gewicht=3)` setzt dieselbe Einstellung wie die Regler unter Profil › Suchbegriffe (0 bis 10). Die Antwort weist darauf hin, dass PLUS-Punkte gedeckelt sind (Deckel „Rahmen“). - **Anstellungsform, Umfang und Remote einer Stelle ändern** (#1299): `stelle_bearbeiten(anstellungsart=, umfang=, remote=)` und im Stellen-Detail eine Auswahl. Eine Handkorrektur überlebt Suchläufe und Neuberechnungen. - **Kontakte ohne echten Namen finden** (#1303): `kontakte_auflisten(nur_platzhalter=True)`. ### Fixed - **Browser-Übernahme speicherte Remote als „True“ und jede Stelle als Festanstellung** (#1298). Voll remote ausgeschriebene Stellen fielen dadurch unter die Entfernungsgrenze für Festanstellungen. Remote wird jetzt normalisiert, die Anstellungsart aus Angabe, Portal oder Titel bestimmt, und Unverständliches steht als Hinweis in der Antwort. Der Bestand wird beim Start bereinigt. - **Falsche Entfernungen** (#1300): „Hamburg u.a.“ ergab 218 km, „Deutschland (remote)“ 619 km, „100 % remote (Frankfurt)“ einen Ort in Übersee. Zusätze werden vor der Abfrage entfernt, mehrere Orte einzeln aufgelöst (der nächste zählt, in Liste und Bewertung dieselbe Zahl), ein Land allein und Treffer außerhalb des deutschsprachigen Raums gelten als „unbekannt“. - **Die Namensprüfung vor GitHub-Texten meldete jede Tabelle als Personenfund** (#1303), weil ein Kontakt `---` hieß. Werte ohne Buchstaben sind kein Name. - **Die Sicherung beim Deinstallieren scheiterte bei englischem Datumsformat** (#1296). Das Datum kommt jetzt aus PowerShell. - **Die Wiedergänger-Automatik sortierte Stellen mit deinen eigenen Pflichtbegriffen als „falsches Fachgebiet“ aus** (#1310). Sie hatte Ortsnamen, Eigenschaftswörter wie „kaufmännischer“ und Bruchstücke wie „voll“ (aus „Voll- oder Teilzeit“) als Fachgebiet gelernt. Trägt eine Stelle einen Pflichtbegriff deines Profils, wird sie jetzt nicht mehr als falsches Fachgebiet aussortiert, sondern mit einem Hinweis angelegt (dieselbe Prüfung wie bei den Punkten). Der Ort einer Stelle zählt nicht mehr als Fachwort, und „kaufmännisch“, „technisch“, „gewerblich“, „Kaufmann/Kauffrau“, „Teamassistenz“ und „voll“ auch nicht. ### Changed - Neue Module: `services/stellen_filter.py`, `services/gespeicherte_filter.py`, `services/sprache.py`. Neue Tabelle `stellen_filter` und neue Spalten `art_quelle`, `umfang_quelle`, `remote_quelle` an `jobs` (additiv, ohne Versionssprung). - Windows-Probe in der CI (#1294): Installer, Port-Selbsthilfe, Update und Deinstallation laufen bei jeder Änderung daran auf einem Windows-Runner. *Schema v52 (unverändert, neue Tabelle `stellen_filter` als Safety-Net), 282 MCP-Werkzeuge, 10172 Tests.* ## 📦 Wie installiere oder aktualisiere ich PBP? **Unter Windows** brauchst du kein Git, kein Python, kein Vorwissen — nur einen ZIP-Download und einen Doppelklick. **Unter macOS** muss vorher einmalig Python 3.11+ installiert sein (siehe unten), **unter Linux** Git und Python. Voraussetzung ueberall: [Claude Desktop](https://claude.ai/download) ist installiert (Linux: alternativ Claude Code CLI). ### Windows (empfohlen, bequemster Weg) 1. **ZIP herunterladen:** [PBP-1.8.2.zip](https://github.com/MadGapun/PBP/archive/refs/tags/v1.8.2.zip) 2. **Entpacken:** Rechtsklick auf die ZIP → *„Alle extrahieren..."* → Zielordner waehlen (z.B. `C:\PBP`). Darin liegt ein Unterordner `PBP-...` — dort hinein wechseln. 3. **Installieren:** Doppelklick auf **`INSTALLIEREN.bat`** 4. Das Setup laedt Python, alle Pakete und Chromium herunter (~3–5 Minuten) und konfiguriert Claude Desktop. 5. Auf dem Desktop liegt jetzt eine Verknuepfung **„PBP Bewerbungs-Portal"** — Doppelklick startet das Dashboard. 6. **Claude Desktop oeffnen** (lief es schon: komplett beenden — Rechtsklick aufs Claude-Symbol unten rechts in der Taskleiste → *Beenden* — und neu starten) und tippen: **„Starte die Ersterfassung"** 7. Taucht PBP nicht auf: Claude Desktop nochmal komplett beenden und neu starten — siehe [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ). ### macOS 1. **Einmalig vorab: Python 3.11+** — am einfachsten der [Installer von python.org](https://www.python.org/downloads/) (Doppelklick), alternativ `brew install python@3.12` 2. **ZIP herunterladen** (siehe Windows-Link) und **entpacken** (Doppelklick; im ZIP liegt ein Unterordner `PBP-...`) 3. **Doppelklick auf `INSTALLIEREN.command`** 4. Falls macOS warnt („kann nicht geoeffnet werden"): Rechtsklick auf die Datei → *„Oeffnen"* → nochmal *„Oeffnen"* ### Linux ```bash git clone --branch v1.8.2 --depth 1 https://github.com/MadGapun/PBP.git cd PBP bash installer/install.sh ``` `v1.8.2` ist die Version DIESES Releases. Ohne `--branch` klont man `main` — den jeweils neusten Entwicklungsstand, nicht unbedingt die stabile Version (#1150). ### Update von einer aelteren Version **Einfach drueberinstallieren** — deine Daten bleiben erhalten: - Windows: `%LOCALAPPDATA%\BewerbungsAssistent\data\pbp.db` - macOS/Linux: `~/.bewerbungs-assistent/pbp.db` Schema-Upgrade laeuft automatisch beim ersten Start, ein Backup wird vorher erstellt (Ordner `data\backups\`). ### Detaillierte Anleitung & Troubleshooting 📖 [Wiki → Installation](https://github.com/MadGapun/PBP/wiki/Installation) · [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ) --- ## [1.8.1] - 2026-10-30 — Ein hängendes PBP wird erkannt, und das Update-Testprogramm endet von selbst Hängt ein altes PBP am Anschluss 8200, sagt PBP jetzt ehrlich, was los ist, und beendet es von selbst, wenn es nicht von Claude gestartet wurde. Ein Start, der am belegten Anschluss endet, stuft PBP nicht mehr auf die vorige Fassung zurück. Der Funktionstest beim Update beendet sich von selbst; scheitert er trotzdem, nennt die Meldung den Weg von Hand. ### Das Wichtigste für dich **Was du tun musst** - **Nichts Besonderes.** Wer das Auto-Update eingeschaltet hat, bekommt 1.8.1 wie jedes Update. Scheitert der Funktionstest auf deinem Rechner (Meldung „Die neue Version hat ihren Funktionstest nicht bestanden“), installiere von Hand: ZIP laden, entpacken, `INSTALLIEREN.bat` starten; deine Daten bleiben. - **Lief PBP bei dir zuletzt auf einer älteren Fassung, ohne dass du etwas gemacht hast?** Das war der Fehler unten („kein PBP“ am belegten Anschluss, dann Rückfall). Nach dem Update auf 1.8.1 passiert das nicht mehr; die gewünschte Fassung installierst du wie oben. **Behoben (kurz)** - Ein hängendes PBP am Anschluss wird erkannt, ehrlich gemeldet und (außer unter Claude Desktop) selbst beendet; keine falsche Rückstufung mehr. - Der Funktionstest beim Update endet von selbst, und die Meldung nennt den Weg von Hand. - Die Gesundheitsauskunft nennt nur Pakete, die PBP wirklich benutzt. ### Fixed - **Ein hängender Prozess hielt den Anschluss 8200, und PBP schob die Schuld auf ein „anderes Programm“.** Ein altes PBP, das Verbindungen annahm, aber nicht mehr antwortete, wurde als „kein PBP“ gemeldet; zwei solche Starts zählte PBP als gescheiterte Starts und stufte 1.8.0 auf eine ältere Fassung zurück (#1290). Jetzt unterscheidet PBP drei Fälle: Es antwortet (dann läuft es schon), es antwortet nicht (hängender Prozess, mit Kennung und Startzeit genannt), oder ein anderes Programm hält den Anschluss (mit Namen genannt). Einen hängenden eigenen Prozess, den Claude Desktop **nicht** gestartet hat, beendet PBP nach einer zweiten Prüfung selbst und startet das Dashboard. Ist er von Claude Desktop gestartet (der Weg, über den Claude mit PBP spricht), beendet PBP ihn nie von selbst: im Fenster kommt eine Frage (Vorgabe „Nein“), sonst steht der genaue Befehl in der Meldung. Fremde und unbekannte Prozesse fasst PBP nie an. Ein Start, der am belegten Anschluss endet, zählt nicht mehr als Fehlstart der Fassung. - **Der Funktionstest beim Update lief auf einem Rechner in die Zeitgrenze** (#1281), obwohl er allein in vier Sekunden fertig war. Das Testprogramm beendet sich jetzt hart und hat einen eigenen Wächter; die Update-Prüfung liest seine Ausgabe aus Dateien statt aus einer Leitung (ein anderer Prozess, der das Leitungsende erbte, hielt sie fest), und bei einer Zeitgrenze steht, was der Test bis dahin schrieb, im Protokoll. Die Meldung nennt den Weg von Hand. Die Ursache auf dem einen Rechner ist nicht bewiesen; die Änderungen beseitigen die plausibelste und machen jeden weiteren Fall sichtbar. - **Die Gesundheitsauskunft nannte ein Paket, das PBP nie benutzt** („pdfplumber“, #1282). Sie nennt nur noch Pakete, die PBP wirklich einbindet; ein Test hält die Liste gegen die Abhängigkeiten. ### Changed - Neue Module: `services/port_besitzer.py` (wer hält den Port: Kennung, Kommandozeile, Elternprozess; nur Standardbibliothek), `services/port_selbsthilfe.py` (die einzige Stelle, die über das Beenden entscheidet; schützt die ganze Elternkette), `services/auto_update/start_zaehler.py` (setzt den Zähler „Starts ohne Bestätigung“ zurück, setzt nie `bestaetigt`). Der Startbaustein `bewerbungs_assistent_boot` ist unverändert (FORMAT 1). - `dashboard_halter.port_auskunft()` liefert `pbp` / `fremd` / `keine_antwort`; `port_belegt()` ersetzt `connect_ex == 0` (eine volle Warteschlange galt als „frei“). - Gegenprobe: 14 Eingriffe in den Port-Teil und 6 in den Funktionstest, jeder von mindestens einem Test erkannt. ### Known Issues - Die Ursache des Hängens selbst (der Webteil blockiert nach dem Start des Planers, der MCP-Weg läuft weiter) ist nicht gefunden (#1290, eigener Befund). Bis dahin meldet und behebt PBP die Folge. Ein hängender Prozess unter Claude Desktop braucht deine Zustimmung oder einen Neustart von Claude Desktop. - Ein Start am belegten Anschluss lässt den Zähler auf 1 stehen; ein echter Fehlstart danach führt schon beim übernächsten Start zum Rückfall (wie bisher). *Schema v52 (unverändert), 281 MCP-Werkzeuge, 9725 Tests.* ## 📦 Wie installiere oder aktualisiere ich PBP? **Unter Windows** brauchst du kein Git, kein Python, kein Vorwissen — nur einen ZIP-Download und einen Doppelklick. **Unter macOS** muss vorher einmalig Python 3.11+ installiert sein (siehe unten), **unter Linux** Git und Python. Voraussetzung ueberall: [Claude Desktop](https://claude.ai/download) ist installiert (Linux: alternativ Claude Code CLI). ### Windows (empfohlen, bequemster Weg) 1. **ZIP herunterladen:** [PBP-1.8.1.zip](https://github.com/MadGapun/PBP/archive/refs/tags/v1.8.1.zip) 2. **Entpacken:** Rechtsklick auf die ZIP → *„Alle extrahieren..."* → Zielordner waehlen (z.B. `C:\PBP`). Darin liegt ein Unterordner `PBP-...` — dort hinein wechseln. 3. **Installieren:** Doppelklick auf **`INSTALLIEREN.bat`** 4. Das Setup laedt Python, alle Pakete und Chromium herunter (~3–5 Minuten) und konfiguriert Claude Desktop. 5. Auf dem Desktop liegt jetzt eine Verknuepfung **„PBP Bewerbungs-Portal"** — Doppelklick startet das Dashboard. 6. **Claude Desktop oeffnen** (lief es schon: komplett beenden — Rechtsklick aufs Claude-Symbol unten rechts in der Taskleiste → *Beenden* — und neu starten) und tippen: **„Starte die Ersterfassung"** 7. Taucht PBP nicht auf: Claude Desktop nochmal komplett beenden und neu starten — siehe [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ). ### macOS 1. **Einmalig vorab: Python 3.11+** — am einfachsten der [Installer von python.org](https://www.python.org/downloads/) (Doppelklick), alternativ `brew install python@3.12` 2. **ZIP herunterladen** (siehe Windows-Link) und **entpacken** (Doppelklick; im ZIP liegt ein Unterordner `PBP-...`) 3. **Doppelklick auf `INSTALLIEREN.command`** 4. Falls macOS warnt („kann nicht geoeffnet werden"): Rechtsklick auf die Datei → *„Oeffnen"* → nochmal *„Oeffnen"* ### Linux ```bash git clone --branch v1.8.1 --depth 1 https://github.com/MadGapun/PBP.git cd PBP bash installer/install.sh ``` `v1.8.1` ist die Version DIESES Releases. Ohne `--branch` klont man `main` — den jeweils neusten Entwicklungsstand, nicht unbedingt die stabile Version (#1150). ### Update von einer aelteren Version **Einfach drueberinstallieren** — deine Daten bleiben erhalten: - Windows: `%LOCALAPPDATA%\BewerbungsAssistent\data\pbp.db` - macOS/Linux: `~/.bewerbungs-assistent/pbp.db` Schema-Upgrade laeuft automatisch beim ersten Start, ein Backup wird vorher erstellt (Ordner `data\backups\`). ### Detaillierte Anleitung & Troubleshooting 📖 [Wiki → Installation](https://github.com/MadGapun/PBP/wiki/Installation) · [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ) --- ## [1.8.0] - 2026-10-23 — Updates, die sich selbst installieren PBP kann sich jetzt selbst aktualisieren, wenn du es willst (Einstellungen › Erweitert › Updates); ohne deine Wahl installiert PBP nichts. Neu sind die Hilfe „Frag mich“, die Übersicht „Speicher & Downloads“, der Firmen-Eintrag und kürzere Wege: Von Stelle, Bewerbung, Person und Firma geht es mit einem Klick weiter und zurück. Was Claude für dich erarbeitet, trägt es selbst in PBP ein, und Stellen aus einem Suchlauf im Browser stehen danach in deiner Liste statt nur im Chat. ### Das Wichtigste für dich **Was du tun musst** - **Von 1.7 kommend, einmal von Hand:** das ZIP dieser Version laden, entpacken und `INSTALLIEREN.bat` doppelklicken (macOS: `INSTALLIEREN.command`). Du installierst einfach darüber; deine Daten bleiben, vorher entsteht ein Backup. Danach Claude Desktop **komplett beenden** (Rechtsklick auf das Claude-Symbol unten rechts in der Taskleiste › Beenden) und neu starten. - **Ab jetzt geht es auch ohne ZIP:** Unter Einstellungen › Erweitert › Updates wählst du, ob PBP dir neue Versionen nur meldet (Vorgabe) oder selbst installiert. Das gibt es zurzeit nur unter Windows. - **Claude aus dem Microsoft Store:** Hat Claude PBP bisher nicht angezeigt, obwohl der Installer „fertig“ meldete, behebt das diese Installation. **Neu** - **Updates von selbst, nur wenn du willst.** Vier Stufen, von „Nur Hinweis“ (Vorgabe) bis „Automatisch, still“. Jede neue Version wird vor dem Einbau geprüft (Prüfsumme und Signatur) und neben der laufenden abgelegt. Startet sie nicht, kehrt PBP von selbst zur vorigen zurück und sagt es dir. - **„Frag mich“ in der Hilfe.** Das Fragezeichen oben rechts öffnet „Hilfe & Support“. Im Reiter „Frag mich“ stellst du eine Frage zur Bedienung, zum Beispiel „Wo stelle ich ein, dass sich PBP selbst aktualisiert?“, und bekommst Karten mit der Antwort, einem Sprung an die richtige Stelle und dem Link ins Wiki. Deine Fragen werden nicht gespeichert. Läuft die lokale KI, steht das Feld auch in der Seitenleiste unter Elwosas Nachrichten. - **Kürzere Wege.** In Stelle, Bewerbung, Person und Firma steht oben eine feste Leiste mit dem Rückweg und dem nächsten Schritt; die Zurück-Taste führt dorthin, woher du kamst. „Nachfassen“ im Dashboard öffnet die Bewerbung, nach „Bewerbung speichern“ liegt die neue Bewerbung offen da, und ein Treffer der Suche oben öffnet, was du gesucht hast. - **Firmen (Kontakte › Firmen).** Alles, was PBP zu einer Firma weiß, auf einer Zeitleiste: Bewerbungen, Stellen, Personen, Dokumente. Verschiedene Schreibweisen derselben Firma und die Mutterfirma führt PBP zusammen, aber nur, wenn du es bestätigst. - **Speicher & Downloads (Einstellungen › Erweitert).** Wo PBP Dateien ablegt und wie viel Platz sie brauchen, und Aufräumen in zwei Schritten, nie ohne dein Ja. Hier änderst du auch den Ordner für deine Lebensläufe und Anschreiben. - **Was Claude im Browser findet, steht danach in PBP.** Stellen aus einem Suchlauf im Browser landen in deiner Liste; im Zweifel kommt eine Stelle hinein, und du entscheidest. Das Dashboard zeigt unter „Stellen zu prüfen“, was auf dein Urteil wartet. Was Claude nach dem Lesen aussortiert hat, holst du dort mit einem Klick zurück. - **Claude trägt selbst ein,** was es für dich erarbeitet: den Grund einer Absage, die Auswertung eines einzelnen Dokuments, die Angaben aus einem LinkedIn-Profil. Bisher stand das oft nur im Chat. - **Kleineres:** Den Typ eines Dokuments änderst du von Hand („Typ ändern“ in der aufgeklappten Dokumentenkarte). Die Stellenliste merkt sich auf Wunsch deine Filter als Voreinstellung. jobtic steht als Quelle für IT-Freelance-Projekte bereit (dafür brauchst du ein eigenes jobtic-Konto). Elwosa sagt Bescheid, wenn es eine neue Version gibt. Die Texterkennung für eingescannte Dokumente lässt sich ohne Administratorrechte installieren. Für Jobmails aus Mail-Ordnern gibt es einen Zugang, der ab Werk aus ist; ein Add-on, das ihn nutzt, gibt es noch nicht. **Was anders ist** - **Die Aufräum-Runde „Bewerbungen im Blick behalten“ läuft jetzt einmal am Tag von selbst** (Einstellungen › Automatik, dort auch „Aus“). Sie legt Erinnerungen nach, lädt fehlende Anzeigentexte und prüft, ob Anzeigen noch online sind. Bewerbungen schließt sie von selbst nur ab, wenn du das dort einschaltest; ab Werk ist das aus. - **Die Automatik lässt deine Entscheidungen stehen.** Eine Stelle, die du zurückgeholt hast oder zu der ein gelesenes Urteil „empfohlen“ oder „bedingt“ vorliegt, sortiert keine Automatik mehr aus. Von mehreren Kopien derselben Anzeige bleibt genau eine aktiv, die mit dem Anzeigentext. Gründe wie „befristet“ überträgt PBP nicht mehr über ein gemeinsames Wort im Titel auf andere Stellen, und ohne Anzeigentext sortiert die Automatik nicht nach Fachgebiet aus. Was früher zu Unrecht verschwunden ist, steht unter Stellen › Aussortiert (Vermerk „Automatik“) und lässt sich dort mit „Wiederherstellen“ zurückholen; Claude kann falsch übertragene Gründe für dich suchen. - **Die Auto-Aussortierung lernt nur noch aus dem, was du selbst aussortiert hast,** nicht mehr aus ihren eigenen Urteilen. - **Google Jobs:** Die Suche über JobSpy ist als defekt gekennzeichnet. Ein Google-Treffer ohne die Original-Anzeige des Arbeitgebers wird nicht mehr als Stelle angelegt, und Google-Benachrichtigungen per Mail liefern Hinweise statt Stellen. - **Dashboard:** Unter „Offen“ ist nur noch rot, was überfällig ist. Beim allerersten Start führt ein Weg zum Profil statt vier Karten, und leere Seiten sagen, was sie sind. - Nennt keine Stelle ein Gehalt, steht „Keine Angabe“ statt „0 EUR“. **Behoben (Auswahl)** - Die Automatik sortierte Stellen aus, die du zurückgeholt hattest oder die gelesen und empfohlen waren; von Kopien derselben Anzeige blieb manchmal keine übrig. - Mehrere Texte schickten dich nach „Stellen › Ausgeblendet“; der Reiter heißt „Aussortiert“. - Claude aus dem Microsoft Store zeigte PBP nach der Installation nicht an, obwohl der Installer „fertig“ meldete. - Seit dem 19.10.2026 bekamen neue Installationen eine Fassung der Jobbörsen-Bibliothek JobSpy, die PBP nicht kennt; jetzt bleibt es bei der geprüften. - Die Seite „Stellen“ lief im Leerlauf auf Hochtouren. - Mehrdeutige Ortsnamen bekamen still den erstbesten Treffer; die Entfernung konnte deshalb weit danebenliegen. - Eine laufende Stelle zählte bei der Berufserfahrung nur bis 2026; ab dem 01.01.2027 hätte ein Jahr gefehlt. - Eine interne Notiz schloss die offene Nachfass-Erinnerung einer Bewerbung. Alle Änderungen im Einzelnen stehen darunter. ### Im Einzelnen PBP kann sich jetzt selbst aktualisieren — **wenn du es willst**. Ohne deine Wahl installiert PBP nichts. Dazu kommen die Übersicht „Speicher & Downloads“, die Prüfsumme für Zusatzprogramme, die Zugangsschicht für Jobmails aus Ordnern und der Firmen-Eintrag. Die Version sammelt außerdem alles, was die 1.8.0-Betas (beta.0 bis beta.19), die Release-Kandidaten (rc.1 bis rc.5) und die Hotfixes bis v1.7.159 geliefert haben; die Einzelheiten stehen in den Einträgen darunter. **Wichtig zu wissen:** - **Updates (Einstellungen › Erweitert › Updates).** Vier Stufen: *Nur Hinweis* (Vorgabe), *Mit einem Klick*, *Automatisch, mit Meldung*, *Automatisch, still*. Neue Versionen landen in einem eigenen Ordner neben der laufenden; startet die neue nicht, fällt PBP **von selbst auf die vorige zurück** und sagt es. Geladen wird nur von der festen GitHub-Adresse, nur stabile Versionen der eigenen Linie, mit Prüfsumme **und Signatur** (Ed25519; ohne gültige Signatur wird nichts installiert). Die Automatik startet nie neben anderer Arbeit. - **Einmalig von Hand:** Die erste stabile Version mit dieser Funktion ist 1.8.0 selbst. Wer von 1.7.x kommt, installiert sie wie gewohnt (ZIP, `INSTALLIEREN.bat`); ab dann kann PBP den Rest selbst. **Das automatische Aktualisieren gibt es zurzeit nur unter Windows.** - **Speicher & Downloads (Einstellungen › Erweitert).** Wohin PBP schreibt und lädt, wie viel dort liegt, und Aufräumen in zwei Schritten — nie ohne dein Ja, nie bei laufender Arbeit. Was anderen Programmen gehört (Browser der Jobsuche, KI-Modelle), wird nur gezeigt. Die Karte „Deine eigenen Ordner“ trägt die Eingabefelder für den Ordner, in den PBP deine Lebensläufe, Anschreiben und Berichte legt, und für den Ordner mit deinen Vorlagen — du änderst sie dort, wo du siehst, wie viel darin liegt (#1173). Die anderen Orte sind durch die Installation bedingt und bleiben ohne Eingabe. - **Mail-Ordner (Einstellungen › Erweitert › Quellen im Detail).** Der Ordner-Scan ist **standardmäßig aus**; gelesen werden nur Ordner, die du ausdrücklich freigibst. PBP öffnet nie selbst ein Postfach. Ein Add-on, das Ordner von sich aus liest, gibt es noch nicht — das Thunderbird-Add-on schickt weiter nur, was du markierst. - **Firmen (Kontakte › Firmen).** Alles, was PBP zu einer Firma weiß, als eine Zeitleiste; ein Firmen-Eintrag fasst Schreibweisen zusammen („Alt AG“ heißt heute „Neu GmbH“) und kennt die Mutterfirma. Bewerbungen, Stellen und Kontakte behalten ihren Firmennamen als Text. - **Ein Klick zum Nächsten (#1171).** Die Zeile „Nachfassen“ im Dashboard öffnet die Bewerbung; nach „Bewerbung speichern“ in der Stellen-Ansicht liegt die neue Bewerbung offen da (mit „Lebenslauf mit Claude“ und „Anschreiben mit Claude“ im Fuß); in der Timeline führt der Name der Person zu ihrer Karte, und die Karte nennt oben „Bewerbung: Titel bei Firma“ und führt zurück; „Zur Stelle“ auf der Bewerbungskarte, „Zur Bewerbung“ in der Aufgabenzeile, die Top-Stelle im Dashboard öffnet die Stelle. Die Timeline hat oben eine Sprungleiste (Status · Stelle · Dokumente · Personen · Aufgaben · Termine · Verlauf), die beim Scrollen stehen bleibt. Der Link aus Claude (`#stellen/`) öffnet die Stelle selbst. Dazu kommen die feste Weg-Leiste in Stelle, Bewerbung, Person und Firma, der Rückweg mit der Zurück-Taste und Listen, die mit ihrer ersten Zeile beginnen (siehe unten, #1171 Baustein 3 bis 5). - **Neu im Dashboard-Fenster:** Schreibt Claude, während du eine Stelle oder die Timeline einer Bewerbung offen hast (ein Urteil zur Stelle, eine Notiz, ein Termin, eine Mail zur Bewerbung), erscheint das dort nach ein bis drei Sekunden; die Leseposition bleibt, nichts flackert. - **Suche oben im Dashboard (#1177).** Ein Klick auf einen Treffer öffnet das Objekt: die Bewerbung (ihre Timeline), die Stelle (ihre Details), das Dokument (aufgeklappt, mit seinem Namen im Suchfeld der Seite), die Mail (ihr Fenster, auch ohne Bewerbung), den Termin (in der Timeline der Bewerbung, am Abschnitt „Termine“; ohne Bewerbung im Kalender) und den Skill (im Profil; ab sieben Skills ist die Liste auf seinen Namen gefiltert). Bis v1.7.154 passierte beim Klick nichts. - **Vorabversionen von selbst holen — nur auf Wunsch (#1199).** Wer eine Vorabversion (Beta oder RC) nutzt, kann in Einstellungen › Updates „Vorabversionen automatisch“ einschalten (Vorgabe **aus**); dann zieht PBP die jeweils nächste Vorabversion **derselben Reihe** nach den Regeln der gewählten Stufe. Eine stabile Installation wird nie auf eine Vorabversion gezogen, auch nicht mit dem Schalter; ein Linienwechsel bleibt Handarbeit; Prüfsumme, Signatur und Selbsttest bleiben Pflicht. Damit lässt sich das Auto-Update an einer echten Veröffentlichung belegen, bevor es für die stabile Version gilt. - **Eine neuere Vorabversion wird überall gleich gemeldet (#1179).** Wer eine Beta nutzt und eine neuere erscheint, sieht in der Seitenleiste „Neue Vorabversion verfügbar“, auf der Seite Einstellungen › Updates statt „Aktuell“ eine Karte mit dem Grund (PBP installiert Vorabversionen nur, wenn du es mit dem Schalter „Vorabversionen automatisch“ erlaubst — Vorgabe aus, nur auf einer Vorab-Installation —, und nie von selbst auf eine stabile Installation, auch nicht mit „Mit einem Klick“) und den Knöpfen „ZIP herunterladen“ und „Veröffentlichung ansehen“, und auf dem Dashboard denselben Hinweis. Elwosa nennt die neue Version ebenfalls, einmal je Version, mit einem Link zu den Veröffentlichungsnotizen (#1180). - **Was Claude erarbeitet, kommt in PBP an (#1200).** Die Knöpfe „mit Claude“ legen einen Auftrag in die Zwischenablage. Bei einer Absage, einem einzelnen Dokument und einem LinkedIn-Profil endete der Auftrag bisher im Chat: Claude nannte, was zu tun wäre, und PBP blieb, wie es war. Jetzt trägt Claude die Absage samt Grund ein, plant die Nachfrage, hängt das Dokument an die Bewerbung und schließt es ab — und sagt zum Schluss, was es eingetragen hat. „Bewerbung vorbereiten“, „Schnell bewerben“ und die Jobsuche folgen dabei einem gemeinsamen Ablauf: erst prüfen, dann als Word-Datei exportieren, keine zweite Bewerbung anlegen. - **Texterkennung ohne Administratorrechte (Einstellungen › Erweitert › Erweiterungen).** „Herunterladen & installieren“ fragt nicht nach Administratorrechten: das Programm kommt nur für dich nach `%LOCALAPPDATA%\Programs\Tesseract-OCR`, das deutsche Sprachpaket dazu, und lässt sich dort wieder entfernen — auch durch den Deinstaller. Ein eingescanntes PDF wird beim Hochladen gelesen (`deu+eng`). ### Added - **Auto-Update** (#1093): `services/auto_update/` (feste Quelle, Prüfsumme, Ed25519-Signatur in reinem Python, sicheres Entpacken, Manifest, Selbsttest vor dem Umschalten, Stufen, Verlauf), der **Startbaustein** `bewerbungs_assistent_boot` (eingefroren, nur Standardbibliothek, Rückfall im selben Prozess und nach zwei unbestätigten Starts), der **Schema-Schutz** (`services/schema_schutz.py`: ist die Datenbank neuer als das Programm, schreibt der alte Prozess nicht weiter), der Hinweis, wenn Claude und Dashboard mit verschiedenen Fassungen laufen, der Installer-Umbau (Versionsordner, Selbstaufräumen, Deinstaller), `scripts/build_update_archive.py` und ein Schritt im Release-Tor. Werkzeuge `update_status`, `update_einstellungen_setzen`, `update_jetzt_installieren`, `update_zurueckschalten`. - **Speicher & Downloads** (#1131): sieben Orte, sieben Aufräum-Aktionen, Werkzeuge `speicher_anzeigen` und `speicher_bereinigen`. Die Karte „Deine eigenen Ordner“ steht immer da und enthält die Eingabefelder für Ausgabe- und Vorlagen-Ordner (#1173; dieselbe Komponente und dieselbe Prüfung wie unter Einstellungen › Ordner, die Seite misst nach dem Speichern neu). - **Prüfsumme der Komponenten** (#1152): kein Installer ohne SHA-256; die Ablehnung kommt vor dem Download. - **Sprachdaten der Texterkennung aus fester Fassung und mit Prüfsumme** (#1165): `deu`, `eng` und `osd` kommen nicht mehr vom wandernden Zweig `main`, sondern aus dem Commit hinter dem Tag 4.1.0 von `tessdata_fast`; jede Sprache trägt eine SHA-256 in der Registry (aus genau dieser Fassung gebildet und gegen die Git-Blob-Hashes der GitHub-API gegengeprüft). Ohne Summe wird nicht geladen; eine falsche Summe verwirft die Datei und sagt es; scheitert eine von mehreren Dateien, bleibt auch von den anderen nichts liegen. Fehlt nur Deutsch, steht das in der Meldung der Installation. - **Mail-Zugangsschicht** (#947): Schalter, genaue Liste freigegebener Ordner, Prüfung im Mail-Eingang für jedes Add-on (`GET /api/v1/ingest/mail-policy`, `modus=scan` bei `POST /api/v1/ingest/email`), Zahlen je Ordner; Werkzeuge `mail_quelle_anzeigen` und `mail_quelle_einstellen`. Die Ingest-API v1 bleibt kompatibel: die Erweiterung ist rein additiv. - **Ein Weg für Treffer und Links** (#1177): `services/dashboard_link.hash_ziel` baut die eine Adressform `#seite/kennung` (für die Links, die Claude nennt, und für die Treffer der Suche); `lib/wege.js` kennt `zuMail`, `zuProfil` und `zuSuchtreffer`; `sprungAusHash` liest zusätzlich `#dokumente/`, `#kalender/` und `#profil/skills`; `GET /api/documents?doc_id=` liefert genau ein Dokument; die Sprungleiste springt beim Öffnen in einen genannten Abschnitt. Gegenprobe: neuer Katalog „suche“ (23 absichtlich eingebaute Fehler: Adressen, Zuordnung, Lesestellen der Seiten). - **Firmen-Eintrag, Stufe 2** (#1080): Tabellen `companies`, `company_aliases`, `company_contacts` (additiv, ohne Versionssprung); die Duplikat- und Repost-Erkennung kennt die Einträge (`firmen_kanon`); Kontakte gehören mehreren Firmen mit Rolle und Zeitraum; Dokumente an einer Bewerbung stehen auch in der Historie der Firma; Dashboard-Ansicht mit Zeitleiste, Bearbeiten und Vorschlägen; Firmenname als Link in Stellen, Bewerbungen und Kontakten; Werkzeuge `firmen_stamm_anzeigen`, `firmen_vorschlaege_anzeigen`, `firmen_stamm_bearbeiten`; `firma_oeffnen` in `fit_analyse`, `bewerbung_details` und `kontakt_anzeigen`; `dashboard_link` in `firma_kontext`. - **Vorabversionen in der Oberfläche** (#1179): `lib/autoUpdate.js` kennt `istVorabversion`, `vorabNeu` (eine neuere Vorabversion aus der allgemeinen Prüfung, wenn die feste Quelle des Auto-Updates keine kennt und sie nicht schon von Hand installiert ist) und `vorabHinweis`; die Update-Seite zeigt statt „Aktuell“ „Neue Vorabversion“ mit einer Karte (Erklärung, drei Schritte, „ZIP herunterladen“, „Veröffentlichung ansehen“), das Dashboard denselben Hinweis in der Hinweiszone (auch ohne verfügbares Auto-Update), die Seitenleiste „Neue Vorabversion verfügbar“; „Jetzt prüfen“ fragt beide Auskünfte. - **Der Typ eines einzelnen Dokuments lässt sich von Hand ändern** (#1162): `services/document_handlers.typ_setzen` ist der eine Dienst für beide Wege. Erlaubt sind die bekannten Typen und die beiden Vorlagen-Typen; ein Tippfehler legt keinen neuen Typ an. Nur die Einordnung wechselt, die Verknüpfung mit der Bewerbung, der Text und der Analysestand bleiben. Neu: das Werkzeug `dokument_typ_setzen`, `GET /api/document-types` (Typen mit deutschen Namen) und „Typ ändern“ in der aufgeklappten Dokumentenkarte; `PUT /api/document/{id}/doc-type` prüft jetzt gegen die erlaubten Typen. Danach stimmt auch die Historie der Firma (#1080): aus „sonstiges“ wird „absage“, und das Dokument steht dort. Gegenprobe: Katalog „dokumenttyp“, 15 absichtlich eingebaute Fehler. - **Voreinstellung der Filter in der Stellenliste** (#1158 Punkt 5): im Filterfeld der Liste merkt „Als Voreinstellung speichern“ die Filter und die Sortierung, die jetzt gelten. Die Voreinstellung gilt bei jedem **Öffnen von PBP** (Neuladen, Neustart), nicht beim Wechsel zwischen den Seiten; ohne sie bleibt es beim gemerkten Zustand des Browsers. „Filter zurücksetzen“ zeigt weiter **alle** offenen Stellen und bleibt von ihr unberührt (die verbindliche Anforderung aus dem Issue); daneben „Zur Voreinstellung“ und „Voreinstellung aufheben“. Sie liegt je Profil auf dem Server (`GET/PUT/DELETE /api/stellen-filter-standard`, Schlüssel und Typen streng geprüft; Suchtext und Ansicht gehören nie dazu) und gilt damit in jedem Browser. Die erste Liste wird erst nach ihr geholt. Gegenprobe: Katalog „filtervoreinstellung“, 15 absichtlich eingebaute Fehler. - **Elwosa-Kanal „Update“** (#1180, `services/elwosa_provider.update_kandidaten`): nennt eine neue Version, sobald die allgemeine Prüfung sie findet, einmal je Version, mit dem Titel der Veröffentlichung und einem Link auf die Notizen; eine Vorabversion als solche; schweigt, wenn die Version schon von Hand installiert ist. Die Prüfung merkt dafür ihren Befund (`update_quelle.befund_merken`). Regelbasiert wie alle Kanäle, über `post_candidate` (Sprach-DNA, aus/Pause/Cooldown, Kind- und Inhalts-Sperre). - **jobtic als Browser-Quelle mit eigenem Konto** (#1189): Marktplatz für IT-Freelance-Projekte, eingebunden wie XING und StepStone — mit dem Hinweis, dass ein eigenes, im Browser angemeldetes jobtic-Konto nötig ist (Abzeichen „Konto nötig“, ohne den Login-Knopf des alten Weges; neues Kennzeichen `konto_noetig`). Die Nutzungsbedingungen von jobtic untersagen automatisiertes Auslesen (§ 5.2) und die Aufnahme von Kontaktdaten in fremde Datenbanken (§ 5.3); darum steht die Quelle unter **Auflagen** (`services/quellen_auflagen`, Daten im Quellenverzeichnis): PBP ruft diese Seiten nie selbst ab (Anzeigentext nachladen, Auto-Nachladen, Aging-Check, Qualitätsprüfung; die Auto-Engine wählt sie nicht einmal aus), übernimmt keine Ansprechpartner aus dem Lauf (`kontakt_nicht_uebernommen` im Ergebnis) und setzt die Stellenart Freelance; der Auftrag an Claude nennt die Auflagen (Handstart, höchstens zwei Ergebnisseiten je Begriff, Detailseiten nur bei fachlichem Treffer, Pausen). `quelle_handoff('jobtic', Begriff)` liefert die Such-URL und ein eigenes Auswerte-Skript (`job_scraper/jobtic_extraction.js`), das nur die Liste der Seite liest und keine Kontaktdaten weitergibt. jobtic wird nie von selbst empfohlen; der Aktivierungsdialog sagt jetzt „ob eine taugt, entscheidest du in PBP“ statt „Passende Treffer legt Claude für dich als Stelle an“. Gegenprobe: Katalog „jobtic“, 49 absichtlich eingebaute Fehler. - **Gegengelesen vor dem Kandidaten** (ein zweiter, unabhängiger Prüfer, neun Funde, alle am Code belegt und behoben): (1) Die Auflage „keine Kontaktdaten“ gilt auch für den **Text** — Mailadressen und Rufnummern werden aus der Beschreibung gestrichen (`quellen_auflagen.kontaktdaten_entfernen`, nur erkennbare Schreibweisen: Tagessätze, Zeiträume und Projektnummern bleiben; Namen nennt nur die Anleitung), das Ergebnis sagt es. (2) Eine **eigene Quelle** (`custom_quelle_hinzufuegen`) auf einer jobtic-Adresse gilt wie jobtic: kein Abruf im Gesundheitslauf, Handoff mit den Auflagen und dem Skript der Quelle. (3) **Nur auf Wunsch** ist strukturiert lesbar (`nur_auf_wunsch`): der Auftrag des Suchlaufs („arbeite diese Quellen selbst ab“) nimmt die Quelle aus. (4) Der Aufräum-Helfer des Selbsttests erbte den Arbeitsordner und hielt den entpackten Ordner fest: das Umbenennen beim Update scheiterte im ersten Versuch immer, bei einem langsamen Rechner dauerhaft. (5) Ein **Platzhalter** („Nicht angegeben“) gilt nicht als Firma: zwei Projekte gleichen Titels von nicht genannten Auftraggebern bleiben zwei, ähnliche Titel sind kein „Duplikat“. (6) Beim Start stand kurz „Zuerst dein Profil“ da, auch bei einem Menschen mit Profil: der Anfangszustand der Seiten war „kein Profil“ statt „unbekannt“. (7) Der Bestandsnachzug füllte `max_stellen` mit Stellen, die er nie abrufen darf. (8) Der Knopf „Beschreibung jetzt nachladen“ buchte das Abrufverbot als Fehlversuch. (9) Eine **0** als Jahr oder Niveau eines Skills gilt als „nicht gesetzt“ (sonst „ruht seit 0“); eine Adresse mit Port (`jobtic.com:443`) oder mit Anmeldenamen vor dem Host gehört zur Quelle. - Wiki: Seiten **Updates**, **Speicher & Downloads**, **Mail-Ordner**, **Firmen**; Abschnitt „Erweiterungen“ in den Einstellungen. - Gegenprobe (`scripts/mutationstest_auto_update.py`): sechzehn Kataloge, 534 absichtlich eingebaute Fehler (Auto-Update 101, Speicher 37, Komponenten 6, Mail 20, Firmen 86, Wege 38, Suche 23, Vorab 28, Konsole 11, Google 33, Browser 30, jobtic 49, Skill-Stand 11, Installer 14, Erste Schritte 25, Texterkennung 22); die Tests erkennen alle bis auf einen begründet gleichwertigen und zwei, die Symlink-Recht brauchen. Im Katalog „Wege“ überlebte beim ersten Lauf ein Fehler (die Marke der Sprungleiste wurde nur direkt nach dem Klick geprüft, nicht nach dem Scrollen); der Test wurde gehärtet, danach wird er erkannt. Im Katalog „google“ überlebte beim ersten Lauf ebenfalls ein Fehler (das Neurechnen der Punkte nach dem Nachholen wurde nur zusammen mit der Entfernung geprüft); auch dieser Test wurde gehärtet. - **Die Ingest-API v1 ist mit 1.8.0 eingefroren** (Beta-Exit Punkt 2). `GET /api/v1/ingest/ping`, `POST /api/v1/ingest/job`, `GET /api/v1/ingest/mail-policy` und `POST /api/v1/ingest/email` bleiben, wie sie sind; ein Vertragstest (`test_v18_ingest_api_v1_vertrag.py`) prüft Pfade, Methoden, Pflichtfelder und Antwortfelder als Obermenge. Neues kommt nur additiv oder als `/api/v2/` daneben. - **Fragen zur Bedienung, beantwortet aus Hilfe, häufigen Fragen, Wiki und Prompts** (#1233). Im Hilfe-Dialog gibt es den Reiter „Frag mich“: Du tippst eine Frage wie „Wo stelle ich ein, dass sich PBP selbst aktualisiert?“ (solange noch nichts gefragt wurde, stehen vier Beispielfragen zum Anklicken da), und PBP zeigt Karten mit Titel, Kurztext und Quelle — mit einem Sprung in den richtigen Reiter („Öffnen: Einstellungen › Updates“), dem Link zur Wiki-Seite und, wo es einen gibt, dem Prompt zum Kopieren für Claude. Läuft die lokale KI, steht dieselbe Eingabe auch unter dem Elwosa-Strom in der Seitenleiste (kompakt: erst der beste Treffer, die weiteren auf Klick). Passt nichts, sagt die Hilfe das („Dazu steht nichts in der Hilfe“, bei Fragen ohne Bezug zu PBP „Dazu kann ich nur zur Bedienung von PBP etwas sagen“) und legt einen fertigen Satz für Claude zum Kopieren bereit; den Satz gibt es auch unter einer sicher wirkenden Antwort („Passt das nicht?“). Die Antworten kommen aus einer Suche im Text (`content/hilfe_wissen.json`, beim Release gebaut aus der eingebauten Hilfe, dem Prompt-Katalog und dem Wiki; `scripts/hilfe_wissen_bauen.py`), nicht aus einem Sprachmodell: Sprünge gehen nur auf bekannte Seiten und Reiter, Links nur ins Wiki des Projekts, Prompts nur aus dem Katalog. **Deine Frage wird nicht gespeichert** — nicht in der Datenbank, nicht im Protokoll, nicht im Browser — und die Suche läuft auf deinem Rechner. `release_check.py` prüft, dass die Wissensbasis zu den Quellen passt; die Personenprüfung läuft schon beim Bau. Auch bei einer zu neuen Datenbank (nach einem Rückschritt auf eine ältere Fassung) antwortet die Hilfe: die Frage ist ein POST, damit sie nie in einer Adresse steht, schreibt aber nichts, und der Schema-Schutz lässt sie durch. - **Kurzantwort der lokalen KI (Beta, standardmäßig aus)** (#1233). Unter Einstellungen › Lokale KI lässt sich einschalten, dass die lokale KI über den Karten eine kurze Antwort formuliert. Sie darf nur umformulieren, was in den drei besten Abschnitten steht: die Antwort muss eine der Quellen nennen und darf keine Adresse, keinen Befehl und keinen Menüpfad erfinden, sonst bleibt es bei den Karten. Zu einem unsicheren Treffer wird nie formuliert. Aus ist die Vorgabe, weil die Suche auf ungesehene Fragen nicht gut genug trifft (siehe unten): ein Modell, das aus einem falschen Abschnitt eine glatte Antwort baut, wäre schlimmer als eine Karte, die ihre Quelle nennt. Höchstens zwei Kurzantworten sind gleichzeitig offen; wer schneller fragt, bekommt zur späteren Frage nur die Karten. - **Gemessen, was die Suche kann** (#1233). 125 Fragen in Alltagssprache, in drei Gruppen: 42 beim Einstellen der Suche benutzt (richtiger Abschnitt unter den ersten drei: 40, also 95 %), 41 danach angesehen (40, 98 %), 42 neu geschrieben und zum Einstellen nicht benutzt (**32, also 76 %**; als bester Treffer 26, 62 %). Die Lücke liegt im Wortschatz („Word-Datei“ statt „DOCX“, „Zahl“ statt „Punkte“). Zwei Versuche, sie mit der lokalen KI zu schließen, sind nicht eingebaut: die Zuordnung der KI zu überlassen (qwen2.5:7b, 86 Titel) traf auf den neuen Fragen schlechter als die Suche allein (21 gegen 32 von 42), und typische Fragen je Abschnitt von ihr erzeugen zu lassen (635 Abschnitte, 14 Minuten) brachte auf den neuen Fragen einen Treffer mehr (33 gegen 32) und kostete auf den beiden anderen Gruppen vier (76 gegen 80 von 83). 32 Fragen außerhalb von PBP und 14 zu PBP ohne Antwort in der Hilfe bekamen nie eine sichere Antwort. Gegenprobe: Katalog „hilfe1233“, 36 absichtlich eingebaute Fehler; in der ersten Runde überlebten drei (ein Faktor für „Wo stelle ich … ein“, der auf 125 Fragen keinen Rang änderte und deshalb ausgebaut ist, ein Wiki-Link und eine Schwelle ohne Test): die beiden letzten haben jetzt Tests. Dazu liefen die Kataloge der berührten Dateien (Auto-Update 101 von 102 bei einem begründet gleichwertigen, Installer 45 von 45) noch einmal. ### Changed - **Google Jobs über JobSpy ist als defekt gekennzeichnet** (#1159). Mit python-jobspy 1.2.0 liefert Google keine Stellen mehr („Google returned no job data“; gemessen am 02. und 12.10.2026: null Treffer). Die Quelle `jobspy_google` steht jetzt unter „Defekte Quellen“ mit Grund und Weg, fällt aus der gespeicherten Auswahl, wird beim Speichern abgelehnt und in keinem Lauf mehr eingeplant. Die Browser-Quelle „Google Jobs (im Browser)“ behauptet nicht mehr, die automatische decke dasselbe Portal ab, und die Browser-Liste nennt die defekte Schwester nicht noch einmal. Wer ausschließlich diese Quelle nutzte, findet Google weiter über den Browser. - **Die drei alten Werkzeugnamen entfallen** (#1148 Punkt 13): `stelle_bewerten` (jetzt `stelle_einordnen`), `stelle_analyse_speichern` (jetzt `stelle_urteil_speichern`) und `jobtitel_vorschlagen` (jetzt `jobtitel_speichern`) galten seit v1.7.135 „einen Release lang“. Die Parameter sind dieselben; wer eigene Anleitungen mit den alten Namen hat, ersetzt sie. Damit hat PBP drei Werkzeuge weniger; mit den drei neuen (#1162, #1184, #1187) sind es 281 Werkzeuge. - **Zwei Schreibweisen desselben Parameters werden verstanden** (#1148 Punkt 9, Rest): `firma`/`company`, `titel`/`title`, `dokument_id`/`document_id`, `job_hash`/`stellen_hash` und `bewerbung_id`/`application_id` stehen in den Signaturen nebeneinander. Die Middleware übersetzt einen Namen, den das Werkzeug nicht kennt, in den bekannten derselben Gruppe (`services/parameter_aliase`) — nie einen, den es selbst kennt, nie bei Mehrdeutigkeit, vor der Normalisierung der Kennungen. - **Die Zahl der Werkzeuge wird gezählt, nicht erinnert** (#1148 Punkt 4): `scripts/werkzeug_inventar.py` zählt zur Laufzeit, prüft die Wiki-Seite „MCP-Tools“ gegen das Inventar (`--wiki`) und ergänzt die fehlenden Werkzeuge in einem erzeugten Abschnitt (`--wiki-ergaenzen`). Docstrings und Dokumente tragen keine Zahlen mehr (47, 66, 70, 177 … stimmten nirgends); README, CLAUDE.md und der neueste CHANGELOG-Eintrag werden von einem Test gegen die Laufzeitzahl gehalten. - **Wer „nur lesend“ heißt, schreibt nichts — oder steht mit Grund auf einer Liste** (#1148 Punkt 5, Rest): ein Test ruft jedes so markierte Werkzeug auf einer Datenbank mit Profil auf und vergleicht die Datenbank davor und danach. Drei benannte Ausnahmen (der einmalige Datenschutz-Hinweis, die Standard-Kategorien der Kontakte, das abgeleitete Neigungsprofil), jede mit Begründung; ein neuer Schreibzugriff fällt auf. - **Die sichtbare Werkzeugliste hat ein Budget** (#1148 Punkt 12): rund 200 KB (etwa 50.000 Token) liest Claude zu Beginn jedes Gesprächs; ein Test hält die Liste und das größte einzelne Werkzeug gegen eine Grenze, statt dass ein neues Werkzeug mit zwei Seiten Parameterbeschreibung unbemerkt hinzukommt. - **Dashboard › Offen: rot ist nur, was überfällig ist** (#1174). Bisher färbte eine einzige überfällige Zeile die ganze Karte rot (Rahmen, Hintergrund, Wecker-Symbol) — seit der Zusammenlegung der Listen in v1.7.31, auch in der Stable-Version. Jetzt bleibt die Karte ruhig; rot sind die Überschrift „Überfällig“ und das Datum der überfälligen Zeilen. „Heute“ und „Diese Woche“ sind unverändert. - `kontakt_verknuepfen(ziel_typ='firma')` ordnet jetzt wirklich einer Firma zu (bisher ein Eintrag ins Leere ohne Leser) und nimmt `von` und `bis`. - `firma_kontext` liest über die Firmen-Einträge (Schreibweisen, Mutter- und Tochterfirma, jeder Treffer nennt `via`) und liefert die Daten über dieselbe Funktion wie die Dashboard-Ansicht. - Die Warnung bei einer nur in den Notizen genannten Firma beginnt mit „Prüfen:“ (statt „Pruefen:“). - Ein zweiter Klick auf „Firmen“ (Reiter oder Seitenleiste) führt aus einer geöffneten Firma zurück in die Liste. - **Der erste Start ohne Profil ist ein Weg statt vier Karten** (#1170 U5 bis U7). Ohne Profil zeigen „Stellen“, „Bewerbungen“ und „Suche & Bewertung“ jetzt eine einzige Karte mit einem Knopf, „Lebenslauf hochladen“ — statt Kennzahlen aus Nullen, Filtern, einer Quellenkarte und Knöpfen, die ohne Profil nichts tun können. Derselbe Knopf steht auf dem Dashboard und öffnet denselben Dialog; er heißt für das erste Profil „Dein Profil anlegen“ und fragt nach deinem Namen (vorher: „Neues Profil anlegen — Lege ein weiteres Profil … an“ und „Profilname, z. B. IT Consulting“). „Suche & Bewertung“ trägt ohne Profil nicht mehr die Überschrift „Profil“. - **Leere Seiten sagen, was sie sind** (#1170 U8): Aufgaben nennt, woher Aufgaben kommen, „Neue Aufgabe“ sieht nicht mehr deaktiviert aus, und die Statistik zeigt ohne Stellen und Bewerbungen einen Satz statt einer Wand aus Nullen. - **Der Schalter „Dokumentenanalyse“ sperrt auch, was Dokument- und Mailtexte liefert** (#1147 Punkt 3). Die Karte versprach „Ist ein Schalter aus, gibt PBP für diesen Bereich nichts an Claude weiter“; gesperrt waren aber nur die Werkzeuge, mit denen Claude etwas auslöst (elf). `dokument_lesen` (voller Text), `emails_anzeigen` (Mailtext, Absender) und `dokumente_zur_analyse` lieferten weiter — wer die Dokumentenanalyse aus Datenschutzgründen abschaltete, glaubte, seine Dokumente gingen nicht an Claude. Jetzt sind sie gesperrt und nennen den Weg (Dashboard, oder den Schalter einschalten). Bewusst frei bleiben Profil, Bewerbungen und Stellen — ohne sie arbeitet fast nichts mehr; der Satz in den Einstellungen sagt das, und wer gar nichts weitergeben will, trennt PBP in Claude Desktop. Je Werkzeug ein Test, in beide Richtungen. - **Ein Google-Treffer ohne Original wird nicht mehr angelegt** (#1184 a). Eine Karte aus Google Jobs ist eine Behauptung: vier von fünf Stellen eines Browserlaufs trugen nur Kopfdaten („Volltext nicht abrufbar“) und keinen Anker. Ohne Detail-URL des Arbeitgebers UND ohne Anzeigentext legt `stelle_manuell_anlegen` die Stelle nicht an (`google_original_fehlt`), sondern gibt Claude den Auftrag, das Original zu suchen — mit vorbereiteten Suchen (Karriereseite des Arbeitgebers, StepStone, XING, LinkedIn, Indeed; #1184 e), einer Prüfliste (Muttermarke gegen Konzernunternehmen, Ort und Arbeitsmodell aus dem Original) und dem Folgeaufruf. `force=True` bleibt der Ausweg; mit URL oder Text allein wird weiter angelegt, unter Vorbehalt. - **Google-Benachrichtigungen liefern Hinweise, keine Stellen mehr** (#1184 d). Die Mail nennt nur Titel, Firma, Ort und Portal, jeder Link führt auf eine Google-Suche, und derselbe Treffer kommt mit verschiedenen Orten (Mail: Hamburg, Anzeige: Köln). Daraus stand bisher eine bewertete Stelle ohne Text mitten in der Liste. Jetzt entsteht ein Hinweis: eingeklappt über der Liste der Stellen (Stellen › „Hinweise aus Google-Benachrichtigungen“, mit „Original suchen“ und „Verwerfen“) und für Claude über das neue Werkzeug `stellen_hinweise_verwalten`. Derselbe Treffer in mehreren Mails ist ein Hinweis, die Orte stehen nebeneinander; was schon eine Stelle ist, steht gleich als „angelegt“ da; legst du die Stelle später mit dem Original an, ist der Hinweis erledigt. - **Ein gemeinsamer Weg übernimmt die Ernte jeder Browser-Quelle** (#1187 Stufe 2). Bisher hatte nur LinkedIn ein Werkzeug, das mehrere Treffer auf einmal übernimmt; für StepStone, XING, Indeed, Google Jobs, Heise und eigene Quellen blieb `stelle_manuell_anlegen`, Stelle für Stelle. Neu `browser_treffer_uebernehmen(quelle, treffer, dry_run=True, rohtreffer, volltexte_gelesen, login_fehlt)`: derselbe Anlageweg wie `stelle_manuell_anlegen` (Blacklist, Dubletten auch gegen Bewerbungen und Aussortiertes, Anker, Auflagen der Quelle, Scoring), die Vorschau ist die Vorgabe und schreibt nichts. Eine Karte ohne Volltext wird angelegt (`ohne_volltext`; `stellenbeschreibung_nachladen` ergänzt sie), ein Google-Treffer ohne Original nennt die Suche danach. Ein Urteil wird nur mit gelesenem Volltext gespeichert. `aussortieren_grund` sortiert nach dem Lesen aus — mit einem Grund aus der Liste der Ablehnungsgründe und der Herkunft „von Claude“: zu finden unter Stellen › Aussortiert, mit einem Klick zurückzuholen, und der nächste Lauf legt sie nicht noch einmal an. Alle Anleitungen an Claude nennen das Werkzeug. - **Jeder Browserlauf steht in der Auswertung der Quellen** (#1187 Stufe 2). Ein Lauf ohne eine einzige Anlage hinterließ nirgends eine Spur: weder im Trichter noch in der Langzeit-Auswertung. Jetzt schreibt jeder echte Lauf — auch `linkedin_treffer_uebernehmen` — eine Zeile in `scraper_runs` (Rohtreffer, angelegt, Trichtertext), auch bei null Anlagen. Den Gesundheitszustand der Quelle fasst er nicht an: „0 neu“ aus dem Browser schaltet keine Quelle ab, und ein fehlender Login ist ein eigener Befund (`wartet_auf_login`), kein Lauf. - **Das Dashboard sagt, was nach einem Lauf wartet** (#1187 Stufe 3). Die Karte „Stellen zu prüfen“ nennt, wie viele Stellen auf dein Urteil warten (mit Sprung in die Liste, Filter „Prüfstand: nur ungeprüfte“), und wie viele Claude nach dem Lesen aussortiert hat — mit Titel, Firma, Grund und „Zurückholen“ je Zeile, ohne die Karte zu verlassen. Die Zahl folgt derselben Regel wie die Liste (ohne laufende Bewerbungen, ohne Blacklist), ein Test hält beide gegeneinander. Neu `GET /api/stellen/zu-pruefen`; ohne wartende Stellen gibt es die Karte nicht. - **Die Seitenleiste klappt in schmalen Fenstern von selbst ein** (#1170 U15). Das Dashboard neben Claude Desktop (halbe Bildschirmbreite, rund 680 px) behielt die 240 px breite Leiste; der Inhalt bekam etwa 380 px, bei 420 px blieb ein Streifen. Unter 900 px ist die Leiste jetzt ohne eigene Wahl eingeklappt (60 px, beim Daraufzeigen schwebt sie auf). Deine Wahl wird je Fensterbreite gemerkt: im breiten Fenster einklappen verkleinert das schmale nicht, und eine früher gemerkte Wahl gilt im breiten Fenster weiter. - **Der Vorspann der Stellen-Seite ist kürzer** (#1170 U16). Bis zur ersten Stelle lagen rund 900 px. Die Karte „Diese Quellen laufen nur über den Browser“ steht nur noch, wenn du Browser-Quellen gewählt hast (die „optionalen“, als defekt geführten Quellen allein waren für jede Installation da und kosteten rund 180 px; sie stehen weiter unter Einstellungen › Quellen im Detail), und die vier Kennzahlen stehen ab 1024 px in einer Zeile (vorher ab 1280 px). Gemessen mit sechs Stellen: erste Stelle bei y = 730 statt 908. - **Die Einstellungen haben eine Navigation, und die Zahlen in der Seitenleiste nennen ihr Wort** (#1170 U17). Dieselben 16 Namen standen zweimal da — als Reiter der Seite und als Unterpunkte in der Seitenleiste, die bis zum unteren Rand reichten und den Elwosa-Chat aus dem Bild schoben. Jetzt führen die Reiter der Seite (Grundlagen vorn, Erweitert dahinter, der gewählte markiert); der Pfad oben nennt den Reiter. Die vier orangen Zahlen meinten Verschiedenes und erklärten sich nur per Hover: sie tragen jetzt ihr Wort (Profil „8 Lücken“, Stellen „143 aktiv“, Bewerbungen „2 fällig“, Einstellungen „1 Hinweis“); der Hover-Titel nennt weiter, was genau gemeint ist. - **Die Kopierknöpfe sagen, was sie tun** (#1170 U10). Die Hilfe nannte den Knopf „Kopieren“, er heißt „Mit Claude“; die Meldung hieß „Anleitung kopiert“, die Hilfe-Seite „Prompts“. Jetzt steht überall derselbe Name, und die Prompts-Seite sagt, dass Prompt und Anleitung dasselbe sind. „Gespräch mit Claude starten“ kopierte einen langen Text mit Werkzeugnamen und ohne Vorschau, obwohl die Hilfe den Satz „Starte die Ersterfassung“ nennt: jetzt kopiert der Knopf diesen Satz (und sagt es), die ausführliche Anleitung bleibt auf Wunsch („Ausführliche Anleitung kopieren“). Updates, Speicher & Downloads, Firmen und die Quellenliste haben je einen „… erklären mit Claude“-Knopf; er legt einen Auftrag in die Zwischenablage, der nichts ändert, ohne dich zu fragen. - **Lange Erklärtexte lassen sich einklappen** (#1170 U11). Einzelne Hinweise ließen sich schließen, die langen Erklärabsätze der Seiten nicht — wer PBP kennt, las sie bei jedem Besuch wieder. Die Willkommenskarte „So arbeiten Dashboard und Claude zusammen“, der Sicherheitsabsatz bei den Updates, der Absatz zur Fahrstrecke und die Einleitung von Speicher & Downloads tragen jetzt eine Überschrift als Schalter; die Wahl wird je Text gemerkt. Unter Einstellungen › Erscheinungsbild klappt der Schalter „Erklärtexte aufgeklappt zeigen“ (Vorgabe an, wie bisher) alle ein oder aus und setzt die Einzelwahlen zurück. Ohne Browserspeicher bleibt alles aufgeklappt. - **Jede Ansicht eines Falls trägt eine feste Weg-Leiste** (#1171, Baustein 3). Stelle, Bewerbung, Kontakt und Firma zeigen oben, unter dem Titel (die Firma im festen Kopf der App), eine Leiste, die beim Scrollen stehen bleibt: links der Rückweg („‹ Zurück zu …“), in der Mitte die anderen Ansichten desselben Falls — nur was es gibt, mit Anzahl; ein Klick öffnet das Objekt, bei mehreren zeigt eine kurze Auswahl die Einträge —, rechts der nächste Schritt, der zum Zustand passt (Stelle: bewerten, Bewerbung anlegen, zur Bewerbung; Bewerbung je Status: Lebenslauf und Anschreiben, Nachfassen, Gespräch vorbereiten, Angebot prüfen, aus der Absage lernen; Kontakt: Nachfassen bei der Person; die Firma erfindet keinen Schritt und zeigt ihre Bewerbungen, Stellen, Personen und Dokumente) mit den anderen Wegen dahinter. Die Wörter sind überall dieselben („Zur Stelle“, „Zur Bewerbung“, „Zur Firma“, „Zum Kontakt“). Die Rechnung steht an einer Stelle (`lib/wegleiste.js`, mit Knoten-Test und Wächter-Test im Browser). Zwei Folgen: der Dialog ist jetzt eine Spalte aus Kopf, Leiste, scrollendem Inhalt und Fuß — die Fußzeile der Timeline wurde bei kleinen Fenstern angeschnitten —, und der Hinweis „Bereits beworben“ an einer Stelle öffnet die Bewerbung (er führte nur auf die Seite). - **Der Rückweg führt dorthin zurück, woher du kamst** (#1171, Baustein 4). Wer aus der Bewerbung zur Stelle springt, sieht dort „‹ Zurück zu Bewerbung: …“ und landet mit einem Klick wieder in der Timeline. Die Zurück-Taste der Maus (Alt+←) schließt den obersten Dialog, statt die Seite zu verlassen; wer einen Dialog selbst schließt, hinterlässt keinen toten Schritt im Verlauf. - **Listen zuerst: die erste Zeile jeder Liste liegt ohne Scrollen da** (#1171, Baustein 5). Vor der ersten Stelle lagen rund 900 Pixel — vier Kennzahlkacheln, ein Hinweiskasten, der Suchstand, die Filter —, vor der ersten Bewerbung rund 600; der Hauptknopf der ersten Zeile lag unter der Falz. Jetzt ist der Kopf der Listen „Stellen“ und „Bewerbungen“ EINE Zeile: die Zahlen in einem Satz, der eine Hinweis mit seinem Knopf, bei den Stellen der Suchstand — und ein Schalter, der die Kennzahlen und die Erklärung aufklappt (Vorgabe zu, die Wahl wird je Liste im Browser gemerkt). „Zuletzt aktualisiert“ steht in der Filterkarte, die Filterkarten sind niedriger, und eine leere Zeile über den Dokumenten ist weg. Gemessen bei 1366 × 768 und 1920 × 1080: die erste Stelle samt ihren Knöpfen liegt bei y 404 bis 717, die erste Bewerbung samt „Timeline“ bei 483 bis 691 (vorher 500 bis 812 und 616). Ein Wächter-Test misst alle fünf Listen bei beiden Größen; die Tabelle aller Wege steht in `docs/internal/wegetabelle-1171.md`. - **Ein Scan ohne Text nennt den Weg zur Texterkennung** (#1170 U12). Der Server meldete beim Hochladen längst, dass ein PDF nur ein Bild ist und die Texterkennung fehlt (`ocr: erforderlich`); die Dokumente-Seite las das Feld nie, und wer sein erstes eingescanntes Zeugnis hochlud, bekam ein Dokument ohne Text und keinen Hinweis. Jetzt steht der Satz da, mit dem Knopf „Texterkennung einrichten“ (Einstellungen › Erweiterungen); ein Fehlschlag der Texterkennung wird ehrlich genannt. Der zweite Teil von U12 — beim ersten Start fragen, wie Updates installiert werden sollen — ist **bewusst nicht** gebaut: das Wort des Nutzers vom 02.10.2026 ist, dass PBP nur zusammen mit der Meldung über eine neue Version fragt, nie beim bloßen Start. Die Tabelle entsteht erst beim ersten Hinweis (kein Schema-Bump) und gehört zum Bereich „Stellen“ beim Löschen. - **Die Aufräum-Runde („Bewerbungen im Blick behalten“) läuft einmal am Tag von selbst** (#1139). In der Linie 1.7 hatte sie keinen automatischen Auslöser: der Knopf „Jetzt prüfen“ war der einzige Aufrufer, die Oberfläche versprach aber „PBP legt an und schließt ab“ und „der Rest folgt mit der Automatik“ — wer ihn nie drückte (die meisten), hatte keine Nachfass-Ketten, keine ablaufenden Bewerbungen und keine nachgeladenen Anzeigentexte. Jetzt stößt der Planer die Runde einmal am Tag an (Vorgabe „Täglich“, 90 Sekunden nach dem Start fällig; Einstellungen › Automatik, dort auch „Aus“ und längere Abstände), im Hintergrund und mit eigener Spur unter den Hintergrundläufen. Knopf und Planer teilen eine Sperre; der letzte Lauf nennt, ob er von selbst oder per Knopf kam. In Claude: `automatik_status` und `automatik_setzen` (neu `aufraeumen_intervall_tage`, `bewerbungen_abschliessen`). - **Das Abschließen von Bewerbungen ist ein eigener Schalter, Vorgabe aus** (#1139): „Beim täglichen Lauf von selbst abschließen“. Es ändert den Stand einer Bewerbung — das geschieht nicht über Nacht, nur weil jemand ein Update installiert hat. Der Knopf „Jetzt prüfen“ schließt weiter immer ab. Die übrigen Schritte (Erinnerungen nachlegen, Anzeigentexte nachladen, Anzeigen prüfen, Mails und Dokumente einordnen) laufen von selbst, jeder mit seinen eigenen Schranken (lokale KI an, Lernen erlaubt, Quellen ohne Abruf-Erlaubnis ausgenommen). ### Fixed - **LinkedIn-Daten holen schrieb an den Werkzeugen vorbei** (#1200 A1; seit v1.7.0-beta.21). Der kopierte Auftrag verlangte `PUT /api/contacts/` (eine Adresse des Dashboards, die Claude Desktop nicht erreicht) mit den Spaltennamen der Datenbank und legte rund 1,5 KB JavaScript in die Zwischenablage. Jetzt liest Claude die Seite im angemeldeten Chrome-Tab und schreibt mit `kontakt_bearbeiten` bzw. `kontakt_anlegen` zurück (vorhandene Angaben ersetzt es nur nach Rückfrage); der Dialog sagt bei einem neuen Kontakt, dass er danach ohne Speichern geschlossen wird. - **Vier Anleitungen für „Bewerbung erstellen“ widersprachen sich** (#1200 A2). `bewerbung_vorbereitung` exportierte den Lebenslauf vor der Bewertung und nannte „Score < 70“, `auto_bewerbung` legte ohne Prüfung eine Bewerbung an („nicht unnötig fragen“), die Jobsuche bot PDF an. Jetzt verweisen alle drei auf den Ablauf `bewerbung_schreiben` (prüfen, dann DOCX, keine Dublette); die Vorbereitung hält zusätzlich das Urteil zur Stelle fest. - **Der Absagegrund aus dem Gespräch fehlte in „Aus Absagen lernen“** (#1200 A3). Das Coaching speicherte ihn als Notiz, die Musteranalyse liest das Feld `rejection_reason` — und für eine schon abgelehnte Bewerbung gab es keinen Weg dorthin außer einem zweiten Statuswechsel. Neu: `bewerbung_bearbeiten(..., ablehnungsgrund=...)` trägt ihn nach, nur bei abgelehnten Bewerbungen (sonst kommt der Hinweis auf `bewerbung_status_aendern`, und nichts wird geändert). - **Ein einzelnes Dokument blieb nach der Analyse offen** (#1200 A4). Die Vorlage sagte „nenne die passenden PBP-Tools“; Status, Nachfrage und Abschluss passierten nicht. Jetzt nennt jede Vorlage die Aufrufe zum Eintragen (Absage, Eingang, Termin, Angebot, Notiz) und schließt mit `dokument_status_setzen(..., "angewendet")`. Außerdem bekam ein Dokument, das PBP schon als Absage, Eingangsbestätigung, Angebot oder Einladung erkannt hatte, die allgemeine Vorlage — die Typen werden jetzt zugeordnet. - **Die Stellen-Seite zeigte „0 EUR“ und „0 – 0 EUR“, wenn keine Stelle ein Gehalt nennt** (#1200 B1). G61 hatte das im Dashboard behoben, die Stellen-Seite rechnete mit einer eigenen Kopie weiter (`Number(null)` ist 0). Beide Kacheln kommen jetzt aus einer Funktion (`gehaltsKacheln`). - **Der Prompt-Wächter prüft jetzt alle Stellen, an denen ein Auftrag für Claude entsteht** (#1200 A12): auch `dashboard.py`, die Dokument-Vorlagen, `services/*` und die Texte im Frontend; er meldet Werkzeuge, die es nicht gibt, und fehlende Pflichtangaben. Gefunden und behoben: `dokumente_batch_analysieren(dokument_ids=...)` (den Parameter gibt es nicht), `stilarchiv_speichern(kind="cv")` ohne Text, `stellen_anzeigen(beschreibung_fehlt=True)`, `profil_erstellen(plz=..., city=...)` ohne Namen, `profil_bearbeiten(bereich='projekt')` ohne Aktion und `bewerbung_stellen_anzeigen` als Suche nach der Bewerbung zu einer Firma. - **Das Nachladen der Anzeigentexte und die Prüfung der Adressen kamen nie über die ersten Stellen hinaus** (#1139; seit v1.7.0). Beides nahm ohne Reihenfolge die ersten 24 bzw. 30 Kandidaten nach Zeilennummer; standen die im Backoff, wurden die übrigen nie versucht (gemessen: 30 Stellen ohne Text, 24 im Backoff, 0 versucht, 6 nie). Jetzt gilt eine feste Reihenfolge — nie versuchte zuerst, dann die am längsten wartende. Der Fehlzähler verfällt nach 14 Tagen (ein Zähler aus der Zeit vor 1.8.0 ohne Zeitstempel sofort: wer seit Monaten im Backoff steht, bekommt eine frische Runde), und ein Netzfehler oder „zu viele Anfragen“ zählt nicht gegen die Stelle — drei in Folge beenden die Runde, statt ohne Netz jede Stelle bis zum Zeitlimit zu versuchen. Der automatische Lauf holt bis zu 16 Texte und prüft bis zu 25 Adressen je Lauf (der Knopf 8 und 10), mit Pause dazwischen. - **Die Texterkennung ließ sich ohne Administratorrechte nicht installieren** (PP26, Testlauf 11.10.2026; seit beta.0). Das Setup verlangte Rechte und ließ sich aus einem Programm ohne Erhöhung nicht starten (`WinError 740`); der Knopf versprach „kein Admin nötig“. Jetzt startet PBP es ohne Abfrage, sucht den Ort, an dem es „nur für mich“ installiert (`%LOCALAPPDATA%\Programs\Tesseract-OCR`), merkt ihn, lädt das deutsche Sprachpaket dorthin und entfernt alles wieder mit dem eigenen Deinstallationsprogramm des Setups (Oberfläche und Deinstaller, nur an diesem einen Ort). - **Der Installer ließ den entpackten Ordner leer stehen und im Temp-Ordner die Kopie seines Aufräum-Helfers und `pip.zip` (1,7 MB) liegen** (PP24, PP25; Testlauf 11.10.2026). Der Helfer starb am ersten `PermissionError` beim gehaltenen Ordner statt 200-mal zu wiederholen; `get-pip.py` arbeitet jetzt in einem eigenen, danach gelöschten Ordner. - Die Gefahrenzone zeigte bei „Stellen“ Markdown-Sternchen als Text. - Die Tesseract-Komponente wurde ohne Prüfsumme gestartet (#1152). - **Die Seitenleiste meldete eine neue Beta, die Update-Seite sagte „Aktuell“ und hatte keinen Knopf** (#1179; seit beta.16). Zwei Auskünfte zur selben Frage: die allgemeine Prüfung (`/api/update-check`) nennt einer Beta-Installation auch neuere Betas, die feste Quelle des Auto-Updates (`/api/auto-update`) kennt nie eine Vorabversion. Die Seitenleiste folgte der ersten, die Update-Seite der zweiten, und die Hinweiszone des Dashboards zeigte bei verfügbarem Auto-Update gar nichts. Jetzt sagen alle drei dasselbe und zeigen den Weg (ZIP laden, Installer starten); installiert wird eine Vorabversion nie von selbst — außer auf einer Vorab-Installation mit dem Schalter „Vorabversionen automatisch“ (#1199, Vorgabe aus). - **Ein Klick auf einen Treffer der Suche oben tat nichts** (#1177; seit v1.7.0, auch in 1.7.154). Die Suche lieferte die Zieladresse im Format `#bewerbungen?id=…`; das Dashboard liest seit H31 nur noch `#seite/kennung` und fiel bei allem anderen still auf das Dashboard zurück. Der Klick setzte außerdem nur die Adresse (bei gleicher Adresse passiert dann nichts), und die Seiten Dokumente, Kalender und Profil nahmen keinen Sprung mit Kennung entgegen — dasselbe traf „Zum Dokument“ in der Firmen-Zeitleiste und einen Termin ohne Bewerbung im Block „Offen“ (die Absichten `dokumentId` und `terminId` hatten keinen Leser). Jetzt gehen Treffer und Links aus Claude denselben Weg, jede Seite liest ihren Sprung, die Stellen-Treffer tragen die öffentliche Kennung, und ein Test verlangt zu jedem Schlüssel, den ein Weg erzeugt, einen Leser auf einer Seite. - **Die Seite „Stellen“ lief im Leerlauf auf Hochtouren** (#1171): sie fragte pausenlos, ob gerade eine Suche läuft — gemessen 270 bis 470 Anfragen pro Sekunde und ein zu zwei Dritteln beschäftigter Hauptthread des Browsers, während niemand etwas tat (alle anderen Seiten: 0,0 %). Ursache war eine Funktion in der Abhängigkeitsliste des Abfrage-Effekts (`useEffectEvent` ist bei jedem Zeichnen eine neue Funktion; jede Antwort setzt den Zustand neu, der Effekt startete sich nach jeder Antwort selbst neu). Die Zeile steht seit März 2026 (v0.23.0) im Code, auch in der Stable-Version v1.7.153. Nachher: 0,2 % und 0,6 Anfragen pro Sekunde. Zwei Wächter-Tests halten es fern: einer sieht jede der elf Seiten im Leerlauf an (gesund sind 1 bis 2 Anfragen in drei Sekunden), einer lässt keine neuen Effekt-Ereignisse in Abhängigkeitslisten zu (`test_kein_effekt_ereignis_in_einer_abhaengigkeitsliste`); acht ältere Stellen (App, Ablegen von Dokumenten, Einrichtungsassistent) sind als Bestand benannt, bei ihnen wurde nichts Auffälliges gemessen. - Jede Seite lud beim Start zweimal und blendete dabei kurz die schon gezeichnete Liste aus (ein offenes Fenster ging mit, die Leseposition sprang an den Anfang). In „Stellen“ und „Bewerbungen“ erscheint die Ladeanzeige nur noch beim ersten Laden; „Kalender“ zeigt sie ohnehin nur einmal; „Profil“, „Statistik“ und „Einstellungen“ zeigen sie weiterhin bei jedem Laden. Der Welle-4-Test `test_g62_karte_eine_kernaussage_und_ein_menue`, der an diesem Flackern scheiterte, ist wieder stabil. - Was Claude schreibt, kam im offenen Fenster nicht an: das Urteil zu einer Stelle und eine Notiz in der Timeline erschienen erst nach Schließen und Öffnen. - Benutzernamen mit einem Zeichen außerhalb der Windows-Zeichentabelle (ł, ş, ř, griechisch, kyrillisch; Umlaute waren nie betroffen) ließen mehrere Schritte scheitern (#1163): die Claude-Konfiguration und die Sicherung vor dem Update im Installer, den Selbsttest des Auto-Updates und die Texterkennung (Tesseract liest Pfade in der ANSI-Tabelle). Behoben: die Ausgabe wird als UTF-8 gelesen und abgesichert, das Seitenbild geht über die Standardeingabe, die Sprachdaten über den Kurzpfad. Mit Tests; die Praxisprobe auf einem solchen Rechner steht aus. - Eine Absage an der Bewerbung beim Vermittler fehlte in der Historie des Endkunden (#1080). - **Aus der Praxisprobe auf einem frischen Windows 11 (05.10.2026):** - Der Reiter „Erweiterungen“ stürzte auf jedem Rechner ab, auf dem die Texterkennung noch fehlt (ein Variablenname war beim Umlaut-Austausch an einer Stelle geändert worden). Ein Absturz in einem Reiter der Einstellungen lässt die anderen Reiter jetzt in Ruhe. - Der Knopf „Deinstaller starten“ (Einstellungen › Gefahrenzone) öffnete unter Windows nie ein Fenster, sondern meldete „Kein Terminal gefunden“ — die Flags des Prozessstarts schließen sich aus. Behoben, mit einem Test, der das Betriebssystem wirklich fragt. - Der Deinstaller räumt jetzt auch die Konfiguration von Claude aus dem Microsoft Store auf (der Eintrag blieb stehen, Claude meldete danach bei jedem Start einen Server ohne Programm) und schließt das Dashboard-Fenster. - Der Deinstaller ließ unter Windows rund 830 MB liegen, die der Installer außerhalb von PBP geladen hat: den Browser für Quellen (Playwright, `%LOCALAPPDATA%\ms-playwright`, rund 700 MB) und den Zwischenspeicher von pip (rund 125 MB) — ohne es zu erwähnen (macOS und Linux fragen). Er fragt jetzt zum Schluss, mit Ort und Größe; die Vorgabe ist **Behalten**, und nur ein einzelnes „j“ löscht. Der Browser-Ordner geht ganz, von pip nur der Unterordner `Cache` (die Einstellungsdatei eines anderen Programms bleibt). Dieselben Ordner nutzen andere Programme mit, deshalb im Zweifel behalten. - Die Fehlermarke `[!!]` erschien in Installer und Deinstaller als `[]`: unter `EnableDelayedExpansion` verschluckt `cmd` das Paar `!!`. Betroffen waren zehn Meldungen („… konnte nicht entfernt werden“ u. a.); wer einen Fehler hatte, sah nur leere Klammern vor dem Text. Maskiert; ein Test verbietet die ungeschützte Schreibweise. - Der Deinstaller ließ nach dem Start über den Knopf einen leeren Ordner `%LOCALAPPDATA%\BewerbungsAssistent\app` liegen (Schritt [5/7] meldete „konnte nicht entfernt werden“): das neue Fenster hatte diesen Ordner als Arbeitsordner, und ein Prozess hält seinen Arbeitsordner fest. Gefunden bei der Gegenprobe der Reparaturen auf demselben Rechner; das Fenster öffnet jetzt im Temp-Ordner, und die Datei verlässt den Ordner, bevor sie sich verschiebt. - Weitere Funde derselben Gegenprobe, behoben: - Die verschobene Kopie des Deinstallers (`PBP-Deinstaller-.bat`, rund 15 KB) blieb in `%TEMP%` liegen; sie räumt sich jetzt selbst weg. - Der Deinstaller schrieb die Konfiguration von Claude in der Formatierung von Windows PowerShell neu (rund siebenmal so groß). Jetzt nimmt er nur den PBP-Eintrag aus dem Text (ein leeres `"mcpServers": {}` bleibt stehen, siehe Known Issues), der Rest bleibt Byte für Byte; das Ergebnis wird geprüft, und wo der Text-Weg nicht passt, gilt der bisherige. - Das Dashboard-Fenster zeigt nur noch Warnungen und Fehler (die Log-Datei bekommt weiter alles; `BA_CONSOLE_LEVEL=INFO` zeigt alles). Vorher schoben sich Protokollzeilen in die Frage „Claude jetzt neu starten?“ und füllten den ersten Start mit Dutzenden Zeilen. - Der Browser öffnet sich erst, wenn das Dashboard antwortet (auf einem frischen Rechner zeigte Chrome „Verbindung verweigert“), und nur einmal: der Installer unterdrückt das Öffnen im von ihm gestarteten Fenster und öffnet selbst, nach seiner Prüfung. - Am Ende jeder gelungenen Installation stand „Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch.“, und die Einstellung zum Aufräumen des Installationsordners (nie, fragen, immer) wurde nie gelesen. `cmd` schneidet bei einem Befehl in `for /f` mit mehr als zwei Anführungszeichen das erste und das letzte ab; ein zusätzliches Paar um den ganzen Befehl behebt das. - Das Dashboard startete nicht, solange die Frage „Claude jetzt neu starten?“ unbeantwortet blieb; der Installer wartete umsonst und öffnete „Verbindung verweigert“. Die Frage kommt jetzt erst, wenn das Dashboard läuft. - Der Installer startet Claude aus dem Store am Ende (statt „nicht gefunden“); die Ausgabe enthält keine Sonderzeichen mehr, die die Konsole verstümmelt. - Auf den Karten der Erweiterungen und Quellen standen Kennungen aus der Planung („…(E19)“); entfernt. - Das Titelbild des Wikis zeigte seit v1.7.137 eine Fehlerkarte („Dieser Bereich ist abgestürzt“); der Screenshot-Generator prüft jetzt jede Aufnahme. - **Die Ordner für Lebensläufe, Anschreiben und Vorlagen: drei Fehler, zwei seit v1.7.59, einer seit v1.7.140 und in der Karte seit Beta 16** (#1173). (1) Die Karte „Deine eigenen Ordner“ und der Hinweis in der Gefahrenzone („Bleibt: Ablageordner …“) nannten den Ordner des Nutzers nie: gespeichert wird je Profil, gelesen wurde ohne Profil, die Liste war immer leer — ein Test blieb dabei grün, weil er die Einstellung auf dem anderen Weg schrieb. (2) „Zurücksetzen“ (das Feld leeren) endete im Dashboard mit „HTTP 400“, nur das Werkzeug für Claude kannte den Platzhalter „-“; die Regel steht jetzt an einer Stelle (`ablage.ordner_setzen`). (3) Bei einem ungültigen Pfad stand am Feld ebenfalls nur „HTTP 400“ statt der Begründung („Diesen Ordner gibt es nicht …“); die Antwort nennt den Grund jetzt als `error`, und die Oberfläche liest ihn. Eingebettet steht der Satz zum verschwundenen Ordner nur noch einmal da. - **Beim Start ohne laufendes Claude Desktop stand ein Python-Fehler im Dashboard-Fenster** (#1182; seit v1.7.150, auch in der stabilen Version). Die Prüfung „läuft Claude Desktop?“ las die Ausgabe von `tasklist` als Text mit der Standardkodierung (cp1252). Läuft Claude nicht, antwortet Windows deutsch „… Kriterien ausgeführt.“; das „ü“ schreibt die Konsole als Byte `0x81` (cp850), das in cp1252 nicht definiert ist — der Lese-Thread brach ab, ein `UnicodeDecodeError` stand im Fenster, und die Prüfung stimmte nur zufällig. Jetzt liest sie Bytes und sucht nach dem Namen (`services/konsole.py`); die PowerShell-Aufrufe (Desktop-Pfad, Verknüpfung „Ollama beenden“, Store-Start von Claude) lesen in der Kodierung der Konsole, mit Ersatzzeichen statt Abbruch (ein Desktop-Pfad mit „ü“ brach sonst ebenso ab). Ein Wächter-Test verlangt bei jedem `text=True` im Quelltext eine Kodierung. Gegenprobe: Katalog „konsole“, 11 absichtlich eingebaute Fehler. - **Stellen aus Google Jobs behaupteten ein Arbeitsmodell und einen Ort, die nur auf Googles Karte standen** (#1184; seit `stelle_manuell_anlegen`, auch in der stabilen Version). Ein Treffer mit „Beliebiger Ort, Homeoffice“ wurde als `remote` angelegt: die Entfernung fiel weg, der Rahmenscore stieg, und die Stelle — in Wahrheit rund 570 km entfernt und nur mit „mobilem Arbeiten“ — wäre nach oben sortiert worden. Jetzt gelten Remote und Ort einer Google-Stelle erst, wenn das Original vorliegt (Detail-URL des Arbeitgebers und Anzeigentext, `services/google_angaben`): davor entscheidet der Text über das Arbeitsmodell (sonst `unbekannt`, dieselbe Regel wie bei JobSpy, B63), und die Entfernung wird nicht aus Googles Ort gerechnet. Wird das Original mit `stelle_bearbeiten` nachgetragen, holt PBP beides nach. Gegenprobe: Katalog „google“, 33 absichtlich eingebaute Fehler. - **Eine aussortierte Stelle wurde beim Anlegen nicht erkannt** (#1184). Die Prüfung beim Anlegen verglich nur laufende Bewerbungen und aktive Stellen, und der Textvergleich braucht einen Anzeigentext, den Kopfdaten aus Google nicht haben. Jetzt steht eine aussortierte Stelle gleicher Firma und gleichen Titels — oder gleichen Titels am gleichen Ort unter anderem Firmennamen (Muttermarke gegen Konzernunternehmen) — als `aussortierte_dublette` im Ergebnis, mit dem Aussortier-Grund. Die Stelle wird weiter angelegt: gemeldet, nicht geblockt. - **Ein Lauf über die Browser-Quellen legte keine einzige Stelle in PBP an** (#1187; seit der Browser-Suche, auch in der stabilen Version). Ein Lauf über sechs Quellen mit rund 1.300 Rohtreffern endete mit 0 angelegten Stellen: Die Anleitungen ließen Claude auswählen: der Auftrag je Quelle, der Handoff einer Quelle und der Workflow-Prompt der Jobsuche sagten, „passende“ Stellen zu übernehmen und Verworfenes im Chat zu melden, der LinkedIn-Plan ließ schon vorab nach Titeln aussieben, und `google_jobs_url` nannte keine Regel für Grenzfälle — die Auswahl traf Claude, der Mensch sah nur den Bericht, und der Katalogtext von `stelle_manuell_anlegen` sagte dazu „nicht für Treffer aus einer Jobbörse“. Jetzt steht in jeder Anleitung dieselbe Regel (eine Fassung, `services/browser_handoff.REGEL_IM_ZWEIFEL`): im Zweifel eintragen; eine Stelle zu viel ist besser als eine zu wenig, ob sie taugt, entscheidet der Mensch in PBP. Urteil und Zweifelsgrund gehen an die Stelle (`stelle_urteil_speichern`), dazu ob die Anzeige noch offen ist; schon Aussortiertes, das nach dem Lesen fachlich passt, holt `stelle_reaktivieren` zurück; aussortiert wird nur Offensichtliches, mit Grund. Der Bericht im Chat ersetzt die Einträge nicht. Ein Test verlangt die Regel in jeder Anleitung, ein zweiter verbietet die alte Formulierung im ganzen Quelltext. - **Die Vorschau der Sammelübernahme prüfte nichts** (#1187; `linkedin_treffer_uebernehmen`, Vorgabe `dry_run=True`). Sie kehrte vor jeder Prüfung zurück und meldete „alle angelegt“, wo der echte Lauf Dubletten, laufende Bewerbungen oder die Blacklist abgewiesen hätte. Jetzt stellt sie dieselben Fragen wie die Anlage (Blacklist, gleiche Kennung, laufende Bewerbung, aktive und aussortierte Stellen, Hinweise), schreibt aber nichts — auch kein Protokoll der Blacklist und keinen Kontakt — und zählt dieselbe Stelle, die zweimal im Aufruf steht, nur einmal. `aussortierte_dublette` erscheint jetzt auch im Eintrag der Sammelübernahme und in der Zeile des Trichters („schon aussortiert“). Der Hinweis zur aussortierten Dublette lässt den Zweifel zu: gilt der Grund weiter, wird die neue Stelle mit demselben Grund eingeordnet; passt sie fachlich, bleibt sie aktiv. Gegenprobe: Katalog „browser“, 30 absichtlich eingebaute Fehler. - **Bei jedem Skill nannte Claude nur die Spitze, nicht den Stand von heute** (#1190; seit v1.6.0, auch in der stabilen Version). `profil_zusammenfassung` gab in `skills_liste` nur `level` aus — die höchste Stufe, die ein Skill je hatte. Die Oberfläche zeigt den aktuellen Stand und bei ruhenden Skills „ruht (Spitze x/5)“. Ein Skill, den jemand seit Jahrzehnten nicht mehr einsetzt, ging so als Experte an eine fremde Plattform. Jetzt nennt jeder Eintrag `level_aktuell`, `level_spitze`, `ruht`, den Zeitraum (`seit`, `bis`) und `zuletzt_genutzt`; ist ein Skill beendet und kein heutiges Niveau eingetragen, steht `level_aktuell` auf leer, und Claude soll nachfragen, statt die Spitze zu nehmen. Das mehrdeutige Feld `level` entfällt; der Text der Zusammenfassung und die Antwort „bereits vorhanden“ sagen dasselbe. Gegenprobe: Katalog „skillstand“, 11 absichtlich eingebaute Fehler. - **Die Gefahrenzone zählte mitgelieferte Vorgaben als deine Daten** (#1170 U9). Eine frische Installation zeigte „Bewerbungen: 7 Datensätze — Enthält Namen und Mailadressen Dritter“; die sieben waren die mitgelieferten Kontaktkategorien (ebenso „Einstellungen: 35“: Regler und Ablehnungsgründe). Gezählt wird jetzt, was du angelegt oder verstellt hast; die Vorgaben stehen als „ohne N mitgelieferte Vorgaben“ daneben und gehen beim Leeren mit. - **Sichtbare Texte in Umschrift** (#1170 U13): „fuer“, „einfuegen“, „Datensaetze“, „oeffnen“, „Menue“ und weitere Stellen, zusammen rund 30 (Elwosa-Chat, Einstellungen, Kontakte, Dokumente). Der Textprüfer der CI las Text neben einem Ausdruck (`{n} Datensaetze`) nie und verlor hinter einem verirrten Anführungszeichen alle Zeichenketten der Datei; beides ist behoben, er findet jetzt 0 Stellen. - **In der Statistik lief „AUSSORTIERT“ in die Nachbarkachel** (#1170 U14). - **Kleinigkeiten** (#1170 U18): „Aufräumen“ ist dort nicht klickbar, wo nichts liegt; die Kopfzeile der Kontakte nennt im Reiter „Firmen“ die Firmen und trägt dort nicht die Knöpfe der Kontaktliste; die lokale KI zeigt keinen rohen Fehlertext („“) mehr; die Firmenkarte trägt keinen Platzhaltersatz. - **Ein Ordnername mit Ausrufezeichen, Apostroph oder Klammer brach den Installer** (#1149 Punkt 8; seit v1.4). Das Ausrufezeichen verschwand unter der verzögerten Expansion aus jedem Pfad (der Installer suchte `src` in einem Ordner, den es nicht gibt: „ZIP nicht entpackt“), ein Apostroph machte aus `Expand-Archive` einen Syntaxfehler („als Administrator ausführen“), und eine Klammer wie in `PBP-1.8.0 (1)` — so legt der Browser eine zweite Kopie an — beendete einen Block und ließ den Ordner liegen. Jetzt lehnt der Installer ein Ausrufezeichen am Anfang mit dem Weg („nach `C:\PBP` verschieben“) ab, PowerShell bekommt Pfade über die Umgebung statt eingebettet, und in Blöcken stehen Pfade nur noch als `!VAR!`. Ein Wächter-Test hält beides in allen drei Batch-Dateien fern. - **Das Desktop-Backup des Deinstallers scheiterte bei einem Apostroph im Benutzernamen — ohne Warnung** (#1149 Punkt 8). Der Befehl wurde zum Syntaxfehler mit Exit 1, und Exit 1 heißt dort „kein Datenordner“: kein Backup, keine Warnung, und danach durfte man endgültig löschen. Die Pfade kommen jetzt über die Umgebung; nur Exit 2 und höher gilt als Fehlschlag, und das Protokoll sagt nicht mehr „erstellt“, wenn nichts entstand. - **Der Deinstaller räumte beim Aufruf über „Apps & Features“ den Temp-Ordner aus** (#1149 Punkt 9a). Er kopiert sich dann nach `%TEMP%` und läuft von dort; „der Ordner neben dem Skript“ war damit `%TEMP%` selbst, und `python\`, `install_log.txt` und `python-*-embed-amd64.zip` dort wurden gelöscht. Aufgeräumt wird nur noch, wenn das Skript im entpackten PBP-Ordner liegt (nicht umgezogen und nicht in `%TEMP%`/`%TMP%`). - **macOS und Linux: beim Update blieb das Dashboard der alten Fassung auf dem Port** (#1149 Punkt 6 und 4). Der neue Start meldete „läuft bereits“, und der Health-Check bestätigte die alte Fassung; ein fremdes Programm, das HTTP 200 liefert, galt ebenfalls als „läuft“. Beide Installer beenden vor dem Start ein laufendes `start_dashboard.py` (erst höflich, nach fünf Sekunden hart — nie den Prozess, den Claude Desktop startet, nie ein fremdes Programm), fragen `/api/health` und vergleichen die Fassung: antwortet eine andere, steht das da, samt dem Weg („Claude Desktop komplett beenden und neu starten“). - **macOS und Linux: eine kaputte Claude-Konfiguration wurde als „MCP-Eintrag war nicht vorhanden“ gemeldet** (#1149 Punkt 9d). Der Deinstaller unterscheidet jetzt „entfernt“, „kein Eintrag“, „nicht lesbar“ und „nicht schreibbar“, legt vor dem Schreiben eine Sicherungskopie (`.pbp-backup`, wie unter Windows) an und schreibt über eine Zwischendatei. - **Zahlen und Texte** (#1149 Punkt 12): `server.json` stand auf 1.7.0 und `uv.lock` auf 1.5.7 (ohne `python-jobspy` und `pypdfium2`; entfernt — eine veraltete Sperrdatei ist schlimmer als keine); das Release-Tor `release_check.py` prüft jetzt auch `frontend/package.json`, `server.json` und eine vorhandene `uv.lock` (`--fix` zieht die JSON-Dateien nach); `installer/install.ps1` ist ein ehrlicher Hinweis auf `INSTALLIEREN.bat` statt eines zweiten, veralteten Installers; `docs/LIESMICH.txt` verspricht unter macOS nicht mehr „du brauchst nichts zu installieren“ (Python 3.11 ist nötig); README und LIESMICH nennen die Windows-Warnung („Herausgeber nicht verifiziert“, „Weitere Informationen → Trotzdem ausführen“); `err_pip` und `err_packages` sagen, was als Nächstes zu tun ist (Internet prüfen, `INSTALLIEREN.bat` nochmal starten; die Daten bleiben erhalten). - **Eine Google-Stelle umging den Schutz, wenn die Quelle anders geschrieben war** (#1201). Der Schutz aus #1184 (ein Treffer ohne Original wird nicht angelegt; Ort und Arbeitsmodell der Karte gelten nicht) erkannte die Quelle nur am exakten Schlüssel `google_jobs`. „Google Jobs“, „google-jobs“ oder „Google“ legten die Stelle ohne Original und mit dem Arbeitsmodell der Karte an. Alle Schreibweisen gelten jetzt als dieselbe Quelle und werden als `google_jobs` gespeichert (eine Funktion, ein Ort). - **Nachladen: ein verfallener Fehlzähler lebte beim nächsten Abruf wieder auf** (#1202, #1139). Der Lauf erneuerte den Zeitstempel vor dem Zählen; ein Fehlschlag nach dem Verfall setzte den Zähler auf 4 statt auf 1, und ein Netzfehler hielt die Stelle im Backoff. Der verfallene Zähler wird jetzt zu Beginn des Versuchs gestrichen. - **Hinweise aus Alert-Mails** (#1184 d): ein Umlaut am Wortanfang oder doppelter Leerraum verhinderte, dass der Hinweis beim Anlegen der Stelle als „angelegt“ galt (#1203; SQL-`LOWER()` kürzt nur ASCII — jetzt eine Normalisierung auf beiden Seiten), und Hinweise jenseits der 500 neuesten waren weder auflistbar noch über ihre Kennung erreichbar (#1205). Werkzeug und Endpunkt blättern jetzt (`offset`, `gesamt`, `weitere`), die Suche liest die Zeile direkt. - **Die Vorschau der Browser-Übernahme zählte bei ähnlichen Titeln mehr als der Lauf** (#1204). Zwei ähnliche Titel derselben Firma in einer Übergabe: die Vorschau meldete „2 angelegt“, der Lauf legte eine an und nannte die zweite „schon als aktive Stelle da“. Die Vorschau prüft jetzt mit derselben Funktion und demselben Firmen-Kanon gegen die bisher gezählten Einträge. - **Dokumenttyp ändern mit einem Nicht-Text ergab HTTP 500 statt 400** (#1206). Eine Zahl, Liste oder ein Objekt als Typ wird wie ein unbekannter Typ abgelehnt, mit der Liste der erlaubten Typen. - **Windows: ein Ausrufezeichen im Profilpfad ging verloren** (#1207). Der Installer prüfte nur den Startordner; `%LOCALAPPDATA%`, `%TEMP%` und `%USERPROFILE%` verloren das Zeichen unter der verzögerten Expansion, und der Installer rechnete mit einem Ordner, den es nicht gibt. Installer und Deinstaller prüfen jetzt alle drei Orte, bevor sie etwas ändern, und brechen mit einem klaren Satz ab (der Deinstaller nennt dazu den Handgriff). - **Weg-Leiste der Stelle: bei ausgeblendeten Stellen fehlte der Prüfstand** (#1208). Der Hauptknopf sagte „Stelle bewerten“ statt „Bewerbung anlegen“, weil die Liste „Aussortiert“ ihn nicht rechnet. Der Dialog holt ihn einmal einzeln vom Server (der Server entscheidet, nicht die Oberfläche). - **Die Zurück-Taste bei geänderter Eingabe in einem Dialog fror die Seite ein** (#1210; seit beta.17). Alt+← oder die Zurück-Taste der Maus bei einem halb ausgefüllten Dialog (Notiz in der Timeline, „Bewerbung anlegen“) ließ eine Schleife endlos laufen: die Seite antwortete nicht mehr, und der Browser beendete nach rund 100 Sekunden den Tab. Jetzt erscheint die Rückfrage „Deine Eingaben sind noch nicht gespeichert. Verwerfen?“, und „Weiter bearbeiten“ behält Dialog und Eingabe. - **Die Stellen-Seite kannte nur die 30 jüngsten Bewerbungen** (#1211). „Zur Bewerbung“ in der Weg-Leiste, das Abzeichen „Bereits beworben“ und der Zähler fehlten für ältere; die Leiste legte eine zweite Bewerbung nahe. Die Seite kennt jetzt alle nicht archivierten Bewerbungen. - **Eine Stelle, die aus einer Bewerbung aufging, bot „Bewerbung anlegen“ an** (#1212) und schloss damit nur den Dialog. Der Dialog kennt jetzt die Bewerbung, aus der er aufging: der Hauptknopf heißt „Zur Bewerbung“ und führt dorthin zurück. - **Escape schloss bei offenem Menü der Weg-Leiste den ganzen Dialog** (#1213). Escape schließt zuerst das Menü (der Fokus kehrt zum Auslöser zurück), ein zweites den Dialog. - **Der Pfad oben verlor den Reiter der Einstellungen**, wenn man die Seite in der Seitenleiste erneut anklickte (#1214). Nur ein Seitenwechsel setzt den Pfad zurück. - **Nach einem Sprung aus einem Dialog blieb ein toter Schritt im Verlauf** (#1215): die Zurück-Taste tat einmal nichts Sichtbares. Der Verlaufseintrag des Dialogs wird zum Eintrag des Ziels. - **macOS und Linux: der Installer** (#1216–#1220, #1149): `$PYTHON` stand ohne Anführungszeichen — ein Leerzeichen im Ordnernamen (`PBP-1.8.0 2`, so legt macOS einen zweiten Download an) beendete die Installation ohne ein Wort (#1216); der Funktionstest öffnete über den Import des Servers die ECHTE Datenbank, bevor er auf ein Temp-Verzeichnis umbog (#1217); die Prozesssuche traf jedes `start_dashboard.py` und jeden Testlauf, der den Namen als Argument trägt — jetzt bleibt ein nachweislich fremdes Skript unberührt (#1218); der Schluss sagte „abgeschlossen“ trotz stehengebliebenem MCP-Eintrag, der Fehlerzweig nach `_setup_claude.py` war unter `set -e` unerreichbar, ein gescheitertes `pip --upgrade pip` beendete den Installer lautlos, das Windows-Aufräumen versprach das Löschen ohne den Exit-Code zu lesen, `ja` galt nicht als Ja, und eine ersetzte, unlesbare Claude-Konfiguration stand nur mitten im Ablauf (#1219); und ohne lesbare Fassung galt jede antwortende Fassung als „ok“ (#1220). - **Die Texte zu Vorabversionen widersprachen dem Schalter „Vorabversionen automatisch“** (#1221). Auf einer Vorab-Installation sagen Karte, Hinweis, Erklärung, Hilfe und Elwosa jetzt, was seit #1199 gilt (Schalter an: nächste Vorabversion derselben Linie von selbst; Schalter aus: nur auf Wunsch). Auf einer stabilen Installation bleibt „nie von selbst“ — das stimmt weiter. - **Das Auto-Update für Vorabversionen installierte die gefundene Vorabversion nicht** (#1222; seit rc.3, #1199). Der Schalter „Vorabversionen automatisch“ machte eine Vorabversion zum Kandidaten, und die Prüfung meldete „neu“ — aber der Start der Installation, ihre Vorbedingung und das Manifest kannten nur stabile Fassungen: „Jetzt installieren“ scheiterte mit „Vorabversionen werden nie automatisch installiert“. Jetzt gilt an allen drei Stellen dieselbe Regel wie bei der Auswahl (Schalter an UND selbst eine Vorabversion, nie ein Linienwechsel; Prüfsumme, Signatur und Selbsttest wie immer), und der Archiv-Bauer prüft auch das Manifest einer Vorabversion mit dem Leser der Installation. Ein Test fährt den Weg rc.3 → rc.4 mit einem echten Archiv bis zur Umschaltung; der Beweis im Betrieb steht noch aus. - **Windows: der Deinstaller endete nach der Backup-Frage** (#1224; Fund des dritten Laufs auf dem Werkstatt-PC, nur in den Vorabversionen). Zwei Kommentarzeilen mit Klammern im Block der Backup-Frage (#1149) ließen `cmd` den Stapel beim Lesen abbrechen: das Fenster schloss sich, und die Fragen nach den Bewerbungsdaten und nach den rund 830 MB Zusatzdateien kamen nicht mehr. Die Kommentare stehen jetzt außerhalb des Blocks; ein Wächter prüft alle `.bat`-Dateien auf Klammern in Kommentaren innerhalb von Blöcken, und ein Test führt den Abschnitt mit echtem `cmd` aus. - **Die Update-Seite zeigte „Aktuell“, obwohl die Prüfung keine Antwort bekam** (#1225; Fund des dritten Laufs, nur in den Vorabversionen). Das Etikett hing nur an „keine neue Version“ und „kein Neustart“; darunter stand „Die Verbindung zu GitHub hat nicht geklappt“, die Seitenleiste sagte „Update-Stand unbekannt“. Jetzt steht „Aktuell“ nur mit einer Antwort der Quelle, sonst „Stand unbekannt“. - **„Vorabversionen automatisch“: nach dem Einschalten nannte die Karte einen falschen Grund** (#1226; Fund des dritten Laufs, nur in den Vorabversionen). Das gemerkte Prüfergebnis kannte den Stand des Schalters nicht, und die Karte sagte „PBP wechselt die Versionslinie nie von selbst“, obwohl dieselbe Vorabversion nach „Jetzt prüfen“ mit „Jetzt installieren“ kam. Jetzt trägt das Ergebnis den Stand des Schalters, das Umschalten prüft sofort neu (Dashboard und Werkzeug), eine mit Schalter gefundene Vorabversion steht nach dem Ausschalten nicht mehr als „neu“ da, und solange die letzte Prüfung den Schalter nicht kannte, sagt die Karte „steht erst nach der nächsten Prüfung fest — klicke auf „Jetzt prüfen““ statt eines Satzes, den sie nicht belegen kann. - **Ohne Ollama kostete die Abfrage der lokalen KI unter Windows vier Sekunden** (#1227; Fund des dritten Laufs, betrifft auch ältere Versionen). Die Seite „Erweiterungen“ lud rund 6 Sekunden: die Firewall des Rechners beantwortete Verbindungen zu einem geschlossenen Port der Schleife nicht, und die Abfrage wartete je Adresse (`::1` und `127.0.0.1`) volle 2 Sekunden — im Handler, der den ganzen Server anhielt. Jetzt fragt eine kurze Verbindungsprobe (je höchstens 0,5 s), die Abfrage geht an die Adresse, die annimmt, und der Handler läuft im Threadpool. Ein laufendes Ollama wird wie bisher erkannt (IPv4 und IPv6). - **Windows „Apps & Features“ zeigte nach einem Auto-Update die alte Fassung** (#1228; Fund des dritten Laufs, nur in den Vorabversionen). `DisplayVersion` schrieb nur der Installer. Jetzt gleicht PBP den Eintrag beim Start mit der laufenden Fassung ab — nur einen vorhandenen Eintrag, nur diesen Wert, nur wenn er auf den laufenden Programmordner zeigt. - **Texte schickten nach „Stellen › Ausgeblendet“, der Reiter heißt „Aussortiert“** (#1260; betrifft auch 1.7). Die Karte „Stellen zu prüfen“, der Hinweis nach der Jobsuche, die Blacklist im Profil, die Einstellungen der Auto-Aussortierung, die Hinweiskarte im Reiter und zwei Antworten an Claude nannten einen Reiter, den es nicht gibt. Jetzt heißt es überall „Stellen › Aussortiert“; ein Test hält die Texte und das gebaute Dashboard gegen die Beschriftung des Reiters. - **Der Hilfe-Dialog fragte nach einer getippten Frage „Deine Eingaben sind noch nicht gespeichert“** (#1247; Fund des vierten Laufs, nur in den Vorabversionen, seit rc.4). Wer im Reiter „Frag mich“ etwas eintippte und den Dialog schloss, bekam die Rückfrage für ungespeicherte Formulare — obwohl der Reiter selbst sagt, dass die Frage nicht gespeichert wird; dasselbe galt für das Filterfeld der Prompts. Der Dialog hat kein Formular und schließt jetzt ohne Rückfrage; Dialoge mit Formular (neuer Kontakt, Notizen) fragen weiter. - **„Beim nächsten Start nutzen“ für eine neuere installierte Fassung hieß „Zurückgeschaltet“** (#1229; Fund des dritten Laufs, nur in den Vorabversionen). Verlauf und Rückfrage kannten nur den Rückweg. Jetzt steht beim Schritt nach vorn „Umgeschaltet“, die Rückfrage nennt die Richtung, und die ausdrückliche Wahl hebt die Zurücknahme dieser Fassung auf. - **Eine abgelehnte Aktion der Update-Seite nannte nur „HTTP 400“** (#1243; Meldung aus dem Beta-Test, rc.3 → rc.4, nur in den Vorabversionen). „Jetzt installieren“ und die anderen Knöpfe der Seite zeigten bei einer Ablehnung nur den Statuscode, obwohl der Server den Grund mitschickt („Ein Update läuft gerade.“, „Vorabversionen werden nur installiert, wenn …“). Jetzt steht dieser Satz im Hinweis. Der Anlass war #1222: rc.3 kann eine Vorabversion nicht selbst installieren (erst ab rc.4 behoben); wer rc.3 nutzt, installiert rc.4 einmal von Hand. - **Repost-Warnung „Vermittler“: ein Firmenname im Notiztext machte keinen Endkunden** (#1198; Beitrag aus PR #1230, betraf auch 1.7, dort in v1.7.158 behoben). Eine neue Stelle bekam „diese Bewerbung nennt Firma F als Endkunden“, weil F nur als Partner im Notiztext stand, und das Nachtragen des Endkunden half der Stelle nicht. Jetzt ist ein eingetragenes Feld „Endkunde“ maßgeblich (nennt es eine andere Firma, gibt es keine Warnung), ein Treffer nur im Freitext steht als offene Vermutung da („ob es der Endkunde ist, bleibt offen“), und der Hinweis nennt den eingetragenen Vermittler. Das gilt für Stellenliste, Analyse, Firmen-Kontext und die Anlage von Hand. - **PII-Prüfer: ein Platzhalter mit Umlaut galt als echte Firma** (#1231; nur das Prüfwerkzeug im Repository, keine Wirkung auf die Anwendung). `scripts/scrub_pii.py` verglich eine Firmenangabe mit `FIKTIVE_FIRMEN` nur in der Schreibweise der Liste: ein Beitrag, der denselben Platzhalter mit „ü“ schrieb, bekam einen Firmentreffer. Jetzt gelten beide Schreibweisen (Text und Liste werden in Umschrift verglichen); eine ähnliche echte Firma bleibt ein Treffer. - **Eine interne Notiz schloss die offene Nachfass-Erinnerung** (#1232; betraf auch 1.7 seit 1.7.142, dort in v1.7.158 behoben; Folge von #1123). `bewerbung_notiz` behandelte JEDE Notiz als Kontakt mit dem Arbeitgeber: wer eine Bewerbung anlegte (das legt den 21-Tage-Nachfass an) und gleich danach eine interne Notiz ergänzte, verlor die Erinnerung nach Minuten, und die Antwort sagte „erledigt“, obwohl `hinfaellig` gespeichert wurde. In einem echten Bestand waren zwei von drei Schließungen durch Notizen zu Unrecht. Jetzt hat `bewerbung_notiz` den Parameter `art`: `intern` (Vorgabe) lässt die Erinnerung stehen, `kontakt` macht sie hinfällig (wie bisher), `nachfrage` setzt sie auf `erledigt`; eine unbekannte Art wird abgewiesen, bevor etwas geschrieben wird. Die Antwort nennt den gespeicherten Zustand (`nachfassung_hinfaellig`, `nachfassung_erledigt`) und den Weg zurück (`nachfass_planen`); dasselbe Feld nennt der verschobene Termin. Die Anleitungen (Mail des Arbeitgebers, Projekt-Update, Gesprächsfeedback, Vermittler-Korrespondenz, Gesprächsprotokoll aus der Rückführung) nennen `art="kontakt"`. Alte, zu Unrecht geschlossene Erinnerungen werden nicht von allein geöffnet: das entscheidet der Mensch je Fall. - **Ein Wiedergänger-k.o. aus einer Bewerbung, einer Dublette oder einer toten Anzeige** (#1234; betraf auch 1.7, dort in v1.7.159 behoben). Zwei Stellen derselben Firma, die aus der Liste gingen, weil du dich beworben hast (`bewerbung_erstellt` ist das Gegenteil einer Ablehnung), zählten als „zweimal aussortiert“: eine gelesene, empfohlene Stelle stand in `stellen_anzeigen` auf NICHT_EMPFOHLEN, sank unter alle anderen und fiel bei `nur_empfohlen` ganz heraus. Auch die Automatik nach einer Suche hätte so eine Stelle ohne Rückfrage aussortiert (`auto:bewerbung_erstellt:wiedergaenger`). Jetzt zählen nur Gründe, die ein Urteil über die Passung sind: `bewerbung_erstellt`, `bereits_beworben`, `duplikat` und `veraltet_url` zählen nie (eine Liste, `ablehnungsgruende.KEIN_URTEIL_GRUENDE`, für Wiedergänger, Firmen-Historie und Automatik). Die Stellenliste macht nur noch aus einem fachlichen Grund ein k.o. und fragt dafür dieselbe Funktion wie die Analyse (`wiedergaenger.ist_fachlicher_ko`); ein anderes Muster steht als Hinweis (`wiedergaenger_hinweis`), nicht als Urteil. Liegt ein gelesenes Urteil vor, steht es neben dem k.o. (`empfehlung.gelesene_analyse`); das k.o. schlägt es weiter (#671). Dazu: „Head of …“, „Chief …“ und „Director …“ sind Rollenwörter und kein Fachgebiet — zwei Head-of-Stellen derselben Firma waren Wiedergänger, nur weil beide „head“ heißen. - **Mehrdeutige Ortsnamen bekamen still den erstbesten Treffer** (#1235; betraf auch 1.7, dort in v1.7.159 behoben). Eine Stelle in „Rosengarten“ stand mit 24 statt rund 500 km als nah in der Liste: den Namen gibt es mehrfach, und PBP nahm den Treffer mit dem höchsten Gewicht, ohne es zu sagen. Jetzt fragt PBP bis zu acht Treffer ab. Liegt ein zweiter Ort desselben Namens mehr als 50 km entfernt und wiegt fast so viel (Abstand unter 0,10; Frankfurt, Halle oder Offenbach haben einen klaren Spitzenreiter und bleiben aufgelöst), ist der Ort mehrdeutig: keine Entfernung statt einer geratenen, und `herkunft.entfernung` nennt den Grund samt den Orten. Nennt die Anzeige direkt hinter dem Namen eine PLZ („74538 Rosengarten“) oder ein Bundesland, wird damit noch einmal gefragt; ein Ort mit PLZ („21224 Rosengarten“) war schon immer eindeutig. Ein mehrdeutiger Wohnort wird als solcher benannt („ergänze die PLZ“) statt als „nicht aufgelöst“. Der Bestand wird nachgeprüft: beim Nachholen nach einer Suche fragt PBP je Lauf bis zu 40 Orte ohne PLZ neu (Zeilen des Ortsspeichers aus früheren Fassungen gelten als ungeprüft; große Städte und von Hand gesetzte Entfernungen bleiben unberührt). Was die Anzeige klärt, bekommt eine Entfernung, der Rest steht auf „unbekannt“ und nicht mehr als „nah“. - **Eigene Einstellungen im PBP-Eintrag von Claude Desktop bleiben beim Überinstallieren erhalten** (#1238; betraf auch 1.7, dort in v1.7.159 behoben). Was unter `env` des Eintrags `bewerbungs-assistent` steht (ein verlegter Datenordner, ein Port, der Schlüssel des optionalen API-Wegs), ging beim Installieren mit dem Setup mit Fenster (`installer/setup_gui.py`) und mit `switch_mode.py` ohne Hinweis verloren; `INSTALLIEREN.bat`, `INSTALLIEREN.command` und `install.sh` behielten es seit v1.7.145. Jetzt gilt für alle Schreiber dieselbe Regel (wie `_setup_claude.eintrag_bauen`): Was im bisherigen `env` steht, bleibt; `BA_DATA_DIR` wird nur gesetzt, wenn keiner da ist; `PYTHONPATH` folgt immer der Installation. Ein Test listet alle Dateien, die den Server-Block der Konfiguration anfassen, und schlägt bei jeder unbekannten an. - **Eine laufende Stelle zählt bis heute, nicht bis 2026** (#1237; betraf auch 1.7, dort in v1.7.159 behoben). Bei einer Stelle ohne Enddatum rechnete PBP an drei Stellen bis zu einer festen Jahreszahl; ab dem 01.01.2027 hätte bei jeder laufenden Stelle ein Jahr gefehlt (die Karrierestufe der Auto-Aussortierung wäre an den Grenzen 4/5 und 9/10 Jahre zu spät gekippt, die Jahre Berufserfahrung in der Recruiter-Wertung zu kurz ausgefallen). Jetzt rechnen alle drei mit der Uhr (`services/uhr.heute()`), die Auto-Aussortierung mit derselben Funktion wie die Einordnung des Profils, und ein Wächter hält feste Jahreszahlen aus dem Quelltext. Schon heute ändert sich ein Sonderfall: eine zweite Station, die neben einer laufenden ab Oktober 2026 beginnt, wurde als „Lücke“ gemeldet, weil das Ende der laufenden fest auf März 2026 stand. - **Der Installer trug PBP in Dateien ein, die die aktuelle Store-Fassung von Claude nicht liest** (#1245; Fund des vierten Werkstatt-PC-Laufs, betraf auch 1.7, dort in v1.7.159 behoben). Claude Desktop aus dem Microsoft Store (Paketversion 2.42304) liest seine Konfiguration aus `%LOCALAPPDATA%\Claude-Data\claude_\claude_desktop_config.json`, nicht mehr aus `%APPDATA%\Claude` oder dem Paketordner unter `Packages`. Der Installer schrieb dorthin, meldete „Claude Desktop konfiguriert“, und Claude startete PBP nie; das Dashboard sagte richtig „nicht verbunden“. Jetzt kennt `_setup_claude.py` den neuen Ordner, schreibt in jede gefundene Datei und liest den Eintrag danach zurück: „geschrieben“ zählt nur, wenn er in der Datei steht, und eine Datei, die sich nicht schreiben lässt, hält die übrigen nicht mehr auf. Der Deinstaller durchsucht denselben Ordner (vorher stand dort „MCP-Eintrag entfernt“, und der Eintrag blieb stehen) und nennt ihn im Hinweis, falls er von Hand entfernt werden muss. Wer PBP in Claude nicht sieht, führt den Installer einfach noch einmal aus. - **Neue Installationen bekamen `python-jobspy` 1.4.0, das PBP nicht kennt** (#1252; betraf auch 1.7, dort in v1.7.159 behoben). Die Bibliothek erschien am 19.10.2026 in einer umgebauten Fassung (andere Modelle, ein einziger Logger, neue Abhängigkeiten); PBP verlangte aber nur `>=1.2`. Jede frische Installation und jeder Installer-Lauf zog sie, und sechs Prüfungen gegen die Bibliothek schlugen fehl. Jetzt gilt `python-jobspy>=1.2,<1.4` in `pyproject.toml` und im Installer; ein Installer-Lauf setzt ein bereits gezogenes 1.4.0 auf 1.3 zurück. Die Übernahme von 1.4 ist ein eigenes Vorhaben. - **In der Seitenleiste scrollst du in EINEM Bereich: Elwosas Nachrichten und die Antworten der Hilfe, nach der Zeit geordnet** (#1254; nur in den Vorabversionen, seit rc.4). Die Antworten der Hilfe bekamen einen eigenen Bereich zum Scrollen (bis zu 38 % der Fensterhöhe) und drückten Elwosas Verlauf auf wenige Zeilen zusammen (gemessen bei 960 Pixeln Fensterhöhe: von 233 auf 0 Pixel). Jetzt stehen beide hintereinander wie in einem Chat, das Neueste unten; das Feld zum Fragen bleibt fest darunter, vor jeder Reihe von Antworten steht die Zeile „Fragen zur Bedienung“, und nach einer Frage springt der Bereich an den Anfang der Antwort. Der Hilfe-Dialog ist unverändert. - **Elwosas „N neu“ kam bei vollem Verlauf nicht, und der Verlauf rutschte beim Verkleinern aus dem Bild** (#1256; betrifft auch 1.7). Die Marke zählte die Nachrichten der Liste (die Seitenleiste holt nur zehn), und ein Merker aus einem Scroll-Ereignis entschied, ob du am Ende standest. Bei voller Liste kam keine Marke, nach dem Ausblenden einer Nachricht kam eine ohne Anlass, und wurde der Bereich niedriger (zum Beispiel durch die Zeile „Update-Stand unbekannt“ im Kopf), war die letzte Meldung abgeschnitten. Jetzt zählt die Marke nach Kennung (neu ist, was eine größere Kennung trägt als die zuletzt gesehene), die Seite misst beim Eintreffen der Daten, ob du am Ende standest, und der Bereich hält das Ende, wenn sich seine Höhe ändert. - **Die KI lernt nur aus dem, was du selbst aussortiert hast** (#1239; betrifft auch 1.7). Der Auftrag an die lokale KI enthielt unter „deine Beispiele“ und im Block „GELERNT“ auch Urteile der Automatik und Systemgründe wie `bewerbung_erstellt`: der Filter schloss nur das Präfix `auto:` aus, das PBP seit #913 beim Schreiben entfernt. Auf einer Kopie einer echten Datenbank waren alle fünf Beispiele Urteile der Automatik. Jetzt zählen nur Stellen, die du selbst aussortiert hast, mit einem Grund, der ein Urteil über die Stelle ist; ältere Aussortierungen ohne gespeicherte Herkunft (vor 1.7.64) zählen nicht mit (eine Zeile, `UNBEKANNTE_HERKUNFT_ZAEHLT`, ändert das). Die Statistik bleibt, wie sie war. Ob die Bereinigung die Treffer der KI verbessert, ist noch nicht gemessen. - **Die Automatik sortierte Stellen aus, die du zurückgeholt hattest oder die gelesen und empfohlen waren** (#1250; betrifft auch 1.7). Vier Fehler, gefunden beim Abgleich der aktiven Stellen: (1) die lokale KI nahm eine Stelle drei Tage nach dem Zurückholen wieder weg, obwohl ein Urteil BEDINGT an ihr hing — ihr Filter fragte nur den Aussortiergrund, und den löscht das Zurückholen; (2) von drei Kopien derselben Anzeige blieb keine aktiv, die Kopie mit Volltext und Urteil EMPFOHLEN fiel mit der KI-Begründung „Grund: duplikat“; (3) die Wiedergänger-Regel „nach Fachgebiet“ vererbte `befristet` über das Titelwort „data“ an eine unbefristete Anzeige und `falsches_system` über „mdm“; (4) diese Stelle hatte 0 Zeichen Anzeigentext (nachgeladen: SAP-Umfeld, Score von 26 auf 58). Jetzt gilt EINE Regel für jede Automatik (`services/aussortier_schutz.py`, im Nadelöhr `dismiss_job` durchgesetzt): eine Stelle, die du zurückgeholt oder als passend markiert hast (neu: `zurueckgeholt_am`, übersteht jeden Suchlauf; dein eigenes Aussortieren löscht ihn), oder mit Urteil EMPFOHLEN/BEDINGT sortiert keine Automatik aus — außer die Anzeige ist entfernt oder du hast dich beworben. Die KI bekommt solche Stellen nicht vorgelegt, ihre Antwort nennt sie, und eine KI-Begründung „Dublette“ zählt als unsicher. Beim Speichern bleibt genau eine Kopie aktiv; fehlt ihr der Anzeigentext und bringt die Dublette einen, übernimmt sie ihn (samt Neubewertung), und ein späterer Lauf ohne Text löscht einen vorhandenen nicht mehr. Eine Dublette trägt ihre eigene Notiz, nicht die einer vorher greifenden Automatik. Nach Fachgebiet wandern nur noch `falsches_fachgebiet` und `falsche_branche`; ohne Anzeigentext sortiert die Wiedergänger-Automatik nach Fachgebiet nicht aus, bei derselben Firma nicht aus einem Grund, den nur der Text belegt (Fachgebiet, System, Stufe, Abschluss). Die Stelle wird angelegt, der Suchlauf zählt sie („wie frühere Wiedergänger, aber ohne Anzeigentext behalten“). Bereits falsch vererbte Gründe findet `automatik_uebertragungen_pruefen` und holt sie auf Wunsch zurück (auf einer Kopie eines echten Bestands: 332 von 725 Wiedergänger-Aussortierungen, am häufigsten `zu_junior`). Zurückholen vor diesem Vermerk kennt PBP nicht; dort schützt nur ein gespeichertes Urteil. 49 Testfälle, 33 auf dem Ausgangsstand rot; Gegenprobe `automatik1250`. ### Known Issues - Verlorener Schlüssel: Geht der Hauptschlüssel zum Signieren verloren, kann ein mit dem Notfallschlüssel signiertes Update einen neuen eintragen; geht auch der Notfallschlüssel verloren, braucht es eine Installation von Hand. - Auto-Update nur unter Windows. - Nach der Deinstallation bleiben im klassischen Konfigurationsordner von Claude und im Paketordner der Store-App je eine Datei mit leerem `mcpServers` samt Sicherungskopie, die Store-Konfiguration behält `"mcpServers": {}`, und im Temp-Ordner liegt die Selbstkopie des Deinstallationsprogramms von Tesseract (PP27 bis PP29; harmlos). - Ein Add-on für den Ordner-Scan fehlt noch (Outlook-Add-In #480 offen). - Die Suche der Hilfe findet auf Fragen in Alltagssprache, die sie noch nie gesehen hat, den richtigen Abschnitt in rund drei von vier Fällen unter den ersten drei (#1233). Die Karte nennt immer ihre Quelle, und unter jeder Antwort steht der Satz für Claude; die Wissensbasis wird mit jedem Release neu gebaut. - Alte Entfernungen zu Orten, die es mehrfach gibt, werden über mehrere Suchläufe geprüft (#1235): je Lauf höchstens 40 Orte ohne PLZ. Bis ein Ort an der Reihe war, steht an seinen Stellen noch die alte Zahl. *Schema v52 (unverändert), 281 MCP-Werkzeuge, 9814 Tests.* ## 📦 Wie installiere oder aktualisiere ich PBP? **Unter Windows** brauchst du kein Git, kein Python, kein Vorwissen — nur einen ZIP-Download und einen Doppelklick. **Unter macOS** muss vorher einmalig Python 3.11+ installiert sein (siehe unten), **unter Linux** Git und Python. Voraussetzung ueberall: [Claude Desktop](https://claude.ai/download) ist installiert (Linux: alternativ Claude Code CLI). ### Windows (empfohlen, bequemster Weg) 1. **ZIP herunterladen:** [PBP-1.8.0.zip](https://github.com/MadGapun/PBP/archive/refs/tags/v1.8.0.zip) 2. **Entpacken:** Rechtsklick auf die ZIP → *„Alle extrahieren..."* → Zielordner waehlen (z.B. `C:\PBP`). Darin liegt ein Unterordner `PBP-...` — dort hinein wechseln. 3. **Installieren:** Doppelklick auf **`INSTALLIEREN.bat`** 4. Das Setup laedt Python, alle Pakete und Chromium herunter (~3–5 Minuten) und konfiguriert Claude Desktop. 5. Auf dem Desktop liegt jetzt eine Verknuepfung **„PBP Bewerbungs-Portal"** — Doppelklick startet das Dashboard. 6. **Claude Desktop oeffnen** (lief es schon: komplett beenden — Rechtsklick aufs Claude-Symbol unten rechts in der Taskleiste → *Beenden* — und neu starten) und tippen: **„Starte die Ersterfassung"** 7. Taucht PBP nicht auf: Claude Desktop nochmal komplett beenden und neu starten — siehe [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ). ### macOS 1. **Einmalig vorab: Python 3.11+** — am einfachsten der [Installer von python.org](https://www.python.org/downloads/) (Doppelklick), alternativ `brew install python@3.12` 2. **ZIP herunterladen** (siehe Windows-Link) und **entpacken** (Doppelklick; im ZIP liegt ein Unterordner `PBP-...`) 3. **Doppelklick auf `INSTALLIEREN.command`** 4. Falls macOS warnt („kann nicht geoeffnet werden"): Rechtsklick auf die Datei → *„Oeffnen"* → nochmal *„Oeffnen"* ### Linux ```bash git clone --branch v1.8.0 --depth 1 https://github.com/MadGapun/PBP.git cd PBP bash installer/install.sh ``` `v1.8.0` ist die Version DIESES Releases. Ohne `--branch` klont man `main` — den jeweils neusten Entwicklungsstand, nicht unbedingt die stabile Version (#1150). ### Update von einer aelteren Version **Einfach drueberinstallieren** — deine Daten bleiben erhalten: - Windows: `%LOCALAPPDATA%\BewerbungsAssistent\data\pbp.db` - macOS/Linux: `~/.bewerbungs-assistent/pbp.db` Schema-Upgrade laeuft automatisch beim ersten Start, ein Backup wird vorher erstellt (Ordner `data\backups\`). ### Detaillierte Anleitung & Troubleshooting 📖 [Wiki → Installation](https://github.com/MadGapun/PBP/wiki/Installation) · [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ) --- ## [1.8.0-rc.5] - 23.10.2026 — Der Installer findet die Konfiguration von Claude (Release-Kandidat) Korrekturen gegenüber der letzten Vorabversion. Wichtig für alle, die Claude Desktop aus dem Microsoft Store nutzen: PBP trägt sich jetzt dort ein, wo die aktuelle Store-Fassung von Claude nachsieht (bisher meldete der Installer „fertig“, und Claude zeigte PBP trotzdem nicht). Neue Installationen holen außerdem wieder die bekannte Fassung der Jobbörsen-Bibliothek JobSpy statt der neuesten, die PBP nicht kennt. In der Seitenleiste scrollst du jetzt in einem Bereich: Elwosas Nachrichten und die Antworten der Hilfe stehen hintereinander, und „N neu“ meldet sich verlässlich. Die Auto-Aussortierung lernt nur noch aus dem, was du selbst aussortiert hast. Dazu: Die Update-Seite nennt bei einer abgelehnten Aktion den Grund statt nur „HTTP 400“, der Hilfe-Dialog fragt nach einer getippten Frage nicht mehr nach „ungespeicherten Eingaben“, der Installer behält, was du in der Konfiguration von Claude beim PBP-Eintrag ergänzt hast, und eine laufende Stelle zählt für deine Berufserfahrung bis heute. Fünfter Release-Kandidat für 1.8.0 — derselbe Stand wie `1.8.0-rc.4` plus neun Korrekturen aus dem vierten Lauf auf dem Werkstatt-PC, den Hotfix-Rückführungen, der neuen Fassung von JobSpy und zwei Folgeaufträgen zur Seitenleiste; sechs davon betreffen auch die stabile Linie 1.7 (#1237, #1238, #1239, #1245, #1252, #1256). **Wichtig zu wissen:** - **Von rc.4 aus:** Ist „Vorabversionen automatisch“ eingeschaltet (Einstellungen › Erweitert › Updates), bietet PBP rc.5 von selbst an; sonst wie gewohnt das ZIP laden und `INSTALLIEREN.bat` darüber starten. Von rc.3 aus bleibt der Weg von Hand (der Fehler #1222 ist erst ab rc.4 behoben). - **Claude Desktop aus dem Microsoft Store:** Zeigt Claude PBP bisher nicht, den Installer von rc.5 einmal ausführen und Claude danach komplett beenden und neu starten. Die Konfiguration, die Claude liest, liegt bei der aktuellen Store-Fassung unter `%LOCALAPPDATA%\Claude-Data\claude_…\`; der Installer findet sie jetzt selbst. - **Wer PBP seit dem 19.10.2026 neu installiert hat,** hat womöglich JobSpy 1.4.0, das PBP nicht kennt. Der Installer von rc.5 setzt auf die Fassung 1.3 zurück; von Hand geht es in der Eingabeaufforderung mit `"%LOCALAPPDATA%\BewerbungsAssistent\app\python\python.exe" -m pip install "python-jobspy<1.4"` (macOS und Linux, im PBP-Ordner: `.venv/bin/python -m pip install "python-jobspy<1.4"`). ### Fixed - **Der Installer trug PBP in Dateien ein, die die aktuelle Store-Fassung von Claude nicht liest** (#1245; Fund des vierten Werkstatt-PC-Laufs, betrifft auch Stable). Claude Desktop aus dem Microsoft Store (Paketversion 2.42304) liest seine Konfiguration aus `%LOCALAPPDATA%\Claude-Data\claude_\claude_desktop_config.json`, nicht mehr aus `%APPDATA%\Claude` oder dem Paketordner unter `Packages`. Der Installer schrieb dorthin, meldete „Claude Desktop konfiguriert“, und Claude startete PBP nie; das Dashboard sagte richtig „nicht verbunden“. Jetzt kennt `_setup_claude.py` den neuen Ordner, schreibt in jede gefundene Datei und liest den Eintrag danach zurück: „geschrieben“ zählt nur, wenn er in der Datei steht, und eine Datei, die sich nicht schreiben lässt, hält die übrigen nicht mehr auf. Der Deinstaller durchsucht denselben Ordner (vorher stand dort „MCP-Eintrag entfernt“, und der Eintrag blieb stehen) und nennt ihn im Hinweis, falls er von Hand entfernt werden muss. Wer PBP in Claude nicht sieht, führt den Installer einfach noch einmal aus. - **Neue Installationen bekamen `python-jobspy` 1.4.0, das PBP nicht kennt** (#1252; betrifft auch Stable). Die Bibliothek erschien am 19.10.2026 in einer umgebauten Fassung (andere Modelle, ein einziger Logger, neue Abhängigkeiten); PBP verlangte aber nur `>=1.2`. Jede frische Installation und jeder Installer-Lauf zog sie, und sechs Prüfungen gegen die Bibliothek schlugen fehl. Jetzt gilt `python-jobspy>=1.2,<1.4` in `pyproject.toml` und im Installer; ein Installer-Lauf setzt ein bereits gezogenes 1.4.0 auf 1.3 zurück. Die Übernahme von 1.4 ist ein eigenes Vorhaben. - **Eigene Einstellungen im PBP-Eintrag von Claude Desktop bleiben beim Überinstallieren erhalten** (#1238; betrifft auch Stable). Was unter `env` des Eintrags `bewerbungs-assistent` steht (ein verlegter Datenordner, ein Port, der Schlüssel des optionalen API-Wegs), ging beim Installieren mit dem Setup mit Fenster (`installer/setup_gui.py`) und mit `switch_mode.py` ohne Hinweis verloren; `INSTALLIEREN.bat`, `INSTALLIEREN.command` und `install.sh` behielten es seit v1.7.145. Jetzt gilt für alle Schreiber dieselbe Regel (wie `_setup_claude.eintrag_bauen`): Was im bisherigen `env` steht, bleibt; `BA_DATA_DIR` wird nur gesetzt, wenn keiner da ist; `PYTHONPATH` folgt immer der Installation. Ein Test listet alle Dateien, die den Server-Block der Konfiguration anfassen, und schlägt bei jeder unbekannten an. - **Eine laufende Stelle zählt bis heute, nicht bis 2026** (#1237; betrifft auch Stable). Bei einer Stelle ohne Enddatum rechnete PBP an drei Stellen bis zu einer festen Jahreszahl; ab dem 01.01.2027 hätte bei jeder laufenden Stelle ein Jahr gefehlt (die Karrierestufe der Auto-Aussortierung wäre an den Grenzen 4/5 und 9/10 Jahre zu spät gekippt, die Jahre Berufserfahrung in der Recruiter-Wertung zu kurz ausgefallen). Jetzt rechnen alle drei mit der Uhr (`services/uhr.heute()`), die Auto-Aussortierung mit derselben Funktion wie die Einordnung des Profils, und ein Wächter hält feste Jahreszahlen aus dem Quelltext. Schon heute ändert sich ein Sonderfall: eine zweite Station, die neben einer laufenden ab Oktober 2026 beginnt, wurde als „Lücke“ gemeldet, weil das Ende der laufenden fest auf März 2026 stand. - **In der Seitenleiste scrollst du in EINEM Bereich: Elwosas Nachrichten und die Antworten der Hilfe, nach der Zeit geordnet** (#1254; nur im Kandidaten, seit rc.4). Die Antworten der Hilfe bekamen einen eigenen Bereich zum Scrollen (bis zu 38 % der Fensterhöhe) und drückten Elwosas Verlauf auf wenige Zeilen zusammen (gemessen bei 960 Pixeln Fensterhöhe: von 233 auf 0 Pixel). Jetzt stehen beide hintereinander wie in einem Chat, das Neueste unten; das Feld zum Fragen bleibt fest darunter, vor jeder Reihe von Antworten steht die Zeile „Fragen zur Bedienung“, und nach einer Frage springt der Bereich an den Anfang der Antwort. Der Hilfe-Dialog ist unverändert. - **Elwosas „N neu“ kam bei vollem Verlauf nicht, und der Verlauf rutschte beim Verkleinern aus dem Bild** (#1256; betrifft auch Stable). Die Marke zählte die Nachrichten der Liste (die Seitenleiste holt nur zehn), und ein Merker aus einem Scroll-Ereignis entschied, ob du am Ende standest. Bei voller Liste kam keine Marke, nach dem Ausblenden einer Nachricht kam eine ohne Anlass, und wurde der Bereich niedriger (zum Beispiel durch die Zeile „Update-Stand unbekannt“ im Kopf), war die letzte Meldung abgeschnitten. Jetzt zählt die Marke nach Kennung (neu ist, was eine größere Kennung trägt als die zuletzt gesehene), die Seite misst beim Eintreffen der Daten, ob du am Ende standest, und der Bereich hält das Ende, wenn sich seine Höhe ändert. - **Die KI lernt nur aus dem, was du selbst aussortiert hast** (#1239; betrifft auch Stable). Der Auftrag an die lokale KI enthielt unter „deine Beispiele“ und im Block „GELERNT“ auch Urteile der Automatik und Systemgründe wie `bewerbung_erstellt`: der Filter schloss nur das Präfix `auto:` aus, das PBP seit #913 beim Schreiben entfernt. Auf einer Kopie einer echten Datenbank waren alle fünf Beispiele Urteile der Automatik. Jetzt zählen nur Stellen, die du selbst aussortiert hast, mit einem Grund, der ein Urteil über die Stelle ist; ältere Aussortierungen ohne gespeicherte Herkunft (vor 1.7.64) zählen nicht mit (eine Zeile, `UNBEKANNTE_HERKUNFT_ZAEHLT`, ändert das). Die Statistik bleibt, wie sie war. Ob die Bereinigung die Treffer der KI verbessert, ist noch nicht gemessen. - **Eine abgelehnte Aktion der Update-Seite nannte nur „HTTP 400“** (#1243; Meldung aus dem Beta-Test, rc.3 → rc.4, nur im Kandidaten). „Jetzt installieren“ und die anderen Knöpfe der Seite zeigten bei einer Ablehnung nur den Statuscode, obwohl der Server den Grund mitschickt („Ein Update läuft gerade.“, „Vorabversionen werden nur installiert, wenn …“). Jetzt steht dieser Satz im Hinweis. Der Anlass war #1222: rc.3 kann eine Vorabversion nicht selbst installieren (erst ab rc.4 behoben); wer rc.3 nutzt, installiert rc.4 einmal von Hand. - **Der Hilfe-Dialog fragte nach einer getippten Frage „Deine Eingaben sind noch nicht gespeichert“** (#1247; Fund des vierten Laufs, nur im Kandidaten, seit rc.4). Wer im Reiter „Frag mich“ etwas eintippte und den Dialog schloss, bekam die Rückfrage für ungespeicherte Formulare — obwohl der Reiter selbst sagt, dass die Frage nicht gespeichert wird; dasselbe galt für das Filterfeld der Prompts. Der Dialog hat kein Formular und schließt jetzt ohne Rückfrage; Dialoge mit Formular (neuer Kontakt, Notizen) fragen weiter. *Schema v52 (unverändert), 281 MCP-Werkzeuge, 9761 Tests.* --- ## 📦 Wie installiere oder aktualisiere ich PBP? **Unter Windows** brauchst du kein Git, kein Python, kein Vorwissen — nur einen ZIP-Download und einen Doppelklick. **Unter macOS** muss vorher einmalig Python 3.11+ installiert sein (siehe unten), **unter Linux** Git und Python. Voraussetzung ueberall: [Claude Desktop](https://claude.ai/download) ist installiert (Linux: alternativ Claude Code CLI). ### Windows (empfohlen, bequemster Weg) 1. **ZIP herunterladen:** [PBP-1.8.0-rc.5.zip](https://github.com/MadGapun/PBP/archive/refs/tags/v1.8.0-rc.5.zip) 2. **Entpacken:** Rechtsklick auf die ZIP → *„Alle extrahieren..."* → Zielordner waehlen (z.B. `C:\PBP`). Darin liegt ein Unterordner `PBP-...` — dort hinein wechseln. 3. **Installieren:** Doppelklick auf **`INSTALLIEREN.bat`** 4. Das Setup laedt Python, alle Pakete und Chromium herunter (~3–5 Minuten) und konfiguriert Claude Desktop. 5. Auf dem Desktop liegt jetzt eine Verknuepfung **„PBP Bewerbungs-Portal"** — Doppelklick startet das Dashboard. 6. **Claude Desktop oeffnen** (lief es schon: komplett beenden — Rechtsklick aufs Claude-Symbol unten rechts in der Taskleiste → *Beenden* — und neu starten) und tippen: **„Starte die Ersterfassung"** 7. Taucht PBP nicht auf: Claude Desktop nochmal komplett beenden und neu starten — siehe [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ). ### macOS 1. **Einmalig vorab: Python 3.11+** — am einfachsten der [Installer von python.org](https://www.python.org/downloads/) (Doppelklick), alternativ `brew install python@3.12` 2. **ZIP herunterladen** (siehe Windows-Link) und **entpacken** (Doppelklick; im ZIP liegt ein Unterordner `PBP-...`) 3. **Doppelklick auf `INSTALLIEREN.command`** 4. Falls macOS warnt („kann nicht geoeffnet werden"): Rechtsklick auf die Datei → *„Oeffnen"* → nochmal *„Oeffnen"* ### Linux ```bash git clone --branch v1.8.0-rc.5 --depth 1 https://github.com/MadGapun/PBP.git cd PBP bash installer/install.sh ``` `v1.8.0-rc.5` ist die Version DIESES Releases. Ohne `--branch` klont man `main` — das ist ein älterer Stand der Beta-Linie, nicht diese Version (#1150). ### Update von einer aelteren Version **Einfach drüberinstallieren** — deine Daten bleiben erhalten: - Windows: `%LOCALAPPDATA%\BewerbungsAssistent\data\pbp.db` - macOS/Linux: `~/.bewerbungs-assistent/pbp.db` Schema-Upgrade läuft automatisch beim ersten Start, ein Backup wird vorher erstellt (Ordner `data\backups\`). ### Detaillierte Anleitung & Troubleshooting 📖 [Wiki → Installation](https://github.com/MadGapun/PBP/wiki/Installation) · [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ) --- ## [1.8.0-rc.4] - 16.10.2026 — Die Hilfe beantwortet Fragen zur Bedienung (Release-Kandidat) Neu: Du kannst PBP fragen, wie etwas geht. Im Hilfe-Dialog (das Fragezeichen oben im Fenster) gibt es den Reiter „Frag mich“: Du tippst eine Frage in eigenen Worten, und PBP zeigt dir, wo es steht — mit einem Sprung in die richtige Einstellung, dem Link zur Wiki-Seite und, wo es passt, einem fertigen Text für Claude. Deine Frage wird nirgends gespeichert. Seit der letzten Vorabversion ist außerdem viel Feinschliff dazugekommen: jede Ansicht führt in einem Klick weiter und zurück, Listen beginnen ohne Scrollen, die Browser-Suche übernimmt ihre Ernte in einem Zug, die Aufräum-Runde läuft einmal am Tag von selbst, und der Installer kommt mit Sonderzeichen in Ordnernamen zurecht. Vierter Release-Kandidat für 1.8.0 — der Stand, aus dem 1.8.0 werden soll. Gegenüber `1.8.0-rc.3` kommt viel dazu: die Hilfe zum Fragen (#1233), die Weg-Leiste und die Listen zuerst (#1170, #1171), die Ernte der Browser-Quellen (#1184, #1187), die tägliche Aufräum-Runde (#1139), der überarbeitete Installer (#1149), die Rückführung aus Claude (#1200) und die Funde der unabhängigen Prüfung und des dritten Werkstatt-PC-Laufs (#1201 bis #1235). Die Einzelheiten zu jedem Punkt stehen im Abschnitt `[1.8.0]` darunter; hier steht die Auswahl, die du beim Testen bemerkst. **Von rc.3 aus von Hand installieren:** rc.3 kann eine Vorabversion nicht von selbst installieren (der Fehler #1222 ist erst ab rc.4 behoben). Wer rc.3 nutzt, installiert rc.4 einmal wie gewohnt per ZIP; ab rc.4 holt „Vorabversionen automatisch“ die nächste Vorabversion von selbst. ### Added - **Fragen zur Bedienung, beantwortet aus Hilfe, häufigen Fragen, Wiki und Prompts** (#1233). Im Hilfe-Dialog gibt es den Reiter „Frag mich“: Du tippst eine Frage in eigenen Worten (vor der ersten Frage stehen vier Beispiele zum Anklicken), und PBP zeigt Karten mit Titel, Kurztext und Quelle — mit einem Sprung in die richtige Einstellung, dem Link zur Wiki-Seite und, wo es einen gibt, dem Prompt zum Kopieren für Claude. Passt nichts, sagt die Hilfe das und legt einen fertigen Satz für Claude bereit. Läuft die lokale KI, steht dieselbe Eingabe auch unter dem Elwosa-Strom in der Seitenleiste. Die Antworten kommen aus einer Suche im Text, nicht aus einem Sprachmodell, und **deine Frage wird nicht gespeichert**. Gemessen: bei Fragen in Alltagssprache, die die Suche nie gesehen hat, steht der richtige Abschnitt in rund drei von vier Fällen (76 %) unter den ersten drei Karten. - **Kurzantwort der lokalen KI (Beta, standardmäßig aus)** (#1233). Unter Einstellungen › Lokale KI lässt sich einschalten, dass die lokale KI über den Karten eine kurze Antwort formuliert; sie darf nur umformulieren, was in den besten Abschnitten steht, muss eine Quelle nennen und darf nichts erfinden. - **Jede Ansicht eines Falls trägt eine feste Weg-Leiste, der Rückweg führt dorthin zurück, woher du kamst, und die erste Zeile jeder Liste liegt ohne Scrollen da** (#1171). Stelle, Bewerbung, Kontakt und Firma zeigen oben eine Leiste mit dem Rückweg, den anderen Ansichten desselben Falls und dem nächsten Schritt; die Zurück-Taste der Maus (Alt+←) schließt den obersten Dialog, statt die Seite zu verlassen; der Kopf der Listen „Stellen“ und „Bewerbungen“ ist eine Zeile. - **Die Browser-Suche übernimmt ihre Ernte in einem Zug** (#1187). Ein gemeinsamer Weg legt die Treffer jeder Browser-Quelle (StepStone, XING, Indeed, Google Jobs, Heise, eigene Quellen) in PBP an, jeder Browserlauf steht in der Auswertung der Quellen, und die Karte „Stellen zu prüfen“ im Dashboard nennt, was nach einem Lauf auf dein Urteil wartet. - **Die Aufräum-Runde („Bewerbungen im Blick behalten“) läuft einmal am Tag von selbst** (#1139). Das Abschließen von Bewerbungen ist ein eigener Schalter und bleibt aus, bis du ihn einschaltest. - **Kleinere Neuerungen:** der Typ eines einzelnen Dokuments lässt sich von Hand ändern (#1162), die Filter der Stellenliste lassen sich als Voreinstellung speichern (#1158), die Sprachdaten der Texterkennung kommen aus einer festen Fassung mit Prüfsumme (#1165). ### Changed - **Die drei alten Werkzeugnamen entfallen** (#1148): `stelle_bewerten` (jetzt `stelle_einordnen`), `stelle_analyse_speichern` (jetzt `stelle_urteil_speichern`) und `jobtitel_vorschlagen` (jetzt `jobtitel_speichern`). Die Parameter sind dieselben; wer eigene Anleitungen mit den alten Namen hat, ersetzt sie. - **Der Schalter „Dokumentenanalyse“ sperrt auch, was Dokument- und Mailtexte liefert** (#1147): wer die Dokumentenanalyse aus Datenschutzgründen abschaltet, gibt auch den vollen Text von Dokumenten und Mails nicht mehr an Claude weiter. - **Ein Google-Treffer ohne Original wird nicht mehr angelegt, und Benachrichtigungen aus Google liefern Hinweise statt Stellen** (#1184); Google Jobs über JobSpy gilt als defekt und steht unter „Defekte Quellen“ (#1159). - **Bedienung** (#1170): die Seitenleiste klappt in schmalen Fenstern von selbst ein, die Kopierknöpfe heißen überall „Mit Claude“, lange Erklärtexte lassen sich einklappen, und ein Scan ohne Text nennt den Weg zur Texterkennung. ### Fixed - **Was Claude erarbeitet, kommt in PBP an** (#1200): LinkedIn-Daten holen schreibt über die Werkzeuge von PBP, die vier Anleitungen für „Bewerbung erstellen“ widersprechen sich nicht mehr, der Absagegrund aus dem Gespräch landet in „Aus Absagen lernen“, ein einzelnes Dokument bleibt nach der Analyse nicht offen, und die Stellen-Seite zeigt „Keine Angabe“ statt „0 EUR“. - **Installer, Deinstaller und Update-Anzeige** (#1149, #1224, #1228, #1229): ein Ordnername mit Ausrufezeichen, Apostroph oder Klammer bricht den Installer nicht mehr, der Windows-Deinstaller endet nicht mehr nach der Backup-Frage, „Apps & Features“ nennt nach einem Auto-Update die laufende Fassung, und „Beim nächsten Start nutzen“ für eine neuere installierte Fassung heißt „Umgeschaltet“. - **Das Auto-Update für Vorabversionen installiert die gefundene Vorabversion** (#1222; seit rc.3), die Update-Seite zeigt „Stand unbekannt“ statt „Aktuell“, wenn die Prüfung keine Antwort bekam (#1225), und „Vorabversionen automatisch“ nennt nach dem Einschalten keinen falschen Grund mehr (#1226). - **Ohne Ollama kostete die Abfrage der lokalen KI unter Windows vier Sekunden** (#1227; betrifft auch ältere Versionen) — jetzt höchstens eine. - **Repost-Warnung „Vermittler“: ein Firmenname im Notiztext machte keinen Endkunden** (#1198; Beitrag aus PR #1230, betrifft auch Stable 1.7.157). - **Eine interne Notiz schloss die offene Nachfass-Erinnerung** (#1232; betrifft auch Stable seit 1.7.142): `bewerbung_notiz` hat jetzt den Parameter `art`, und die Vorgabe `intern` lässt die Erinnerung stehen. - **Ein Wiedergänger-k.o. aus einer Bewerbung, einer Dublette oder einer toten Anzeige** (#1234; betrifft auch Stable): nur Gründe, die ein Urteil über die Passung sind, zählen noch als „schon einmal aussortiert“. - **Mehrdeutige Ortsnamen bekamen still den erstbesten Treffer** (#1235; betrifft auch Stable): ein Ort wie „Rosengarten“ hat jetzt keine Entfernung statt einer geratenen, und die Karte nennt die Orte, die der Name meint. - **„Daten löschen“ und „Speicher aufräumen“ warten auf die tägliche Aufräum-Runde** (#1139): läuft die Runde gerade, galt PBP bisher als untätig und hätte unter ihr gelöscht; jetzt steht sie bei der laufenden Hintergrundarbeit („die Aufräum-Runde“). - **Funde der unabhängigen Prüfung des Release-Zweigs** (#1201 bis #1221): eine Google-Stelle umging den Schutz bei anderer Schreibweise der Quelle, die Zurück-Taste fror bei geänderter Eingabe einen Dialog ein, die Stellen-Seite kannte nur die 30 jüngsten Bewerbungen, auf macOS und Linux brach ein Leerzeichen im Ordnernamen den Installer, und weitere Kleinigkeiten. *Schema v52 (unverändert), 281 MCP-Werkzeuge, 9546 Tests.* --- ## 📦 Wie installiere oder aktualisiere ich PBP? **Unter Windows** brauchst du kein Git, kein Python, kein Vorwissen — nur einen ZIP-Download und einen Doppelklick. **Unter macOS** muss vorher einmalig Python 3.11+ installiert sein (siehe unten), **unter Linux** Git und Python. Voraussetzung ueberall: [Claude Desktop](https://claude.ai/download) ist installiert (Linux: alternativ Claude Code CLI). ### Windows (empfohlen, bequemster Weg) 1. **ZIP herunterladen:** [PBP-1.8.0-rc.4.zip](https://github.com/MadGapun/PBP/archive/refs/tags/v1.8.0-rc.4.zip) 2. **Entpacken:** Rechtsklick auf die ZIP → *„Alle extrahieren..."* → Zielordner waehlen (z.B. `C:\PBP`). Darin liegt ein Unterordner `PBP-...` — dort hinein wechseln. 3. **Installieren:** Doppelklick auf **`INSTALLIEREN.bat`** 4. Das Setup laedt Python, alle Pakete und Chromium herunter (~3–5 Minuten) und konfiguriert Claude Desktop. 5. Auf dem Desktop liegt jetzt eine Verknuepfung **„PBP Bewerbungs-Portal"** — Doppelklick startet das Dashboard. 6. **Claude Desktop oeffnen** (lief es schon: komplett beenden — Rechtsklick aufs Claude-Symbol unten rechts in der Taskleiste → *Beenden* — und neu starten) und tippen: **„Starte die Ersterfassung"** 7. Taucht PBP nicht auf: Claude Desktop nochmal komplett beenden und neu starten — siehe [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ). ### macOS 1. **Einmalig vorab: Python 3.11+** — am einfachsten der [Installer von python.org](https://www.python.org/downloads/) (Doppelklick), alternativ `brew install python@3.12` 2. **ZIP herunterladen** (siehe Windows-Link) und **entpacken** (Doppelklick; im ZIP liegt ein Unterordner `PBP-...`) 3. **Doppelklick auf `INSTALLIEREN.command`** 4. Falls macOS warnt („kann nicht geoeffnet werden"): Rechtsklick auf die Datei → *„Oeffnen"* → nochmal *„Oeffnen"* ### Linux ```bash git clone --branch v1.8.0-rc.4 --depth 1 https://github.com/MadGapun/PBP.git cd PBP bash installer/install.sh ``` `v1.8.0-rc.4` ist die Version DIESES Releases. Ohne `--branch` klont man `main` — das ist ein älterer Stand der Beta-Linie, nicht diese Version (#1150). ### Update von einer aelteren Version **Einfach drüberinstallieren** — deine Daten bleiben erhalten: - Windows: `%LOCALAPPDATA%\BewerbungsAssistent\data\pbp.db` - macOS/Linux: `~/.bewerbungs-assistent/pbp.db` Schema-Upgrade läuft automatisch beim ersten Start, ein Backup wird vorher erstellt (Ordner `data\backups\`). ### Detaillierte Anleitung & Troubleshooting 📖 [Wiki → Installation](https://github.com/MadGapun/PBP/wiki/Installation) · [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ) --- ## [1.8.0-rc.3] - 13.10.2026 — Eine Vorabversion kann die nächste Vorabversion selbst holen (Release-Kandidat) Wer eine Vorabversion (Beta oder RC) nutzt, kann PBP jetzt erlauben, die jeweils nächste Vorabversion derselben Reihe von selbst zu holen — ideal zum Testen, ohne jedes Mal von Hand herunterzuladen. Der Schalter sitzt in den Einstellungen unter „Updates“ und ist aus, bis du ihn einschaltest. Für die stabile Version ändert sich nichts. Dritter Release-Kandidat für 1.8.0. Gegenüber `1.8.0-rc.2` kommt ein einziges, bewusst eng gefasstes Feature dazu (#1199) — und erstmals an einer Vorabversion das echte, signierte Update-Archiv, damit das Auto-Update einer Vorabversion lückenlos durchläuft (laden, Prüfsumme, Signatur, entpacken, Selbsttest, umschalten). ### Added - **Auto-Update auch für Vorabversionen, opt-in (#1199).** Neuer Schalter `auto_update_vorab` (Vorgabe: aus). Nur wenn er an ist UND die laufende Version selbst eine Vorab ist, bezieht die Automatik auch Vorabversionen **derselben Linie** (z. B. rc.3 → rc.4). Der Schalter erscheint in der Update-Seite nur auf einer Vorab-Installation; er lässt sich auch im Chat setzen (`update_einstellungen_setzen(vorab=1)`), und `update_status` zeigt ihn. ### Sicherheit (unverändert) - Signatur (Ed25519), Prüfsumme (SHA-256), Manifest und Selbsttest der neuen Fassung vor dem Umschalten bleiben Pflicht — für Vorab wie für stabil. - Kein Linienwechsel (1.8 → 1.9/2.0 bleibt bewusste Handarbeit). - Eine **stabile** Installation wird nie auf eine Vorabversion gezogen, auch nicht mit eingeschaltetem Schalter. - Der Mutationstest belegt jede dieser Schranken (`qu07`, `qu10`–`qu14`, neu `qu21`): 8 von 8 Eingriffen erkannt. *Schema v52 (unverändert), 281 MCP-Werkzeuge, 8609 Tests.* --- ## 📦 Wie installiere oder aktualisiere ich PBP? **Unter Windows** brauchst du kein Git, kein Python, kein Vorwissen — nur einen ZIP-Download und einen Doppelklick. **Unter macOS** muss vorher einmalig Python 3.11+ installiert sein (siehe unten), **unter Linux** Git und Python. Voraussetzung ueberall: [Claude Desktop](https://claude.ai/download) ist installiert (Linux: alternativ Claude Code CLI). ### Windows (empfohlen, bequemster Weg) 1. **ZIP herunterladen:** [PBP-1.8.0-rc.3.zip](https://github.com/MadGapun/PBP/archive/refs/tags/v1.8.0-rc.3.zip) 2. **Entpacken:** Rechtsklick auf die ZIP → *„Alle extrahieren..."* → Zielordner waehlen (z.B. `C:\PBP`). Darin liegt ein Unterordner `PBP-...` — dort hinein wechseln. 3. **Installieren:** Doppelklick auf **`INSTALLIEREN.bat`** 4. Das Setup laedt Python, alle Pakete und Chromium herunter (~3–5 Minuten) und konfiguriert Claude Desktop. 5. Auf dem Desktop liegt jetzt eine Verknuepfung **„PBP Bewerbungs-Portal"** — Doppelklick startet das Dashboard. 6. **Claude Desktop oeffnen** (lief es schon: komplett beenden — Rechtsklick aufs Claude-Symbol unten rechts in der Taskleiste → *Beenden* — und neu starten) und tippen: **„Starte die Ersterfassung"** 7. Taucht PBP nicht auf: Claude Desktop nochmal komplett beenden und neu starten — siehe [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ). ### macOS 1. **Einmalig vorab: Python 3.11+** — am einfachsten der [Installer von python.org](https://www.python.org/downloads/) (Doppelklick), alternativ `brew install python@3.12` 2. **ZIP herunterladen** (siehe Windows-Link) und **entpacken** (Doppelklick; im ZIP liegt ein Unterordner `PBP-...`) 3. **Doppelklick auf `INSTALLIEREN.command`** 4. Falls macOS warnt („kann nicht geoeffnet werden"): Rechtsklick auf die Datei → *„Oeffnen"* → nochmal *„Oeffnen"* ### Linux ```bash git clone --branch v1.8.0-rc.3 --depth 1 https://github.com/MadGapun/PBP.git cd PBP bash installer/install.sh ``` `v1.8.0-rc.3` ist die Version DIESES Releases. Ohne `--branch` klont man `main` — das ist ein älterer Stand der Beta-Linie, nicht diese Version (#1150). ### Update von einer aelteren Version **Einfach drüberinstallieren** — deine Daten bleiben erhalten: - Windows: `%LOCALAPPDATA%\BewerbungsAssistent\data\pbp.db` - macOS/Linux: `~/.bewerbungs-assistent/pbp.db` Schema-Upgrade läuft automatisch beim ersten Start, ein Backup wird vorher erstellt (Ordner `data\backups\`). ### Detaillierte Anleitung & Troubleshooting 📖 [Wiki → Installation](https://github.com/MadGapun/PBP/wiki/Installation) · [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ) --- ## [1.8.0-rc.2] - 11.10.2026 — Texterkennung ohne Administratorrechte, saubere Installation (Release-Kandidat) Die Texterkennung für eingescannte Zeugnisse lässt sich jetzt auch ohne Administratorrechte einrichten — so, wie es der Knopf „Herunterladen & installieren“ immer versprochen hat. Der Installer räumt hinter sich auf: kein leerer Ordner und keine Reste im Temp-Ordner mehr. Gefunden hat das alles der Testlauf auf einem frischen Windows 11. Zweiter Release-Kandidat für 1.8.0. Gegenüber `1.8.0-rc.1` ändert sich nur, was der Testlauf auf dem Werkstatt-PC (11.10.2026, Windows 11, Claude Desktop als Store-Fassung, ohne Administratorrechte) gefunden hat. Ergebnis des Laufs: Beta-Exit-Punkte 4 (Migration von 1.7.156), 5 (Erstkontakt) und 7 (Auto-Update gegen echtes GitHub, Rückfall, abgelehnte Pakete) belegt; Punkt 3 (Texterkennung ohne Administratorrechte) nicht — das ist PP26 unten. ### Fixed - **Die Texterkennung ließ sich ohne Administratorrechte nicht installieren** (PP26; seit beta.0, Beta-Exit 3). Das Setup von Tesseract verlangt Administratorrechte in seinem Manifest; aus einem Programm ohne Erhöhung lässt es sich gar nicht starten (`WinError 740`), obwohl der Knopf „kein Admin nötig“ versprach, und die Oberfläche zeigte den rohen Systemtext. Jetzt startet PBP das Setup ohne Abfrage (`__COMPAT_LAYER=RunAsInvoker`; es verzichtet darauf, Rechte zu verlangen, und erhöht keine). Das Setup installiert dann „nur für mich“ nach `%LOCALAPPDATA%\Programs\Tesseract-OCR` und ignoriert das Ziel; PBP sucht dort, merkt sich den Ort (`components\tesseract\pbp-installation.json`), lädt das deutsche Sprachpaket dorthin, zeigt den Ort mit Größe unter „Speicher & Downloads“ und entfernt alles wieder mit dem eigenen Deinstallationsprogramm des Setups — in der Oberfläche („Entfernen“) und im Deinstaller (Schritt 5), und nur an diesem einen Ort. Eine Tesseract-Installation, die du selbst angelegt hast — auch eine, die du später am selben Ort neu angelegt hast (PBP erkennt sie an Größe und Anlegezeit der Programmdatei) —, wird erkannt und nie angefasst. Die Hinweise zum fehlenden Sprachpaket nennen keine Werkzeugnamen mehr. - **Der Installer ließ einen leeren Ordner und die Kopie seines Aufräum-Helfers liegen** (PP24; seit 1.8.0-beta.16, nur Windows). Der Helfer löscht den entpackten Installer-Ordner, sobald das Installer-Fenster zu ist; solange es offen ist, hält es den Ordner fest. Der erste Versuch scheiterte darum immer — und `shutil.rmtree` warf den Fehler aus seiner Rückruffunktion bis in den Prozess, statt es 200-mal im Abstand von 3 s zu versuchen. Jetzt fängt der Helfer das auf und versucht es weiter. Auf dem Entwicklungsrechner (Windows 11, Build 26200) fiel es nicht auf: dort löscht Windows einen gehaltenen Ordner trotzdem; die vorhandenen Tests ersetzten genau die Stelle, an der es krachte. - **Nach jeder Installation blieb `%TEMP%\tmpXXXX\pip.zip` (1,7 MB) liegen** (PP25; auch in 1.7.x). `get-pip.py` arbeitet jetzt in einem eigenen Ordner, der danach gelöscht wird. - **Die Gefahrenzone zeigte bei „Stellen“ Markdown-Sternchen als Text.** ### Bekannt, bewusst nicht geändert - Nach der Deinstallation bleibt im klassischen Konfigurationsordner `%APPDATA%\Claude` eine Datei mit leerem `mcpServers` samt `….pbp-backup`, und die Datei von Claude als Store-Fassung behält `"mcpServers": {}` (PP27, PP28; schon als PP22 dokumentiert). Harmlos — Claude liest beides wie vorher —, die Sicherungskopie ist Absicht. Auf Wunsch lässt sich das ändern. - Nach dem Entfernen der Texterkennung bleibt im Temp-Ordner die Selbstkopie des Deinstallationsprogramms von Tesseract liegen (`~nsu.tmp\Un_A.exe`, 151 KB; PP29). Sie stammt aus dem Programm von Tesseract, nicht aus PBP, und ist harmlos. *Schema v52 (unverändert), 281 MCP-Werkzeuge, 8596 Tests.* --- ## 📦 Wie installiere oder aktualisiere ich PBP? **Unter Windows** brauchst du kein Git, kein Python, kein Vorwissen — nur einen ZIP-Download und einen Doppelklick. **Unter macOS** muss vorher einmalig Python 3.11+ installiert sein (siehe unten), **unter Linux** Git und Python. Voraussetzung ueberall: [Claude Desktop](https://claude.ai/download) ist installiert (Linux: alternativ Claude Code CLI). ### Windows (empfohlen, bequemster Weg) 1. **ZIP herunterladen:** [PBP-1.8.0-rc.2.zip](https://github.com/MadGapun/PBP/archive/refs/tags/v1.8.0-rc.2.zip) 2. **Entpacken:** Rechtsklick auf die ZIP → *„Alle extrahieren..."* → Zielordner waehlen (z.B. `C:\PBP`). Darin liegt ein Unterordner `PBP-...` — dort hinein wechseln. 3. **Installieren:** Doppelklick auf **`INSTALLIEREN.bat`** 4. Das Setup laedt Python, alle Pakete und Chromium herunter (~3–5 Minuten) und konfiguriert Claude Desktop. 5. Auf dem Desktop liegt jetzt eine Verknuepfung **„PBP Bewerbungs-Portal"** — Doppelklick startet das Dashboard. 6. **Claude Desktop oeffnen** (lief es schon: komplett beenden — Rechtsklick aufs Claude-Symbol unten rechts in der Taskleiste → *Beenden* — und neu starten) und tippen: **„Starte die Ersterfassung"** 7. Taucht PBP nicht auf: Claude Desktop nochmal komplett beenden und neu starten — siehe [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ). ### macOS 1. **Einmalig vorab: Python 3.11+** — am einfachsten der [Installer von python.org](https://www.python.org/downloads/) (Doppelklick), alternativ `brew install python@3.12` 2. **ZIP herunterladen** (siehe Windows-Link) und **entpacken** (Doppelklick; im ZIP liegt ein Unterordner `PBP-...`) 3. **Doppelklick auf `INSTALLIEREN.command`** 4. Falls macOS warnt („kann nicht geoeffnet werden"): Rechtsklick auf die Datei → *„Oeffnen"* → nochmal *„Oeffnen"* ### Linux ```bash git clone --branch v1.8.0-rc.2 --depth 1 https://github.com/MadGapun/PBP.git cd PBP bash installer/install.sh ``` `v1.8.0-rc.2` ist die Version DIESES Releases. Ohne `--branch` klont man `main` — das ist ein älterer Stand der Beta-Linie, nicht diese Version (#1150). ### Update von einer aelteren Version **Einfach drüberinstallieren** — deine Daten bleiben erhalten: - Windows: `%LOCALAPPDATA%\BewerbungsAssistent\data\pbp.db` - macOS/Linux: `~/.bewerbungs-assistent/pbp.db` Schema-Upgrade läuft automatisch beim ersten Start, ein Backup wird vorher erstellt (Ordner `data\backups\`). ### Detaillierte Anleitung & Troubleshooting 📖 [Wiki → Installation](https://github.com/MadGapun/PBP/wiki/Installation) · [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ) --- ## [1.8.0-rc.1] - 11.10.2026 — Updates, die sich selbst installieren (Release-Kandidat) PBP kann sich jetzt selbst aktualisieren — wenn du es willst (Einstellungen › Erweitert › Updates). Ohne deine Wahl installiert PBP nichts. Neu sind außerdem die Übersicht „Speicher & Downloads“ (dort änderst du auch den Ordner für deine Lebensläufe und Anschreiben), der Firmen-Eintrag und ein Mail-Ordner-Zugang, der standardmäßig aus ist. Die Wege durch PBP sind kürzer: von der Nachfassung zur Bewerbung, von der Person zur Bewerbung und zurück, von der Stelle zur neuen Bewerbung — je ein Klick. Die Seite „Stellen“ läuft im Leerlauf wieder ruhig. Beim allerersten Start führt ein Weg zum Profil statt vier Karten, und leere Seiten sagen, was sie sind. PBP kann sich jetzt selbst aktualisieren — **wenn du es willst**. Ohne deine Wahl installiert PBP nichts. Dazu kommen die Übersicht „Speicher & Downloads“, die Prüfsumme für Zusatzprogramme, die Zugangsschicht für Jobmails aus Ordnern und der Firmen-Eintrag. Die Version sammelt außerdem alles, was die 1.8.0-Betas (beta.0 bis beta.19) und die Hotfixes bis v1.7.156 geliefert haben; die Einzelheiten stehen in den Einträgen darunter. **Wichtig zu wissen:** - **Updates (Einstellungen › Erweitert › Updates).** Vier Stufen: *Nur Hinweis* (Vorgabe), *Mit einem Klick*, *Automatisch, mit Meldung*, *Automatisch, still*. Neue Versionen landen in einem eigenen Ordner neben der laufenden; startet die neue nicht, fällt PBP **von selbst auf die vorige zurück** und sagt es. Geladen wird nur von der festen GitHub-Adresse, nur stabile Versionen der eigenen Linie, mit Prüfsumme **und Signatur** (Ed25519; ohne gültige Signatur wird nichts installiert). Die Automatik startet nie neben anderer Arbeit. - **Einmalig von Hand:** Die erste Version mit dieser Funktion ist 1.8.0 selbst. Wer von 1.7.x kommt, installiert sie wie gewohnt (ZIP, `INSTALLIEREN.bat`); ab dann kann PBP den Rest selbst. **Das automatische Aktualisieren gibt es zurzeit nur unter Windows.** - **Speicher & Downloads (Einstellungen › Erweitert).** Wohin PBP schreibt und lädt, wie viel dort liegt, und Aufräumen in zwei Schritten — nie ohne dein Ja, nie bei laufender Arbeit. Was anderen Programmen gehört (Browser der Jobsuche, KI-Modelle), wird nur gezeigt. Die Karte „Deine eigenen Ordner“ trägt die Eingabefelder für den Ordner, in den PBP deine Lebensläufe, Anschreiben und Berichte legt, und für den Ordner mit deinen Vorlagen — du änderst sie dort, wo du siehst, wie viel darin liegt (#1173). Die anderen Orte sind durch die Installation bedingt und bleiben ohne Eingabe. - **Mail-Ordner (Einstellungen › Erweitert › Quellen im Detail).** Der Ordner-Scan ist **standardmäßig aus**; gelesen werden nur Ordner, die du ausdrücklich freigibst. PBP öffnet nie selbst ein Postfach. Ein Add-on, das Ordner von sich aus liest, gibt es noch nicht — das Thunderbird-Add-on schickt weiter nur, was du markierst. - **Firmen (Kontakte › Firmen).** Alles, was PBP zu einer Firma weiß, als eine Zeitleiste; ein Firmen-Eintrag fasst Schreibweisen zusammen („Alt AG“ heißt heute „Neu GmbH“) und kennt die Mutterfirma. Bewerbungen, Stellen und Kontakte behalten ihren Firmennamen als Text. - **Ein Klick zum Nächsten (#1171).** Die Zeile „Nachfassen“ im Dashboard öffnet die Bewerbung; nach „Bewerbung speichern“ liegt die neue Bewerbung offen da (mit „Lebenslauf mit Claude“ und „Anschreiben mit Claude“ im Fuß); in der Timeline führt der Name der Person zu ihrer Karte, und die Karte nennt oben „Bewerbung: Titel bei Firma“ und führt zurück; „Zur Stelle“ auf der Bewerbungskarte, „Zur Bewerbung“ in der Aufgabenzeile, die Top-Stelle im Dashboard öffnet die Stelle. Die Timeline hat oben eine Sprungleiste (Status · Stelle · Dokumente · Personen · Aufgaben · Termine · Verlauf), die beim Scrollen stehen bleibt. Der Link aus Claude (`#stellen/`) öffnet die Stelle selbst. - **Neu im Dashboard-Fenster:** Schreibt Claude, während du eine Stelle oder die Timeline einer Bewerbung offen hast (ein Urteil zur Stelle, eine Notiz, ein Termin, eine Mail zur Bewerbung), erscheint das dort nach ein bis drei Sekunden; die Leseposition bleibt, nichts flackert. - **Suche oben im Dashboard (#1177).** Ein Klick auf einen Treffer öffnet das Objekt: die Bewerbung (ihre Timeline), die Stelle (ihre Details), das Dokument (aufgeklappt, mit seinem Namen im Suchfeld der Seite), die Mail (ihr Fenster, auch ohne Bewerbung), den Termin (in der Timeline der Bewerbung, am Abschnitt „Termine“; ohne Bewerbung im Kalender) und den Skill (im Profil, die Liste auf seinen Namen gefiltert). Bis v1.7.154 passierte beim Klick nichts. - **Eine neuere Vorabversion wird überall gleich gemeldet (#1179).** Wer eine Beta nutzt und eine neuere erscheint, sieht in der Seitenleiste „Neue Vorabversion verfügbar“, auf der Seite Einstellungen › Updates statt „Aktuell“ eine Karte mit dem Grund (PBP installiert Vorabversionen nie von selbst, auch nicht mit „Mit einem Klick“) und den Knöpfen „ZIP herunterladen“ und „Veröffentlichung ansehen“, und auf dem Dashboard denselben Hinweis. Elwosa nennt die neue Version ebenfalls, einmal je Version, mit einem Link zu den Veröffentlichungsnotizen (#1180). ### Added - **Auto-Update** (#1093): `services/auto_update/` (feste Quelle, Prüfsumme, Ed25519-Signatur in reinem Python, sicheres Entpacken, Manifest, Selbsttest vor dem Umschalten, Stufen, Verlauf), der **Startbaustein** `bewerbungs_assistent_boot` (eingefroren, nur Standardbibliothek, Rückfall im selben Prozess und nach zwei unbestätigten Starts), der **Schema-Schutz** (`services/schema_schutz.py`: ist die Datenbank neuer als das Programm, schreibt der alte Prozess nicht weiter), der Hinweis, wenn Claude und Dashboard mit verschiedenen Fassungen laufen, der Installer-Umbau (Versionsordner, Selbstaufräumen, Deinstaller), `scripts/build_update_archive.py` und ein Schritt im Release-Tor. Werkzeuge `update_status`, `update_einstellungen_setzen`, `update_jetzt_installieren`, `update_zurueckschalten`. - **Speicher & Downloads** (#1131): sieben Orte, sieben Aufräum-Aktionen, Werkzeuge `speicher_anzeigen` und `speicher_bereinigen`. Die Karte „Deine eigenen Ordner“ steht immer da und enthält die Eingabefelder für Ausgabe- und Vorlagen-Ordner (#1173; dieselbe Komponente und dieselbe Prüfung wie unter Einstellungen › Ordner, die Seite misst nach dem Speichern neu). - **Prüfsumme der Komponenten** (#1152): kein Installer ohne SHA-256; die Ablehnung kommt vor dem Download. - **Mail-Zugangsschicht** (#947): Schalter, genaue Liste freigegebener Ordner, Prüfung im Mail-Eingang für jedes Add-on (`GET /api/v1/ingest/mail-policy`, `modus=scan` bei `POST /api/v1/ingest/email`), Zahlen je Ordner; Werkzeuge `mail_quelle_anzeigen` und `mail_quelle_einstellen`. Die Ingest-API v1 bleibt kompatibel: die Erweiterung ist rein additiv. - **Ein Weg für Treffer und Links** (#1177): `services/dashboard_link.hash_ziel` baut die eine Adressform `#seite/kennung` (für die Links, die Claude nennt, und für die Treffer der Suche); `lib/wege.js` kennt `zuMail`, `zuProfil` und `zuSuchtreffer`; `sprungAusHash` liest zusätzlich `#dokumente/`, `#kalender/` und `#profil/skills`; `GET /api/documents?doc_id=` liefert genau ein Dokument; die Sprungleiste springt beim Öffnen in einen genannten Abschnitt. Gegenprobe: neuer Katalog „suche“ (23 absichtlich eingebaute Fehler: Adressen, Zuordnung, Lesestellen der Seiten). - **Firmen-Eintrag, Stufe 2** (#1080): Tabellen `companies`, `company_aliases`, `company_contacts` (additiv, ohne Versionssprung); die Duplikat- und Repost-Erkennung kennt die Einträge (`firmen_kanon`); Kontakte gehören mehreren Firmen mit Rolle und Zeitraum; Dokumente an einer Bewerbung stehen auch in der Historie der Firma; Dashboard-Ansicht mit Zeitleiste, Bearbeiten und Vorschlägen; Firmenname als Link in Stellen, Bewerbungen und Kontakten; Werkzeuge `firmen_stamm_anzeigen`, `firmen_vorschlaege_anzeigen`, `firmen_stamm_bearbeiten`; `firma_oeffnen` in `fit_analyse`, `bewerbung_details` und `kontakt_anzeigen`; `dashboard_link` in `firma_kontext`. - **Vorabversionen in der Oberfläche** (#1179): `lib/autoUpdate.js` kennt `istVorabversion`, `vorabNeu` (eine neuere Vorabversion aus der allgemeinen Prüfung, wenn die feste Quelle des Auto-Updates keine kennt und sie nicht schon von Hand installiert ist) und `vorabHinweis`; die Update-Seite zeigt statt „Aktuell“ „Neue Vorabversion“ mit einer Karte (Erklärung, drei Schritte, „ZIP herunterladen“, „Veröffentlichung ansehen“), das Dashboard denselben Hinweis in der Hinweiszone (auch ohne verfügbares Auto-Update), die Seitenleiste „Neue Vorabversion verfügbar“; „Jetzt prüfen“ fragt beide Auskünfte. - **Elwosa-Kanal „Update“** (#1180, `services/elwosa_provider.update_kandidaten`): nennt eine neue Version, sobald die allgemeine Prüfung sie findet, einmal je Version, mit dem Titel der Veröffentlichung und einem Link auf die Notizen; eine Vorabversion als solche; schweigt, wenn die Version schon von Hand installiert ist. Die Prüfung merkt dafür ihren Befund (`update_quelle.befund_merken`). Regelbasiert wie alle Kanäle, über `post_candidate` (Sprach-DNA, aus/Pause/Cooldown, Kind- und Inhalts-Sperre). - **jobtic als Browser-Quelle mit eigenem Konto** (#1189): Marktplatz für IT-Freelance-Projekte, eingebunden wie XING und StepStone — mit dem Hinweis, dass ein eigenes, im Browser angemeldetes jobtic-Konto nötig ist (Abzeichen „Konto nötig“, ohne den Login-Knopf des alten Weges; neues Kennzeichen `konto_noetig`). Die Nutzungsbedingungen von jobtic untersagen automatisiertes Auslesen (§ 5.2) und die Aufnahme von Kontaktdaten in fremde Datenbanken (§ 5.3); darum steht die Quelle unter **Auflagen** (`services/quellen_auflagen`, Daten im Quellenverzeichnis): PBP ruft diese Seiten nie selbst ab (Anzeigentext nachladen, Auto-Nachladen, Aging-Check, Qualitätsprüfung; die Auto-Engine wählt sie nicht einmal aus), übernimmt keine Ansprechpartner aus dem Lauf (`kontakt_nicht_uebernommen` im Ergebnis) und setzt die Stellenart Freelance; der Auftrag an Claude nennt die Auflagen (Handstart, höchstens zwei Ergebnisseiten je Begriff, Detailseiten nur bei fachlichem Treffer, Pausen). `quelle_handoff('jobtic', Begriff)` liefert die Such-URL und ein eigenes Auswerte-Skript (`job_scraper/jobtic_extraction.js`), das nur die Liste der Seite liest und keine Kontaktdaten weitergibt. jobtic wird nie von selbst empfohlen; der Aktivierungsdialog sagt jetzt „ob eine taugt, entscheidest du in PBP“ statt „Passende Treffer legt Claude für dich als Stelle an“. Gegenprobe: Katalog „jobtic“, 49 absichtlich eingebaute Fehler. - **Gegengelesen vor dem Kandidaten** (ein zweiter, unabhängiger Prüfer, neun Funde, alle am Code belegt und behoben): (1) Die Auflage „keine Kontaktdaten“ gilt auch für den **Text** — Mailadressen und Rufnummern werden aus der Beschreibung gestrichen (`quellen_auflagen.kontaktdaten_entfernen`, nur erkennbare Schreibweisen: Tagessätze, Zeiträume und Projektnummern bleiben; Namen nennt nur die Anleitung), das Ergebnis sagt es. (2) Eine **eigene Quelle** (`custom_quelle_hinzufuegen`) auf einer jobtic-Adresse gilt wie jobtic: kein Abruf im Gesundheitslauf, Handoff mit den Auflagen und dem Skript der Quelle. (3) **Nur auf Wunsch** ist strukturiert lesbar (`nur_auf_wunsch`): der Auftrag des Suchlaufs („arbeite diese Quellen selbst ab“) nimmt die Quelle aus. (4) Der Aufräum-Helfer des Selbsttests erbte den Arbeitsordner und hielt den entpackten Ordner fest: das Umbenennen beim Update scheiterte im ersten Versuch immer, bei einem langsamen Rechner dauerhaft. (5) Ein **Platzhalter** („Nicht angegeben“) gilt nicht als Firma: zwei Projekte gleichen Titels von nicht genannten Auftraggebern bleiben zwei, ähnliche Titel sind kein „Duplikat“. (6) Beim Start stand kurz „Zuerst dein Profil“ da, auch bei einem Menschen mit Profil: der Anfangszustand der Seiten war „kein Profil“ statt „unbekannt“. (7) Der Bestandsnachzug füllte `max_stellen` mit Stellen, die er nie abrufen darf. (8) Der Knopf „Beschreibung nachladen“ buchte das Abrufverbot als Fehlversuch. (9) Eine **0** als Jahr oder Niveau eines Skills gilt als „nicht gesetzt“ (sonst „ruht seit 0“); `jobtic.com:443` und `nutzer@jobtic.com` gehören zur Quelle. - Wiki: Seiten **Updates**, **Speicher & Downloads**, **Mail-Ordner**, **Firmen**; Abschnitt „Erweiterungen“ in den Einstellungen. - Gegenprobe (`scripts/mutationstest_auto_update.py`): fünfzehn Kataloge, 504 absichtlich eingebaute Fehler (Auto-Update 101, Speicher 37, Komponenten 6, Mail 20, Firmen 86, Wege 38, Suche 23, Vorab 28, Konsole 11, Google 33, Browser 30, jobtic 49, Skill-Stand 11, Installer 6, Erste Schritte 25); die Tests erkennen alle bis auf einen begründet gleichwertigen und zwei, die Symlink-Recht brauchen. Im Katalog „Wege“ überlebte beim ersten Lauf ein Fehler (die Marke der Sprungleiste wurde nur direkt nach dem Klick geprüft, nicht nach dem Scrollen); der Test wurde gehärtet, danach wird er erkannt. Im Katalog „google“ überlebte beim ersten Lauf ebenfalls ein Fehler (das Neurechnen der Punkte nach dem Nachholen wurde nur zusammen mit der Entfernung geprüft); auch dieser Test wurde gehärtet. - **Die Ingest-API v1 ist mit 1.8.0 eingefroren** (Beta-Exit Punkt 2). `GET /api/v1/ingest/ping`, `POST /api/v1/ingest/job`, `GET /api/v1/ingest/mail-policy` und `POST /api/v1/ingest/email` bleiben, wie sie sind; ein Vertragstest (`test_v18_ingest_api_v1_vertrag.py`) prüft Pfade, Methoden, Pflichtfelder und Antwortfelder als Obermenge. Neues kommt nur additiv oder als `/api/v2/` daneben. ### Changed - **Dashboard › Offen: rot ist nur, was überfällig ist** (#1174). Bisher färbte eine einzige überfällige Zeile die ganze Karte rot (Rahmen, Hintergrund, Wecker-Symbol) — seit der Zusammenlegung der Listen in v1.7.31, auch in der Stable-Version. Jetzt bleibt die Karte ruhig; rot sind die Überschrift „Überfällig“ und das Datum der überfälligen Zeilen. „Heute“ und „Diese Woche“ sind unverändert. - `kontakt_verknuepfen(ziel_typ='firma')` ordnet jetzt wirklich einer Firma zu (bisher ein Eintrag ins Leere ohne Leser) und nimmt `von` und `bis`. - `firma_kontext` liest über die Firmen-Einträge (Schreibweisen, Mutter- und Tochterfirma, jeder Treffer nennt `via`) und liefert die Daten über dieselbe Funktion wie die Dashboard-Ansicht. - Die Warnung bei einer nur in den Notizen genannten Firma beginnt mit „Prüfen:“ (statt „Pruefen:“). - Ein zweiter Klick auf „Firmen“ (Reiter oder Seitenleiste) führt aus einer geöffneten Firma zurück in die Liste. - **Der erste Start ohne Profil ist ein Weg statt vier Karten** (#1170 U5 bis U7). Ohne Profil zeigen „Stellen“, „Bewerbungen“ und „Suche & Bewertung“ jetzt eine einzige Karte mit einem Knopf, „Lebenslauf hochladen“ — statt Kennzahlen aus Nullen, Filtern, einer Quellenkarte und Knöpfen, die ohne Profil nichts tun können. Derselbe Knopf steht auf dem Dashboard und öffnet denselben Dialog; er heißt für das erste Profil „Dein Profil anlegen“ und fragt nach deinem Namen (vorher: „Neues Profil anlegen — Lege ein weiteres Profil … an“ und „Profilname, z. B. IT Consulting“). „Suche & Bewertung“ trägt ohne Profil nicht mehr die Überschrift „Profil“. - **Leere Seiten sagen, was sie sind** (#1170 U8): Aufgaben nennt, woher Aufgaben kommen, „Neue Aufgabe“ sieht nicht mehr deaktiviert aus, und die Statistik zeigt ohne Stellen und Bewerbungen einen Satz statt einer Wand aus Nullen. - **Der Satz zu den KI-Schaltern sagt, was sie tun** (#1147 Punkt 3). Er versprach „Ist ein Schalter aus, gibt PBP für diesen Bereich nichts an Claude weiter“; tatsächlich sperren die Schalter die Funktionen, mit denen Claude etwas auslöst. Lesende Werkzeuge liefern weiter, solange PBP in Claude Desktop eingetragen ist. Jetzt steht das so da, samt dem Weg für alle, die gar nichts weitergeben wollen. - **Die Texte zur Automatik versprechen nichts mehr, was nur auf Knopfdruck läuft** (#1139). Die Aufräum-Runde (Erinnerungen nachlegen, Bewerbungen ohne Antwort abschließen, fehlende Anzeigentexte nachladen) hat keinen automatischen Auslöser; sie läuft über „Jetzt prüfen“ unter Einstellungen › Automatik. Die Karte dort, die Hilfe und der Hinweis nach der Jobsuche sagen das jetzt („… holt „Jetzt prüfen“ nach“ statt „folgen mit der Automatik“). Ob die Runde künftig von selbst läuft (täglich, das Abschließen abschaltbar), ist als Frage an #1139 gestellt. ### Fixed - Die Tesseract-Komponente wurde ohne Prüfsumme gestartet (#1152). - **Die Seitenleiste meldete eine neue Beta, die Update-Seite sagte „Aktuell“ und hatte keinen Knopf** (#1179; seit beta.16). Zwei Auskünfte zur selben Frage: die allgemeine Prüfung (`/api/update-check`) nennt einer Beta-Installation auch neuere Betas, die feste Quelle des Auto-Updates (`/api/auto-update`) kennt nie eine Vorabversion. Die Seitenleiste folgte der ersten, die Update-Seite der zweiten, und die Hinweiszone des Dashboards zeigte bei verfügbarem Auto-Update gar nichts. Jetzt sagen alle drei dasselbe und zeigen den Weg (ZIP laden, Installer starten); installiert wird eine Vorabversion weiterhin nie von selbst. - **Ein Klick auf einen Treffer der Suche oben tat nichts** (#1177; seit v1.7.0, auch in 1.7.154). Die Suche lieferte die Zieladresse im Format `#bewerbungen?id=…`; das Dashboard liest seit H31 nur noch `#seite/kennung` und fiel bei allem anderen still auf das Dashboard zurück. Der Klick setzte außerdem nur die Adresse (bei gleicher Adresse passiert dann nichts), und die Seiten Dokumente, Kalender und Profil nahmen keinen Sprung mit Kennung entgegen — dasselbe traf „Zum Dokument“ in der Firmen-Zeitleiste und einen Termin ohne Bewerbung im Block „Offen“ (die Absichten `dokumentId` und `terminId` hatten keinen Leser). Jetzt gehen Treffer und Links aus Claude denselben Weg, jede Seite liest ihren Sprung, die Stellen-Treffer tragen die öffentliche Kennung, und ein Test verlangt zu jedem Schlüssel, den ein Weg erzeugt, einen Leser auf einer Seite. - **Die Seite „Stellen“ lief im Leerlauf auf Hochtouren** (#1171): sie fragte pausenlos, ob gerade eine Suche läuft — gemessen 270 bis 470 Anfragen pro Sekunde und ein zu zwei Dritteln beschäftigter Hauptthread des Browsers, während niemand etwas tat (alle anderen Seiten: 0,0 %). Ursache war eine Funktion in der Abhängigkeitsliste des Abfrage-Effekts (`useEffectEvent` ist bei jedem Zeichnen eine neue Funktion; jede Antwort setzt den Zustand neu, der Effekt startete sich nach jeder Antwort selbst neu). Die Zeile steht seit März 2026 (v0.23.0) im Code, auch in der Stable-Version v1.7.153. Nachher: 0,2 % und 0,6 Anfragen pro Sekunde. Zwei Wächter-Tests halten es fern: einer sieht jede der elf Seiten im Leerlauf an (gesund sind 1 bis 2 Anfragen in drei Sekunden), einer lässt keine neuen Effekt-Ereignisse in Abhängigkeitslisten zu (`test_kein_effekt_ereignis_in_einer_abhaengigkeitsliste`); acht ältere Stellen (App, Ablegen von Dokumenten, Einrichtungsassistent) sind als Bestand benannt, bei ihnen wurde nichts Auffälliges gemessen. - Jede Seite lud beim Start zweimal und blendete dabei kurz die schon gezeichnete Liste aus (ein offenes Fenster ging mit, die Leseposition sprang an den Anfang). In „Stellen“ und „Bewerbungen“ erscheint die Ladeanzeige nur noch beim ersten Laden; „Kalender“, „Profil“, „Statistik“ und „Einstellungen“ folgen. Der Welle-4-Test `test_g62_karte_eine_kernaussage_und_ein_menue`, der an diesem Flackern scheiterte, ist wieder stabil. - Was Claude schreibt, kam im offenen Fenster nicht an: das Urteil zu einer Stelle und eine Notiz in der Timeline erschienen erst nach Schließen und Öffnen. - Benutzernamen mit einem Zeichen außerhalb der Windows-Zeichentabelle (ł, ş, ř, griechisch, kyrillisch; Umlaute waren nie betroffen) ließen mehrere Schritte scheitern (#1163): die Claude-Konfiguration und die Sicherung vor dem Update im Installer, den Selbsttest des Auto-Updates und die Texterkennung (Tesseract liest Pfade in der ANSI-Tabelle). Behoben: die Ausgabe wird als UTF-8 gelesen und abgesichert, das Seitenbild geht über die Standardeingabe, die Sprachdaten über den Kurzpfad. Mit Tests; die Praxisprobe auf einem solchen Rechner steht aus. - Eine Absage an der Bewerbung beim Vermittler fehlte in der Historie des Endkunden (#1080). - **Aus der Praxisprobe auf einem frischen Windows 11 (05.10.2026):** - Der Reiter „Erweiterungen“ stürzte auf jedem Rechner ab, auf dem die Texterkennung noch fehlt (ein Variablenname war beim Umlaut-Austausch an einer Stelle geändert worden). Ein Absturz in einem Reiter der Einstellungen lässt die anderen Reiter jetzt in Ruhe. - Der Knopf „Deinstaller starten“ (Einstellungen › Gefahrenzone) öffnete unter Windows nie ein Fenster, sondern meldete „Kein Terminal gefunden“ — die Flags des Prozessstarts schließen sich aus. Behoben, mit einem Test, der das Betriebssystem wirklich fragt. - Der Deinstaller räumt jetzt auch die Konfiguration von Claude aus dem Microsoft Store auf (der Eintrag blieb stehen, Claude meldete danach bei jedem Start einen Server ohne Programm) und schließt das Dashboard-Fenster. - Der Deinstaller ließ unter Windows rund 830 MB liegen, die der Installer außerhalb von PBP geladen hat: den Browser für Quellen (Playwright, `%LOCALAPPDATA%\ms-playwright`, rund 700 MB) und den Zwischenspeicher von pip (rund 125 MB) — ohne es zu erwähnen (macOS und Linux fragen). Er fragt jetzt zum Schluss, mit Ort und Größe; die Vorgabe ist **Behalten**, und nur ein einzelnes „j“ löscht. Der Browser-Ordner geht ganz, von pip nur der Unterordner `Cache` (die Einstellungsdatei eines anderen Programms bleibt). Dieselben Ordner nutzen andere Programme mit, deshalb im Zweifel behalten. - Die Fehlermarke `[!!]` erschien in Installer und Deinstaller als `[]`: unter `EnableDelayedExpansion` verschluckt `cmd` das Paar `!!`. Betroffen waren zehn Meldungen („… konnte nicht entfernt werden“, „Datei in Benutzung?“ u. a.); wer einen Fehler hatte, sah nur leere Klammern vor dem Text. Maskiert; ein Test verbietet die ungeschützte Schreibweise. - Der Deinstaller ließ nach dem Start über den Knopf einen leeren Ordner `%LOCALAPPDATA%\BewerbungsAssistent\app` liegen (Schritt [5/7] meldete „konnte nicht entfernt werden“): das neue Fenster hatte diesen Ordner als Arbeitsordner, und ein Prozess hält seinen Arbeitsordner fest. Gefunden bei der Gegenprobe der Reparaturen auf demselben Rechner; das Fenster öffnet jetzt im Temp-Ordner, und die Datei verlässt den Ordner, bevor sie sich verschiebt. - Weitere Funde derselben Gegenprobe, behoben: - Die verschobene Kopie des Deinstallers (`PBP-Deinstaller-.bat`, rund 15 KB) blieb in `%TEMP%` liegen; sie räumt sich jetzt selbst weg. - Der Deinstaller schrieb die Konfiguration von Claude in der Formatierung von Windows PowerShell neu (rund siebenmal so groß) und ließ `"mcpServers": {}` stehen. Jetzt nimmt er nur den PBP-Eintrag aus dem Text, der Rest bleibt Byte für Byte; das Ergebnis wird geprüft, und wo der Text-Weg nicht passt, gilt der bisherige. - Das Dashboard-Fenster zeigt nur noch Warnungen und Fehler (die Log-Datei bekommt weiter alles; `BA_CONSOLE_LEVEL=INFO` zeigt alles). Vorher schoben sich Protokollzeilen in die Frage „Claude jetzt neu starten?“ und füllten den ersten Start mit Dutzenden Zeilen. - Der Browser öffnet sich erst, wenn das Dashboard antwortet (auf einem frischen Rechner zeigte Chrome „Verbindung verweigert“), und nur einmal: der Installer unterdrückt das Öffnen im von ihm gestarteten Fenster und öffnet selbst, nach seiner Prüfung. - Am Ende jeder gelungenen Installation stand „Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch.“, und die Einstellung zum Aufräumen des Installationsordners (nie, fragen, immer) wurde nie gelesen. `cmd` schneidet bei einem Befehl in `for /f` mit mehr als zwei Anführungszeichen das erste und das letzte ab; ein zusätzliches Paar um den ganzen Befehl behebt das. - Das Dashboard startete nicht, solange die Frage „Claude jetzt neu starten?“ unbeantwortet blieb; der Installer wartete umsonst und öffnete „Verbindung verweigert“. Die Frage kommt jetzt erst, wenn das Dashboard läuft. - Der Installer startet Claude aus dem Store am Ende (statt „nicht gefunden“); die Ausgabe enthält keine Sonderzeichen mehr, die die Konsole verstümmelt. - Auf den Karten der Erweiterungen und Quellen standen Kennungen aus der Planung („…(E19)“); entfernt. - Das Titelbild des Wikis zeigte seit v1.7.137 eine Fehlerkarte („Dieser Bereich ist abgestürzt“); der Screenshot-Generator prüft jetzt jede Aufnahme. - **Die Ordner für Lebensläufe, Anschreiben und Vorlagen: drei Fehler, alle seit v1.7.59** (#1173). (1) Die Karte „Deine eigenen Ordner“ und der Hinweis in der Gefahrenzone („Bleibt: Ablageordner …“) nannten den Ordner des Nutzers nie: gespeichert wird je Profil, gelesen wurde ohne Profil, die Liste war immer leer — ein Test blieb dabei grün, weil er die Einstellung auf dem anderen Weg schrieb. (2) „Zurücksetzen“ (das Feld leeren) endete im Dashboard mit „HTTP 400“, nur das Werkzeug für Claude kannte den Platzhalter „-“; die Regel steht jetzt an einer Stelle (`ablage.ordner_setzen`). (3) Bei einem ungültigen Pfad stand am Feld ebenfalls nur „HTTP 400“ statt der Begründung („Diesen Ordner gibt es nicht …“); die Antwort nennt den Grund jetzt als `error`, und die Oberfläche liest ihn. Eingebettet steht der Satz zum verschwundenen Ordner nur noch einmal da. - **Beim Start ohne laufendes Claude Desktop stand ein Python-Fehler im Dashboard-Fenster** (#1182; seit v1.7.150, auch in der stabilen Version). Die Prüfung „läuft Claude Desktop?“ las die Ausgabe von `tasklist` als Text mit der Standardkodierung (cp1252). Läuft Claude nicht, antwortet Windows deutsch „… Kriterien ausgeführt.“; das „ü“ schreibt die Konsole als Byte `0x81` (cp850), das in cp1252 nicht definiert ist — der Lese-Thread brach ab, ein `UnicodeDecodeError` stand im Fenster, und die Prüfung stimmte nur zufällig. Jetzt liest sie Bytes und sucht nach dem Namen (`services/konsole.py`); die PowerShell-Aufrufe (Desktop-Pfad, Verknüpfung „Ollama beenden“, Store-Start von Claude) lesen in der Kodierung der Konsole, mit Ersatzzeichen statt Abbruch (ein Desktop-Pfad mit „ü“ brach sonst ebenso ab). Ein Wächter-Test verlangt bei jedem `text=True` im Quelltext eine Kodierung. Gegenprobe: Katalog „konsole“, 11 absichtlich eingebaute Fehler. - **Stellen aus Google Jobs behaupteten ein Arbeitsmodell und einen Ort, die nur auf Googles Karte standen** (#1184; seit `stelle_manuell_anlegen`, auch in der stabilen Version). Ein Treffer mit „Beliebiger Ort, Homeoffice“ wurde als `remote` angelegt: die Entfernung fiel weg, der Rahmenscore stieg, und die Stelle — in Wahrheit rund 570 km entfernt und nur mit „mobilem Arbeiten“ — wäre nach oben sortiert worden. Jetzt gelten Remote und Ort einer Google-Stelle erst, wenn das Original vorliegt (Detail-URL des Arbeitgebers und Anzeigentext, `services/google_angaben`): davor entscheidet der Text über das Arbeitsmodell (sonst `unbekannt`, dieselbe Regel wie bei JobSpy, B63), und die Entfernung wird nicht aus Googles Ort gerechnet. Wird das Original mit `stelle_bearbeiten` nachgetragen, holt PBP beides nach. Gegenprobe: Katalog „google“, 33 absichtlich eingebaute Fehler. - **Eine aussortierte Stelle wurde beim Anlegen nicht erkannt** (#1184). Die Prüfung beim Anlegen verglich nur laufende Bewerbungen und aktive Stellen, und der Textvergleich braucht einen Anzeigentext, den Kopfdaten aus Google nicht haben. Jetzt steht eine aussortierte Stelle gleicher Firma und gleichen Titels — oder gleichen Titels am gleichen Ort unter anderem Firmennamen (Muttermarke gegen Konzernunternehmen) — als `aussortierte_dublette` im Ergebnis, mit dem Aussortier-Grund. Die Stelle wird weiter angelegt: gemeldet, nicht geblockt. - **Ein Lauf über die Browser-Quellen legte keine einzige Stelle in PBP an** (#1187; seit der Browser-Suche, auch in der stabilen Version). Ein Lauf über sechs Quellen mit rund 1.300 Rohtreffern endete mit 0 angelegten Stellen: Fünf Anleitungen (Auftrag je Quelle, Handoff einer Quelle, Workflow-Prompt der Jobsuche, `google_jobs_url`, LinkedIn-Plan) sagten Claude, „passende“ Stellen zu übernehmen und Verworfenes im Chat zu melden — die Auswahl traf Claude, der Mensch sah nur den Bericht, und der Katalogtext von `stelle_manuell_anlegen` sagte dazu „nicht für Treffer aus einer Jobbörse“. Jetzt steht in jeder Anleitung dieselbe Regel (eine Fassung, `services/browser_handoff.REGEL_IM_ZWEIFEL`): im Zweifel eintragen; eine Stelle zu viel ist besser als eine zu wenig, ob sie taugt, entscheidet der Mensch in PBP. Urteil und Zweifelsgrund gehen an die Stelle (`stelle_urteil_speichern`), dazu ob die Anzeige noch offen ist; schon Aussortiertes, das nach dem Lesen fachlich passt, holt `stelle_reaktivieren` zurück; aussortiert wird nur Offensichtliches, mit Grund. Der Bericht im Chat ersetzt die Einträge nicht. Ein Test verlangt die Regel in jeder Anleitung, ein zweiter verbietet die alte Formulierung im ganzen Quelltext. - **Die Vorschau der Sammelübernahme prüfte nichts** (#1187; `linkedin_treffer_uebernehmen`, Vorgabe `dry_run=True`). Sie kehrte vor jeder Prüfung zurück und meldete „alle angelegt“, wo der echte Lauf Dubletten, laufende Bewerbungen oder die Blacklist abgewiesen hätte. Jetzt stellt sie dieselben Fragen wie die Anlage (Blacklist, gleiche Kennung, laufende Bewerbung, aktive und aussortierte Stellen, Hinweise), schreibt aber nichts — auch kein Protokoll der Blacklist und keinen Kontakt — und zählt dieselbe Stelle, die zweimal im Aufruf steht, nur einmal. `aussortierte_dublette` erscheint jetzt auch im Eintrag der Sammelübernahme und in der Zeile des Trichters („schon aussortiert“). Der Hinweis zur aussortierten Dublette lässt den Zweifel zu: gilt der Grund weiter, wird die neue Stelle mit demselben Grund eingeordnet; passt sie fachlich, bleibt sie aktiv. Gegenprobe: Katalog „browser“, 30 absichtlich eingebaute Fehler. - **Bei jedem Skill nannte Claude nur die Spitze, nicht den Stand von heute** (#1190; seit v1.6.0, auch in der stabilen Version). `profil_zusammenfassung` gab in `skills_liste` nur `level` aus — die höchste Stufe, die ein Skill je hatte. Die Oberfläche zeigt den aktuellen Stand und bei ruhenden Skills „ruht (Spitze x/5)“. Ein Skill, den jemand seit Jahrzehnten nicht mehr einsetzt, ging so als Experte an eine fremde Plattform. Jetzt nennt jeder Eintrag `level_aktuell`, `level_spitze`, `ruht`, den Zeitraum (`seit`, `bis`) und `zuletzt_genutzt`; ist ein Skill beendet und kein heutiges Niveau eingetragen, steht `level_aktuell` auf leer, und Claude soll nachfragen, statt die Spitze zu nehmen. Das mehrdeutige Feld `level` entfällt; der Text der Zusammenfassung und die Antwort „bereits vorhanden“ sagen dasselbe. Gegenprobe: Katalog „skillstand“, 10 absichtlich eingebaute Fehler. - **Die Gefahrenzone zählte mitgelieferte Vorgaben als deine Daten** (#1170 U9). Eine frische Installation zeigte „Bewerbungen: 7 Datensätze — Enthält Namen und Mailadressen Dritter“; die sieben waren die mitgelieferten Kontaktkategorien (ebenso „Einstellungen: 35“: Regler und Ablehnungsgründe). Gezählt wird jetzt, was du angelegt oder verstellt hast; die Vorgaben stehen als „ohne N mitgelieferte Vorgaben“ daneben und gehen beim Leeren mit. - **Sichtbare Texte in Umschrift** (#1170 U13): „fuer“, „einfuegen“, „Datensaetze“, „oeffnen“, „Menue“ und rund 30 weitere Stellen (Elwosa-Chat, Einstellungen, Kontakte, Dokumente). Der Textprüfer der CI las Text neben einem Ausdruck (`{n} Datensaetze`) nie und verlor hinter einem verirrten Anführungszeichen alle Zeichenketten der Datei; beides ist behoben, er findet jetzt 0 Stellen. - **In der Statistik lief „AUSSORTIERT“ in die Nachbarkachel** (#1170 U14), bei Fenstern unter 1536 px Breite. - **Kleinigkeiten** (#1170 U18): „Aufräumen“ ist dort nicht klickbar, wo nichts liegt; die Kopfzeile der Kontakte nennt im Reiter „Firmen“ die Firmen und trägt dort nicht die Knöpfe der Kontaktliste; die lokale KI zeigt keinen rohen Fehlertext („“) mehr; die Firmenkarte trägt keinen Platzhaltersatz. ### Known Issues - Die Sprachdaten der Texterkennung (tessdata) werden weiterhin ohne Prüfsumme nachgeladen (#1165). - Verlorener Schlüssel: Geht der Hauptschlüssel zum Signieren verloren, kann ein mit dem Notfallschlüssel signiertes Update einen neuen eintragen; geht auch der Notfallschlüssel verloren, braucht es eine Installation von Hand. - Läufe über die Browser-Quellen werden noch nirgends verbucht, und nur LinkedIn hat ein Werkzeug, das mehrere Treffer auf einmal übernimmt (#1187, nächste Stufen). - Auto-Update nur unter Windows. - Ein Add-on für den Ordner-Scan fehlt noch (Outlook-Add-In #480 offen). *Schema v52 (unverändert), 281 MCP-Werkzeuge, 8545 Tests.* --- ## 📦 Wie installiere oder aktualisiere ich PBP? **Unter Windows** brauchst du kein Git, kein Python, kein Vorwissen — nur einen ZIP-Download und einen Doppelklick. **Unter macOS** muss vorher einmalig Python 3.11+ installiert sein (siehe unten), **unter Linux** Git und Python. Voraussetzung ueberall: [Claude Desktop](https://claude.ai/download) ist installiert (Linux: alternativ Claude Code CLI). ### Windows (empfohlen, bequemster Weg) 1. **ZIP herunterladen:** [PBP-1.8.0-rc.1.zip](https://github.com/MadGapun/PBP/archive/refs/tags/v1.8.0-rc.1.zip) 2. **Entpacken:** Rechtsklick auf die ZIP → *„Alle extrahieren..."* → Zielordner waehlen (z.B. `C:\PBP`). Darin liegt ein Unterordner `PBP-...` — dort hinein wechseln. 3. **Installieren:** Doppelklick auf **`INSTALLIEREN.bat`** 4. Das Setup laedt Python, alle Pakete und Chromium herunter (~3–5 Minuten) und konfiguriert Claude Desktop. 5. Auf dem Desktop liegt jetzt eine Verknuepfung **„PBP Bewerbungs-Portal"** — Doppelklick startet das Dashboard. 6. **Claude Desktop oeffnen** (lief es schon: komplett beenden — Rechtsklick aufs Claude-Symbol unten rechts in der Taskleiste → *Beenden* — und neu starten) und tippen: **„Starte die Ersterfassung"** 7. Taucht PBP nicht auf: Claude Desktop nochmal komplett beenden und neu starten — siehe [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ). ### macOS 1. **Einmalig vorab: Python 3.11+** — am einfachsten der [Installer von python.org](https://www.python.org/downloads/) (Doppelklick), alternativ `brew install python@3.12` 2. **ZIP herunterladen** (siehe Windows-Link) und **entpacken** (Doppelklick; im ZIP liegt ein Unterordner `PBP-...`) 3. **Doppelklick auf `INSTALLIEREN.command`** 4. Falls macOS warnt („kann nicht geoeffnet werden"): Rechtsklick auf die Datei → *„Oeffnen"* → nochmal *„Oeffnen"* ### Linux ```bash git clone --branch v1.8.0-rc.1 --depth 1 https://github.com/MadGapun/PBP.git cd PBP bash installer/install.sh ``` `v1.8.0-rc.1` ist die Version DIESES Releases. Ohne `--branch` klont man `main` — das ist ein älterer Stand der Beta-Linie, nicht diese Version (#1150). ### Update von einer aelteren Version **Einfach drüberinstallieren** — deine Daten bleiben erhalten: - Windows: `%LOCALAPPDATA%\BewerbungsAssistent\data\pbp.db` - macOS/Linux: `~/.bewerbungs-assistent/pbp.db` Schema-Upgrade läuft automatisch beim ersten Start, ein Backup wird vorher erstellt (Ordner `data\backups\`). ### Detaillierte Anleitung & Troubleshooting 📖 [Wiki → Installation](https://github.com/MadGapun/PBP/wiki/Installation) · [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ) --- ## [1.8.0-beta.19] - 2026-10-08 — Neue Versionen werden überall gleich gemeldet, und beim Start steht kein Fehlertext mehr (Vorabversion) Vorabversion zum Ausprobieren: Erscheint eine neuere Beta, sagen es die Seitenleiste, die Seite Einstellungen › Updates und das Dashboard jetzt gleich — mit dem Weg dorthin (ZIP laden, Installer starten). Elwosa nennt die neue Version ebenfalls, einmal je Version, mit einem Link zu den Veröffentlichungsnotizen. Und startest du PBP, während Claude Desktop nicht läuft, steht im schwarzen Fenster kein Python-Fehlertext mehr. > **Prerelease.** Gegenüber beta.18 ist nur das hier neu (die Datenbank bleibt auf dem Schema v52): > > - **Von beta.18 auf beta.19:** einfach drüberinstallieren (ZIP laden, `INSTALLIEREN.bat`); vorher legt der Installer wie immer eine Sicherung an. > - **Das automatische Aktualisieren installiert nie eine Vorabversion.** Neue Betas holst du wie diese: ZIP laden, `INSTALLIEREN.bat`. > - **Zurück zu 1.7.x:** erst `DEINSTALLIEREN.bat` (deine Bewerbungsdaten bleiben, solange du bei der Frage danach nicht „LOESCHEN“ tippst), > dann das ZIP von v1.7.156 installieren. Soll auch die Datenbank zurück auf v48, beendest du PBP und kopierst die Sicherung aus `data\backups\` als `pbp.db` in den Datenordner; was seit der Sicherung eingetragen wurde, fehlt dann. Diese Beta setzt zwei Funde und einen Wunsch aus dem Ausprobieren von beta.17 um: die Seitenleiste, die eine neue Beta meldete, während die Update-Seite „Aktuell“ sagte und keinen Knopf hatte (#1179), den Wunsch, dass Elwosa die neue Version nennt (#1180), und den Python-Fehler im Fenster beim Start ohne laufendes Claude Desktop (#1182). Der Fehler im Fenster steckte auch in der stabilen Version und ist dort als Hotfix v1.7.156 erschienen; die Meldung der Vorabversion betrifft nur diese Linie. **Wichtig zu wissen:** - **Eine neuere Vorabversion wird überall gleich gemeldet.** Die Seitenleiste sagt „Neue Vorabversion verfügbar“; die Seite Einstellungen › Updates zeigt statt „Aktuell“ „Neue Vorabversion“ mit einer Karte: warum PBP sie nicht von selbst installiert (auch nicht mit „Mit einem Klick“), drei Schritte und die Knöpfe „ZIP herunterladen“ und „Veröffentlichung ansehen“; das Dashboard zeigt denselben Hinweis. „Jetzt prüfen“ fragt beide Auskünfte, die allgemeine Prüfung und die des automatischen Aktualisierens. - **Elwosa nennt eine neue Version.** Sobald die allgemeine Prüfung eine findet, einmal je Version, mit dem Titel der Veröffentlichung und einem Link „Zu den Notizen“; eine Vorabversion als solche. Elwosa schweigt, wenn die Version schon installiert ist, und erscheint nur, wenn die lokale KI aktiv ist. Wie bei allen Meldungen von Elwosa gelten die Einstellungen zu Tonfall und Pause. - **Beim Start ohne laufendes Claude Desktop steht kein Fehlertext mehr im Fenster.** Die Prüfung „läuft Claude Desktop?“ las die deutsche Antwort von Windows mit der falschen Kodierung. Dieselbe Ursache steckte an drei weiteren Stellen (Desktop-Pfad, Verknüpfung „Ollama beenden“, Start von Claude aus dem Microsoft Store); ein Wächter-Test verlangt jetzt bei jedem Aufruf, der Text liest, eine Kodierung. - **Noch nicht drin:** ein Schalter für Tester, der eine Vorabversion auf Wunsch mit einem Klick installiert (Frage am Issue #1179); Kontakte, Firmen und Aufgaben in der Suche (Frage am Issue #1177); die feste Weg-Leiste in jedem Dialog, der Rückweg mit Zustand und die kompakten Listenköpfe (Fragen am Issue #1171). ### Added - **Vorabversionen in der Oberfläche** (#1179): `lib/autoUpdate.js` kennt `istVorabversion`, `vorabNeu` (eine neuere Vorabversion aus der allgemeinen Prüfung, wenn die feste Quelle des automatischen Aktualisierens keine kennt und sie nicht schon von Hand installiert ist) und `vorabHinweis`; die Update-Seite zeigt „Neue Vorabversion“ mit einer Karte (Erklärung, drei Schritte, „ZIP herunterladen“, „Veröffentlichung ansehen“), das Dashboard denselben Hinweis in der Hinweiszone — auch auf Installationen mit automatischem Aktualisieren, wo dort bisher gar nichts stand —, die Seitenleiste „Neue Vorabversion verfügbar“. Die FAQ nennt den Weg. - **Elwosa-Kanal „Update“** (#1180, `services/elwosa_provider.update_kandidaten`): einmal je Version (gemerkt im Profil-Setting `elwosa_update_version`), mit dem Titel der Veröffentlichung und einem Link auf die Notizen; die Prüfung merkt dafür ihren Befund (`update_quelle.befund_merken`). Regelbasiert wie alle Kanäle, über `post_candidate` (Sprach-DNA, aus/Pause/Cooldown, Kind- und Inhalts-Sperre). - **`services/konsole.py`** (#1182): `konsole_kodierung()` (die Kodierung der Konsole: OEM unter Windows, sonst UTF-8) und `text_lesen()` (Bytes in Text, ohne Abbruch bei unlesbaren Zeichen) — ein Ort dafür, wie die Ausgabe von Konsolenprogrammen gelesen wird. - Gegenprobe (`scripts/mutationstest_auto_update.py`): neun Kataloge, 350 absichtlich eingebaute Fehler (Auto-Update 101, Speicher 37, Komponenten 6, Mail 20, Firmen 86, Wege 38, Suche 23, Vorab 28, Konsole 11); die Tests erkennen alle bis auf einen begründet gleichwertigen und zwei, die Symlink-Recht brauchen. Neu sind die Kataloge „Vorab“ (Meldung der Vorabversion, Elwosa-Kanal) und „Konsole“ (Kodierung der Ausgaben). ### Changed - „Jetzt prüfen“ auf der Update-Seite fragt die allgemeine Prüfung und die des automatischen Aktualisierens (#1179). - `systemctl`, `antiword` und der alte Installer mit Fenster (`installer/setup_gui.py`) lesen mit `errors="replace"`; die PowerShell-Aufrufe lesen in der Kodierung der Konsole (#1182). ### Fixed - **Die Seitenleiste meldete eine neue Beta, die Update-Seite sagte „Aktuell“ und hatte keinen Knopf** (#1179; seit beta.16). Zwei Auskünfte zur selben Frage: die allgemeine Prüfung (`/api/update-check`) nennt einer Beta-Installation auch neuere Betas, die feste Quelle des automatischen Aktualisierens (`/api/auto-update`) kennt nie eine Vorabversion. Die Seitenleiste folgte der ersten, die Update-Seite der zweiten, und die Hinweiszone des Dashboards zeigte auf Installationen mit automatischem Aktualisieren gar nichts. Jetzt sagen alle drei dasselbe und zeigen den Weg (ZIP laden, Installer starten); installiert wird eine Vorabversion weiterhin nie von selbst. - **Beim Start ohne laufendes Claude Desktop stand ein Python-Fehler im Dashboard-Fenster** (#1182; seit v1.7.150, auch in der stabilen Version; dort behoben mit v1.7.156). Die Prüfung „läuft Claude Desktop?“ las die Ausgabe von `tasklist` als Text mit der Standardkodierung (cp1252). Läuft Claude nicht, antwortet Windows deutsch „… Kriterien ausgeführt.“; das „ü“ schreibt die Konsole als Byte `0x81` (cp850), das in cp1252 nicht definiert ist — der Lese-Thread von `subprocess` brach ab, ein `UnicodeDecodeError` stand im Fenster, und die Prüfung stimmte nur zufällig. Jetzt liest sie Bytes und sucht nach dem Namen; die PowerShell-Aufrufe (Desktop-Pfad, Verknüpfung „Ollama beenden“, Store-Start von Claude) lesen in der Kodierung der Konsole, mit Ersatzzeichen statt Abbruch (ein Desktop-Pfad mit „ü“ im Benutzernamen brach sonst ebenso ab). ### Known Issues - Eine Vorabversion lässt sich nicht mit einem Klick installieren; PBP zeigt den Weg (ZIP laden, Installer starten). Ob es dafür einen Schalter für Tester geben soll, steht als Frage am Issue #1179. - Kontakte, Firmen und Aufgaben findet die Suche oben noch nicht (Frage am Issue #1177). - Google-Jobs-Treffer: Remote und Ort aus Google, aussortierte Dubletten beim Anlegen und Alert-Mails als Stellenquelle sind eingeordnet (#1184), aber nicht Teil dieser Beta. - Die drei Fehler an den Ordner-Feldern (#1173) und das rote „Offen“ (#1174) stecken auch in der stabilen Version v1.7.156; behoben sind sie bisher nur in dieser Linie. - Die Seiten „Kalender“, „Profil“, „Statistik“ und „Einstellungen“ ersetzen sich beim Nachladen noch durch die Ladeanzeige (offene Fenster dort flackern kurz). - Anklickbare Namen (Person, Firma) sind erst beim Darüberfahren unterstrichen; ob sie dauerhaft unterstrichen sein sollen, ist als Frage an #1171 gestellt. - Acht ältere Stellen im Code haben dasselbe Muster wie die Ursache der Leerlauf-Last aus beta.17 (`App.jsx` ×2, die Ablage für Dokumente ×3, der Einrichtungsassistent ×3); bei ihnen wurde nichts Auffälliges gemessen, sie sind im Wächter-Test als Bestand benannt. - Die Sprachdaten der Texterkennung (tessdata) werden weiterhin ohne Prüfsumme nachgeladen (#1165). - Verlorener Schlüssel: Geht der Hauptschlüssel zum Signieren verloren, kann ein mit dem Notfallschlüssel signiertes Update einen neuen eintragen; geht auch der Notfallschlüssel verloren, braucht es eine Installation von Hand. - Auto-Update nur unter Windows. - Ein Add-on für den Ordner-Scan fehlt noch (Outlook-Add-In #480 offen). - Die Wiki-Seiten zu den neuen Funktionen erscheinen erst mit 1.8.0. Bis dahin führt der Knopf „Anleitung“ bei den Mail-Ordnern auf die Startseite des Wikis. - Noch nicht in der Praxis gesehen: das Herunterladen der Texterkennung (55 MB) auf einem frischen Rechner, das Drüberinstallieren über eine 1.7-Fassung auf einem zweiten Rechner (die Schritte sind in Tests und an Kopien echter Daten geprüft; die Datenbank wird vorher gesichert), das automatische Aktualisieren selbst und der Rückfall auf die vorige Fassung (beides braucht eine zweite veröffentlichte Version). ### Gemessen 51 neue Tests (8.318 gesamt, gezählt im Klon des Zweigs; beta.18 hatte 8.267): 11 in `tests/test_v18_update_vorabversion_1179.py` (im Browser gegen das gebaute Bundle, mit Attrappen für die Antworten des Servers: Seitenleiste und Update-Seite sagen bei einer neueren Beta dasselbe, die beiden Knöpfe, der Hinweis im Dashboard und seine Rangfolge gegenüber Dringenderem, „Aktuell“ ohne neuere Version, eine von Hand installierte Vorabversion, „Jetzt prüfen“; 6 davon schlagen auf beta.18 an), 26 in `tests/test_v18_elwosa_update_1180.py` (der Kanal „Update“: kein Befund, nichts Neues, eine neue Version mit Titel und Link, eine Vorabversion, eine unbrauchbare Version, ein Titel gegen die Sprach-DNA, ein zu langer Titel, einmal je Version, eine schon installierte Version, die Reihenfolge der Kanäle, Aus und Pause, der Eintrag im Chat) und 14 in `tests/test_v18_konsole_ausgabe_1182.py` (ein Kindprozess schreibt genau die Bytes, die Windows schreibt, das „ü“ als `0x81`, und der Aufrufer wählt die Optionen wie im Betrieb: vorher bricht der Lese-Thread ab, nachher nicht; dazu der Wächter, der bei jedem `text=True` im Quelltext eine Kodierung verlangt, samt Selbsttest). Gegenprobe (jeder Eingriff einzeln, jeder macht mindestens einen Test rot), gelaufen auf den Ständen der beiden Zweige vor der Zusammenführung: Katalog „Vorab“ 28 von 28 erkannt, Katalog „Konsole“ 11 von 11; ein Wächter-Test hält fest, dass jedes Muster aller Kataloge im Quelltext genau einmal vorkommt (auf dem Endstand grün). Auf dem Endstand, Windows: 1.055 gezielte Tests bestanden, 1 übersprungen, 0 Fehler (die drei neuen Dateien, die Tests des automatischen Aktualisierens, der Update-Hinweise, von Elwosa, der Sicherung vor dem Update, des Claude-Neustarts, von Ollama, der Seitenleiste und der Wächter); das neu gebaute Dashboard ist Byte für Byte das eingecheckte. Der volle Lauf auf Windows (rund 35 Minuten) wurde für diese Beta nicht wiederholt. GitHub-Lauf (Linux) auf den Ständen der beiden Zweige vor der Zusammenführung: 8.218 bestanden, 86 übersprungen (Update-Hinweis und Elwosa-Kanal) und 8.193 bestanden, 88 übersprungen (Kodierung der Konsole), je 0 Fehler (die Übersprungenen sind plattformgebunden). *Schema v52 (gegenüber der Stable-Linie v48 angehoben), 281 MCP-Werkzeuge, 8318 Tests.* --- ## 📦 Wie installiere oder aktualisiere ich PBP? **Unter Windows** brauchst du kein Git, kein Python, kein Vorwissen — nur einen ZIP-Download und einen Doppelklick. **Unter macOS** muss vorher einmalig Python 3.11+ installiert sein (siehe unten), **unter Linux** Git und Python. Voraussetzung ueberall: [Claude Desktop](https://claude.ai/download) ist installiert (Linux: alternativ Claude Code CLI). ### Windows (empfohlen, bequemster Weg) 1. **ZIP herunterladen:** [PBP-1.8.0-beta.19.zip](https://github.com/MadGapun/PBP/archive/refs/tags/v1.8.0-beta.19.zip) 2. **Entpacken:** Rechtsklick auf die ZIP → *„Alle extrahieren..."* → Zielordner waehlen (z.B. `C:\PBP`). Darin liegt ein Unterordner `PBP-...` — dort hinein wechseln. 3. **Installieren:** Doppelklick auf **`INSTALLIEREN.bat`** 4. Das Setup laedt Python, alle Pakete und Chromium herunter (~3–5 Minuten) und konfiguriert Claude Desktop. 5. Auf dem Desktop liegt jetzt eine Verknuepfung **„PBP Bewerbungs-Portal"** — Doppelklick startet das Dashboard. 6. **Claude Desktop oeffnen** (lief es schon: komplett beenden — Rechtsklick aufs Claude-Symbol unten rechts in der Taskleiste → *Beenden* — und neu starten) und tippen: **„Starte die Ersterfassung"** 7. Taucht PBP nicht auf: Claude Desktop nochmal komplett beenden und neu starten — siehe [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ). ### macOS 1. **Einmalig vorab: Python 3.11+** — am einfachsten der [Installer von python.org](https://www.python.org/downloads/) (Doppelklick), alternativ `brew install python@3.12` 2. **ZIP herunterladen** (siehe Windows-Link) und **entpacken** (Doppelklick; im ZIP liegt ein Unterordner `PBP-...`) 3. **Doppelklick auf `INSTALLIEREN.command`** 4. Falls macOS warnt („kann nicht geoeffnet werden"): Rechtsklick auf die Datei → *„Oeffnen"* → nochmal *„Oeffnen"* ### Linux ```bash git clone --branch v1.8.0-beta.19 --depth 1 https://github.com/MadGapun/PBP.git cd PBP bash installer/install.sh ``` `v1.8.0-beta.19` ist die Version DIESES Releases. Ohne `--branch` klont man `main` — das ist ein älterer Stand der Beta-Linie, nicht diese Version (#1150). ### Update von einer aelteren Version **Einfach drüberinstallieren** — deine Daten bleiben erhalten: - Windows: `%LOCALAPPDATA%\BewerbungsAssistent\data\pbp.db` - macOS/Linux: `~/.bewerbungs-assistent/pbp.db` Schema-Upgrade läuft automatisch beim ersten Start, ein Backup wird vorher erstellt (Ordner `data\backups\`). ### Detaillierte Anleitung & Troubleshooting 📖 [Wiki → Installation](https://github.com/MadGapun/PBP/wiki/Installation) · [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ) --- ## [1.8.0-beta.18] - 2026-10-07 — Die Suche öffnet, was sie findet (Vorabversion) Vorabversion zum Ausprobieren: Ein Klick auf einen Treffer der Suche oben öffnet jetzt das Objekt — die Bewerbung, die Stelle, das Dokument, die Mail, den Termin oder den Skill. Den Ordner für deine Lebensläufe und Anschreiben änderst du dort, wo du siehst, wie viel darin liegt (Einstellungen › Erweitert › Speicher & Downloads), und im Dashboard-Block „Offen“ ist nur noch rot, was überfällig ist. > **Prerelease.** Gegenüber beta.17 ist nur das hier neu (die Datenbank bleibt auf dem Schema v52): > > - **Von beta.17 auf beta.18:** einfach drüberinstallieren (ZIP laden, `INSTALLIEREN.bat`); vorher legt der Installer wie immer eine Sicherung an. > - **Das automatische Aktualisieren installiert nie eine Vorabversion.** Neue Betas holst du wie diese: ZIP laden, `INSTALLIEREN.bat`. > - **Zurück zu 1.7.x:** erst `DEINSTALLIEREN.bat` (deine Bewerbungsdaten bleiben, solange du bei der Frage danach nicht „LOESCHEN“ tippst), > dann das ZIP von v1.7.155 installieren. Soll auch die Datenbank zurück auf v48, beendest du PBP und kopierst die Sicherung aus `data\backups\` als `pbp.db` in den Datenordner; was seit der Sicherung eingetragen wurde, fehlt dann. Diese Beta setzt drei Wünsche um, die beim Ausprobieren von beta.17 kamen: die Suche, die beim Klick nichts tat (#1177), der eigene Ordner für Lebensläufe und Anschreiben, der sich nur an versteckter Stelle ändern ließ (#1173), und der Block „Offen“, der wegen einer einzigen überfälligen Zeile ganz rot war (#1174). Der Fehler in der Suche steckte auch in der stabilen Version und ist dort als Hotfix v1.7.155 erschienen; die Ordner-Felder und das rote „Offen“ sind bisher nur in dieser Linie behoben. **Wichtig zu wissen:** - **Ein Klick auf einen Treffer der Suche öffnet das Objekt.** Eine Bewerbung öffnet ihre Timeline, eine Stelle ihre Details (auch eine aussortierte), ein Dokument steht aufgeklappt auf der Dokumente-Seite (sein Name im Suchfeld der Seite, das × daneben zeigt wieder alle), eine E-Mail öffnet ihr Fenster (auch wenn sie zu keiner Bewerbung gehört), ein Termin mit Bewerbung deren Timeline direkt am Abschnitt „Termine“, ein Termin ohne Bewerbung den Kalender mit dem geöffneten Termin, ein Skill das Profil mit der Skills-Liste auf seinen Namen gefiltert (ab sieben Skills, wo das Filterfeld steht). Das gilt auch, wenn du schon auf der Zielseite bist, und derselbe Sprung funktioniert für Adressen wie `#dokumente/` und `#kalender/`. - **Den Ordner für Lebensläufe, Anschreiben und Vorlagen änderst du auf der Seite „Speicher & Downloads“.** Die Karte „Deine eigenen Ordner“ steht immer da und trägt die Eingabefelder; danach misst die Seite neu, wie viel dort liegt. „Zurücksetzen“ (das Feld leeren) geht jetzt, und bei einem ungültigen Pfad steht der Grund da statt „HTTP 400“. Die anderen Orte sind durch die Installation bedingt und bleiben ohne Eingabe. - **Im Block „Offen“ ist nur noch rot, was überfällig ist.** Die Karte bleibt ruhig; rot sind die Überschrift „Überfällig“ und das Datum der überfälligen Zeilen. „Heute“ und „Diese Woche“ sind unverändert. - **Noch nicht drin:** Kontakte, Firmen und Aufgaben findet die Suche noch nicht (Frage am Issue #1177); die feste Weg-Leiste in jedem Dialog, der Rückweg mit Zustand und die kompakten Listenköpfe warten auf Antworten am Issue #1171. ### Added - **Ein Weg für Treffer und Links** (#1177): `services/dashboard_link.hash_ziel` baut die eine Adressform `#seite/kennung` (für die Links, die Claude nennt, und für die Treffer der Suche); `lib/wege.js` kennt `zuMail`, `zuProfil` und `zuSuchtreffer`; `sprungAusHash` liest zusätzlich `#dokumente/`, `#kalender/` und `#profil/skills`; `GET /api/documents?doc_id=` liefert genau ein Dokument; die Sprungleiste der Timeline springt beim Öffnen in einen genannten Abschnitt. - **Die Karte „Deine eigenen Ordner“ trägt die Eingabefelder** (#1173) für Ausgabe- und Vorlagen-Ordner: dieselbe Komponente und dieselbe Prüfung wie unter Einstellungen › Ordner, und die Seite „Speicher & Downloads“ misst nach dem Speichern neu. - Gegenprobe (`scripts/mutationstest_auto_update.py`): sieben Kataloge, 311 absichtlich eingebaute Fehler (Auto-Update 101, Speicher 37, Komponenten 6, Mail 20, Firmen 86, Wege 38, Suche 23); die Tests erkennen alle bis auf einen begründet gleichwertigen und zwei, die Symlink-Recht brauchen. Neu ist der Katalog „Suche“ (Adressen, Zuordnung, Lesestellen der Seiten). ### Changed - **Dashboard › Offen: rot ist nur, was überfällig ist** (#1174). Bisher färbte eine einzige überfällige Zeile die ganze Karte rot (Rahmen, Hintergrund, Wecker-Symbol) — seit der Zusammenlegung der Listen in v1.7.31, auch in der stabilen Version. - In der Trefferliste der Suche steht bei einem Termin ohne Bewerbung jetzt „ohne Bewerbung“ statt eines Fragezeichens (#1177). ### Fixed - **Ein Klick auf einen Treffer der Suche oben tat nichts** (#1177; seit v1.7.0, auch in 1.7.154; in der stabilen Version behoben mit v1.7.155). Die Suche lieferte die Zieladresse im Format `#bewerbungen?id=…`; das Dashboard liest seit H31 nur noch `#seite/kennung` und fiel bei allem anderen still auf das Dashboard zurück. Der Klick setzte außerdem nur die Adresse (bei gleicher Adresse passiert dann nichts), und die Seiten Dokumente, Kalender und Profil nahmen keinen Sprung mit Kennung entgegen; die Stellen-Treffer trugen den gespeicherten Hash mit Profil-Präfix. Dasselbe traf „Zum Dokument“ in der Firmen-Zeitleiste und einen Termin ohne Bewerbung im Block „Offen“ (die Absichten `dokumentId` und `terminId` hatten keinen Leser). Jetzt gehen Treffer und Links aus Claude denselben Weg, jede Seite liest ihren Sprung, und ein Test verlangt zu jedem Schlüssel, den ein Weg erzeugt, einen Leser auf einer Seite. - **Die Ordner für Lebensläufe, Anschreiben und Vorlagen: drei Fehler, alle seit v1.7.59** (#1173). (1) Die Karte „Deine eigenen Ordner“ und der Hinweis in der Gefahrenzone („Bleibt: Ablageordner …“) nannten den Ordner des Nutzers nie: gespeichert wird je Profil, gelesen wurde ohne Profil, die Liste war immer leer — ein Test blieb dabei grün, weil er die Einstellung auf dem anderen Weg schrieb. (2) „Zurücksetzen“ (das Feld leeren) endete im Dashboard mit „HTTP 400“, nur das Werkzeug für Claude kannte den Platzhalter „-“; die Regel steht jetzt an einer Stelle (`ablage.ordner_setzen`). (3) Bei einem ungültigen Pfad stand am Feld ebenfalls nur „HTTP 400“ statt der Begründung („Diesen Ordner gibt es nicht …“); die Antwort nennt den Grund jetzt als `error`, und die Oberfläche liest ihn. ### Known Issues - Kontakte, Firmen und Aufgaben findet die Suche oben noch nicht (Frage am Issue #1177). - Die drei Fehler an den Ordner-Feldern (#1173) und das rote „Offen“ (#1174) stecken auch in der stabilen Version v1.7.155; behoben sind sie bisher nur in dieser Linie. - Die Seiten „Kalender“, „Profil“, „Statistik“ und „Einstellungen“ ersetzen sich beim Nachladen noch durch die Ladeanzeige (offene Fenster dort flackern kurz). - Anklickbare Namen (Person, Firma) sind erst beim Darüberfahren unterstrichen; ob sie dauerhaft unterstrichen sein sollen, ist als Frage an #1171 gestellt. - Acht ältere Stellen im Code haben dasselbe Muster wie die Ursache der Leerlauf-Last aus beta.17 (`App.jsx` ×2, die Ablage für Dokumente ×3, der Einrichtungsassistent ×3); bei ihnen wurde nichts Auffälliges gemessen, sie sind im Wächter-Test als Bestand benannt. - Die Sprachdaten der Texterkennung (tessdata) werden weiterhin ohne Prüfsumme nachgeladen (#1165). - Verlorener Schlüssel: Geht der Hauptschlüssel zum Signieren verloren, kann ein mit dem Notfallschlüssel signiertes Update einen neuen eintragen; geht auch der Notfallschlüssel verloren, braucht es eine Installation von Hand. - Auto-Update nur unter Windows. - Ein Add-on für den Ordner-Scan fehlt noch (Outlook-Add-In #480 offen). - Die Wiki-Seiten zu den neuen Funktionen erscheinen erst mit 1.8.0. Bis dahin führt der Knopf „Anleitung“ bei den Mail-Ordnern auf die Startseite des Wikis. - Noch nicht in der Praxis gesehen: das Herunterladen der Texterkennung (55 MB) auf einem frischen Rechner, das Drüberinstallieren über eine 1.7-Fassung auf einem zweiten Rechner (die Schritte sind in Tests und an Kopien echter Daten geprüft; die Datenbank wird vorher gesichert), das automatische Aktualisieren selbst und der Rückfall auf die vorige Fassung (beides braucht eine zweite veröffentlichte Version). ### Gemessen 41 neue Tests (8.267 gesamt, gezählt im Klon des Zweigs; beta.17 hatte 8.226): 21 in `tests/test_v18_suche_treffer_oeffnen_1177.py` (14 davon im Browser gegen das gebaute Bundle: jede Trefferart mit echtem Klick, auch auf der Zielseite, mit aktivem Filter und für eine aussortierte Stelle; dazu die Adressen im Server und ein Wächter, der zu jedem Schlüssel, den ein Weg erzeugt, einen Leser auf einer Seite verlangt), 17 in `tests/test_v18_speicher_eigene_ordner_1173.py` (6 davon im Browser: Eingabefelder, Ändern, Zurücksetzen, ungültiger Pfad, Vorlagen-Ordner, verschwundener Ordner) und 3 in `tests/test_v18_offen_nur_ueberfaelliges_rot_1174.py` (die Farben als berechnete Werte im Browser, nicht als Klassennamen). Dazu ein erweiterter Node-Test für die Zuordnung Treffer → Ziel (`wege.test.mjs`). Gegenprobe (jeder Eingriff einzeln, jeder macht mindestens einen Test rot), gelaufen auf den Ständen der drei Zweige vor der Zusammenführung: Katalog „Suche“ 23 von 23 erkannt, die 13 neuen Fehler im Katalog „Speicher“ 13 von 13, die 5 neuen im Katalog „Wege“ 5 von 5; ein Wächter-Test hält fest, dass jedes Muster der Kataloge im Quelltext genau einmal vorkommt (auf dem Endstand grün). Auf dem Endstand, Windows: 511 gezielte Tests (die drei neuen Dateien, die Wege-, Leerlauf-, Ordner-, Dashboard- und Wächter-Tests) bestanden, 0 Fehler, dazu die Node-Tests der betroffenen Bibliotheken. Der volle Lauf auf Windows (rund 35 Minuten) wurde für diese Beta nicht wiederholt. GitHub-Lauf (Linux) auf dem zusammengeführten Stand vor dem Versionssprung: 8.181 bestanden, 86 übersprungen (plattformgebundene Tests), 0 Fehler; Release-Tor 0 Fehler, zwei Warnungen (die Vorabversion wird nie automatisch installiert; der Test-Zähler im README, der mit diesem Eintrag nachgezogen ist). *Schema v52 (gegenüber der Stable-Linie v48 angehoben), 281 MCP-Werkzeuge, 8267 Tests.* --- ## 📦 Wie installiere oder aktualisiere ich PBP? **Unter Windows** brauchst du kein Git, kein Python, kein Vorwissen — nur einen ZIP-Download und einen Doppelklick. **Unter macOS** muss vorher einmalig Python 3.11+ installiert sein (siehe unten), **unter Linux** Git und Python. Voraussetzung ueberall: [Claude Desktop](https://claude.ai/download) ist installiert (Linux: alternativ Claude Code CLI). ### Windows (empfohlen, bequemster Weg) 1. **ZIP herunterladen:** [PBP-1.8.0-beta.18.zip](https://github.com/MadGapun/PBP/archive/refs/tags/v1.8.0-beta.18.zip) 2. **Entpacken:** Rechtsklick auf die ZIP → *„Alle extrahieren..."* → Zielordner waehlen (z.B. `C:\PBP`). Darin liegt ein Unterordner `PBP-...` — dort hinein wechseln. 3. **Installieren:** Doppelklick auf **`INSTALLIEREN.bat`** 4. Das Setup laedt Python, alle Pakete und Chromium herunter (~3–5 Minuten) und konfiguriert Claude Desktop. 5. Auf dem Desktop liegt jetzt eine Verknuepfung **„PBP Bewerbungs-Portal"** — Doppelklick startet das Dashboard. 6. **Claude Desktop oeffnen** (lief es schon: komplett beenden — Rechtsklick aufs Claude-Symbol unten rechts in der Taskleiste → *Beenden* — und neu starten) und tippen: **„Starte die Ersterfassung"** 7. Taucht PBP nicht auf: Claude Desktop nochmal komplett beenden und neu starten — siehe [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ). ### macOS 1. **Einmalig vorab: Python 3.11+** — am einfachsten der [Installer von python.org](https://www.python.org/downloads/) (Doppelklick), alternativ `brew install python@3.12` 2. **ZIP herunterladen** (siehe Windows-Link) und **entpacken** (Doppelklick; im ZIP liegt ein Unterordner `PBP-...`) 3. **Doppelklick auf `INSTALLIEREN.command`** 4. Falls macOS warnt („kann nicht geoeffnet werden"): Rechtsklick auf die Datei → *„Oeffnen"* → nochmal *„Oeffnen"* ### Linux ```bash git clone --branch v1.8.0-beta.18 --depth 1 https://github.com/MadGapun/PBP.git cd PBP bash installer/install.sh ``` ### Update von einer aelteren Version **Einfach drüberinstallieren** — deine Daten bleiben erhalten: - Windows: `%LOCALAPPDATA%\BewerbungsAssistent\data\pbp.db` - macOS/Linux: `~/.bewerbungs-assistent/pbp.db` Schema-Upgrade läuft automatisch beim ersten Start, ein Backup wird vorher erstellt (Ordner `data\backups\`). ### Detaillierte Anleitung & Troubleshooting 📖 [Wiki → Installation](https://github.com/MadGapun/PBP/wiki/Installation) · [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ) --- ## [1.8.0-beta.17] - 2026-10-06 — Ein Klick zum Nächsten (Vorabversion) Vorabversion zum Ausprobieren: Die Wege durch PBP sind kürzer — von der Nachfassung zur Bewerbung, von der Person zur Bewerbung und zurück, von der Stelle zur neuen Bewerbung ist es je ein Klick. Die Timeline hat oben eine Sprungleiste. Was Claude schreibt (ein Urteil zu einer Stelle, eine Notiz), erscheint im offenen Fenster, und die Seite „Stellen“ lässt den Rechner im Leerlauf in Ruhe. > **Prerelease.** Gegenüber beta.16 ist nur das hier neu (die Datenbank bleibt auf dem Schema v52): > > - **Von beta.16 auf beta.17:** einfach drüberinstallieren (ZIP laden, `INSTALLIEREN.bat`); vorher legt der Installer wie immer eine Sicherung an. > - **Das automatische Aktualisieren installiert nie eine Vorabversion.** Neue Betas holst du wie diese: ZIP laden, `INSTALLIEREN.bat`. > - **Zurück zu 1.7.x:** erst `DEINSTALLIEREN.bat` (deine Bewerbungsdaten bleiben, solange du bei der Frage danach nicht „LOESCHEN“ tippst), > dann das ZIP von v1.7.154 installieren. Soll auch die Datenbank zurück auf v48, beendest du PBP und kopierst die Sicherung aus `data\backups\` als `pbp.db` in den Datenordner; was seit der Sicherung eingetragen wurde, fehlt dann. Diese Beta setzt den Wunsch „jeder Schritt höchstens einen Klick vom nächsten“ (#1171) in seinem ersten Teil um: die Verbindungen, die fehlten, und eine Sprungleiste in der Timeline. Dazu kommt eine Reparatur, die auch die Stable-Version betrifft (Hotfix v1.7.154): die Seite „Stellen“ belegte im Leerlauf den Browser zu zwei Dritteln. **Wichtig zu wissen:** - **Jeder Schritt von der Stelle über die Bewerbung bis zur Person ist einen Klick entfernt.** Die Zeile „Nachfassen“ im Dashboard öffnet die Bewerbung (früher: nur die Aufgabenliste). Nach „Bewerbung speichern“ liegt die neue Bewerbung offen da, mit „Lebenslauf mit Claude“ und „Anschreiben mit Claude“ im Fuß. In der Timeline führt der Name der Person zu ihrer Karte; dort steht oben „Bewerbung: Titel bei Firma“, ein Klick führt zurück. Auf der Bewerbungskarte steht „Zur Stelle“, in der Aufgabenzeile „Zur Bewerbung“; die Top-Stelle im Dashboard und „Stelle öffnen“ / „Kontakt öffnen“ in der Firma öffnen das Objekt selbst, nicht nur die Liste. Der Link aus Claude (`#stellen/…`) öffnet die Stelle. - **Sprungleiste in der Timeline.** Oben steht „Springe zu: Status · Stelle · Dokumente · Personen · Aufgaben · Termine · Verlauf“. Sie bleibt beim Scrollen stehen und legt den Abschnitt direkt darunter, statt 800 bis 1.700 Pixel zu scrollen. - **Was Claude schreibt, kommt im offenen Fenster an.** Speichert Claude ein Urteil zu einer Stelle oder eine Notiz zu einer Bewerbung, während du sie offen hast, erscheint das nach ein bis drei Sekunden. Die Leseposition bleibt, nichts flackert. Vorher musste man das Fenster schließen und neu öffnen. - **Die Seite „Stellen“ lässt den Rechner im Leerlauf in Ruhe.** Sie fragte pausenlos, ob gerade eine Suche läuft (gemessen 270 bis 470 Anfragen pro Sekunde, Hauptthread zu 66 % beschäftigt, auch in 1.7.153). Jetzt sind es 0,8 Anfragen pro Sekunde und 0,3 %. Eine Suche, die Claude von außen startet, erscheint nach spätestens etwa fünf Sekunden. - **Noch nicht drin** (wartet auf Antworten am Issue #1171): die feste Weg-Leiste in jedem Dialog, der Rückweg mit Zustand (die Zurück-Taste der Maus), die kompakten Listenköpfe. ### Added - **Jeder Schritt von der Stelle über die Bewerbung bis zur Person ist einen Klick entfernt** (#1171). Dazu `frontend/src/lib/wege.js` als ein Ort für alle Sprünge (statt 36 verstreuter Aufrufe), `GET /api/contacts/{id}` (neu, steht hinter `export.csv`, damit die festen Pfade nicht verschluckt werden), Verknüpfungen eines Kontakts mit lesbarem Ziel („Bewerbung: Titel bei Firma“ statt „application“) und `GET /api/jobs/{hash}` mit denselben Feldern wie die Liste (Punkte, Daumen, Datenqualität). - **Sprungleiste im Dialog „Timeline“** (#1171): Status · Stelle · Dokumente · Personen · Aufgaben · Termine · Verlauf; markiert den aktuellen Abschnitt, bleibt beim Scrollen stehen. - **Der Link aus Claude `#stellen/` öffnet die Stelle** (#1171), wie `#bewerbungen/` die Timeline öffnet; liegt die Stelle nicht auf der geladenen Seite der Liste, wird sie einzeln geholt. - Gegenprobe (`scripts/mutationstest_auto_update.py`): sechs Kataloge, 270 absichtlich eingebaute Fehler (Auto-Update 101, Speicher 24, Komponenten 6, Mail 20, Firmen 86, Wege 33); die Tests erkennen alle bis auf einen begründet gleichwertigen und zwei, die Symlink-Recht brauchen. Im Katalog „Wege“ überlebte beim ersten Lauf ein Fehler (die Marke der Sprungleiste wurde nur direkt nach dem Klick geprüft); der Test ist gehärtet. ### Fixed - **Die Seite „Stellen“ lässt den Rechner im Leerlauf wieder in Ruhe** (#1171). Eine Funktion aus `useEffectEvent` stand in der Abhängigkeitsliste des Abfrage-Effekts; sie ist bei jedem Zeichnen neu, und jede Antwort setzt `searchJob` neu, sodass der Effekt nach jeder Antwort von vorn lief. Seit März 2026 (v0.23.0) im Code. Behoben: der Effekt hängt nur noch von `reloadKey` ab, die Seite fragt alle 5 Sekunden. Zwei Wächter-Tests halten es fern: einer sieht jede der elf Seiten im Leerlauf an, einer lässt keine neuen Effekt-Ereignisse in Abhängigkeitslisten zu. - **Was Claude schreibt, kam im offenen Fenster nicht an** (#1171): das Urteil zu einer Stelle und eine Notiz in der Timeline erschienen erst nach Schließen und Öffnen, und die Seite sprang dabei an den Anfang. Der offene Dialog wird nach dem Nachladen aufgefrischt (nicht, solange du bearbeitest). - **Die Ladeanzeige ersetzte bei jedem Nachladen die ganze Seite** (#1171): der Start lädt jede Seite zweimal, und jede Änderung durch Claude löst ein Nachladen aus; Liste und offener Dialog flackerten. In „Stellen“ und „Bewerbungen“ erscheint sie jetzt nur noch beim ersten Laden. Der Test `test_g62_karte_eine_kernaussage_und_ein_menue`, der daran scheiterte, ist wieder stabil. ### Known Issues - Die Seiten „Kalender“, „Profil“, „Statistik“ und „Einstellungen“ ersetzen sich beim Nachladen noch durch die Ladeanzeige (offene Fenster dort flackern kurz). - Anklickbare Namen (Person, Firma) sind erst beim Darüberfahren unterstrichen; ob sie dauerhaft unterstrichen sein sollen, ist als Frage an #1171 gestellt. - Acht ältere Stellen im Code haben dasselbe Muster wie die Ursache der Leerlauf-Last (`App.jsx` ×2, die Ablage für Dokumente ×3, der Einrichtungsassistent ×3); bei ihnen wurde nichts Auffälliges gemessen, sie sind im Wächter-Test als Bestand benannt. - Die Sprachdaten der Texterkennung (tessdata) werden weiterhin ohne Prüfsumme nachgeladen (#1165). - Verlorener Schlüssel: Geht der Hauptschlüssel zum Signieren verloren, kann ein mit dem Notfallschlüssel signiertes Update einen neuen eintragen; geht auch der Notfallschlüssel verloren, braucht es eine Installation von Hand. - Auto-Update nur unter Windows. - Ein Add-on für den Ordner-Scan fehlt noch (Outlook-Add-In #480 offen). - Die Wiki-Seiten zu den neuen Funktionen erscheinen erst mit 1.8.0. Bis dahin führt der Knopf „Anleitung“ bei den Mail-Ordnern auf die Startseite des Wikis. - Noch nicht in der Praxis gesehen: das Herunterladen der Texterkennung (55 MB) auf einem frischen Rechner, das Drüberinstallieren über eine 1.7-Fassung auf einem zweiten Rechner (die Schritte sind in Tests und an Kopien echter Daten geprüft; die Datenbank wird vorher gesichert), das automatische Aktualisieren selbst und der Rückfall auf die vorige Fassung (beides braucht eine zweite veröffentlichte Version). ### Gemessen 37 neue Tests (8.226 gesamt, gezählt im Klon des Zweigs; beta.16 hatte 8.189): 25 in `tests/test_v18_wege_1171.py` (16 davon im Browser gegen das gebaute Bundle: jeder Weg der Tabelle oben, die Sprungleiste, ein Urteil und eine Notiz von Claude im offenen Fenster, eine von außen gestartete Suche, Ruhe im Leerlauf) und 12 in `tests/test_v18_leerlauf_alle_seiten_1171.py` (jede der elf Seiten im Leerlauf, dazu die Liste der Seiten gegen `PAGE_IDS`). Voller Lauf auf Windows (vier Teile): 8.197 bestanden, 29 übersprungen (27 Zeitzonen-Tests, die es nur unter Linux und macOS gibt, und 2 plattformgebundene), 0 Fehler. GitHub-Lauf (Linux) auf dem Stand vor dem Versionssprung: 8.140 bestanden, 86 übersprungen, 0 Fehler; ein früherer Lauf war rot an einem Wartefehler in einem meiner neuen Tests (er las den Dialog, bevor die Stelle geladen war), behoben. Gegenprobe (jeder Eingriff einzeln, jeder macht mindestens einen Test rot): Katalog „Wege“, 33 von 33 erkannt, auf dem Endstand vollständig gelaufen. 20 Wegeprüfungen am Demo-Dashboard (jeder Weg mit Klickzahl): 20 von 20. Messungen mit demselben Skript, Demo-Daten, fünf Sekunden nach dem Laden: Seite „Stellen“ im Leerlauf 66 % und 270 bis 470 Anfragen pro Sekunde (v1.7.153) gegen 0,3 % und 0,8; eine von Claude gestartete Suche steht nach 1,3 Sekunden auf der Seite (Obergrenze 5). *Schema v52 (gegenüber der Stable-Linie v48 angehoben), 281 MCP-Werkzeuge, 8226 Tests.* --- ## 📦 Wie installiere oder aktualisiere ich PBP? **Unter Windows** brauchst du kein Git, kein Python, kein Vorwissen — nur einen ZIP-Download und einen Doppelklick. **Unter macOS** muss vorher einmalig Python 3.11+ installiert sein (siehe unten), **unter Linux** Git und Python. Voraussetzung ueberall: [Claude Desktop](https://claude.ai/download) ist installiert (Linux: alternativ Claude Code CLI). ### Windows (empfohlen, bequemster Weg) 1. **ZIP herunterladen:** [PBP-1.8.0-beta.17.zip](https://github.com/MadGapun/PBP/archive/refs/tags/v1.8.0-beta.17.zip) 2. **Entpacken:** Rechtsklick auf die ZIP → *„Alle extrahieren..."* → Zielordner waehlen (z.B. `C:\PBP`). Darin liegt ein Unterordner `PBP-...` — dort hinein wechseln. 3. **Installieren:** Doppelklick auf **`INSTALLIEREN.bat`** 4. Das Setup laedt Python, alle Pakete und Chromium herunter (~3–5 Minuten) und konfiguriert Claude Desktop. 5. Auf dem Desktop liegt jetzt eine Verknuepfung **„PBP Bewerbungs-Portal"** — Doppelklick startet das Dashboard. 6. **Claude Desktop oeffnen** (lief es schon: komplett beenden — Rechtsklick aufs Claude-Symbol unten rechts in der Taskleiste → *Beenden* — und neu starten) und tippen: **„Starte die Ersterfassung"** 7. Taucht PBP nicht auf: Claude Desktop nochmal komplett beenden und neu starten — siehe [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ). ### macOS 1. **Einmalig vorab: Python 3.11+** — am einfachsten der [Installer von python.org](https://www.python.org/downloads/) (Doppelklick), alternativ `brew install python@3.12` 2. **ZIP herunterladen** (siehe Windows-Link) und **entpacken** (Doppelklick; im ZIP liegt ein Unterordner `PBP-...`) 3. **Doppelklick auf `INSTALLIEREN.command`** 4. Falls macOS warnt („kann nicht geoeffnet werden"): Rechtsklick auf die Datei → *„Oeffnen"* → nochmal *„Oeffnen"* ### Linux ```bash git clone --branch v1.8.0-beta.17 --depth 1 https://github.com/MadGapun/PBP.git cd PBP bash installer/install.sh ``` ### Update von einer aelteren Version **Einfach drüberinstallieren** — deine Daten bleiben erhalten: - Windows: `%LOCALAPPDATA%\BewerbungsAssistent\data\pbp.db` - macOS/Linux: `~/.bewerbungs-assistent/pbp.db` Schema-Upgrade läuft automatisch beim ersten Start, ein Backup wird vorher erstellt (Ordner `data\backups\`). ### Detaillierte Anleitung & Troubleshooting 📖 [Wiki → Installation](https://github.com/MadGapun/PBP/wiki/Installation) · [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ) --- ## [1.8.0-beta.16] - 2026-10-05 — Updates, die sich selbst installieren (Vorabversion) Vorabversion zum Ausprobieren: PBP kann sich jetzt selbst aktualisieren — wenn du es willst (Einstellungen › Erweitert › Updates). Ohne deine Wahl installiert PBP nichts. Neu sind außerdem die Übersicht „Speicher & Downloads“, der Firmen-Eintrag und ein Mail-Ordner-Zugang, der standardmäßig aus ist. Vor dem Installieren: Die Datenbank wird beim ersten Start angehoben, vorher entsteht eine Sicherung. > **Prerelease.** Der Kandidat für 1.8.0: alles, was die 1.8 bringen soll, ist drin, dazu die Korrekturen der Hotfixes bis v1.7.153. Zum Ausprobieren > gedacht, auch mit den eigenen Daten — drei Dinge vorher: > > - **Die Datenbank wird beim ersten Start auf das Schema v52 angehoben** (die Stable-Linie 1.7 hat v48). Der Installer legt vorher eine Sicherung an > (`%LOCALAPPDATA%\BewerbungsAssistent\data\backups\`). > - **Das automatische Aktualisieren installiert nie eine Vorabversion.** Neue Betas holst du wie diese: ZIP laden, `INSTALLIEREN.bat`. > - **Zurück zu 1.7.x:** erst `DEINSTALLIEREN.bat` (deine Bewerbungsdaten bleiben, solange du bei der Frage danach nicht „LOESCHEN“ tippst), > dann das ZIP von v1.7.153 installieren. Soll auch die Datenbank zurück auf v48, beendest du PBP und kopierst die Sicherung aus `data\backups\` als `pbp.db` in den Datenordner; was seit der Sicherung eingetragen wurde, fehlt dann. PBP kann sich jetzt selbst aktualisieren — **wenn du es willst**. Ohne deine Wahl installiert PBP nichts. Dazu kommen die Übersicht „Speicher & Downloads“, die Prüfsumme für Zusatzprogramme, die Zugangsschicht für Jobmails aus Ordnern und der Firmen-Eintrag. Diese Beta sammelt außerdem alles, was die 1.8.0-Betas (beta.0 bis beta.15) und die Hotfixes bis v1.7.153 geliefert haben; die Einzelheiten stehen in den Einträgen darunter. **Wichtig zu wissen:** - **Updates (Einstellungen › Erweitert › Updates).** Vier Stufen: *Nur Hinweis* (Vorgabe), *Mit einem Klick*, *Automatisch, mit Meldung*, *Automatisch, still*. Neue Versionen landen in einem eigenen Ordner neben der laufenden; startet die neue nicht, fällt PBP **von selbst auf die vorige zurück** und sagt es. Geladen wird nur von der festen GitHub-Adresse, nur stabile Versionen der eigenen Linie, mit Prüfsumme **und Signatur** (Ed25519; ohne gültige Signatur wird nichts installiert). Die Automatik startet nie neben anderer Arbeit. - **Einmalig von Hand:** Die erste Version mit dieser Funktion ist 1.8.0 selbst (diese Beta enthält sie schon, installiert aber selbst nie eine Vorabversion). Wer von 1.7.x kommt, installiert sie wie gewohnt (ZIP, `INSTALLIEREN.bat`); ab dann kann PBP den Rest selbst. **Das automatische Aktualisieren gibt es zurzeit nur unter Windows.** - **Speicher & Downloads (Einstellungen › Erweitert).** Wohin PBP schreibt und lädt, wie viel dort liegt, und Aufräumen in zwei Schritten — nie ohne dein Ja, nie bei laufender Arbeit. Was anderen Programmen gehört (Browser der Jobsuche, KI-Modelle), wird nur gezeigt. - **Mail-Ordner (Einstellungen › Erweitert › Quellen im Detail).** Der Ordner-Scan ist **standardmäßig aus**; gelesen werden nur Ordner, die du ausdrücklich freigibst. PBP öffnet nie selbst ein Postfach. Ein Add-on, das Ordner von sich aus liest, gibt es noch nicht — das Thunderbird-Add-on schickt weiter nur, was du markierst. - **Firmen (Kontakte › Firmen).** Alles, was PBP zu einer Firma weiß, als eine Zeitleiste; ein Firmen-Eintrag fasst Schreibweisen zusammen („Alt AG“ heißt heute „Neu GmbH“) und kennt die Mutterfirma. Bewerbungen, Stellen und Kontakte behalten ihren Firmennamen als Text. ### Added - **Auto-Update** (#1093): `services/auto_update/` (feste Quelle, Prüfsumme, Ed25519-Signatur in reinem Python, sicheres Entpacken, Manifest, Selbsttest vor dem Umschalten, Stufen, Verlauf), der **Startbaustein** `bewerbungs_assistent_boot` (eingefroren, nur Standardbibliothek, Rückfall im selben Prozess und nach zwei unbestätigten Starts), der **Schema-Schutz** (`services/schema_schutz.py`: ist die Datenbank neuer als das Programm, schreibt der alte Prozess nicht weiter), der Hinweis, wenn Claude und Dashboard mit verschiedenen Fassungen laufen, der Installer-Umbau (Versionsordner, Selbstaufräumen, Deinstaller), `scripts/build_update_archive.py` und ein Schritt im Release-Tor. Werkzeuge `update_status`, `update_einstellungen_setzen`, `update_jetzt_installieren`, `update_zurueckschalten`. - **Speicher & Downloads** (#1131): sieben Orte, sieben Aufräum-Aktionen, Werkzeuge `speicher_anzeigen` und `speicher_bereinigen`. - **Prüfsumme der Komponenten** (#1152): kein Installer ohne SHA-256; die Ablehnung kommt vor dem Download. - **Mail-Zugangsschicht** (#947): Schalter, genaue Liste freigegebener Ordner, Prüfung im Mail-Eingang für jedes Add-on (`GET /api/v1/ingest/mail-policy`, `modus=scan` bei `POST /api/v1/ingest/email`), Zahlen je Ordner; Werkzeuge `mail_quelle_anzeigen` und `mail_quelle_einstellen`. Die Ingest-API v1 bleibt kompatibel: die Erweiterung ist rein additiv. - **Firmen-Eintrag, Stufe 2** (#1080): Tabellen `companies`, `company_aliases`, `company_contacts` (additiv, ohne Versionssprung); die Duplikat- und Repost-Erkennung kennt die Einträge (`firmen_kanon`); Kontakte gehören mehreren Firmen mit Rolle und Zeitraum; Dokumente an einer Bewerbung stehen auch in der Historie der Firma; Dashboard-Ansicht mit Zeitleiste, Bearbeiten und Vorschlägen; Firmenname als Link in Stellen, Bewerbungen und Kontakten; Werkzeuge `firmen_stamm_anzeigen`, `firmen_vorschlaege_anzeigen`, `firmen_stamm_bearbeiten`; `firma_oeffnen` in `fit_analyse`, `bewerbung_details` und `kontakt_anzeigen`; `dashboard_link` in `firma_kontext`. - Wiki (Entwurf, erscheint mit 1.8.0): Seiten **Updates**, **Speicher & Downloads**, **Mail-Ordner**, **Firmen**; Abschnitt „Erweiterungen“ in den Einstellungen. - Gegenprobe (`scripts/mutationstest_auto_update.py`): fünf Kataloge, 237 absichtlich eingebaute Fehler (Auto-Update 101, Speicher 24, Komponenten 6, Mail 20, Firmen 86); die Tests erkennen alle bis auf einen begründet gleichwertigen und zwei, die Symlink-Recht brauchen. ### Changed - `kontakt_verknuepfen(ziel_typ='firma')` ordnet jetzt wirklich einer Firma zu (bisher ein Eintrag ins Leere ohne Leser) und nimmt `von` und `bis`. - `firma_kontext` liest über die Firmen-Einträge (Schreibweisen, Mutter- und Tochterfirma, jeder Treffer nennt `via`) und liefert die Daten über dieselbe Funktion wie die Dashboard-Ansicht. - Die Warnung bei einer nur in den Notizen genannten Firma beginnt mit „Prüfen:“ (statt „Pruefen:“). - Ein zweiter Klick auf „Firmen“ (Reiter oder Seitenleiste) führt aus einer geöffneten Firma zurück in die Liste. ### Fixed - Die Tesseract-Komponente wurde ohne Prüfsumme gestartet (#1152). - Benutzernamen mit einem Zeichen außerhalb der Windows-Zeichentabelle (ł, ş, ř, griechisch, kyrillisch; Umlaute waren nie betroffen) ließen mehrere Schritte scheitern (#1163): die Claude-Konfiguration und die Sicherung vor dem Update im Installer, den Selbsttest des Auto-Updates und die Texterkennung (Tesseract liest Pfade in der ANSI-Tabelle). Behoben: die Ausgabe wird als UTF-8 gelesen und abgesichert, das Seitenbild geht über die Standardeingabe, die Sprachdaten über den Kurzpfad. Mit Tests; die Praxisprobe auf einem solchen Rechner steht aus. - Eine Absage an der Bewerbung beim Vermittler fehlte in der Historie des Endkunden (#1080). - **Aus der Praxisprobe auf einem frischen Windows 11 (05.10.2026):** - Der Reiter „Erweiterungen“ stürzte auf jedem Rechner ab, auf dem die Texterkennung noch fehlt (ein Variablenname war beim Umlaut-Austausch an einer Stelle geändert worden). Ein Absturz in einem Reiter der Einstellungen lässt die anderen Reiter jetzt in Ruhe. - Der Knopf „Deinstaller starten“ (Einstellungen › Gefahrenzone) öffnete unter Windows nie ein Fenster, sondern meldete „Kein Terminal gefunden“ — die Flags des Prozessstarts schließen sich aus. Behoben, mit einem Test, der das Betriebssystem wirklich fragt. - Der Deinstaller räumt jetzt auch die Konfiguration von Claude aus dem Microsoft Store auf (der Eintrag blieb stehen, Claude meldete danach bei jedem Start einen Server ohne Programm) und schließt das Dashboard-Fenster. - Der Deinstaller ließ unter Windows rund 830 MB liegen, die der Installer außerhalb von PBP geladen hat: den Browser für Quellen (Playwright, `%LOCALAPPDATA%\ms-playwright`, rund 700 MB) und den Zwischenspeicher von pip (rund 125 MB) — ohne es zu erwähnen (macOS und Linux fragen). Er fragt jetzt zum Schluss, mit Ort und Größe; die Vorgabe ist **Behalten**, und nur ein einzelnes „j“ löscht. Der Browser-Ordner geht ganz, von pip nur der Unterordner `Cache` (die Einstellungsdatei eines anderen Programms bleibt). Dieselben Ordner nutzen andere Programme mit, deshalb im Zweifel behalten. - Die Fehlermarke `[!!]` erschien in Installer und Deinstaller als `[]`: unter `EnableDelayedExpansion` verschluckt `cmd` das Paar `!!`. Betroffen waren zehn Meldungen („… konnte nicht entfernt werden“, „Datei in Benutzung?“ u. a.); wer einen Fehler hatte, sah nur leere Klammern vor dem Text. Maskiert; ein Test verbietet die ungeschützte Schreibweise. - Der Deinstaller ließ nach dem Start über den Knopf einen leeren Ordner `%LOCALAPPDATA%\BewerbungsAssistent\app` liegen (Schritt [5/7] meldete „konnte nicht entfernt werden“): das neue Fenster hatte diesen Ordner als Arbeitsordner, und ein Prozess hält seinen Arbeitsordner fest. Gefunden bei der Gegenprobe der Reparaturen auf demselben Rechner; das Fenster öffnet jetzt im Temp-Ordner, und die Datei verlässt den Ordner, bevor sie sich verschiebt. - Weitere Funde derselben Gegenprobe, behoben: - Die verschobene Kopie des Deinstallers (`PBP-Deinstaller-.bat`, rund 15 KB) blieb in `%TEMP%` liegen; sie räumt sich jetzt selbst weg. - Der Deinstaller schrieb die Konfiguration von Claude in der Formatierung von Windows PowerShell neu (rund siebenmal so groß) und ließ `"mcpServers": {}` stehen. Jetzt nimmt er nur den PBP-Eintrag aus dem Text, der Rest bleibt Byte für Byte; das Ergebnis wird geprüft, und wo der Text-Weg nicht passt, gilt der bisherige. - Das Dashboard-Fenster zeigt nur noch Warnungen und Fehler (die Log-Datei bekommt weiter alles; `BA_CONSOLE_LEVEL=INFO` zeigt alles). Vorher schoben sich Protokollzeilen in die Frage „Claude jetzt neu starten?“ und füllten den ersten Start mit Dutzenden Zeilen. - Der Browser öffnet sich erst, wenn das Dashboard antwortet (auf einem frischen Rechner zeigte Chrome „Verbindung verweigert“), und nur einmal: der Installer unterdrückt das Öffnen im von ihm gestarteten Fenster und öffnet selbst, nach seiner Prüfung. - Am Ende jeder gelungenen Installation stand „Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch.“, und die Einstellung zum Aufräumen des Installationsordners (nie, fragen, immer) wurde nie gelesen. `cmd` schneidet bei einem Befehl in `for /f` mit mehr als zwei Anführungszeichen das erste und das letzte ab; ein zusätzliches Paar um den ganzen Befehl behebt das. - Das Dashboard startete nicht, solange die Frage „Claude jetzt neu starten?“ unbeantwortet blieb; der Installer wartete umsonst und öffnete „Verbindung verweigert“. Die Frage kommt jetzt erst, wenn das Dashboard läuft. - Der Installer startet Claude aus dem Store am Ende (statt „nicht gefunden“); die Ausgabe enthält keine Sonderzeichen mehr, die die Konsole verstümmelt. - Auf den Karten der Erweiterungen und Quellen standen Kennungen aus der Planung („…(E19)“); entfernt. - Das Titelbild des Wikis zeigte seit v1.7.137 eine Fehlerkarte („Dieser Bereich ist abgestürzt“); der Screenshot-Generator prüft jetzt jede Aufnahme. ### Known Issues - Die Sprachdaten der Texterkennung (tessdata) werden weiterhin ohne Prüfsumme nachgeladen (#1165). - Verlorener Schlüssel: Geht der Hauptschlüssel zum Signieren verloren, kann ein mit dem Notfallschlüssel signiertes Update einen neuen eintragen; geht auch der Notfallschlüssel verloren, braucht es eine Installation von Hand. - Auto-Update nur unter Windows. - Ein Add-on für den Ordner-Scan fehlt noch (Outlook-Add-In #480 offen). - Die Wiki-Seiten zu den neuen Funktionen erscheinen erst mit 1.8.0. Bis dahin führt der Knopf „Anleitung“ bei den Mail-Ordnern auf die Startseite des Wikis. - Noch nicht in der Praxis gesehen: das Herunterladen der Texterkennung (55 MB) auf einem frischen Rechner, das Drüberinstallieren über eine 1.7-Fassung auf einem zweiten Rechner (die Schritte sind in Tests und an Kopien echter Daten geprüft; die Datenbank wird vorher gesichert), das automatische Aktualisieren selbst und der Rückfall auf die vorige Fassung (beides braucht eine zweite veröffentlichte Version). *Schema v52 (gegenüber der Stable-Linie v48 angehoben), 281 MCP-Werkzeuge, 8189 Tests.* --- ## 📦 Wie installiere oder aktualisiere ich PBP? **Unter Windows** brauchst du kein Git, kein Python, kein Vorwissen — nur einen ZIP-Download und einen Doppelklick. **Unter macOS** muss vorher einmalig Python 3.11+ installiert sein (siehe unten), **unter Linux** Git und Python. Voraussetzung ueberall: [Claude Desktop](https://claude.ai/download) ist installiert (Linux: alternativ Claude Code CLI). ### Windows (empfohlen, bequemster Weg) 1. **ZIP herunterladen:** [PBP-1.8.0-beta.16.zip](https://github.com/MadGapun/PBP/archive/refs/tags/v1.8.0-beta.16.zip) 2. **Entpacken:** Rechtsklick auf die ZIP → *„Alle extrahieren..."* → Zielordner waehlen (z.B. `C:\PBP`). Darin liegt ein Unterordner `PBP-...` — dort hinein wechseln. 3. **Installieren:** Doppelklick auf **`INSTALLIEREN.bat`** 4. Das Setup laedt Python, alle Pakete und Chromium herunter (~3–5 Minuten) und konfiguriert Claude Desktop. 5. Auf dem Desktop liegt jetzt eine Verknuepfung **„PBP Bewerbungs-Portal"** — Doppelklick startet das Dashboard. 6. **Claude Desktop oeffnen** (lief es schon: komplett beenden — Rechtsklick aufs Claude-Symbol unten rechts in der Taskleiste → *Beenden* — und neu starten) und tippen: **„Starte die Ersterfassung"** 7. Taucht PBP nicht auf: Claude Desktop nochmal komplett beenden und neu starten — siehe [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ). ### macOS 1. **Einmalig vorab: Python 3.11+** — am einfachsten der [Installer von python.org](https://www.python.org/downloads/) (Doppelklick), alternativ `brew install python@3.12` 2. **ZIP herunterladen** (siehe Windows-Link) und **entpacken** (Doppelklick; im ZIP liegt ein Unterordner `PBP-...`) 3. **Doppelklick auf `INSTALLIEREN.command`** 4. Falls macOS warnt („kann nicht geoeffnet werden"): Rechtsklick auf die Datei → *„Oeffnen"* → nochmal *„Oeffnen"* ### Linux ```bash git clone --branch v1.8.0-beta.16 --depth 1 https://github.com/MadGapun/PBP.git cd PBP bash installer/install.sh ``` ### Update von einer aelteren Version **Einfach drüberinstallieren** — deine Daten bleiben erhalten: - Windows: `%LOCALAPPDATA%\BewerbungsAssistent\data\pbp.db` - macOS/Linux: `~/.bewerbungs-assistent/pbp.db` Schema-Upgrade läuft automatisch beim ersten Start, ein Backup wird vorher erstellt (Ordner `data\backups\`). ### Detaillierte Anleitung & Troubleshooting 📖 [Wiki → Installation](https://github.com/MadGapun/PBP/wiki/Installation) · [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ) --- ## [1.8.0-beta.15] - 2026-08-25 — Ehrliche Zahlen (Beta-Linie) > **Prerelease.** Sammelt die Stable-Arbeit der Releases v1.7.22 und > v1.7.23 in die Beta-Linie. Keine Schema-Migration (v52 unveraendert). ### Fixed Inhaltlich identisch zu **v1.7.22** und **v1.7.23** — Details stehen in den beiden Eintraegen weiter unten. In Kurzform: - Der Anzeigentext wird vollstaendig gespeichert statt bei 2000 Zeichen gekappt (#952). In der Beta-Linie zusaetzlich wichtig: der unveraenderliche Snapshot (#687) bekommt jetzt den vollen Text — vorher wurde der halbe Text auf Dauer festgeschrieben. - MUSS-Begriffe sind wieder ein echtes Tor, Fachscore und Rahmenscore sind getrennt (#940, #942). - Erkannte Wiedergaenger werden aussortiert statt nur markiert, mit eingeklappter Rueckhol-Liste (#941). - Nachfassungen sagen, was zu tun ist; ueberholte werden hinfaellig (#945). - Statistik und Bewerbungsbericht rechnen und klassifizieren richtig (#943, #944). - Elwosa wiederholt sich nicht mehr (#924), der Quellen-Check prueft Inhalt statt nur den HTTP-Status (#808), Abschluss-Anforderungen werden zuverlaessiger erkannt (#955). - Ausgehende Fehlerberichte werden gegen den eigenen Bestand geprueft (#946). --- ## 📦 Wie installiere oder aktualisiere ich PBP? **Unter Windows** brauchst du kein Git, kein Python, kein Vorwissen — nur einen ZIP-Download und einen Doppelklick. **Unter macOS** muss vorher einmalig Python 3.11+ installiert sein (siehe unten), **unter Linux** Git und Python. Voraussetzung ueberall: [Claude Desktop](https://claude.ai/download) ist installiert (Linux: alternativ Claude Code CLI). ### Windows (empfohlen, bequemster Weg) 1. **ZIP herunterladen:** [PBP-1.7.18.zip](https://github.com/MadGapun/PBP/archive/refs/tags/v1.7.18.zip) 2. **Entpacken:** Rechtsklick auf die ZIP → *„Alle extrahieren..."* → Zielordner waehlen (z.B. `C:\PBP`). Darin liegt ein Unterordner `PBP-...` — dort hinein wechseln. 3. **Installieren:** Doppelklick auf **`INSTALLIEREN.bat`** 4. Das Setup laedt Python, alle Pakete und Chromium herunter (~3–5 Minuten) und konfiguriert Claude Desktop. 5. Auf dem Desktop liegt jetzt eine Verknuepfung **„PBP Bewerbungs-Portal"** — Doppelklick startet das Dashboard. 6. **Claude Desktop oeffnen** (lief es schon: komplett beenden — Rechtsklick aufs Claude-Symbol unten rechts in der Taskleiste → *Beenden* — und neu starten) und tippen: **„Starte die Ersterfassung"** 7. Taucht PBP nicht auf: Claude Desktop nochmal komplett beenden und neu starten — siehe [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ). ### macOS 1. **Einmalig vorab: Python 3.11+** — am einfachsten der [Installer von python.org](https://www.python.org/downloads/) (Doppelklick), alternativ `brew install python@3.12` 2. **ZIP herunterladen** (siehe Windows-Link) und **entpacken** (Doppelklick; im ZIP liegt ein Unterordner `PBP-...`) 3. **Doppelklick auf `INSTALLIEREN.command`** 4. Falls macOS warnt („kann nicht geoeffnet werden"): Rechtsklick auf die Datei → *„Oeffnen"* → nochmal *„Oeffnen"* ### Linux ```bash git clone https://github.com/MadGapun/PBP.git cd PBP bash installer/install.sh ``` ### Update von einer aelteren Version **Einfach drueberinstallieren** — deine Daten bleiben erhalten: - Windows: `%LOCALAPPDATA%\BewerbungsAssistent\data\pbp.db` - macOS/Linux: `~/.bewerbungs-assistent/pbp.db` Schema-Upgrade laeuft automatisch beim ersten Start, ein Backup wird vorher erstellt (Ordner `data\backups\`). ### Detaillierte Anleitung & Troubleshooting 📖 [Wiki → Installation](https://github.com/MadGapun/PBP/wiki/Installation) · [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ) --- ## [1.7.157] - 2026-10-12 — Die Browser-Suche legt Stellen in PBP an, und Angaben aus Google gelten erst mit dem Original Hotfix für v1.7.156. Drei Befunde aus dem Alltag: Ein Lauf über sechs Jobbörsen mit rund 1.300 gefundenen Stellen (Browser-Suche mit Claude in Chrome) legte keine einzige davon in PBP an, eine Stelle aus Google Jobs wurde mit einem Arbeitsmodell und einem Ort eingetragen, die nur auf Googles Karte standen, und die Profil-Zusammenfassung nannte bei jedem Skill nur die Spitze und nicht den Stand von heute. Es gibt keine neue Funktion; geändert sind die Anweisungen, die Claude für einen Browserlauf bekommt, die Prüfungen beim Anlegen, die Vorschau der LinkedIn-Übernahme und die Auskunft über die Skills. **Wichtig zu wissen:** - **Im Zweifel trägt Claude jetzt ein.** Bisher sollte Claude „passende“ Stellen übernehmen und den Rest im Chat melden — die Auswahl traf Claude, und du sahst nur den Bericht. Jetzt gilt in jeder Anleitung dieselbe Regel: Eine Stelle zu viel in PBP ist besser als eine zu wenig, und ob sie taugt, entscheidest du in PBP, nicht Claude im Chat. Claude legt jede Stelle an, die fachlich passt oder nahezu interessant sein könnte, schreibt sein Urteil und den Zweifelsgrund an die Stelle und vermerkt, ob die Anzeige noch offen ist. Aussortiert wird nur, was offensichtlich nicht passt oder geschlossen ist, und mit Grund. - **Eine früher aussortierte Stelle kommt zurück, wenn sie fachlich passt.** Hat PBP eine Stelle zum Beispiel wegen der Entfernung aussortiert und sie passt nach dem Lesen fachlich, holt Claude sie zurück, statt sie nur im Chat zu erwähnen. - **Stellen aus Google Jobs bekommen ihr Arbeitsmodell und ihre Entfernung erst mit dem Original.** Googles Karte nannte zum Beispiel „Beliebiger Ort, Homeoffice“; die Anzeige beim Arbeitgeber lag rund 570 km entfernt und erlaubte nur mobiles Arbeiten. Solange die Adresse beim Arbeitgeber und der Anzeigentext fehlen, entscheidet der Text über das Arbeitsmodell (sonst bleibt es „unbekannt“), und die Entfernung wird nicht aus Googles Ort gerechnet. Trägst du das Original nach, holt PBP beides nach. - **PBP meldet jetzt, wenn eine neue Stelle schon einmal aussortiert wurde** — auch unter dem Namen des Konzernunternehmens. Sie wird weiter angelegt (gemeldet, nicht blockiert), mit dem damaligen Grund. - **Bei jedem Skill steht jetzt der Stand von heute.** Claude las aus der Profil-Zusammenfassung nur die höchste Stufe, die ein Skill je hatte; ein Skill, den du seit Jahrzehnten nicht mehr einsetzt, konnte so als „Experte“ auf einer fremden Plattform landen. Jetzt stehen aktueller Stand, Spitze, Ende des Zeitraums und letzter Einsatz dabei; ist ein Skill beendet und kein heutiges Niveau eingetragen, fragt Claude nach. ### Fixed - **Ein Lauf über die Browser-Quellen legte keine Stelle in PBP an** (#1187). Die Anleitungen ließen Claude auswählen: der Auftrag je Quelle und der Workflow-Prompt der Jobsuche sagten, „passende“ Stellen zu übernehmen (der Auftrag je Quelle meldete den Rest nur im Chat), der LinkedIn-Plan ließ schon vorab nach Titeln aussieben, und `google_jobs_url` nannte keine Regel für Grenzfälle. Dazu sagte der Katalogtext von `stelle_manuell_anlegen` „nicht für Treffer aus einer Jobbörse“. Jetzt steht in jeder Anleitung dieselbe Regel (eine Fassung, `services/browser_handoff.REGEL_IM_ZWEIFEL`): im Zweifel eintragen; Urteil und Zweifelsgrund an die Stelle (`stelle_urteil_speichern`), dazu ob die Anzeige noch offen ist; schon Aussortiertes, das nach dem Lesen fachlich passt, holt `stelle_reaktivieren` zurück; aussortiert wird nur Offensichtliches. Der Bericht im Chat ersetzt die Einträge nicht. - **Die Vorschau von `linkedin_treffer_uebernehmen` prüfte nichts** (#1187). Mit der Vorgabe `dry_run=True` kehrte sie vor jeder Prüfung zurück und meldete „alle angelegt“, wo der echte Lauf Dubletten, laufende Bewerbungen oder die Blacklist abgewiesen hätte. Jetzt stellt sie dieselben Fragen wie die Anlage und schreibt nichts (auch kein Blacklist-Protokoll und keinen Kontakt); dieselbe Stelle, die zweimal im Aufruf steht, zählt einmal. - **Stellen aus Google Jobs behaupteten ein Arbeitsmodell und einen Ort, die nur auf Googles Karte standen** (#1184; seit `stelle_manuell_anlegen`). Ein Treffer mit „Beliebiger Ort, Homeoffice“ wurde als `remote` angelegt: die Entfernung fiel weg, der Rahmenscore stieg, und die Stelle wäre nach oben sortiert worden. Jetzt gelten Remote und Ort einer Google-Stelle erst, wenn das Original vorliegt (Detail-URL des Arbeitgebers und Anzeigentext, `services/google_angaben`); wird es mit `stelle_bearbeiten` nachgetragen, holt PBP beides nach. - **Eine aussortierte Stelle wurde beim Anlegen nicht erkannt** (#1184). Die Prüfung beim Anlegen verglich nur laufende Bewerbungen und aktive Stellen. Jetzt steht eine aussortierte Stelle gleicher Firma und gleichen Titels — oder gleichen Titels am gleichen Ort unter anderem Firmennamen (Muttermarke gegen Konzernunternehmen) — als `aussortierte_dublette` im Ergebnis, mit dem Aussortier-Grund. Die Stelle wird weiter angelegt: gemeldet, nicht geblockt. - **Bei jedem Skill nannte Claude nur die Spitze, nicht den Stand von heute** (#1190; seit v1.6.0). `profil_zusammenfassung` gab in `skills_liste` nur `level` aus, die höchste Stufe, die ein Skill je hatte. Die Oberfläche zeigt den aktuellen Stand und bei ruhenden Skills „ruht (Spitze x/5)“; `level_current`, `end_year` und `last_used_year` lagen in der Datenbank, fehlten aber im Werkzeug. Jetzt nennt jeder Eintrag `level_aktuell`, `level_spitze`, `ruht`, den Zeitraum (`seit`, `bis`) und `zuletzt_genutzt`; das mehrdeutige Feld `level` entfällt, der Text der Zusammenfassung und die Antwort „bereits vorhanden“ sagen dasselbe (`services/profile_service.skill_stand`). ### Changed - Neu `services/google_angaben.py` (eine Entscheidung, ob eine Angabe aus Google schon belegt ist), `find_aussortierte_dublette` in `duplicate_detection.py` und `Database.set_job_remote_level` (#1184). - Der Hinweis zur aussortierten Dublette lässt den Zweifel zu: gilt der Grund weiter, wird die neue Stelle mit demselben Grund eingeordnet; passt sie fachlich, bleibt sie aktiv (#1187). - `aussortierte_dublette` erscheint auch im Eintrag der LinkedIn-Sammelübernahme und in der Zeile des Trichters („schon aussortiert“) (#1187). - Ein Test verlangt die Regel für Browserläufe in jeder Anleitung, ein zweiter verbietet die alte Formulierung („passende Stellen übernehmen“) im ganzen Quelltext (#1187). ### Known Issues - **Noch offen aus #1184:** eine Sperre oder ein Warnhinweis, solange nur Googles Kopfdaten vorliegen, die Alert-Mails von Google und das Finden des Originals zu einer Google-Stelle (Fragen stehen am Issue). - **Noch offen aus #1187:** Läufe über die Browser-Quellen werden noch nicht verbucht, nur LinkedIn hat ein Werkzeug, das mehrere Treffer auf einmal übernimmt, und die Grenzfälle haben im Dashboard noch keinen eigenen Platz. - **Der Deinstaller lässt unter Windows Reste liegen** (#1170, PP10): die vom Installer geladenen Browser-Dateien (Playwright, rund 700 MB, `%LOCALAPPDATA%\ms-playwright`) und den pip-Zwischenspeicher (rund 125 MB, `%LOCALAPPDATA%\pip`). Beides lässt sich von Hand löschen; in Version 1.8 fragt der Deinstaller danach. - Unverändert gegenüber v1.7.156: ein ausdrücklich gesetzter Standard für die Filter der Stellenliste fehlt (#1158 Punkt 5), Google Jobs liefert mit JobSpy 1.2 nichts mehr (#1159), und die offenen Punkte aus #1148 und #1149 (siehe dort). - Acht ältere Stellen im Code haben dasselbe Muster wie die Ursache der Leerlauf-Last aus v1.7.154 (`App.jsx` ×2, die Ablage für Dokumente ×3, der Einrichtungsassistent ×3). Bei ihnen wurde nichts Auffälliges gemessen; sie sind im Wächter-Test als Bestand benannt und bleiben in dieser Linie unverändert. ### Gemessen 103 neue Tests (7.196 gesamt, gezählt im Klon des Zweigs; v1.7.156 hatte 7.093) in `tests/test_v17157_google_angaben_1184.py` (44), `tests/test_v17157_browser_im_zweifel_1187.py` (38) und `tests/test_v17157_skill_stand_1190.py` (21): die Regel steht in jeder Anleitung und nennt nur vorhandene Werkzeuge, die Vorschau und der echte Lauf zählen in acht Szenarien gleich (neu, Blacklist, gleiche Kennung, laufende Bewerbung, doppelt im Aufruf, ohne Volltext, aussortierte Dublette, Mischung) und die Vorschau ändert in keiner Tabelle eine Zeile; dazu Remote und Entfernung einer Google-Stelle mit und ohne Original und die Erkennung aussortierter Dubletten (gleiche Firma, anderer Firmenname am gleichen Ort, andere Stelle, Suchadresse); bei den Skills der aktuelle Stand, die Spitze, das Ruhen, der Zeitraum und die Regel, dass Null nie als Jahr oder Niveau gilt. Eine Gegenprobe mit absichtlich eingebauten Fehlern (33 für Google, 30 für die Browser-Anleitungen) lief auf der Fassung der 1.8-Linie: bei den Browser-Anleitungen erkannten die Tests alle 30 im ersten Lauf, bei Google überlebte im ersten Lauf ein Fehler (das Neurechnen der Punkte wurde nur zusammen mit der Entfernung geprüft); der Test wurde geschärft, danach erkannten sie alle 33. ## 📦 Wie installiere oder aktualisiere ich PBP? **Unter Windows** brauchst du kein Git, kein Python, kein Vorwissen — nur einen ZIP-Download und einen Doppelklick. **Unter macOS** muss vorher einmalig Python 3.11+ installiert sein (siehe unten), **unter Linux** Git und Python. Voraussetzung ueberall: [Claude Desktop](https://claude.ai/download) ist installiert (Linux: alternativ Claude Code CLI). ### Windows (empfohlen, bequemster Weg) 1. **ZIP herunterladen:** [PBP-1.7.157.zip](https://github.com/MadGapun/PBP/archive/refs/tags/v1.7.157.zip) 2. **Entpacken:** Rechtsklick auf die ZIP → *„Alle extrahieren..."* → Zielordner waehlen (z.B. `C:\PBP`). Darin liegt ein Unterordner `PBP-...` — dort hinein wechseln. 3. **Installieren:** Doppelklick auf **`INSTALLIEREN.bat`** 4. Das Setup laedt Python, alle Pakete und Chromium herunter (~3–5 Minuten) und konfiguriert Claude Desktop. 5. Auf dem Desktop liegt jetzt eine Verknuepfung **„PBP Bewerbungs-Portal"** — Doppelklick startet das Dashboard. 6. **Claude Desktop oeffnen** (lief es schon: komplett beenden — Rechtsklick aufs Claude-Symbol unten rechts in der Taskleiste → *Beenden* — und neu starten) und tippen: **„Starte die Ersterfassung"** 7. Taucht PBP nicht auf: Claude Desktop nochmal komplett beenden und neu starten — siehe [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ). ### macOS 1. **Einmalig vorab: Python 3.11+** — am einfachsten der [Installer von python.org](https://www.python.org/downloads/) (Doppelklick), alternativ `brew install python@3.12` 2. **ZIP herunterladen** (siehe Windows-Link) und **entpacken** (Doppelklick; im ZIP liegt ein Unterordner `PBP-...`) 3. **Doppelklick auf `INSTALLIEREN.command`** 4. Falls macOS warnt („kann nicht geoeffnet werden"): Rechtsklick auf die Datei → *„Oeffnen"* → nochmal *„Oeffnen"* ### Linux ```bash git clone --branch v1.7.157 --depth 1 https://github.com/MadGapun/PBP.git cd PBP bash installer/install.sh ``` `v1.7.157` ist die Version DIESES Releases. Ohne `--branch` klont man `main` — das ist die Beta, nicht die stabile Version (#1150). ### Update von einer aelteren Version **Einfach drüberinstallieren** — deine Daten bleiben erhalten: - Windows: `%LOCALAPPDATA%\BewerbungsAssistent\data\pbp.db` - macOS/Linux: `~/.bewerbungs-assistent/pbp.db` Schema-Upgrade läuft automatisch beim ersten Start, ein Backup wird vorher erstellt (Ordner `data\backups\`). ### Detaillierte Anleitung & Troubleshooting 📖 [Wiki → Installation](https://github.com/MadGapun/PBP/wiki/Installation) · [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ) --- ## [1.7.156] - 2026-10-08 — Kein Fehlertext mehr im Fenster, wenn Claude Desktop beim Start nicht läuft Hotfix für v1.7.155. Wer PBP über die Verknüpfung „PBP Bewerbungs-Portal“ startet, während Claude Desktop nicht läuft, sah auf einem deutschen Windows im schwarzen Fenster einen Python-Fehlertext (`UnicodeDecodeError … byte 0x81`). Das Dashboard lief trotzdem, aber der Text sah nach einem Absturz aus. Jetzt steht dort nichts mehr. Es gibt keine neue Funktion. **Wichtig zu wissen:** - **Der Fehlertext war harmlos, stand aber bei jedem Start ohne laufendes Claude Desktop im Fenster.** PBP fragt beim Start, ob Claude Desktop läuft, damit es PBP als Werkzeug laden kann. Läuft es nicht, antwortet Windows auf Deutsch „… Kriterien ausgeführt.“; das „ü“ schreibt die Konsole in ihrer eigenen Kodierung, PBP las es in der falschen. Die Antwort der Prüfung („läuft nicht“) stimmte dabei nur zufällig. Läuft Claude Desktop, trat der Fehler nie auf. - **Dieselbe Ursache an drei weiteren Stellen:** der Desktop-Pfad, die Verknüpfung „Ollama beenden“ und der Start von Claude aus dem Microsoft Store lasen PowerShell-Ausgaben ebenso. Mit einem Windows-Benutzernamen, der ein „ü“ enthält (zum Beispiel „Müller“), hätte dort dieselbe Meldung gestanden, und bei einem umgeleiteten Desktop (zum Beispiel über OneDrive) wäre die Verknüpfung „Ollama beenden“ nicht angelegt worden. ### Fixed - **Beim Start ohne laufendes Claude Desktop stand ein Python-Fehler im Dashboard-Fenster** (#1182; seit v1.7.150 in `claude_neustart.py`, davor in `start_dashboard.py`). `claude_laeuft` las die Ausgabe von `tasklist` im Textmodus (cp1252); die Konsole schreibt das „ü“ als OEM-Byte `0x81` (cp850), das dort nicht definiert ist. Der Lese-Thread von `subprocess` brach ab, `stdout` war danach leer. Jetzt liest die Prüfung Bytes und sucht den Namen `Claude.exe` darin. - **Die PowerShell-Aufrufe lesen in der Kodierung der Konsole** (#1182): Desktop-Pfad und Verknüpfung „Ollama beenden“ in `services/ollama_start.py`, Store-Start von Claude in `services/claude_neustart.py`; unlesbare Zeichen werden zu Ersatzzeichen statt zum Abbruch. ### Changed - Neu `services/konsole.py` (`konsole_kodierung`, `text_lesen`): ein Ort dafür, wie die Ausgabe von Konsolenprogrammen gelesen wird (#1182). - Ein Wächter-Test verlangt bei jedem `text=True` im Quelltext eine Kodierung (`encoding=` oder `errors=`); `systemctl`, `antiword` und der alte Installer mit Fenster (`installer/setup_gui.py`) lesen jetzt mit `errors="replace"` (#1182). ### Known Issues - **Der Deinstaller lässt unter Windows Reste liegen** (#1170, PP10): die vom Installer geladenen Browser-Dateien (Playwright, rund 700 MB, `%LOCALAPPDATA%\ms-playwright`) und den pip-Zwischenspeicher (rund 125 MB, `%LOCALAPPDATA%\pip`). Beides lässt sich von Hand löschen; in Version 1.8 fragt der Deinstaller danach. - Unverändert gegenüber v1.7.155: ein ausdrücklich gesetzter Standard für die Filter der Stellenliste fehlt (#1158 Punkt 5), Google Jobs liefert mit JobSpy 1.2 nichts mehr (#1159), und die offenen Punkte aus #1148 und #1149 (siehe dort). - Acht ältere Stellen im Code haben dasselbe Muster wie die Ursache der Leerlauf-Last aus v1.7.154 (`App.jsx` ×2, die Ablage für Dokumente ×3, der Einrichtungsassistent ×3). Bei ihnen wurde nichts Auffälliges gemessen; sie sind im Wächter-Test als Bestand benannt und bleiben in dieser Linie unverändert. ### Gemessen 14 neue Tests (7.093 gesamt, gezählt im Klon des Zweigs; v1.7.155 hatte 7.079) in `tests/test_v17156_konsole_ausgabe_1182.py`: ein Kindprozess schreibt genau die Bytes, die Windows schreibt (das „ü“ als `0x81`), und der Aufrufer wählt die Optionen wie im Betrieb. Vorher bricht der Lese-Thread ab (unter Windows) oder der Aufruf wirft (sonst), nachher nicht; dazu die Fälle „Claude läuft“, Text statt Bytes, Store-Start, Desktop-Pfad mit „ü“ und der Wächter samt Selbsttest. Auf der Fassung 1.7.155 schlagen die fünf Fälle an, die den Fehler betreffen. ## 📦 Wie installiere oder aktualisiere ich PBP? **Unter Windows** brauchst du kein Git, kein Python, kein Vorwissen — nur einen ZIP-Download und einen Doppelklick. **Unter macOS** muss vorher einmalig Python 3.11+ installiert sein (siehe unten), **unter Linux** Git und Python. Voraussetzung ueberall: [Claude Desktop](https://claude.ai/download) ist installiert (Linux: alternativ Claude Code CLI). ### Windows (empfohlen, bequemster Weg) 1. **ZIP herunterladen:** [PBP-1.7.156.zip](https://github.com/MadGapun/PBP/archive/refs/tags/v1.7.156.zip) 2. **Entpacken:** Rechtsklick auf die ZIP → *„Alle extrahieren..."* → Zielordner waehlen (z.B. `C:\PBP`). Darin liegt ein Unterordner `PBP-...` — dort hinein wechseln. 3. **Installieren:** Doppelklick auf **`INSTALLIEREN.bat`** 4. Das Setup laedt Python, alle Pakete und Chromium herunter (~3–5 Minuten) und konfiguriert Claude Desktop. 5. Auf dem Desktop liegt jetzt eine Verknuepfung **„PBP Bewerbungs-Portal"** — Doppelklick startet das Dashboard. 6. **Claude Desktop oeffnen** (lief es schon: komplett beenden — Rechtsklick aufs Claude-Symbol unten rechts in der Taskleiste → *Beenden* — und neu starten) und tippen: **„Starte die Ersterfassung"** 7. Taucht PBP nicht auf: Claude Desktop nochmal komplett beenden und neu starten — siehe [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ). ### macOS 1. **Einmalig vorab: Python 3.11+** — am einfachsten der [Installer von python.org](https://www.python.org/downloads/) (Doppelklick), alternativ `brew install python@3.12` 2. **ZIP herunterladen** (siehe Windows-Link) und **entpacken** (Doppelklick; im ZIP liegt ein Unterordner `PBP-...`) 3. **Doppelklick auf `INSTALLIEREN.command`** 4. Falls macOS warnt („kann nicht geoeffnet werden"): Rechtsklick auf die Datei → *„Oeffnen"* → nochmal *„Oeffnen"* ### Linux ```bash git clone --branch v1.7.156 --depth 1 https://github.com/MadGapun/PBP.git cd PBP bash installer/install.sh ``` ### Update von einer aelteren Version **Einfach drüberinstallieren** — deine Daten bleiben erhalten: - Windows: `%LOCALAPPDATA%\BewerbungsAssistent\data\pbp.db` - macOS/Linux: `~/.bewerbungs-assistent/pbp.db` Schema-Upgrade läuft automatisch beim ersten Start, ein Backup wird vorher erstellt (Ordner `data\backups\`). ### Detaillierte Anleitung & Troubleshooting 📖 [Wiki → Installation](https://github.com/MadGapun/PBP/wiki/Installation) · [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ) --- ## [1.7.155] - 2026-10-07 — Ein Klick auf einen Treffer der Suche öffnet das Objekt Hotfix für v1.7.154. Die Suche oben im Dashboard zeigt beim Tippen eine Liste mit Treffern (Bewerbungen, Stellen, Dokumente, E-Mails, Termine, Skills) — ein Klick darauf tat nichts. Jetzt öffnet er das Objekt. Es gibt keine neue Funktion; die Reparatur ist dieselbe, die in Version 1.8 steckt. **Wichtig zu wissen:** - **Ein Klick auf einen Treffer der Suche öffnet das Objekt.** Eine Bewerbung öffnet ihre Timeline, eine Stelle ihre Details (auch eine aussortierte), ein Dokument steht aufgeklappt auf der Dokumente-Seite (sein Name im Suchfeld der Seite, das × daneben zeigt wieder alle), eine E-Mail öffnet ihr Fenster (auch wenn sie zu keiner Bewerbung gehört), ein Termin mit Bewerbung deren Timeline, ein Termin ohne Bewerbung den Kalender mit dem geöffneten Termin, ein Skill das Profil mit der Skills-Liste auf seinen Namen gefiltert (ab sieben Skills, wo das Filterfeld steht). Das gilt auch, wenn du schon auf der Zielseite bist. - **Ein Termin ohne Bewerbung in „Offene Aktionen“ auf der Seite „Bewerbungen“ öffnet sich jetzt im Kalender.** Bisher führte der Klick nur auf die Kalender-Seite, ohne den Termin zu zeigen. ### Fixed - **Ein Klick auf einen Treffer der Suche oben im Dashboard tat nichts** (#1177; seit v1.7.0). Die Suche lieferte die Zieladresse im Format `#bewerbungen?id=…`; das Dashboard liest seit H31 nur noch `#seite/kennung` und fiel bei allem anderen still auf das Dashboard zurück. Der Klick setzte außerdem nur die Adresse (bei gleicher Adresse passiert dann nichts), und die Seiten Dokumente, Kalender und Profil nahmen keinen Sprung auf ein einzelnes Objekt entgegen; die Stellen-Treffer trugen den gespeicherten Hash mit Profil-Präfix. Jetzt gibt es eine Adressform für Treffer und Links (`services/dashboard_link.hash_ziel`), die Zuordnung Treffer → Ziel steht an einer Stelle (`lib/suche.js`), und jede Seite liest ihren Sprung. - **Ein Termin ohne Bewerbung in „Offene Aktionen“ der Seite „Bewerbungen“ führte nur in den Kalender** (#1177), ohne den Termin zu öffnen. ### Changed - In der Trefferliste der Suche steht bei einem Termin ohne Bewerbung jetzt „ohne Bewerbung“ statt eines Fragezeichens (#1177). - `GET /api/documents` kennt den Parameter `doc_id` und liefert dann genau ein Dokument (#1177). ### Known Issues - **Der Deinstaller lässt unter Windows Reste liegen** (#1170, PP10): die vom Installer geladenen Browser-Dateien (Playwright, rund 700 MB, `%LOCALAPPDATA%\ms-playwright`) und den pip-Zwischenspeicher (rund 125 MB, `%LOCALAPPDATA%\pip`). Beides lässt sich von Hand löschen; in Version 1.8 fragt der Deinstaller danach. - Unverändert gegenüber v1.7.154: ein ausdrücklich gesetzter Standard für die Filter der Stellenliste fehlt (#1158 Punkt 5), Google Jobs liefert mit JobSpy 1.2 nichts mehr (#1159), und die offenen Punkte aus #1148 und #1149 (siehe dort). - Acht ältere Stellen im Code haben dasselbe Muster wie die Ursache der Leerlauf-Last aus v1.7.154 (`App.jsx` ×2, die Ablage für Dokumente ×3, der Einrichtungsassistent ×3). Bei ihnen wurde nichts Auffälliges gemessen; sie sind im Wächter-Test als Bestand benannt und bleiben in dieser Linie unverändert. ### Gemessen 21 neue Tests (7.079 gesamt, gezählt im Klon des Zweigs; v1.7.154 hatte 7.058) in `tests/test_v17155_suche_treffer_1177.py`: jede Trefferart wird mit echtem Klick im gebauten Dashboard angeklickt, und das Objekt muss danach offen sein (auf der Fassung 1.7.154 schlagen 20 von 21 an), dazu ein Wächter, der zu jedem Schlüssel, den `lib/suche.js` erzeugt, einen Leser auf einer Seite verlangt. Der Node-Test `frontend/src/lib/suche.test.mjs` (in der CI) prüft die Zuordnung und die Adressen. ## 📦 Wie installiere oder aktualisiere ich PBP? **Unter Windows** brauchst du kein Git, kein Python, kein Vorwissen — nur einen ZIP-Download und einen Doppelklick. **Unter macOS** muss vorher einmalig Python 3.11+ installiert sein (siehe unten), **unter Linux** Git und Python. Voraussetzung ueberall: [Claude Desktop](https://claude.ai/download) ist installiert (Linux: alternativ Claude Code CLI). ### Windows (empfohlen, bequemster Weg) 1. **ZIP herunterladen:** [PBP-1.7.155.zip](https://github.com/MadGapun/PBP/archive/refs/tags/v1.7.155.zip) 2. **Entpacken:** Rechtsklick auf die ZIP → *„Alle extrahieren..."* → Zielordner waehlen (z.B. `C:\PBP`). Darin liegt ein Unterordner `PBP-...` — dort hinein wechseln. 3. **Installieren:** Doppelklick auf **`INSTALLIEREN.bat`** 4. Das Setup laedt Python, alle Pakete und Chromium herunter (~3–5 Minuten) und konfiguriert Claude Desktop. 5. Auf dem Desktop liegt jetzt eine Verknuepfung **„PBP Bewerbungs-Portal"** — Doppelklick startet das Dashboard. 6. **Claude Desktop oeffnen** (lief es schon: komplett beenden — Rechtsklick aufs Claude-Symbol unten rechts in der Taskleiste → *Beenden* — und neu starten) und tippen: **„Starte die Ersterfassung"** 7. Taucht PBP nicht auf: Claude Desktop nochmal komplett beenden und neu starten — siehe [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ). ### macOS 1. **Einmalig vorab: Python 3.11+** — am einfachsten der [Installer von python.org](https://www.python.org/downloads/) (Doppelklick), alternativ `brew install python@3.12` 2. **ZIP herunterladen** (siehe Windows-Link) und **entpacken** (Doppelklick; im ZIP liegt ein Unterordner `PBP-...`) 3. **Doppelklick auf `INSTALLIEREN.command`** 4. Falls macOS warnt („kann nicht geoeffnet werden"): Rechtsklick auf die Datei → *„Oeffnen"* → nochmal *„Oeffnen"* ### Linux ```bash git clone --branch v1.7.155 --depth 1 https://github.com/MadGapun/PBP.git cd PBP bash installer/install.sh ``` ### Update von einer aelteren Version **Einfach drüberinstallieren** — deine Daten bleiben erhalten: - Windows: `%LOCALAPPDATA%\BewerbungsAssistent\data\pbp.db` - macOS/Linux: `~/.bewerbungs-assistent/pbp.db` Schema-Upgrade läuft automatisch beim ersten Start, ein Backup wird vorher erstellt (Ordner `data\backups\`). ### Detaillierte Anleitung & Troubleshooting 📖 [Wiki → Installation](https://github.com/MadGapun/PBP/wiki/Installation) · [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ) --- ## [1.7.154] - 2026-10-06 — Die Seite „Stellen“ lässt den Rechner im Leerlauf in Ruhe Hotfix für v1.7.153. Beim Prüfen der Wege durch PBP (#1171) zeigte eine Messung, dass die Seite „Stellen“ im Leerlauf den Browser zu zwei Dritteln auslastete, obwohl niemand etwas tat. Es gibt keine neue Funktion; die Reparatur ist dieselbe, die in Version 1.8 steckt. **Wichtig zu wissen:** - **Die Seite „Stellen“ ist wieder still, wenn du nichts tust.** Sie fragte pausenlos, ob gerade eine Suche läuft — gemessen 270 bis 470 Anfragen pro Sekunde, und der Hauptthread des Browsers war zu 66 % beschäftigt (alle anderen Seiten: 0,0 %). Man sah keinen Fehler; der Rechner wurde nur lauter und der Akku leerer. Jetzt sind es 0,8 Anfragen pro Sekunde und 0,3 % (gemessen mit denselben Demo-Daten, fünf Sekunden nach dem Laden). Wer die Seite offen hatte, merkte es am Lüfter und am Akku; deine Daten waren nicht betroffen. - **Eine Suche, die Claude von außen startet, erscheint auf der Seite nach spätestens etwa fünf Sekunden.** Die Seite fragt dafür alle fünf Sekunden nach (im Ruhezustand bisher alle 30). Mit nur 30 Sekunden hätte es nach der Reparatur bis zu 26 Sekunden gedauert, bis die Anzeige „Jobsuche läuft“ erscheint; die Endlosschleife hatte das durch Zufall verdeckt. ### Fixed - **Die Seite „Stellen“ lässt den Rechner im Leerlauf wieder in Ruhe** (#1171). Sie fragte pausenlos, ob gerade eine Suche läuft: 270 bis 470 Anfragen pro Sekunde, der Hauptthread des Browsers zu 66 % beschäftigt, obwohl niemand etwas tat. Die Ursache war eine Funktion aus `useEffectEvent` (`syncRunningSearch`) in der Abhängigkeitsliste des Abfrage-Effekts: sie ist bei jedem Zeichnen eine neue Funktion, und jede Antwort setzt `searchJob` neu, sodass der Effekt nach jeder Antwort von vorn lief, ohne Pause. Die Zeile steht seit März 2026 (v0.23.0) im Code. Behoben: der Effekt hängt nur noch von `reloadKey` ab, und die Seite fragt alle 5 Sekunden (`SUCHE_ABFRAGE_MS`). ### Known Issues - **Der Deinstaller lässt unter Windows Reste liegen** (#1170, PP10): die vom Installer geladenen Browser-Dateien (Playwright, rund 700 MB, `%LOCALAPPDATA%\ms-playwright`) und den pip-Zwischenspeicher (rund 125 MB, `%LOCALAPPDATA%\pip`). Beides lässt sich von Hand löschen; in Version 1.8 fragt der Deinstaller danach. - Unverändert gegenüber v1.7.153: ein ausdrücklich gesetzter Standard für die Filter der Stellenliste fehlt (#1158 Punkt 5), Google Jobs liefert mit JobSpy 1.2 nichts mehr (#1159), und die offenen Punkte aus #1148 und #1149 (siehe dort). - Acht ältere Stellen im Code haben dasselbe Muster wie die Ursache oben (`App.jsx` ×2, die Ablage für Dokumente ×3, der Einrichtungsassistent ×3). Bei ihnen wurde nichts Auffälliges gemessen; sie sind im Wächter-Test als Bestand benannt und bleiben in dieser Linie unverändert. ### Gemessen 3 neue Tests (7.058 gesamt, gezählt im Klon des Zweigs; v1.7.153 hatte 7.055) in `tests/test_v17154_stellen_leerlauf_1171.py`: die Seite „Stellen“ schickt im Leerlauf weniger als 30 Anfragen in drei Sekunden (der Fehler machte rund 800 bis 1.400), kein Effekt-Ereignis steht in einer Abhängigkeitsliste (Wächter; der Bestand von acht Fällen ist benannt), und eine Suche, die Claude von außen startet, steht nach höchstens 12 Sekunden auf der Seite und verschwindet nach ihrem Ende wieder (gemessen 1 bis 5). Die ersten beiden werden auf dem Stand von v1.7.153 rot und mit der Reparatur grün; der dritte schützt die Reparatur selbst (er war vor der Reparatur grün, weil die Schleife die Suche zufällig sofort sah). Gemessen an v1.7.153 und an v1.7.154 mit demselben Skript: Leerlauf der Seite „Stellen“ 66 % und 270 bis 470 Anfragen pro Sekunde gegen 0,3 % und 0,8. ## 📦 Wie installiere oder aktualisiere ich PBP? **Unter Windows** brauchst du kein Git, kein Python, kein Vorwissen — nur einen ZIP-Download und einen Doppelklick. **Unter macOS** muss vorher einmalig Python 3.11+ installiert sein (siehe unten), **unter Linux** Git und Python. Voraussetzung ueberall: [Claude Desktop](https://claude.ai/download) ist installiert (Linux: alternativ Claude Code CLI). ### Windows (empfohlen, bequemster Weg) 1. **ZIP herunterladen:** [PBP-1.7.154.zip](https://github.com/MadGapun/PBP/archive/refs/tags/v1.7.154.zip) 2. **Entpacken:** Rechtsklick auf die ZIP → *„Alle extrahieren..."* → Zielordner waehlen (z.B. `C:\PBP`). Darin liegt ein Unterordner `PBP-...` — dort hinein wechseln. 3. **Installieren:** Doppelklick auf **`INSTALLIEREN.bat`** 4. Das Setup laedt Python, alle Pakete und Chromium herunter (~3–5 Minuten) und konfiguriert Claude Desktop. 5. Auf dem Desktop liegt jetzt eine Verknuepfung **„PBP Bewerbungs-Portal"** — Doppelklick startet das Dashboard. 6. **Claude Desktop oeffnen** (lief es schon: komplett beenden — Rechtsklick aufs Claude-Symbol unten rechts in der Taskleiste → *Beenden* — und neu starten) und tippen: **„Starte die Ersterfassung"** 7. Taucht PBP nicht auf: Claude Desktop nochmal komplett beenden und neu starten — siehe [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ). ### macOS 1. **Einmalig vorab: Python 3.11+** — am einfachsten der [Installer von python.org](https://www.python.org/downloads/) (Doppelklick), alternativ `brew install python@3.12` 2. **ZIP herunterladen** (siehe Windows-Link) und **entpacken** (Doppelklick; im ZIP liegt ein Unterordner `PBP-...`) 3. **Doppelklick auf `INSTALLIEREN.command`** 4. Falls macOS warnt („kann nicht geoeffnet werden"): Rechtsklick auf die Datei → *„Oeffnen"* → nochmal *„Oeffnen"* ### Linux ```bash git clone --branch v1.7.154 --depth 1 https://github.com/MadGapun/PBP.git cd PBP bash installer/install.sh ``` ### Update von einer aelteren Version **Einfach drüberinstallieren** — deine Daten bleiben erhalten: - Windows: `%LOCALAPPDATA%\BewerbungsAssistent\data\pbp.db` - macOS/Linux: `~/.bewerbungs-assistent/pbp.db` Schema-Upgrade läuft automatisch beim ersten Start, ein Backup wird vorher erstellt (Ordner `data\backups\`). ### Detaillierte Anleitung & Troubleshooting 📖 [Wiki → Installation](https://github.com/MadGapun/PBP/wiki/Installation) · [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ) --- ## [1.7.153] - 2026-10-05 — Der Deinstaller-Knopf öffnet sich, das Dashboard startet mit offenem Claude Hotfix für v1.7.152. Eine Praxisprobe auf einem frischen Windows 11 mit Claude aus dem Microsoft Store (Installation, Start, Deinstallation) hat fünf Fehler gezeigt, die auch diese Linie betreffen. Die Gegenprobe der Reparaturen auf demselben Rechner fand einen sechsten: der Deinstaller ließ nach dem Start über den Knopf einen leeren Ordner liegen. Es gibt keine neue Funktion; die Reparaturen sind dieselben, die in Version 1.8 stecken. **Wichtig zu wissen:** - **Das Dashboard startet auch dann, wenn Claude Desktop läuft.** Die Frage „Claude jetzt neu starten?“ im Fenster der Verknüpfung stand bisher VOR dem Start. Solange niemand antwortete (das Fenster liegt hinter anderen), lief kein Dashboard, und der Installer öffnete nach einer Minute „Verbindung verweigert“. Jetzt kommt die Frage erst, nachdem das Dashboard läuft; die Vorgabe bleibt „Nein“. - **Der Knopf „Deinstaller starten“ (Einstellungen › Gefahrenzone) öffnet das Fenster mit den Fragen.** Unter Windows öffnete er kein Fenster, sondern zeigte „Kein Terminal gefunden“: Windows lehnt die Prozess-Einstellungen ab, mit denen das Fenster gestartet wurde (gemessen unter Windows 11; die Kombination stand seit v1.7.0-beta.43 im Code). Wer das erlebt hat, konnte `DEINSTALLIEREN.bat` doppelklicken; das geht weiter. - **Der Deinstaller räumt auch die Konfiguration von Claude aus dem Microsoft Store auf** und schließt das Dashboard-Fenster. Bisher blieb der Eintrag dort stehen, und Claude meldete danach bei jedem Start einen Server ohne Programm. Wer das erlebt hat, streicht den Eintrag `bewerbungs-assistent` von Hand in `%LOCALAPPDATA%\Packages\Claude_…\LocalCache\Roaming\Claude\claude_desktop_config.json`. - **Der Installer startet Claude aus dem Store am Ende**, statt „Claude Desktop nicht gefunden“ zu melden. ### Fixed - **Die Frage zum Neustart von Claude hielt den Start des Servers an** (#1170, PP1). `start_dashboard.py` stellt sie jetzt in einem Hintergrund-Thread (`services/claude_neustart.neustart_im_hintergrund`; Vorgabe Nein; ohne Konsole wird gar nicht gefragt). - **`services/deinstallation.starten`: `DETACHED_PROCESS` und `CREATE_NEW_CONSOLE` zugleich** (#1170, PP9). Windows lehnt die Kombination ab (`OSError: [WinError 87]`); der Fehler wurde gefangen und als „Kein Terminal gefunden“ gezeigt. Jetzt `DETACHED_PROCESS | CREATE_NEW_PROCESS_GROUP` (das Fenster öffnet `start`). Scheitert der Start trotzdem, nennt der Hinweis den Grund und den Doppelklick auf `DEINSTALLIEREN.bat`; die Karte in den Einstellungen zeigt den Hinweis des Servers. - **`DEINSTALLIEREN.bat` kannte nur den Standardpfad der Claude-Konfiguration** (#1170, PP11). `_setup_claude.py` schreibt den Eintrag auch in `Packages\Claude_*\LocalCache\Roaming\Claude`, und genau dort liest die Store-Fassung. Jetzt dieselben Orte (auch `AnthropicPBC.Claude*`); ein Schreibfehler zählt als Fehler (Code 5), nicht mehr als „MCP-Eintrag war nicht vorhanden“. - **`DEINSTALLIEREN.bat` schließt das Konsolenfenster des Dashboards** (`cmd /K "Dashboard starten.bat"`), es blieb sonst leer stehen (#1170, PP12). - **Der Deinstaller lässt keinen leeren App-Ordner mehr liegen** (#1170, PP13; gefunden bei der Gegenprobe auf einem frischen Windows 11). Gestartet über den Knopf im Dashboard meldete Schritt [5/7] „App-Verzeichnis … konnte nicht entfernt werden“, und `%LOCALAPPDATA%\BewerbungsAssistent\app` blieb leer zurück. Ursache: das neue Fenster hatte den App-Ordner als Arbeitsordner (`start /D `), und seine `cmd.exe` wartet auf die nach `%TEMP%` verschobene Kopie des Deinstallers; ein Prozess hält seinen Arbeitsordner fest. Der Doppelklick auf `DEINSTALLIEREN.bat` im App-Ordner hat denselben Arbeitsordner. Jetzt öffnet `services/deinstallation.starten` das Fenster im Temp-Ordner, und die Datei verlässt den Ordner (`cd /d "%TEMP%"`), bevor sie sich verschiebt. Wer den leeren Ordner schon hat, löscht ihn von Hand. - **`INSTALLIEREN.bat`** (#1170, PP3): Die Paket-Abfrage nach der Store-Fassung läuft auch dann, wenn Claude schon am Konfigurationsordner erkannt wurde; das Ende der Installation startet Claude. Dazu drei Kleinigkeiten der Ausgabe: ein Gedankenstrich, der als „ÖÇö“ ankam, das fehlende Ausrufezeichen in „Willkommen! …“ und die sichtbaren Fluchtzeichen in „Trotzdem neu installieren? (j/n)“. - Die Zeit-Tests (`test_v17148_zeit_zwischenspeicher_1144`) warten unter Windows je Schritt länger; sie scheiterten dort bei Last, ohne dass am Code etwas lag. ### Known Issues - **Der Deinstaller lässt unter Windows Reste liegen** (#1170, PP10): die vom Installer geladenen Browser-Dateien (Playwright, rund 700 MB, `%LOCALAPPDATA%\ms-playwright`) und den pip-Zwischenspeicher (rund 125 MB, `%LOCALAPPDATA%\pip`). Beides lässt sich von Hand löschen; wie der Deinstaller künftig damit umgeht, ist noch offen. - Unverändert gegenüber v1.7.152: ein ausdrücklich gesetzter Standard für die Filter der Stellenliste fehlt (#1158 Punkt 5), Google Jobs liefert mit JobSpy 1.2 nichts mehr (#1159), und die offenen Punkte aus #1148 und #1149 (siehe dort). ### Gemessen 26 neue Tests (7.055 gesamt, gezählt im Klon des Zweigs; v1.7.152 hatte 7.029): 18 in `tests/test_v18_praxisprobe_deinstaller.py` (die echten PowerShell-Zeilen des Deinstallers gegen Temp-Ordner mit Standard- und Store-Konfiguration, ein Schreibfehler, der Prozessfilter gegen fremde und eigene `cmd`-Prozesse, der Prozessstart mit den echten Flags gegen das Betriebssystem, und ein Lauf mit dem echten Anfang der Datei, bei dem der Arbeitsordner den App-Ordner festhält) und 8 in `tests/test_v18_praxisprobe_start.py` (die Frage blockiert den Start nicht, ohne Konsole wird nicht gefragt, die Installer-Ausgabe ist reines ASCII). Gegenprobe (jeder Eingriff einzeln, jeder macht mindestens einen Test rot): 19 Eingriffe, alle erkannt, darunter „der Arbeitsordner ist wieder der Ordner der Datei“, „die Datei bleibt vor dem Umzug im Ordner“, „beide Flags wieder zugleich“, „nur das erste Paketmuster“, „der Schreibfehler gilt als kein Eintrag“, „jedes `cmd.exe` wird beendet“, „die Frage läuft im selben Thread“. ## 📦 Wie installiere oder aktualisiere ich PBP? **Unter Windows** brauchst du kein Git, kein Python, kein Vorwissen — nur einen ZIP-Download und einen Doppelklick. **Unter macOS** muss vorher einmalig Python 3.11+ installiert sein (siehe unten), **unter Linux** Git und Python. Voraussetzung ueberall: [Claude Desktop](https://claude.ai/download) ist installiert (Linux: alternativ Claude Code CLI). ### Windows (empfohlen, bequemster Weg) 1. **ZIP herunterladen:** [PBP-1.7.153.zip](https://github.com/MadGapun/PBP/archive/refs/tags/v1.7.153.zip) 2. **Entpacken:** Rechtsklick auf die ZIP → *„Alle extrahieren..."* → Zielordner waehlen (z.B. `C:\PBP`). Darin liegt ein Unterordner `PBP-...` — dort hinein wechseln. 3. **Installieren:** Doppelklick auf **`INSTALLIEREN.bat`** 4. Das Setup laedt Python, alle Pakete und Chromium herunter (~3–5 Minuten) und konfiguriert Claude Desktop. 5. Auf dem Desktop liegt jetzt eine Verknuepfung **„PBP Bewerbungs-Portal"** — Doppelklick startet das Dashboard. 6. **Claude Desktop oeffnen** (lief es schon: komplett beenden — Rechtsklick aufs Claude-Symbol unten rechts in der Taskleiste → *Beenden* — und neu starten) und tippen: **„Starte die Ersterfassung"** 7. Taucht PBP nicht auf: Claude Desktop nochmal komplett beenden und neu starten — siehe [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ). ### macOS 1. **Einmalig vorab: Python 3.11+** — am einfachsten der [Installer von python.org](https://www.python.org/downloads/) (Doppelklick), alternativ `brew install python@3.12` 2. **ZIP herunterladen** (siehe Windows-Link) und **entpacken** (Doppelklick; im ZIP liegt ein Unterordner `PBP-...`) 3. **Doppelklick auf `INSTALLIEREN.command`** 4. Falls macOS warnt („kann nicht geoeffnet werden"): Rechtsklick auf die Datei → *„Oeffnen"* → nochmal *„Oeffnen"* ### Linux ```bash git clone --branch v1.7.153 --depth 1 https://github.com/MadGapun/PBP.git cd PBP bash installer/install.sh ``` ### Update von einer aelteren Version **Einfach drüberinstallieren** — deine Daten bleiben erhalten: - Windows: `%LOCALAPPDATA%\BewerbungsAssistent\data\pbp.db` - macOS/Linux: `~/.bewerbungs-assistent/pbp.db` Schema-Upgrade läuft automatisch beim ersten Start, ein Backup wird vorher erstellt (Ordner `data\backups\`). ### Detaillierte Anleitung & Troubleshooting 📖 [Wiki → Installation](https://github.com/MadGapun/PBP/wiki/Installation) · [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ) --- ## [1.7.152] - 2026-10-03 — PBP sagt Bescheid, wenn Version 1.8 erscheint Hotfix für v1.7.151. Die Update-Prüfung schaut nur nach Versionen der eigenen Linie, damit eine 1.7-Installation nie von selbst auf 1.8 wechselt. Das hatte eine Kehrseite: Sobald 1.8.0 erscheint, hätte jede 1.7-Installation nur „aktuell“ gezeigt, und in PBP hätte niemand erfahren, dass es 1.8 gibt (#1168). Jetzt nennt PBP eine neue Linie, sobald sie als fertige Version erschienen ist, mit dem Weg dorthin. Kein Schema-Eingriff, keine Änderung an deinen Daten. **Wichtig zu wissen:** - **Erscheint Version 1.8, steht es unter der Versionsnummer in der Seitenleiste: „Version 1.8 ist erschienen“** (der Link führt zur Veröffentlichung mit der Installationsanleitung), und auf dem Dashboard erscheint ein ruhiger Hinweis „So wechselst du“. Der Wechsel geht **einmal von Hand**: das ZIP der neuen Version laden und den Installer starten, wie bei jedem Update. Deine Daten bleiben erhalten. Ab 1.8 kann PBP Updates dann auf Wunsch selbst installieren. - **Nichts wird automatisch installiert.** Für deine eigene Linie bleibt die Anzeige, wie sie ist („aktuell“ oder „Neue Version verfügbar“). - Eine Vorabversion (Beta) einer neuen Linie löst den Hinweis nie aus. ### Added - **`neue_linie` in `/api/update-check`** (#1168, `services/update_quelle.neue_linie`): die neueste **stabile** Version einer **höheren** Linie aus jeder Antwort, die eine Quelle gibt (GitHub `releases/latest`, die Liste der Veröffentlichungen, elwosa.de). Entwürfe und Vorabversionen zählen nie; Linien werden als Zahlen verglichen (1.10 nach 1.9). Antworten mehrere Quellen, gilt die neueste Version. - **Hinweis in Seitenleiste und Hinweiszone** (`lib/updateStand.neueLinieHinweis`, `lib/hinweisZone.js` Stufe 5b): „Version 1.8 ist erschienen“ mit Link und dem Weg dorthin; in der Hinweiszone nach einem Update der eigenen Linie und vor dem Ollama-Angebot. ### Fixed - **Eine 1.7-Installation erfuhr nie, dass es Version 1.8 gibt** (#1168). Der Linienfilter (`update_quelle._passt_zur_linie`) verwarf jede Antwort einer anderen Linie, für das Angebot zu Recht, für die Auskunft zu Unrecht. ### Known Issues - Unverändert gegenüber v1.7.151: ein ausdrücklich gesetzter Standard für die Filter der Stellenliste fehlt (#1158 Punkt 5), Google Jobs liefert mit JobSpy 1.2 nichts mehr (#1159), und die offenen Punkte aus #1148 und #1149 (siehe dort). ### Gemessen 24 neue Tests (7.029 gesamt, gezählt im sauberen Klon ohne Entwicklungsumgebung; v1.7.151 hatte 7.005), alle in `tests/test_v17152_neue_linie_1168.py`: die reine Funktion (höhere, eigene und niedrigere Linie, Vorabversionen, Entwürfe, Zahlenvergleich, elwosa.de, unbrauchbare Antworten) und der Endpunkt mit nachgestellten Quellen (vor und nach dem Erscheinen von 1.8, gescheiterte Liste, mehrere Quellen, kein Netz). Dazu zwei erweiterte Node-Dateien (`updateStand.test.mjs`, `hinweisZone.test.mjs`). Gegenprobe (jeder Eingriff einzeln, jeder macht mindestens einen Test rot): 15 Eingriffe, alle erkannt, darunter „die eigene Linie gilt als höhere“, „Linien als Text verglichen“, „eine spätere Quelle mit älterer Version überschreibt“ und „die neue Linie verdrängt das Update der eigenen Linie“. Im echten Browser gegen eine isolierte Demo mit nachgestellten GitHub-Antworten (Chromium, ohne Fenster): die Seitenleiste zeigt „Neue Version verfügbar: v1.7.152“ und darunter „Version 1.8 ist erschienen“ mit dem richtigen Ziel und dem Weg im Tooltip, keine Fehler im Browser. ## 📦 Wie installiere oder aktualisiere ich PBP? **Unter Windows** brauchst du kein Git, kein Python, kein Vorwissen — nur einen ZIP-Download und einen Doppelklick. **Unter macOS** muss vorher einmalig Python 3.11+ installiert sein (siehe unten), **unter Linux** Git und Python. Voraussetzung ueberall: [Claude Desktop](https://claude.ai/download) ist installiert (Linux: alternativ Claude Code CLI). ### Windows (empfohlen, bequemster Weg) 1. **ZIP herunterladen:** [PBP-1.7.152.zip](https://github.com/MadGapun/PBP/archive/refs/tags/v1.7.152.zip) 2. **Entpacken:** Rechtsklick auf die ZIP → *„Alle extrahieren..."* → Zielordner waehlen (z.B. `C:\PBP`). Darin liegt ein Unterordner `PBP-...` — dort hinein wechseln. 3. **Installieren:** Doppelklick auf **`INSTALLIEREN.bat`** 4. Das Setup laedt Python, alle Pakete und Chromium herunter (~3–5 Minuten) und konfiguriert Claude Desktop. 5. Auf dem Desktop liegt jetzt eine Verknuepfung **„PBP Bewerbungs-Portal"** — Doppelklick startet das Dashboard. 6. **Claude Desktop oeffnen** (lief es schon: komplett beenden — Rechtsklick aufs Claude-Symbol unten rechts in der Taskleiste → *Beenden* — und neu starten) und tippen: **„Starte die Ersterfassung"** 7. Taucht PBP nicht auf: Claude Desktop nochmal komplett beenden und neu starten — siehe [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ). ### macOS 1. **Einmalig vorab: Python 3.11+** — am einfachsten der [Installer von python.org](https://www.python.org/downloads/) (Doppelklick), alternativ `brew install python@3.12` 2. **ZIP herunterladen** (siehe Windows-Link) und **entpacken** (Doppelklick; im ZIP liegt ein Unterordner `PBP-...`) 3. **Doppelklick auf `INSTALLIEREN.command`** 4. Falls macOS warnt („kann nicht geoeffnet werden"): Rechtsklick auf die Datei → *„Oeffnen"* → nochmal *„Oeffnen"* ### Linux ```bash git clone --branch v1.7.152 --depth 1 https://github.com/MadGapun/PBP.git cd PBP bash installer/install.sh ``` ### Update von einer aelteren Version **Einfach drüberinstallieren** — deine Daten bleiben erhalten: - Windows: `%LOCALAPPDATA%\BewerbungsAssistent\data\pbp.db` - macOS/Linux: `~/.bewerbungs-assistent/pbp.db` Schema-Upgrade läuft automatisch beim ersten Start, ein Backup wird vorher erstellt (Ordner `data\backups\`). ### Detaillierte Anleitung & Troubleshooting 📖 [Wiki → Installation](https://github.com/MadGapun/PBP/wiki/Installation) · [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ) --- ## [1.7.151] - 2026-10-03 — Die Update-Anzeige bleibt richtig, wenn Version 1.8 erscheint Hotfix für v1.7.150. Sobald Version 1.8.0 als neueste stabile Version erscheint, hätte jede 1.7-Installation dauerhaft „Update-Stand unbekannt“ gezeigt, mit dem falschen Grund „Keine Update-Quelle hat geantwortet“, obwohl GitHub mit 200 antwortet (#1144 Punkt 2). Jetzt fragt PBP zusätzlich die Liste der Veröffentlichungen und nimmt daraus die neueste Version der **eigenen Linie**. Kein Schema-Eingriff, keine Änderung an deinen Daten. **Wichtig zu wissen:** - **Die Update-Anzeige sagt die Wahrheit, auch wenn eine neuere Linie erscheint.** Nennt GitHub als neueste Veröffentlichung eine andere Linie (zum Beispiel 1.8.0), zeigt PBP „aktuell“ oder das nächste Update der eigenen Linie statt „unbekannt“. **Auf 1.8 wechselt PBP nie von selbst:** dafür lädst du das ZIP der neuen Version und startest `INSTALLIEREN.bat` wie gewohnt. - Antwortet GitHub, nennt aber keine Version deiner Linie, steht das so in der Anzeige („Die Update-Quelle hat geantwortet, nennt aber keine veröffentlichte Version der Linie 1.7“); ohne jede Antwort bleibt es beim Fehlschlag mit der kurzen Frist aus #1134. ### Changed - **Die Update-Prüfung hat eine dritte Quelle:** die Liste der Veröffentlichungen (`github-liste`, `services/update_quelle.py`). Entwürfe zählen nie, Vorabversionen nur für eine Installation, die selbst eine ist (wer stabil nutzt, bekommt keine Beta angeboten), und die Versionen werden als Zahlen verglichen (`beta.10` kommt nach `beta.9`). Nennt die erste Quelle (`releases/latest`) schon die eigene Linie, wird die Liste nicht gefragt. - Vier ältere Tests, die die Zwei-Quellen-Vorgabe festhielten, sind bewusst auf drei Quellen angepasst. ### Fixed - **„Update-Stand unbekannt“ nach dem Erscheinen einer neueren Linie** (#1144 Punkt 2). `releases/latest` liefert immer nur die neueste **stabile** Version überhaupt; der Linienfilter (`update_quelle._passt_zur_linie`) verwarf sie für die eigene Linie, und die Anzeige nannte den falschen Grund. Dieselbe Änderung steht seit dem 03.10.2026 auf `main` (#1161). ### Known Issues - Unverändert gegenüber v1.7.150: ein ausdrücklich gesetzter Standard für die Filter der Stellenliste fehlt (#1158 Punkt 5), Google Jobs liefert mit JobSpy 1.2 nichts mehr (#1159), und die offenen Punkte aus #1148 und #1149 (siehe dort). ### Gemessen 23 neue Tests (7.005 gesamt, gezählt im sauberen Klon ohne Entwicklungsumgebung; v1.7.150 hatte 6.982): alle in `tests/test_v18_update_beta_1144.py` (Auswertung der Liste, Anzeige und Abfrage der Quellen), dazu vier angepasste ältere Tests und eine erweiterte Node-Datei (`updateStand.test.mjs`). Gegenprobe der Änderung auf `main`: 14 Eingriffe, jeder macht mindestens einen Test rot. ## 📦 Wie installiere oder aktualisiere ich PBP? **Unter Windows** brauchst du kein Git, kein Python, kein Vorwissen — nur einen ZIP-Download und einen Doppelklick. **Unter macOS** muss vorher einmalig Python 3.11+ installiert sein (siehe unten), **unter Linux** Git und Python. Voraussetzung ueberall: [Claude Desktop](https://claude.ai/download) ist installiert (Linux: alternativ Claude Code CLI). ### Windows (empfohlen, bequemster Weg) 1. **ZIP herunterladen:** [PBP-1.7.151.zip](https://github.com/MadGapun/PBP/archive/refs/tags/v1.7.151.zip) 2. **Entpacken:** Rechtsklick auf die ZIP → *„Alle extrahieren..."* → Zielordner waehlen (z.B. `C:\PBP`). Darin liegt ein Unterordner `PBP-...` — dort hinein wechseln. 3. **Installieren:** Doppelklick auf **`INSTALLIEREN.bat`** 4. Das Setup laedt Python, alle Pakete und Chromium herunter (~3–5 Minuten) und konfiguriert Claude Desktop. 5. Auf dem Desktop liegt jetzt eine Verknuepfung **„PBP Bewerbungs-Portal"** — Doppelklick startet das Dashboard. 6. **Claude Desktop oeffnen** (lief es schon: komplett beenden — Rechtsklick aufs Claude-Symbol unten rechts in der Taskleiste → *Beenden* — und neu starten) und tippen: **„Starte die Ersterfassung"** 7. Taucht PBP nicht auf: Claude Desktop nochmal komplett beenden und neu starten — siehe [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ). ### macOS 1. **Einmalig vorab: Python 3.11+** — am einfachsten der [Installer von python.org](https://www.python.org/downloads/) (Doppelklick), alternativ `brew install python@3.12` 2. **ZIP herunterladen** (siehe Windows-Link) und **entpacken** (Doppelklick; im ZIP liegt ein Unterordner `PBP-...`) 3. **Doppelklick auf `INSTALLIEREN.command`** 4. Falls macOS warnt („kann nicht geoeffnet werden"): Rechtsklick auf die Datei → *„Oeffnen"* → nochmal *„Oeffnen"* ### Linux ```bash git clone --branch v1.7.151 --depth 1 https://github.com/MadGapun/PBP.git cd PBP bash installer/install.sh ``` ### Update von einer aelteren Version **Einfach drüberinstallieren** — deine Daten bleiben erhalten: - Windows: `%LOCALAPPDATA%\BewerbungsAssistent\data\pbp.db` - macOS/Linux: `~/.bewerbungs-assistent/pbp.db` Schema-Upgrade läuft automatisch beim ersten Start, ein Backup wird vorher erstellt (Ordner `data\backups\`). ### Detaillierte Anleitung & Troubleshooting 📖 [Wiki → Installation](https://github.com/MadGapun/PBP/wiki/Installation) · [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ) --- ## [1.7.150] - 2026-10-02 — Der Stellen-Tab blendet nichts mehr still aus, der Modell-Download zeigt Fortschritt, Kennungen mit Vorsilbe gelten überall, JobSpy 1.2 Hotfix für v1.7.149. Der Stellen-Tab zeigte zwei von vier aktiven Stellen, obwohl kein Filter eingeschaltet war (#1158) — ein eingebautes „Punkte ≥ 0“ verbarg jede Stelle mit negativem Stand, ohne dass es jemand sagte. Dazu: der Download eines KI-Modells zeigt einen Fortschritt statt nach zehn Minuten „fehlgeschlagen“ zu melden (#1154), jedes Werkzeug versteht die Kennungen mit Vorsilbe, die PBP selbst ausgibt (#1148), die Rückfrage beim Neustart von Claude Desktop hat die Vorgabe „Nein“ (#1149) und PBP verlangt `python-jobspy` ab 1.2 (#1159). Kein Schema-Eingriff. **Wichtig zu wissen:** - **Der Stellen-Tab zeigt alle offenen Stellen, solange du keinen Filter setzt.** Eine Stelle mit negativem Punktestand (ein Abzug für Entfernung oder Gehalt, kein Urteil über die Passung) fiel bisher still heraus. Beim Öffnen und bei „Filter zurücksetzen“ gilt jetzt „keine Einschränkung“; Aussortierte stehen im eigenen Tab, Stellen mit laufender Bewerbung sind keine offenen Stellen. **Das ändert, was du beim Öffnen siehst:** der Rahmenfilter („Rahmen passt nicht ausblenden“) und der Schwellenfilter („unter der Schwelle ausblenden“) sind beim Öffnen aus (bisher an). Wer sie will, schaltet sie ein; die Auswahl bleibt nach dem Neuladen erhalten. - **Der gelbe Streifen sagt, warum etwas fehlt.** Er nennt jeden wirksamen Filter mit der Zahl der Stellen, die er verbirgt („Punkte ab 0 (2) · beworbene ausgeblendet (1)“), und die Stellen, die mehrere Filter zugleich verbergen. Das Feld „Punkte ≥“ nimmt auch 0 und negative Werte an. - **Die Entfernung stimmt auch bei „(hybrid), remote möglich“ im Ort.** Ein Ort wie „Hamburg (hybrid), remote möglich“ landete beim Kartendienst bei Mainz (410 statt 20 Kilometer) und zog die beste Stelle des Tages mit einem Abzug unter null. Jetzt wird der Ortsname herausgelöst, und bereits gespeicherte Entfernungen mit solchem Zusatz rechnet PBP nach der nächsten Suche neu. - **Der Download eines KI-Modells zeigt einen Fortschritt** (Einstellungen › Lokale KI): Prozent, Größe und ein Satz, was gerade passiert. Er bricht nicht mehr nach zehn Minuten ab. - **Beim Start über die Desktop-Verknüpfung fragt PBP, ob Claude Desktop neu gestartet werden soll, mit der Vorgabe „Nein“.** Ein bloßes Enter beendete Claude bisher gewaltsam (nicht abgeschickter Text ging verloren). - **PBP verlangt jetzt `python-jobspy` ab 1.2.** Bestehende Installationen ziehen beim Drüberinstallieren nach. Google Jobs liefert mit 1.2 keine Stellen mehr (siehe Known Issues). - **Der Installer kommt mit Windows-Benutzernamen zurecht, die ein Zeichen außerhalb der deutschen Zeichentabelle enthalten** (ł, ş, ř, griechische und kyrillische Buchstaben; Umlaute und ß waren nie betroffen, #1163). Bisher stürzten die Claude-Konfiguration und die Sicherung vor dem Update dort ab: Claude Desktop kannte PBP danach nicht, und der Installer meldete „Sicherung NICHT gelungen“, obwohl sie fertig sein konnte. Wer so einen Namen hat, installiert 1.7.150 einfach drüber. ### Added - **Zahl je Filter und „offene Stellen“ in der Stellenliste** (#1158). `GET /api/jobs` antwortet zusätzlich mit `offen` (Stellen ohne laufende Bewerbung), `offen_verborgen`, `beworbene_anzahl` und `verborgen` (je wirksamem Filter die Zahl der Stellen, die er allein verbirgt, gezählt über die Stellen, die alle anderen Filter passieren). Die alten Felder bleiben für andere Aufrufer. - **Der Filterzustand der Stellenliste bleibt erhalten** (#1158 Punkt 6). Er liegt im Speicher des Browsers (`lib/stellenFilter.js`); Suchtext und Ansicht (aktiv/aussortiert) werden bewusst nicht gemerkt, sonst verkürzt ein vergessener Suchtext die Liste beim nächsten Öffnen unbemerkt. - **Modell-Download als Hintergrund-Job** (#1154 Punkt 1, `services/modell_download.py`). `POST /api/llm/pull` antwortet sofort mit einer Kennung; der Job liest Ollamas Stream, rechnet Prozent und einen deutschen Satz aus, die Oberfläche fragt ihn ab (`lib/modellDownload.js`). Es gibt keine Gesamt-Zeitgrenze mehr, nur eine Stillstandsgrenze von 180 Sekunden ohne Zeile. - **`services/claude_neustart.py`** (#1149 Punkt 10): Prüfen, ob Claude Desktop läuft, und Neustart über dieselben Orte wie im Installer, dazu die Store-Fassung. - **`entfernungen_bereinigen`** (#1158 Punkt 8, `services/eigener_standort.py`): heilt nach jedem Suchlauf gespeicherte Entfernungen von Stellen mit Ortszusatz — höchstens 40 Orte je Lauf, jeder Ort je Programmstart einmal, von Hand gesetzte Werte bleiben, Ersatz erst ab einem Kilometer Abweichung, Fahrstrecken zum falschen Ort werden verworfen. ### Changed - **Die Voreinstellung des Stellen-Tabs ist „keine Einschränkung“** (#1158 Punkte 1, 4, 5). Mindestpunkte sind leer statt 0, Rahmen- und Schwellenfilter aus; „Beworbene ausblenden“ bleibt an (eine Stelle mit laufender Bewerbung ist keine offene Stelle). Die Top-Stellen auf dem Dashboard behalten Rahmen- und Schwellenfilter — sie sind eine Auswahl der besten Treffer und behaupten nicht, die Stellenliste zu sein. - **Tab „Aktive (n)“ und die Zahl neben der Liste zählen offene Stellen** (#1158 Punkt 7), wie der Zähler im Menü es schon tat; vorher zählte der Tab die Stellen mit Bewerbung mit. Nach „Filter zurücksetzen“ nennen Menü, Tab und Liste dieselbe Zahl. - **Gefragt und gemerkt wird der bereinigte Ort** (#1158 Punkt 8). Bis v1.7.149 ging der Rohtext zuerst an den Kartendienst; die Bereinigung lief nur als letzter Versuch. Ein Text ohne Ort („Remote möglich“, „Homeoffice möglich“, „Deutschland“) wird nie gefragt — die Entfernung bleibt dann unbekannt statt erfunden. Ein angehängtes Land („…, Germany“) ändert die Abfrage nicht, eine früher gemerkte Antwort gilt weiter (sonst müsste jeder bekannte Ort einmal neu angefragt werden). Die Laufkarte der Suche zählt ihre „verschiedenen Orte“ mit demselben Schlüssel. - **Eine ungültige Untergrenze wird benannt** (#1158): „nan“ und „inf“ lassen alles durch oder verbergen alles; die Liste antwortet jetzt mit einer Fehlermeldung statt eines stillen Ergebnisses. - **`python-jobspy>=1.2`** in `pyproject.toml` (beide Extras) und `INSTALLIEREN.bat` (#1159). ### Fixed - **Der Stellen-Tab blendete Stellen mit negativem Punktestand still aus** (#1158 Punkte 1 bis 7). Gemessen am 02.10.2026: zwei von vier aktiven Stellen, Filter alle aus. Ursachen: die Vorgabe `min_score = 0.0` in `services/stellen_liste.py`; das Feld „Punkte ≥“ schickte nur Werte über 0 ab (`Number(minScore||0) > 0`), -100 tippen bewirkte nichts; der Streifen nannte „Punkte ab 0“ nie; die Seite startete mit eingeschaltetem Rahmen- und Schwellenfilter, und „Filter zurücksetzen“ stellte genau diesen Zustand her; der Filterzustand ging beim Neuladen verloren. Geprüft mit Tests (Punktestand -100, 0 und 100 erscheinen alle nach dem Zurücksetzen; Menü = Tab = Liste) und im echten Browser gegen eine isolierte Demo. - **Die Entfernung eines Orts mit Zusatz war falsch** (#1158 Punkt 8, siehe oben) — und blieb es im Bestand: die Korrektur des Dienstes heilt nur neue Rechnungen, deshalb die Heilung nach dem Suchlauf. - **Kennungen mit Vorsilbe (`APP-…`, `JOB-…`, `SKL-…`) verstand nur ein Teil der Werkzeuge** (#1148 Punkt 9). PBP gibt sie aus (`profil_zusammenfassung`, `hash_typed`), aber `meetings_anzeigen` und `emails_anzeigen` antworteten „Bewerbung nicht gefunden“, `todos_anzeigen` und `skill_zeitraeume_anzeigen` leer, `fit_analyse(JOB-…)` wies ab. Statt 250 Werkzeuge einzeln anzufassen, entfernt die Middleware in `server.py` die Vorsilbe an einer Stelle, bevor ein Werkzeug die Argumente sieht. Eine Kennung der falschen Art (`DOC-…` für `bewerbung_id`) wird mit einer deutschen Meldung abgewiesen, die sagt, was erwartet wurde. Ein Test hält jeden Parameter mit Kennungs-Namen gegen die Tabelle (neue Parameter lösen den Test aus, bis entschieden ist, ob es eine typisierte Form gibt). - **Der Download eines KI-Modells hing in der Oberfläche und brach nach zehn Minuten ab** (#1154 Punkt 1). Ein einziger Aufruf wartete auf das Ende (`stream: false`, Zeitgrenze 600 s); die Oberfläche zeigte nur „Lädt…“ und meldete „Download fehlgeschlagen“, obwohl Ollama weiterlud. - **Ein bloßes Enter beendete Claude Desktop gewaltsam** (#1149 Punkt 10). `start_dashboard.py` fragte „Claude jetzt neu starten? [J/n]“ mit Vorgabe Ja und beendete Claude mit `taskkill /F`; die Prüfung auf den Prozessnamen unterschied Groß- und Kleinschreibung (wo `tasklist` den Namen anders schrieb, kam die Frage nie); neu gestartet wurde nur aus zwei festen Pfaden, sonst schweigend gar nicht. Jetzt: Vorgabe Nein, die Frage sagt, was verloren geht, derselbe Suchpfad wie der Installer plus Store-Fassung, und gelingt der Start nicht, steht es im Fenster. - **Ein ausgefallenes JobSpy-Board meldete „ok mit 0 Treffern“** (#1159). Ab 1.2.0 wirft JobSpy bei einem ausgefallenen Board keine Ausnahme mehr, sondern schreibt ins Protokoll. PBP liest die Fehlermeldungen der vier JobSpy-Protokolle während der Abfrage mit; sind alle Abfragen gescheitert und kam keine Stelle, endet die Quelle mit einem Fehler (und geht in den automatischen Rückzug), statt grün zu bleiben. - **JobSpy-Gehälter wurden ohne Zeitraum und Währung übernommen** (#1159). Mit 1.2.0 liefert Indeed Deutschland Beträge. PBP rechnet jetzt nach dem Zeitraum auf ein Jahr um (stündlich ×2080, täglich ×260, wöchentlich ×52, monatlich ×12) und nur in Euro; ein unbekannter Zeitraum oder eine fremde Währung ergibt „kein Gehalt“ statt einer falschen Zahl. - **Zwei Versionen des Stilarchivs, die innerhalb von 15,6 ms gespeichert wurden, kamen in zufälliger Reihenfolge zurück.** Die Windows-Uhr unter Python 3.12 (die der Installer einrichtet) tickt nur so oft; unter Python 3.13 fiel das nie auf. Gefunden, weil ein Lauf der Suite in einer frischen Python-3.12-Umgebung genau einen Test rot meldete. Jetzt entscheidet bei gleichem Zeitstempel die Anlage-Reihenfolge. - **Ein Windows-Benutzername mit einem Zeichen außerhalb der Zeichentabelle ließ drei Installer-Schritte abstürzen** (#1163). Der Installer ruft seine Hilfsprogramme mit umgeleiteter Ausgabe auf (`>> %LOGFILE%`), und dort gilt die Zeichentabelle des Rechners (auf deutschem Windows cp1252). Ein `print` des Pfades mit ł, ş, ř … wirft dann `UnicodeEncodeError`: `_setup_claude.py` schrieb die Claude-Konfiguration nicht, `_sicherung_vor_update.py` brach schon bei der Erfolgsmeldung ab (Installer: „Sicherung NICHT gelungen“), `_selftest.py` und `start_dashboard.py` konnten es ebenso. Alle vier stellen ihre Ausgabe jetzt auf `backslashreplace`; ein Zeichen außerhalb der Tabelle erscheint als `\u0141`, statt das Programm zu beenden. Auf Rechnern mit einfachem Namen fiel das nie auf. ### Known Issues - **Eine ausdrücklich gesetzte Voreinstellung der Stellenliste fehlt noch** (#1158 Punkt 5): beim Öffnen gilt der zuletzt eingestellte Zustand, nicht ein Standard, den du in den Such-Optionen festlegst. - **Google Jobs liefert mit JobSpy 1.2 nichts mehr** („Google returned no job data“; Google braucht jetzt JavaScript). Die Quelle `jobspy_google` meldet das als Fehler und geht in den automatischen Rückzug; ob sie in der Auswahl als „derzeit ohne Wirkung“ gekennzeichnet oder herausgenommen wird, ist offen (#1159). - Die Parameternamen der Werkzeuge wechseln weiter (`company`/`firma`, `document_id`/`dokument_id`, `stellen_hash`/`job_hash`) — Rest von #1148 Punkt 9. Offen aus #1148 sind außerdem: die Zählerstände in Wiki und Dokumenten (4), der Rest der „lesenden“ Werkzeuge, die beim Lesen schreiben (5), die Größe der Antworten (12) und die veralteten Weiterleitungen (13). - Aus #1149 sind offen: Ordnernamen mit `!` oder `'` (Punkt 8), der Deinstaller (9), veraltete Zahlen und Texte (12). Die Mac-Punkte (5 und 6) sind nur mit Attrappen nachgestellt, nicht auf einem echten Mac. - Die Zuordnung der KI-Schalter sperrt nur elf Werkzeuge; lesende Werkzeuge wie `dokument_lesen` oder `emails_anzeigen` liefern bei ausgeschaltetem Schalter weiter (#1147 Punkt 3; Entscheidung der Projektleitung). - Die Aufräum-Runde („Auto-Engine“) hat weiter keinen automatischen Auslöser (#1139; wartet auf die Entscheidung, ob täglich oder per Knopf). ### Gemessen 270 neue Tests, drei veraltete ersetzt (6.982 gesamt, gezählt im sauberen Klon ohne Entwicklungsumgebung; v1.7.149 hatte 6.714): 62 für die Kennungen mit Vorsilbe (#1148 Punkt 9), 42 für den Claude-Neustart (#1149 Punkt 10), 32 für den Modell-Download (#1154 Punkt 1) plus eine Node-Datei, 43 für JobSpy 1.2 (#1159), 83 für den Stellen-Tab, den Ort und die Heilung gespeicherter Entfernungen (#1158; dazu eine Node-Datei, jetzt in der CI), 4 für die Reihenfolge im Stilarchiv und 4 für die Installer-Helfer bei Benutzernamen mit fremden Zeichen (#1163). Die drei ersetzten Tests prüften den alten Download, der in einem einzigen Aufruf wartete. Fünf ältere Tests, die den fehlerhaften Zustand festhielten (Mindestpunkte „0“ als Vorgabe, Rahmenfilter als Vorgabe), wurden bewusst angepasst. Gegenprobe (jeder Eingriff einzeln, jeder macht mindestens einen Test rot): 15 für die Kennungen, 27 für den Claude-Neustart, 18 plus 12 (Node) für den Modell-Download, 23 für JobSpy, 69 für den Stellen-Tab (50 plus 19), dazu die vier Tests für #1163 (ohne die Änderung rot, mit erzwungener Zeichentabelle geprüft). Die Gegenprobe fand drei Lücken, die danach geschlossen wurden: ein Eingriff beim Lesen des gemerkten Filterzustands blieb grün (der Test prüfte nur, dass die Zeichen im Quelltext stehen), der Stand des Modell-Downloads wurde nach dem Aufruf des Endpunkts nicht aufgefrischt, und bei JobSpy zählte der Sammler eine Warnung bei leerer Antwort mit. Im echten Browser gegen eine isolierte Demo (Chromium, ohne Fenster): 18 Prüfungen für den Stellen-Tab — Start ohne Einschränkung mit den Ständen 100, 0, -21 und -100, „-50“ und „0“ ins Feld getippt, „Filter zurücksetzen“, Neuladen mit gemerktem Wert, keine Fehler im Browser — und 8 Prüfungen für den Modell-Download gegen ein vorgetäuschtes Ollama (Fortschritt von 0 über 19, 50 und 69 bis 99 Prozent, danach „ist installiert“ und das Modell ist gewählt, keine Fehler im Browser; das echte Ollama des Rechners blieb gesperrt). Die volle Suite lief zusätzlich in einer frischen Python-3.12-Umgebung mit JobSpy 1.2.0 (die Fassung, die der Installer einrichtet); dabei fiel die Reihenfolge im Stilarchiv auf (siehe Fixed). ## 📦 Wie installiere oder aktualisiere ich PBP? **Unter Windows** brauchst du kein Git, kein Python, kein Vorwissen — nur einen ZIP-Download und einen Doppelklick. **Unter macOS** muss vorher einmalig Python 3.11+ installiert sein (siehe unten), **unter Linux** Git und Python. Voraussetzung ueberall: [Claude Desktop](https://claude.ai/download) ist installiert (Linux: alternativ Claude Code CLI). ### Windows (empfohlen, bequemster Weg) 1. **ZIP herunterladen:** [PBP-1.7.150.zip](https://github.com/MadGapun/PBP/archive/refs/tags/v1.7.150.zip) 2. **Entpacken:** Rechtsklick auf die ZIP → *„Alle extrahieren..."* → Zielordner waehlen (z.B. `C:\PBP`). Darin liegt ein Unterordner `PBP-...` — dort hinein wechseln. 3. **Installieren:** Doppelklick auf **`INSTALLIEREN.bat`** 4. Das Setup laedt Python, alle Pakete und Chromium herunter (~3–5 Minuten) und konfiguriert Claude Desktop. 5. Auf dem Desktop liegt jetzt eine Verknuepfung **„PBP Bewerbungs-Portal"** — Doppelklick startet das Dashboard. 6. **Claude Desktop oeffnen** (lief es schon: komplett beenden — Rechtsklick aufs Claude-Symbol unten rechts in der Taskleiste → *Beenden* — und neu starten) und tippen: **„Starte die Ersterfassung"** 7. Taucht PBP nicht auf: Claude Desktop nochmal komplett beenden und neu starten — siehe [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ). ### macOS 1. **Einmalig vorab: Python 3.11+** — am einfachsten der [Installer von python.org](https://www.python.org/downloads/) (Doppelklick), alternativ `brew install python@3.12` 2. **ZIP herunterladen** (siehe Windows-Link) und **entpacken** (Doppelklick; im ZIP liegt ein Unterordner `PBP-...`) 3. **Doppelklick auf `INSTALLIEREN.command`** 4. Falls macOS warnt („kann nicht geoeffnet werden"): Rechtsklick auf die Datei → *„Oeffnen"* → nochmal *„Oeffnen"* ### Linux ```bash git clone --branch v1.7.150 --depth 1 https://github.com/MadGapun/PBP.git cd PBP bash installer/install.sh ``` ### Update von einer aelteren Version **Einfach drüberinstallieren** — deine Daten bleiben erhalten: - Windows: `%LOCALAPPDATA%\BewerbungsAssistent\data\pbp.db` - macOS/Linux: `~/.bewerbungs-assistent/pbp.db` Schema-Upgrade läuft automatisch beim ersten Start, ein Backup wird vorher erstellt (Ordner `data\backups\`). ### Detaillierte Anleitung & Troubleshooting 📖 [Wiki → Installation](https://github.com/MadGapun/PBP/wiki/Installation) · [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ) --- ## [1.7.149] - 2026-10-02 — Ein Startfehler hinterlässt eine Spur, das Update sichert wirklich, ein fremdes Programm auf dem Port wird erkannt, die Stellenliste bleibt schnell Hotfix für v1.7.148. Acht Dinge an Installer und Start, bei denen PBP etwas anderes meldete, als geschah (#1149): eine „Sicherung“, die unvollständig war, ein „läuft bereits“, das ein fremdes Programm meinte, ein grüner Abschluss ohne Claude Desktop, ein Startfehler ohne eine Zeile im Protokoll. Dazu die Stellenliste, die mit jeder aussortierten Stelle etwas langsamer wurde (#1154). Kein Schema-Eingriff. **Wichtig zu wissen:** - **Das Update sichert jetzt wirklich.** Vor dem Überinstallieren schreibt der Installer eine Sicherung mit der Sicherungsfunktion von SQLite (sie liest einen stimmigen Stand, auch wenn Claude oder PBP noch laufen), mit Datum und Uhrzeit im Namen (`pbp-backup-_-vor_update.db` im Ordner `backups`). Die letzten fünf bleiben liegen. Gelingt die Sicherung nicht, steht eine Warnung im Fenster, statt „OK“. - **Ohne Claude Desktop endet die Installation nicht mehr grün.** Der Hinweis „PBP braucht Claude Desktop“ widersprach der README: das Dashboard im Browser geht immer. Jetzt erklärt der Installer, was ohne Claude fehlt (der Chat: Ersterfassung, Anschreiben, Analysen), sucht nach dem Download-Hinweis noch einmal und endet gelb, wenn Claude fehlt — mit dem Satz, dass PBP trotzdem läuft. - **Unter macOS wird Python 3.13 erkannt.** Der Doppelklick-Installer las aus „Python 3.13.5“ die Nebenversion 5 und meldete „Python 3.11 oder neuer wird benötigt“, obwohl 3.13 installiert war; der Installer für das Terminal scheiterte mit dem `grep` von macOS an jeder Fassung. Wer deshalb nicht installieren konnte, kann es jetzt. - **Ein fremdes Programm auf Port 8200 gilt nicht mehr als „PBP läuft bereits“.** PBP erkennt sein eigenes Dashboard an der Antwort auf `/api/health`. Alles andere auf dem Port heißt jetzt „Port wird von einem anderen Programm benutzt“, mit dem nächsten Schritt. ### Fixed - **Scheitert der Start an der Datenbank, steht der Grund im Protokoll** (#1149 Punkt 1). Auf dem Weg über Claude Desktop (`python -m bewerbungs_assistent`) endete ein Fehler beim Öffnen der Datenbank mit einem Traceback nur auf stderr; `pbp.log` blieb leer, der Dashboard-Port wurde nie gebunden, und der Installer verweist für Fehler auf genau diese Datei (nachgestellt mit gesperrtem Sicherungsordner). Jetzt steht eine Meldung in Klartext im Protokoll und auf stderr: Grund, Datenordner, häufige Ursachen (kein Schreibrecht oder Platz, gesperrte oder beschädigte Datei) und der Hinweis auf den Ordner `backups`. Der Start scheitert weiter, aber nicht mehr stumm. - **Die „Sicherung vor dem Update“ des Installers ist eine echte Sicherung** (#1149 Punkt 2). `INSTALLIEREN.bat` kopierte `pbp.db` mit `copy` und ließ `pbp.db-wal` liegen, wo bei laufendem Programm die jüngsten Schreibvorgänge stehen (gemessen: bei offener Verbindung und 50 Schreibvorgängen hatte die Kopie 4 KB und „no such table“, die SQLite-Sicherung alle 50 Zeilen). Die Erfolgsmeldung stand unbedingt da, und der feste Dateiname wurde bei jedem Update überschrieben — nach dem zweiten Update war der Stand vor dem ersten weg. Neu: `_sicherung_vor_update.py` (nur Standardbibliothek; der Installer ruft es mit dem mitgelieferten Python auf), Name mit Zeitstempel, Leseprobe der fertigen Sicherung, ehrliche Meldung. Die Datei gehört zum Paket; fehlt sie, nennt der Installer sie in der Fehlermeldung zu fehlenden Hilfsdateien. - **Ohne Claude Desktop meldet der Installer nicht mehr „gefunden“ und „fertig“** (#1149 Punkt 3). `_setup_claude.py` legt die Konfiguration auch ohne Claude an und endet mit Erfolg; der Installer schrieb deshalb immer „Claude Desktop gefunden“ und setzte den Abschluss auf Grün, der gelbe Zweig war nie erreichbar. Jetzt zählt nur ein echter Fund, und der Abschluss nennt den echten Grund („Claude Desktop wurde nicht gefunden — PBP läuft trotzdem“ statt „konnte nicht eingerichtet werden“). - **Ein belegter Port 8200 wird richtig benannt** (#1149 Punkt 4). Hielt ein fremdes Programm den Port, schrieb `start_dashboard.py` „PBP laeuft bereits … Das Dashboard ist schon erreichbar!“ und öffnete den Browser; der Claude-Prozess schrieb nur eine Zeile ins Protokoll und `pbp_diagnose` behauptete, ein anderes PBP-Fenster halte den Port; der Gesundheitstest des Installers prüfte allein auf „Antwort 200“. Jetzt: `start_dashboard.py` sagt, dass ein anderes Programm den Port hält, was zu tun ist (Programm beenden oder Rechner neu starten und PBP zuerst öffnen) und wie man es findet (`netstat -ano | findstr :8200`), und endet mit Fehler statt zu behaupten, alles laufe; `pbp_diagnose` nennt das fremde Programm (und der Claude-Prozess prüft weiter alle fünf Minuten, ob der Port frei wird); der Gesundheitstest des Installers fragt `/api/health` und verlangt `pbp_version` in der Antwort. - **Der Gesundheitstest am Ende der Installation kann bei laufendem Dashboard scheitern** (#1149 Punkt 4, beim Nachstellen gefunden). Er fragte `localhost`; das Dashboard lauscht nur auf IPv4, und Windows PowerShell versucht für `localhost` zuerst `::1` — gemessen mehr als die eine Sekunde Zeitgrenze. Wo das so ist, gab es dreißig Fehlversuche und einen gelben Abschluss, obwohl alles lief. Jetzt wird `127.0.0.1` gefragt. - **Die Versionsprüfung des Windows-Installers funktioniert wieder** (#1149 Punkt 7). Sie las `data\src`, installiert wird aber nach `app\src` (seit v1.5.0): die installierte Version blieb leer, „Update erkannt“ und „bereits installiert“ erschienen nie. Die Frage „Trotzdem neu installieren? (j/n)“ kannte nur „j“, nicht „ja“ oder „y“; jetzt zählt der erste Buchstabe. - **Die Mindestversion eines Hinweises wird als Zahl verglichen** (#1149 Punkt 11). Der Filter für `hints.json` verglich `min_version` als Text; `"1.7.9" <= "1.7.149"` ist als Text falsch, ein Hinweis ab 1.7.9 wäre ab 1.7.10 verschwunden. Heute folgenlos, weil alle Hinweise `1.7.0` tragen — aber die nächste Hinweiszeile mit einer anderen Grenze hätte es getroffen. - **Ein fehlgeschlagener Frontend-Bau beendet den Installer unter macOS und Linux nicht mehr** (#1149 Punkt 6). `INSTALLIEREN.command` und `installer/install.sh` laufen mit `set -e`; ein `pnpm`, das mit Fehler endete (kein Netz, alte Node-Version), beendete den Installer ohne ein Wort — Datenordner und Claude-Eintrag kamen nie. Das fertig gebaute Dashboard liegt dem Paket bei, der Bau ist eine Zugabe. Jetzt meldet der Installer den Fehlschlag in Gelb („kein Problem: das fertig gebaute Dashboard liegt bei“) und macht weiter. Nachgestellt mit einem falschen `pnpm`; auf echter Hardware noch nicht gelaufen. - **Unter macOS und Linux wird Python erkannt** (#1149 Punkt 5). `installer/install.sh` las die Version mit `grep -oP`; das grep von macOS (BSD) kennt `-P` nicht, und weil die Pipe mit `cut` endete, lief der Rückfall nach `||` nie — „Python 3.11+ nicht gefunden!“ trotz installiertem 3.12 oder 3.13. In `INSTALLIEREN.command` (dem Doppelklick-Installer für macOS) lag beim Nachstellen ein zweiter Fehler: der Ausdruck nahm das LETZTE „3.“ im Text, aus „Python 3.13.5“ wurde die Nebenversion 5, und jede Fassung 3.13.x galt als zu alt, obwohl 3.13 neuer ist als die verlangte 3.11. Beide lesen die Nebenversion jetzt am Anfang der Zeile (nur noch `sed`, das auf beiden Systemen gleich liest). Dazu verweist `Dashboard starten.command` Mac-Nutzer auf den Doppelklick-Installer statt auf einen Terminal-Befehl. Nachgestellt mit einem BSD-grep, das `-P` ablehnt, und falschen Interpretern; auf echter Hardware noch nicht gelaufen. - **Die Stellenliste bleibt mit vielen aussortierten Stellen schnell** (#1154 Punkt 2). `stellen_anzeigen` prüft jede Stelle gegen alle Aussortierten (Wiedergänger-Regel). Gemessen mit 1.200 aktiven Stellen und 2.000 Aussortierten zu je 8 KB Text: **2,88 Sekunden vorher, 0,35 Sekunden jetzt** (ohne Aussortierte 0,32). Die Vermutung im Issue — das Lesen der Anzeigentexte — war falsch: der Profiler zeigte 0,1 Sekunden dafür. Die Zeit ging in `normalize_company`: für jede Stelle der Liste wurde die Firma jeder aussortierten Stelle neu normalisiert, 2,4 Millionen Aufrufe. Jetzt merkt sich jede Zeile ihre normalisierte Firma, ein Index nach Firma ersetzt den Durchlauf über alle, und die Aussortierten werden ohne die langen Texte gelesen (nur deren Länge, die der Vergleich braucht). Das Ergebnis ist dasselbe; ein Test hält Reihenfolge und Treffer gegen das alte Verfahren. ### Known Issues - Aus #1149 sind offen: Ordnernamen mit `!` oder `'` (Punkt 8), der Deinstaller (9), die Rückfrage in `start_dashboard.py` (10) und veraltete Zahlen und Texte (12). Die Mac-Punkte (5 und 6) sind nur mit Attrappen nachgestellt, nicht auf einem echten Mac gelaufen; beim Update unter macOS und Linux wird außerdem ein laufender alter Dashboard-Prozess weiter nicht beendet (Rest von Punkt 6). Die zweite Befürchtung aus Punkt 5 (`python-jobspy` verlangte eine numpy-Fassung, die Python 3.13 nicht kennt) hat sich mit `python-jobspy` 1.2.0 erledigt, das heute erschienen ist: die Festlegung ist dort entfernt. - Der Download eines KI-Modells hat weiter keine Fortschrittsanzeige und bricht in der Oberfläche nach zehn Minuten ab, obwohl Ollama weiterlädt (#1154 Punkt 1). - Die Zuordnung der KI-Schalter sperrt nur elf Werkzeuge; lesende Werkzeuge wie `dokument_lesen` oder `emails_anzeigen` liefern bei ausgeschaltetem Schalter weiter (#1147 Punkt 3). Ob der Text ehrlicher werden oder die Zuordnung wachsen soll, ist eine Entscheidung der Projektleitung. - Die Aufräum-Runde („Auto-Engine“) hat weiter keinen automatischen Auslöser (#1139; wartet auf die Entscheidung, ob täglich oder per Knopf). ### Gemessen 169 neue Tests (6.714 gesamt, gezählt im sauberen Klon ohne Entwicklungsumgebung): 5 für den Startfehler (#1149 Punkt 1), 21 für die Sicherung vor dem Update (Punkt 2), 36 für die Claude-Erkennung, die Versionsprüfung und die Hinweise (Punkte 3, 7, 11; der Installer wird dabei aus der Datei gelesen und in `cmd.exe` ausgeführt, nicht nachgebaut), 19 für den fremden Port (Punkt 4), 12 für den Unix-Installer (Punkt 6, mit falschem `pnpm`), 57 für die Python-Erkennung (Punkt 5, mit einem BSD-grep als Attrappe), 17 für die Stellenliste (#1154, mit einem Messtest: 1.200 Stellen und 2.000 Aussortierte unter einer Sekunde) und 2 mehr beim Übernehmen des Ports (#1155, jetzt auch nach einem fremden Programm). Jeder Test wurde in der Gegenprobe geprüft: das Verfahren wird entfernt, der Test muss rot werden (Ergebnis: alle rot; vier Lücken in den ersten Testfassungen und ein toter Programmzweig wurden dabei gefunden und beseitigt). Volle Suite: alle grün. ## 📦 Wie installiere oder aktualisiere ich PBP? **Unter Windows** brauchst du kein Git, kein Python, kein Vorwissen — nur einen ZIP-Download und einen Doppelklick. **Unter macOS** muss vorher einmalig Python 3.11+ installiert sein (siehe unten), **unter Linux** Git und Python. Voraussetzung ueberall: [Claude Desktop](https://claude.ai/download) ist installiert (Linux: alternativ Claude Code CLI). ### Windows (empfohlen, bequemster Weg) 1. **ZIP herunterladen:** [PBP-1.7.149.zip](https://github.com/MadGapun/PBP/archive/refs/tags/v1.7.149.zip) 2. **Entpacken:** Rechtsklick auf die ZIP → *„Alle extrahieren..."* → Zielordner waehlen (z.B. `C:\PBP`). Darin liegt ein Unterordner `PBP-...` — dort hinein wechseln. 3. **Installieren:** Doppelklick auf **`INSTALLIEREN.bat`** 4. Das Setup laedt Python, alle Pakete und Chromium herunter (~3–5 Minuten) und konfiguriert Claude Desktop. 5. Auf dem Desktop liegt jetzt eine Verknuepfung **„PBP Bewerbungs-Portal"** — Doppelklick startet das Dashboard. 6. **Claude Desktop oeffnen** (lief es schon: komplett beenden — Rechtsklick aufs Claude-Symbol unten rechts in der Taskleiste → *Beenden* — und neu starten) und tippen: **„Starte die Ersterfassung"** 7. Taucht PBP nicht auf: Claude Desktop nochmal komplett beenden und neu starten — siehe [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ). ### macOS 1. **Einmalig vorab: Python 3.11+** — am einfachsten der [Installer von python.org](https://www.python.org/downloads/) (Doppelklick), alternativ `brew install python@3.12` 2. **ZIP herunterladen** (siehe Windows-Link) und **entpacken** (Doppelklick; im ZIP liegt ein Unterordner `PBP-...`) 3. **Doppelklick auf `INSTALLIEREN.command`** 4. Falls macOS warnt („kann nicht geoeffnet werden"): Rechtsklick auf die Datei → *„Oeffnen"* → nochmal *„Oeffnen"* ### Linux ```bash git clone --branch v1.7.149 --depth 1 https://github.com/MadGapun/PBP.git cd PBP bash installer/install.sh ``` ### Update von einer aelteren Version **Einfach drüberinstallieren** — deine Daten bleiben erhalten: - Windows: `%LOCALAPPDATA%\BewerbungsAssistent\data\pbp.db` - macOS/Linux: `~/.bewerbungs-assistent/pbp.db` Schema-Upgrade läuft automatisch beim ersten Start, ein Backup wird vorher erstellt (Ordner `data\backups\`). ### Detaillierte Anleitung & Troubleshooting 📖 [Wiki → Installation](https://github.com/MadGapun/PBP/wiki/Installation) · [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ) --- ## [1.7.148] - 2026-10-02 — Ohne Netz geht nichts kaputt, nur belegte Gehälter zählen, nichts wird doppelt angelegt Hotfix für v1.7.147. Sechzehn Dinge, bei denen PBP etwas anderes meldete oder tat, als man erwartete: Ohne Netz hieß die Jobsuche „alles ok“ und pausierte danach die Quellen; die Marktanalyse rechnete erfundene Schätzgehälter mit; wer einen Aufruf wiederholte, hatte alles doppelt; die Seitenleiste zeigte „verbunden“, obwohl PBP gar nicht mehr lief. Dazu stimmt die Dokumentation im Repo wieder mit dem Programm überein, und der Schutz vor Namen in öffentlichen Texten kennt mehr Schreibweisen. Kein Schema-Eingriff. **Wichtig zu wissen:** - **Die Marktanalyse nennt jetzt kleinere Zahlen.** Geschätzte Gehälter (eine feste Standardspanne, die der Suchlauf einträgt, wenn eine Anzeige keine Angabe hat) zählen nicht mehr mit. Wer bisher „Anzahl 20“ sah, sieht vielleicht „Anzahl 2“ — und den Hinweis, dass zwei Angaben keine Marktzahl sind. - **Doppeltes wird nicht mehr angelegt.** Eine Position, Ausbildung, ein Projekt, eine offene Aufgabe oder ein Kontakt mit denselben Angaben antwortet jetzt „bereits vorhanden“ und nennt die vorhandene Kennung, statt einen zweiten Eintrag zu machen. Das gilt auch für die Sammelform (`hinzufuegen_bulk`) von `profil_bearbeiten`. - **Das LinkedIn-Suchprofil startet leer.** Wer es nie angefasst hat, behielt bisher die Suchbegriffe des Entwicklers (Produktdatenmanagement, Maschinenbau). Beim Start setzt PBP eine unveränderte Zeile dieser Art auf einen neutralen Anfang zurück; eine Zeile, die du gespeichert hast, bleibt, wie sie ist. ### Fixed - **Ohne Netz meldet die Jobsuche nicht mehr „alle Quellen ok“** (#1141). Ohne Netz lieferte jede Quelle „ok, null Treffer“, und nach fünf solchen Läufen waren alle Quellen pausiert — ein kurzer WLAN-Ausfall kostete die Quellenauswahl. Jetzt fragt PBP vor dem Start mehrere Server an (jede HTTP-Antwort zählt als erreichbar, ein Ergebnis gilt 20 Sekunden) und antwortet im Fehlerfall „kein Netz“ — bei Claude, im Dashboard (Statuscode 503) und in der Automatik (die es beim nächsten Takt wieder versucht). Kommt während eines Laufs nichts zurück und das Netz ist weg, endet der Lauf als Fehler „kein Netz“, und keine Quelle wird als gescheitert gebucht. Eine pausierte Quelle bekommt nicht mehr bei jedem Lauf einen Fehler gebucht; ihre Statuszeile sagt „pausiert (wird später erneut geprüft)“ statt „deprecated“. - **„Claude Desktop: verbunden“ bleibt nicht mehr grün, wenn PBP beendet wurde** (#1144). Die Seitenleiste fragte alle 30 Sekunden nach dem Stand und tat bei „keine Antwort“ nichts; „nicht erreichbar“ kam erst beim Neuladen. Jetzt zählt die Seite aufeinanderfolgende Fehlschläge: nach dem ersten fragt sie bald noch einmal (ein Ruhezustand ist kein Ausfall), nach dem zweiten steht dort „PBP antwortet nicht“, die Zeile für die lokale KI sagt „Stand unbekannt“, und ein Klick erklärt, was zu tun ist. Antwortet PBP wieder, nimmt die Anzeige es sofort zurück und lädt die Seite nach. - **Die „Neu“-Marker im Block „Offen“ verschwinden nicht mehr beim Neuladen** (#1144). Der Zeitpunkt „seit deinem letzten Besuch“ rückte schon beim ersten Lesen vor: letzter Besuch vor 15 Stunden, Aufgabe vor 10 Stunden angelegt — der erste Aufruf zeigte die Marke, ein Neuladen eine Minute später nicht mehr. Jetzt sind Besuchszeit (jeder Zugriff) und Basis (Beginn des Besuchs) getrennt, und die Rückschau auf dem Dashboard misst gegen dieselbe Basis. Ein neuer Besuch beginnt nach einer Pause von mehr als vier Stunden. - **Ein Netzfehler gilt nicht mehr eine Stunde als „keine Hinweise“** (#1144). Die Hinweise von GitHub und die Kontakt-Kategorien merkten sich auch einen Fehlschlag als „leer“ (die Hinweise eine Stunde, die Kategorien die ganze Sitzung — jede Rolle erschien als nackter Schlüsselname). Jetzt wird nur ein Erfolg gemerkt. - **Eine offene Transaktion bleibt nicht liegen** (#1144). Das Sicherheitsnetz gegen halbfertige Schreibvorgänge lief im falschen Thread und erreichte die Verbindung des Werkzeugs nicht: ein anderer Schreiber scheiterte mit „database is locked“, und der nächste Commit desselben Arbeiters schrieb die halbe Arbeit eines ganz anderen Aufrufs fest. Jetzt räumt jedes Werkzeug im eigenen Thread auf — nur, was es selbst offen ließ. - **Die Marktanalyse zählt nur belegte Gehälter** (#1147). `gehalt_marktanalyse` und `firmen_recherche` mischten die Schätzwerte des Suchlaufs unter echte Angaben (gemessen: zwei echte Angaben und 18 geschätzte ergaben „Anzahl 20, Median 50.000“). Jetzt zählen nur belegte Angaben; die Antwort nennt, wie viele Schätzwerte nicht mitgezählt wurden, und sagt bei weniger als drei belegten Angaben „keine Marktzahl“. Eine Firma nur mit Schätzwerten hat keine Gehaltsspanne. - **Das LinkedIn-Suchprofil startet ohne fremde Suchbegriffe** (#1147). Es wurde beim ersten Lesen für jeden mit den Begriffen des Entwicklers angelegt (gemessen: eine Pflegekraft bekam „PLM“ und den Branchenfilter Maschinenbau). Jetzt beginnt es leer, mit den allgemeinen Erfahrungen zu LinkedIn als Notiz; `linkedin_lauf_plan` meldet ohne eigene Begriffe „keine Suchbegriffe“. `suchprofil_lesen` legt nichts mehr an. - **Dashboard und Planer werden übernommen, sobald der Port frei wird** (#1155). War Port 8200 beim Start belegt (das eigenständige Dashboard über die Desktop-Verknüpfung), blieb der Claude-Prozess bis zum Neustart ohne Dashboard, tägliche Sicherung und geplante Suche. Jetzt sieht er alle fünf Minuten nach und übernimmt beides, sobald der andere Prozess weg ist. `pbp_diagnose` nennt, wer das Dashboard hält. - **Die Zeitüberschreitung kommt auf Deutsch, und eine Wiederholung startet die Rechnung nicht noch einmal** (#1148). Nach 60 Sekunden antwortete PBP mit „Output validation error: outputSchema defined but no structured output returned“; der Arbeits-Thread rechnete weiter, und ein Wiederholen startete eine zweite Rechnung. Jetzt steht die deutsche Meldung da (mit dem Hinweis, dass die Rechnung noch laufen kann), und derselbe Aufruf wird nicht doppelt gestartet, solange die erste Rechnung läuft. - **Skills lassen sich ändern, und „bereits vorhanden“ wird ehrlich gesagt** (#1148). Die Profilzusammenfassung nannte die Skill-IDs nicht, obwohl der Wegweiser sie versprach; jetzt stehen sie in eckigen Klammern dabei. Ein erneutes Hinzufügen eines vorhandenen Skills (Python Level 9, neu mit Level 1) antwortete „gespeichert“ und änderte nichts; jetzt kommt „bereits vorhanden“ mit den vorhandenen Werten und dem Weg zum Ändern. - **Wiederholte Anlage verdoppelt nichts mehr** (#1148). `position_hinzufuegen`, `ausbildung_hinzufuegen`, `projekt_hinzufuegen`, `todo_anlegen`, `kontakt_anlegen` und `kosten_erfassen` legten bei jedem Aufruf neu an. Jetzt antworten sie „bereits vorhanden“, wenn es dieselbe Sache schon gibt (Position: Firma, Titel, Beginn; Aufgabe: nur offene; Kontakt: zwei Menschen gleichen Namens bei verschiedenen Firmen oder mit verschiedener E-Mail bleiben zwei; Kosten: dieselbe Zahlung innerhalb von zehn Minuten). `kosten_erfassen` mit erfundener Bewerbungs-ID legt keine verwaiste Zeile mehr an. - **Kleinere Auskünfte stimmen** (#1148). `stellen_anzeigen(pro_seite=0)` antwortete mit „integer division or modulo by zero“; Werte unter 1 geben jetzt eine brauchbare Seite, die Korrektur steht in der Antwort. `stellen_qualitaet_pruefen` zählte nicht erreichbare Adressen als „ok“ (ohne Netz: „geprüft 5, ok 1“); jetzt eigene Kategorie `url_nicht_erreichbar`. Ein Text verwies auf `dokument_hochladen()`, das es nicht gibt. `suchkriterien_setzen` mit leerer Liste änderte nichts und meldete „gespeichert“. `diagnose_befund_abweisen` meldete „abgewiesen“ für jede erfundene Kennung. `ollama_kontext` trug „nur lesend“, obwohl `aktion='setzen'` schreibt. - **Firmensuche: „und“ gleich „&“, und bei Misserfolg Namensvorschläge** (#1148). `firma_kontext` fand „Müller und Söhne“ nicht, wenn die Firma mit „&“ gespeichert war. Und wer „Personal“ tippte und „Personalservice …“ meinte, bekam „Kein dokumentierter Kontakt“. Jetzt nennt PBP bei erfolgloser Suche Namen, die so beginnen — als Kandidaten zum Nachfragen, nie als Treffer, die eine Aussage oder Warnung auslösen. - **Löschvorschauen nennen, was gelöscht wird** (#1148). `kontakt_loeschen` zeigte ohne Bestätigung nur eine Fehlermeldung; `meeting_loeschen` wiederholte nur die Kennung. Jetzt stehen Name, Firma beziehungsweise Titel, Datum, Bewerbung und die Folgen (Verknüpfungen) in der Vorschau. - **Die Dokumente im Repo stimmen mit dem Programm überein** (#1150). `SECURITY.md` sagte „Keine Cloud, kein Account, kein externer Server“ und „PBP selbst sendet keine Daten an externe Server“ und nannte nur „1.0.x“ als unterstützt; jetzt steht dort derselbe Satz wie in README und FAQ, samt aller Anfragen, die PBP selbst stellt. `CONTRIBUTING.md` schickte auf den Zweig `develop`, den es nicht gibt. Die Fehlervorlage verlangte Log-Auszüge ohne Datenschutz-Hinweis — jetzt steht dort, dass das Issue öffentlich ist und wie man Namen schwärzt. Die Linux-Anleitung klonte `main` und installierte damit die Beta; sie klont jetzt die stabile Version (`--branch v1.7.148`). - **Der Namens-Wächter kennt mehr Schreibweisen** (#1137). Der Hook vor `gh`-Aufrufen suchte einen festen Wortlaut und ließ unter anderem `gh -R issue create`, `gh issue close --comment`, `gh pr review/merge --body`, `gh gist create`, `gh api -F` und `--raw-field` durch; ein Text aus einer Variable oder Datei wurde gar nicht gelesen. Jetzt liest er die Kommandozeile strukturiert, setzt feste Variablen und `cd` selbst ein und blockiert einen Text, den er nicht prüfen kann. Der Wochen-Sweep sah nur 200 der 430 Veröffentlichungen; er liest jetzt alle und bricht an einer Abfragegrenze ab, statt „sauber“ zu melden. Automaten-Adressen wie `notify-noreply@…` gelten nicht mehr als Kontaktdaten. ### Known Issues - Die Zuordnung der KI-Schalter sperrt nur elf Werkzeuge; lesende Werkzeuge wie `dokument_lesen` oder `emails_anzeigen` liefern bei ausgeschaltetem Schalter weiter (#1147 Punkt 3). Ob der Text ehrlicher werden oder die Zuordnung wachsen soll, ist eine Entscheidung der Projektleitung. - Von den Sammelpunkten in #1148 sind offen: die Zählerstände in Wiki und Dokumenten (4; die Zählung in `pbp_capabilities` stimmt jetzt), die Werkzeuge, die beim Lesen etwas anlegen (5; behoben sind `ollama_kontext` und `suchprofil_lesen`, offen bleiben `kontakt_kategorien_auflisten` mit den Standardkategorien, `profil_status` und der Zwischenspeicher von `stellen_anzeigen`), die uneinheitlichen typisierten Kennungen (9), die Antwortgrößen (12) und die veralteten Weiterleitungen (13). - Die Aufräum-Runde („Auto-Engine“) hat weiter keinen automatischen Auslöser (#1139; wartet auf die Entscheidung, ob täglich oder per Knopf). - Der Download eines KI-Modells hat weiter keine Fortschrittsanzeige, und bei sehr vielen aussortierten Stellen mit langen Anzeigentexten bleibt `stellen_anzeigen` langsamer (#1154). ### Gemessen 262 neue Tests (6.548 gesamt): 18 für die Netzprüfung vor der Jobsuche (#1141), 31 für Besuchszeit, Zwischenspeicher, offene Transaktion und Verbindungsanzeige (#1144), 22 für Gehälter und das LinkedIn-Profil (#1147), 12 für das Übernehmen von Dashboard und Planer (#1155), 61 für die Sammelpunkte (#1148: Wiederholung, Skills, Seiten, doppelte Anlage, Firmensuche, Löschvorschauen, Werkzeugzahl), 15 für die Dokumente im Repo (#1150) und 103 für den Namens-Wächter (#1137). Dazu zwei Node-Dateien für die Verbindungsanzeige und den Zwischenspeicher; sie laufen jetzt auch in der CI. Zwei ältere Tests, die den alten Zustand festhielten (die Vorgabe des LinkedIn-Profils), sind angepasst. Gegenprobe: 125 Mechanismen einzeln ausgebaut (12 bei der Netzprüfung, 32 bei #1144, 20 bei #1147 und #1155, 43 bei den Sammelpunkten, 18 beim Wächter); jeder Ausbau macht mindestens einen Test rot. Drei Prüfungen wurden dafür erst strenger gemacht: das Mitführen des Verzeichnisses beim Wächter (`cd` war ungetestet), die Zuordnung der Datenbank beim Aufräumen im Arbeits-Thread, und die Unterscheidung „ganzes Wort“ gegen „Wortanfang“ bei den Namensvorschlägen. Die Fehler selbst wurden vorher nachgestellt: ohne Netz meldete jede Quelle „ok, null Treffer“, und nach fünf Läufen waren alle pausiert; mit einem Besuch vor 15 Stunden und einer Aufgabe von vor 10 Stunden zeigte der erste Aufruf die Marke „Neu“, ein Neuladen eine Minute später nicht mehr; zwei belegte und 18 geschätzte Gehälter ergaben „Anzahl 20, Median 50.000“; eine Pflegekraft bekam im LinkedIn-Profil „PLM“ und den Branchenfilter Maschinenbau; `pbp_capabilities` nannte „109 Tools“ bei 257 registrierten; `stellen_anzeigen(pro_seite=0)` antwortete mit „integer division or modulo by zero“; der Wochen-Sweep las 200 von 430 Veröffentlichungen und meldete „sauber“. ## 📦 Wie installiere oder aktualisiere ich PBP? **Unter Windows** brauchst du kein Git, kein Python, kein Vorwissen — nur einen ZIP-Download und einen Doppelklick. **Unter macOS** muss vorher einmalig Python 3.11+ installiert sein (siehe unten), **unter Linux** Git und Python. Voraussetzung ueberall: [Claude Desktop](https://claude.ai/download) ist installiert (Linux: alternativ Claude Code CLI). ### Windows (empfohlen, bequemster Weg) 1. **ZIP herunterladen:** [PBP-1.7.148.zip](https://github.com/MadGapun/PBP/archive/refs/tags/v1.7.148.zip) 2. **Entpacken:** Rechtsklick auf die ZIP → *„Alle extrahieren..."* → Zielordner waehlen (z.B. `C:\PBP`). Darin liegt ein Unterordner `PBP-...` — dort hinein wechseln. 3. **Installieren:** Doppelklick auf **`INSTALLIEREN.bat`** 4. Das Setup laedt Python, alle Pakete und Chromium herunter (~3–5 Minuten) und konfiguriert Claude Desktop. 5. Auf dem Desktop liegt jetzt eine Verknuepfung **„PBP Bewerbungs-Portal"** — Doppelklick startet das Dashboard. 6. **Claude Desktop oeffnen** (lief es schon: komplett beenden — Rechtsklick aufs Claude-Symbol unten rechts in der Taskleiste → *Beenden* — und neu starten) und tippen: **„Starte die Ersterfassung"** 7. Taucht PBP nicht auf: Claude Desktop nochmal komplett beenden und neu starten — siehe [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ). ### macOS 1. **Einmalig vorab: Python 3.11+** — am einfachsten der [Installer von python.org](https://www.python.org/downloads/) (Doppelklick), alternativ `brew install python@3.12` 2. **ZIP herunterladen** (siehe Windows-Link) und **entpacken** (Doppelklick; im ZIP liegt ein Unterordner `PBP-...`) 3. **Doppelklick auf `INSTALLIEREN.command`** 4. Falls macOS warnt („kann nicht geoeffnet werden"): Rechtsklick auf die Datei → *„Oeffnen"* → nochmal *„Oeffnen"* ### Linux ```bash git clone --branch v1.7.148 --depth 1 https://github.com/MadGapun/PBP.git cd PBP bash installer/install.sh ``` ### Update von einer aelteren Version **Einfach drüberinstallieren** — deine Daten bleiben erhalten: - Windows: `%LOCALAPPDATA%\BewerbungsAssistent\data\pbp.db` - macOS/Linux: `~/.bewerbungs-assistent/pbp.db` Schema-Upgrade läuft automatisch beim ersten Start, ein Backup wird vorher erstellt (Ordner `data\backups\`). ### Detaillierte Anleitung & Troubleshooting 📖 [Wiki → Installation](https://github.com/MadGapun/PBP/wiki/Installation) · [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ) --- ## [1.7.147] - 2026-10-02 — Keine falsche Auskunft, nichts Gelöschtes ohne Vorschau, schnell bei vielen Stellen Hotfix für v1.7.146. Drei Dinge, bei denen PBP etwas anderes sagte oder tat, als man erwartete: Eine Stelle ohne Anzeigentext galt als „nicht empfohlen“, ein falsch geschriebener Filter hieß „noch keine Bewerbungen“, und drei Werkzeuge löschten, ohne vorher zu zeigen, was alles verloren geht. Dazu wird die Stellenliste bei einem großen Bestand wieder schnell, und lange Arbeit hält das Dashboard nicht mehr an. Kein Schema-Eingriff. **Wichtig zu wissen:** Was bisher sofort gelöscht hat, fragt jetzt zuerst. Beim ersten Aufruf zeigt PBP nur, was alles mit verschwinden würde (mit Zahlen); erst beim zweiten Aufruf mit `bestaetigung=True` wird gelöscht. Das betrifft das Umwandeln einer Bewerbung in eine Anfrage, das Löschen von Stationen, Projekten, Ausbildungen, Kompetenzen und Notiz-Abschnitten im Profil und das Zurücksetzen aller Scoring-Regler. Claude fragt dich dann einmal mehr, bevor es etwas löscht. ### Fixed - **Eine Anzeige ohne Text gilt nicht mehr als „nicht empfohlen“** (#1146). `fit_analyse` urteilte „NICHT_EMPFOHLEN“, wenn die Stellenbeschreibung fehlte oder nur eine Kurznotiz war; bei einem Kurztext stand darunter sogar „ausdrücklich keine fachliche Absage“. Eine gute Stelle mit kurzem Anzeigentext wurde so abgeraten und vielleicht aussortiert. Jetzt lautet das Urteil „NICHT_BEURTEILBAR“ (noch nicht gelesen) mit dem Hinweis, den Anzeigen-Volltext nachzuladen (`datenlage_hinweis`). Das k.o. „kein einziges Pflichtbegriff belegt“ gilt nur noch auf einer Anzeige, die man auch lesen kann. Echte k.o.-Gründe (die Wiedergänger-Regel) und ein gespeichertes, wirklich gelesenes Urteil gelten unverändert. - **Ein Filter ohne Treffer sagt nicht mehr „noch keine“** (#1146). `bewerbungen_anzeigen(status_filter="Interview")` antwortete bei drei vorhandenen Bewerbungen: „Noch keine Bewerbungen erfasst. Erstelle eine neue“ (mit dem Risiko doppelter Einträge); „Zweitgespräch“, „eingeladen“ und „Absage“ ebenso. Jetzt gelten Groß- und Kleinschreibung, Umlaute („Zweitgespräch“) und Leerzeichen („in Vorbereitung“) als gleich. Ein Wort, das kein Status ist, wird mit der Liste der gültigen Status beantwortet; bei „Absage“, „eingeladen“, „Zusage“ nennt PBP den meist gemeinten Status als Vorschlag, wendet ihn aber nicht von selbst an. Ein gültiger Filter ohne Treffer sagt „Keine Bewerbung für diesen Filter. Du hast N insgesamt“ (bei einer Stellenart zusätzlich, welche es gibt). `stellen_anzeigen` sagt bei einem Filter ohne Treffer nicht mehr „Keine Stellen gefunden. Starte eine Jobsuche“, sondern „ohne Filter gibt es N aktive Stellen“ und nennt die Quellen im Bestand. Die Kurzbeschreibung von `bewerbung_status_aendern` schrieb „Interview“ und „Zweitgespraech“ groß; sie nennt jetzt die echten, kleingeschriebenen Wörter. - **Nichts wird mehr ohne Vorschau gelöscht** (#1145). Die Server-Anleitung verspricht „vor jedem Löschen die Vorschau“, aber drei Werkzeuge standen in keiner Liste der zweistufigen Werkzeuge, weil ihr Name nicht nach Löschen klingt. `bewerbung_zu_anfrage_konvertieren` löschte die Bewerbung samt Terminen, Reflexionen und Aufgaben; gesichert wurde nur ein Notiztext von höchstens 500 Zeichen, und ein Fehler beim Sichern wurde verschluckt, danach wurde trotzdem gelöscht. Jetzt zeigt der erste Aufruf, was verloren geht (Zahlen, und ob die Notiz gekürzt wird), und gelöscht wird nur, wenn die Stelle vorher sicher aussortiert ist. `profil_bearbeiten` löschte Station (mit ihren Projekten), Projekt, Ausbildung, Kompetenz und Notiz-Abschnitt ohne Vorschau; ein falscher Schlüssel beim Ändern der Notizen (zum Beispiel `notizen` statt `informal_notes`) ersetzte alle persönlichen Notizen durch einen leeren Text und meldete „aktualisiert“. Jetzt zeigt das Löschen erst die Vorschau; ein fehlender oder leerer Text beim Ändern der Notizen wird abgewiesen (leeren geht nur ausdrücklich mit `leeren: True`). `jobtitel_verwalten` löschte bei einem Aufruf ohne Aktion einen Jobtitel; die Vorgabe ist jetzt `anzeigen`. `scoring_konfigurieren('reset')` zeigt erst, wie viele Regler zurückfallen und wie viele davon von dir gesetzt sind. Ein Wächter-Test liest den Quelltext aller Werkzeuge und verlangt für jedes, das etwas löscht, einen Eintrag in den Listen; ein neues löschendes Werkzeug ohne Eintrag macht die Prüfung rot. - **Die Stellenliste bleibt auch bei großem Bestand schnell** (#1143). Der Beworben-Bonus im Scoring las für jede Stelle alle Bewerbungen samt Verlauf neu (fünf Abfragen je Bewerbung, für jede Stelle der Liste, auch bei `pro_seite=20`). Jetzt wird die Menge der beworbenen Stellen einmal gebildet. Gemessen auf einer Test-Datenbank mit 1.200 Stellen und 100 Bewerbungen: `stellen_anzeigen` von 5,2 s auf 0,3 s, der Stellen-Tab (`GET /api/jobs`) von 5,0 s auf 0,35 s. Der Stellen-Tab zählt die Aussortierten jetzt (`COUNT`) statt alle samt Anzeigentext zu laden (bei 2.000 Aussortierten mit je 8 KB Text 102 ms auf 11 ms), und der 2-Sekunden-Takt des Dashboards fragt `MAX(updated_at)` über einen Index (17 ms auf 3 ms je Takt bei 2.000 Aussortierten; neuer Index `idx_jobs_updated_at`, wird beim Start angelegt). - **Lange Arbeit hält das Dashboard nicht mehr an** (#1143). Endpunkte, die auf Netz, Platte oder die lokale KI warten, liefen auf der Ereignisschleife und hielten dabei alle anderen Anfragen an (ein Modell-Download von 8 s ließ jede andere Anfrage 7,7 s warten). Jetzt laufen im Hintergrund-Thread: Modell-Download, Standort setzen, Ordner-Import, Auto-Engine, Beschreibung nachladen, Abruf der Freelancermap-Beschreibungen, Stellenanzeige als Schnappschuss holen, Test des Adzuna-Zugangs, Dateien beim Hochladen lesen, Lern-Analyse und die Abfragen und Schalter der lokalen KI. Ein Wächter-Test liest den Quelltext des Dashboards und verbietet blockierende Aufrufe direkt in einem `async`-Endpunkt. ### Known Issues - Der Download eines KI-Modells hält das Dashboard nicht mehr an, hat aber weiter keine Fortschrittsanzeige und meldet in der Oberfläche nach 10 Minuten „Download fehlgeschlagen“, obwohl Ollama weiterlädt. Der Hintergrundjob mit Fortschritt ist eigene Arbeit (#1154). - Bei sehr vielen aussortierten Stellen mit langen Anzeigentexten (Tausende) bleibt `stellen_anzeigen` spürbar langsamer (2.000 Aussortierte mit je 8 KB Text: 2,9 s statt 0,3 s), weil die Wiedergänger-Prüfung die aussortierten Stellen samt Text lädt (#1154). ### Gemessen 96 neue Tests (6.286 gesamt): 47 für die Auskunft (Urteil ohne Anzeigentext oder mit Kurztext, Statusfilter mit Groß-/Kleinschreibung und Umlauten, Filter ohne Treffer bei Bewerbungen und Stellen, die Wörter in der Werkzeugbeschreibung), 29 für das Löschen mit Vorschau (die drei Werkzeuge, der Fall „falscher Schlüssel“, Station mit Projekten, Skill mit Zeiträumen, Wächter über den Quelltext aller Werkzeuge) und 20 für das Tempo (Zähler für die Abfragen, Messtest mit Grenzwert, zwei Anfragen gleichzeitig, Wächter über den Quelltext des Dashboards). Neun ältere Tests, die den alten Zustand festhielten, sind angepasst. Gegenprobe: 66 Mechanismen einzeln ausgebaut (19 bei der Auskunft, 24 beim Löschschutz, 23 beim Tempo); jeder Ausbau macht mindestens einen Test rot. Zwei Prüfungen wurden schon vor der Gegenprobe strenger gemacht (der Zähler für die Abfrage der beworbenen Stellen; eine Vorgabe-Zeile ohne Profil beim Zurücksetzen der Regler). Die Fehler selbst wurden vorher nachgestellt: eine Anzeige ohne Text ergab „NICHT_EMPFOHLEN“; `status_filter="Interview"` antwortete bei drei vorhandenen Bewerbungen „Noch keine Bewerbungen erfasst“; ein falscher Schlüssel beim Ändern der Notizen leerte zwei Abschnitte und meldete „aktualisiert“; auf einer Test-Datenbank mit 1.200 Stellen und 100 Bewerbungen brauchte `stellen_anzeigen` 5,2 s und der Stellen-Tab 5,0 s (jetzt 0,3 s und 0,35 s); ein künstlich langsamer Modell-Download ließ jede andere Anfrage so lange warten, wie er dauerte. ## 📦 Wie installiere oder aktualisiere ich PBP? **Unter Windows** brauchst du kein Git, kein Python, kein Vorwissen — nur einen ZIP-Download und einen Doppelklick. **Unter macOS** muss vorher einmalig Python 3.11+ installiert sein (siehe unten), **unter Linux** Git und Python. Voraussetzung ueberall: [Claude Desktop](https://claude.ai/download) ist installiert (Linux: alternativ Claude Code CLI). ### Windows (empfohlen, bequemster Weg) 1. **ZIP herunterladen:** [PBP-1.7.147.zip](https://github.com/MadGapun/PBP/archive/refs/tags/v1.7.147.zip) 2. **Entpacken:** Rechtsklick auf die ZIP → *„Alle extrahieren..."* → Zielordner waehlen (z.B. `C:\PBP`). Darin liegt ein Unterordner `PBP-...` — dort hinein wechseln. 3. **Installieren:** Doppelklick auf **`INSTALLIEREN.bat`** 4. Das Setup laedt Python, alle Pakete und Chromium herunter (~3–5 Minuten) und konfiguriert Claude Desktop. 5. Auf dem Desktop liegt jetzt eine Verknuepfung **„PBP Bewerbungs-Portal"** — Doppelklick startet das Dashboard. 6. **Claude Desktop oeffnen** (lief es schon: komplett beenden — Rechtsklick aufs Claude-Symbol unten rechts in der Taskleiste → *Beenden* — und neu starten) und tippen: **„Starte die Ersterfassung"** 7. Taucht PBP nicht auf: Claude Desktop nochmal komplett beenden und neu starten — siehe [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ). ### macOS 1. **Einmalig vorab: Python 3.11+** — am einfachsten der [Installer von python.org](https://www.python.org/downloads/) (Doppelklick), alternativ `brew install python@3.12` 2. **ZIP herunterladen** (siehe Windows-Link) und **entpacken** (Doppelklick; im ZIP liegt ein Unterordner `PBP-...`) 3. **Doppelklick auf `INSTALLIEREN.command`** 4. Falls macOS warnt („kann nicht geoeffnet werden"): Rechtsklick auf die Datei → *„Oeffnen"* → nochmal *„Oeffnen"* ### Linux ```bash git clone https://github.com/MadGapun/PBP.git cd PBP bash installer/install.sh ``` ### Update von einer aelteren Version **Einfach drüberinstallieren** — deine Daten bleiben erhalten: - Windows: `%LOCALAPPDATA%\BewerbungsAssistent\data\pbp.db` - macOS/Linux: `~/.bewerbungs-assistent/pbp.db` Schema-Upgrade läuft automatisch beim ersten Start, ein Backup wird vorher erstellt (Ordner `data\backups\`). ### Detaillierte Anleitung & Troubleshooting 📖 [Wiki → Installation](https://github.com/MadGapun/PBP/wiki/Installation) · [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ) --- ## [1.7.146] - 2026-10-02 — Termine, Sicherung und Bewerbungsansicht stimmen Hotfix für v1.7.145. Vier Dinge, die im Alltag falsche Auskunft gaben oder gar nicht liefen: Das Ende eines Termins im Dashboard war falsch, die tägliche Sicherung lief über Claude Desktop nie, eine einzige gesperrte Datei brachte die Sicherung zu Fall, ohne dass es jemand sah, und die Bewerbungsansicht begann mit alten Notizen und übersah einen verschobenen Termin. Kein Schema-Eingriff. **Wichtig zu wissen:** Ab dieser Version legt PBP über Claude Desktop wirklich täglich eine Sicherung an, so wie die Karte „Sicherungen“ es immer versprochen hat. Behalten werden die Sicherungen der letzten 7 Tage und je eine der 4 Wochen davor, jeweils die Datenbank und, wenn du Dokumente hast, ein ZIP davon. Bei vielen großen Dokumenten kann das Platz kosten: Die Karte zeigt, wie groß dein Dokumentenordner ist, und hat den Schalter **„Dokumente in die tägliche Sicherung aufnehmen“**. Ohne Haken enthält die tägliche Sicherung nur die Datenbank; Sicherungen, die du selbst anlegst, enthalten die Dokumente immer. Reicht der Platz nicht, sichert PBP nicht und sagt es. ### Fixed - **Das Ende eines Termins stimmt** (#1140). Das Kalender-Formular rechnete Beginn plus Dauer in UTC statt in deiner Ortszeit: aus „14:00, 60 Minuten“ wurde im Sommer das Ende 13:00. Die Kalender-Datei (ICS) war dadurch ungültig, und zwei sich überschneidende Termine meldeten keine Kollision. Jetzt rechnet die Oberfläche in Ortszeit, und der Server lässt kein Ende vor dem Beginn mehr zu (er rechnet es aus Beginn und Dauer; ohne Dauer bleibt das Ende leer statt falsch). Termine, die das alte Formular schon gespeichert hat, werden beim Start einmal korrigiert. Dasselbe Muster in den Aufgaben („überfällig“ zwischen 0 und 2 Uhr), in der Statistik und im Datum neuer Stationen ist mit repariert. - **Die Hintergrund-Automatik startet auch über Claude Desktop** (#1138). Tägliche Sicherung, geplante Jobsuche und Lernen liefen bisher nur im eigenständigen Dashboard (Desktop-Verknüpfung), nicht in dem Weg, den die meisten nutzen. Die Karte versprach „PBP sichert einmal am Tag von selbst“, und es geschah nichts. Jetzt startet der Planer dort, wo das Dashboard läuft, und nur dort (kein Doppellauf bei mehreren Fenstern). Eine eingestellte Automatik-Jobsuche oder ein eingestelltes Lernen laufen damit zum ersten Mal wirklich. Neu ist der Schalter für die Dokumente in der täglichen Sicherung (Vorgabe: an). - **Eine gesperrte Datei kippt die Sicherung nicht mehr, und Fehler sind zu sehen** (#1142). Eine einzige Datei im Dokumentenordner, die gerade von einem Virenscanner oder von Office gehalten wurde, brachte die ganze Sicherung samt Datenbankkopie zu Fall, und nirgends stand der Grund. Jetzt bleibt die Datenbankkopie immer, gesperrte Dateien werden übersprungen und genannt, und die Karte zeigt den Ausgang des letzten Versuchs (Fehler in Rot, „gesichert, aber nicht vollständig“ in Gelb). Ein Abruffehler gilt nicht mehr als „Noch keine Sicherung vorhanden“. Nach einem Fehlschlag wartet die Automatik 15 Minuten, dann länger (bis 8 Stunden), statt alle 5 Minuten einen neuen Kopierversuch zu starten. - **`bewerbung_details` beginnt mit dem aktuellen Stand** (#1153). Die Ausgabe begann mit den ältesten Notizen, die Timeline lief aufsteigend, das Meeting kam nicht vor, und die Vorschläge sagten bei „Interview“ auch für einen Termin in der Zukunft: „Du hattest ein Interview!“. So entstanden drei falsche Aussagen über eine Bewerbung (verschobener Termin, längst gegebene Zusage, angeblich stattgefundenes Gespräch). Jetzt steht zuerst der Block `aktueller_stand` (nächster Termin mit Status, letzter Eintrag, offene Aufgaben und Nachfassungen), dazu die Termine, die Timeline mit dem Neuesten zuerst, und die Notizen am Ende mit dem Hinweis, dass sie älter sein können. Verschiebt, bestätigt oder sagt man einen Termin ab (im Dashboard oder über Claude), steht das jetzt als Zeile im Verlauf der Bewerbung; ältere Einträge, die etwas als „offen“ schildern, bekommen danach den Hinweis „möglicherweise überholt“ (der Text bleibt unverändert). Die Vorschläge passen zur Zeit: liegt das Gespräch vor dir, geht es um die Vorbereitung; ohne Termin steht dort „kein Termin hinterlegt“ mit dem Angebot, ihn einzutragen. Mit einem kommenden Termin kommt kein „Wartest du seit … Tagen auf Antwort“ mehr. ### Known Issues - Ältere Hinweise im Verlauf werden nur gekennzeichnet, wenn danach über diese Version eine Terminänderung eingetragen wurde; frühere Verschiebungen stehen im Termin selbst (`aktueller_stand` zeigt ihn). ### Gemessen 68 neue Tests (6.190 gesamt): 27 für das Terminende (die Regel, Anlegen, Ändern, Korrektur beim Start, ICS-Datei, Kollisionen und ein Wächter, der UTC-Daten für Eingaben in der Oberfläche verbietet), 5 für den Start des Planers, 21 für die Sicherung (gesperrte Datei, Datenbankkopie bleibt, Wartezeit, Ausgang des letzten Versuchs, Schalter für die Dokumente) und 15 für die Bewerbungsansicht; dazu zwei Node-Tests (Ortszeit in fünf Zeitzonen, Text zum Sicherungsversuch) als Schritt der automatischen Prüfung. Gegenprobe: 44 Mechanismen einzeln ausgebaut (11 beim Terminende, 16 bei Planer und Sicherung, 6 beim Dokumenten-Schalter, 11 bei der Bewerbungsansicht); jeder Ausbau macht mindestens einen Test rot, und bei zwei Ausbauten blieb zunächst alles grün, deshalb sind zwei Prüfungen strenger geworden (der Aufruf des Planers zählt, nicht der Import; die Karte muss den Stand des letzten Versuchs anzeigen). Die Fehler selbst wurden vorher nachgestellt: 14:00 plus 60 Minuten ergab in Europe/Berlin im Sommer das Ende 13:00, der Prozess, den Claude Desktop startet, hatte keinen Planer-Thread, vier Planer-Takte nach einem Fehlschlag starteten vier Sicherungsversuche, und `bewerbung_details` nannte bei einem verschobenen und zugesagten Termin zuerst den alten Stand. ## 📦 Wie installiere oder aktualisiere ich PBP? **Unter Windows** brauchst du kein Git, kein Python, kein Vorwissen — nur einen ZIP-Download und einen Doppelklick. **Unter macOS** muss vorher einmalig Python 3.11+ installiert sein (siehe unten), **unter Linux** Git und Python. Voraussetzung ueberall: [Claude Desktop](https://claude.ai/download) ist installiert (Linux: alternativ Claude Code CLI). ### Windows (empfohlen, bequemster Weg) 1. **ZIP herunterladen:** [PBP-1.7.146.zip](https://github.com/MadGapun/PBP/archive/refs/tags/v1.7.146.zip) 2. **Entpacken:** Rechtsklick auf die ZIP → *„Alle extrahieren..."* → Zielordner waehlen (z.B. `C:\PBP`). Darin liegt ein Unterordner `PBP-...` — dort hinein wechseln. 3. **Installieren:** Doppelklick auf **`INSTALLIEREN.bat`** 4. Das Setup laedt Python, alle Pakete und Chromium herunter (~3–5 Minuten) und konfiguriert Claude Desktop. 5. Auf dem Desktop liegt jetzt eine Verknuepfung **„PBP Bewerbungs-Portal"** — Doppelklick startet das Dashboard. 6. **Claude Desktop oeffnen** (lief es schon: komplett beenden — Rechtsklick aufs Claude-Symbol unten rechts in der Taskleiste → *Beenden* — und neu starten) und tippen: **„Starte die Ersterfassung"** 7. Taucht PBP nicht auf: Claude Desktop nochmal komplett beenden und neu starten — siehe [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ). ### macOS 1. **Einmalig vorab: Python 3.11+** — am einfachsten der [Installer von python.org](https://www.python.org/downloads/) (Doppelklick), alternativ `brew install python@3.12` 2. **ZIP herunterladen** (siehe Windows-Link) und **entpacken** (Doppelklick; im ZIP liegt ein Unterordner `PBP-...`) 3. **Doppelklick auf `INSTALLIEREN.command`** 4. Falls macOS warnt („kann nicht geoeffnet werden"): Rechtsklick auf die Datei → *„Oeffnen"* → nochmal *„Oeffnen"* ### Linux ```bash git clone https://github.com/MadGapun/PBP.git cd PBP bash installer/install.sh ``` ### Update von einer aelteren Version **Einfach drüberinstallieren** — deine Daten bleiben erhalten: - Windows: `%LOCALAPPDATA%\BewerbungsAssistent\data\pbp.db` - macOS/Linux: `~/.bewerbungs-assistent/pbp.db` Schema-Upgrade läuft automatisch beim ersten Start, ein Backup wird vorher erstellt (Ordner `data\backups\`). ### Detaillierte Anleitung & Troubleshooting 📖 [Wiki → Installation](https://github.com/MadGapun/PBP/wiki/Installation) · [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ) --- ## [1.7.145] - 2026-10-01 — Nur das Dashboard selbst darf PBP verändern Hotfix für v1.7.144. Eine Durchsicht von PBP auf Sicherheit und Datenschutz hat Lücken gefunden, die auch eine ganz normale Installation betreffen. PBP hört nur auf deinem eigenen Rechner, aber **andere Webseiten, die gleichzeitig in deinem Browser offen sind, konnten trotzdem Anfragen an das Dashboard schicken** und damit Daten ändern. Jetzt nimmt PBP Änderungen nur noch von seiner eigenen Oberfläche an. Dazu kommen Reparaturen am Windows-Installer und am Deinstaller, die deine Claude-Einstellungen und deinen Datenordner schützen. Kein Schema-Eingriff. **Wichtig zu wissen:** An deinen Daten ändert sich nichts, und das Dashboard arbeitet wie bisher. Wer PBP unter einem anderen Namen als `localhost` oder `127.0.0.1` erreicht (zum Beispiel über einen Tunnel), schaltet den Namen mit der Umgebungsvariable `BA_ERLAUBTE_HOSTS` frei, siehe „Changed“. ### Fixed - **Fremde Webseiten können PBP nicht mehr verändern** (#1135). Das Dashboard prüft bei jedem schreibenden Aufruf, woher er kommt, und lehnt fremde Herkunft ab (Antwort 403 mit einem Satz, was zu tun ist). Auch ein fremder Rechnername in der Anfrage wird abgewiesen. Aufrufe ohne Herkunftsangabe (Skripte, Installer, Plugins über die Ingest-Schnittstelle mit eigenem Schlüssel) funktionieren wie bisher. - **Keine Einrahmung durch fremde Seiten** (#1135). Das Dashboard lässt sich nicht mehr in einen unsichtbaren Rahmen auf einer fremden Seite legen. - **„Beschreibung nachladen“ lädt nur noch Webadressen** (#1135). Vorher nahm die Funktion auch `file://` und `ftp://` an und konnte so eine lokale Datei als Beschreibung in eine Bewerbung lesen. - **Adressen von außen werden nur als `http` und `https` verlinkt oder geöffnet** (#1135): in Stellen, Bewerbungen, Terminen und Hinweisen, im gedruckten Verlauf und in der Stellen-Seite des Exports. Eine Adresse wie `javascript:…` aus einem Portal oder einer Mail führte beim Klick Code im Dashboard aus. Server und Oberfläche prüfen gegen dieselbe Fallliste. - **CSV-Exporte neutralisieren Formeln** (#1135). Ein Firmen- oder Titeltext, der mit `=`, `+`, `@` oder `-` beginnt, bekommt ein Hochkomma, damit Excel ihn nicht als Formel ausführt; negative Zahlen bleiben Zahlen. - **Der Komplett-Export räumt hinter sich auf** (#1135). Bei jedem Export blieb eine vollständige Kopie der Datenbank im Temp-Ordner liegen. - **Die Protokolldatei nennt beim Verknüpfen von Dokumenten keine Firma mehr** (#1135). Die Datei wird in Fehlerberichten eingefügt. - **Windows-Installer: Paketversionen festgelegt** (#1136). Er holte die Pakete ohne Versionsgrenze; FastMCP 4, das PBP ausschließt, hätte eine frische Installation oder ein Update unbrauchbar machen können. Excel-Export und Diagramme werden jetzt mitinstalliert (vorher zeigte der Excel-Knopf eine Anweisung, die ohne Technikwissen niemand ausführen kann). - **Deine Claude-Einstellungen bleiben beim Deinstallieren und Neuinstallieren erhalten** (#1136, alle Systeme). Der Windows-Deinstaller schrieb die Konfiguration mit einem unsichtbaren Zeichen am Anfang; der nächste Installerlauf hielt sie für „defekt“ und ersetzte sie durch einen Eintrag nur für PBP, alle anderen Claude-Anbindungen waren weg. Jetzt schreibt der Deinstaller ohne das Zeichen, der Installer erkennt es, und eine wirklich unlesbare Datei wird zuerst als Kopie gesichert. - **Ein verlegter Datenordner und ein eigener Port überleben das Update** (#1136, alle Systeme). Der Installer baute den Eintrag bei jedem Lauf neu; wer seine Daten verlegt hatte, startete danach mit leerem Profil. - **Der Deinstaller meldet „Backup erstellt“ nur noch, wenn die Datei wirklich da ist** (#1136). Gelingt das Backup nicht, steht vor der Frage nach dem endgültigen Löschen eine Warnung. ### Changed - Zwei optionale Umgebungsvariablen für Sonderfälle: `BA_ERLAUBTE_HOSTS` (weitere Rechnernamen, durch Komma getrennt) und `BA_ERLAUBTE_HERKUENFTE` (weitere Herkünfte schreibender Aufrufe, zum Beispiel ein Entwicklungsserver). Im Alltag brauchst du beide nicht. ### Known Issues - Das Dashboard unter einem anderen Namen als `localhost`, `127.0.0.1` oder `[::1]` zu öffnen, wird jetzt abgewiesen; die Antwort nennt die Abhilfe. - Die Reparaturen am Installer wirken erst, wenn du die neue Version installierst. Eine bereits beschädigte Claude-Konfiguration stellt der neue Installer nicht wieder her. ### Gemessen 119 neue Tests (6.122 gesamt): 47 für den Schutz des Dashboards (darunter zwei im Browser: eine fremde Seite auf einem anderen Port kann nichts ändern, die eigene Oberfläche schreibt weiter), 44 für Adressen und Exporte, 12 für die Claude-Konfiguration, 10 für den Deinstaller (die Tests führen die echten PowerShell-Zeilen aus der BAT-Datei aus), 5 für die Installer-Pakete und 1 für das Protokoll; dazu ein Node-Test als eigener Schritt der automatischen Prüfung. Gegenprobe: 29 Mechanismen einzeln ausgebaut; jeder Ausbau macht mindestens einen Test rot. Beim ersten Durchlauf blieben vier Ausbauten an der Adressregel grün, deshalb enthält die gemeinsame Fallliste jetzt auch Adressen mit Rechnernamen (`javascript://…`, `file://…`) und mit Steuerzeichen mitten in der Adresse. Die Lücke selbst wurde vorher nachgestellt: Eine „einfache“ Anfrage mit fremder Herkunft änderte das Profil (Antwort 200), ebenso ein fremder Rechnername in der Anfrage; nachher antwortet das Dashboard mit 403 und das Profil bleibt unverändert. ## 📦 Wie installiere oder aktualisiere ich PBP? **Unter Windows** brauchst du kein Git, kein Python, kein Vorwissen — nur einen ZIP-Download und einen Doppelklick. **Unter macOS** muss vorher einmalig Python 3.11+ installiert sein (siehe unten), **unter Linux** Git und Python. Voraussetzung ueberall: [Claude Desktop](https://claude.ai/download) ist installiert (Linux: alternativ Claude Code CLI). ### Windows (empfohlen, bequemster Weg) 1. **ZIP herunterladen:** [PBP-1.7.145.zip](https://github.com/MadGapun/PBP/archive/refs/tags/v1.7.145.zip) 2. **Entpacken:** Rechtsklick auf die ZIP → *„Alle extrahieren..."* → Zielordner waehlen (z.B. `C:\PBP`). Darin liegt ein Unterordner `PBP-...` — dort hinein wechseln. 3. **Installieren:** Doppelklick auf **`INSTALLIEREN.bat`** 4. Das Setup laedt Python, alle Pakete und Chromium herunter (~3–5 Minuten) und konfiguriert Claude Desktop. 5. Auf dem Desktop liegt jetzt eine Verknuepfung **„PBP Bewerbungs-Portal"** — Doppelklick startet das Dashboard. 6. **Claude Desktop oeffnen** (lief es schon: komplett beenden — Rechtsklick aufs Claude-Symbol unten rechts in der Taskleiste → *Beenden* — und neu starten) und tippen: **„Starte die Ersterfassung"** 7. Taucht PBP nicht auf: Claude Desktop nochmal komplett beenden und neu starten — siehe [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ). ### macOS 1. **Einmalig vorab: Python 3.11+** — am einfachsten der [Installer von python.org](https://www.python.org/downloads/) (Doppelklick), alternativ `brew install python@3.12` 2. **ZIP herunterladen** (siehe Windows-Link) und **entpacken** (Doppelklick; im ZIP liegt ein Unterordner `PBP-...`) 3. **Doppelklick auf `INSTALLIEREN.command`** 4. Falls macOS warnt („kann nicht geoeffnet werden"): Rechtsklick auf die Datei → *„Oeffnen"* → nochmal *„Oeffnen"* ### Linux ```bash git clone https://github.com/MadGapun/PBP.git cd PBP bash installer/install.sh ``` ### Update von einer aelteren Version **Einfach drüberinstallieren** — deine Daten bleiben erhalten: - Windows: `%LOCALAPPDATA%\BewerbungsAssistent\data\pbp.db` - macOS/Linux: `~/.bewerbungs-assistent/pbp.db` Schema-Upgrade läuft automatisch beim ersten Start, ein Backup wird vorher erstellt (Ordner `data\backups\`). ### Detaillierte Anleitung & Troubleshooting 📖 [Wiki → Installation](https://github.com/MadGapun/PBP/wiki/Installation) · [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ) --- ## [1.7.144] - 2026-10-01 — „Update-Stand unbekannt“ bleibt nicht mehr stehen Hotfix für v1.7.143. PBP erfährt über die Anzeige in der Seitenleiste, dass es eine neue Version gibt. Diese Anzeige blieb nach einem einzigen Netzfehler eine Stunde lang stumm („Update-Stand unbekannt“), auch wenn das Netz längst wieder da war und die neue Version seit Tagen auf GitHub lag. Jetzt fragt PBP bald noch einmal, und ein Klick auf **Jetzt prüfen** fragt sofort. Dazu eine Reparatur an der automatischen Prüfung auf GitHub. Kein Schema-Eingriff. **Wichtig zu wissen:** Es ändert sich nur, wann und wie die Anzeige nachfragt. An deinen Daten ändert sich nichts. ### Fixed - **„Update-Stand unbekannt“ bleibt nach einem Netzfehler nicht mehr eine Stunde stehen** (#1134). Zwei Ursachen, beide gemessen: Der Server merkte sich auch einen *Fehlschlag* eine Stunde lang (eine zweite Abfrage nach behobenem Netz bekam dieselbe Antwort, ohne dass er nochmal nachsah), und die Seite fragte nur einmal beim Laden. Jetzt gilt ein Fehlschlag nur zwei Minuten (bei Wiederholung länger, höchstens 15 Minuten); ein Erfolg bleibt eine Stunde gemerkt. - **Ein lange offenes Dashboard erfährt von einer neuen Version** (#1134). Die Seite fragt von selbst wieder, bald nach einem Fehlschlag, sonst stündlich. Vorher erschien eine später veröffentlichte Version erst nach dem Neuladen der Seite. - **„Jetzt prüfen“** (#1134). Steht der Stand auf „unbekannt“, bietet die Seitenleiste den nächsten Schritt an, statt in einer Sackgasse zu enden. Der Klick fragt sofort (nicht dichter als alle 15 Sekunden, damit GitHubs Grenze von 60 Anfragen je Stunde hält). Der Hinweis nennt den Grund („github: keine Verbindung“) und wann PBP erneut fragt. - **Ein behobenes „unbekannt“ verschwindet auch ohne Update** (#1134). Vorher ersetzte nur ein gefundenes Update die Anzeige; „unbekannt“ blieb stehen, auch wenn die Prüfung wieder funktionierte und alles aktuell war. ### Changed - **Das Zeitlimit der automatischen Prüfung auf GitHub steht jetzt bei 45 statt 30 Minuten** (#1132). Am 30.09. wurde ein Lauf nach 30 Minuten abgebrochen, 28 Sekunden nachdem die Tests vollständig durchgelaufen waren; nur der Vorlauf war langsam. Ein Test hält das Limit bei mindestens 40 Minuten, und der Release-Ablauf hält fest: „abgebrochen“ ist weder grün noch rot. ### Known Issues - Der Fix wirkt erst, wenn du die neue Version installiert hast. Eine bereits installierte ältere Version behält ihr Verhalten; wer ein „unbekannt“ sieht, lädt die Seite nach einer Stunde neu oder installiert einfach drüber. ### Gemessen 22 neue Tests (6.003 gesamt): 19 für den Update-Hinweis, davon vier im Browser mit vorgespulter Uhr (die Seite fragt nach einem Fehlschlag von selbst wieder, ein lange offenes Dashboard erfährt von einer neuen Version, „Jetzt prüfen“ holt das Update nach, ein behobenes „unbekannt“ verschwindet auch ohne Update), dazu ein Node-Test als eigener Schritt der automatischen Prüfung und drei Tests für das Zeitlimit. Gegenprobe: 14 Mechanismen einzeln ausgebaut (9 im Server, 3 in der Oberfläche mit Neubau nach jedem Ausbau, 1 im Node-Test, 1 in der Eintragung des Node-Tests); jeder Ausbau macht mindestens einen Test rot. Der Fehler selbst wurde vorher ohne Netz nachgestellt: Abfrage mit ausgefallenem Netz, dann Abfrage nach behobenem Netz. Vorher lieferte die zweite Abfrage weiter „unbekannt“, dieselbe gemerkte Antwort ohne einen neuen Netzaufruf, und erst nach einer Stunde fand sie das Update. ## 📦 Wie installiere oder aktualisiere ich PBP? **Unter Windows** brauchst du kein Git, kein Python, kein Vorwissen — nur einen ZIP-Download und einen Doppelklick. **Unter macOS** muss vorher einmalig Python 3.11+ installiert sein (siehe unten), **unter Linux** Git und Python. Voraussetzung ueberall: [Claude Desktop](https://claude.ai/download) ist installiert (Linux: alternativ Claude Code CLI). ### Windows (empfohlen, bequemster Weg) 1. **ZIP herunterladen:** [PBP-1.7.144.zip](https://github.com/MadGapun/PBP/archive/refs/tags/v1.7.144.zip) 2. **Entpacken:** Rechtsklick auf die ZIP → *„Alle extrahieren..."* → Zielordner waehlen (z.B. `C:\PBP`). Darin liegt ein Unterordner `PBP-...` — dort hinein wechseln. 3. **Installieren:** Doppelklick auf **`INSTALLIEREN.bat`** 4. Das Setup laedt Python, alle Pakete und Chromium herunter (~3–5 Minuten) und konfiguriert Claude Desktop. 5. Auf dem Desktop liegt jetzt eine Verknuepfung **„PBP Bewerbungs-Portal"** — Doppelklick startet das Dashboard. 6. **Claude Desktop oeffnen** (lief es schon: komplett beenden — Rechtsklick aufs Claude-Symbol unten rechts in der Taskleiste → *Beenden* — und neu starten) und tippen: **„Starte die Ersterfassung"** 7. Taucht PBP nicht auf: Claude Desktop nochmal komplett beenden und neu starten — siehe [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ). ### macOS 1. **Einmalig vorab: Python 3.11+** — am einfachsten der [Installer von python.org](https://www.python.org/downloads/) (Doppelklick), alternativ `brew install python@3.12` 2. **ZIP herunterladen** (siehe Windows-Link) und **entpacken** (Doppelklick; im ZIP liegt ein Unterordner `PBP-...`) 3. **Doppelklick auf `INSTALLIEREN.command`** 4. Falls macOS warnt („kann nicht geoeffnet werden"): Rechtsklick auf die Datei → *„Oeffnen"* → nochmal *„Oeffnen"* ### Linux ```bash git clone https://github.com/MadGapun/PBP.git cd PBP bash installer/install.sh ``` ### Update von einer aelteren Version **Einfach drüberinstallieren** — deine Daten bleiben erhalten: - Windows: `%LOCALAPPDATA%\BewerbungsAssistent\data\pbp.db` - macOS/Linux: `~/.bewerbungs-assistent/pbp.db` Schema-Upgrade läuft automatisch beim ersten Start, ein Backup wird vorher erstellt (Ordner `data\backups\`). ### Detaillierte Anleitung & Troubleshooting 📖 [Wiki → Installation](https://github.com/MadGapun/PBP/wiki/Installation) · [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ) --- ## [1.7.143] - 2026-09-30 — „Schon beworben?“ steht jetzt an der Stelle Hotfix für v1.7.142. Bei jeder neuen Stelle fragst du dich zuerst: *Habe ich mich da schon beworben?* PBP wusste die Antwort seit Wochen, sagte sie aber nur, wenn man Claude fragte. Wer PBP im Dashboard nutzte, sah sie nie. Jetzt steht sie an der Stelle selbst. Dazu zwei kleine Reparaturen an Prüfwerkzeugen. Kein Schema-Eingriff. **Wichtig zu wissen:** Der Hinweis ändert nichts. Die Stelle bleibt in der Liste, nichts wird aussortiert oder angelegt. ### Added - **„Schon beworben?“ in der Stellenliste und im Detail** (#1126). Ein Streifen unter den Abzeichen nennt das Datum, den Stand und bietet **Zur Bewerbung** an. Er ist gelb, solange die Bewerbung läuft, und grau, wenn sie abgeschlossen ist (dann mit dem Absagegrund, falls er dokumentiert ist). Mit Fragezeichen, wenn Firma und Titel passen, die Anzeigen-Adresse aber eine andere ist; ohne, wenn die Adresse übereinstimmt. Auch eine laufende Bewerbung über einen Vermittler, die diese Firma als Endkunden nennt, wird gemeldet. Das Feld **Endkunde** der Bewerbung zählt dabei. `stellen_anzeigen`, `fit_analyse` und `firma_kontext` geben dieselbe Antwort aus derselben Funktion. ### Changed - **Der Wortlaut folgt dem Stand** (#1126). Bei einer laufenden Bewerbung steht dort „nicht noch einmal bewerben“. Vorher fragte PBP auch dort, ob „die alte Hürde noch steht“ — nach einem Absagegrund, den es nicht gab. Für abgeschlossene Bewerbungen bleibt der Text, mit lesbarem Datum und Status (12.05.2026, Abgelehnt) statt Rohwerten. Elwosa spricht bei einer laufenden Bewerbung nicht mehr von „schon mal“. - **Der Suchlauf sortiert eine Wiederholung nicht mehr automatisch aus** (#1126). Die Automatik las ein Kennzeichen „Repost-Verdacht“, das nirgends gesetzt wurde, und kannte eine frühere Bewerbung deshalb nur bei gleichem Hash. Jetzt fragt sie dieselbe Erkennung wie das Dashboard: Eine Stelle, die einer früheren Bewerbung entspricht, wird gezeigt und markiert. Ein bloßer Vermittler-Verdacht hält die Automatik nicht auf. ### Fixed - **Eine zeichengleiche Adresse zu einer abgelehnten Bewerbung wird beim Anlegen gemeldet** (#1117). Die Anlage fragte die Erkennung ohne die Adresse, obwohl sie beim Aussortieren längst als sicherer Treffer galt. Jetzt zählt eine gleiche Adresse (ohne Tracking-Parameter) zusätzlich als Beleg — nie als Voraussetzung: ein Repost mit neuer Adresse wird weiter über Firma und Titel erkannt. Eine Suchergebnisseite gilt nie als Beleg. - **Akzente im Firmennamen verhindern den Treffer nicht mehr** (#1117). „Société Beispiel“ und „Societe Beispiel Deutschland GmbH“ sind dieselbe Firma; Umlaute bleiben umschrieben („Müller“ bleibt „Mueller“). - **Der PII-Prüfer hält einen Ortsnamen nicht mehr für einen sicheren Firmentreffer** (#1124). `issue_text_pruefen` meldete eine Großstadt, die als „Firma“ in den Stellen stand, mit „NICHT veröffentlichen“, obwohl sie im Text nur als Ort vorkam. Sie wird jetzt als *unsicher* gemeldet und beim Anonymisieren nicht ersetzt. Eine Firma mit Ort im Namen („Beispiel Hamburg GmbH“) bleibt ein sicherer Fund. (Das Issue vermutete die Quelle in den Firmenrecherchen; gemessen stammt der Name aus den Stellen.) - **Vier Tests waren unter Windows dauerhaft rot** (#1128). `test_975_shell_skripte_parsen` nahm das erste `bash` auf dem PATH, und das ist dort oft der WSL-Stub ohne Distribution. Jetzt zählt das erste `bash`, das wirklich läuft; ohne ein solches wird übersprungen. Ein absichtlich kaputtes Skript macht den Test weiterhin rot. ### Known Issues - Der Hinweis erscheint nur für Stellen, die PBP kennt. Eine Bewerbung ohne Adresse und mit anderem Firmennamen (etwa nur der Vermittler, ohne eingetragenen Endkunden) findet er nicht. Trage bei Bewerbungen über einen Vermittler das Feld **Endkunde** ein. ### Gemessen 71 neue Tests (5.981 gesamt, 29 davon übersprungen). Gegenprobe: 34 Mechanismen im Backend und 5 in der Oberfläche einzeln ausgebaut (dort nach jedem Ausbau neu gebaut); jeder Ausbau macht einen Test rot. Beim Durchsehen fielen zwei Dinge auf, die vor dem Release behoben wurden: Die Vermittler-Prüfung verglich den gefalteten Namen mit ungefaltetem Text und hätte dadurch einen bisherigen Treffer verloren, und der Satz für abgeschlossene Bewerbungen zeigte neben dem lesbaren Datum im Streifen darüber den Rohwert („2026-05-12“). Ein Alt-Test angepasst, weil er den Rohwert festhielt (`test_782_stellen_anzeigen_warnt`). Die Laufzeit wurde auf einer Kopie des echten Bestands gemessen: 103 Bewerbungen laden in etwa 12 Millisekunden. ## 📦 Wie installiere oder aktualisiere ich PBP? **Unter Windows** brauchst du kein Git, kein Python, kein Vorwissen — nur einen ZIP-Download und einen Doppelklick. **Unter macOS** muss vorher einmalig Python 3.11+ installiert sein (siehe unten), **unter Linux** Git und Python. Voraussetzung ueberall: [Claude Desktop](https://claude.ai/download) ist installiert (Linux: alternativ Claude Code CLI). ### Windows (empfohlen, bequemster Weg) 1. **ZIP herunterladen:** [PBP-1.7.143.zip](https://github.com/MadGapun/PBP/archive/refs/tags/v1.7.143.zip) 2. **Entpacken:** Rechtsklick auf die ZIP → *„Alle extrahieren..."* → Zielordner waehlen (z.B. `C:\PBP`). Darin liegt ein Unterordner `PBP-...` — dort hinein wechseln. 3. **Installieren:** Doppelklick auf **`INSTALLIEREN.bat`** 4. Das Setup laedt Python, alle Pakete und Chromium herunter (~3–5 Minuten) und konfiguriert Claude Desktop. 5. Auf dem Desktop liegt jetzt eine Verknuepfung **„PBP Bewerbungs-Portal"** — Doppelklick startet das Dashboard. 6. **Claude Desktop oeffnen** (lief es schon: komplett beenden — Rechtsklick aufs Claude-Symbol unten rechts in der Taskleiste → *Beenden* — und neu starten) und tippen: **„Starte die Ersterfassung"** 7. Taucht PBP nicht auf: Claude Desktop nochmal komplett beenden und neu starten — siehe [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ). ### macOS 1. **Einmalig vorab: Python 3.11+** — am einfachsten der [Installer von python.org](https://www.python.org/downloads/) (Doppelklick), alternativ `brew install python@3.12` 2. **ZIP herunterladen** (siehe Windows-Link) und **entpacken** (Doppelklick; im ZIP liegt ein Unterordner `PBP-...`) 3. **Doppelklick auf `INSTALLIEREN.command`** 4. Falls macOS warnt („kann nicht geoeffnet werden"): Rechtsklick auf die Datei → *„Oeffnen"* → nochmal *„Oeffnen"* ### Linux ```bash git clone https://github.com/MadGapun/PBP.git cd PBP bash installer/install.sh ``` ### Update von einer aelteren Version **Einfach drüberinstallieren** — deine Daten bleiben erhalten: - Windows: `%LOCALAPPDATA%\BewerbungsAssistent\data\pbp.db` - macOS/Linux: `~/.bewerbungs-assistent/pbp.db` Schema-Upgrade läuft automatisch beim ersten Start, ein Backup wird vorher erstellt (Ordner `data\backups\`). ### Detaillierte Anleitung & Troubleshooting 📖 [Wiki → Installation](https://github.com/MadGapun/PBP/wiki/Installation) · [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ) --- ## [1.7.142] - 2026-09-30 — Nachfragen erledigen sich, Termine ziehen ihre Aufgaben mit Hotfix für v1.7.141. Drei Meldungen aus dem Alltag: Eine Nachfrage blieb „überfällig“, obwohl längst ein Interview lief. Ein verschobenes Interview ließ seine Vorbereitung im Rückstand stehen. Und der Aufgaben-Tab schob seine Knöpfe aus dem Fenster. Kein Schema-Eingriff. **Wichtig zu wissen:** Wer heute mit einer Firma spricht und das PBP meldet, muss morgen nicht nach dem Sachstand fragen. Das gilt jetzt für jeden gemeldeten Kontakt, nicht nur für das Interview. ### Fixed - **Eine Nachfrage erledigt sich, sobald du mit der Firma Kontakt hattest** (#1123). Als Kontakt zählen ein Statuswechsel, mit dem die Firma geantwortet hat (Eingangsbestätigung, Interview, Zweitgespräch, Angebot), ein vereinbarter oder verschobener Termin, eine Gesprächsnotiz und eine zugeordnete E-Mail. Die Erinnerung wird auf „hinfällig“ gesetzt, nicht gelöscht, und an der Bewerbung steht ein Verlaufseintrag. Nur Nachfragen und nur solche, die vor dem Kontakt angelegt wurden: was du danach selbst einplanst, bleibt. - **Ein verschobener Termin zieht seine Vorbereitung mit** (#1123). Bei genau einer offenen Vorbereitung wandert die Fälligkeit um dieselbe Zahl Tage mit. Titel und Beschreibung schreibt PBP nicht um, sondern sagt, wenn der Titel noch das alte Datum nennt. Bei mehreren Vorbereitungen rät PBP nicht, bei einer Absage oder einem gelöschten Termin schlägt es „hinfällig“ vor. Im Dashboard und über Claude gilt dieselbe Regel. - **Der Aufgaben-Tab läuft nicht mehr über den rechten Rand** (#1122). Bei langen Titeln und Beschreibungen ohne Umbruchstelle lag der Inhalt bei 1280 Pixeln Breite 470 Pixel neben dem sichtbaren Bereich, und die Knöpfe rechts waren nicht erreichbar. Die Zeile bleibt jetzt im Fenster. - **`&` im Titel und offene Platzhalter im Nachfass-Text** (#1122). Bewerbungen speichern Titel und Firma ohne HTML-Zeichenverweise, und `nachfass_planen` füllt `{applied_at}` und `{ansprechpartner}` (fehlt ein Wert, fällt die Wendung weg). Der Bestand wird einmalig beim Start bereinigt. - **Claude kennt alle fünfzehn Absagegründe** (#1115). `falsches_system` und `falsche_branche` fehlten in der Beschreibung von `stelle_einordnen` und in der Schreibweisen-Prüfung. Die Liste kommt jetzt aus einer Quelle. Ein eigener Grund, der nur anders geschrieben ist (`falsches system`), wird beim Start in den Standardgrund zusammengeführt. ### Changed - **Der Aufräumer für überholte Nachfragen ist eine Funktion.** Die Dashboard-Automatik (stündlich, nur bei geöffnetem Dashboard) und der Start rufen dieselbe Funktion wie die Ereignisse oben. Sie schließt nur noch Nachfragen, nicht mehr Interview-Erinnerungen oder Danke-Mails. - `pbp_diagnose` meldet Vorbereitungen, deren Titel ein Datum nennt, das zu keinem kommenden Termin passt. ### Gemessen 82 neue Tests. Gegenprobe: 47 Mechanismen einzeln ausgebaut, jeder Ausbau macht einen Test rot; im Frontend jede CSS-Änderung einzeln zurückgenommen und neu gebaut. Der Layout-Fehler wurde vor dem Beheben am gebauten Bundle nachgestellt. Sieben Alt-Tests angepasst, weil sie den alten Zustand festhielten (etwa „ein Interview lässt die Nachfrage stehen“); die Begründung steht jeweils im Test. ## 📦 Wie installiere oder aktualisiere ich PBP? **Unter Windows** brauchst du kein Git, kein Python, kein Vorwissen — nur einen ZIP-Download und einen Doppelklick. **Unter macOS** muss vorher einmalig Python 3.11+ installiert sein (siehe unten), **unter Linux** Git und Python. Voraussetzung ueberall: [Claude Desktop](https://claude.ai/download) ist installiert (Linux: alternativ Claude Code CLI). ### Windows (empfohlen, bequemster Weg) 1. **ZIP herunterladen:** [PBP-1.7.142.zip](https://github.com/MadGapun/PBP/archive/refs/tags/v1.7.142.zip) 2. **Entpacken:** Rechtsklick auf die ZIP → *„Alle extrahieren..."* → Zielordner waehlen (z.B. `C:\PBP`). Darin liegt ein Unterordner `PBP-...` — dort hinein wechseln. 3. **Installieren:** Doppelklick auf **`INSTALLIEREN.bat`** 4. Das Setup laedt Python, alle Pakete und Chromium herunter (~3–5 Minuten) und konfiguriert Claude Desktop. 5. Auf dem Desktop liegt jetzt eine Verknuepfung **„PBP Bewerbungs-Portal"** — Doppelklick startet das Dashboard. 6. **Claude Desktop oeffnen** (lief es schon: komplett beenden — Rechtsklick aufs Claude-Symbol unten rechts in der Taskleiste → *Beenden* — und neu starten) und tippen: **„Starte die Ersterfassung"** 7. Taucht PBP nicht auf: Claude Desktop nochmal komplett beenden und neu starten — siehe [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ). ### macOS 1. **Einmalig vorab: Python 3.11+** — am einfachsten der [Installer von python.org](https://www.python.org/downloads/) (Doppelklick), alternativ `brew install python@3.12` 2. **ZIP herunterladen** (siehe Windows-Link) und **entpacken** (Doppelklick; im ZIP liegt ein Unterordner `PBP-...`) 3. **Doppelklick auf `INSTALLIEREN.command`** 4. Falls macOS warnt („kann nicht geoeffnet werden"): Rechtsklick auf die Datei → *„Oeffnen"* → nochmal *„Oeffnen"* ### Linux ```bash git clone https://github.com/MadGapun/PBP.git cd PBP bash installer/install.sh ``` ### Update von einer aelteren Version **Einfach drüberinstallieren** — deine Daten bleiben erhalten: - Windows: `%LOCALAPPDATA%\BewerbungsAssistent\data\pbp.db` - macOS/Linux: `~/.bewerbungs-assistent/pbp.db` Schema-Upgrade läuft automatisch beim ersten Start, ein Backup wird vorher erstellt (Ordner `data\backups\`). ### Detaillierte Anleitung & Troubleshooting 📖 [Wiki → Installation](https://github.com/MadGapun/PBP/wiki/Installation) · [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ) --- ## [1.7.141] - 2026-09-29 — Die Jobsuche bleibt nicht mehr hängen Hotfix für v1.7.140. Beim ersten Start nach dem Update übernimmt PBP den Wohnort als Standort und rechnet alle Entfernungen neu. Traf das auf die fällige Automatik-Suche, blieb die Suche dauerhaft auf „läuft (100 %)“ stehen. Danach startete keine Suche mehr, weder über Claude noch über das Dashboard oder die Automatik, auch nicht nach einem Neustart. Kein Schema-Eingriff. **Wer auf v1.7.140 festhängt:** Nach dem Update auf v1.7.141 gilt der alte Lauf beim nächsten Start einer Suche als abgebrochen, die neue Suche läuft normal. ### Fixed - **Die Entfernungs-Nachrechnung sperrt die Datenbank nicht mehr** (#1118). Sie fragt erst alle Orte ab und speichert danach in einem kurzen Schritt. Vorher hielt sie die Schreibsperre über alle Abfragen, bei vielen Orten fast eine halbe Stunde. Sie wartet außerdem, bis eine laufende Jobsuche fertig ist, und zeigt ihren Fortschritt. - **Ein toter Suchlauf blockiert keinen neuen Start mehr** (#1118). Ein Lauf, der länger als sein Zeitlimit keine Rückmeldung gibt und nicht mehr arbeitet, gilt als abgebrochen und wird mit Grund abgeschlossen. Das gilt beim Start einer Suche, in der Laufanzeige des Dashboards, beim Neustart und bei `jobsuche_status`. Vorher scheiterten alle diese Prüfungen still an einem Zeitzonen-Vergleich. - **Das Geocoding eines Suchlaufs fällt nicht mehr still aus** (#1118). Scheitert nur die Fortschrittsanzeige, laufen die Entfernungen weiter. Ein echter Fehler steht als Warnung im Log. - **Der Abschluss eines Laufs versucht es bei einer kurzen Sperre erneut** (#1118), statt den Lauf als „läuft“ stehen zu lassen. ### Gemessen 16 neue Tests. Gegenprobe: jede der sechs geänderten Dateien einzeln zurückgenommen, jedes Mal rot. Ein langer LinkedIn-Lauf (bis zu 20 Minuten ohne Rückmeldung) gilt weiterhin nicht als tot. ## 📦 Wie installiere oder aktualisiere ich PBP? **Unter Windows** brauchst du kein Git, kein Python, kein Vorwissen — nur einen ZIP-Download und einen Doppelklick. **Unter macOS** muss vorher einmalig Python 3.11+ installiert sein (siehe unten), **unter Linux** Git und Python. Voraussetzung ueberall: [Claude Desktop](https://claude.ai/download) ist installiert (Linux: alternativ Claude Code CLI). ### Windows (empfohlen, bequemster Weg) 1. **ZIP herunterladen:** [PBP-1.7.141.zip](https://github.com/MadGapun/PBP/archive/refs/tags/v1.7.141.zip) 2. **Entpacken:** Rechtsklick auf die ZIP → *„Alle extrahieren..."* → Zielordner waehlen (z.B. `C:\PBP`). Darin liegt ein Unterordner `PBP-...` — dort hinein wechseln. 3. **Installieren:** Doppelklick auf **`INSTALLIEREN.bat`** 4. Das Setup laedt Python, alle Pakete und Chromium herunter (~3–5 Minuten) und konfiguriert Claude Desktop. 5. Auf dem Desktop liegt jetzt eine Verknuepfung **„PBP Bewerbungs-Portal"** — Doppelklick startet das Dashboard. 6. **Claude Desktop oeffnen** (lief es schon: komplett beenden — Rechtsklick aufs Claude-Symbol unten rechts in der Taskleiste → *Beenden* — und neu starten) und tippen: **„Starte die Ersterfassung"** 7. Taucht PBP nicht auf: Claude Desktop nochmal komplett beenden und neu starten — siehe [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ). ### macOS 1. **Einmalig vorab: Python 3.11+** — am einfachsten der [Installer von python.org](https://www.python.org/downloads/) (Doppelklick), alternativ `brew install python@3.12` 2. **ZIP herunterladen** (siehe Windows-Link) und **entpacken** (Doppelklick; im ZIP liegt ein Unterordner `PBP-...`) 3. **Doppelklick auf `INSTALLIEREN.command`** 4. Falls macOS warnt („kann nicht geoeffnet werden"): Rechtsklick auf die Datei → *„Oeffnen"* → nochmal *„Oeffnen"* ### Linux ```bash git clone https://github.com/MadGapun/PBP.git cd PBP bash installer/install.sh ``` ### Update von einer aelteren Version **Einfach drüberinstallieren** — deine Daten bleiben erhalten: - Windows: `%LOCALAPPDATA%\BewerbungsAssistent\data\pbp.db` - macOS/Linux: `~/.bewerbungs-assistent/pbp.db` Schema-Upgrade läuft automatisch beim ersten Start, ein Backup wird vorher erstellt (Ordner `data\backups\`). ### Detaillierte Anleitung & Troubleshooting 📖 [Wiki → Installation](https://github.com/MadGapun/PBP/wiki/Installation) · [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ) --- ## [1.7.140] - 2026-09-28 — Datensicherung, ein Weg für Dashboard und Claude Eine große Welle aus Anwenderproblemen: Was im Dashboard passierte, lief oft an anderen Regeln vorbei als derselbe Schritt über Claude. Dazu kommen eine Datensicherung mit Weg zurück und mehrere Datenschutz-Fixes. Kein Schema-Sprung (bleibt 48): neue Tabellen legt PBP beim Start selbst an, die gespeicherten Daten bleiben erhalten. ### Added - **Datensicherung** (#1098). PBP sichert täglich, vor dem Leeren eines Bereichs und vor dem Zusammenführen zweier Stellen, jeweils mit den Dokumenten. Unter Einstellungen › Datenschutz lässt sich ein früherer Stand zurückholen. Er wird beim nächsten Start eingespielt, nicht mitten im Betrieb. Neue Werkzeuge: `sicherung_anlegen`, `sicherungen_anzeigen`. - **Lernmodus nachvollziehbar** (#792). PBP zeigt, aus welchen Quellen es lernt, schreibt je Lauf ein Protokoll (mit Grund, wenn nichts gelernt wurde) und exportiert die Lerndaten als ZIP. Neue Werkzeuge: `lernprotokoll_anzeigen`, `lerndaten_exportieren`. - **Stellenliste mit Claude abgleichen** (#1112). Neuer Prompt `stellen_abgleich`, über der Stellenliste ein Knopf dafür; `stellen_anzeigen` kennt `gefunden_seit`. - **Anzeigentexte werden nach der Suche im Hintergrund nachgeladen** (#1038), höchstens 60 je Lauf und nur für Treffer nach dem Filter. - **Haken „Echte Fahrstrecke und Fahrzeit verwenden (nur Auto)“** (#1037). Ohne Haken gilt überall die Luftlinie. - **Herkunft je Angabe** (#954): belegt, geschätzt oder unbekannt, mit Methode und Zeitpunkt. - Hilfe und FAQ zu Entfernung, Fahrstrecke, Datensicherung und nachgeladenen Anzeigentexten. ### Changed - **Ein Weg für Dashboard und Claude.** Bisher hatten diese Schritte im Dashboard eigene Regeln: - Bewerbungen anlegen, Status ändern, Nachfassen (#1094) - Stellen aussortieren und bearbeiten, mit Lerneffekt (#1095) - Jobsuche starten, auch aus der Automatik (#1096) - Bewerbungsbericht (#1111) - Blacklist auf den Bestand anwenden: vorher wirkte das über alle Profile hinweg und ohne Protokoll - **Stellenkarte: zwei direkte Knöpfe statt „Genauer prüfen“** (#1113). Das Menü lag unter der nächsten Karte, sichtbar war nur „Sofort prüfen“ — es wirkte wie eine zweite Rückfrage. Jetzt steht der Unterschied im Namen: „Punkte ansehen“ rechnet lokal nach, „Bewerten mit Claude“ (bzw. „Neu bewerten“) kopiert den Prompt. Karte, Detail- und Fit-Dialog nutzen dieselben Namen. Das Menü „Für Claude kopieren“ liegt über der Folgekarte und schließt per Klick daneben oder Escape. - **Nähe-Punkte gleitend bis zur Grenze**, eine Grenze für alle Wege; die Luftlinie ist die Hauptangabe (#1036, #1037). - **Der Wohnort aus dem Profil gilt als Standort** (#1090), Entfernungen ziehen nach. Die Datenschutz-Übersicht nennt, dass dafür Wohnort und Stellenorte an OpenStreetMap Nominatim gehen. ### Fixed - **Datenschutz** - Die DSGVO-Löschung entfernt alles, was PBP im Datenordner angelegt hat. Fremde Dateien und Programmteile bleiben liegen und werden genannt (#1097). - PBP löscht nur Dateien, die ihm gehören (#1099). - Eine Bewerbung löschen räumt alle Bezüge ab; Recherchen zur Firma bleiben und verlieren nur die Verknüpfung (#1100). - Keine Daten anderer Profile mehr in Heatmap, Rückschau, Suche, Datenauskunft, Stil-Auswertung, Schwellen-Regler und weiteren Stellen (#1106). - **Das Dashboard startet wieder unter Python 3.11** (macOS/Linux). Eine Schreibweise, die erst ab 3.12 erlaubt ist, verhinderte den Start; eine neue CI-Prüfung kompiliert mit 3.11. - Eine eingetragene 0 bleibt 0 (#1091, #1036). - Die Auto-Aussortierung nach der Suche läuft nur mit Schalter (#1092). - Der Lernlauf hält „Lernen aus“ ein und läuft nicht doppelt (#1107). - Lange LinkedIn-Läufe werden nicht mehr nach 10 Minuten als Fehler markiert (#1096). - **Termine** (#1102): Zeiten in einer Form, heutige Termine gelten als kommend, der Kalenderexport schreibt Zeitzonen richtig. Eine unlesbare Terminzeit in einer Mail kostet nur diesen Termin, nicht den Upload. - Exportnamen sind dateisicher, und kein Export überschreibt einen anderen (#1101). - Statuslisten aus einer Quelle; `arbeitgeber_ausgefallen` gilt überall als abgeschlossen (#1103). - `branchen_trends` zählt mit Wortgrenzen; Aufwand und Termin-Export je Profil (#1104). - Die Ersterfassung endet auch ohne Berufserfahrung oder Ausbildung (#1108). - Eine Kontakt-Kategorie umbenennen behält ihre Kontakte (#1109). - Die Kontaktübernahme legt keine Dubletten an und fragt Abgelehntes nicht wieder (#1110). - Der LinkedIn-Anzeigentext kommt ohne Gehaltskasten und ohne Ansprechperson (#1085). - `jobtitel_verwalten` und `bewerbung_event_datum_setzen` nennen ihre IDs und melden keinen Erfolg über nichts. ### Gemessen Gegenproben je Mechanismus (ausgebaut, Test rot), unter anderem #1094 27/27, #1098 25/25, #1037 22/22, #1085 18/18, #792 16/16, #1095 15/15. Werkzeuge: 257 (+5), Prompts: 26 (+1). ## 📦 Wie installiere oder aktualisiere ich PBP? **Unter Windows** brauchst du kein Git, kein Python, kein Vorwissen — nur einen ZIP-Download und einen Doppelklick. **Unter macOS** muss vorher einmalig Python 3.11+ installiert sein (siehe unten), **unter Linux** Git und Python. Voraussetzung ueberall: [Claude Desktop](https://claude.ai/download) ist installiert (Linux: alternativ Claude Code CLI). ### Windows (empfohlen, bequemster Weg) 1. **ZIP herunterladen:** [PBP-1.7.140.zip](https://github.com/MadGapun/PBP/archive/refs/tags/v1.7.140.zip) 2. **Entpacken:** Rechtsklick auf die ZIP → *„Alle extrahieren..."* → Zielordner waehlen (z.B. `C:\PBP`). Darin liegt ein Unterordner `PBP-...` — dort hinein wechseln. 3. **Installieren:** Doppelklick auf **`INSTALLIEREN.bat`** 4. Das Setup laedt Python, alle Pakete und Chromium herunter (~3–5 Minuten) und konfiguriert Claude Desktop. 5. Auf dem Desktop liegt jetzt eine Verknuepfung **„PBP Bewerbungs-Portal"** — Doppelklick startet das Dashboard. 6. **Claude Desktop oeffnen** (lief es schon: komplett beenden — Rechtsklick aufs Claude-Symbol unten rechts in der Taskleiste → *Beenden* — und neu starten) und tippen: **„Starte die Ersterfassung"** 7. Taucht PBP nicht auf: Claude Desktop nochmal komplett beenden und neu starten — siehe [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ). ### macOS 1. **Einmalig vorab: Python 3.11+** — am einfachsten der [Installer von python.org](https://www.python.org/downloads/) (Doppelklick), alternativ `brew install python@3.12` 2. **ZIP herunterladen** (siehe Windows-Link) und **entpacken** (Doppelklick; im ZIP liegt ein Unterordner `PBP-...`) 3. **Doppelklick auf `INSTALLIEREN.command`** 4. Falls macOS warnt („kann nicht geoeffnet werden"): Rechtsklick auf die Datei → *„Oeffnen"* → nochmal *„Oeffnen"* ### Linux ```bash git clone https://github.com/MadGapun/PBP.git cd PBP bash installer/install.sh ``` ### Update von einer aelteren Version **Einfach drüberinstallieren** — deine Daten bleiben erhalten: - Windows: `%LOCALAPPDATA%\BewerbungsAssistent\data\pbp.db` - macOS/Linux: `~/.bewerbungs-assistent/pbp.db` Schema-Upgrade läuft automatisch beim ersten Start, ein Backup wird vorher erstellt (Ordner `data\backups\`). ### Detaillierte Anleitung & Troubleshooting 📖 [Wiki → Installation](https://github.com/MadGapun/PBP/wiki/Installation) · [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ) --- ## [1.7.139] - 2026-09-26 — Umlaute auch für Claude v1.7.138 hat die Texte im Dashboard umgestellt. Was Claude liest, trug weiter „ae“, „oe“ und „ue“. Claude gibt diese Texte oft wörtlich weiter, und im Chat stand dann „ueber“ neben „über“. Kein Schema-Eingriff; gespeicherte Daten bleiben, wie sie sind. ### Changed - **Echte Umlaute in allen Texten für Claude** (#1089 H33). Das sind rund 1.000 Texte in 87 Dateien: - Werkzeug- und Parameterbeschreibungen - Antworten der Werkzeuge - Prompts und die Anleitung, die PBP Claude beim Start mitgibt Unverändert bleibt, was Claude zurückschickt: - Werkzeug- und Parameternamen samt Vorgabewerten - Werte, mit denen ein Werkzeug vergleicht, etwa Status wie `zurueckgezogen`, Aktionen wie `loeschen` oder Gehaltsarten wie `jaehrlich` - Wörter in Anführungszeichen Die Prompts an die lokale KI bleiben ebenfalls, wie sie sind: Sie sind an ihrem Modell gemessen. - **Die Prüfung in der CI liest auch die Claude-Texte** (#1089 H33). `scripts/ui_texte_pruefen.py` kennt dieselben geschützten Werte und meldet neue Umschrift, bevor sie ausgeliefert wird. ### Gemessen Gegenprobe: 9 Mechanismen, jeder einzeln ausgebaut, jeder macht einen Test rot. ## 📦 Wie installiere oder aktualisiere ich PBP? **Unter Windows** brauchst du kein Git, kein Python, kein Vorwissen — nur einen ZIP-Download und einen Doppelklick. **Unter macOS** muss vorher einmalig Python 3.11+ installiert sein (siehe unten), **unter Linux** Git und Python. Voraussetzung ueberall: [Claude Desktop](https://claude.ai/download) ist installiert (Linux: alternativ Claude Code CLI). ### Windows (empfohlen, bequemster Weg) 1. **ZIP herunterladen:** [PBP-1.7.139.zip](https://github.com/MadGapun/PBP/archive/refs/tags/v1.7.139.zip) 2. **Entpacken:** Rechtsklick auf die ZIP → *„Alle extrahieren..."* → Zielordner waehlen (z.B. `C:\PBP`). Darin liegt ein Unterordner `PBP-...` — dort hinein wechseln. 3. **Installieren:** Doppelklick auf **`INSTALLIEREN.bat`** 4. Das Setup laedt Python, alle Pakete und Chromium herunter (~3–5 Minuten) und konfiguriert Claude Desktop. 5. Auf dem Desktop liegt jetzt eine Verknuepfung **„PBP Bewerbungs-Portal"** — Doppelklick startet das Dashboard. 6. **Claude Desktop oeffnen** (lief es schon: komplett beenden — Rechtsklick aufs Claude-Symbol unten rechts in der Taskleiste → *Beenden* — und neu starten) und tippen: **„Starte die Ersterfassung"** 7. Taucht PBP nicht auf: Claude Desktop nochmal komplett beenden und neu starten — siehe [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ). ### macOS 1. **Einmalig vorab: Python 3.11+** — am einfachsten der [Installer von python.org](https://www.python.org/downloads/) (Doppelklick), alternativ `brew install python@3.12` 2. **ZIP herunterladen** (siehe Windows-Link) und **entpacken** (Doppelklick; im ZIP liegt ein Unterordner `PBP-...`) 3. **Doppelklick auf `INSTALLIEREN.command`** 4. Falls macOS warnt („kann nicht geoeffnet werden"): Rechtsklick auf die Datei → *„Oeffnen"* → nochmal *„Oeffnen"* ### Linux ```bash git clone https://github.com/MadGapun/PBP.git cd PBP bash installer/install.sh ``` ### Update von einer aelteren Version **Einfach drüberinstallieren** — deine Daten bleiben erhalten: - Windows: `%LOCALAPPDATA%\BewerbungsAssistent\data\pbp.db` - macOS/Linux: `~/.bewerbungs-assistent/pbp.db` Schema-Upgrade läuft automatisch beim ersten Start, ein Backup wird vorher erstellt (Ordner `data\backups\`). ### Detaillierte Anleitung & Troubleshooting 📖 [Wiki → Installation](https://github.com/MadGapun/PBP/wiki/Installation) · [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ) --- ## [1.7.138] - 2026-09-26 — Umlaute auch vom Server v1.7.134 hat die Oberfläche auf echte Umlaute umgestellt. Ein Teil der Texte im Dashboard kommt aber vom Server, und dort stand weiter „ae“, „oe“ und „ue“ — zum Beispiel „Nachfassen ist kein Stoeren“ direkt unter „HEUTE FÜR DICH“. Kein Schema-Eingriff; gespeicherte Daten bleiben, wie sie sind. ### Changed - **Echte Umlaute in allen Server-Texten des Dashboards** (#1088 G73). Rund 440 Texte in 25 Dateien: - Tagesimpuls und Elwosa, samt Uhrzeit („Halb fünf“) und Monat („März“), - Hinweise und Arbeitsstand, - Datengüte-Marken an der Stellenliste, - Quellenbeschreibungen, - Faktoren im Fit-Dialog, - Meldungen der Einstellungen, Statistik und Schwellen, - Meldungen zum Löschen, zu Ordnern und zu Ollama. Bezeichner, Statuswerte, SQL, Protokollzeilen und die Suchmuster, mit denen PBP Mails und Anzeigen liest, bleiben unverändert. Die Suchmuster kennen weiter beide Schreibweisen. - **Die Prüfung in der CI liest jetzt auch den Server** (#1088 G73). `scripts/ui_texte_pruefen.py` prüft diese Dateien und den Tagesimpuls mit. Neue Umschrift fällt dort auf, bevor sie ausgeliefert wird. ### Gemessen Gegenprobe: 11 Mechanismen, jeder einzeln ausgebaut, jeder macht einen Test rot. ## 📦 Wie installiere oder aktualisiere ich PBP? **Unter Windows** brauchst du kein Git, kein Python, kein Vorwissen — nur einen ZIP-Download und einen Doppelklick. **Unter macOS** muss vorher einmalig Python 3.11+ installiert sein (siehe unten), **unter Linux** Git und Python. Voraussetzung ueberall: [Claude Desktop](https://claude.ai/download) ist installiert (Linux: alternativ Claude Code CLI). ### Windows (empfohlen, bequemster Weg) 1. **ZIP herunterladen:** [PBP-1.7.138.zip](https://github.com/MadGapun/PBP/archive/refs/tags/v1.7.138.zip) 2. **Entpacken:** Rechtsklick auf die ZIP → *„Alle extrahieren..."* → Zielordner waehlen (z.B. `C:\PBP`). Darin liegt ein Unterordner `PBP-...` — dort hinein wechseln. 3. **Installieren:** Doppelklick auf **`INSTALLIEREN.bat`** 4. Das Setup laedt Python, alle Pakete und Chromium herunter (~3–5 Minuten) und konfiguriert Claude Desktop. 5. Auf dem Desktop liegt jetzt eine Verknuepfung **„PBP Bewerbungs-Portal"** — Doppelklick startet das Dashboard. 6. **Claude Desktop oeffnen** (lief es schon: komplett beenden — Rechtsklick aufs Claude-Symbol unten rechts in der Taskleiste → *Beenden* — und neu starten) und tippen: **„Starte die Ersterfassung"** 7. Taucht PBP nicht auf: Claude Desktop nochmal komplett beenden und neu starten — siehe [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ). ### macOS 1. **Einmalig vorab: Python 3.11+** — am einfachsten der [Installer von python.org](https://www.python.org/downloads/) (Doppelklick), alternativ `brew install python@3.12` 2. **ZIP herunterladen** (siehe Windows-Link) und **entpacken** (Doppelklick; im ZIP liegt ein Unterordner `PBP-...`) 3. **Doppelklick auf `INSTALLIEREN.command`** 4. Falls macOS warnt („kann nicht geoeffnet werden"): Rechtsklick auf die Datei → *„Oeffnen"* → nochmal *„Oeffnen"* ### Linux ```bash git clone https://github.com/MadGapun/PBP.git cd PBP bash installer/install.sh ``` ### Update von einer aelteren Version **Einfach drüberinstallieren** — deine Daten bleiben erhalten: - Windows: `%LOCALAPPDATA%\BewerbungsAssistent\data\pbp.db` - macOS/Linux: `~/.bewerbungs-assistent/pbp.db` Schema-Upgrade läuft automatisch beim ersten Start, ein Backup wird vorher erstellt (Ordner `data\backups\`). ### Detaillierte Anleitung & Troubleshooting 📖 [Wiki → Installation](https://github.com/MadGapun/PBP/wiki/Installation) · [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ) --- ## [1.7.137] - 2026-09-25 — Lesbar für alle Siebte und letzte Welle aus dem UX-Review #1087: heller Modus, Bedienung ohne Maus und eine Doku ohne Widersprüche. Kein Schema-Eingriff; eigene Farben im Theme-Editor bleiben, wie sie sind. ### Changed - **Lesbar im hellen und im dunklen Modus** (#1087 G71). Jede Farbvoreinstellung erreicht für Lesetext auf allen Flächen mindestens 4,5:1 — im hellen Modus waren Akzentfarben und abgeschwächter Text darunter. Suche, Auswahllisten, Menüs und Diagramm-Hinweise nehmen ihre Fläche aus dem Farbschema statt aus festen dunklen Werten; Rahmen und Hinterlegungen sind im hellen Modus sichtbar. Schrift ist mindestens 12 px groß (Abzeichen ausgenommen). - **Bedienung mit Tastatur und Bildschirmleser** (#1087 G71). Dialoge sind als Dialog ausgezeichnet, halten den Fokus, schließen mit Escape und geben den Fokus zurück. Hinweise werden vorgelesen. Knöpfe mit Symbol tragen einen Namen, Aktionen erscheinen nicht erst beim Überfahren mit der Maus. Auswahlfelder lassen sich mit Pfeiltasten, Pos1/Ende, Enter und Escape bedienen. - **Suche auf dem Handy** (#1087 G71). Unter 768 px Breite öffnet das Lupen-Symbol oben die Suche. - **Kein einsamer Pfeil auf dem Dashboard.** Ein Bereich, der gerade nichts zu zeigen hat, zeigt auch keinen Einklapp-Griff. Die Begründung der Quellen-Empfehlung steht mit Umlauten. - **Doku ohne Widersprüche** (#1087 L13). Version und Testzahl stehen im README nur noch im Kopf; was sich geändert hat, steht unter Releases. Der Datenschutz-Satz ist präzise (gespeichert wird lokal, was du mit Claude bearbeitest, geht an Anthropic). Die Erste-Schritte-Anleitung nennt keine Börsen mehr, die gerade nicht liefern, und Kennungen im echten Format. Im Wiki steht „Einstieg“ zuerst; die Plan-Seiten stehen unter „Für Entwickler“. Neue Screenshots aus dem verbundenen Stable-Stand. ### Gemessen Gegenprobe: 21 Mechanismen, jeder einzeln ausgebaut, jeder macht einen Test rot. ## 📦 Wie installiere oder aktualisiere ich PBP? **Unter Windows** brauchst du kein Git, kein Python, kein Vorwissen — nur einen ZIP-Download und einen Doppelklick. **Unter macOS** muss vorher einmalig Python 3.11+ installiert sein (siehe unten), **unter Linux** Git und Python. Voraussetzung ueberall: [Claude Desktop](https://claude.ai/download) ist installiert (Linux: alternativ Claude Code CLI). ### Windows (empfohlen, bequemster Weg) 1. **ZIP herunterladen:** [PBP-1.7.137.zip](https://github.com/MadGapun/PBP/archive/refs/tags/v1.7.137.zip) 2. **Entpacken:** Rechtsklick auf die ZIP → *„Alle extrahieren..."* → Zielordner waehlen (z.B. `C:\PBP`). Darin liegt ein Unterordner `PBP-...` — dort hinein wechseln. 3. **Installieren:** Doppelklick auf **`INSTALLIEREN.bat`** 4. Das Setup laedt Python, alle Pakete und Chromium herunter (~3–5 Minuten) und konfiguriert Claude Desktop. 5. Auf dem Desktop liegt jetzt eine Verknuepfung **„PBP Bewerbungs-Portal"** — Doppelklick startet das Dashboard. 6. **Claude Desktop oeffnen** (lief es schon: komplett beenden — Rechtsklick aufs Claude-Symbol unten rechts in der Taskleiste → *Beenden* — und neu starten) und tippen: **„Starte die Ersterfassung"** 7. Taucht PBP nicht auf: Claude Desktop nochmal komplett beenden und neu starten — siehe [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ). ### macOS 1. **Einmalig vorab: Python 3.11+** — am einfachsten der [Installer von python.org](https://www.python.org/downloads/) (Doppelklick), alternativ `brew install python@3.12` 2. **ZIP herunterladen** (siehe Windows-Link) und **entpacken** (Doppelklick; im ZIP liegt ein Unterordner `PBP-...`) 3. **Doppelklick auf `INSTALLIEREN.command`** 4. Falls macOS warnt („kann nicht geoeffnet werden"): Rechtsklick auf die Datei → *„Oeffnen"* → nochmal *„Oeffnen"* ### Linux ```bash git clone https://github.com/MadGapun/PBP.git cd PBP bash installer/install.sh ``` ### Update von einer aelteren Version **Einfach drüberinstallieren** — deine Daten bleiben erhalten: - Windows: `%LOCALAPPDATA%\BewerbungsAssistent\data\pbp.db` - macOS/Linux: `~/.bewerbungs-assistent/pbp.db` Schema-Upgrade läuft automatisch beim ersten Start, ein Backup wird vorher erstellt (Ordner `data\backups\`). ### Detaillierte Anleitung & Troubleshooting 📖 [Wiki → Installation](https://github.com/MadGapun/PBP/wiki/Installation) · [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ) --- ## [1.7.136] - 2026-09-25 — Wo was steht Sechste Welle aus dem UX-Review #1087: Einstellungen, Profil, Hilfe, Kennzahlen und der Weg zurück nach einem Fehlgriff. Kein Schema-Eingriff; gespeicherte Einstellungen bleiben, wie sie sind. ### Changed - **Einstellungen in Grundlagen und Erweitert** (#1087 G70). Vorne stehen Quellen, Erscheinungsbild, Datenschutz, Ordner und Claude (Cloud). Alles Weitere — Quellen im Detail, Lokale KI, Automatik, Ablehnungsgründe, Bewerbungsbericht, Erweiterungen, System, Logs, Gefahrenzone — steht eingeklappt unter „Erweitert“. Die Quellen-Empfehlung hat einen Haken je Quelle und einen Satz, was man dort findet; die vollständige Liste mit Zustand und Zugangsschlüsseln steht unter „Quellen im Detail“. Die Nachfass-Frist steht nur noch einmal (unter Automatik), der Bewerbungsbericht hat einen eigenen Reiter, die Automatik ist in Klartext beschrieben. - **Suche & Bewertung als eigener Bereich** (#1087 G69). Suchbegriffe, Gehalt, Schwellen und Blacklist lagen mitten im Profil; jetzt stehen sie unter „Suche & Bewertung“. Die Regler für die Gewichte sind als Feinabstimmung eingeklappt. Der Einstellungs-Reiter „Bewertung“ heißt „Ablehnungsgründe“, weil er die enthält. - **Hilfe für jeden Bereich** (#1087 G68). Der Hilfe-Dialog hat für jede Seite Text, auch für Kontakte, Dokumente, Aufgaben und Kalender, und nennt die passenden Prompts aus dem Katalog. Der Reiter „Melden“ bietet beide Wege: ein GitHub-Issue oder eine Mail ohne Konto. Drei falsche Aussagen sind weg (Zahlen aktualisieren sich nicht von selbst, die Punkte gehen nicht bis 100, der Startsatz ist derselbe wie überall). - **Kennzahlen mit fester Bedeutung** (#1087 G61). „Bewerbungen pro Woche“ zeigt den Durchschnitt seit der ersten Bewerbung, mit einem beschrifteten Umschalter auf die letzten 30 Tage. Die Top-Stellen folgen den Regeln des Stellen-Tabs und zeigen nur Stellen mit Punkten. Ein fehlendes Gehalt steht als „—“ mit Grund statt als 0 EUR. Die Zahl an „Bewerbungen“ in der Seitenleiste zählt nur, was fällig ist, und sagt beim Zeigen, was sie meint. - **Ein Weg zurück** (#1087 G67). Ein Statuswechsel lässt sich im Hinweis unten sofort zurücknehmen; wandert die Bewerbung dabei ins Archiv, steht das dabei. Notizen, Aufgaben und Referenzen verschwinden sofort und kommen mit „Rückgängig“ unverändert wieder. Folgenreiches Löschen fragt in einem eigenen Dialog statt im Browserfenster. Jeder Dialog hat ein Schließen-Kreuz und fragt, bevor ungespeicherte Eingaben verloren gehen. ### Gemessen Gegenprobe: 25 Mechanismen, jeder einzeln ausgebaut, jeder macht einen Test rot. ## 📦 Wie installiere oder aktualisiere ich PBP? **Unter Windows** brauchst du kein Git, kein Python, kein Vorwissen — nur einen ZIP-Download und einen Doppelklick. **Unter macOS** muss vorher einmalig Python 3.11+ installiert sein (siehe unten), **unter Linux** Git und Python. Voraussetzung ueberall: [Claude Desktop](https://claude.ai/download) ist installiert (Linux: alternativ Claude Code CLI). ### Windows (empfohlen, bequemster Weg) 1. **ZIP herunterladen:** [PBP-1.7.136.zip](https://github.com/MadGapun/PBP/archive/refs/tags/v1.7.136.zip) 2. **Entpacken:** Rechtsklick auf die ZIP → *„Alle extrahieren..."* → Zielordner waehlen (z.B. `C:\PBP`). Darin liegt ein Unterordner `PBP-...` — dort hinein wechseln. 3. **Installieren:** Doppelklick auf **`INSTALLIEREN.bat`** 4. Das Setup laedt Python, alle Pakete und Chromium herunter (~3–5 Minuten) und konfiguriert Claude Desktop. 5. Auf dem Desktop liegt jetzt eine Verknuepfung **„PBP Bewerbungs-Portal"** — Doppelklick startet das Dashboard. 6. **Claude Desktop oeffnen** (lief es schon: komplett beenden — Rechtsklick aufs Claude-Symbol unten rechts in der Taskleiste → *Beenden* — und neu starten) und tippen: **„Starte die Ersterfassung"** 7. Taucht PBP nicht auf: Claude Desktop nochmal komplett beenden und neu starten — siehe [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ). ### macOS 1. **Einmalig vorab: Python 3.11+** — am einfachsten der [Installer von python.org](https://www.python.org/downloads/) (Doppelklick), alternativ `brew install python@3.12` 2. **ZIP herunterladen** (siehe Windows-Link) und **entpacken** (Doppelklick; im ZIP liegt ein Unterordner `PBP-...`) 3. **Doppelklick auf `INSTALLIEREN.command`** 4. Falls macOS warnt („kann nicht geoeffnet werden"): Rechtsklick auf die Datei → *„Oeffnen"* → nochmal *„Oeffnen"* ### Linux ```bash git clone https://github.com/MadGapun/PBP.git cd PBP bash installer/install.sh ``` ### Update von einer aelteren Version **Einfach drüberinstallieren** — deine Daten bleiben erhalten: - Windows: `%LOCALAPPDATA%\BewerbungsAssistent\data\pbp.db` - macOS/Linux: `~/.bewerbungs-assistent/pbp.db` Schema-Upgrade läuft automatisch beim ersten Start, ein Backup wird vorher erstellt (Ordner `data\backups\`). ### Detaillierte Anleitung & Troubleshooting 📖 [Wiki → Installation](https://github.com/MadGapun/PBP/wiki/Installation) · [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ) --- ## [1.7.135] - 2026-09-25 — Was Claude sieht Fünfte Welle aus dem UX-Review #1087: die Seite, die Claude von PBP zu sehen bekommt — Werkzeuge, Prompts, Anleitungen und die Antworten, die zurückführen. Kein Schema-Eingriff; umbenannte Werkzeuge bleiben unter ihrem alten Namen erreichbar. ### Changed - **Ein Werkzeugkatalog, der sich lesen lässt** (#1087 G1, G14). Die Beschreibungen der Werkzeuge hatten zusammen rund 175.000 Zeichen mit über 300 Issue-Verweisen. Jetzt steht in jeder Beschreibung Zweck und Einsatz in höchstens 600 Zeichen; die Parameter sind im Eingabeschema erklärt. Jedes Werkzeug trägt einen Tag (Alltag, Einstellung, Wartung, Entwickler). Reparatur-, Nachzieh- und Diagnosewerkzeuge sind nur im **Expertenmodus** sichtbar (Einstellungen › System, Vorgabe aus). `stellen_bulk_bewerten` gilt als kostenlos — es filtert nur in der Datenbank. - **Prompts aus einer Quelle** (#1087 G2). 14 Slash-Befehle hatten eine zweite, abweichende Fassung für das Dashboard. Jetzt liefern beide Wege denselben Text; `workflow_starten` listet den ganzen Prompt-Katalog. - **Datenschutz sagt, was geschieht** (#1087 G5, A8). Die Anzeige meldete Profil und Dokumente als „nur lokal“. Jetzt: gespeichert wird lokal; was du mit Claude bearbeitest (Profil samt Adresse, Text deiner Dokumente, Anzeigentexte, Notizen), geht an Anthropic. Dazu die übrigen Dienste (Nominatim, OpenRouteService, Update-Prüfung, JobSpy). Die Schalter dafür stehen im neuen Reiter **Einstellungen › Claude (Cloud)**. Die Sperre gilt jetzt auch für die Dokumentenauswertung und die Ersterfassung, und Claude sagt beim ersten Mal einmal, wohin die Daten gehen. - **Server-Anleitung für die Menschen, die PBP nutzen** (#1087 G10). Gegliedert nach Ton, Einstieg, Wahrheit, Sicherheit und Werkzeugwahl; keine Floskeln wie „Kopf hoch“ mehr, auch nicht in der FAQ und nach einer Absage. - **Werkzeugnamen nach Wirkung** (#1087 G11). `stelle_einordnen`, `stelle_urteil_speichern`, `jobtitel_speichern` (die alten Namen leiten einen Release lang weiter). Eine Notiz über `bewerbung_bearbeiten` wird angehängt statt die bisherigen zu überschreiben; ein zweites Profil entsteht erst nach Rückfrage. - **Ersterfassung in einem Viertel der Länge** (#1087 G9, G12). Die Anleitung einer Phase kommt mit der Antwort des Werkzeugs, das sie einleitet. Wer vor dem Profil schon einen Lebenslauf hochgeladen hat, hört das jetzt, und der nächste Schritt ist dessen Auswertung. Menüpfade in allen Antworten heißen wie im Dashboard. - **Der Weg zurück ins Dashboard** (#1087 G13). Stellen, Bewerbungen, Bewerbungsdetails, Firmenkontext und Aufgaben tragen einen Link, der direkt zur Stelle oder Bewerbung führt; der Port folgt `BA_DASHBOARD_PORT`, der Kalender-Export verlinkt eine Seite, die es gibt. - **Keine Sackgassen** (#1087 G14). `jobsuche_status()` zeigt ohne Kennung die letzte Suche, `profil_status()` nennt den nächsten Schritt aus derselben Lage wie das Dashboard, und jede „kein Profil“-Antwort führt zur Ersterfassung. ### Gemessen Gegenprobe: 44 Mechanismen, jeder einzeln ausgebaut, jeder macht einen Test rot. ## 📦 Wie installiere oder aktualisiere ich PBP? **Unter Windows** brauchst du kein Git, kein Python, kein Vorwissen — nur einen ZIP-Download und einen Doppelklick. **Unter macOS** muss vorher einmalig Python 3.11+ installiert sein (siehe unten), **unter Linux** Git und Python. Voraussetzung ueberall: [Claude Desktop](https://claude.ai/download) ist installiert (Linux: alternativ Claude Code CLI). ### Windows (empfohlen, bequemster Weg) 1. **ZIP herunterladen:** [PBP-1.7.135.zip](https://github.com/MadGapun/PBP/archive/refs/tags/v1.7.135.zip) 2. **Entpacken:** Rechtsklick auf die ZIP → *„Alle extrahieren..."* → Zielordner waehlen (z.B. `C:\PBP`). Darin liegt ein Unterordner `PBP-...` — dort hinein wechseln. 3. **Installieren:** Doppelklick auf **`INSTALLIEREN.bat`** 4. Das Setup laedt Python, alle Pakete und Chromium herunter (~3–5 Minuten) und konfiguriert Claude Desktop. 5. Auf dem Desktop liegt jetzt eine Verknuepfung **„PBP Bewerbungs-Portal"** — Doppelklick startet das Dashboard. 6. **Claude Desktop oeffnen** (lief es schon: komplett beenden — Rechtsklick aufs Claude-Symbol unten rechts in der Taskleiste → *Beenden* — und neu starten) und tippen: **„Starte die Ersterfassung"** 7. Taucht PBP nicht auf: Claude Desktop nochmal komplett beenden und neu starten — siehe [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ). ### macOS 1. **Einmalig vorab: Python 3.11+** — am einfachsten der [Installer von python.org](https://www.python.org/downloads/) (Doppelklick), alternativ `brew install python@3.12` 2. **ZIP herunterladen** (siehe Windows-Link) und **entpacken** (Doppelklick; im ZIP liegt ein Unterordner `PBP-...`) 3. **Doppelklick auf `INSTALLIEREN.command`** 4. Falls macOS warnt („kann nicht geoeffnet werden"): Rechtsklick auf die Datei → *„Oeffnen"* → nochmal *„Oeffnen"* ### Linux ```bash git clone https://github.com/MadGapun/PBP.git cd PBP bash installer/install.sh ``` ### Update von einer aelteren Version **Einfach drüberinstallieren** — deine Daten bleiben erhalten: - Windows: `%LOCALAPPDATA%\BewerbungsAssistent\data\pbp.db` - macOS/Linux: `~/.bewerbungs-assistent/pbp.db` Schema-Upgrade läuft automatisch beim ersten Start, ein Backup wird vorher erstellt (Ordner `data\backups\`). ### Detaillierte Anleitung & Troubleshooting 📖 [Wiki → Installation](https://github.com/MadGapun/PBP/wiki/Installation) · [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ) --- ## [1.7.134] - 2026-09-25 — Eine Karte, ein Wort, eine Liste Vierte Welle aus dem UX-Review #1087: die Stellenkarte, die Sprache und die Arbeitsliste. Kein Schema-Eingriff; gespeicherte Werte bleiben, nur die Beschriftung ändert sich. ### Changed - **Eine Aussage je Stellenkarte** (#1087 C2, C3, E3). Bis zu neun Abzeichen in Bewertungssprache (Kennung, Quellenschlüssel, zwei Daumen, Prüfstand, „Ungeprüft: 2“, „Kein Pflichttreffer“ …) werden zu einer Kernaussage — das gelesene Urteil oder die fachliche Passung —, einem Grund in Klartext und dem Rahmen-Daumen. Kennung und Quelle stehen im Menü „Für Claude kopieren“. „Fit-Analyse“ und „Detailbewertung“ sind ein Knopf „Genauer prüfen“ mit zwei Wegen: sofort auf dem Rechner oder als Detailbewertung mit Claude. - **Suche plus „Filter (n)“** statt 15 Bedienelementen. Die Vorgaben wirken weiter und stehen in einem Satz neben den Ansichten; die Seitengröße entfällt (die Liste lädt beim Scrollen nach). Was ein Filter verbirgt, heißt „ausgeblendet“, was du weggelegt hast, „aussortiert“. - **Eine Arbeitsliste** (#1087 D1). Der Aufgaben-Tab ist maßgeblich; Dashboard und Bewerbungen zeigen höchstens fünf Zeilen und „Alle Aufgaben (n weitere)“. Der Kalender zeigt nur echte Termine und verweist auf die Nachfassungen. - **Wörter statt Rohwerte** (#1087 D2). „Beworben mit Unterlagen“ statt „Beworben per: mit_dokumenten“, Datum als TT.MM.JJJJ, Quellennamen und Ablehnungsgründe als Wort in Statistik, Einstellungen und Dialogen, keine Werkzeugnamen in Oberflächentexten, „Vorbereitung“ statt „?“. - **Ein Wort je Sache, echte Umlaute** (#1087 E1, E2). Rund 340 Texte mit „ae/oe/ue“ stehen jetzt mit Umlauten, auch im Prompt-Katalog („Übungsgespräch“, „Stärken erkennen“). Nachfassen statt Follow-up, Aufgabe statt Todo, Menü „Dokumente“ statt „Docs“, PBP statt „Bewerbungs-Assistent“, Kontaktrollen deutsch (Fachvorgesetzte/r, Gesprächspartner/in, Personalabteilung). Eine Prüfung in der CI hält das fest. - **Suchbegriffe je Jobbörse** (#1087 C5). Der Tipp hieß „noch kein Suchprofil“ und erschien auch bei gepflegten Suchkriterien. Er heißt jetzt „Suchbegriffe je Jobbörse“, erscheint nur für eine gewählte Browser-Jobbörse ohne Eintrag und nennt sie. - **Kopieren für Claude, ein Muster** (#1087 E4). Alle Knöpfe, die eine Anleitung für Claude kopieren, tragen dasselbe Symbol und enden auf „mit Claude“. Scheitert die Zwischenablage, erscheint der Text in einem Fenster zum Selbstkopieren statt einer englischen Browsermeldung. ### Gemessen Gegenprobe: 29 Mechanismen, jeder einzeln ausgebaut, jeder macht einen Test rot. ## 📦 Wie installiere oder aktualisiere ich PBP? **Unter Windows** brauchst du kein Git, kein Python, kein Vorwissen — nur einen ZIP-Download und einen Doppelklick. **Unter macOS** muss vorher einmalig Python 3.11+ installiert sein (siehe unten), **unter Linux** Git und Python. Voraussetzung ueberall: [Claude Desktop](https://claude.ai/download) ist installiert (Linux: alternativ Claude Code CLI). ### Windows (empfohlen, bequemster Weg) 1. **ZIP herunterladen:** [PBP-1.7.134.zip](https://github.com/MadGapun/PBP/archive/refs/tags/v1.7.134.zip) 2. **Entpacken:** Rechtsklick auf die ZIP → *„Alle extrahieren..."* → Zielordner waehlen (z.B. `C:\PBP`). Darin liegt ein Unterordner `PBP-...` — dort hinein wechseln. 3. **Installieren:** Doppelklick auf **`INSTALLIEREN.bat`** 4. Das Setup laedt Python, alle Pakete und Chromium herunter (~3–5 Minuten) und konfiguriert Claude Desktop. 5. Auf dem Desktop liegt jetzt eine Verknuepfung **„PBP Bewerbungs-Portal"** — Doppelklick startet das Dashboard. 6. **Claude Desktop oeffnen** (lief es schon: komplett beenden — Rechtsklick aufs Claude-Symbol unten rechts in der Taskleiste → *Beenden* — und neu starten) und tippen: **„Starte die Ersterfassung"** 7. Taucht PBP nicht auf: Claude Desktop nochmal komplett beenden und neu starten — siehe [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ). ### macOS 1. **Einmalig vorab: Python 3.11+** — am einfachsten der [Installer von python.org](https://www.python.org/downloads/) (Doppelklick), alternativ `brew install python@3.12` 2. **ZIP herunterladen** (siehe Windows-Link) und **entpacken** (Doppelklick; im ZIP liegt ein Unterordner `PBP-...`) 3. **Doppelklick auf `INSTALLIEREN.command`** 4. Falls macOS warnt („kann nicht geoeffnet werden"): Rechtsklick auf die Datei → *„Oeffnen"* → nochmal *„Oeffnen"* ### Linux ```bash git clone https://github.com/MadGapun/PBP.git cd PBP bash installer/install.sh ``` ### Update von einer aelteren Version **Einfach drüberinstallieren** — deine Daten bleiben erhalten: - Windows: `%LOCALAPPDATA%\BewerbungsAssistent\data\pbp.db` - macOS/Linux: `~/.bewerbungs-assistent/pbp.db` Schema-Upgrade läuft automatisch beim ersten Start, ein Backup wird vorher erstellt (Ordner `data\backups\`). ### Detaillierte Anleitung & Troubleshooting 📖 [Wiki → Installation](https://github.com/MadGapun/PBP/wiki/Installation) · [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ) --- ## [1.7.133] - 2026-09-25 — Ein Einstieg, ein Hinweis Dritte Welle aus dem UX-Review #1087: das erste Bild nach der Installation und das, was über dem Inhalt steht. Kein Schema-Eingriff. ### Changed - **Ein Einstieg statt drei** (#1087 A1, A2, A4). Ohne Profil lag ein Fenster „Kennlerngespräch starten“ über der Willkommenskarte, die „Lebenslauf hochladen“ empfahl, und die Kopfleiste sagte „Profil starten“. Jetzt gibt es einen Weg: 1. Lebenslauf hochladen, 2. „Gespräch mit Claude starten“ — Claude ergänzt, was fehlt. Darüber erklärt ein Kasten, wie Dashboard und Claude zusammenarbeiten (Übersicht hier, Gespräch und Texte dort, verbunden über die Zwischenablage). Der Knopf kopiert die Anleitung wie jede andere; auf „läuft“ springt der Einstieg erst, wenn Claude das Gespräch wirklich begonnen hat. Überall derselbe Startsatz: „Starte die Ersterfassung“. - **Höchstens ein Hinweis, und nur auf dem Dashboard** (#1087 B1, B5, A5). Vorher standen bis zu fünf Banner vor dem Inhalt, drei davon auf jedem Tab. Jetzt entscheidet eine feste Reihenfolge, welcher eine Hinweis erscheint: Verbindung zu Claude, Jobbörsen, Suche (erst nach sieben Tagen), bekanntes Update, lokale KI (erst nach dem Einstieg). Die anderen Tabs beginnen direkt mit ihrem Inhalt; die rote „Empfehlung: Neue Jobsuche starten“ nach einem Tag ohne Suche entfällt. - **Die Seitenleiste sagt, was gemeint ist.** „Claude Desktop: nicht verbunden“ (rot erst, wenn ein Profil existiert), „Lokale KI: nicht eingerichtet (optional)“ in Grau. „Update-Stand unbekannt“ steht leise unter der Version statt als gelbes Banner über jedem Tab; ein bekanntes Update steht dort als Link. - **Die erste Quellenauswahl passt zum Profil** (#1087 C7). Beim ersten Öffnen der Quellen wurden bisher alle Quellen ohne Anmeldung still aktiviert (im Test 29 von 34). Jetzt wählt PBP die Empfehlung für dein Profil, sagt das in einem Kasten („Passt so“ oder selbst auswählen), und die Kopfleiste zeigt die Zahl sofort. - **Ein Status je Seite** (#1087 A6, C4). Ohne Profil sagen Stellen- und Bewerbungen-Tab „Zuerst dein Profil“ und führen zum Einstieg; über einem leeren Bestand steht nicht mehr „Auf Kurs“. - **Der Installer sagt, ob alles geklappt hat** (#1087 A3). Der Abschluss ist eine Ampel: Grün nur, wenn Claude Desktop eingerichtet ist und das Dashboard läuft; sonst Gelb mit den konkreten nächsten Schritten. Er verweist auf die grüne Anzeige „Claude Desktop: verbunden“ im Dashboard. ### Gemessen Gegenprobe: 19 Mechanismen, jeder einzeln ausgebaut, jeder macht einen Test rot; ein doppelter Rückfall wurde dabei als wirkungslos erkannt und entfernt. ## 📦 Wie installiere oder aktualisiere ich PBP? **Unter Windows** brauchst du kein Git, kein Python, kein Vorwissen — nur einen ZIP-Download und einen Doppelklick. **Unter macOS** muss vorher einmalig Python 3.11+ installiert sein (siehe unten), **unter Linux** Git und Python. Voraussetzung ueberall: [Claude Desktop](https://claude.ai/download) ist installiert (Linux: alternativ Claude Code CLI). ### Windows (empfohlen, bequemster Weg) 1. **ZIP herunterladen:** [PBP-1.7.133.zip](https://github.com/MadGapun/PBP/archive/refs/tags/v1.7.133.zip) 2. **Entpacken:** Rechtsklick auf die ZIP → *„Alle extrahieren..."* → Zielordner waehlen (z.B. `C:\PBP`). Darin liegt ein Unterordner `PBP-...` — dort hinein wechseln. 3. **Installieren:** Doppelklick auf **`INSTALLIEREN.bat`** 4. Das Setup laedt Python, alle Pakete und Chromium herunter (~3–5 Minuten) und konfiguriert Claude Desktop. 5. Auf dem Desktop liegt jetzt eine Verknuepfung **„PBP Bewerbungs-Portal"** — Doppelklick startet das Dashboard. 6. **Claude Desktop oeffnen** (lief es schon: komplett beenden — Rechtsklick aufs Claude-Symbol unten rechts in der Taskleiste → *Beenden* — und neu starten) und tippen: **„Starte die Ersterfassung"** 7. Taucht PBP nicht auf: Claude Desktop nochmal komplett beenden und neu starten — siehe [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ). ### macOS 1. **Einmalig vorab: Python 3.11+** — am einfachsten der [Installer von python.org](https://www.python.org/downloads/) (Doppelklick), alternativ `brew install python@3.12` 2. **ZIP herunterladen** (siehe Windows-Link) und **entpacken** (Doppelklick; im ZIP liegt ein Unterordner `PBP-...`) 3. **Doppelklick auf `INSTALLIEREN.command`** 4. Falls macOS warnt („kann nicht geoeffnet werden"): Rechtsklick auf die Datei → *„Oeffnen"* → nochmal *„Oeffnen"* ### Linux ```bash git clone https://github.com/MadGapun/PBP.git cd PBP bash installer/install.sh ``` ### Update von einer aelteren Version **Einfach drüberinstallieren** — deine Daten bleiben erhalten: - Windows: `%LOCALAPPDATA%\BewerbungsAssistent\data\pbp.db` - macOS/Linux: `~/.bewerbungs-assistent/pbp.db` Schema-Upgrade läuft automatisch beim ersten Start, ein Backup wird vorher erstellt (Ordner `data\backups\`). ### Detaillierte Anleitung & Troubleshooting 📖 [Wiki → Installation](https://github.com/MadGapun/PBP/wiki/Installation) · [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ) --- ## [1.7.132] - 2026-09-25 — Ein Wert je Stelle Zweite Welle aus dem UX-Review #1087: dieselbe Stelle trug je nach Ort eine andere Zahl. Kein Schema-Eingriff, keine Neuberechnung des Bestands. ### Changed - **Punkte statt vier Zahlen** (#1087 C1). Stellenkarte, Dashboard, Fit-Dialog, Bewerbungs-Timeline und `stellen_anzeigen` zeigen jetzt dieselbe Zahl unter demselben Namen: **Punkte**, wo erreichbar mit Skala („7 von 26 Punkten“). Sie misst, wie gut die Anzeige deine Suchbegriffe trifft, samt deiner Regler für Begriffe. Entfernung, Remote-Anteil und Gehalt zählen nicht hinein — sie stehen als Rahmen-Daumen daneben und bestimmen nur die Reihenfolge. Bisher nannte die Karte einen Wert „Fachwert“, der diese Rahmen-Regler doch einrechnete. - **Die Faktoren im Fit-Dialog ergeben die Zahl.** Unter „Woraus sich die Punkte ergeben“ stehen nur die Faktoren, die eingehen, und sie addieren sich genau zur gezeigten Zahl; Ort, Gehalt und Arbeitsmodell stehen getrennt darunter. Hat sich der Anzeigentext oder deine Suchliste seit der letzten Bewertung geändert, sagt der Dialog das. - **Was die Punkte bedeuten, steht überall gleich** (#1087 G4). Ein Satz, an einer Stelle gepflegt, in allen Antworten von Claude, im Fit-Dialog und im Profil. Entfernt sind Aussagen wie „Fit-Score (0-20 Punkte) … wie gut sie zu deinem Profil passt“, „Dein Match liegt bei X %“ und „Score von 0-100“: der Lebenslauf geht nicht ein, und eine Prozentangabe gibt es nicht. ### Fixed - **Die erste Trefferliste sagt, was ihr noch fehlt** (#1087 C8). Nach einem Suchlauf nennt der Hinweis, wie viele neue Stellen noch ohne Volltext sind („Fertig — 44 neue Stellen, 32 ohne Volltext“), der Stellen-Tab ebenso. Ein grauer Daumen sagt jetzt auf der Karte, warum er ungeprüft ist („ungeprüft: Entfernung unbekannt“, „ungeprüft: ohne Anzeigentext“). ### Gemessen Summenprobe über 300 zufällig zusammengesetzte Anzeigen: die Faktoren im Fit-Dialog ergeben in allen Fällen genau die Punkte. Gegenprobe: 19 Mechanismen, jeder einzeln ausgebaut, jeder macht einen Test rot. ## 📦 Wie installiere oder aktualisiere ich PBP? **Unter Windows** brauchst du kein Git, kein Python, kein Vorwissen — nur einen ZIP-Download und einen Doppelklick. **Unter macOS** muss vorher einmalig Python 3.11+ installiert sein (siehe unten), **unter Linux** Git und Python. Voraussetzung ueberall: [Claude Desktop](https://claude.ai/download) ist installiert (Linux: alternativ Claude Code CLI). ### Windows (empfohlen, bequemster Weg) 1. **ZIP herunterladen:** [PBP-1.7.132.zip](https://github.com/MadGapun/PBP/archive/refs/tags/v1.7.132.zip) 2. **Entpacken:** Rechtsklick auf die ZIP → *„Alle extrahieren..."* → Zielordner waehlen (z.B. `C:\PBP`). Darin liegt ein Unterordner `PBP-...` — dort hinein wechseln. 3. **Installieren:** Doppelklick auf **`INSTALLIEREN.bat`** 4. Das Setup laedt Python, alle Pakete und Chromium herunter (~3–5 Minuten) und konfiguriert Claude Desktop. 5. Auf dem Desktop liegt jetzt eine Verknuepfung **„PBP Bewerbungs-Portal"** — Doppelklick startet das Dashboard. 6. **Claude Desktop oeffnen** (lief es schon: komplett beenden — Rechtsklick aufs Claude-Symbol unten rechts in der Taskleiste → *Beenden* — und neu starten) und tippen: **„Starte die Ersterfassung"** 7. Taucht PBP nicht auf: Claude Desktop nochmal komplett beenden und neu starten — siehe [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ). ### macOS 1. **Einmalig vorab: Python 3.11+** — am einfachsten der [Installer von python.org](https://www.python.org/downloads/) (Doppelklick), alternativ `brew install python@3.12` 2. **ZIP herunterladen** (siehe Windows-Link) und **entpacken** (Doppelklick; im ZIP liegt ein Unterordner `PBP-...`) 3. **Doppelklick auf `INSTALLIEREN.command`** 4. Falls macOS warnt („kann nicht geoeffnet werden"): Rechtsklick auf die Datei → *„Oeffnen"* → nochmal *„Oeffnen"* ### Linux ```bash git clone https://github.com/MadGapun/PBP.git cd PBP bash installer/install.sh ``` ### Update von einer aelteren Version **Einfach drüberinstallieren** — deine Daten bleiben erhalten: - Windows: `%LOCALAPPDATA%\BewerbungsAssistent\data\pbp.db` - macOS/Linux: `~/.bewerbungs-assistent/pbp.db` Schema-Upgrade läuft automatisch beim ersten Start, ein Backup wird vorher erstellt (Ordner `data\backups\`). ### Detaillierte Anleitung & Troubleshooting 📖 [Wiki → Installation](https://github.com/MadGapun/PBP/wiki/Installation) · [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ) --- ## [1.7.131] - 2026-09-25 — Was im Kernweg kaputt war Erste Welle aus dem UX-Review #1087: die Defekte, die einen Bewerber im Alltag stoppen oder in die Irre führen. Kein Schema-Eingriff. ### Fixed - **E-Mails öffnen sich wieder** (#1087 D3). Ein Klick auf eine importierte Mail im Bereich „Docs“ ließ den Bereich abstürzen. Jetzt öffnet sich die Mail mit Antworten, Zuordnen und „Bewerbung aus dieser Mail anlegen“ — und die Liste der Bewerbungen zum Zuordnen ist gefüllt. - **Termin löschen in der Timeline** nimmt den Termin wirklich aus der Ansicht; der Schnell-Import im Bewerbungen-Tab meldet keinen Fehler mehr (#1087 D4). - **Der Zusage-Dialog zeigt Umlaute** statt Zeichencodes (ein Backslash, ein u und eine Nummer) (#1087 D5). - **Sprünge landen, wo sie hinzeigen** (#1087 D6). Aus Kalender, Dokumenten, Aufgaben und Elwosa öffnet sich die Timeline der Bewerbung bzw. die Stelle — vorher landete man oben in der Liste. „Alle im Kalender“ unter „Offene Aktionen“ heißt jetzt „Alle Aufgaben“ und führt dorthin. - **Bewerbungsformulare in Bewerber-Sprache** (#1087 C6, D7). Die Felder heißen „Stellentitel“, „Firma“, „Link zur Anzeige“ und „Beworben am“ (Datumsfeld) statt `title`, `company`, `url`, `applied_at`. Die Vorgabe ist „Ich will mich bewerben“ — wer aus einer Stelle eine Bewerbung anlegt, startet nicht mehr versehentlich mit „beworben“ und dem automatischen Nachfassen. Der Knopf heißt überall „Bewerbung anlegen“. - **Nur Absagen sind nicht „nichts“** (#1087 G8). Wer bisher nur abgeschlossene Bewerbungen hat, hörte über Claude „Noch keine Bewerbungen erfasst“. Jetzt: „Keine laufenden Bewerbungen — N abgeschlossene“ samt Weg zu ihnen. - **Absage und Termin in `dokumente_verarbeiten`** (#1087 G3). Der Prompt nannte Parameter, die es nicht gibt (`rejection_reason`, `meeting_hinzufuegen(application_id, modus, beschreibung)`, den Status `erledigt_unklar`). Korrigiert, dazu sechs weitere falsche Aufrufe in Werkzeugantworten und zwei Werkzeugnamen mit Umlaut. - **„Grenze melden“ anonymisiert vor dem Link** (#1087 G6). Der vorbereitete GitHub-Link enthielt den Rohtext; Firmennamen aus deinem Bestand werden jetzt vorher ersetzt, wie bei jedem anderen Text nach draußen. - **Ein Satz ohne Bruch** (#1087 G14): „Um Ohne Profil gibt es nichts einzuordnen. zu können …“ heißt jetzt „Um dein Profil einordnen zu können, braucht PBP zuerst ein Profil.“ ### Changed - **Löschen über Claude geht immer in zwei Schritten** (#1087 G7). Ein zweites Profil wurde bisher ohne Rückfrage samt Lebenslauf, Skills und Dokumenten gelöscht. Jetzt zeigt `profil_loeschen` zuerst, was betroffen ist (Zeilen je Bereich, Dateien), und löscht erst mit `bestaetigung=True` — auch das Löschen einer Interview-Reflexion und eines Ablehnungsgrunds. Die Werkzeuge tragen dazu die Kennzeichen „nur lesend“ bzw. „löscht“, damit Claude sie unterscheiden kann. ### Gemessen Der neue Prüfer für Werkzeugaufrufe in Prompts und Antworten fand beim ersten Lauf neben den gemeldeten Fällen sechs weitere Aufrufe mit Parametern, die es nicht gibt. Gegenprobe: 19 Mechanismen, jeder einzeln ausgebaut, jeder macht einen Test rot. ## 📦 Wie installiere oder aktualisiere ich PBP? **Unter Windows** brauchst du kein Git, kein Python, kein Vorwissen — nur einen ZIP-Download und einen Doppelklick. **Unter macOS** muss vorher einmalig Python 3.11+ installiert sein (siehe unten), **unter Linux** Git und Python. Voraussetzung ueberall: [Claude Desktop](https://claude.ai/download) ist installiert (Linux: alternativ Claude Code CLI). ### Windows (empfohlen, bequemster Weg) 1. **ZIP herunterladen:** [PBP-1.7.131.zip](https://github.com/MadGapun/PBP/archive/refs/tags/v1.7.131.zip) 2. **Entpacken:** Rechtsklick auf die ZIP → *„Alle extrahieren..."* → Zielordner waehlen (z.B. `C:\PBP`). Darin liegt ein Unterordner `PBP-...` — dort hinein wechseln. 3. **Installieren:** Doppelklick auf **`INSTALLIEREN.bat`** 4. Das Setup laedt Python, alle Pakete und Chromium herunter (~3–5 Minuten) und konfiguriert Claude Desktop. 5. Auf dem Desktop liegt jetzt eine Verknuepfung **„PBP Bewerbungs-Portal"** — Doppelklick startet das Dashboard. 6. **Claude Desktop oeffnen** (lief es schon: komplett beenden — Rechtsklick aufs Claude-Symbol unten rechts in der Taskleiste → *Beenden* — und neu starten) und tippen: **„Starte die Ersterfassung"** 7. Taucht PBP nicht auf: Claude Desktop nochmal komplett beenden und neu starten — siehe [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ). ### macOS 1. **Einmalig vorab: Python 3.11+** — am einfachsten der [Installer von python.org](https://www.python.org/downloads/) (Doppelklick), alternativ `brew install python@3.12` 2. **ZIP herunterladen** (siehe Windows-Link) und **entpacken** (Doppelklick; im ZIP liegt ein Unterordner `PBP-...`) 3. **Doppelklick auf `INSTALLIEREN.command`** 4. Falls macOS warnt („kann nicht geoeffnet werden"): Rechtsklick auf die Datei → *„Oeffnen"* → nochmal *„Oeffnen"* ### Linux ```bash git clone https://github.com/MadGapun/PBP.git cd PBP bash installer/install.sh ``` ### Update von einer aelteren Version **Einfach drüberinstallieren** — deine Daten bleiben erhalten: - Windows: `%LOCALAPPDATA%\BewerbungsAssistent\data\pbp.db` - macOS/Linux: `~/.bewerbungs-assistent/pbp.db` Schema-Upgrade läuft automatisch beim ersten Start, ein Backup wird vorher erstellt (Ordner `data\backups\`). ### Detaillierte Anleitung & Troubleshooting 📖 [Wiki → Installation](https://github.com/MadGapun/PBP/wiki/Installation) · [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ) --- ## [1.7.130] - 2026-09-25 — Eine Firma, alle Bezüge, und Ollama beenden Inhaltlich das, was als v1.7.129 geplant war. Der Tag v1.7.129 wurde versehentlich auf den Entwicklungsstand (Beta-Linie) gesetzt und ist als Prerelease markiert — bitte diese Version verwenden. Stufe 1 aus #1080, dazu #1086. `firma_kontext` beantwortet die Frage „kenne ich die?“ jetzt aus dem ganzen Bestand und nicht mehr nur aus Bewerbungen und Stellen. Kein Schema-Eingriff, nichts wird geschrieben. ### Added - **`firma_kontext` findet eine Firma in jeder Rolle** (#1080). Bisher zählte nur das Feld „Firma“ einer Bewerbung. Jetzt auch: als Vermittler, als Endkunde hinter einem Vermittler, als früherer oder aktueller Arbeitgeber im Lebenslauf, als Projektkunde, als Firma eines Kontakts, in Anfragen und Korrespondenz, in Recherchen und auf der Blacklist. Jeder Treffer nennt seine Rolle — ein früherer Arbeitgeber ist kein Bewerbungsstand. - **Verweise statt Volltext.** Jeder Treffer ist eine Zeile mit dem Bereich, in dem er steht, und dem Aufruf, der die Details zeigt: Timeline der Bewerbung, Station im Lebenslauf, Kontakt, Dokument, Stelle samt Aussortier-Grund. Auch eine aussortierte Stelle zeigt, welche Rollen eine Firma ausschreibt und warum sie nicht passte. - **Warnung vor Doppelvorstellung.** Läuft eine Bewerbung über einen Vermittler bei dieser Firma, sagt `firma_kontext` das zuerst: eine direkte Bewerbung oder ein zweiter Vermittler wäre eine Doppelvorstellung. Laufen schon zwei Wege, steht es ausdrücklich da. Nennen nur die Notizen einer laufenden Vermittler-Bewerbung die Firma, kommt ein Prüfhinweis statt einer Behauptung. - **`firmen_bestand_pruefen()`** — ein Bericht, der nur liest: Firmennamen, die im Bestand verschieden geschrieben stehen, und Bewerbungen über einen Vermittler ohne eingetragenen Endkunden, deren Notizen eine bekannte Firma nennen. Nachgetragen wird mit `bewerbung_bearbeiten(endkunde=...)`, und zwar vom Menschen. - **Ollama beenden** (#1086). Ollama hält das Modell im Arbeitsspeicher, auch wenn PBP stundenlang nicht mehr benutzt wird. Neu im Einstellungen-Tab unter „Lokale KI“: - ein Knopf **„Ollama jetzt beenden“** (mit Rückfrage), - **„Desktop-Verknüpfung anlegen“** — die Verknüpfung „Ollama beenden“ fragt vor dem Beenden noch einmal nach, - die Einstellung **„Beim Beenden von PBP“**: weiterlaufen lassen (Vorgabe) / beenden, wenn PBP es gestartet hat / immer beenden. Die Rückfrage für „immer“ kommt beim Einschalten: PBP endet meist mit Claude Desktop, und dann kann niemand mehr antworten. Unter Windows wird auch die Ollama-Tray-App beendet, sonst startet sie den Dienst gleich wieder. Läuft Ollama unter Linux als Systemdienst, sagt PBP das, statt still nichts zu tun. Über Claude: `ollama_beenden(aktion=...)`. ### Changed - **Namensabgleich über Wörter statt Buchstabenfolgen.** Rechtsform, Umlaut-Schreibweise, Bindestrich und Groß-/Kleinschreibung spielen keine Rolle mehr; ein Namensteil findet die ganze Firma, aber „Nord“ findet nicht mehr „Nordwerk“. Abkürzungen aus Anfangsbuchstaben werden erkannt und als schwächster Abgleich gekennzeichnet. ### Gemessen An einer Kopie eines echten Bestands: von 102 Firmen aus Bewerbungen tragen 70 einen Bezug außerhalb der Bewerbungen (Kontakte, Korrespondenz, Recherchen, Blacklist, Lebenslauf), 12 Bewerbungen laufen über einen Vermittler mit eingetragenem Endkunden, 2 nennen den Endkunden nur in den Notizen. ### Offen - Stufe 2 von #1080 — ein Firmen-Stammsatz, der Schreibweisen zusammenführt — braucht eine Nutzerentscheidung. ## 📦 Wie installiere oder aktualisiere ich PBP? **Unter Windows** brauchst du kein Git, kein Python, kein Vorwissen — nur einen ZIP-Download und einen Doppelklick. **Unter macOS** muss vorher einmalig Python 3.11+ installiert sein (siehe unten), **unter Linux** Git und Python. Voraussetzung ueberall: [Claude Desktop](https://claude.ai/download) ist installiert (Linux: alternativ Claude Code CLI). ### Windows (empfohlen, bequemster Weg) 1. **ZIP herunterladen:** [PBP-1.7.130.zip](https://github.com/MadGapun/PBP/archive/refs/tags/v1.7.130.zip) 2. **Entpacken:** Rechtsklick auf die ZIP → *„Alle extrahieren..."* → Zielordner waehlen (z.B. `C:\PBP`). Darin liegt ein Unterordner `PBP-...` — dort hinein wechseln. 3. **Installieren:** Doppelklick auf **`INSTALLIEREN.bat`** 4. Das Setup laedt Python, alle Pakete und Chromium herunter (~3–5 Minuten) und konfiguriert Claude Desktop. 5. Auf dem Desktop liegt jetzt eine Verknuepfung **„PBP Bewerbungs-Portal"** — Doppelklick startet das Dashboard. 6. **Claude Desktop oeffnen** (lief es schon: komplett beenden — Rechtsklick aufs Claude-Symbol unten rechts in der Taskleiste → *Beenden* — und neu starten) und tippen: **„Starte die Ersterfassung"** 7. Taucht PBP nicht auf: Claude Desktop nochmal komplett beenden und neu starten — siehe [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ). ### macOS 1. **Einmalig vorab: Python 3.11+** — am einfachsten der [Installer von python.org](https://www.python.org/downloads/) (Doppelklick), alternativ `brew install python@3.12` 2. **ZIP herunterladen** (siehe Windows-Link) und **entpacken** (Doppelklick; im ZIP liegt ein Unterordner `PBP-...`) 3. **Doppelklick auf `INSTALLIEREN.command`** 4. Falls macOS warnt („kann nicht geoeffnet werden"): Rechtsklick auf die Datei → *„Oeffnen"* → nochmal *„Oeffnen"* ### Linux ```bash git clone https://github.com/MadGapun/PBP.git cd PBP bash installer/install.sh ``` ### Update von einer aelteren Version **Einfach drüberinstallieren** — deine Daten bleiben erhalten: - Windows: `%LOCALAPPDATA%\BewerbungsAssistent\data\pbp.db` - macOS/Linux: `~/.bewerbungs-assistent/pbp.db` Schema-Upgrade läuft automatisch beim ersten Start, ein Backup wird vorher erstellt (Ordner `data\backups\`). ### Detaillierte Anleitung & Troubleshooting 📖 [Wiki → Installation](https://github.com/MadGapun/PBP/wiki/Installation) · [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ) --- ## [1.7.129] - 2026-09-25 — nicht verwenden Versehentlich vom Entwicklungsstand (Beta-Linie) getaggt. Der geplante Inhalt steht in v1.7.130. --- ## [1.7.128] - 2026-09-25 — Firma, Ort und Region aus der Quelle Die Restpunkte aus drei Quellen-Meldungen (#1040, #1041, #1042). Ihr Kern war mit v1.7.101 bis v1.7.108 behoben; offen standen zwei Dinge, die alle drei betreffen. ### Fixed - **Das Nachladen uebernimmt Firma und Ort aus der Detailseite** (#1040 Punkt 2, #1041, #1042). Die Detailseiten von stellenanzeigen.de, Jobware und ingenieur.de tragen strukturierte Stellendaten mit Arbeitgeber und Arbeitsort; PBP holte die Seite und nahm nur den Text. Stellen mit „Unbekannt“ und ohne Ort blieben so, bis ein Suchlauf sie zufaellig wiederfand — ohne Ort gibt es keine Entfernung, ohne Firma greifen Blacklist und Firmen-Abgleich nicht. Jetzt fuellt jedes Nachladen (Knopf, Werkzeug, Automatik, Mengenweg) fehlende Firma und fehlenden Ort, berechnet die Entfernung und bewertet neu. Vorhandene Angaben werden nie ueberschrieben. ### Added - **`beschreibungen_nachladen_bestand(umfang='ohne_firma_ort')`** (#1040 Punkt 5, #1042 Punkt 4): zieht Firma und Ort fuer den Altbestand nach, auch wenn der Anzeigentext schon vollstaendig ist — der Text bleibt dann unveraendert. - **Region bei Jobware und ingenieur.de** (#1041 Punkt 4, #1042 Punkt 3). Steht in den Suchkriterien eine Region, fragen beide Boersen zuerst dort und danach bundesweit. Gemessen am 25.09.: bei Jobware liegen mit Region 15 von 20 Treffern dort, bundesweit 2 von 20, und beide Seiten teilen nur ein bis zwei Stellen. Bei ingenieur.de wirkt die Region als enger Filter (20 Treffer bundesweit, 9 bzw. 1 mit Region) — deshalb zusaetzlich und nicht statt: eine Region darf keine Stelle kosten. Ohne eingetragene Region bleibt alles wie bisher. ### Hinweis - **stellenanzeigen.de beruecksichtigt keine Region** (#1040 Punkt 4) — gemessen am 13.09.: eine Stadt statt „Deutschland“ liefert dieselben bundesweiten Treffer. Die Entfernung sortiert diese Stellen trotzdem richtig ein, sobald sie einen Ort tragen. - Ein Suchlauf mit Region stellt bei Jobware und ingenieur.de doppelt so viele Anfragen wie vorher. --- ## 📦 Wie installiere oder aktualisiere ich PBP? **Unter Windows** brauchst du kein Git, kein Python, kein Vorwissen — nur einen ZIP-Download und einen Doppelklick. **Unter macOS** muss vorher einmalig Python 3.11+ installiert sein (siehe unten), **unter Linux** Git und Python. Voraussetzung ueberall: [Claude Desktop](https://claude.ai/download) ist installiert (Linux: alternativ Claude Code CLI). ### Windows (empfohlen, bequemster Weg) 1. **ZIP herunterladen:** [PBP-1.7.128.zip](https://github.com/MadGapun/PBP/archive/refs/tags/v1.7.128.zip) 2. **Entpacken:** Rechtsklick auf die ZIP → *„Alle extrahieren..."* → Zielordner waehlen (z.B. `C:\PBP`). Darin liegt ein Unterordner `PBP-...` — dort hinein wechseln. 3. **Installieren:** Doppelklick auf **`INSTALLIEREN.bat`** 4. Das Setup laedt Python, alle Pakete und Chromium herunter (~3–5 Minuten) und konfiguriert Claude Desktop. 5. Auf dem Desktop liegt jetzt eine Verknuepfung **„PBP Bewerbungs-Portal"** — Doppelklick startet das Dashboard. 6. **Claude Desktop oeffnen** (lief es schon: komplett beenden — Rechtsklick aufs Claude-Symbol unten rechts in der Taskleiste → *Beenden* — und neu starten) und tippen: **„Starte die Ersterfassung"** 7. Taucht PBP nicht auf: Claude Desktop nochmal komplett beenden und neu starten — siehe [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ). ### macOS 1. **Einmalig vorab: Python 3.11+** — am einfachsten der [Installer von python.org](https://www.python.org/downloads/) (Doppelklick), alternativ `brew install python@3.12` 2. **ZIP herunterladen** (siehe Windows-Link) und **entpacken** (Doppelklick; im ZIP liegt ein Unterordner `PBP-...`) 3. **Doppelklick auf `INSTALLIEREN.command`** 4. Falls macOS warnt („kann nicht geoeffnet werden"): Rechtsklick auf die Datei → *„Oeffnen"* → nochmal *„Oeffnen"* ### Linux ```bash git clone https://github.com/MadGapun/PBP.git cd PBP bash installer/install.sh ``` ### Update von einer aelteren Version **Einfach drüberinstallieren** — deine Daten bleiben erhalten: - Windows: `%LOCALAPPDATA%\BewerbungsAssistent\data\pbp.db` - macOS/Linux: `~/.bewerbungs-assistent/pbp.db` Schema-Upgrade läuft automatisch beim ersten Start, ein Backup wird vorher erstellt (Ordner `data\backups\`). ### Detaillierte Anleitung & Troubleshooting 📖 [Wiki → Installation](https://github.com/MadGapun/PBP/wiki/Installation) · [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ) --- ## [1.7.127] - 2026-09-24 — Was die Schwelle vergleicht, was wiederkommt, was in der Mail steht Vier Meldungen aus zwei Tagen (#1079, #1082, #1083, #1084). Zwei davon haben eine Stelle an der falschen Stelle stehen lassen: eine fachlich starke Stelle verschwand, eine zusammengefuehrte kam zurueck. ### Fixed - **Die Score-Schwelle vergleicht den Fachwert** (#1082). Eine fachlich starke Stelle in rund 450 km verschwand aus der Liste. Beim Nachsehen waren es vier Ursachen: die Scoring-Regler fuer Entfernung, Remote-Anteil und Gehalt flossen in den Wert, gegen den die Schwelle hielt, und der wurde bei 0 gekappt; die Schwelle las die rohe Zahl und uebersah die gewaehlte Stufe aus v1.7.124; der Stellen-Tab wandte sie gar nicht an, obwohl die Einstellung „blendet in der Liste aus“ versprach; und der Fachdaumen las denselben vermischten Wert. Jetzt blenden Entfernung, Remote und Gehalt keine Stelle mehr aus — sie stehen im Rahmendaumen und wirken auf die Reihenfolge —, die Schwelle kommt aus dem Nadeloehr (Stufe vor Zahl), und ein Wert unter 0 bleibt unter 0. - **Zusammengefuehrte Stellen kommen nicht zurueck** (#1084). Nach `stelle_mergen` legte der naechste Suchlauf die aufgeloeste Stelle neu an: sie war ohne Spur geloescht, und der Import verglich nur mit der URL der ersten Anzeige. Jetzt hinterlaesst das Zusammenfuehren einen Grabstein, die URLs beider Anzeigen stehen am Master, und der Import vergleicht gegen alle bekannten URLs einer Stelle. Ein Wiederfund wird nicht angelegt, sondern am Master vermerkt („erneut gesehen am …“, mit Quelle) — die Anzeige laeuft also weiter. Die manuelle Anlage ist ausgenommen. ### Added - **`stellen_anzeigen(ohne_schwelle=True)`** liefert alle aktiven Stellen, die unter der Schwelle mit `unter_schwelle: true`. Der Hinweis „N weitere unter der Schwelle“ sagt, was die Schwelle vergleicht, und nennt, wie viele Stellen bis v1.7.126 allein wegen Entfernung, Remote oder Gehalt verborgen gewesen waeren. - **Schalter „Unter Schwelle ausblenden“ im Stellen-Tab**, Vorgabe an, mit der Zahl der ausgeblendeten Stellen und einem Klick aus. - **Ein naeherer Standort aus der Anzeige zaehlt** (#1082). Nennt eine Anzeige „Standorte: … oder “ (auch Einsatzort, Arbeitsort, Dienstort, Niederlassung, „hybrid von“), rechnet die Entfernung mit dem naechsten davon, und Liste und Fit-Analyse nennen ihn. **Grenze:** die Koordinaten kommen aus den Orten, die PBP im Bestand schon kennt — ein Score haengt nie an einer Netzabfrage. Ein Ort, den PBP noch nie gesehen hat, zaehlt nicht. - **`dokument_lesen(dokument_id, ab_zeichen=0)`** (#1083): der Text eines Dokuments, seitenweise, ohne Umweg ueber die Datenbank. `bewerbung_details` zeigt bei Absagen und Recruiter-Mails den Textanfang, und die Repost-Warnung nennt den dokumentierten Absagegrund im Wortlaut — aus der Bewerbung oder aus der verknuepften Absagemail —, statt nur „Ablehnungsgrund dokumentiert: ja“. - **`stellen_dubletten_pruefen`** meldet zusammengefuehrte Stellen, die wieder aktiv im Bestand stehen (#1084), nur lesend. Fuer Zusammenfuehrungen vor v1.7.127 gibt es keine Spur; die findet nur der Dublettenvergleich. - **Der Satz im Onboarding-Hinweis ist kopierbar** (#1079): ein Klick legt ihn in die Zwischenablage, mit demselben Toast wie jeder andere PBP-Befehl. Der Hinweis bleibt danach stehen. ### Hinweis Die Scores in der Liste koennen nach dem Update negativ sein — das ist gewollt: eine Stelle bei -8 soll nicht aussehen wie eine bei 0. --- ## 📦 Wie installiere oder aktualisiere ich PBP? **Unter Windows** brauchst du kein Git, kein Python, kein Vorwissen — nur einen ZIP-Download und einen Doppelklick. **Unter macOS** muss vorher einmalig Python 3.11+ installiert sein (siehe unten), **unter Linux** Git und Python. Voraussetzung ueberall: [Claude Desktop](https://claude.ai/download) ist installiert (Linux: alternativ Claude Code CLI). ### Windows (empfohlen, bequemster Weg) 1. **ZIP herunterladen:** [PBP-1.7.127.zip](https://github.com/MadGapun/PBP/archive/refs/tags/v1.7.127.zip) 2. **Entpacken:** Rechtsklick auf die ZIP → *„Alle extrahieren..."* → Zielordner waehlen (z.B. `C:\PBP`). Darin liegt ein Unterordner `PBP-...` — dort hinein wechseln. 3. **Installieren:** Doppelklick auf **`INSTALLIEREN.bat`** 4. Das Setup laedt Python, alle Pakete und Chromium herunter (~3–5 Minuten) und konfiguriert Claude Desktop. 5. Auf dem Desktop liegt jetzt eine Verknuepfung **„PBP Bewerbungs-Portal"** — Doppelklick startet das Dashboard. 6. **Claude Desktop oeffnen** (lief es schon: komplett beenden — Rechtsklick aufs Claude-Symbol unten rechts in der Taskleiste → *Beenden* — und neu starten) und tippen: **„Starte die Ersterfassung"** 7. Taucht PBP nicht auf: Claude Desktop nochmal komplett beenden und neu starten — siehe [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ). ### macOS 1. **Einmalig vorab: Python 3.11+** — am einfachsten der [Installer von python.org](https://www.python.org/downloads/) (Doppelklick), alternativ `brew install python@3.12` 2. **ZIP herunterladen** (siehe Windows-Link) und **entpacken** (Doppelklick; im ZIP liegt ein Unterordner `PBP-...`) 3. **Doppelklick auf `INSTALLIEREN.command`** 4. Falls macOS warnt („kann nicht geoeffnet werden"): Rechtsklick auf die Datei → *„Oeffnen"* → nochmal *„Oeffnen"* ### Linux ```bash git clone https://github.com/MadGapun/PBP.git cd PBP bash installer/install.sh ``` ### Update von einer aelteren Version **Einfach drüberinstallieren** — deine Daten bleiben erhalten: - Windows: `%LOCALAPPDATA%\BewerbungsAssistent\data\pbp.db` - macOS/Linux: `~/.bewerbungs-assistent/pbp.db` Schema-Upgrade läuft automatisch beim ersten Start, ein Backup wird vorher erstellt (Ordner `data\backups\`). ### Detaillierte Anleitung & Troubleshooting 📖 [Wiki → Installation](https://github.com/MadGapun/PBP/wiki/Installation) · [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ) --- ## [1.7.126] - 2026-09-23 — Was angelegt wird, was gesucht wird, was bleibt Sieben Meldungen aus zwei Tagen (#1071 bis #1077). Drei davon betreffen Daten, die still verlorengingen oder falsch standen; eine betrifft die Einordnung aus v1.7.125. ### Fixed - **`C++`, `C/C++` und Skills mit Klammer-Aufzaehlung werden angelegt** (#1073). Die Pruefung auf Satzfragmente aus der Dokumentenextraktion lief auf jedem Anlageweg und verwarf `C++` (zu viele Sonderzeichen) und `Programmierung (Perl, C++, COBOL, Java, PHP, C#)` (zu viele Leerzeichen). Drei Wege meldeten dabei trotzdem „gespeichert“ mit leerer ID, und `skills_bereinigen` loeschte dieselben Skills im Altbestand. Jetzt gelten fuer eine ausdrueckliche Eingabe nur harte Regeln (leer, URL, Formatierungsreste, reine Ziffern oder Sonderzeichen); die Fragment-Pruefung bleibt der Extraktion vorbehalten, zaehlt Klammerinhalte nicht mehr als Satz und kennt die gaengigen Kurzbezeichner. **Kein Erfolg ohne ID:** jede Abweisung nennt die Regel, die gegriffen hat, `hinzufuegen_bulk` zaehlt angelegt und verworfen getrennt, und `skills_bereinigen` nennt je Kandidat den Grund, bevor etwas geloescht wird. - **`profil_bearbeiten(..., aktion='hinzufuegen_bulk')` nimmt eine Liste an.** Das Werkzeug erklaerte `daten` als Objekt; die Liste, die sein eigener Text verspricht, wies das Schema ab, bevor der erste Befehl lief. - **`stelle_mergen` respektiert `'master'` auch bei leerem Feld** (#1077). Ein leeres Feld im Master wurde immer aus dem Duplikat gefuellt, auch gegen eine ausdrueckliche Strategie — eine bewusst leere Entfernung stand danach mit 386 km im Bestand. Dazu drei Befunde beim Nachsehen: Entfernung und Koordinaten folgen jetzt dem Ort (kommt `location` vom Master, kommen auch sie von dort), `0 km` gilt als Wert und nicht als Leerfeld, und das Zusammenfuehren haengt **alle** Bezuege um — Verknuepfungen zu Bewerbungen, Fundstellen und Kontakt-Verweise zeigten vorher weiter auf die geloeschte Stelle. Die Vorschau nennt, was ohne Rueckfrage uebernommen wird. Und nach einem zweiten Beleg: ein **geschaetztes** Gehalt des Duplikats wird nie ohne Rueckfrage uebernommen — es stand sonst an einer Stelle mit laufender Bewerbung und sah aus wie eine Angabe des Vermittlers, weil das Schaetz-Kennzeichen gar nicht mitging. - **Die Einordnung liest das Ziel, nicht nur den Lebenslauf** (#1074, Folge von v1.7.125). Ein Quereinsteiger aus dem Einzelhandel, der Sachbearbeitung sucht, bekam Feld Handel, Niveau Experte und Form freiberuflich — letztere aus zwei Selbstaendigkeiten, die 2018 endeten. Jetzt zaehlen Kurzprofil, Jobtitel und MUSS-Suchbegriffe als Ziel; es ueberstimmt den Lebenslauf aber nur, wenn dessen Feld im Ziel gar nicht vorkommt. Die Form kommt aus der Job-Praeferenz, dann aus der Anstellungsart der aktuellen Stationen; beendete zaehlen nicht, und `festanstellung` wird ueberhaupt vergeben. Bei einem Quereinstieg ist die Fuehrungsstufe des alten Berufs gedeckelt. `profil_einordnung` nennt fuer jede Angabe ihre Grundlage. - **Remote heisst bei JobSpy-Treffern nicht mehr „irgendwo steht remote“** (#1072). JobSpy setzt `is_remote`, sobald das Wort im Text steht — auch bei „bis zu 50 % remote“; PBP machte daraus „vollstaendig remote“, und die Entfernung fiel weg. Jetzt entscheidet PBPs eigene Erkennung auf dem ganzen Anzeigentext. Sie selbst ist geschaerft: Anteile unter 100 % und Homeoffice als Angebot sind `hybrid`, „bundesweit“ ist kein Remote-Signal mehr. Der Bestand der JobSpy-Quellen wird beim ersten Start einmal nachgezogen. - **Angelegte LinkedIn-Stellen mit Hinweis zaehlen als angelegt.** Der Trichter von `linkedin_treffer_uebernehmen` fuehrte jede Antwort mit Warnung als uebersprungen — seit v1.7.122 auch eine Stelle, die angelegt wurde und nur eine fruehere Bewerbung nennt. ### Changed - **Gesucht wird mit den MUSS-Begriffen, nicht mit PLUS** (#1071). PLUS-Begriffe wie „Senior“, „Aufbau“ oder „Strategie“ holten als Einzelsuche fast nur Beifang (jobspy_indeed: 0,4 % Bewerbungsquote). Sie bleiben Bewertungsbegriffe. Nur ohne MUSS-Liste tragen sie die Suche. Gibt es ein **Suchprofil fuer Indeed**, sucht auch die automatische Suche mit dessen erprobten Titelsuchen. Jede Fundstelle merkt sich den Suchbegriff, der sie gebracht hat. ### Added - **Hinweis auf umbenannte Reposts und Vermittler-Bewerbungen** (#1076). Beim Anlegen vergleicht PBP den Anzeigentext mit Stellen derselben Firma — ohne Firmen-Textbausteine, die in mehreren Anzeigen stehen — und meldet ab 50 % Uebereinstimmung einen moeglichen Repost. Ein Portal-Vorspann wie „Freelancer Opportunity -“ zaehlt nicht mehr zum Titel, und eine laufende Bewerbung wird auch dann gemeldet, wenn sie eine andere URL traegt — mit derselben Regel, mit der `fit_analyse` den Fall schon fand. Eine laufende Bewerbung ueber einen Vermittler, die diese Firma als Endkunden nennt, wird ebenfalls gemeldet. Beides blockt nicht. Der LinkedIn-Trichter nimmt die Zahl der gelesenen und verworfenen Volltexte entgegen. - **Stellen einer Quelle endgueltig entfernen** (#1075): `stellen_entfernen_nach_quelle(quelle, dry_run=True)` und beim Abwaehlen einer Quelle im Dashboard die Frage „Auch entfernen?“. Stellen mit Bewerbung und Stellen, die eine gewaehlte Quelle ebenfalls gefunden hat, bleiben; Fundstellen und Verweise gehen mit. - **Entfernung von Hand setzen:** `stelle_bearbeiten(entfernung_km=...)`, auch 0, und `entfernung_zuruecksetzen=True`. Ein von Hand gesetzter Wert ueberlebt den naechsten Suchlauf. ### Hinweis Nach dem Update lohnt `scores_neu_berechnen()`: der Remote-Grad der JobSpy-Stellen ist nachgezogen, der gespeicherte Rahmenwert noch nicht. --- ## 📦 Wie installiere oder aktualisiere ich PBP? **Unter Windows** brauchst du kein Git, kein Python, kein Vorwissen — nur einen ZIP-Download und einen Doppelklick. **Unter macOS** muss vorher einmalig Python 3.11+ installiert sein (siehe unten), **unter Linux** Git und Python. Voraussetzung ueberall: [Claude Desktop](https://claude.ai/download) ist installiert (Linux: alternativ Claude Code CLI). ### Windows (empfohlen, bequemster Weg) 1. **ZIP herunterladen:** [PBP-1.7.126.zip](https://github.com/MadGapun/PBP/archive/refs/tags/v1.7.126.zip) 2. **Entpacken:** Rechtsklick auf die ZIP → *„Alle extrahieren..."* → Zielordner waehlen (z.B. `C:\PBP`). Darin liegt ein Unterordner `PBP-...` — dort hinein wechseln. 3. **Installieren:** Doppelklick auf **`INSTALLIEREN.bat`** 4. Das Setup laedt Python, alle Pakete und Chromium herunter (~3–5 Minuten) und konfiguriert Claude Desktop. 5. Auf dem Desktop liegt jetzt eine Verknuepfung **„PBP Bewerbungs-Portal"** — Doppelklick startet das Dashboard. 6. **Claude Desktop oeffnen** (lief es schon: komplett beenden — Rechtsklick aufs Claude-Symbol unten rechts in der Taskleiste → *Beenden* — und neu starten) und tippen: **„Starte die Ersterfassung"** 7. Taucht PBP nicht auf: Claude Desktop nochmal komplett beenden und neu starten — siehe [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ). ### macOS 1. **Einmalig vorab: Python 3.11+** — am einfachsten der [Installer von python.org](https://www.python.org/downloads/) (Doppelklick), alternativ `brew install python@3.12` 2. **ZIP herunterladen** (siehe Windows-Link) und **entpacken** (Doppelklick; im ZIP liegt ein Unterordner `PBP-...`) 3. **Doppelklick auf `INSTALLIEREN.command`** 4. Falls macOS warnt („kann nicht geoeffnet werden"): Rechtsklick auf die Datei → *„Oeffnen"* → nochmal *„Oeffnen"* ### Linux ```bash git clone https://github.com/MadGapun/PBP.git cd PBP bash installer/install.sh ``` ### Update von einer aelteren Version **Einfach drüberinstallieren** — deine Daten bleiben erhalten: - Windows: `%LOCALAPPDATA%\BewerbungsAssistent\data\pbp.db` - macOS/Linux: `~/.bewerbungs-assistent/pbp.db` Schema-Upgrade läuft automatisch beim ersten Start, ein Backup wird vorher erstellt (Ordner `data\backups\`). ### Detaillierte Anleitung & Troubleshooting 📖 [Wiki → Installation](https://github.com/MadGapun/PBP/wiki/Installation) · [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ) --- ## [1.7.125] - 2026-09-21 — Drei Angaben statt eines Schluessels Welche Jobboersen PBP dir empfiehlt, haengt daran, wie es dein Profil einordnet. Diese Einordnung beantwortete bisher drei Fragen in einer Liste — und der erste Treffer gewann. ### Changed - **Berufsfeld, Anforderungsniveau und Beschaeftigungsform sind jetzt drei getrennte Angaben** (#1070). Die fuenfzehn Cluster mischten sie: `health` sagt, in welchem Feld du arbeitest, `tech_senior` zusaetzlich auf welcher Stufe, `freelance` und `student` die Form. Und die Pruefung kehrte beim **ersten** Treffer zurueck, wer mehrfach passte verlor alles andere: | Profil | alter Schluessel | was verlorenging | |---|---|---| | Freiberuflicher Senior-Entwickler | `freelance` | die Tech-Quellen | | Pflegedienstleitung, 12 Jahre | `executive` | die Gesundheits-Quellen | | Dualer Student im Handwerk | `student` | die Handwerks-Quellen | **Auf einer Kopie des eigenen Bestands gemessen**, und es ist genau dieser Fall: das Profil galt als `freelance` und bekam **fuenf** Quellen. Mit den drei Angaben (Ingenieurwesen, Spezialist, freiberuflich) sind es **dreizehn** — acht Fachquellen, darunter ingenieur.de, waren an die Erst-Treffer-Regel verlorengegangen. - **Die Empfehlung kommt aus der Kombination.** Das Feld bestimmt die Fach- und Regionalportale, die Form schaltet Freelance- oder Studenten-Boersen **dazu**, das Niveau ab Spezialist die Konzern-Quellen. An jeder empfohlenen Quelle steht in der Oberflaeche, woher sie kommt. - **Sechzehn Felder statt der alten Sammelbecken**, jedes mit seinem Berufsbereich der Klassifikation der Berufe 2010 der Bundesagentur fuer Arbeit. Neu dabei sind Landwirtschaft, Produktion und Fertigung, Verkehr und Logistik getrennt vom Handel, Schutz und Sicherheit, Recht sowie Wissenschaft und Forschung — sie landeten bisher alle in „Gemischt / Unbekannt". ### Fixed - **`leiter` steckt als Teilstring in `Begleiter`.** Schulbegleiterin, Alltagsbegleiterin, Integrationsbegleiter und Reisebegleiter galten ab zehn Berufsjahren als **Fuehrungskraft** und bekamen Konzern-Boards empfohlen; dasselbe fuer „GF-Assistenz" ueber das Kuerzel `gf`. Das stand in keinem Bericht und ist dieselbe Klasse wie „ki" in „Kita" (v1.7.29) — sie trifft wieder genau die Berufe, fuer die PBP ausdruecklich mitgebaut ist. - **Das Anforderungsniveau ist ohne Berufsbezeichnung im Titel auf „Fachkraft" gedeckelt.** Es beschreibt die Komplexitaet der Taetigkeit, nicht die Dauer: fuenfzehn Jahre am Steuer machen keinen Spezialisten. Ohne diesen Deckel bekamen Sicherheitsmitarbeiter, Berufskraftfahrer und Produktionsmitarbeiter ab sieben Berufsjahren Konzern-Boards empfohlen. Die Angabe `niveau_grundlage` sagt, ob der Wert aus einer Bezeichnung stammt oder nur aus den Berufsjahren. ### Added - **`profil_einordnung()`** — Feld, Berufsbereich, Niveau samt Grundlage, Form, Berufsjahre, die weiteren getroffenen Felder und die empfohlenen Quellen mit ihrer Herkunft. Die Einordnung war bis hierher ueber **gar kein** Werkzeug erreichbar; es gab sie nur im Dashboard und intern, obwohl die Wiki-Seite einen Weg ueber Claude versprach. ### Hinweis fuer Entwickler Die fachliche Einordnung steht in `services/berufsfeld.py`; `profile_classifier` ist eine abgeleitete Sicht und bildet daraus weiter den einen Schluessel, auf den Elwosa-Linien und aeltere Auswertungen zeigen. `PROFILE_TYPE_CLUSTERS` ist ersatzlos entfallen — eine Liste je Schluessel neben der Kombination waere die Bauform gewesen, die dieses Projekt vierzehnmal gekostet hat. Zwei Eigenheiten der alten Schluessel bleiben und sind Erbe, keine Systematik: `tech_junior`/`tech_senior` trennen weiter nach Berufsjahren, und `engineering_senior` ist der einzige Ingenieur-Schluessel — sein Namenszusatz sagt dort nichts aus. --- ## 📦 Wie installiere oder aktualisiere ich PBP? **Unter Windows** brauchst du kein Git, kein Python, kein Vorwissen — nur einen ZIP-Download und einen Doppelklick. **Unter macOS** muss vorher einmalig Python 3.11+ installiert sein (siehe unten), **unter Linux** Git und Python. Voraussetzung ueberall: [Claude Desktop](https://claude.ai/download) ist installiert (Linux: alternativ Claude Code CLI). ### Windows (empfohlen, bequemster Weg) 1. **ZIP herunterladen:** [PBP-1.7.125.zip](https://github.com/MadGapun/PBP/archive/refs/tags/v1.7.125.zip) 2. **Entpacken:** Rechtsklick auf die ZIP → *„Alle extrahieren..."* → Zielordner waehlen (z.B. `C:\PBP`). Darin liegt ein Unterordner `PBP-...` — dort hinein wechseln. 3. **Installieren:** Doppelklick auf **`INSTALLIEREN.bat`** 4. Das Setup laedt Python, alle Pakete und Chromium herunter (~3–5 Minuten) und konfiguriert Claude Desktop. 5. Auf dem Desktop liegt jetzt eine Verknuepfung **„PBP Bewerbungs-Portal"** — Doppelklick startet das Dashboard. 6. **Claude Desktop oeffnen** (lief es schon: komplett beenden — Rechtsklick aufs Claude-Symbol unten rechts in der Taskleiste → *Beenden* — und neu starten) und tippen: **„Starte die Ersterfassung"** 7. Taucht PBP nicht auf: Claude Desktop nochmal komplett beenden und neu starten — siehe [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ). ### macOS 1. **Einmalig vorab: Python 3.11+** — am einfachsten der [Installer von python.org](https://www.python.org/downloads/) (Doppelklick), alternativ `brew install python@3.12` 2. **ZIP herunterladen** (siehe Windows-Link) und **entpacken** (Doppelklick; im ZIP liegt ein Unterordner `PBP-...`) 3. **Doppelklick auf `INSTALLIEREN.command`** 4. Falls macOS warnt („kann nicht geoeffnet werden"): Rechtsklick auf die Datei → *„Oeffnen"* → nochmal *„Oeffnen"* ### Linux ```bash git clone https://github.com/MadGapun/PBP.git cd PBP bash installer/install.sh ``` ### Update von einer aelteren Version **Einfach drüberinstallieren** — deine Daten bleiben erhalten: - Windows: `%LOCALAPPDATA%\BewerbungsAssistent\data\pbp.db` - macOS/Linux: `~/.bewerbungs-assistent/pbp.db` Schema-Upgrade läuft automatisch beim ersten Start, ein Backup wird vorher erstellt (Ordner `data\backups\`). ### Detaillierte Anleitung & Troubleshooting 📖 [Wiki → Installation](https://github.com/MadGapun/PBP/wiki/Installation) · [FAQ](https://github.com/MadGapun/PBP/wiki/FAQ) --- ## [1.7.124] - 2026-09-21 — Eine Stufe statt einer Zahl Die Score-Schwelle war eine Zahl ohne Bezugsgroesse. Jetzt waehlst du eine benannte Stufe, und die Zahl dahinter rechnet PBP aus deinem eigenen Bestand. ### Changed - **Beide Schwellen als benannte Stufen** (#1063). `min_score_schwelle` wirkt beim **Speichern** waehrend der Suche, `schwellenwert/auto_ignore` blendet in der **Liste** aus — beide waren Zahlen, und drei Dinge sprachen dagegen. Erstens sagt die Zahl nichts: ueber 2.780 Stellen gemessen liegt der Median bei 1, das obere Zehntel bei 21, der hoechste Wert bei 110 — die eingestellte 7 sah nach "eher niedrig" aus und verwarf 82 % des Bestands. Zweitens verschiebt sie sich unter dir: seit der Begriffsgruppierung (v1.7.66) faellt der Score fuer dieselbe Anzeige niedriger aus, eine feste Zahl filtert danach schaerfer, ohne dass du sie angefasst hast. Drittens liegt direkt ueber der Vorgabe eine Klippe: von Schwelle 1 auf 2 fiel der sichtbare Bestand von 1.710 auf 846 Stellen. Sechs Stufen — **Alles zeigen** (Vorgabe), Offensichtliches aus, Locker, Ausgewogen, Streng, Nur Volltreffer. Gespeichert wird die Stufe, gerechnet wird beim Lesen: die Wahl bleibt damit dieselbe, auch wenn sich die Zahl dahinter verschiebt. - **Die Vorgabe ist gemessen, nicht gesetzt.** Was die Speicher-Schwelle verwirft, kommt nie in den Bestand und ist unwiederbringlich. Auf einer Bestandskopie (57 bewertbare Bewerbungen, 2.765 Aussortierte) haette **schon die mildeste Stufe 4 von 57 Stellen verworfen, auf die sich der Mensch tatsaechlich beworben hat** (7 %); Locker 12 %, Ausgewogen 21 %, Streng 49 %, Nur Volltreffer 74 %. Deshalb steht diese Zahl neben jeder Stufe — "wie viele bleiben sichtbar" allein zeigt nur die eine Haelfte der Rechnung und laesst jede Stufe billig aussehen. ### Added - **Der Listen-Bereich hat zum ersten Mal eine Oberflaeche.** `schwellenwert/auto_ignore` war bis hierher nur ueber ein Werkzeug erreichbar. Beide Bereiche stehen jetzt im Profil unter Scoring, samt dem Unterschied: was in der Liste ausgeblendet wird, bleibt gespeichert und ist jederzeit wieder sichtbar. - **`schwelle_stufe_setzen(bereich, stufe)`** als MCP-Werkzeug; die Uebersicht samt Wirkung je Stufe liefert `score_verteilung_anzeigen`. - **Zu wenige Werte, keine Stufe.** Unter 20 bewertbaren Bewerbungen und 20 aussortierten Stellen bleiben die berechneten Stufen gesperrt und sagen warum. Eine Stufe aus einer Handvoll Werte waere geraten. ### Fixed - **Deine alte Zahl wandert nicht still.** Beim ersten Start nach dem Update geht ein gesetzter Wert auf die naechstliegende Stufe; ein Hinweis im Einstellungen-Tab nennt die alte Zahl und die Stufe, auf der sie jetzt liegt. Die Zahl bleibt unter "fuer Fortgeschrittene" erreichbar und wirkt, solange die Stufe auf "Alles zeigen" steht. ### Hinweis fuer Entwickler Die Stufen rechnen mit den Quantilen aus `score_verteilung` und den Werten aus `fachwert` — dieselbe Rechnung wie Fachdaumen und Backtest, sonst schlaegt der Backtest einen Wert vor, den keine Stufe trifft. Ein Browser-Test hat dabei einen echten Fehler gefunden: im `