Files
property-match/archive/livia/WIEDERHERSTELLUNG.md
T
Benjamin SutterandClaude Opus 5 2037e5a463 docs(agenten): Fallakte Livia und Agenten-Briefing sichern
`LIVIA_PROFIL_UND_PROMPT.md` hält Livia als Exposé Master fest, wie sie vor
Runde 8 war: Personalblatt, Aufgabenkatalog, Kanäle und Systeme, das
Exposé-Dossier mit elf Bereichen und neun Pflichtfeldern, die
`missingFacts`-Regel der Textmaschine — dazu ein System-Prompt, mit dem sich
diese Fassung ausserhalb des Repositories rekonstruieren lässt.

`archive/livia/` ergänzt die Beschreibung um die Wiederherstellung: die 23
Dateien der Exposé-Funktion als wörtliche Kopie im Original-Pfadlayout sowie
ein Manifest jeder Stelle, an der Livia in geteilten Dateien verdrahtet war.

Beides ist mit Runde 8 nicht überholt, sondern der Referenzstand: die
Exposé-Funktion wurde nicht entfernt, sondern nachgeordnet. Das Manifest
beschreibt allerdings den Rückbau eines vollständigen Entfernens und damit ein
Szenario, das so nicht eingetreten ist.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-22 00:35:57 +02:00

14 KiB
Raw Blame History

Livia — Wiederherstellungspaket

Zweck: Livia («Exposé Master», PO-ZD-21) und ihre Funktionalitäten werden aus der Anwendung entfernt. Dieses Verzeichnis enthält alles, was für einen vollständigen Wiedereinbau nötig ist — die Originaldateien im Original-Pfadlayout und ein Verzeichnis sämtlicher Stellen, an denen Livia in gemeinsam genutzten Dateien verdrahtet war.

Angelegt am 21.08.2026, Stand Commit 5527448 (2026-08-18, «fix(startseite): Porträts scharf statt weich, besonders die hinteren»), Branch agents6.

Fachliche Beschreibung und System-Prompt liegen separat in ../../LIVIA_PROFIL_UND_PROMPT.md.


0. Vor dem Rückbau: Git-Marke setzen

Dieses Paket ist die zweite Absicherung. Die erste und verlässlichste ist die Versionsgeschichte. Deshalb vor dem Entfernen:

git tag -a livia-vor-rueckbau -m "Letzter Stand mit vollständiger Livia-Funktionalität"
git push origin livia-vor-rueckbau

Danach ist ein vollständiger Wiedereinbau jederzeit auch so möglich:

# Einzelne Datei zurückholen
git checkout livia-vor-rueckbau -- src/components/expose/

# Oder den kompletten Rückbau-Commit umkehren
git revert <commit-des-rueckbaus>

Das Archiv hier ist für den Fall gedacht, dass die Historie nicht zur Verfügung steht — etwa weil in einem anderen Repository, einem neuen Projekt oder aus einem Export heraus gearbeitet wird.


1. Teil A — Dateien, die ganz zu Livia gehören

Diese 23 Dateien haben ausserhalb von Livia keinen Zweck. Beim Rückbau werden sie gelöscht; beim Wiedereinbau werden sie aus archive/livia/src/… an dieselbe Stelle zurückkopiert.

Datei Rolle
src/pages/supply/MyListings.tsx Livias Arbeitsplatz (Route /supply/my-listings)
src/components/expose/ExposeWizard.tsx Drei-Schritt-Assistent Hochladen → Exposé → Export
src/components/expose/ExposeFieldGroup.tsx Feldgruppe eines Dossier-Bereichs
src/components/expose/ExposeMediaManager.tsx Bild- und Dokumentenkuration
src/components/expose/LeadTable.tsx Leadliste aktiv / archiviert
src/components/expose/LeadWorkspace.tsx Arbeitsbereich unter dem geöffneten Lead
src/components/expose/index.ts Barrel
src/domain/expose.ts ExposeDraft, ExposeImage, ExposeDocument, ExposeValues
src/domain/exposeLead.ts ExposeLead, ExposeLeadStatus
src/provider/IExposeProvider.ts Provider-Schnittstelle Entwürfe
src/provider/MockupExposeProvider.ts Mock-Implementierung Entwürfe
src/provider/IExposeLeadProvider.ts Provider-Schnittstelle Leads
src/provider/MockupExposeLeadProvider.ts Mock-Implementierung Leads
src/services/exposeService.ts Vorbelegung, Bildimport, Speichern, Erstellen
src/services/exposeLeadService.ts Leads lesen, anlegen, archivieren
src/services/exposeExport.ts Vorschau (HTML), PDF (Druckdialog), Word (.doc)
src/services/ai/mock/exposeTextBuilder.ts Deterministischer Textbaustein (Kernstück)
src/hooks/useExpose.ts React-Query-Hooks für Entwürfe
src/hooks/useExposeLeads.ts React-Query-Hooks für Leads
src/lib/exposeFields.ts Die 11 Bereiche und 9 Pflichtfelder
src/mock-data/exposeLeads.ts Seed-Daten Leads
src/mock-data/agents/livia.ts Personaldossier
src/assets/team/livia.jpg Porträt

