Skip to content

Plan Datenbasis

MadGapun edited this page Jul 2, 2026 · 6 revisions

Plan A — Datenbasis & Persistenz

Issue-Level-Detail zu Cluster A aus dem Master-Plan. Stand: 2026-07-02 (v1.7.2 Stable, Hotfix v1.7.3 in Arbeit) · Schema v48.

Status-Zusammenfassung

Die historischen Positionen aus dem Master-Plan-Cluster A sind ✅. Schema-Migration ist ALTER-only-Disziplin (siehe R5). Offen: A18 (Timestamp-Umbau, DB-Teil), A19 (Schema-Parity-Test, #738 — v1.7.3-Kandidat) und A20 (Umlaut-Restaurierung Altbestand, #742 — v1.8).

Offen: A19 — Fresh-Install-Schema-Parity-Test (#738)

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)

Offen: A20 — Umlaut-Restaurierung Altbestand (#742)

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. Geplant fuer v1.8.

Schluessel-Module

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

Schluessel-Issues

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

  • 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

Naechste Iteration

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.

Clone this wiki locally