Files
HiveGrid-Wireframes/03 Quellen und Referenzen/hivegrid-cloud/docs/ARCHITECTURE-DECISIONS.md
T

11 KiB

HiveGrid 2.0 — Entscheidungsregister

Stand: 2026-08-02

Diese Datei sichert die Architekturentscheidungen und ihre IDs. Sie ist bewusst kein zweites Agenten-Handbuch:

  • Operative, repo-weite Regeln stehen in AGENTS.md.
  • Das Datenmodell steht in .planning/ENTITY-MODEL.md.
  • Scope, Abhängigkeiten und DoD stehen in der jeweiligen Ticket-Doc.
  • Genehmigte Produktänderungen stehen in docs/CHANGE-REQUESTS.md.
  • Infrastrukturentscheidungen folgen ../infra/STANDARDS.md und ../infra/decisions/.

Die ausführliche Fassung vor diesem Recut bleibt über die Git-Historie erhalten. Dieses Register hält stattdessen pro ID nur den aktuellen Entscheid, den Grund und den maßgeblichen Anker fest.

Status: aktiv = bindende Zielarchitektur · historisch = Kontext, keine operative Regel · abgelöst = durch eine neuere Entscheidung ersetzt.

Aktive Kernentscheidungen

ID Entscheidung Grund und Anker
AD-1 Mandantendaten werden durch Postgres-RLS mit FORCE ROW LEVEL SECURITY, kontextgebundene App-/Worker-Rollen ohne BYPASSRLS und tenant-sichere Nebenpfade geschützt. Neue Tabellen benötigen Policy und Contract-Gate. Defense-in-depth gegen vergessene App-Filter. Operativer Vertrag: AGENTS.md §Row-Level-Security.
AD-2 Fachmodelle sind typisierte Prisma-Tabellen. Der generische Entity/Row/RowValue-Builder erhält keine neuen Konsumenten und wird bei Berührung seiner Altmodule typisiert abgelöst. Typen, Indizes, Constraints, Permissions und RLS bleiben fachlich prüfbar. Migration: AGENTS.md §Entity-Builder und .planning/ticket-docs/R-P6B.md.
AD-3 Die Plattform-Admin-Welt nutzt eigene AdminUser-, Session-, RBAC- und MFA-Grenzen. Produktiv ist Authentik-OIDC der einzige Admin-Login; der lokale Passwort-Fallback bleibt development-only und fail-closed. Kein Generalschlüssel zwischen Plattform und Mandanten. Anker: AGENTS.md §Kanonische lokale Login-Daten und Estate-Infrastruktur.
AD-4 Sessions sind serverseitig; Postgres ist Source of Truth, Redis nur der schnelle Validierungs-Cache. Cookies enthalten ausschließlich die Sessionreferenz. Dauerhaftes Revoke, Geräteliste und verlässliches Revoke-all.
AD-8 Sensible Tenant-Daten und Provider-Credentials nutzen per-Tenant-DEKs mit Envelope-Encryption. Der aktuelle Wrapper nutzt getrennte Environment-Secrets (CRYPTO_SECRET), bleibt aber gegen einen externen Key-Wrapper austauschbar; Tenant-Löschung zerstört den DEK. Begrenzter Blast-Radius und Crypto-Shredding. Anker: packages/db/src/crypto/tenant-envelope.server.ts, docs/env-vars.md.
AD-20 CRM und Pipelines sind projekt-zentrisch: ein typisierter Projekt-Kern, Pipelines als konfigurierbare Views, Lead → Projekt; Deal/Auftrag sind keine eigenen Kernentitäten. Ein konsistentes Domänenmodell statt paralleler Objektwelten. Source of Truth: .planning/ENTITY-MODEL.md.
AD-21 Prisma bleibt ein Schema-Ordner. Neue Domänenmodelle erhalten eine eigene Datei; core.prisma/accounts.prisma bleiben minimale gemeinsame Kerne. Feature-Branches nutzen db push, die lineare Forward-only-Migration entsteht beim Merge. Vermeidet Schema- und Migrationskonflikte bei paralleler Arbeit. Operativer Vertrag: AGENTS.md §Prisma-Schema & Migrationen.
AD-22 GeoIP wird lokal aus einer MMDB aufgelöst. Persistiert werden HMAC-pseudonymisierte IPs und höchstens das Land, keine präzisen Geodaten. Keine Übermittlung von Endnutzer-IPs an einen Geo-SaaS; Datenminimierung. Anker: apps/web/app/modules/ipAddress/.
AD-23 Uploads liegen privat. Zugriff erfolgt über authentifizierte, tenant- und permission-geprüfte App-Routen oder eng begrenzte signierte URLs. DSGVO-Exporte werden wegen SSE-C ausschließlich durch die geprüfte App-Route gestreamt. Kundendokumente dürfen nie durch erratbare oder dauerhafte Public-URLs erreichbar sein.
AD-29 Jeder neue Workspace erhält fünf versionierte, editierbare SHK-Rollen; der Owner erhält nur die globale Rolle Admin. Bestehende Tenants werden nicht automatisch umgeschrieben. Reproduzierbares produktionsgleiches Bootstrap ohne SEED_*-Runtime-Schalter. Anker: apps/web/app/domain/tenant-bootstrap/.