Es gibt keine Barrel-Exporte in src/domain/index.ts oder src/hooks/index.ts, die angepasst werden müssten — geprüft. Der einzige Barrel ist src/components/expose/index.ts, und der verschwindet mit dem Ordner.

Wiedereinbau Teil A:

cp -r archive/livia/src/. src/

2. Teil B — Gemeinsam genutzte Dateien mit chirurgischen Eingriffen

Diese 16 Dateien bleiben bestehen; aus ihnen wird Livia herausgeschnitten. Das ist der Teil, der bei einem Wiedereinbau ohne Notizen Arbeit macht — deshalb steht hier jede Stelle einzeln. Die Zeilennummern beziehen sich auf Commit 5527448 und verschieben sich nach dem Rückbau.

2.1 Routing

src/App.tsx — zwei Zeilen (31 und 74):

const MyListings = lazy(() => import('./pages/supply/MyListings'))
<Route path="/supply/my-listings" element={<MyListings />} />

2.2 Zentrale Register — hier hängt am meisten dran

src/lib/agentWorkspaces.ts — eine einzige Zeile in AGENT_WORKSPACES (Zeile 28):

{ id: 'livia', name: 'Livia', role: 'Exposé Master',          path: ROUTES.SUPPLY.AGENT_LIVIA },

Wichtig: Diese Liste ist die zentrale Quelle für Sidebar (appShellConfig.ts), globales Navigationsmenü (GlobalNavMenu.tsx), Willkommensdialog (WelcomeDialog.tsx) und die Sitzplätze im 3D-Meetingraum der Startseite (meetingRoomSeats.ts). Ein Eintrag hier entfernt Livia an allen vier Stellen zugleich — und bringt sie ebenso überall zurück. Nach dem Rückbau ist das Team vier statt fünf Personen; die Sitzordnung im Meetingraum ändert sich dadurch sichtbar.

src/mock-data/teamAgents.ts — drei Stellen:

import { liviaAgent } from './agents/livia'     // Zeile 16
liviaAgent,                                      // in mockTeamAgents, Position 3
LIVIA: 'livia',                                  // in AGENT_IDS

src/components/team/agentPhotos.ts — zwei Zeilen (21 und 62):

import livia from '../../assets/team/livia.jpg'
  livia,

src/lib/constants.ts — Route und Fristwert:

AGENT_LIVIA: '/supply/my-listings',                                          // Zeile 102
export const STALE_EXPOSE_LEADS = 30 * 1000  // aggressive — Weiterleitungen sollen sofort erscheinen   // Zeile 62

sowie der ganze Block «Livia — Leads und Exposé» (Zeilen 319–356): EXPOSE_LEAD_TABS, ExposeLeadTab, EXPOSE_LEAD_TAB_LABELS, EXPOSE_STEPS, EXPOSE_IMAGE_CATEGORY_LABELS, EXPOSE_DOCUMENT_TYPE_LABELS, EXPOSE_TONALITY_LABELS. Der Block liegt wörtlich in fragmente/constants_livia.ts.txt.

2.3 KI-Schicht

Wörtlich in fragmente/aiService_livia.ts.txt.

Datei Was entfällt
src/services/ai/IAIService.ts Block «Exposé texts (Livia)»: ExposeTextSection, ExposeTonality, ExposeTextInput, ExposeTextResult (Z. 200–232) und die Interface-Methode generateExposeText (Z. 281)
src/services/ai/mock/MockAIService.ts Importe ExposeTextInput/ExposeTextResult (Z. 17–18), Import buildExposeText (Z. 25), Implementierung generateExposeText (Z. 305–309)
src/services/ai/backend/BackendAIService.ts Importe (Z. 62–63) und die Delegation generateExposeText an den Mock (Z. 687–689)

