DEVELOPMENT-GUIDELINES
DEVELOPMENT_GUIDELINES.md#
Development Guidelines – Netzwerksolution#
Diese Richtlinien gelten für sämtliche Änderungen an der Netzwerksolution.
Ziel ist eine langfristig wartbare, testbare und nachvollziehbare Softwarearchitektur. Neue Funktionen sollen sich in die bestehende Architektur einfügen und nicht parallel dazu entstehen.
Die Datei ist bewusst als praktischer Entwicklungsleitfaden gehalten. Sie ersetzt kein großes Architekturhandbuch, sondern beschreibt verbindliche Regeln für die tägliche inkrementelle Weiterentwicklung.
Verbindlicher KI-Entwicklungsworkflow#
Für KI-gestützte Änderungen gilt zusätzlich verbindlich:
90-governance/guidelines/ENGINEERING_CHANGE_WORKFLOW.md
Dieses Dokument ist die Single Source of Truth für Roundtrip, Changed-only-Rückgabe, Import, Export, Statusmodell, lokale Toolchain und Teststrategie. Workspace und Building Blocks dürfen diese Regeln nur konkretisieren, nicht duplizieren oder abweichend definieren.
Verbindlicher Import- und Löschvertrag#
Für jede Änderung, die Dateien hinzufügt, überschreibt, entfernt oder als ZIP/Patch zurückgibt, gilt zusätzlich verbindlich:
90-governance/guidelines/ARTIFACT_IMPORT_AND_DELETE_RULES.md
Insbesondere gilt: Ein Changed-only-, Workspace-, SolutionArchitecture- oder Building-Block-ZIP ist kein impliziter Mirror. Dateien dürfen nur gelöscht werden, wenn sie im Manifest unter deletedFiles einzeln aufgeführt sind. Verzeichnisse, Wildcards und implizite Löschungen sind nicht zulässig.
Building-Block-Readiness-Promotion#
Ein leer vorbereiteter GlossarbegriffEin Building Block ist ein abgegrenzter Baustein mit stabiler Verantwortung zur Realisierung von Capabilities.Glossareintrag vollständig lesen darf nur dann durch den Watcher promoviert werden, wenn er als Readiness-Artefakt ausdrücklich validiert ist. Dafür muss der Lifecycle-Record vollständig sein und die vom Promotion-Lifecycle geprüften Felder enthalten: lifecycle_state, maturity, promotion_allowed, last_validation.result und last_validation.timestamp.
Ein Readiness-Artefakt mit promotion_allowed=true bedeutet ausschließlich: Das leere Zielartefakt darf in Workspace und Building-Block-Repository aufgenommen werden. Es bedeutet nicht, dass die fachliche Implementierung abgeschlossen ist. Die spätere fachliche Migration benötigt erneut eigene Validierung, Tests und Lifecycle-Aktualisierung.
Runtime-neutrale Readiness-Building-Blocks dürfen keine Monolith- oder Runtime-Dateien überschreiben. Ihre integration-map.json muss auf ein leeres Assembly-Verzeichnis oder eine anderweitig belegbar neutrale Quelle zeigen.
Bootstrap- und Lifecycle-Kompatibilität#
Ein leerer Building Block muss unmittelbar nach dem Bootstrap alle strukturellen Schema-Anforderungen erfüllen. Wird er zusätzlich als Readiness-Artefakt für eine GlossarbegriffTechnical documentation artifact.Glossareintrag vollständig lesen vorbereitet, muss sein lifecycle-record.json die vom Promotion-Lifecycle geprüften Pflichtfelder vollständig enthalten. Mindestens erforderlich sind:
lifecycle_state,maturity,promotion_allowed,last_validation,last_validation.result,last_validation.timestamp.
Ein Bootstrap darf keine Artefakte erzeugen, die vom Download-Watcher aufgrund fehlender Pflichtfelder erst am Ende eines vollständigen Build- und Testlaufs zurückgewiesen werden. Lifecycle- und Schemafehler sind Import- oder Frühvalidierungsfehler.
Ein leerer Readiness-Building-Block darf keine Monolith- oder Runtime-Dateien in die Zielruntime kopieren oder überschreiben. Seine integration-map.json muss runtime-neutral sein, zum Beispiel durch ein belegbar leeres Assembly-Verzeichnis oder eine ausdrücklich dokumentierte No-op-Integration.
1. Grundprinzipien#
Vor jeder Änderung ist zu prüfen:
- Gibt es bereits ein passendes GlossarbegriffEin Feature ist eine abgegrenzte, nutzbare und lieferbare Ausprägung einer Lösung.Glossareintrag vollständig lesen?
- Gibt es bereits eine passende Komponente?
- Kann bestehender GlossarbegriffCode ist eine ausführbare oder interpretierbare technische Realisierung, die durch Tests und Runtime-Evidence überprüfbar bleibt.Glossareintrag vollständig lesen erweitert werden?
- Kann vorhandene Logik wiederverwendet werden?
- Ist die Änderung mehrsprachig, testbar und historisierbar umsetzbar?
- Muss das Feature über Feature Flags aktivierbar oder deaktivierbar sein?
Neue globale Funktionen, Events oder Hilfsklassen werden nur eingeführt, wenn sie mehrfach benötigt werden.
Code wird für Menschen geschrieben.
Lesbarkeit besitzt Vorrang vor Mikrooptimierungen.
Eine schnelle Lösung darf keine Parallelarchitektur erzeugen. Falls eine kurzfristige Lösung gegen diese Richtlinien verstößt, wird dies vor der Umsetzung benannt.
2. Projektstruktur#
Alle Fachlogik ist in Features organisiert.
Beispiel:
features/
boards/
explorer/
ribbon/
sidepanel/
relationships/
universes/
systems/
capabilities/
usecases/
processes/
Jedes Feature besitzt klar abgegrenzte Verantwortlichkeiten.
Innerhalb eines Features werden Komponenten möglichst klein gehalten.
Beispiel:
relationships/
relationship-editor.js
relationship-renderer.js
relationship-routing.js
relationship-toolbar.js
Neue Dateien werden nur dort angelegt, wo sie fachlich hingehören.
Es werden keine zweiten Strukturen für dieselbe Fachlichkeit aufgebaut.
2a. Dokumentationsmodell#
Die Dokumentation unterscheidet verbindlich zwischen Solution Architecture und Solution Design.
Solution Architecture beschreibt ausschließlich globale Architektur, Architekturprinzipien, Building-Block-Konzept, Enterprise-Architecture, Prozesse, Standards, Packaging, Build-Strategie, Integrationsregeln, Release-Vorgehen und das Zusammenspiel aller Building Blocks.
Solution Design beschreibt ausschließlich die eigene Lösung eines Building Blocks: Verantwortung, Schnittstellen, Konfiguration, Implementierung, Tests, Deployment-Besonderheiten und interne Entscheidungen.
Der Workspace enthält keine Kopien der Building-Block-Dokumentation. Er beschreibt Runtime, Build, Deployment, Packaging, Installationsabläufe, Skripte und Entwicklungsumgebung.
Für Building-Block-Repositories ist die Dokumentationsstruktur verbindlich in 40-concepts/documentation-architecture/Building_Block_Documentation_Structure.md definiert. Dauerhafte Building-Block-Dokumentation liegt unter documentation/. Zeitlich gebundene Arbeitsunterlagen liegen unter working-documents/. documents/ ist eine Legacy-Struktur und darf in neuen oder normalisierten Building Blocks nicht mehr verwendet werden.
Workspace-Dokumente dürfen diese Regel nur umsetzen oder darauf verweisen. Die Sollstruktur eines Building Blocks wird nicht aus dem Workspace abgeleitet.
Historische Projektdokumente werden Plateau-bezogen abgelegt. Aktuelle Arbeitsanweisungen dürfen keine veralteten Paket- oder Arbeitsanweisungsreferenzen enthalten. Verweise auf früheres Monolith-Paket sind nur zulässig, wenn konkret dieses Building-Block-Paket gemeint ist; Verweise auf SolutionArchitecture.zip sind zulässig, wenn das globale Solution-Architecture-Paket gemeint ist.
2b. Modularisierung in zwei Phasen#
Building-Block-Splits werden nicht mehr automatisch als kombinierte Architektur- und Code-Sprints verstanden. Wenn Roadmap, Registry, Lifecycle, Packaging, Watcher oder Readiness vorab geklärt werden müssen, ist zuerst ein Architecture-and-Roadmap-Sprint durchzuführen.
Die verbindliche Regel steht in:
70-building-blocks/split-reports/BUILDING_BLOCK_SPLIT_PHASE_MODEL.md
Ein Migration-Sprint darf keine Roadmap-Widersprüche durch Annahmen auflösen. Er muss Roadmap, building-blocks.yaml, vorhandene Building-Block-ZIPs und Lifecycle-Records gegeneinander prüfen. Ist ein Building Block bereits in Registry oder building-blocks.yaml mit Extracted, Validated oder höher enthalten, darf er nicht erneut migriert werden, ohne dass die Architektur zuvor korrigiert oder der Widerspruch ausdrücklich aufgelöst wurde.
Komplexe oder unklare Splits erhalten vor der Migration einen Split-Plan unter:
20-building-blocks/plans/<BB-ID>_SPLIT_PLAN.md
Der Migration-Sprint arbeitet diesen Plan ab und dokumentiert jede Abweichung im Split-Report.
3. Komponenten#
Jede Komponente besitzt genau eine Aufgabe.
Komponenten sollen:
- klein
- verständlich
- unabhängig
- wiederverwendbar
- testbar
sein.
Große Dateien sind frühzeitig aufzuteilen.
Eine Komponente darf nicht direkt in interne Zustände anderer Komponenten greifen.
Kommunikation erfolgt über öffentliche APIs, definierte Events oder zentrale Controller.
4. HTML#
HTML wird grundsätzlich human readable geschrieben.
Regeln:
- 4 Spaces Einrückung
- keine Tabs
- logische Struktur
- keine unnötigen Verschachtelungen
- sichtbare Texte nicht hart im Code verdrahten, sondern über I18N-Schlüssel beziehen
Beispiel:
<button
id="RelationshipsEditorDelete"
class="toolbar-button"
title="{{t.relationships.editor.deleteTooltip}}"
>
{{t.relationships.editor.delete}}
</button>
HTML wird so geschrieben, dass es in den Browser Developer Tools lesbar und nachvollziehbar bleibt.
5. IDs#
Alle interaktiven UI-Elemente besitzen eindeutige IDs.
Dies betrifft insbesondere:
- Buttons
- Dialoge
- Textfelder
- Selects
- Checkboxen
- Panels
- SVG-Komponenten
- Canvas
- Werkzeugleisten
IDs sind sprechend.
Beispiele:
RelationshipsEditorTitle
RelationshipsEditorDescription
RelationshipsEditorDirection
RelationshipsEditorDelete
UniverseCreateDialog
BoardsZoomIn
BoardsZoomOut
ExplorerUniverseTree
Nicht zulässig:
button1
input2
editor001
IDs dienen für:
- eindeutige UI-Identität
- Debugging
- Browser Developer Tools
- Playwright
- Dokumentation
Separate data-testid-Attribute werden grundsätzlich nicht verwendet.
Es existiert genau eine eindeutige Identität eines UI-Elements.
Wichtig: Fachlogik soll nicht unnötig an DOM-IDs gekoppelt werden. JavaScript arbeitet bevorzugt über öffentliche Komponenten-APIs. Direkte DOM-Zugriffe bleiben auf Präsentationslogik, Initialisierung und Tests beschränkt.
6. CSS#
CSS beschreibt ausschließlich Darstellung.
Klassen dienen Layout und Styling.
IDs beschreiben eindeutige Elemente.
JavaScript selektiert nur dann über IDs, wenn es sich um Präsentationslogik handelt. Fachliche Abläufe laufen über Komponenten-APIs.
CSS-Klassen dürfen keine fachliche GlossarbegriffBedeutung beschreibt den fachlichen Sinn eines Elements und seine Relevanz für Menschen und Organisationen.Glossareintrag vollständig lesen tragen, auf die Geschäftslogik angewiesen ist.
7. JavaScript#
Keine Inline-Handler.
Keine globale Fachlogik.
Globale Objekte dienen ausschließlich als Einstiegspunkt eines Features.
Komponenten kommunizieren über definierte APIs.
Funktionen und Module verwenden sprechende Namen.
Konventionen:
Dateien:
kebab-case.js
relationship-editor.js
Funktionen:
camelCase
createRelationship
renderUniverseBoard
Konstanten:
UPPER_SNAKE_CASE
DEFAULT_BOARD_ZOOM
Events:
ns:<feature>-<aktion>
ns:board-selected
ns:relationships-changed
Neue öffentliche APIs werden dokumentiert.
8. Events#
Events werden sparsam eingesetzt.
Jedes Event besitzt:
- eindeutigen Namen
- dokumentierten Auslöser
- dokumentierten Payload
Event-Ketten sollen nachvollziehbar bleiben.
Events ersetzen keine Programmlogik.
Ein Event darf nicht versteckt mehrere fachliche Aktionen auslösen, die im Code nicht nachvollziehbar sind.
Beispiel:
Event:
ns:board-selected
Auslöser:
Benutzer oder Orchestrator wählt ein Board aus.
Payload:
boardId
boardType
universeId
9. Tests#
Jede Komponente besitzt mindestens einen automatisierten Test.
Beispiele:
relationship-editor.test.js
board-renderer.test.js
explorer-tree.test.js
Komponententests prüfen die Komponente isoliert.
Sie prüfen keine fachlichen Roundtrips über mehrere Features hinweg. Dafür sind E2E-Tests zuständig.
10. End-to-End-Tests#
Jedes Feature besitzt mindestens einen End-to-End-Test.
Beispiele:
01-roundtrip.spec.ts
relationships.spec.ts
boards.spec.ts
universes.spec.ts
Alle E2E-Tests erzeugen ihre Testdaten selbst.
Seed-Daten werden niemals vorausgesetzt.
Ein E2E-Test prüft fachliche Abläufe aus Sicht eines Benutzers.
Deaktivierte Features werden ebenfalls getestet. Ein Feature muss mindestens in diesen Varianten geprüft werden:
- Feature aktiv
- Feature deaktiviert
10.1 Testarchitektur und Erweiterbarkeit#
Die E2E-Tests sind Teil der Softwarearchitektur und halten dieselben Architekturprinzipien ein wie der Produktcode.
10.1.1 Bestehende Strukturen erweitern#
Bestehende Strukturen sind grundsätzlich zu erweitern. Neue Dateien, Komponenten, Module oder Testgruppen dürfen nur entstehen, wenn nachgewiesen wurde, dass die vorhandene Struktur fachlich nicht geeignet ist. Dieser Grundsatz gilt gleichermaßen für Produktcode und Tests.
Neue Funktionalität wird grundsätzlich in bestehende fachliche Testgruppen integriert. Neue Testdateien oder neue Test-Obergruppen dürfen nur entstehen, wenn ein neuer fachlicher Themenbereich eingeführt wird. Bestehende test.describe(...)-Gruppen sind bevorzugt zu erweitern.
10.1.2 Fachliche statt technische Struktur#
Die Testsuite wird fachlich und nicht technisch gegliedert. Neue Features werden der fachlich passenden Testgruppe zugeordnet, zum Beispiel boards, relationships, minimap, explorer oder synchronization.
10.1.3 Tests als ausführbare Spezifikation#
E2E-Tests dienen gleichzeitig als Regressionstest, fachliche Dokumentation und ausführbare Spezifikation. Beim Lesen der Tests muss unmittelbar verständlich sein, welche Benutzerfunktion abgesichert wird.
10.1.4 Keine Test-Fragmentierung#
Ein neues Feature darf nicht dazu führen, dass für kleine Erweiterungen neue Testdateien oder neue Obergruppen entstehen. Eine neue Testgruppe ist nur zulässig, wenn ein vollständig neuer fachlicher Themenbereich entsteht und dies vor der Umsetzung dokumentiert wurde.
11. Testdaten#
Testdaten verwenden eindeutige Präfixe.
Beispiel:
PW-Test-
Vor jedem Test:
- Cleanup
Nach jedem Test:
- Cleanup
Tests dürfen sich gegenseitig nicht beeinflussen.
Cleanup wird auch bei Fehlern versucht.
Datenbankprüfungen und Cleanup dürfen über API oder DB erfolgen, wenn dies die Stabilität erhöht.
Fachliche Funktionalität wird bevorzugt über die UI geprüft.
12. Playwright#
Playwright-Tests werden fachlich dokumentiert.
Hierzu wird test.step() verwendet.
Beispiel:
await test.step("Universum anlegen", async () => {
});
await test.step("Bereiche anlegen", async () => {
});
await test.step("Systeme anlegen", async () => {
});
await test.step("Beziehung erzeugen", async () => {
});
await test.step("Cleanup", async () => {
});
Die Step-Beschreibungen beschreiben die Fachlichkeit.
Nicht die technische Umsetzung.
Playwright-Tests verwenden keine festen Sleeps.
Erlaubt sind:
- Playwright Auto-Waiting
expect(...).toBeVisible()waitForResponse()für konkrete API-Calls- stabile IDs
Nicht erwünscht:
await page.waitForTimeout(1000);
13. Selektoren#
Playwright verwendet bevorzugt eindeutige IDs.
Reihenfolge:
1.
page.locator("#RelationshipsEditorDelete")
2.
ARIA
page.getByRole(...)
3.
Text
Nur wenn keine stabile ID existiert.
XPath soll vermieden werden.
Textselektoren dürfen nicht für fachlich stabile Elemente verwendet werden, wenn eine ID existieren kann.
14. Dokumentation#
Größere Features erhalten:
- technische Dokumentation
- Architekturübersicht
- Teststrategie
Öffentliche APIs werden dokumentiert.
Feature Flags, Events, Datenbankmigrationen, I18N-Schlüssel und Revisionslogik werden dokumentiert, sobald sie durch ein Feature betroffen sind.
Dokumentation wird zusammen mit dem Code gepflegt und nicht erst nachträglich erstellt.
15. Codequalität#
Bevorzugt werden:
- kleine Funktionen
- sprechende Namen
- geringe Verschachtelung
- geringe Seiteneffekte
- klare Verantwortlichkeiten
Code wird regelmäßig refaktoriert.
Refactoring ist Teil der normalen Entwicklung, wenn dadurch bestehende Komplexität reduziert wird.
Nicht erwünscht sind:
- Copy-and-Paste-Fachlogik
- parallele Hilfsfunktionen mit fast gleicher Aufgabe
- versteckte globale Zustände
- Seiteneffekte beim Rendern
- unklare Event-Ketten
16. Review#
Vor Abschluss einer Änderung ist zu prüfen:
- Architektur eingehalten
- Featurestruktur eingehalten
- Komponenten sauber getrennt
- IDs vorhanden
- I18N berücksichtigt
- Historisierung berücksichtigt
- Feature Flags berücksichtigt
- Tests vorhanden
- E2E-Test vorhanden
- Dokumentation aktualisiert
16.1 Definition of Done#
Eine Änderung gilt erst dann als fertig, wenn folgende Punkte geprüft wurden:
- Code umgesetzt
- bestehende Architektur nicht umgangen
- eindeutige IDs für neue UI-Elemente vorhanden
- UI-Texte über I18N-Schlüssel geführt
- Nutzdatenänderungen historisierbar
- Feature-Flag-Auswirkung geprüft
- notwendige Migrationen vorhanden
- Komponententest vorhanden oder bewusst begründet nicht nötig
- E2E-Test vorhanden oder bewusst begründet nicht nötig
- Cleanup und Testdatenstrategie geklärt
- Dokumentation aktualisiert
- keine bekannten Smoke- oder Roundtrip-Tests gebrochen
17. Netzwerksolution-Architekturprinzipien#
Die Netzwerksolution besitzt eine zentrale Architektur. Neue Funktionen erweitern diese Architektur und umgehen sie nicht.
17.1 Single Source of Truth#
Jede fachliche Information besitzt genau eine führende Quelle.
Beispiele:
- Universum
- Bereich
- Objekt
- GlossarbegriffEine Beziehung beschreibt eine nachvollziehbare Verbindung zwischen Bedeutungen, Artefakten und ihrem Kontext.Glossareintrag vollständig lesen
- Board
- Kontext
Mehrfache Datenhaltung ist zu vermeiden.
Falls abgeleitete Daten gespeichert werden, muss klar dokumentiert sein:
- woraus sie abgeleitet werden
- wann sie aktualisiert werden
- wie Inkonsistenzen verhindert werden
17.2 Zentrale UI-Orchestrierung#
Die Steuerung der Benutzeroberfläche erfolgt ausschließlich über den UI-Orchestrator.
Dieser steuert insbesondere:
- aktives Universum
- aktives Board
- Explorer
- Ribbon
- Werkzeugleiste
- Sidepanel
- Diagramm
- Rendering
- Reloads
Komponenten übernehmen diese Aufgaben nicht selbst.
Komponenten dürfen Zustände anzeigen und Benutzeraktionen melden. Die zentrale Entscheidung über Laden, Wechseln und Aktualisieren liegt beim Orchestrator.
17.3 Rendering#
Diagramme werden ausschließlich über den GlossarbegriffEin Renderer erzeugt eine konkrete technische Ausgabeform aus einer vorbereiteten Dokumentationsprojektion. Beispiele sind HTML, PDF, Markdown, JSON oder ein Suchindex. Renderer enthalten keine fachlichen Artefaktdefinitionen. Sie materialisieren bereits aufgelöste Inhalte in ein Zielmedium.Glossareintrag vollständig lesen aufgebaut.
Komponenten verändern niemals direkt die Darstellung anderer Komponenten.
Rendering erfolgt ausschließlich über definierte Render-Methoden.
Rendern lädt keine Daten.
Rendern verändert keine fachlichen Daten.
17.4 Komponenten sind unabhängig#
Komponenten kennen keine internen Implementierungen anderer Komponenten.
Kommunikation erfolgt ausschließlich über:
- öffentliche APIs
- definierte Events
- zentrale Controller
Direkte Zugriffe auf interne Variablen anderer Komponenten sind nicht zulässig.
17.5 Feature-Grenzen#
Ein Feature besitzt genau eine fachliche Verantwortung.
Beispiele:
Boards
Darstellung und Navigation
Relationships
Beziehungen
Explorer
Navigation
Ribbon
Werkzeuge
Sidepanel
Eigenschaften
Universes
Verwaltung der Modellräume
Featuregrenzen sollen nicht vermischt werden.
Ein Feature darf andere Features verwenden, aber deren interne Implementierung nicht kennen.
17.6 Wiederverwendung#
Neue Boardtypen verwenden vorhandene Komponenten.
Beispielsweise:
- Explorer
- Renderer
- Routing
- Eigenschaften
- Werkzeugkasten
- Zoom
- Drag & Drop
- Kontextfilter
Parallelimplementierungen sind zu vermeiden.
17.7 Wiederverwendbare Standardkomponenten#
Für wiederkehrende UI- und Fachfunktionen werden zentrale Standardkomponenten verwendet.
17.7.1 Rich Text Editor#
Beschreibungstexte, Dokumentationstexte, Hinweise, Kommentare und vergleichbare längere Textfelder verwenden grundsätzlich den zentralen Rich Text Editor.
Es dürfen keine parallelen WYSIWYG-, Markdown-, HTML- oder Texteditor-Komponenten eingeführt werden.
Falls der bestehende Rich Text Editor Anforderungen nicht erfüllt, wird er erweitert.
17.7.2 Einheitliche Eingabeoberflächen#
Fachliche Entitäten dürfen nicht mit eigenen Inline-Formularen, Seitenleistenformularen oder parallelen Detailformularen bearbeitet werden.
Alle Eingaben und Bearbeitungen fachlicher Entitäten erfolgen über den bestehenden Ganzbildschirm-Editor beziehungsweise über eine Erweiterung dieses bestehenden Editor-Musters.
Dies gilt insbesondere für:
- Objekte
- Beziehungen
- Boards
- Stereotypes
- Konfigurationseinträge
- zukünftige Stammdaten
Listen, Tabellen und Übersichten dienen ausschließlich der Auswahl, Navigation und kompakten Anzeige.
Sie dürfen keine eigenständige Bearbeitungslogik enthalten.
Zulässig sind dort nur:
- Name anzeigen
- Status kurz anzeigen
- Zähler kurz anzeigen
- Auswahl öffnen
- Suche
- Filter
- Sortierung
Nicht zulässig sind:
- eigene Textfelder
- eigene Rich-Text-Editoren
- eigene Speichern-Buttons
- eigene Detailformulare
- eigene Validierungslogik
- parallele API-Speicherpfade
Wenn eine Entität bearbeitet werden muss, öffnet die Liste den zentralen Ganzbildschirm-Editor.
Der Ganzbildschirm-Editor verwendet die bestehenden Standardkomponenten:
- Titel
- Rich-Text-Beschreibung
- Status / Aktivität
- fachliche Zusatzinformationen
- Aktionen
Neue Eingabekomponenten dürfen nur eingeführt werden, wenn vorher nachgewiesen wurde, dass keine bestehende Komponente geeignet ist. Diese Entscheidung muss im Codepfad dokumentiert werden.
17.7.3 UI-Review vor neuen Formularen#
Vor dem Erstellen eines neuen Formulars muss geprüft und dokumentiert werden:
- Welche bestehende Eingabekomponente gibt es bereits?
- Warum kann der bestehende Ganzbildschirm-Editor nicht verwendet werden?
- Welche bestehende Validierungslogik wird wiederverwendet?
- Welche bestehende Speichern-Logik wird wiederverwendet?
Ohne diese Dokumentation darf kein neues Formular erstellt werden.
17.7.4 Abgleichslogik#
Abgleichs-, Vergleichs- und Synchronisationsfunktionen verwenden grundsätzlich die zentrale Abgleichslogik mit der Struktur:
- links
- mitte
- rechts
Diese UI und Logik wird für alle vergleichbaren Abgleichsfälle wiederverwendet, z. B.:
- WordPress-Abgleich
- Textabgleich
- Übersetzungsabgleich
- Versionsvergleich
- Enterprise-Snapshot-Vergleich
- Import-/Export-Abgleich
Es dürfen keine parallelen Vergleichsoberflächen oder Abgleichslogiken entstehen.
Wenn Wiederverwendung nicht möglich ist, wird vor der Umsetzung begründet, warum eine neue Komponente nötig ist.
17.7 Events#
Events dienen ausschließlich der Kommunikation zwischen unabhängigen Komponenten.
Sie ersetzen keine Programmlogik.
Jedes Event besitzt:
- eindeutigen Namen
- dokumentierten Auslöser
- dokumentierten Payload
17.8 Laden und Rendern#
Laden und Rendern sind unterschiedliche Vorgänge.
Ablauf:
Daten laden
↓
Modell aktualisieren
↓
Diagramm rendern
Ein Rendern löst niemals automatisch ein erneutes Laden aus.
Reloads erfolgen ausschließlich über den zentralen Orchestrator.
17.9 Fachobjekte#
Alle Fachobjekte verwenden gemeinsame Basiskonzepte.
Neue Objektarten erweitern diese Basiskonzepte.
Speziallösungen sollen vermieden werden.
17.10 Datenmodell#
Die Datenbank bildet ausschließlich das fachliche Modell ab.
Darstellungseigenschaften werden getrennt gespeichert.
Beispiel:
network_objects
↓
network_object_properties
Dieses Prinzip ist bei Erweiterungen beizubehalten.
Datenbanktabellen verwenden sprechende Namen.
Konvention:
network_<fachbegriff_plural>
network_<fachbegriff>_<detail_plural>
17.11 Backend und Frontend#
Das Frontend kommuniziert ausschließlich über definierte APIs mit dem Backend.
Direkte Datenbankzugriffe aus dem Frontend sind nicht zulässig.
Geschäftslogik gehört grundsätzlich ins Backend oder in klar definierte Fachkomponenten.
APIs verwenden sprechende REST-Endpunkte.
Beispiel:
/api/network/universes
/api/network/boards
/api/network/relationships
17.12 Testbarkeit#
Neue Komponenten müssen testbar entwickelt werden.
Dazu gehören insbesondere:
- eindeutige IDs
- reproduzierbares Verhalten
- keine versteckten Seiteneffekte
- klar definierte öffentliche Schnittstellen
17.13 Erweiterbarkeit#
Vor jeder größeren Änderung ist zu prüfen:
- Kann vorhandene Fachlogik erweitert werden?
- Kann eine vorhandene Komponente erweitert werden?
- Kann ein vorhandenes Event genutzt werden?
Neue Parallelstrukturen sind zu vermeiden.
17.14 Refactoring#
Bei jeder größeren Änderung ist zu prüfen, ob bestehender Code vereinfacht werden kann.
Technische Schulden sollen reduziert und nicht vergrößert werden.
17.15 Architektur vor Geschwindigkeit#
Eine kurzfristig einfache Lösung darf die langfristige Architektur nicht verschlechtern.
Falls eine gewünschte Änderung gegen diese Richtlinien verstößt, ist dies vor der Umsetzung zu benennen und zu begründen.
Die langfristige Wartbarkeit der Netzwerksolution besitzt Vorrang vor kurzfristigen Implementierungsvorteilen.
17.16 Lesbare Dokumentationsdarstellungen#
Textdarstellungen dienen der Verständlichkeit. Sie dürfen fachliche Aussagen nicht in einer einzigen langen Zeile, in schwer verfolgbaren Pfeilketten oder in überladenen ASCII-Diagrammen verdichten.
Verbindlich gelten folgende Regeln:
- Eine einfache lineare Abfolge darf vertikal dargestellt werden.
- Mehrere gleichartige Beziehungen werden als Tabelle beschrieben.
- Baumdarstellungen sind nur für echte Hierarchien oder Verzeichnisstrukturen zulässig.
- Ein Textdiagramm muss ohne horizontales Scrollen lesbar bleiben.
- Beziehungstypen werden nicht mit
|oder ähnlichen Trennzeichen in einer einzelnen Verbindung zusammengefasst. - Komplexe fachliche Zusammenhänge besitzen genau eine ausführliche Darstellung in ihrer fachlichen Heimat. Andere Dokumente verwenden eine kurze Zusammenfassung und einen gezielten Link.
- Diagramme ersetzen keine erklärende Prosa. Eine Darstellung muss im umgebenden Text fachlich eingeordnet werden.
Geeignete Darstellungsformen:
| Inhalt | Bevorzugte Form |
|---|---|
| einzelne Beziehung | kurzer vertikaler Textblock |
| mehrere Beziehungstypen | Tabelle mit Quelle, Relationship, Ziel und Aussage |
| linearer Ablauf | nummerierte Liste oder vertikaler Ablauf |
| Hierarchie oder Verzeichnis | Baumdarstellung |
| komplexes Netz | Tabelle plus erklärender Text; bei Bedarf separates Diagramm |
Ungeeignet ist beispielsweise eine Darstellung, die mehrere semantisch unterschiedliche Beziehungen in einer Zeile bündelt.
18. Feature Flags und Feature Modules#
Die Netzwerksolution kann fachliche Funktionen modular aktivieren oder deaktivieren.
Ziel ist, dass einzelne Kunden nur die Funktionen erhalten, die sie tatsächlich benötigen.
Beispiele:
- Enterprise Architecture
- Sparx EA Integration
- WordPress Abgleich
- Prozessmodellierung
- GlossarbegriffEine Capability beschreibt ein dauerhaft benötigtes fachliches Leistungsvermögen, nicht dessen technische Umsetzung.Glossareintrag vollständig lesen Management
- Epic / Use Case Management
18.1 Feature Flags#
Jedes größere Feature besitzt ein zentrales Feature Flag.
Beispiele:
feature.enterpriseArchitecture
feature.sparxIntegration
feature.wordpressSync
feature.capabilityManagement
feature.processManagement
Feature Flags werden zentral verwaltet.
Feature-Abfragen dürfen nicht verstreut und uneinheitlich im Code verteilt werden. UI, API und Hintergrundjobs verwenden dieselbe Feature-Registry.
18.2 Feature Registry#
Alle verfügbaren Features werden in einer zentralen Feature Registry beschrieben.
Die Registry enthält mindestens:
- technischer Name
- Anzeigename oder I18N-Schlüssel
- Beschreibung oder I18N-Schlüssel
- Abhängigkeiten
- aktiv / deaktiviert
- benötigte Rechte
- betroffene Menüpunkte
- betroffene APIs
- betroffene Hintergrundjobs
18.3 Verhalten bei deaktivierten Features#
Ein deaktiviertes Feature darf nicht sichtbar oder nutzbar sein.
Das betrifft:
- Navigation
- Ribbon
- Explorer
- Werkzeugleiste
- APIs
- Hintergrundjobs
- Konfigurationsseiten
Deaktivierte Features dürfen keine Fehler im System verursachen.
APIs deaktivierter Features werden backendseitig abgesichert. Es reicht nicht aus, nur UI-Elemente auszublenden.
18.4 Abhängigkeiten#
Features dürfen Abhängigkeiten besitzen.
Beispiel:
feature.sparxIntegration
benötigt feature.enterpriseArchitecture
Wenn ein Basisfeature deaktiviert ist, müssen abhängige Features automatisch deaktiviert oder blockiert werden.
Abhängigkeiten werden nicht im UI-Code hart verdrahtet, sondern über die Feature Registry aufgelöst.
18.5 Tests#
Jedes Feature wird mindestens in zwei Varianten getestet:
- Feature aktiv
- Feature deaktiviert
E2E-Tests prüfen, dass deaktivierte Features nicht sichtbar und nicht erreichbar sind.
API-Tests prüfen, dass deaktivierte Features nicht unbeabsichtigt über direkte Requests nutzbar sind.
19. Internationalisierung (I18N) und Lokalisierung (L10N)#
Das System kann grundsätzlich alle Sprachen, die von den Kunden benötigt werden, abbilden. Für die Grundausstattung werden Deutsch, Englisch und Ukrainisch vorgegeben.
19.1 Oberflächen#
Die Benutzeroberfläche enthält keine fest codierten Texte.
Alle sichtbaren Texte werden ausschließlich über einen zentralen Übersetzungsdienst geladen.
Dazu gehören insbesondere:
Menüs
Ribbon
Explorer
Dialoge
Buttons
Fehlermeldungen
Tooltips
Platzhalter
Kontextmenüs
Hilfetexte
Neue Komponenten dürfen keine direkt im Code hinterlegten UI-Texte enthalten.
UI-Texte werden über stabile Übersetzungsschlüssel referenziert.
Beispiel:
relationships.editor.title
relationships.editor.delete
relationships.editor.direction
19.2 Standardsprache#
Die fachliche Basissprache der Netzwerksolution ist derzeit Deutsch.
Weitere aktiv unterstützte Sprachen sind:
Deutsch
de
Englisch
en
Ukrainisch
uk
Die Architektur muss jedoch beliebig viele weitere Sprachen unterstützen.
19.3 Fachdaten#
Nicht nur die Oberfläche ist mehrsprachig.
Auch alle fachlichen Inhalte müssen mehrsprachig verwaltet werden.
Beispiele:
Titel
Kurzbeschreibung
Beschreibung
Dokumentationen
Kommentare
Alt-Texte
Linktitel
Hinweise
Glossare
Markdown
HTML
Jedes übersetzbare Feld wird im Datenmodell eindeutig als übersetzbar behandelt.
19.4 Zentrale Übersetzung#
Es existiert eine zentrale Übersetzungskomponente.
Diese übernimmt:
automatische Übersetzungen
Aktualisierung vorhandener Übersetzungen
Statusverwaltung
Qualitätskennzeichnung
spätere Einbindung verschiedener KI-Modelle
Keine Komponente übersetzt Texte selbst.
19.5 Übersetzungsstatus#
Jede Übersetzung besitzt einen Status.
Beispiele:
ORIGINAL
AUTO_TRANSLATED
MANUALLY_EDITED
OUTDATED
Dadurch lässt sich erkennen:
- ob eine Übersetzung automatisch erzeugt wurde
- ob ein Redakteur sie angepasst hat
- ob sie nach Änderungen erneut geprüft werden muss
Manuell bearbeitete Übersetzungen werden niemals automatisch überschrieben.
19.6 Änderungsablauf#
Beispiel:
Ein Redakteur bearbeitet die deutsche Beschreibung eines Systems.
Beim Speichern geschieht automatisch:
- Original speichern
- Hash des Originaltexts bilden
- Prüfen, welche Übersetzungen existieren
- Für jede Zielsprache prüfen:
existiert keine Übersetzung
→ automatisch erzeugen
existiert nur eine automatische Übersetzung
→ automatisch aktualisieren
wurde manuell bearbeitet
→ Status OUTDATED setzen und nicht überschreiben
Dadurch gehen manuelle Übersetzungen niemals verloren.
19.7 Übersetzungsverwaltung#
Es existiert ein eigenständiges Modell für die Übersetzung.
Zum Beispiel:
translation_units
id
entity_type
entity_id
field_name
source_language
target_language
source_hash
translation
status
translated_at
translated_by
reviewed_at
reviewed_by
Beispiel:
network_object
42
description
de
en
7F2A...
"This system ..."
AUTO_TRANSLATED
Der source_hash des Originaltexts verhindert unnötige Neuübersetzungen.
Beim Speichern wird geprüft:
Hat sich der Hash geändert?
Nein
→ nichts tun
Ja
→ Übersetzungsstatus prüfen
Dadurch wird nicht bei jedem Speichern neu übersetzt.
19.8 Vorteile#
Dieses Modell ermöglicht später nahezu ohne Änderungen:
- DeepL
- OpenAI
- Azure AI
- lokale LLMs
- manuelle Übersetzer
- Übersetzungsworkflow
- Qualitätssicherung
20. Historisierung und Revisionsmanagement#
Die Netzwerksolution verwaltet Unternehmenswissen.
Unternehmenswissen darf niemals unbeabsichtigt verloren gehen.
Daher werden sämtliche fachlichen Änderungen historisiert und nachvollziehbar gespeichert.
20.1 Vollständige Historisierung#
Alle fachlichen Artefakte besitzen eine Versionshistorie.
Hierzu gehören insbesondere:
- Universen
- Bereiche
- Objekte
- Beziehungen
- Boards
- Boardeigenschaften
- Kontexte
- Dokumentationen
- Übersetzungen
- Anhänge
- Metadaten
Physisches Löschen von Nutzdaten erfolgt grundsätzlich nicht.
Stattdessen werden Objekte logisch entfernt oder versioniert.
Harte Löschungen sind nur für technische Bereinigung, Testdaten-Cleanup oder administrative Sonderfälle erlaubt.
20.2 Änderungsprotokoll#
Jede Änderung wird nachvollziehbar protokolliert.
Mindestens gespeichert werden:
- Zeitpunkt
- Benutzer
- Objekt
- Feld
- alter Wert
- neuer Wert
- Änderungsgrund (optional)
- GlossarbegriffProvenienz hält Quelle, Entstehungs- oder Ableitungskontext sowie gegebenenfalls Revision und Prüfung fest. Sie erklärt, warum etwas als Beleg erhalten bleibt, ohne daraus automatisch eine aktuell führende Aussage zu machen.Glossareintrag vollständig lesen der Änderung
Beispiel:
2026-08-14 14:33
Benutzer:
Roland
Objekt:
System "WordPress"
Feld:
Beschreibung
Alter Wert:
...
Neuer Wert:
...
20.3 Undo / Redo#
Alle fachlichen Änderungen müssen rückgängig gemacht werden können.
Das Undo-System arbeitet auf fachlicher Ebene und nicht ausschließlich auf UI-Ebene.
Beispiele:
- Titel geändert
- Beschreibung geändert
- Bereich verschoben
- Beziehung gelöscht
- System angelegt
- Board umbenannt
Jede Änderung besitzt die notwendige Information, um ihren vorherigen Zustand wiederherzustellen.
Redo wird nach Möglichkeit ebenfalls unterstützt.
20.4 Versionierung#
Jede Änderung erzeugt eine neue Revision.
Revisionen sind unveränderlich.
Bereits gespeicherte Revisionen werden niemals überschrieben.
Revisionen beschreiben fachliche Änderungen und sind nicht nur technische Datenbank-Diffs.
20.5 Enterprise Snapshots#
Zusätzlich zu den Einzelrevisionen unterstützt die Netzwerksolution vollständige Enterprise Snapshots.
Ein Enterprise Snapshot beschreibt den Zustand aller relevanten Artefakte zu einem bestimmten Zeitpunkt.
Ein Enterprise Snapshot dient beispielsweise:
- Dokumentationsständen
- Projektmeilensteinen
- Releases
- Audits
- Kundenabnahmen
- ISO-Zertifizierungen
- Compliance-Nachweisen
20.6 Inhalt eines Enterprise Snapshot#
Ein Enterprise Snapshot umfasst alle fachlich relevanten Informationen.
Beispiele:
- Universen
- Bereiche
- Objekte
- Beziehungen
- Kontexte
- Eigenschaften
- Dokumentationen
- Übersetzungen
- Boardlayouts
- Icons
- Anhänge
Ein Enterprise Snapshot muss vollständig reproduzierbar sein.
20.7 Wiederherstellung#
Aus jedem Enterprise Snapshot kann jederzeit wieder ein Arbeitsstand erzeugt werden.
Dabei werden zwei Verfahren unterstützt:
- vollständige Wiederherstellung
- Vergleich mit aktuellem Stand
Enterprise Snapshots dürfen den aktuellen Datenbestand nicht unbeabsichtigt überschreiben.
Die Wiederherstellung erfolgt grundsätzlich als bewusste Benutzeraktion.
20.8 Vergleich#
Beliebige Revisionen oder Enterprise Snapshots können miteinander verglichen werden.
Der Vergleich zeigt mindestens:
- neu
- gelöscht
- geändert
- verschoben
- umbenannt
Der Benutzer erkennt dadurch nachvollziehbar die Entwicklung des Modells.
20.9 Historie der Übersetzungen#
Übersetzungen besitzen eine eigene Historie.
Es bleibt nachvollziehbar:
- wann automatisch übersetzt wurde
- wann ein Redakteur eingegriffen hat
- welche Übersetzung zu welcher Originalversion gehört
20.10 API#
Historisierung ist Bestandteil der Fachlogik.
Das Backend stellt zentrale Funktionen bereit:
- Revision erzeugen
- Revision lesen
- Revision vergleichen
- Enterprise Snapshot erzeugen
- Enterprise Snapshot wiederherstellen
Frontend-Komponenten implementieren keine eigene GlossarbegriffGit ist das verwendete Versionsverwaltungssystem für nachvollziehbare Änderungsgeschichte.Glossareintrag vollständig lesen.
20.11 Performance#
Historisierung darf die normale Benutzung nicht beeinträchtigen.
Historien werden effizient gespeichert.
Große Enterprise Snapshots dürfen dedupliziert oder referenziert werden, solange ihre vollständige Wiederherstellung jederzeit gewährleistet bleibt.
20.12 Nachvollziehbarkeit#
Alle fachlichen Änderungen müssen revisionssicher nachvollziehbar bleiben.
Ein Benutzer muss jederzeit beantworten können:
- Wer hat die Änderung durchgeführt?
- Wann wurde sie durchgeführt?
- Was wurde geändert?
- Warum wurde sie geändert?
- Welcher Zustand galt zu einem bestimmten Zeitpunkt?
Dieses Prinzip bildet die Grundlage für Auditierbarkeit, Dokumentationspflichten und langfristiges Wissensmanagement innerhalb der Netzwerksolution.
20.13 Baselines#
Neben Enterprise Snapshots unterstützt die Netzwerksolution fachliche Baselines.
Eine Baseline ist ein bewusst freigegebener und benannter Modellstand.
Beispiele:
- Architektur 2026.1
- Go-Live
- Kundenabnahme
- Audit Juli 2027
Baselines sind dauerhaft referenzierbar und werden nicht nachträglich verändert.
21 Lizensierung, Copyright und Nutzung externer Komponenten#
Das Projekt muss jederzeit sicherstellen, dass sämtliche eingesetzten Komponenten, Bibliotheken, Frameworks und sonstigen externen Bestandteile rechtlich zulässig verwendet werden.
Es dürfen keine Lizenzverletzungen oder Copyright-Verstöße entstehen.
21.1 Wiederverwendung vor neuen Abhängigkeiten#
Vor der Einführung einer neuen Library oder eines Frameworks ist grundsätzlich zu prüfen, ob die gewünschte Funktion bereits vorhanden ist.
Dabei gilt folgende Priorität:
- Vorhandene Funktionalität der Netzwerksolution wiederverwenden.
- Browser- oder Plattformfunktionen verwenden.
- Standardbibliotheken der jeweiligen Programmiersprache verwenden.
- Bereits vorhandene Projekt-Libraries verwenden.
- Erst danach neue externe Libraries evaluieren.
Es dürfen keine Parallelimplementierungen derselben Funktionalität entstehen.
21.2 Verwendung externer Libraries, Frameworks und Dienste#
Externe Komponenten dürfen nur eingesetzt werden, wenn hierfür ein nachvollziehbarer technischer Nutzen besteht.
Dabei gelten folgende Grundsätze:
- Es sind bevorzugt etablierte Open-Source-Projekte mit aktiver Pflege zu verwenden.
- Funktionen dürfen nicht mehrfach durch unterschiedliche Libraries implementiert werden.
- Browser- und Standardbibliotheken sind externen Frameworks grundsätzlich vorzuziehen.
- Neue externe Abhängigkeiten sind möglichst klein zu halten.
- Jede neue Library ist hinsichtlich Wartbarkeit, Community, Lizenz und Sicherheitsrisiken zu bewerten.
Vor der Einführung einer neuen Library ist insbesondere zu dokumentieren:
- Welches Problem soll gelöst werden?
- Warum kann dies nicht mit vorhandenen Projektkomponenten umgesetzt werden?
- Welche Alternativen wurden geprüft?
- Warum wurde die ausgewählte Lösung bevorzugt?
21.3 Lizenzprüfung#
Vor der Verwendung einer externen Komponente ist deren Lizenz zu prüfen.
Dabei ist insbesondere sicherzustellen:
- Die Lizenz ist mit dem Projekt vereinbar.
- Die Nutzung im kommerziellen Umfeld ist zulässig.
- Es bestehen keine Verpflichtungen, Quellcode des Projekts offenlegen zu müssen, sofern dies nicht ausdrücklich gewünscht ist.
- Lizenztexte und Copyright-Hinweise werden entsprechend den Lizenzbedingungen übernommen.
Komponenten mit unklarer oder ungeprüfter Lizenz dürfen nicht verwendet werden.
21.4 Copyright#
Alle urheberrechtlich erforderlichen Hinweise sind vollständig einzuhalten.
Insbesondere:
- Copyright-Hinweise dürfen nicht entfernt werden, sofern die jeweilige Lizenz dies verlangt.
- Lizenzdateien müssen vollständig übernommen werden.
- Änderungen an externem Quellcode sind nachvollziehbar zu dokumentieren.
- Eigenentwicklungen sind eindeutig von übernommenem Fremdcode zu trennen.
21.5 Sparsamkeit bei externen Abhängigkeiten#
Das Projekt verfolgt das Prinzip der minimalen Abhängigkeiten.
Neue Libraries dürfen nur eingeführt werden, wenn der Nutzen den zusätzlichen Wartungsaufwand rechtfertigt.
Insbesondere gilt:
- Kleine Hilfsfunktionen sollen bevorzugt selbst implementiert werden.
- Große Frameworks dürfen nicht für einzelne triviale Funktionen eingebunden werden.
- Jede zusätzliche Abhängigkeit erhöht Wartungsaufwand, Sicherheitsrisiko und Updatekosten.
- Jede neue Abhängigkeit beeinflusst Build-Prozess, Deployment und zukünftige Migrationen und ist daher zu begründen.
21.6 Verbot redundanter Libraries#
Für dieselbe Aufgabe darf grundsätzlich nur eine Bibliothek verwendet werden.
Beispiele:
- nur eine Rich-Text-Bibliothek
- nur eine Diagramm-Engine
- nur eine Markdown-Bibliothek
- nur eine Syntax-Highlighting-Bibliothek
Parallele Implementierungen derselben Funktionalität sind unzulässig.
Bereits vorhandene Komponenten sind konsequent wiederzuverwenden.
21.7 Dokumentation neuer Abhängigkeiten#
Jede neu eingeführte externe Komponente ist im Projekt zu dokumentieren.
Mindestens festzuhalten sind:
- Name
- Version
- Lizenz
- Verwendungszweck
- Begründung für den Einsatz
- geprüfte Alternativen
- verantwortliche Entscheidung
Dadurch bleibt die Architektur langfristig nachvollziehbar.
21.8 Änderungen an externem Quellcode#
Direkte Änderungen an eingebundenen Drittbibliotheken sind grundsätzlich zu vermeiden.
Falls eine Anpassung unvermeidbar ist, gelten folgende Regeln:
- Die Änderung ist eindeutig zu dokumentieren.
- Der Grund der Änderung ist nachvollziehbar festzuhalten.
- Die Anpassung muss bei zukünftigen Updates reproduzierbar sein.
- Nach Möglichkeit sind Erweiterungspunkte (Konfiguration, Plugins, Wrapper oder Adapter) einer direkten Änderung des Fremdquellcodes vorzuziehen.
21.9 Architekturprinzip#
Externe Komponenten dienen ausschließlich der Unterstützung des Projekts.
Die Architektur der Netzwerksolution muss jederzeit unabhängig von einzelnen Libraries bleiben.
Externe Frameworks dürfen die Architektur nicht bestimmen.
Die Geschäftslogik, das Domänenmodell und die Kernarchitektur müssen auch bei einem späteren Austausch einer Library unverändert bestehen bleiben.
22 Serverseitiges Logging und Diagnose#
Das Backend verwendet einen zentralen Logging- und Diagnosemechanismus.
Ein HTTP-500 ohne serverseitigen Logeintrag ist unzulässig.
22.1 Einheitliches Logging#
Alle HTTP-Requests laufen über eine zentrale Middleware.
Einzelne Handler dürfen keine eigene Logging-Architektur aufbauen.
Vor Einführung neuer Logging-Komponenten muss geprüft und dokumentiert werden, ob bestehende Middleware, Response-Komponenten oder Logging-Infrastruktur erweitert werden können.
22.2 Request-ID#
Jeder Request erhält automatisch eine eindeutige Request-ID.
Diese Request-ID erscheint:
- im Serverlog,
- in Fehlerantworten,
- optional im HTTP-Response-Header.
Dadurch muss jeder Browserfehler eindeutig dem Serverlog zugeordnet werden können.
22.3 Request-Logging#
Für jeden Request werden mindestens protokolliert:
- Request-ID,
- Zeitpunkt,
- HTTP-Methode,
- URL-Pfad,
- HTTP-Status,
- Bearbeitungsdauer.
Query-Parameter mit potentiell sensiblen Inhalten werden nicht ungeprüft geloggt.
22.4 Fehlerlogging#
Jeder HTTP-500 muss serverseitig mit konkretem Fehler protokolliert werden.
Mindestens erforderlich:
- Request-ID,
- HTTP-Methode,
- URL-Pfad,
- Statuscode,
- technischer Fehlertext.
Interne technische Details dürfen im Browser nicht offengelegt werden.
Der Browser erhält bei internen Fehlern nur eine neutrale Fehlermeldung und die Request-ID.
22.5 Panic-Recovery#
Das Backend besitzt eine zentrale Panic-Recovery.
Bei einer Panic werden protokolliert:
- Request-ID,
- Methode,
- Pfad,
- Panic-Wert,
- Stacktrace.
Der Server muss nach einer Panic weiter erreichbar bleiben.
22.6 Log-Level#
Das Backend unterstützt mindestens folgende Log-Level:
- ERROR,
- WARN,
- INFO,
- DEBUG,
- TRACE.
Das aktive Level wird ausschließlich über Konfiguration gesetzt, zum Beispiel:
NS_LOG_LEVEL=INFO
NS_LOG_LEVEL=TRACE
Eine Änderung des Log-Levels darf keine Codeänderung erfordern.
22.7 TRACE-Modus#
TRACE dient ausschließlich der lokalen Entwicklungsdiagnose.
TRACE darf zusätzliche technische Informationen enthalten, zum Beispiel:
- Handler-Eintritt,
- Middleware-Durchlauf,
- Repository-Aufrufe,
- Response-Zeiten.
Request-Bodies dürfen nur im TRACE-Modus geloggt werden und müssen vorher auf sensible Daten geprüft werden.
22.8 Datenschutz#
Niemals unmaskiert loggen:
- Passwörter,
- Tokens,
- Cookies,
- Authorization-Header,
- personenbezogene Inhalte.
22.9 Activity-Logging#
Fachliches Activity-Logging bleibt vom technischen Serverlogging getrennt.
Technisches Logging ersetzt kein Activity-Logging.
Activity-Logging ersetzt kein technisches Fehlerlogging.
23 Automatisierte serverseitige Tests#
Das Backend besitzt eine zentral ausführbare Go-Testsuite.
Playwright bleibt End-to-End-Test und ersetzt keine serverseitigen Tests.
Serverseitige Tests ersetzen keine End-to-End-Tests.
Beide Testarten ergänzen sich.
23.1 Zentrale Testausführung#
Alle Go-Tests müssen zentral ausführbar sein.
Mindestens unterstützt wird:
go test ./...
Optional können zusätzliche Einstiegspunkte wie Makefile-Ziele oder Skripte bereitgestellt werden.
23.2 Teststruktur#
Tests folgen der bestehenden Architektur.
Beispiele:
internal/components/httpjson/httpjson_test.go
internal/components/serverdiag/logger_test.go
internal/features/network/repository_test.go
internal/features/network/service_test.go
internal/web/handler_test.go
Es darf keine parallele Testarchitektur entstehen.
23.3 Repository-Tests#
Repositorys werden auf der niedrigstmöglichen Ebene getestet.
Mindestens relevant sind:
- Create,
- Read,
- Update,
- Delete,
- Nullable-Felder,
- Fremdschlüssel,
- Universumsfilter,
- Migrationen,
- SQL-Fehler,
- Constraint-Verletzungen,
- unbekannte IDs.
23.4 Service-Tests#
Geschäftslogik wird in Service-Tests abgesichert.
Dazu gehören insbesondere:
- Usage-Berechnung,
- Import,
- Ersetzen,
- Textabgleich,
- Aktiv/Inaktiv,
- Validierung.
23.5 Handler-Tests#
REST-Endpunkte erhalten Handler-Tests.
Mindestens geprüft werden:
- HTTP 200,
- HTTP 400,
- HTTP 404,
- HTTP 500,
- JSON-Struktur,
- Request-ID,
- Validierung.
23.6 Middleware-Tests#
Middleware wird eigenständig getestet.
Mindestens geprüft werden:
- Logging,
- Request-ID,
- Statuscode,
- Dauer,
- Panic-Recovery.
23.7 Logging-Tests#
Das technische Logging wird automatisiert geprüft.
Mindestens geprüft werden:
- erfolgreicher Request erzeugt Logeintrag,
- HTTP-500 erzeugt Fehlerlog,
- Request-ID steht in Log und Fehlerantwort,
- Panic erzeugt Stacktrace,
- Log-Level steuern Ausgabe.
23.8 Migrationstests#
Datenbankmigrationen erhalten Tests.
Geprüft werden:
- Neuinstallation,
- Migration bestehender Datenbanken,
- Nullable-Spalten,
- Defaultwerte,
- Rollforward.
23.9 Regression#
Jeder reproduzierbare Bug erhält mindestens einen automatisierten Regressionstest.
Ein Bug gilt erst dann als dauerhaft behoben, wenn er auf der niedrigstmöglichen sinnvollen Ebene abgesichert ist.
Richtlinie:
- Repository-Bug → Repository-Test,
- Service-Bug → Service-Test,
- Handler-Bug → Handler-Test,
- UI-Bug → Playwright-Test.
24 Einheitlicher Speicherfluss fachlicher Entitäten#
Fachliche Entitäten verwenden einen einheitlichen Speicherfluss.
Dies gilt insbesondere für:
- Objekte,
- Beziehungen,
- Boards,
- Stereotypes,
- Konfigurationseinträge,
- zukünftige Stammdaten.
24.1 Create und Update#
Create und Update sind strikt zu trennen.
Create erzeugt ausschließlich neue Datensätze.
Update aktualisiert ausschließlich bestehende Datensätze.
Die UI entscheidet anhand des Entity-Zustands:
- keine ID → Create,
- vorhandene ID → Update.
Create darf nicht verwendet werden, wenn eine bestehende Entität mit ID bearbeitet wird.
Update darf nicht ohne ID ausgeführt werden.
Die ID darf beim Öffnen, Bearbeiten, Speichern, Schließen und Reload eines Editors nicht verloren gehen.
24.2 Dublettenprüfung#
Dublettenprüfungen müssen denselben fachlichen Gültigkeitsbereich verwenden wie die Entität selbst.
Beispiele:
- Universum,
- Typ,
- Elternobjekt,
- normalisierter Name oder Titel.
Beim Update ist immer zu prüfen:
existiert ein anderer Datensatz mit gleicher fachlicher Identität?
Nicht zulässig ist:
existiert irgendein Datensatz mit gleicher fachlicher Identität?
Der eigene Datensatz muss bei Dublettenprüfungen ausgeschlossen werden.
Unverändertes Speichern eines bestehenden Datensatzes darf keinen Konflikt auslösen.
24.3 Benutzerverwaltete Stammdaten und Migrationen#
Benutzerverwaltete Stammdaten dürfen nach der initialen Migration nicht bei jedem Systemstart oder Repository-Ensure automatisch neu erzeugt werden.
Dies gilt insbesondere für:
- Stereotypes,
- Linientypen,
- Systemtypen,
- Konfigurationseinträge.
Migrationen dürfen bestehende Legacy-Werte in Stammdaten überführen und Referenzen setzen.
Sie dürfen aber gelöschte oder umbenannte Benutzer-Stammdaten nicht selbstheilend wieder anlegen, wenn keine fachliche Referenz mehr existiert.
Default-Seeding ist nur zulässig, wenn es eindeutig als initiale Installationserzeugung abgegrenzt ist und nicht bei jeder späteren Schema-Prüfung erneut wirkt.
24.4 Statuscodes#
Fachliche Save-Fehler verwenden eindeutige HTTP-Statuscodes.
- Validierungsfehler → HTTP 400,
- nicht vorhandene ID → HTTP 404,
- fachliche Dublette → HTTP 409,
- technische Fehler → HTTP 500.
Fachliche Konflikte dürfen nicht als Serverfehler behandelt werden.
Technische Fehler dürfen nicht als fachlicher Konflikt versteckt werden.
24.5 UI-Verhalten#
Die UI muss fachliche Fehler verständlich anzeigen.
Konflikte enthalten eine konkrete Meldung.
Wenn eine Request-ID vorhanden ist, wird sie in der UI angezeigt, damit Browserfehler und Serverlog eindeutig zusammenpassen.
Listen und Übersichten erzeugen keine eigene Speicherlogik.
Speichern erfolgt ausschließlich über den jeweiligen Editor und den zentralen API-Save-Pfad der Entität.
24.5 Tests#
Jede fachliche Entität benötigt Tests für:
- Create,
- Update,
- unverändertes Speichern,
- Update mit geändertem Titel oder Namen,
- Update auf echte Dublette,
- Delete,
- nicht vorhandene ID,
- Validierungsfehler,
- fachlicher Konflikt.
Jeder gefundene Save-Flow-Bug wird mindestens auf Handler- oder Repository-Ebene abgesichert.
25. Dokumentationsklassifizierung#
Jedes neue Dokument muss vor dem Erzeugen klassifiziert werden.
Die Klassifizierung ist verbindlich und muss vor der Wahl des Zielpfads erfolgen. Ein Dokument besitzt genau eine primäre Dokumentationsklasse.
Die folgenden Dokumentationsklassen sind für Workspace- und Building-Block-Dokumentation zulässig:
| Klasse | Zweck | Typische Inhalte | Zielordner |
|---|---|---|---|
| Architektur | Dauerhafte Beschreibung von Struktur, Architekturentscheidungen, Modellen und Abhängigkeiten | Workspace-Modell, Runtime-Modell, Build-Modell, Integration, Drift Detection, Entwicklungsprozess, Architekturentscheidungen | documents/architecture/ |
| Spezifikation | Dauerhafte fachliche oder technische Beschreibung erwarteten Verhaltens | Schnittstellenbeschreibungen, Vertragsbeschreibungen, akzeptierte Anforderungen, Daten- oder Verhaltensspezifikationen | documents/specification/ |
| Betrieb | Dauerhafte Anleitung für Betrieb, Lifecycle, Bedienung und technische Abläufe | Betriebsanleitungen, Lifecycle-Werkzeuge, Deployment-Hinweise, Wiederanlauf, manuelle Betriebsabläufe | documents/operation/ |
| Validierung | Nachweis einer konkreten Prüfung oder Abnahme | Feature-Validierungen, Testnachweise, Prüfergebnisse, Abnahmeprotokolle, Konsistenzprüfungen | documents/validation/ |
| Reports | Zeitbezogene Ergebnis- oder Statusberichte | Sprintberichte, Abschlussberichte, Statusberichte, Ergebniszusammenfassungen | documents/reports/ |
| Historie | Historische, abgelöste oder archivierte Informationen | Migrationsnotizen, ersetzte Entscheidungen, archivierte Projektstände, nachvollziehbare Altstände | documents/history/ |
25.1 Pflichtprüfung vor Dokumenterzeugung#
Vor dem Erzeugen eines neuen Dokuments ist verpflichtend zu prüfen, ob bereits eine geeignete Dokumentationsklasse existiert.
Die Prüfung erfolgt vor dem Anlegen der Datei und vor dem Anlegen eines Zielordners. Dabei sind mindestens folgende Fragen zu beantworten:
- Welche bestehende Dokumentationsklasse beschreibt den Zweck des Dokuments?
- Gibt es bereits ein geeignetes Dokument mit gleicher oder sehr ähnlicher Aufgabe?
- Gehört das Dokument in eine dauerhafte Klasse oder ist es ein zeitbezogener Nachweis?
- Welcher Zielordner ist durch die gewählte Klasse vorgegeben?
- Ist ein neuer Zielordner wirklich erforderlich, oder kann eine bestehende Klasse verwendet werden?
Ein Dokument darf erst erzeugt werden, wenn diese Prüfung abgeschlossen ist.
Wenn eine bestehende Dokumentationsklasse geeignet ist, muss der durch diese Klasse definierte Zielordner verwendet werden.
25.2 Neue Dokumentationsordner nur als Ausnahme#
Neue Dokumentationsordner dürfen nur eingeführt werden, wenn keine bestehende Dokumentationsklasse geeignet ist.
Die Einführung eines neuen Dokumentationsordners ist vor der Umsetzung zu begründen und zu dokumentieren. Die Begründung muss mindestens enthalten:
- warum keine bestehende Dokumentationsklasse passt,
- welchen Zweck der neue Ordner dauerhaft erfüllt,
- ob dadurch keine parallele Struktur zu bestehenden Klassen entsteht,
- wie der neue Ordner in das Dokumentationsmodell aufgenommen wird.
Ohne diese dokumentierte Begründung darf kein neuer Dokumentationsordner entstehen.
25.3 Keine parallelen Dokumentationsstrukturen#
Für Workspace- und Building-Block-Dokumentation wird ausschließlich die Dokumentationsstruktur aus SolutionArchitecture/20-architecture/concepts/Documentation_Model.md verwendet.
Neue parallele Sammelordner neben dem verbindlichen Dokumentationswurzelordner documents dürfen nicht eingeführt werden, wenn eine bestehende Dokumentationsklasse geeignet ist.
Insbesondere dürfen folgende Ordnernamen nicht als zusätzliche parallele Dokumentationsstruktur eingeführt werden:
documentation
manual
notes
misc
tmp
Der Name documents ist ausschließlich als verbindlicher Dokumentationswurzelordner des definierten Dokumentationsmodells zulässig.
25.4 Abgrenzung zum globalen Solution-Architecture-Paket#
Das globale Solution-Architecture-Paket verwendet weiterhin seine nummerierte Paketstruktur.
Die hier definierten Klassen steuern die Dokumentation in Workspaces und Building Blocks sowie die fachliche Einordnung neuer Dokumente. Sie ersetzen nicht automatisch die bestehende Struktur des globalen Solution-Architecture-Pakets.
25.5 Keine Dubletten#
Neue Dokumente dürfen bestehende Inhalte nicht duplizieren.
Wenn ein bestehendes Dokument erweitert werden kann, ist Erweiterung der Neuerzeugung vorzuziehen.
Wenn ein Dokument Inhalte mehrerer Klassen enthalten würde, ist die primäre Klasse zu benennen. Eine Aufteilung in mehrere Dokumente darf nur erfolgen, wenn dadurch keine inhaltliche Dublette entsteht.
25.6 Verbindliche Dokumentationsregeln#
Für neue und geänderte Dokumentation gelten zusätzlich verbindlich die folgenden Regeln:
- Jedes Dokument besitzt genau eine Dokumentationsklasse. Die Klasse bestimmt den Zielordner und die fachliche Einordnung.
- Dubletten sind unzulässig. Ein neues Dokument darf kein bestehendes Dokument mit gleicher oder wesentlich gleicher Aufgabe ersetzen, kopieren oder parallel fortschreiben.
- Parallele Dokumentationsstrukturen sind unzulässig. Neben
documentsdürfen keine alternativen Sammelstrukturen für Dokumentation entstehen. - Dauerhafte Dokumentation ist von Sprint-, Projekt-, Analyse- und Abschlussartefakten zu trennen.
- Dokumentation ist Teil der Architektur. Sie ist kein Ablageordner für beliebige Notizen, temporäre Arbeitsstände oder ungeprüfte Zwischenstände.
Diese Regeln gelten unabhängig davon, ob ein Dokument manuell, durch ein Werkzeug oder durch KI-Unterstützung erzeugt wird.
25.7 Prüfablauf für neue Dokumentation#
Vor dem Erzeugen eines neuen Dokuments ist der folgende Prüfablauf einzuhalten:
- Dokumentationsklasse bestimmen.
- Prüfen, ob ein bestehendes Dokument erweitert werden kann.
- Prüfen, ob durch das neue Dokument eine Dublette oder parallele Fortschreibung entstehen würde.
- Zielordner aus der Dokumentationsklasse ableiten.
- Nur wenn keine bestehende Klasse geeignet ist, eine neue Klasse oder ein neuer Zielordner vorschlagen und begründen.
- Erst nach dieser Prüfung das Dokument erzeugen.
Das Ergebnis der Prüfung muss im jeweiligen Änderungs- oder Abschlussnachweis nachvollziehbar sein.
25.8 Trennung dauerhafter Dokumentation von Projektartefakten#
Dauerhafte Dokumentation beschreibt stabile Architektur, Spezifikation, Betrieb oder langfristig relevante Historie.
Sprint-, Feature-, Analyse-, Validierungs- und Abschlussartefakte dokumentieren dagegen einen konkreten Arbeitsstand oder Prüfnachweis. Sie dürfen dauerhafte Dokumentation nicht ersetzen und nicht ungeordnet im Hauptverzeichnis eines Workspaces oder Building Blocks abgelegt werden.
Wenn ein Sprint- oder Feature-Ergebnis dauerhaft relevant wird, muss der dauerhafte Inhalt in ein passendes Dokument der Klasse Architektur, Spezifikation, Betrieb oder Historie überführt werden. Der Sprint- oder Feature-Nachweis bleibt ein zeitbezogenes GlossarbegriffEin Artefakt ist jede eindeutig identifizierbare fachliche, technische, organisatorische oder reale Einheit, die in der Engineering-Landschaft modelliert wird. Alles Modellierbare wird als Artefakt geführt. Dazu gehören unter anderem Systeme, Beziehungen, Features, Dokumente, ADRs, Tests, UI-Buttons, Menüs, Farben, Icons, Konfigurationen, Diagramme, Runtime-Ressourcen, fachliche Objekte und reale Objekte wie ein Blumentopf, sofern sie modelliert werden. Knowledge ist keine Sonderklasse. UI- und Applikationsartefakte werden fachlich nach demselben Grundmodell behandelt.Glossareintrag vollständig lesen.
99. Environment Neutrality#
Building Blocks und führende Quellartefakte müssen umgebungsneutral bleiben.
Vor Abschluss jeder Änderung ist zu prüfen:
- Enthält der Building Block feste Datenbanknamen?
- Enthält der Building Block feste Datenbankbenutzer?
- Enthält der Building Block feste Passwörter?
- Enthält der Building Block feste Hosts oder IP-Adressen?
- Enthält der Building Block feste Ports?
- Enthält der Building Block feste URLs oder API-Endpunkte?
- Enthält der Building Block feste Dateisystempfade?
- Enthält der Building Block feste Runtime-Namen?
- Enthält der Building Block Secrets, API-Keys, Zertifikate oder produktive Zugangsdaten?
- Setzen Skripte implizite Betriebssystem-Defaults für Datenbank-, Service- oder Deployment-Zugriffe voraus?
Falls ja, ist die Änderung ein Architekturfehler.
Zulässig sind nur parameterisierte Templates, .env.example-Dateien mit eindeutigem Beispielcharakter oder Werte in der jeweiligen Runtime-Konfiguration.
SQL-Dateien dürfen keine konkreten Datenbanknamen oder Benutzer enthalten. Sie verwenden Platzhalter wie ${DB_NAME}, ${DB_USER} und ${DB_PASSWORD}, die erst während Deployment oder Runtime-Erzeugung aufgelöst werden.
Shell-Skripte müssen die passende Environment- oder Runtime-Konfiguration laden und dürfen Tools wie mariadb, mysql, Webserver oder externe Clients nicht ohne explizite, konfigurierte Parameter aufrufen.
Datenbank-Deployment: Admin- und Anwendungsbenutzer trennen#
Administrative SQL-Operationen (CREATE DATABASE, CREATE USER, GRANT, REVOKE, FLUSH PRIVILEGES) dürfen nicht mit dem Anwendungsbenutzer ausgeführt werden.
Pflichtprüfung:
- werden Admin-Operationen ausschließlich mit expliziten Admin-Variablen der Zielumgebung ausgeführt?
- gibt es keinen Fallback von Admin-Operationen auf
DB_USER? - laufen Tabellen- und Migrationsskripte danach mit dem Anwendungsbenutzer?
- bleiben alle Benutzer, Passwörter, Hosts und Datenbanknamen umgebungsneutral?
Ein Verstoß ist ein Architekturfehler.
100. Idempotente Deployments und Migrationen#
Deployment-, SQL- und Migrationsskripte müssen wiederholbar sein.
Vor Abschluss jeder Änderung ist zu prüfen:
- Kann das Deployment mehrfach hintereinander ausgeführt werden?
- Prüfen
DROP INDEX,DROP FOREIGN KEY,DROP COLUMN,DROP TABLEund vergleichbare Operationen vorher, ob das Zielobjekt existiert? - Prüfen
ADD INDEX,ADD UNIQUE KEY,ADD COLUMN,CREATE TABLEund vergleichbare Operationen vorher, ob das Zielobjekt bereits existiert? - Greifen Migrationsskripte nur auf Altspalten oder Alttabellen zu, wenn diese tatsächlich vorhanden sind?
- Verursacht ein bereits erreichter Zielzustand keinen Fehler?
- Werden fachliche Datenkonflikte, zum Beispiel Dubletten vor einem Unique-Key, eindeutig beschrieben?
Nicht-idempotente Deployment- oder Migrationsschritte sind Architekturfehler und vor Abschluss der Änderung zu korrigieren.
Reviewpunkte für lokale Entwicklungsumgebung#
Änderungen an Workspace-Skripten, lokaler Runtime, systemd-User-Services, Watcher, Import, Export, Tests oder lokaler Datenbankeinrichtung gelten nur als reviewfähig, wenn folgende Punkte geprüft und dokumentiert sind:
- Installationsanleitung vollständig
- systemd-Komponenten dokumentiert
- Watcher dokumentiert
- Validierung dokumentiert
- Fehlerbehandlung dokumentiert
- Entwicklungsworkflow dokumentiert
Die Prüfung erfolgt gegen workspace/documentation/operation/step-by-step-installation-guide.md und die daraus abgeleiteten Betriebsdokumente.
Reviewpunkte – robuster Build-, Import- und Export-Workflow#
Bei Änderungen am lokalen Entwicklungs-, Import-, Restore-, Export- oder Buildworkflow sind zusätzlich zu prüfen:
- zentrale Artefakterkennung vorhanden
- keine mehrfachen Artefakterkennungen in Einzelskripten
- Manifest vorhanden
- Artefakterkennung verwendet Manifest bevorzugt
- keine primären Dateinamensabhängigkeiten für Artefakttypen
- Buildstatus vollständig mit
SUCCESS,FAILED,SKIPPED,WARNING SKIPPEDkorrekt für optionale Komponenten verwendet- fehlende optionale Komponenten führen nicht zum Buildabbruch
- ChatGPT-Exportpakete werden nicht erneut importiert
AI_CONTEXT.mdenthält keine unnötigenunknown-Platzhalter- falls
unknownunvermeidbar ist, enthältAI_CONTEXT.mdeine konkrete Diagnose
26. Zentrale asynchrone Board-Persistenz#
Board-Persistenz ist eine zentrale Infrastrukturverantwortung. UI-Komponenten dürfen Board-Zustände ändern und NSBoards.save(...) aufrufen, implementieren aber keine eigene konkurrierende Persistenzlogik.
Für Board-Saves gilt verbindlich:
- Board-Saves werden seriell ausgeführt.
- Während eines laufenden Saves eintreffende neuere Board-Zustände werden als nachfolgender Save vorgemerkt.
- Bei mehreren vorgemerkten Saves für dasselbe Board gewinnt der letzte konsistente Board-Stand.
clear(), Selektionswechsel und Editor-Schließen dürfen laufende Saves nicht vergessen oder intern als beendet markieren.- Für Navigation, Tests und kritische UI-Wechsel muss ein fachlicher Flush-Punkt verfügbar sein.
- Komponenten dürfen lokale Speicherzustände anzeigen, beispielsweise
dirty,saving,savedunderror; eine globale UI-Sperre ist nicht erforderlich.
Diese Regel verhindert Race Conditions, bei denen ältere HTTP-Antworten neuere UI-Zustände überschreiben.
23. Modularisierungssprints#
Für jeden Modularisierungssprint gelten zusätzlich verbindlich:
70-building-blocks/split-reports/BUILDING_BLOCK_SPLIT_READINESS_CHECK.md
70-building-blocks/split-reports/BUILDING_BLOCK_SPLIT_REPORT.md
Die Roadmap beschreibt die fachlich gewünschte Reihenfolge der Building Blocks. Sie stellt keine technische GlossarbegriffEin Release ist ein bewusst freigegebener und nachvollziehbarer Stand von Artefakten und ihrer Realisierung.Glossareintrag vollständig lesen dar.
Vor produktiven Codeänderungen muss der Readiness-Check erfolgreich abgeschlossen sein. Nach Abschluss des Sprints ist der Split-Report nach der verbindlichen Vorlage zu erstellen.
ChatGPT Roundtrip dauerhaft: compile-sichere Ownership-Extraktion#
Wenn eine fachliche Ownership eindeutig einem Building Block zugeordnet werden kann, die physische Entfernung aus früherer Monolith aber die Kompilierbarkeit der Runtime brechen würde, ist eine compile-sichere Übergangskopie zulässig. Diese muss in integration-map.json, Split-Report und Lifecycle-Record ausdrücklich dokumentiert werden. Die Übergangskopie darf keine zweite Implementierung sein und muss in einem späteren Server/Core/Persistence-Split aufgelöst werden.
Phase G Final Vacuum Rule#
früherer Monolith ist retired. Neue oder bestehende Arbeitsanweisungen dürfen früherer Monolith nicht mehr als produktiven Runtime-Lieferanten voraussetzen. Platform-Core-Dateien gehören nach BB-001. Fachliche Bestandteile gehören ausschließlich in ihre bestehenden Building Blocks. früherer Monolith darf nur noch als No-op-/Retirement-Nachweis ohne produktive Assembly-Quellen existieren.
Dokumentationsnavigation#
Auto-referenceable Dokumente#
Die folgenden Dokumenttypen gelten als auto-referenceable und müssen entsprechend der Dokumentationsnavigation erreichbar sein:
- MASTER_PROMPT.md
- AI_STARTS_HERE.md
- README.md
- Index-Dokumente
- weitere in den Richtlinien als Einstieg definierte Dokumente
Verbindliche Regeln#
- Jedes auto-referenceable Dokument muss mindestens eine gültige eingehende Referenz besitzen.
- README-Dokumente referenzieren die für ihren Geltungsbereich vorgesehenen Einstiegsdokumente.
- Auto-referenceable Dokumente dürfen niemals als Orphans im Repository verbleiben.
- Die Dokumentationsnavigation ist Bestandteil jeder Repository-Validierung.
- Die Validierung schlägt fehl, wenn ein auto-referenceable Dokument keine eingehende Referenz besitzt.
Praxisgetriebene Architekturentwicklung#
Für Foundation-Dokumente, grundlegende Modelle und wesentliche Architekturentscheidungen gilt ergänzend die führende Schreibcharta der Solution Architecture; sie wird in diesem Repository nicht dupliziert.
Wiederkehrende Praxiserfahrungen werden als Knowledge Stories gesichert, bevor sie abstrahiert werden. Die redaktionelle Überarbeitung verbessert die Lesbarkeit, verändert jedoch keine Fakten. Die KI prüft bei geeigneten Architekturfortschritten aktiv, ob eine passende Geschichte aus der Praxis existiert.
Der verbindliche Knowledge-Engineering-Lebenszyklus und seine Artefaktgrenzen verbleiben in der führenden Solution Architecture. Reports und Publikationen sind Repräsentationen und keine unabhängigen fachlichen Quellen.