Skip to content

fix(orchestrator): init_db beim Start (#231)#244

Merged
TillQuandel merged 1 commit into
masterfrom
fix/231-init-db
Jul 13, 2026
Merged

fix(orchestrator): init_db beim Start (#231)#244
TillQuandel merged 1 commit into
masterfrom
fix/231-init-db

Conversation

@TillQuandel

Copy link
Copy Markdown
Owner

Befund

generative/orchestrator.py ruft db.init_db() nie auf. Zwei Datenverlust-Facetten:

  1. Frische ATOMIC_DB_PATH: db.get_db() legt die Datei ohne Schema an — jeder DB-Write (pipeline_runs-Insert, note_evals via Stage 8) degradiert still zu [warn] DB-Write fehlgeschlagen: no such table: .... Der Lauf selbst "gelingt", die Zeile fehlt einfach.
  2. Bestehende DB mit altem Schema: die _add_column-Migrationen in init_db() laufen ausschließlich dort — nie im Write-Pfad. Nach Schema-Erweiterungen (z.B. n_extracted aus feat(generative): Stage-Outcome-Events + Drop-Gründe an den Gate-Punkten (#197 Schritt 1+2) #220) scheitert der Insert jedes realen Laufs still mit table pipeline_runs has no column named n_extracted.

Fix

db.init_db(db.DB_PATH) direkt nach load_runtime_config() (~Z.2318), Modul-Attribute zur Laufzeit gelesen (import generative.db as _db; _db.init_db(_db.DB_PATH), kein from-Import der Werte — Tests monkeypatchen db.DB_PATH). In try/except gewickelt: ein kaputtes DB-File darf den Lauf nicht killen ([warn] DB-Init fehlgeschlagen: {e}).

Bewusst nicht im DB-Write-Block Z.2755ff. platziert — Konfliktvermeidung mit dem parallelen Issue #235, das genau diesen Block editiert. Der bestehende Warn-Pfad dort bleibt unverändert.

TDD-Beleg (RED → GREEN)

Neue Testdatei generative/tests/test_orchestrator_init_db.py, zwei Regressionstests. Harness wiederverwendet aus test_pipeline_run_persist_no_eval.py / test_ci_smoke_e2e.py (main() mit --dry-run --no-llm auf Beispiel-PDF, LLM/Netz gestubbt).

RED auf master (56a3a39):

FAILED test_orchestrator_creates_schema_on_fresh_db_path
  AssertionError: pipeline_runs fehlt — Tabellen: set()
FAILED test_orchestrator_migrates_existing_db_missing_n_extracted_column
  AssertionError: Migration griff nicht — Spalten: ['run_id', 'timestamp', 'pipeline_version', ... ohne n_extracted]
2 failed, 2 warnings in 4.11s

GREEN nach Fix:

test_orchestrator_creates_schema_on_fresh_db_path PASSED
test_orchestrator_migrates_existing_db_missing_n_extracted_column PASSED
2 passed, 2 warnings in 2.81s
  • Test 1 (Facette 1): db.DB_PATH auf einen neuen, noch nicht angelegten Pfad umgebogen (die autouse-Fixture isolate_pipeline_side_effects initialisiert selbst eine DB — hier bewusst NACH deren Setup überschrieben). Assert: pipeline_runs/note_evals-Tabellen existieren nach main(), Run-Zeile vorhanden.
  • Test 2 (Facette 2): manuell eine pipeline_runs-Tabelle ohne n_extracted-Spalte angelegt (Alt-Schema). Assert: nach main() ist die Spalte da (PRAGMA table_info) und der Insert erfolgreich.

Suite

pytest generative lib/decision_engine/tests shared/tests -q: 5790 passed, 3 skipped, 4 deselected, 0 failed (inkl. der 2 neuen Tests).

ruff

ruff check . — All checks passed.
ruff format --check . — sauber (neue Testdatei einmalig mit ruff format autoformatiert, dann grün).

Closes #231

…ug fuer frische und bestehende DBs (#231)

orchestrator.main() rief db.init_db() an keiner Stelle auf. Zwei Facetten:
- Frische ATOMIC_DB_PATH: get_db() legt die Datei ohne Schema an, jeder
  DB-Write degradiert still zu "[warn] DB-Write fehlgeschlagen: no such
  table: ...".
- Bestehende DB mit altem Schema: die _add_column-Migrationen liefen nie,
  nach Schema-Erweiterungen (z.B. n_extracted, #220) scheitert der Insert
  jedes realen Laufs still.

Fix: db.init_db(db.DB_PATH) direkt nach load_runtime_config() (Z.2318ff.),
in try/except gewickelt (best-effort, ein kaputtes DB-File darf den Lauf
nicht killen). Bewusst nicht im DB-Write-Block Z.2755ff. platziert, um
Konflikte mit dem parallelen Issue #235 zu vermeiden.

Zwei Regressionstests in generative/tests/test_orchestrator_init_db.py
(RED auf master, GREEN nach dem Fix) decken beide Facetten ab.
@TillQuandel TillQuandel merged commit d9923e2 into master Jul 13, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Orchestrator ruft init_db() nie auf — frische ATOMIC_DB_PATH fuehrt zu stillen Best-effort-DB-Warns

2 participants