Skip to content

Plan Jobsuche

MadGapun edited this page Jul 3, 2026 · 6 revisions

Plan B — Jobsuche & Quellen

Issue-Level-Detail zu Cluster B aus dem Master-Plan. Stand: 2026-06-10 (beta.101).

Ergaenzungen seit beta.74

Nr Funktion Issue Beta Code
B19/B20 MINUS-Keywords: weiche Score-Abwertung (keywords_minus, Schema v45) + gewichtung_minus-Slider — Backend + Frontend #667 84/89 tools/suche.py, services/scoring_service.py, ProfilePage.jsx
B22 Duplikat-Erkennung verfeinert: Titel-Aehnlichkeit (0.5 / 0.85 bei abw. URL) statt Firma+Keyword, Domain-Keyword nur Bonus, force=true-Override #670 87 duplicate_detection.py, tools/jobs.py
B21 Pro-Scraper-Timeout + Auto-Skip defekter Quellen im Job-Runner. beta.101: Phase-1 via as_completed + globales Phasen-Budget — kein 0%-Haenger mehr #668 85/101 job_runner / services/scraper_health.py
B23 Interne Jobsuche nach Zeitplan #678 94 services/automatik_scheduler.py
B24 Snapshot-Nachhol-Trigger (Tagesroutine) #688 offen (Stub)

B1 — Scraper-Plugin-Architektur

Sub Funktion Issue Code Tests Status
B1.1 JobSourceAdapter-Basisklasse + AdapterResult + AdapterStatus-Enum #499 job_scraper/adapters/base.py tests/test_scraper_adapter_v2.py
B1.2 LegacyScraperAdapter wraps existing search_*-Funktionen #499 job_scraper/adapters/legacy_adapter.py dito
B1.3 Orchestrator.run_adapters() mit Fehler-Isolation #499 job_scraper/adapters/orchestrator.py dito
B1.4 JobPosting-Dataclass mit to_job_dict() / from_job_dict() #499 job_scraper/adapters/base.py dito
B1.5 Spezial-Adapter (Bundesagentur, Hays, JobSpy, Google Jobs) #499 job_scraper/adapters/*_adapter.py dito

B2 — 34 Quellen-Adapter

Status per Quelle (Stand 2026-06 aus scraper_diagnose):

