vflow2 Documentation

IFC Analysis Tools ← Back to App

Version-Workflow (Architekten-Paket-Modell)

Jedes Projekt ist eine lineare Kette von Architekten-Paketen. Ein Paket bündelt drei Dinge zu einer Einheit:

Eine neue Version entsteht nur, wenn der Architekt eine Revision liefert. Das Exportieren eines Reviews ist ein Datei-Artefakt innerhalb des aktuellen Pakets, nicht eine neue Version.

V1 Paket  = { Arch V1 IFC,  Overrides auf V1,  exports/ (z.B. 2026-04-20T10-03_review.ifc)}
     ↓  (Architekt liefert Revision)
V2 Paket  = { Arch V2 IFC,  Overrides auf V2 (aus V1 migriert),  exports/ … }

Kernregeln

  1. VALID_SOURCES = {architect_original, architect_revision}our_review ist keine Versionsquelle mehr. v2→v3-Migration faltet alle alten our_review-Zeilen in ihr Eltern-Paket ein.
  2. Frozen ⇔ hat Kind. Ein Paket ist eingefroren, sobald ein neueres Paket es als parent_id referenziert. Das Export­ieren eines Reviews friert nichts mehr ein.
  3. Nur aktives Paket schreibbar. Jeder Save-on-Blur-Endpoint (/roombook/*/override, /heizlast_presets/*, /heizlast/*/surface-*, /sizing/*) prüft die aktive Version und gibt 409 zurück, wenn das Paket eingefroren ist. Das Frontend zeigt dann den History-Banner (siehe unten).
  4. Niemals-Cascade-Delete. Eine Version mit Nachfolger:innen ist nicht löschbar. 409 mit klarer Fehlermeldung.

On-Disk-Layout (schema_version 3)

uploads/<project>/
  project.json                      # {schema_version: 3, active_version_id, versions[]}
  logs/                             # Projekt-Ebene
    migration.log
    job_history.jsonl
    version_lifecycle.jsonl
  compare_cache/                    # Diff-Bundles, sha256-keyed
  versions/
    v1/
      <stem>.ifc                    # Architekten-IFC (+ ggf. MEP-Dateien)
      <stem>.roombook.json          # Overrides für genau DIESE IFC
      <stem>.heizlast.json
      <stem>.sizing.json
      <stem>.heizlast_presets.json
      <stem>.spaces.json
      <stem>.connection_graph.json
      <stem>.wall_zones_normal.json
      room_fingerprints.json
      logs/
      exports/                      # stamped Review-IFCs, exportiert aus V1
        2026-04-20T10-03_review.ifc
        2026-04-20T10-03_review.json   # Sidecar: stats + disclaimer + timestamp + label
    v2/ …

Lazy-Migration

Beide Migrationen laufen idempotent beim ersten Touch eines Projekts.

Frontend

Header-Chip

Datum-basiert, ohne Source-Icons. Optional mit 🕓-Badge, wenn auf ein historisches Paket gepinnt. Dropdown listet alle Pakete (neuestes zuerst) — eine Zeile pro Paket, nicht mehrere.

Versionen-Tab (#versions)

Vertikale Architekten-Timeline. Jede Karte ist ein Paket mit:

Architekten-Timeline mit nested Exports

Workflow-Wizard (Detail-View)

Persistent 3-Step-Strip, Source-agnostisch — kein Verzweigen nach active.source mehr. Button-Text in Schritt 2 öffnet das Export-Panel am #export-Hash, nicht mehr das alte Modal.

3-Step Workflow-Wizard

Export-Panel (#export)

Einzelne, full-width Seite (kein Modal), die alle Werte listet, die in die gestempelte Review-IFC geschrieben werden. Gruppiert nach IFC-Element-Typ:

Pro Gruppe Bulk-Buttons (alle ✔ / alle ☐), global Alle auswählen · Nur Overrides · Alle abwählen. Nur Overrides tickt automatisch alle Oberflächen an, deren U-Quelle override oder iso13370 ist.

Der Stamp-Button oben rechts ruft POST /projects/<p>/versions/<vid>/export-review auf — als Ergebnis landet eine neue Datei in versions/<vid>/exports/ mit Download-Link im Panel.

Export Preview Panel mit IfcWall-Gruppe offen

History-Banner

Schmaler gelber Banner oben, wenn auf ein nicht-aktuelles Paket gepinnt. Enthält eine Zur aktuellen Version springen-CTA. Save-on-Blur-Endpunkte geben in diesem Modus 409 mit der gleichen Erklärung zurück.

History-Banner auf historischem Paket

Heizlast-Oberflächen-Zeile

Die vier per-Feld-Writeback-Checkboxen (U / A / Adj / f_k) wurden durch einen einzelnen grünen Status-Dot ersetzt. Dieser ist read-only; ein Klick navigiert zum Export-Panel, wo die eigentliche Flagging-Entscheidung fällt.

API-Endpunkte

Methode Pfad Zweck
GET /projects/<p>/versions Liste aller Pakete + Health + Exports pro Paket
POST /projects/<p>/versions/<vid>/activate Aktiv setzen (Pinning auf historisch → Read-Only)
DELETE /projects/<p>/versions/<vid> Löschen (409 wenn Kinder)
POST /projects/<p>/versions/<vid>/unfreeze Explizit auftauen (nur leaf ohne Kinder)
POST /projects/<p>/versions/<vid>/export-review Review-IFC in exports/ stempeln (→ Job). Keine neue Version.
GET /projects/<p>/versions/<vid>/exports Exports-Liste (newest first)
GET /projects/<p>/versions/<vid>/exports/<eid>/download Stamped IFC herunterladen
DELETE /projects/<p>/versions/<vid>/exports/<eid> Einzelnen Export löschen (IFC + Sidecar)
POST /projects/<p>/versions/<vid>/upload-revision Revision → neues architect_revision-Paket + Override-Migration (→ Job)
POST /projects/<p>/versions/compare?a=&b= Diff starten (immer Job)
GET /projects/<p>/versions/compare?a=&b= Gecachten Diff abrufen
GET /projects/<p>/versions/<vid>/download-ifc Architekten-IFC eines Pakets downloaden
GET /projects/<p>/logs/history Jobs + Lifecycle-History

Schritt-für-Schritt

  1. Initialer Upload. Architekt liefert IFC. POST /projects/…/upload legt bei leerem Projekt automatisch v1 (architect_original) an.
  2. Bearbeitung. Overrides in Roombook, Presets anpassen, Heizflächen- Kandidaten in Auslegung setzen — alles auf der aktiven Version.
  3. Export Preview. Detail-Tab → Export-Panel öffnen (oder Nav-Tab Export). Toggles pro Gruppe/Oberfläche setzen, Disclaimer lesen, Export stamp & save drücken. Die Datei landet sofort unter versions/ v1/exports/<timestamp>_review.ifckeine neue Version entsteht.
  4. Download + Versand. Aus dem Panel oder der Versionen-Timeline die stamped IFC herunterladen und dem Architekten zusenden.
  5. Revision hochladen. Wenn die überarbeitete IFC zurückkommt: Revision hochladen im Workflow-Wizard. Die neue Version (architect_revision) wird als v2 angelegt, Overrides werden per StableRoomKey / GID / Fingerprint-Matching (≥ 80 % Konfidenz automatisch) auf v2 migriert. v1 wird dadurch automatisch frozen.
  6. Vergleichen. Compare-Tab zeigt Differenzen zwischen zwei beliebigen Architekten-Paketen.
  7. Nächster Zyklus. Auf v2 starten wir den nächsten Export Preview, die Kette wächst weiter.

Einschränkungen (MVP)

Tests