Files
property-match/archive/livia/WIEDERHERSTELLUNG.md
Benjamin SutterandClaude Opus 5 a219d3f2ec feat(livia)!: Exposé-Funktion vollständig entfernt
Runde 8 hat Livia zur Research- & Market-Intelligence-Agentin gemacht. Die
Exposé-Erstellung war der Kern ihrer alten Rolle und fällt mit ihr weg — sie
wird nicht nachgeordnet weitergeführt. Ein zweiter Reiter hätte die Funktion
sichtbar gelassen und die neue Positionierung damit halbiert.

Entfernt: 23 Dateien (Arbeitsbereich, dreistufiger Assistent, Dossier mit elf
Bereichen, Provider, Services, Hooks, Feldkatalog, Mockdaten, deterministischer
Textbaustein) sowie `generateExposeText` aus `IAIService` und beiden
Implementierungen.

Livias Arbeitsplatz zeigt jetzt nur noch die Recherche-Leads — ohne
Reiterbalken, weil eine Leiste mit einem Eintrag eine Alternative behauptet,
die es nicht gibt. Ihr Personalblatt, die Bearbeitungsverlaufs-Einträge und die
Teamdokumentation sind auf die neue Rolle nachgezogen; die beiden
Beispielvorgänge zeigen jetzt eine Leaderzeugung und ein Review mit
widersprüchlichen Quellen statt Lagebeschrieb und Exposétext.

Bei Nora entfällt die Mehrfachauswahl in der Objektliste: sie diente allein der
Weiterleitung an die Exposé-Erstellung. Eine Auswahl ohne Ziel wäre ein
Bedienelement, das nichts auslöst. Die Matching-Darstellung selbst bleibt
unverändert.

Der Wiederaufbau ist in `archive/livia/` beschrieben; das Manifest hält jetzt
fest, welche seiner Annahmen eingetreten sind und welche nicht — Livia bleibt
im Team, nur die Funktion ist weg.

Geprüft: tsc 0 Fehler, eslint 0 Fehler/0 Warnungen, 423/423 Tests grün,
Produktionsbuild erfolgreich, Smoke-Test über sieben Seiten ohne
Laufzeitfehler, 12/12 Abnahmekriterien erfüllt.

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

15 KiB
Raw Permalink 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.

Vollzogen am 23.08.2026. Mit Runde 8 wurde Livia zur Research- & Market-Intelligence- Agentin, und die Exposé-Funktion ist vollständig aus der Anwendung entfernt worden — nicht bloss nachgeordnet. Alle 23 Dateien aus Teil A sind gelöscht, die Eingriffe aus Teil B ausgeführt. Dieses Manifest ist damit von der Vorsorge zur Wiedereinbau-Anleitung geworden.

Abweichungen gegenüber der ursprünglichen Annahme — beim Wiedereinbau beachten:

  • Livia ist nicht aus den Registern entfernt worden. Sie bleibt im Team, nur mit anderer Rolle. Abschnitt 2.2 beschreibt einen Rückbau, der so nicht stattgefunden hat: die Einträge in agentWorkspaces.ts, teamAgents.ts, agentPhotos.ts und agentDirectory.ts stehen unverändert, dort wurde nur die Funktionsbezeichnung geändert. Das Team hat weiterhin fünf Mitglieder; die Sitzordnung im Meetingraum ist unberührt.
  • Die Weiterleitung bei Nora (Abschnitt 2.5) ist entfallen, weil sie ohne Exposé kein Ziel mehr hatte. Mit Runde 8 fliessen Leads in die Gegenrichtung: Livia recherchiert, Nora gleicht ab.
  • Brunos Abschnitt «Lagebericht (von Livia)» steht unverändert — er hing an der Lage-, nicht an der Exposé-Funktion.
  • Zusätzlich entfernt, weil erst mit Runde 8 entstanden: ExposeLeadSection.tsx.

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.