Quelle Code Letzter Erfolg Erfolgsrate Status
arbeitnow arbeitnow.py 2026-05-30 100%
bundesagentur bundesagentur.py 2026-05-30 83%
greenhouse greenhouse.py 2026-05-30 89%
hays hays.py + adapters/hays_adapter.py 2026-05-30 100%
jobspy_indeed jobspy_source.py 2026-05-30 80%
stellenanzeigen_de stellenanzeigen_de.py 2026-05-30 85%
arbeitnow / remoteok / remotive / himalayas remoteok.py, remotive.py, himalayas.py, arbeitnow.py
workable workable.py
personio personio.py
workday_dax workday_dax.py
berufsstart / studentjob / praktikum_de dito
ferchau ferchau.py 2026-04-23 17% ⚠️ defekt (URL 404 seit 04-25)
gulp gulp.py 2026-04-23 17% ⚠️ defekt (SPA-Migration)
heise_jobs heise_jobs.py 2026-04-23 18% ⚠️ defekt (SSR nur Kategorien)
ingenieur_de ingenieur_de.py 2026-04-23 18% ⚠️ defekt (URL 404 seit 04-25)
kimeta kimeta.py 2026-04-23 17% ⚠️ defekt (SSR nur Kategorien)
monster monster.py nie 0% ⚠️ defekt (Timeout)
solcom solcom.py 2026-04-23 18% ⚠️ defekt (HTTP 403 Bot-Block)
stepstone stepstone.py 2026-04-23 0% ⚠️ Timeout (Bot-Block)
jobspy_linkedin jobspy_source.py nie 0% ⚠️ silent (9 Fehler-Serie)
indeed indeed.py nie 0% ⚠️ silent (Timeout)
freelancermap freelancermap.py 2026-05-05 33% ⚠️ 5 Fehler-Serie
google_jobs google_jobs.py nie 0% ⛔ silent
jobspy_glassdoor nie 0% ⛔ auto-deaktiviert (5+ silent)
jobspy_google nie 0% ⛔ auto-deaktiviert (5+ silent)
jobware jobware.py 2026-04-23 15% ⛔ auto-deaktiviert
freelance_de freelance_de.py 0% ⛔ deprecated
linkedin linkedin.py 2026-04-23 0% ⛔ deprecated (Bot-Wall, #159)
xing xing.py 2026-04-23 0% ⛔ deprecated (Bot-Wall)
meinestadt meinestadt.py

Effektiv 6 voll-produktive Quellen plus die Remote-Boards (selten getriggert). Roadmap: 7 defekte reanimieren oder durch Plugin-Plattform (J1) ersetzen.

B3 — Scraper-Health-System mit Auto-Reactivate

Sub Funktion Issue Code Status
B3.1 scraper_health-Table + update_scraper_health() #432 database.py
B3.2 Backoff-Logik 24h/48h/72h/168h #432 database.py
B3.3 Auto-Reactivate bei OK-Run (Counter-Reset) #432, #590 database.py
B3.4 Defekt-Markierung (letzter_status_detail mit Grund + Datum) job_scraper/health.py
B3.5 UI-Anzeige als "ausgegraut sichtbar" statt heimliches Entfernen Frontend

B4 — Aktiver Quellen-Probe (quellen_health_check)

Sub Funktion Issue Code Status
B4.1 Pro Quelle ein minimaler HTTP-Probe #624 tools/jobs.py
B4.2 Parallel via Threads #624 dito
B4.3 Liefert reachable / http_status / latency_ms / error #624 dito
B4.4 Probe-URLs aktualisieren — Bundesagentur 403, Workday/Workable/Personio/Berufsstart/Studentjob/Praktikum alle 404 obwohl Production-Scraper laeuft. Probe-Endpoint-Inventar pflegen. dito

B5 — Profile-Cluster-basierte Quellen-Empfehlung

Sub Funktion Issue Code Status
B5.1 services/profile_classifier.py mit 9 Cluster-Heuristik #590 dito
B5.2 Cluster-zu-Quellen-Mapping (5 Empfehlungen pro Cluster) #590 dito
B5.3 UI-Recommendations-Panel #590 Frontend

B6 — Workday-DAX-Cluster

Sub Funktion Issue Code Status
B6.1 workday_dax.py mit Multi-Tenant-Iteration #590 dito
B6.2 DAX-40-Tenant-Liste (SAP, BMW, Siemens, Bayer, ...) #590 dito

B7 — Suchprofile

Sub Funktion Issue Code Status
B7.1 Multi-Suchprofil-Verwaltung (PLM/Tech-Senior/Freelance ...) #564 tools/profil.py
B7.2 Portal-spezifische Such-Profile (LinkedIn-Lessons aus Bot-Wall-Erfahrung) #564 dito

B8 — Scoring

Sub Funktion Issue Code Status
B8.1 6-Kriterien-Score (Skills/Erfahrung/Branche/Standort/Gehalt/Modell) mehrere services/scoring_service.py
B8.2 Gewichtungen ueber scoring_konfigurieren dito
B8.3 Live-Recompute bei Profil-Aenderungen via scores_neu_berechnen #539 dito
B8.4 Score-Hinweis "basiert nur auf Titel" bei fehlender Beschreibung tools/analyse.py

B9 — URL-Pflege-Pipeline (Detail-URL → jobId → Such-URL Fallback)

Sub Funktion Issue Code Tests Status
B9.1 XING _process_raw_job URL-Fallback-Kaskade #645 job_scraper/xing.py tests/test_v17_url_regression_645.py
B9.2 Stepstone URL-Fallback-Kaskade + Relative-Absolutierung #645 job_scraper/stepstone.py dito
B9.3 is_search_url-Flag im DB-Schema #436 database.py dito
B9.4 is_search_result_url() Helper mit 17 Erkennungs-Mustern #436 job_scraper/__init__.py dito
B9.5 stelle_bearbeiten(url=...) Backfill #645 tools/jobs.py dito
B9.6 Hard-Guard in save_jobs gegen leere URLs #645 database.py dito

B10 — Stellenbeschreibung-Auto-Refetch

Sub Funktion Issue Code Status
B10.1 _run_auto_refetch_descriptions Auto-Engine-Step #622 dashboard.py
B10.2 Max 8 Stellen/Lauf #622 dito
B10.3 Backoff bei 3 Fehlversuchen (Setting refetch_fail:{hash}) #622 dito
B10.4 Skip is_search_url-Stellen (sonst Anriss der Suchseite) #645 dito
B10.5 MCP-Tool stellenbeschreibung_nachladen mit klaren Fehler-Pfaden #622, #645 tools/jobs.py
B10.6 fetch_description_from_detail mit JSON-LD-Extraction #624 job_scraper/__init__.py

B11 — URL-Aging-Auto-Cleanup (beta.73)

Sub Funktion Issue Code Tests Status
B11.1 services/url_health.py Pure-Python-Modul #645 dito tests/test_v17_url_health_645.py (18 Tests)
B11.2 _run_url_aging_check Auto-Engine-Step #645 dashboard.py
B11.3 24h-Backoff pro OK-Check (Setting url_aging_lastok:{hash}) #645 dashboard.py
B11.4 Workday-SPA-Sonderbehandlung (JSON-API-Cross-Check) #645 services/url_health.py tests
B11.5 Title-Token-Match fuer statisches HTML #645 dito tests
B11.6 17 lokalisierte Expired-Marker (DE+EN) #645 dito tests
B11.7 Elwosa-Linie auto_url_aging (4 Varianten) #645 services/elwosa_lines.py

Hinweis: B11 ist in beta.73 ausgespielt. beta.72 (was bei Markus laeuft) hat es noch nicht.

B12 — 7 defekte Quellen reanimieren (Roadmap)

Sub Funktion Issue Effort Status
B12.1 ferchau URL-Migration zu touch.ferchau.com #653 S
B12.2 gulp SPA-Migration → eigenes Issue B18 (Playwright) #656 L ⬜ (in B18)
B12.3 heise_jobs React-SPA → eigenes Issue B18 #656 M ⬜ (in B18)
B12.4 ingenieur_de URL-Migration zu jobs.ingenieur.de Subdomain #653 S
B12.5 kimeta SPA → eigenes Issue B18 #656 M ⬜ (in B18)
B12.6 monster deprecated (Domain transitioning 08/2025, kein Job-Listing mehr) #653 XS
B12.7 solcom deprecated (Cloudflare-Block dauerhaft) #653 XS

B17 — Adzuna-Adapter (#654, beta.77)

Sub Funktion Issue Code Tests Status
B17.1 REST-API-Adapter (job_scraper/adzuna.py) #654 dito test_v17_optimierungen_beta77.py
B17.2 Credentials-Lookup (params → DB-Settings) #654 dito dito
B17.3 SOURCE_REGISTRY-Eintrag mit api_key_erforderlich=True #654 job_scraper/__init__.py
B17.4 Job-Mapping (Adzuna-Felder → PBP job_dict) #654 adzuna.py:_process_raw_job tests
B17.5 Skip-Verhalten ohne Credentials #654 dito tests
B17.6 UI-Settings fuer API-Keys + Setup-Anleitung Frontend

B18 — Playwright-Adapter fuer SPA-Quellen (#656, Roadmap)

Sub Funktion Issue Status
B18.1 gulp Playwright-Adapter oder JSON-API-Recherche #656
B18.2 kimeta Playwright #656
B18.3 heise_jobs Playwright oder Adzuna als Ersatz #656

B13 — quellen_health_check Probe-URLs aktualisieren — ✅ (v1.7.4 #747 + v1.7.5 #748)

Probes fuer ingenieur_de und ferchau ergaenzt (URLs identisch zu den Adapter-Requests nach der #653-Migration) + Konsistenz-Tests Probe/SOURCE_REGISTRY in tests/test_v174_probe_urls_747.py. Defekte Quellen bleiben bewusst ohne Probe (wuerden falsch-gruen melden).

Alt-Drift in v1.7.5 geschlossen (#748), Prinzip Probe == Adapter: bundesagentur bekommt die Adapter-Header (X-API-Key + UA) via _PROBE_EXTRA_HEADERS, workable nutzt die v1-Widget-API mit Adapter-Firma, personio probt die erste Adapter-Firma. Die RSS-Probes (berufsstart/studentjob/praktikum_de) waren bereits adapter-identisch — melden sie rot, ist der Adapter real betroffen (gewollt). Tests: tests/test_v175_probe_konsistenz_748.py.

Sub Funktion Issue Status
B13.1 Bundesagentur-Probe-Endpoint pruefen (gibt 403 obwohl Production-Scraper laeuft)
B13.2 Workday-DAX-Probe (POST /wday/cxs/sap/...) hat ConnectError
B13.3 Workable, Personio, Berufsstart, Studentjob, Praktikum — alle 404 obwohl Scraper laeuft
B13.4 Generisches Pattern: pro Quelle ein erwarteter Probe-URL der dem Production-Pfad folgt

B14 — Chrome-Extension-Fallback

Sub Funktion Issue Status
B14.1 Chrome-Extension oeffnet Stellen-Seite + extrahiert Daten
B14.2 stelle_manuell_anlegen als Backend-Empfaenger #160
B14.3 linkedin_browser_search Tool #73

B15 — Quellen-Rotation im job_runner (Roadmap)

Sub Funktion Issue Status
B15.1 Round-Robin durch aktive Quellen statt alle-parallel #590-C.4
B15.2 Rate-Limit pro Domain einhalten (kein Server-Bombing)

B16 — Eigene Karriereseiten-URLs als Custom-Source (Roadmap)

Sub Funktion Issue Status
B16.1 User kann URL einer Karriere-Seite eingeben + Scraping-Regeln waehlen #627
B16.2 Auto-Detection des Job-Listing-Patterns (JSON-LD / Pagination / ...)
B16.3 UI im Tab-Einstellungen unter "Eigene Quellen"

Akzeptanzkriterium

Pro Sub-Position gilt:

  1. Code im Repo (Pfad in Tabelle).
  2. Tests gruen (Test-Datei in Tabelle wo relevant).
  3. Wiki-Eintrag in Jobportale, Stellen-Qualitaet oder Tab-Stellen.

Solange auch nur eines fehlt: 🟨 oder ⬜.

Clone this wiki locally