Aktive Plattform- und Produktentscheidungen

ID Entscheidung Grund und Anker
AD-5 Suche ist selbst gehostetes Meilisearch mit hivegrid-*-Indizes, Tenant-Filter, Outbox-Indexer und SQL-Revalidierung. v1/v2 bleiben keyword-only; pgvector, Embeddings und RRF entfallen. Staging nutzt den Estate-Dienst, Produktion die dedizierte HiveGrid-Instanz aus AD-24. Gute Keyword-Suche ohne eigene KI-/RAG-Infrastruktur. Anker: docs/deploy/meilisearch.md.
AD-6 Mailjet ist Provider für transaktionale und Marketing-Mails. MailerSend ist keine Zielarchitektur. EU-Anbieter und ein gemeinsamer Mailpfad.
AD-7 Captcha ist self-hosted. mCaptcha bleibt der kompatible Default; Cap ist der eingecheckte Ersatzpfad. Google-, Cloudflare- und hCaptcha-Abhängigkeiten sind keine Zielarchitektur. Kein externer US-Captcha-Subprozessor. Anker: packages/captcha/, infra/mcaptcha/, infra/cap/.
AD-9 Bidirektionaler Chat nutzt WebSockets; einseitige Live-Updates nutzen SSE. Hocuspocus bleibt auf CRDT-Kollaboration begrenzt. Passendes Transportmodell je Interaktion statt eines Universal-Realtime-Layers.
AD-10 Produktcode und interne Contracts heißen ausschließlich @hivegrid/*, HIVEGRID_*, hivegrid_*, x-hivegrid-* und hivegrid.*. Externe Estate-Namen wie toolctrl-labs bleiben unverändert. Keine parallelen Alt-Aliase oder fiktiven Paketpfade. Operativer Vertrag: AGENTS.md §Naming-Konvention.
AD-17 Mobile ist in v1/v2 ausschließlich responsive Web/PWA mit Service Worker, IndexedDB/Offline-Queue und Web Push. Keine native App, kein Expo/Capacitor, kein App-Store-Scope vor v3. Eine auslieferbare mobile Oberfläche ohne zweiten Client-Stack.
AD-24 HiveGrid-Produktion läuft als Ausnahme zum Estate-Default in einem eigenen Hetzner-Account mit eigenem Coolify und fünf VMs. Gitea Registry, Sentry und Cloudflare bleiben geteilte, authentifizierte Dienste; Meilisearch, ClamAV und Captcha laufen innerhalb des Prod-Accounts. Harte Blast-Radius- und Spin-off-Grenze. Autoritative Infra-Entscheidung: ../infra/decisions/016-hivegrid-prod-dedicated-account-and-coolify.md; Runbook: docs/ops/prod-rollout-hivegrid.md.
AD-25 Die Standard-E-Signatur ist eine gehärtete, selbst betriebene SES mit Intent, OTP, PDF-Versiegelung, Zeitstempel und Audit-Trail. PandaDoc bleibt optionales Tenant-BYOK; QES ist ein späteres DE-QTSP-Add-on. Vor Produktivfreigabe bleibt juristische Bestätigung Pflicht. Souveräner Standardpfad bei erhaltener Provider-Option. Anker: packages/integrations/src/adapters/ses-selfhosted.ts, .planning/ticket-docs/AK-P16d.md.
AD-26 HiveGrid hostet in v1/v2 kein LLM, RAG, Whisper oder HiveMind. KI-Clients bringen die Inferenz mit und greifen über den separaten MCP-Service auf permission- und tenant-gescopte Tools zu. Kein eigener KI-Provider-, Modell- oder Tokenabrechnungs-Stack. Anker: apps/mcp, .planning/ticket-docs/VR-MCP.md.
AD-27 Billing ist dreigeteilt: HiveGrid hält Produktrechte, Lago self-hosted hält Billing/Invoices, Mollie verarbeitet Zahlungen. Kein Usage-Billing in v1; Fachdaten werden nicht an Billing-/Payment-Provider übertragen. Klare Source-of-Truth-Grenzen ohne Legacy-Provider-Default. Anker: BILL-*-Ticket-Docs und docs/ops/lago-*.md.
AD-28 Fehlende finale Screens blockieren Dev-Tickets nicht. Der Dev baut eine getestete Interim-UI aus ~/ui gegen stabile View-Models; die finale Subframe-Optik bleibt als design-nachzug getrackt. Backend- und Integrationsarbeit bleibt lieferbar, ohne den Designer-Workflow zu umgehen. Operativer Vertrag: AGENTS.md und .planning/INTERIM-UI-PLAYBOOK.md.
AD-30 Das Customer-Portal läuft auf einem eigenen Host und in der getrennten Runtime hivegrid-portal, zunächst aus demselben unveränderlichen Web-Image. Eigene Sessions, minimale DB-Rechte, Entitlement-Gates und verifizierte Custom-Domains sind Pflicht. Öffentliche Endkunden-Surface braucht eine eigene Trust Boundary. Kommerzieller und Domain-Vertrag: docs/CHANGE-REQUESTS.md CR-001; Routen: docs/INTEGRATION-CONTRACTS.md.
AD-31 Plattform-Leads gehören tenantlos in die Admin-Domäne von HiveGrid. Der separate lead-inbox-Dienst wird erst nach gesichertem Backfill, Cutover und Drain stillgelegt. Kein zweites CRM und keine künstliche Tenant-Zuordnung für HiveGrids eigenen Vertrieb. Anker: .planning/ticket-docs/R-LEADS.md, .planning/ticket-docs/VA-P28b.md.
AD-32 Der initiale KWP-Scope ist fachlich read-only: OAuth-Lifecycle und die feste Read-Allowlist sind erlaubt, KWP-Mutationen sind vor HTTP fail-closed gesperrt. Writeback braucht zuerst VEXT-6 und eine neue ausdrückliche Produktfreigabe. Kein spekulativer oder nicht auslieferbarer Schreibpfad. Vollvertrag: .planning/KWP-API-CONTRACT.md, CR-003/CR-005 und VR-P32*.

Historische oder abgelöste Entscheidungen

ID Status Gesicherter Kontext
AD-11 historisch Der ursprüngliche Baupfad „Fundament, Kernkette, Breite“ erklärt die frühe Reihenfolge. Operativ gelten heute Plane, Ticket-Docs und Roadmaps.
AD-12 abgelöst durch AD-29 Frühere SHK-Rollen-Seeds mit zehn beziehungsweise sechs Rollen wurden entfernt. Das deklarative Bootstrap-Prinzip lebt in AD-29 weiter.
AD-13 historisch Der frühe Produktentscheid war ein breiter Geerkens-Launch. Aktueller Lieferumfang und Termine werden ausschließlich über Requirements, Ticket-Docs und Plane gesteuert.
AD-14 teilweise abgelöst durch AD-32 Der saubere Start ohne vollständige HubSpot-/Quiply-Migrationspipelines bleibt Kontext. Die Annahme, KWP fülle den Bestand direkt per Vollsync, ist nicht mehr der aktuelle Vertrag.
AD-15 abgelöst durch AD-27/AD-30 Die alte Billing- und Preisparker-Entscheidung wurde durch Lago/Mollie und die ausdrücklich genehmigten Portalpreise ersetzt. Weitere Preise bleiben ohne CR unentschieden.
AD-16 teilweise abgelöst durch AD-26 Die Automation-Säule bleibt im Requirement-Scope. Der eigene KI-Layer ist vollständig gestrichen.
AD-18 abgelöst durch AD-30 und P26-Tickets Der alte „vollständiges Portal day-1“-Text ist kein Liefervertrag mehr. Runtime, Features und Rollout liegen in CR-001 und VA-P26*.
AD-19 historisch „Big Bang“ war eine frühe Go-live-Strategie. Aktuelle Release-, Pilot- und Sign-off-Entscheidungen liegen in Plane, Ticket-Docs und Runbooks.

Pflegevertrag

Eine neue oder geänderte Entscheidung aktualisiert in derselben Änderung:

  1. die operative Regel in AGENTS.md, falls Agents sie beim Bauen beachten müssen,
  2. dieses Register mit Status und Verweis,
  3. die betroffenen Ticket-Docs/Contracts,
  4. bei Scope- oder Produktänderungen docs/CHANGE-REQUESTS.md.

Neue Langform-ADRs werden nur angelegt, wenn Trade-offs oder Rollback nicht sinnvoll in einem Ticket oder Infra-ADR dokumentiert werden können. Das Register darf nicht erneut zu einem parallelen Planungsarchiv anwachsen.