feat(team): Datenschicht für Property On

Property On wird als Funktionsbereich "Teamübersicht" in Property Match
eingebettet — sieben digitale Mitarbeiter, die ausführen, während der Mensch
freigibt, anpasst oder zurückweist.

Durchgehend Provider → Service → Hook, kein übersprungener Layer:
- domain/: teamAgent, agentWorkItem, agentProtocol, agentConnection, agentFilters
- mock-data/: 7 Personalblätter aus dem Agenten-Katalog (Aufgabenzahlen exakt:
  Ferdi 9, Sina 7, Lea 11, Bruno 9, Reto 10, Livia 11, Nora 8), 14 Vorgänge,
  38 Protokolleinträge, 9 Verbindungen
- provider/: vier Mockup-Provider mit versionierter localStorage-Persistenz
- services/: Fachlogik inkl. Freigabe, Zurückweisung, Kennzahlen, Demo-Reset
- hooks/: React Query, Mutationen entwerten Vorgänge, Kennzahlen und Protokoll
  gemeinsam — sonst zeigt die Oberfläche widersprüchliche Zahlen

Namensgebung: Der Entitätstyp heisst TeamAgent, nicht Agent. Im Repo existiert
bereits PowerOn als KI-Backend-Proxy, und Claude Code legt Arbeitskopien unter
agent-* ab; ein nackter Typ Agent wäre in Suchen nicht auffindbar. Alle
Satellitentypen sind Agent*-präfixiert, weil domain/index.ts per export *
bündelt und generische Namen dort kollidieren.

Eigener Protokolltyp statt ActivityEvent: den Namen gibt es im Repo dreifach
und gegenseitig inkompatibel (domain/activityEvent.ts, governanceService.ts,
PropertyActivityLogPanel.tsx). Ein Anschluss hätte den Konflikt zementiert.

Demo-Uhr in lib/teamClock.ts: die Mockdaten sind auf den 20.05.2026 verankert.
Gegen die Systemzeit gerechnet wären die Filter "heute / diese Woche / dieser
Monat" an jedem anderen Kalendertag leer und die Auswertung sähe kaputt aus,
obwohl sie korrekt rechnet.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Benjamin SutterandClaude Opus 5 committed 2026-08-03 16:55:40 +02:00
1 parent 36ce548169
commit 52dc7de25e
38 files changed
+9055

No files matched your search

+40
View File
@@ -0,0 +1,40 @@
/**
* Property On — Kernteam der sieben digitalen Mitarbeiter.
*
* Reihenfolge alphabetisch nach Vorname (§7.2 der Spezifikation): Bruno, Ferdi,
* Lea, Livia, Nora, Reto, Sina. Die Agentenliste in der Personalverwaltung
* rendert genau diese Reihenfolge, ohne selbst zu sortieren.
*/
import type { TeamAgent } from '../domain/teamAgent'
import { brunoAgent } from './agents/bruno'
import { ferdiAgent } from './agents/ferdi'
import { leaAgent } from './agents/lea'
import { liviaAgent } from './agents/livia'
import { noraAgent } from './agents/nora'
import { retoAgent } from './agents/reto'
import { sinaAgent } from './agents/sina'
export const mockTeamAgents: TeamAgent[] = [
brunoAgent,
ferdiAgent,
leaAgent,
liviaAgent,
noraAgent,
retoAgent,
sinaAgent,
]
/** Stabile IDs — Mockdaten anderer Bestände referenzieren ausschliesslich diese. */
export const AGENT_IDS = {
BRUNO: 'bruno',
FERDI: 'ferdi',
LEA: 'lea',
LIVIA: 'livia',
NORA: 'nora',
RETO: 'reto',
SINA: 'sina',
} as const
/** Zeitanker sämtlicher Property-On-Mockdaten. */
export const MOCK_TODAY = '2026-05-20T09:00:00.000Z'