Achtung beim Wiedereinbau: generateExposeText steht im Interface IAIService. Fehlt die Methode in einer der beiden Implementierungen, bricht der Typecheck — beide zusammen zurückbauen.

2.4 Auslastungsanzeige der Agenten

src/services/agentWorkloadService.ts:

  • expose: 5 in URGENT_FROM (Z. 36)
  • Importe ExposeLeadStatus / ExposeLead (Z. 3–4) und das Feld exposeLeads in der Eingabe (Z. 51)
  • der ganze Block «Livia: weitergeleitete Leads» (Z. 117–128), inklusive der Sprachfassungen «Kein Exposé offen. Leite mir einen Lead weiter, dann lege ich los.» und «{n} Leads warten auf ein Exposé von mir.»

src/hooks/useAgentWorkload.ts: Import useExposeLeads, die Zeile const { data: exposeLeads = [], isLoading: exposeLoading } = useExposeLeads(), das Feld in computeAgentWorkload({ … }), die Abhängigkeitsliste und exposeLoading im isLoading.

Beides wörtlich in fragmente/workload_livia.ts.txt.

2.5 Die Agentenkette Nora → Livia → Bruno

Das ist inhaltlich der heikelste Teil — hier verschwindet nicht nur Livia, sondern der sichtbare Beweis, dass die Agenten einander zuarbeiten.

src/components/market-leads/LeadDetail.tsx (Noras Seite):

  • Import useCreateExposeLead (Z. 5), const forwardLead = useCreateExposeLead() (Z. 42)
  • die Funktion handleForward() (Z. 62–77)
  • der Knopf «An Livia zur Exposé-Erstellung weiterleiten» (Z. 194–204) samt Mehrfachauswahl der Objekte und der Erfolgsmeldung «An Livia weitergeleitet — {n} Objekt(e) für {Firma}.»

Wörtlich in fragmente/leadDetail_weiterleitung.tsx.txt.

src/components/visits/VisitPreparationDrawer.tsx (Brunos Briefing), Zeile 154:

<SectionTitle>Lagebericht (von Livia)</SectionTitle>

Dazu das Feld in src/domain/visitAssignment.ts (Z. 27, Kommentar «Lagebericht, den Bruno bei Livia angefragt hat») und zwei Mocktexte in src/mock-data/visitAssignments.ts (Z. 46 und 84), die beide mit «Lagebericht von Livia: …» beginnen.

Entscheidung nötig — siehe Abschnitt 4.

2.6 Mockdaten der Verwaltungsebene

Datei Livia-Anteil Archivkopie
src/mock-data/agentDirectory.ts Eintrag id: 'livia' (Z. 42–52) im Fragment
src/mock-data/agentConnections.ts AGENT_IDS.LIVIA in vier usedByAgentIds-Listen (Z. 35, 205, 289, 380) — nur die ID entfernen, nicht die Anbindung —
src/mock-data/agentProtocol.ts fünf Einträge (Z. 369–449, 691–703, 836–848, 945–956, 972–983) fragmente/agentProtocol_livia.ts.txt
src/mock-data/agentWorkItems.ts awi-livia-01 und awi-livia-02 (Z. 1226–1498) fragmente/agentWorkItems_livia.ts.txt

2.7 Tests

Datei Was bricht
src/components/layout/__tests__/appShellConfig.test.ts Z. 52 erwartet ['Ferdi', 'Bruno', 'Livia', 'Nora', 'Sina']; Z. 88 erwartet, dass ROUTES.SUPPLY.AGENT_LIVIA den Seitennamen «Livia» ergibt
src/services/__tests__/agentWorkloadService.test.ts verwendet exposeLeads in der Eingabe und prüft Livias Auslastungsbahn

2.8 Hilfsskript

scripts/build-agent-portraits.mjs — Zuordnung 'image3.jpg': 'livia' (Z. 51). Nur relevant, wenn die Porträts neu erzeugt werden.


3. Reihenfolge

