-
-
Notifications
You must be signed in to change notification settings - Fork 1
Plan Datenbasis
Issue-Level-Detail zu Cluster A aus dem Master-Plan. Stand: 2026-07-02 (v1.7.3 Stable) · Schema v48.
Die historischen Positionen aus dem Master-Plan-Cluster A sind ✅. Schema-Migration ist ALTER-only-Disziplin (siehe R5). Offen: nur noch A18 (Timestamp-Umbau, DB-Teil). A19 (#738) seit v1.7.3 ✅, A20 (#742) seit v1.7.5 ✅.
Sicherheitsnetz gegen die #737-Fehlerklasse (Spalte per Migration angelegt, aber nicht im CREATE TABLE gespiegelt → Fresh-Installs crashen). Zwei komplementaere Tests in tests/test_schema_parity_738.py:
| Sub | Test | Ansatz |
|---|---|---|
| A19.1 | test_fresh_schema_enthaelt_alle_migrations_spalten |
Doppel-Migrations-Trick: frische DB → PRAGMA table_info-Snapshot → _migrate(1, SCHEMA_VERSION) idempotent drueberlaufen lassen → Diff muss leer sein. Deckt die komplette Kette v1→aktuell ohne Fixture ab |
| A19.2 | test_migrierte_v31_db_ist_spaltenidentisch_zu_fresh_install |
v31-Fixture aus der Migrations-Generalprobe (#705) hochziehen vs. Fresh-Install, Spaltensets pro Tabelle zweiseitig vergleichen — faengt auch die Gegenrichtung (Spalte nur in SCHEMA_SQL, kein Migrationspfad) |
| A19.3 | Selbsttest: kuenstlich aus SCHEMA_SQL entfernte Spalte (Sentinel dismiss_reasons.is_active) wird nachweislich als Drift erkannt |
Fund beim Einbau (2026-07-02): Der Parity-Test deckte sofort die #737-RESTLUECKE auf — das echte v1.6.10-SCHEMA_SQL (via Git-Historie verifiziert) enthielt applications.is_imported NICHT. v1.6.x-Fresh-Install-Upgrader starteten mit schema_version 31, die v22-Migration lief nie mehr, der Statistik-Tab crashte trotz v1.7.1-Hotfix weiter. Fix: idempotentes is_imported-Safety-Net in initialize() (Muster is_pinned). Die #705-Fixture wurde dabei originalgetreu zum echten v1.6.10-Schema korrigiert (blacklist.reason, dismiss_reasons.id/usage_count, application_meetings-Spalten, scoring_config.id; profile_settings entfernt). Tests: tests/test_schema_parity_738.py (4 Tests).
Profil-/Projekttexte aus der Fruehzeit enthalten ASCII-Umschreibungen (Mehrjaehrige, Oekosystem, fuer). Kuratierte Wortlisten-Korrektur mit Dry-Run-Vorschau (profil_umlaute_reparieren(anwenden=False) nach skills_bereinigen-Muster), Schreiben ausschliesslich ueber die bestehenden db.update_*-Whitelists (Anti-DB-Bypass #514). ss→ß nie automatisch, technologies-Felder ausgenommen, Pflicht-Backup via export_profile_json vor dem Anwenden. Umgesetzt in v1.7.5 als profil_umlaute_reparieren (~150 kuratierte Woerter, ungemappte ae/oe/ue-Woerter werden als Kuratierungs-Kandidaten gelistet). Tests: tests/test_v175_umlaut_reparatur_742.py (17 Tests).
| Modul | Pfad | Verantwortung |
|---|---|---|
| Schema |
src/bewerbungs_assistent/database.py (~5800 LOC) |
SQLite-Schema, _migrate, SCHEMA_SQL, DB-Helper |
| Hash-System |
database.py:resolve_job_hash, _public_job_hash, _scope_job_hash
|
Profil-Prefix-Handling fuer multi-tenancy |
| Update-Whitelist |
database.py:update_job mit _ALLOWED_UPDATE_FIELDS
|
Defense gegen ungewollte Feld-Updates |
| Hard-Guard |
database.py:save_jobs mit leere_url_warnungen
|
#645 — keine leeren URLs aus Scraper-Quellen |
| Mojibake-Repair |
database.py, dashboard.py (47 Stellen, v1.6.4-Fix) |
Latin-1 doppelt-encodete Strings reparieren |
| Issue | Thema | Status |
|---|---|---|
| #505 | Typisierte IDs (APP-/JOB-/DOC-Prefix) | ✅ |
| #514 | Anti-DB-Bypass-Pattern | ✅ |
| #574 | dismiss_reason als Plain-String oder JSON-Array | ✅ |
| #590 | Profile-Cluster im Schema | ✅ |
| #641 | Inhalts-Duplikat-Erkennung | ✅ |
| #645 | Hard-Guard save_jobs | ✅ |
-
tests/test_database.py(49 Tests) -
tests/test_v17_url_regression_645.py(11 Tests fuer Hard-Guard) - Plus indirekt in fast jedem anderen Test-Modul
Issue-Level-Tabelle pro Schema-Migrations-Schritt (v1→v45) ist Roadmap. Aktuell ist der Cluster vollstaendig ✅ und braucht keine Plan-Erweiterung. Neueste Migrationen: v44 documents.lifecycle (#657), v45 tasks-Tabelle + dismiss_reasons.is_active (#666/#663) + search_criteria.keywords_minus (#667), v46 research_notes (#673/#674), v47 scraper_health.error_class (#720), v48 Scoring-Regler hochschulabschluss (#698). Fresh-Install-Parity von applications.is_imported in v1.7.1 nachgezogen (#737).
Wiki-Anchor: Architektur.
🗺 Plan
- Master-Plan
- Master-Plan-Optimierung
- Plan-Datenbasis (A)
- Plan-Jobsuche (B)
- Plan-Stellen (C)
- Plan-Bewerbungen (D)
- Plan-Dokumente (E)
- Plan-Lokale-KI (F)
- Plan-Frontend (G)
- Plan-MCP-Layer (H)
- Plan-Distribution (I)
- Plan-Roadmap-v18 (J)
Einstieg
Tabs
Features
- Elwosa
- Lern-System
- Lokale KI & KI-Steuerung
- Profile-Cluster
- Suchkriterien & Gewichtungen
- Profil aus Dokumenten
- Workflows
- Jobportale
- Stellen-Qualitaet
Reference