Project State — BAS-Twin

Hinweis: Pilot-State, von Agent initial geschrieben am 2026-05-21 aus _index.md rekonstruiert. Marvin: bitte Letzte Entscheidung + Nächste Frage gegenchecken und ggf. präzisieren — ich kenne den genauen aktuellen Tagesstand von Sprint 1 Tag ~11 nicht.

Letzte Entscheidung

Stammdaten-Verbesserungen in PR #33 nachgezogen (2026-05-22 00:45):

  1. Schema-Migration kunden.standard_legierung + standard_zustand als Vorbereitung fuer Phase-B Frage 4. Antwort-unabhaengig — solange Spalten leer bleiben, unveraendertes Pipeline-Verhalten. Bei Alex-Bestaetigung kann der Extract-Stage ohne Schema-Aenderung den Fallback aktivieren.
  2. Schema/CONTEXT.md Pipeline-Lookup-Inventar — wer liest welche Stamm-Tabelle wann. Plus expliziter Hinweis dass drei Material-Quellen (materialien, bas_artikel, bas_vormaterial) koexistieren und Drift ein Risiko-Punkt ist.
  3. Loader-Quality-Gates — SHA256-Dedup (skip wenn unveraendert) + Empty-Check (throw bei 0 rows) + Drop-Threshold 50% (warn). Schutz gegen versehentliches Ueberschreiben mit Schrott.

Branch feat/stammdaten-loader-parsers mit 3 neuen Commits gepusht (b1bba90 schema, 5c0b2a1 docs, 5048ef6 quality-gates), 26/26 Loader-Tests gruen, typecheck clean.

Defaults-Strategie für Phase B beschlossen (2026-05-21): Wir warten nicht auf Alex blocking, sondern setzen plausible Defaults und kalibrieren nach. Konkret:

  • Frage 1 Verschnitt → Default v17-Modell (5% flach, kein separater Schrott-Erlös). step04-verschnitt.ts umschreiben.
  • Frage 2 BarEK → Default step01 deaktivieren (BarEK = 0). Einkaufspreis = LME + Güte-Zuschlag.
  • Frage 3 Liefertermin → Default „heute + 4 Wochen” wenn wunsch_liefertermin null, Quelle 'default-asap'.
  • Frage 4 Standard-Legierung → Status quo (Rückfrage), Schema-Migration erst wenn Alex Ja sagt.

WhatsApp mit 4 Fragen am 2026-05-21 verschickt. Demo zeigt 14 Synthetic-Fixtures, nicht Alex’ Excel-Zeile — Golden-Path E2E ist nur interner Kalibrierungs-Test.

Außerdem: Repo-Stand sortiert (2026-05-21 abend) — Schema-Fix NULLS NOT DISTINCT für bas_vormaterial UQ committed (Plan §D7, Idempotenz des Stammdaten-Loaders) + Kanban Phase-B-Items + WhatsApp-Draft. Aktiver Branch feat/stammdaten-loader-parsers 7 Commits voraus, jetzt gepusht.

Nächste Frage

Phase 3 (Stammdaten-Loader Orchestrator+CLI) ist lokal schon in PR #33 drin. Soll #33 als Phase 2+3 zusammen mergen, oder Phase 3 in eigenen Branch ziehen (cherry-pick) damit der PR sauber bleibt?

Parallel zu klären: welche PRs zuerst durch (#32 ist Base von #33, #24 CI-Gate sollte vorher rein, #23 Stage 5 PDF ist demo-kritisch).

Decisions-Log

  • 2026-05-22 — Stammdaten-Verbesserungen (Items 1-3) in PR #33: kunden.standard_legierung-Schema + Pipeline-Lookup-CONTEXT + Loader-Quality-Gates
  • 2026-05-21 — Defaults-Strategie für Phase B: nicht warten, plausible Defaults setzen, nachher kalibrieren
  • 2026-05-21 — Phase-B-Fragen an Alex von 2 auf 4 erweitert (Liefertermin-Default + Standard-Legierung pro Kunde), WhatsApp verschickt
  • 2026-05-21 — Schema-Fix bas_vormaterial UQ als NULLS NOT DISTINCT committed (Idempotenz Stammdaten-Loader)
  • 2026-05-15 — Aufwandsschluessel Phase A live, Marge-Default 4,5→12%
  • 2026-05-14 — Synthetic E2E + Demo-Report live (14 Fixtures, Stripe-Design, GF-Sprache, Eskalations-Logik)
  • 2026-05-13 — Stage 4 Calculate live (Phase 3), 8-Schritt-Pipeline mit LME-Lookup, kalkuliert 12/14 Synthetic-Fixtures inkl. Multi-Position
  • 2026-05-12 — ce-review abgeschlossen: 3 P0 + 36 P1 done, 8 Out-of-Scope dokumentiert
  • 2026-05-06 — Angebot V3 von Ralf inhaltlich angenommen (Vertrag noch offen)

Offene Baustellen

Aktive Branches / Code-Arbeit

  • Stammdaten-Loader-Refactor (4 Phasen) auf feat/stammdaten-loader-parsers
    • PR #32 Phase 1 Schema (6 neue bas_*-Tabellen) — wartet auf Merge, Base für #33
    • PR #33 Phase 2 Parser (5 Parser, 25/25 Tests grün) — wartet auf #32 + jetzt mit Phase 3 + Schema-Fix erweitert
    • Phase 3 (Loader-Orchestrator + CLI) lokal commited
    • Phase 4 Integration-Smoke gegen S3 + CONTEXT.md — noch zu bauen
  • Phase-B Defaults (eigener Branch von main nach Stammdaten-Merge) — 3 Code-Anpassungen: step04 v17-Modell, step01 deaktivieren, Liefertermin-Fallback. Plus Golden-Path E2E grün gegen Default-Wert.
  • Rueckfrage-Outbox (Issue #12) — Pipeline setzt nur Status, schickt keine Email-Drafts. Acceptance: rueckfragen-Row + notifications-Outbox-Eintrag. Entkoppelt von Phase B, kann parallel laufen.

Offene PRs aufzuräumen

  • PR #6 pre-sprint review (14 Tage alt) — mergen oder schließen?
  • PR #21 Sprint-1 DoD-Stand 12.05. — vermutlich überholt, schließen?
  • PR #24 CI Merge-Gate — sollte VOR allen anderen Merges rein
  • PR #23 Stage 5 PDF-Generation — demo-kritisch, ohne PDF kein Angebots-Output
  • PR #20 7 realistische Fixtures — demo-relevant

Warten auf extern

  • 4 Klaerungsfragen an Alex verschickt 2026-05-21 — siehe phase-b-alex-klaerungsfragen
  • Vertrag Werkvertrag + AVV + NDA — alle drei stehen aus, Ball bei Becker (siehe becker)
  • NDA liegt bei Marvin zur Unterschrift

Sprint 2 / später

  • Eskalations-Trigger (Betriebsleiter-Push für „keine Anlage gefunden”) — heute nur Status-Label im Report
  • Sprint 2 Planung — Scope nach Demo entscheiden
  • Auth + RLS (Sprint 2)
  • Sprint 1 Demo-Vorbereitung für Stichtag 31.05. (Marvin + Alex)

Verweise

  • Steuerung: ~/source/bas-twin/projekt/steuerung/kanban.md (Source of Truth für Tages-Tasks)
  • Scope + Phase-Map: ~/source/bas-twin/projekt/steuerung/scope.md
  • Synthetic E2E Run: _index
  • Diskretions-Linie: becker (NDA — keine Externalisierung)