Rückbau (von aussen nach innen, damit der Typecheck bei jedem Schritt hilft):

  1. App.tsx — Route heraus
  2. agentWorkspaces.ts, teamAgents.ts, agentPhotos.ts — aus den Registern nehmen
  3. LeadDetail.tsx — Weiterleitung, useAgentWorkload.ts + agentWorkloadService.ts — Bahn
  4. AI-Schicht (Interface und beide Implementierungen zusammen)
  5. Mockdaten (Directory, Connections, Protokoll, WorkItems)
  6. Tests anpassen
  7. constants.ts — Block und Route
  8. Erst jetzt die 23 Dateien aus Teil A löschen
  9. npx tsc --noEmit && npm run lint && npm test

Wiedereinbau (genau umgekehrt):

  1. cp -r archive/livia/src/. src/
  2. constants.ts aus dem Fragment ergänzen
  3. AI-Schicht (Interface und beide Implementierungen)
  4. Mockdaten aus den Fragmenten
  5. Register: agentWorkspaces, teamAgents, agentPhotos
  6. Auslastung, Weiterleitung bei Nora, Brunos Lagebericht-Abschnitt
  7. Route in App.tsx
  8. Tests zurück auf fünf Agenten
  9. npx tsc --noEmit && npm run lint && npm test

Prüfung nach dem Wiedereinbau: /supply/my-listings öffnen, einen Lead aufklappen, ein Pflichtfeld leeren (rote Umrandung erwartet), KI-Entwurf für den Objektbeschrieb auslösen (bei fehlendem Ausbaustandard darf kein Text entstehen, sondern die Lücke gemeldet werden), Export als PDF und Word auslösen. Zusätzlich bei Nora ein Signal an Livia weiterleiten und prüfen, ob der Lead auf Livias Seite erscheint.


4. Entscheidungen, die beim Rückbau zu treffen sind

Diese drei Punkte sind keine technischen Fragen — sie sollten bewusst entschieden und hier festgehalten werden, sonst fehlt beim Wiedereinbau die Begründung.

  1. Bleibt der Abschnitt «Lagebericht (von Livia)» in Brunos Besichtigungsbriefing? Bleibt er stehen, zeigt das Briefing einen Lagebericht ohne Urheber — die Belegkette wird unklar. Wird er entfernt, verliert Brunos Briefing einen inhaltlichen Baustein. Empfehlung: Feld und Text belassen, aber die Beschriftung von «(von Livia)» auf «Lagebericht» ändern — der kleinste Eingriff, der beim Wiedereinbau in einer Zeile rückgängig ist.

  2. Bleibt bei Nora der Knopf «An Livia weiterleiten»? Ohne Livia hat die Weiterleitung kein Ziel; der Knopf muss weg. Damit entfällt der sichtbare Übergabemoment zwischen zwei Agenten — in der Präsentation bisher das stärkste Argument. Wenn der Case später wieder gebraucht wird, ist dieser Knopf das Erste, was zurückkommen muss.

  3. Wie wird aus fünf Agenten vier? Personalzahl, Sitzordnung im Meetingraum der Startseite, Willkommensdialog und die Reihenfolge «Ferdi, Bruno, Livia, Nora, Sina» hängen alle an AGENT_WORKSPACES. Technisch passiert das von selbst, optisch aber nicht folgenlos — die Startseite sollte nach dem Rückbau angeschaut werden.


5. Inhalt dieses Verzeichnisses

archive/livia/
├─ WIEDERHERSTELLUNG.md              ← dieses Dokument
├─ src/                              ← 23 Originaldateien im Original-Pfadlayout
│  ├─ pages/supply/MyListings.tsx
│  ├─ components/expose/…            (6 Dateien)
│  ├─ domain/…                       (2)
│  ├─ provider/…                     (4)
│  ├─ services/…                     (3 + ai/mock/exposeTextBuilder.ts)
│  ├─ hooks/…                        (2)
│  ├─ lib/exposeFields.ts
│  ├─ mock-data/…                    (2)
│  └─ assets/team/livia.jpg
└─ fragmente/                        ← wörtliche Ausschnitte aus geteilten Dateien
   ├─ constants_livia.ts.txt
   ├─ aiService_livia.ts.txt
   ├─ workload_livia.ts.txt
   ├─ leadDetail_weiterleitung.tsx.txt
   ├─ agentDirectory_livia.ts.txt
   ├─ agentProtocol_livia.ts.txt
   └─ agentWorkItems_livia.ts.txt

Fachliche Beschreibung, Aufgabenkatalog und System-Prompt: LIVIA_PROFIL_UND_PROMPT.md im Repo-Root.