diff --git a/AGENTS.md b/AGENTS.md index 82a98fc..d2136ed 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -22,9 +22,9 @@ - Use the locally bundled Inter variable font as the single application typeface. Do not introduce view-specific display, condensed, serif, or monospace families; hierarchy comes from size and weight. - Use only the visual weights Regular 400, Semibold 600, and Bold 700. Bold is reserved for branding and exceptional emphasis. -- Use the semantic typography roles: H1 56px/600, H2 32px/600, H3 18px/600, H4 16px/600, body and table content 16px/400, labels 14px/600, metadata and table headers 13px, and buttons 14px/600. +- Use the semantic typography roles: H1 56px/600, H2 32px/600, H3 18px/600, detail titles 20px/600, H4 16px/600, continuous prose 16px/400, structured table/Grid/Raw Data content 14px/400, labels and table headers 12px/600, metadata 12px, badges 11px, and buttons/controls 13px/600. - Preserve normal title case for H1-H4, field labels, and buttons. Uppercase is limited to compact table headers, badges/categories, and the ASSESSOR wordmark. -- Render continuous prose and other content-bearing text at no less than `16px`, including finding content, report text, Grid cell content, and Raw Data. +- Render continuous prose such as finding and report text at no less than `16px`. Structured data in tables, Grid, and Raw Data uses the dedicated compact 14px role. - Compact interface text such as button captions, field labels, metadata, badges, and comparable control annotations may use a smaller type size. - When adding or changing styles, preserve this distinction instead of reducing content text to a compact UI-label token. @@ -37,12 +37,13 @@ ## UI segments and tiles -- Treat segments and tiles as a binding two-level visual grammar independent of their content. A segment is the rounded grouped background; a tile is a rounded, individually bordered element inside it. +- Treat segments and tiles as a binding two-level visual grammar independent of their content. A segment is a transparent grouped layout; a tile is a flat, square-cornered surface inside it. - Use only the shared `--segment-*` and `--tile-*` tokens for segment surfaces, borders, radii, insets, gaps, tile surfaces, shadows, widths, hover states, and selected contours. Do not create view-local substitute geometry. -- Segments use the light neutral group surface, a fine border, `--segment-radius`, one uniform inset, and one uniform gap. Segments remain flat and do not receive a floating shadow. -- Tiles use the common white or theme-equivalent surface, fine gray border, `--tile-radius`, and the single subtle `--tile-card-shadow`. Hover may change border and surface but must not lift or translate the tile. +- Segments are visually transparent and have no visible border or shadow. They retain `--segment-radius`, one uniform inset, and one uniform gap as shared layout geometry. +- Tiles use the common white or theme-equivalent surface without a visible normal-state border, radius, or shadow. Hover changes the surface only and must not add a decorative contour, lift, or translation. - Status color belongs only in a small accent line, marker, data visualization, or selected contour. Never fill the complete tile with a status color. -- Selected tiles use the shared selected border/outline. Action tiles and add tiles use the same geometry as content tiles. +- Keyboard focus and selected tiles use the shared functional focus or selected outline. Action tiles and add tiles use the same flat geometry as content tiles. +- The persistent marking and selection color is always the shared yellow `--marking-color` in both themes. Purple must not be used for selected contours or markers. Blue remains reserved for keyboard focus, while green, red, orange, and severity colors remain domain status signals rather than selection colors. - Keep unused segment space intentionally empty: lay tiles out from the start at their shared compact or content width and never stretch a partial final row merely to fill the container. - Tile content must never cross the tile boundary or cover a neighboring tile. Nothing may be clipped, clamped, truncated, or replaced by an ellipsis. Text and actions reflow inside the tile; media scales within the available inner area. If content does not fit, enlarge or reflow the tile. - Avoid line breaks in compact tile labels where practical. If wrapping is necessary, wrap only at word boundaries: never split ordinary words or numeric values across lines. Use a wider or responsive tile whenever a complete word or value cannot fit. diff --git a/docs/IMPLEMENTATION_PLAN.md b/docs/IMPLEMENTATION_PLAN.md index b2578b4..65dcec1 100644 --- a/docs/IMPLEMENTATION_PLAN.md +++ b/docs/IMPLEMENTATION_PLAN.md @@ -2,7 +2,7 @@ Status: lebendes Projektdokument Erstellt: 2026-07-17 -Zuletzt aktualisiert: 2026-08-04 +Zuletzt aktualisiert: 2026-08-25 Aktuelle Entwicklungsstufe: lokale React-/Tauri-Anwendung Zielzustand: interne Mehrbenutzer-Webanwendung mit Backend und PostgreSQL @@ -1349,9 +1349,16 @@ Aktualisierung nach dem Schritt-11-Orchestrierungsvertikalschnitt vom 2026-08-04 | Datum | Entscheidung | Begründung | |---|---|---| +| 2026-08-25 | Die appweite persistente Markierungs- und Auswahlfarbe ist auf ausdrueckliche Nutzerfestlegung immer Gelb und wird in beiden Themes ueber `--marking-color` gefuehrt. Kachelauswahl, Auswahlrahmen/-marker, gemerkte Eintraege und Graphauswahl verwenden diesen Token. Blau bleibt Tastaturfokus; Gruen, Rot, Orange und Severitytoene bleiben fachliche Statussignale. | Ein einzelner semantischer Markierungston verhindert violette oder skinabhaengig wechselnde Auswahlkonturen wie im Datahub-Screenshot und bewahrt gleichzeitig die Bedeutung bestehender Statusfarben. | +| 2026-08-25 | Die unmittelbar zuvor fuer Client Info festgelegte flache SOC-Kachel ist auf ausdrueckliche Nutzerfestlegung der neue appweite Kachelstandard: keine sichtbare Normalzustandskontur, kein Radius und kein Schatten; Hover veraendert nur die Flaeche. Fokus, Auswahl und kleine Statusakzente bleiben funktionale Ausnahmen. Die gemeinsamen `--tile-*`-Tokens und Projektregeln tragen diesen Vertrag. | Ein zentraler Standard verhindert, dass neue oder bestehende Ansichten erneut weisse Konturen, Rundungen oder schwebende Schatten einfuehren. Flaechenkontrast und gemeinsamer Abstand erzeugen die gewuenschte ruhige, dichte SOC-Geometrie. | +| 2026-08-25 | Das quadratische Client-Info-Raster uebernimmt die flache Kartenoberflaeche der Nutzerreferenz: regulaere Kennzahl- und Inhaltskacheln haben keine Aussenkontur, keinen Schatten, den zentralen Nullradius und keine dekorative Trennlinie unter dem Kartentitel. Farbige Fokus- und Auswahlkonturen bleiben als funktionale Zustaende erhalten. | In der Referenz werden Karten allein durch Flaechenkontrast und dunkle Zwischenraeume getrennt. Die bisherige helle Kontur, Rundung und Schattenkante erzeugten eine abweichende, unruhige zweite Geometrieebene. | +| 2026-08-25 | Client Info verwendet nach ausdruecklicher Nutzerkorrektur ausschliesslich quadratische Kacheln in einem gemeinsamen dichten Raster: Kennzahlen belegen 1 x 1 Rastereinheiten, Inhaltskarten 2 x 2 Einheiten. Die frueher getrennten, ueber die Gesamtbreite gestreckten Kennzahl- und Inhaltsraster entfallen. | Zwei quadratische Groessen halten kurze Kennzahlen kompakt und geben inhaltsreichen Visualisierungen ausreichend Raum. Ein gemeinsames `dense`-Raster nutzt freie Zellen neben kleinen Kacheln und vermeidet breite Karten mit ungenutzter Innenflaeche. | +| 2026-08-25 | Die Nutzerkorrektur ersetzt den sichtbaren Segmentcontainer aus der Kachelgrammatik vom 2026-08-24: Segmente sind anwendungsweit transparente Layoutgruppen ohne sichtbare Flaeche, Kontur oder Schatten. Gemeinsamer Radius, Inset und Gap bleiben als Geometrievertrag erhalten; Kacheln behalten ihre eigene Flaeche, Kontur, Auswahlmarkierung und den gemeinsamen dezenten Schatten. | Der zusaetzliche Gruppenunterbau konkurriert visuell mit den einzeln abgegrenzten Kacheln und erzeugt grosse leere Farbflächen bei unvollstaendigen Reihen. Transparente Segmente bewahren Gruppierung und Layoutstabilitaet, ohne eine zweite sichtbare Kartenebene einzufuehren. | +| 2026-08-25 | Source Extractors duerfen versionierte `supportingTables` liefern: quellengetreue Tabellen, die Findings belegen, aber selbst keine Finding-Quelle sind. Die Importengine projiziert sie generisch als DatasetSheets; werkzeugspezifische Darstellung bleibt ausserhalb von React. PurpleKnight-HTML 1.1.0 verwendet diesen Vertrag fuer seine eingebetteten SI-Ergebnistabellen. | PurpleKnight-Excel speichert Ergebnisdetails als eigene Workbook-Sheets, waehrend der HTML-Bericht dieselben Tabellen als strukturierte Zeilen im inerten Reportmodell traegt. Ein gemeinsamer Supporting-Table-Vertrag erhaelt Tabellen, Provenienz und Result-Verknuepfung formatuebergreifend, ohne Parsinglogik in UI oder kanonische Persistenz zu verschieben. | +| 2026-08-25 | Die Nutzerkorrektur ersetzt die flaeckende 16-px-Inhaltsuntergrenze des Typografievertrags vom 2026-08-24 durch eine hybride Dichteskala: H1 bis H4, 20-px-Detailtitel und kontinuierlicher Lesetext mit 16 px bleiben erhalten; strukturierte Tabellen-, Grid- und Raw-Data-Werte verwenden 14 px, Controls 13 px, Labels, Metadaten und Tabellenkoepfe 12 px sowie Badges 11 px. Inter und die semantischen Rollen bleiben verbindlich. | Lesetext benoetigt die groessere Stufe, waehrend dichte Tabellen und Bedienoberflaechen durch die pauschale Anhebung zu wenig Information zeigten. Eine eigene Tabellenkoerperrolle verhindert, dass strukturierte Daten und Prosa erneut ueber denselben Token gekoppelt werden. | | 2026-08-24 | Die PostgreSQL-Zieladresse der Serverlaufzeit wird bei Einzelvariablen-Konfiguration aus `ASSESSOR_POSTGRES_HOST` gelesen; ohne Wert bleibt `127.0.0.1` der lokale Standard. Eine explizite `ASSESSOR_DATABASE_URL` behaelt Vorrang. | Container teilen keinen Loopback-Namensraum. Der Compose-Dienstname `postgres` muss deshalb bis in die Backend-Verbindungszeichenfolge gelangen, ohne den bestehenden lokalen Entwicklungsbetrieb zu brechen. | | 2026-08-24 | Segmente und Kacheln folgen anwendungsweit einer gemeinsamen visuellen Grammatik: flacher abgerundeter Segmentcontainer mit einheitlichem Inset und Gap; darin gleichartige abgerundete Kacheln mit feiner Kontur, dezentem gemeinsamem Schatten und fester Inhaltsbreite. Statusfarbe bleibt Akzent oder Auswahlkontur. Unvollstaendige Zeilen werden nicht gestreckt. Jede Kachel begrenzt ihren Inhalt; Titel, Werte, Labels, Zusatztexte, Medien und Aktionen duerfen weder abgeschnitten, geklemmt, ellipsiert oder verborgen werden noch die Kachelgrenze ueberschreiten oder Nachbarkacheln ueberdecken. Notwendige Umbrueche erfolgen ausschliesslich an Wortgrenzen, Zahlen werden nicht getrennt. | Ein gemeinsamer Vertrag verhindert springende Geometrie und ansichtsspezifische Sonderkarten. Die harte Inhaltsgrenze schuetzt Nachbarkacheln, waehrend vollstaendige Inhalte die fachliche Lesbarkeit erhalten. Wenn Inhalt nicht vollstaendig passt, wird er intern neu angeordnet oder die Kachel verbreitert beziehungsweise responsiv neu angeordnet. | -| 2026-08-24 | Die neueste Nutzerkorrektur ersetzt fuer Finding-Titel die unmittelbar folgende fruehere 18-px-Reader-Entscheidung: Trefferlistentitel bleiben auf der 16-px-Inhaltsstufe, werden aber mit Medium 500 statt Semibold gesetzt; der Titel des geoeffneten Findings verwendet eine eigene 20-px-Detailtitelrolle mit Semibold. Die Finding-Abschnittsueberschrift bleibt 18 px, regulaere Matrixkacheln bleiben 16 px. | Die Trefferliste soll ruhig und scanbar bleiben, waehrend das geoeffnete Finding als primaerer Detailkontext klar hervortreten muss. Die getrennten semantischen Rollen loesen den Kontrast ohne die 16-px-Untergrenze fuer inhaltstragenden Text zu unterschreiten. | +| 2026-08-24 | Die neueste Nutzerkorrektur, am 2026-08-25 weiter verdichtet, ersetzt fuer Finding-Titel die unmittelbar folgende fruehere 18-px-Reader-Entscheidung: Trefferlistentitel bleiben auf der 16-px-Inhaltsstufe und verwenden Regular 400 statt der frueheren staerkeren Gewichte; der Titel des geoeffneten Findings verwendet eine eigene 20-px-Detailtitelrolle mit Semibold. Die Finding-Abschnittsueberschrift bleibt 18 px, regulaere Matrixkacheln bleiben 16 px. | Die Trefferliste soll ruhig und scanbar bleiben, waehrend das geoeffnete Finding als primaerer Detailkontext klar hervortreten muss. Die getrennten semantischen Rollen und kompaktere Listengeometrie loesen den Kontrast ohne die 16-px-Untergrenze fuer inhaltstragenden Text zu unterschreiten. | | 2026-08-24 | Finding-Titel verwenden innerhalb von Work eine kompakte semantische Hierarchie: Reader-Titel und Finding-Abschnitt nutzen H3 mit 18 px; Titel in Trefferlisten und regulaeren Matrixkacheln nutzen H4 mit 16 px. Die globale H1-/H2-Hierarchie und die eigenstaendige Pathfinder-Micro-Card bleiben unveraendert. | Lange Scannerbezeichnungen benoetigen in Listen und Kacheln sonst zu viele Zeilen und verdraengen Status sowie Metadaten. Die vorhandenen Typografietokens erhalten die Lesbarkeitsuntergrenze von 16 px fuer inhaltstragenden Text und vermeiden lokale Sondergroessen. | | 2026-08-24 | Alle Donutdiagramme verwenden einen gemeinsamen visuellen Vertrag: vollstaendige neutrale 360-Grad-Ringspur, farbiger Wertbogen im Uhrzeigersinn ab 12 Uhr, flache Bogenenden, gemeinsame Strichstaerke und eine mittige Primaerkennzahl mit kleiner Einheit auf derselben Grundlinie. Mehrteilige Verteilungen behalten ihre fachlichen Farbsegmente innerhalb derselben Geometrie. | Eine gemeinsame Form verhindert wechselnde Gauge-, Ring- und Prozentdarstellungen zwischen Datahub, Dashboard und Sidebar. Die neutrale Restspur macht den verbleibenden Anteil sichtbar; die zentrale Kennzahl bleibt unabhaengig von Kartenbreite und Legende unmittelbar lesbar. | | 2026-08-24 | ASSESSOR verwendet anwendungsweit die lokal gebuendelte variable Schriftfamilie Inter. Die verbindliche Hierarchie ist H1 56 px/600, H2 32 px/600, H3 18 px/600, H4 und Fliesstext 16 px mit 600 beziehungsweise 400, UI-Labels und Buttons 14 px, Metadaten und Tabellenkoepfe 13 px sowie kompakte Finding-Badges 12 px. Uppercase bleibt Tabellenkoepfen und kurzen technischen Kennzeichnungen vorbehalten; regulaere Ueberschriften und Feldbezeichnungen verwenden Title Case. | Eine lokal gebuendelte Einzelschrift verhindert plattformabhaengige Fallbacks und visuelles Springen. Semantische Rollen statt lokaler Einzelwerte schaffen nachvollziehbare Abstufungen, waehrend 16 px fuer inhaltstragenden Text die bestehende Lesbarkeitsgrenze bewahrt und dichte Finding-Zustandszeilen visuell hinter den Titel treten. | @@ -1610,9 +1617,14 @@ Diese Entscheidungen werden erst getroffen, wenn die jeweilige Phase ansteht ode | Risiko | Gegenmaßnahme | |---|---| +| Auswahl, Fokus und fachlicher Status koennen erneut farblich vermischt werden, wenn Komponenten direkt Akzent-, Fokus- oder Severitytokens fuer eine persistente Markierung verwenden. | Persistente Auswahl ausschliesslich an `--marking-color` binden und in beiden Themes auf denselben Gelbwert regressionspruefen. `--focus-ring` bleibt nur fuer Tastaturfokus; Online-, Fehler-, Workflow- und Severityfarben bleiben fachlich getrennt. | +| Einzelansichten koennten trotz flacher gemeinsamer Tokens im Hover erneut dekorative Konturen setzen oder den Standard mit lokalen Radien und Schatten umgehen. | Appweite Projektregel und Regression an die flachen `--tile-*`-Tokens binden; normale und Hover-Zustaende getrennt von Fokus, Auswahl und Statusakzenten pruefen. Lokale Kachelgeometrie bleibt unzulaessig. | +| Kontur- und schattenlose Client-Info-Kacheln koennen bei spaeteren Themeaenderungen ihren Flaechenkontrast zum Dashboardgrund verlieren; interaktive Kacheln koennten ohne eigene Zustandsmarkierung schwer erkennbar werden. | Karten- und Grundflaeche ueber die bestehenden Theme-Tokens getrennt halten, Hover weiterhin ueber die Hoverflaeche zeigen und Fokus sowie Auswahl mit den vorhandenen farbigen Konturen sichern. Die Dashboardregression prueft den flachen Normalzustand getrennt von diesen Funktionszustaenden. | +| Quadratische Dashboardkarten koennen bei schmalen Breakpoints zu klein fuer vollstaendige Fakten-, Legenden- oder Balkeninhalte werden oder durch getrennte Raster erneut ungenutzte Flaechen erzeugen. | Kennzahlen und Inhaltskarten in demselben dichten Raster halten, Inhaltskarten ueber zwei Spalten und Zeilen skalieren, responsive gerade Spaltenzahlen verwenden und Quadratverhaeltnis, Rasterspans sowie das Fehlen fester Mindesthoehen regressionspruefen. Inhalte duerfen weiterhin weder geklemmt noch abgeschnitten werden. | +| Eine kompakte UI-Skala koennte versehentlich auch kontinuierlichen Finding- oder Reporttext verkleinern; umgekehrt koennte eine spaetere Body-Token-Aenderung Tabellen erneut auf Prosegroesse anheben. | Kontinuierlichen Lesetext fest an `--type-body-size` mit 16 px und strukturierte Daten an den getrennten 14-px-Token `--type-table-body-size` binden. Grid, Raw Data, allgemeine Tabellenzellen und die semantische Rollenskala gemeinsam regressionspruefen. | | Die Compose-Konfiguration benennt den PostgreSQL-Dienst korrekt, waehrend das Backend den Host ignoriert und innerhalb des App-Containers gegen `127.0.0.1` verbindet; Build und Datenbank-Health bleiben dabei gruen, aber die App wird unhealthy. | `ASSESSOR_POSTGRES_HOST` in den Repository-Umgebungsvertrag und die Verbindungszeichenfolge aufnehmen, Loopback nur als lokalen Fallback verwenden und Docker-Hostname sowie lokalen Standard durch einen reinen Unit-Test absichern. | | Lokale Kartenraster koennen Kacheln wieder auf Restbreite strecken; lange Titel, Werte, Labels, Zusatztexte, Medien oder Aktionen koennen abgeschnitten, ellipsiert oder verborgen werden, aus einer Kachel herausragen, Nachbarkacheln ueberdecken oder durch aggressive Umbruchregeln mitten im Wort getrennt werden. | Gemeinsame Segment-/Kacheltokens, feste Startausrichtung und eine zuletzt geladene Kachel-Vertragsschicht verwenden. Woerter nur an Wortgrenzen umbrechen und Zahlen zusammenhalten. Bei Platzmangel Inhalt intern neu anordnen oder die Kachel verbreitern beziehungsweise responsiv neu anordnen; Clipping, Clamp, Ellipse und Truncation sind keine zulaessigen Rueckfaelle. Statische Regressionen sichern Vertrag, relevante Ansichten und Kaskadenreihenfolge. | -| Trefferlistentitel und geoeffneter Finding-Titel koennen trotz unterschiedlicher Informationshierarchie optisch gleich laut oder in der falschen Reihenfolge erscheinen. | Trefferliste auf 16 px/500 und geoeffneten Detailtitel auf 20 px/600 ueber eigene zentrale Tokens binden; Finding-Abschnitt und Matrixkacheln getrennt regressionspruefen. | +| Trefferlistentitel und geoeffneter Finding-Titel koennen trotz unterschiedlicher Informationshierarchie optisch gleich laut oder in der falschen Reihenfolge erscheinen. | Trefferliste auf 16 px/400 und geoeffneten Detailtitel auf 20 px/600 ueber eigene zentrale Tokens binden; Finding-Abschnitt und Matrixkacheln getrennt regressionspruefen. | | Finding-Badges und Outcome-Texte koennen bei derselben Groesse wie regulaere Labels eine lange Titelzeile optisch ueberladen und MITRE-Zuordnungen unnoetig umbrechen. | Fuer Finding-Zustandszeilen ausschliesslich den zentralen 12-px-Badgetoken verwenden; Farbe, Glyph, Rahmen und feste Dimensionsreihenfolge bleiben als zusaetzliche Bedeutungstraeger erhalten. | | Lange Finding-Titel koennen bei Verwendung der globalen H2- oder allgemeinen Heading-Rolle Reader, Trefferlisten und Matrixkacheln visuell dominieren und Statusinformationen aus dem sichtbaren Bereich druecken. | Finding-spezifische Titelrollen regressionspruefen: Reader 18 px, Listen- und Matrixkacheln 16 px; Fliesstext bleibt mindestens 16 px. Globale Seitentitel und Pathfinder-Micro-Cards nicht ueber lokale Work-Regeln mitveraendern. | | Unabhaengige Donutimplementierungen koennen erneut in offene 270-Grad-Gauges, abweichende Ringspuren, runde Bogenenden oder unterschiedlich platzierte Prozentwerte auseinanderlaufen; mehrteilige Verteilungen koennten den gemeinsamen Standard umgehen. | Vollkreis, Startposition, flache Enden, neutrale Spur, Strichstaerke und zentrale Wertebehandlung ueber gemeinsame Donuttokens und Regressionen fuer Datahub-Karten, Sidebar, Dashboardstatus und mehrteilige Risiko-Verteilung absichern. Neue Donuts muessen denselben Vertrag verwenden. | @@ -1795,6 +1807,24 @@ Diese Entscheidungen werden erst getroffen, wenn die jeweilige Phase ansteht ode ## 12. Änderungsprotokoll | Datum | Änderung | +| 2026-08-25 | Phase-7-Markierungsfarbe appweit auf Gelb vereinheitlicht: Der neue Theme-Token `--marking-color` traegt in Dark und Light denselben Wert und steuert Kachelauswahl, allgemeine Auswahlrahmen/-marker, gemerkte Eintraege und Graphauswahl. Die violette Datahub-Auswahlkontur entfaellt. Tastaturfokus bleibt blau, Scanner-/Workflow-/Severitystatus behalten ihre fachlichen Farben. Projektregel und Kachelregression wurden aktualisiert. 24 fokussierte Auswahl-/Dashboard-/Graphtests, Designcheck und Client-Produktionsbuild erfolgreich. Keine Fachlogik-, API-, Persistenz- oder Schemaaenderung; Phase 7 bleibt abgeschlossen. | +| 2026-08-25 | Phase-7-Kachelstandard appweit auf die freigegebene flache Client-Info-Geometrie umgestellt: `--tile-border` ist in beiden Themes transparent, `--tile-radius` verwendet den zentralen Nullradius und `--tile-card-shadow` ist deaktiviert. Datahub-, Dashboard-, Sidebar-, Work- und Pathfinder-Hover veraendern die Flaeche ohne dekorative Kontur; Fokus, Auswahl und Statusmarkierungen bleiben sichtbar. `AGENTS.md` und die gemeinsamen Kachelregressionen wurden auf den neuen verbindlichen Standard aktualisiert. 24 fokussierte Kachel-/Dashboardtests, Designcheck und Client-Produktionsbuild erfolgreich. Keine Fachlogik-, API-, Persistenz- oder Schemaaenderung; Phase 7 bleibt abgeschlossen. | +| 2026-08-25 | Phase-7-Client-Info-Kacheldesign nach erneutem Referenzabgleich korrigiert: Die quadratischen Kennzahl- und Inhaltskacheln verwenden im Normalzustand keine helle Aussenkontur, keinen Kartenschatten und keine Rundung; auch die dekorative Linie unter Inhaltskartentiteln entfaellt. Flaechenkontrast und gemeinsamer Rasterabstand trennen die Kacheln wie im Sollbild, waehrend Hover, Tastaturfokus und aktive Filter funktional sichtbar bleiben. Neun fokussierte Dashboardtests, Designcheck und Client-Produktionsbuild erfolgreich. Keine Fachlogik-, API-, Persistenz- oder Schemaaenderung; Phase 7 bleibt abgeschlossen. | +| 2026-08-25 | Phase-7-Client-Info nach Nutzerreferenz auf ein quadratisches SOC-Raster verdichtet: Alle sechs Kennzahlen sind kompakte 1-x-1-Kacheln, alle neun Inhaltskarten einheitliche 2-x-2-Kacheln im selben responsiven `dense`-Raster. Die bisherigen separaten Sechser- und Dreispaltenraster, gestreckten Kennzahlen sowie 384-px-Mindesthoehen entfallen; Faktenzeilen wurden innerhalb der quadratischen Karten kompakter angeordnet. Neun Dashboard-Regressionen, Gesamtlauf mit 755 bestandenen und 8 uebersprungenen optionalen PostgreSQL-Tests, Local-only-Sicherheitscheck, Designcheck und vollstaendiger Client-/Server-Produktionsbuild erfolgreich. Eine Live-Browser-Geometriepruefung war in der Sitzung mangels Browser-Verbindung nicht verfuegbar. Keine Fachlogik-, API-, Persistenz- oder Schemaaenderung; Phase 7 bleibt abgeschlossen. | +| 2026-08-25 | Phase-7-PurpleKnight-Altlabel korrigiert: Der FindingReader behandelt nun `Short Name` mit Leerzeichen ebenso wie `ShortName` als technische Kennung und zeigt beide ausschliesslich unter Additional Information. Eine synthetische Regression prueft Summary-Ausschluss und Additional-Zuordnung; alle 15 FindingReader-Tests sowie Client-/Server-Produktionsbuild erfolgreich. Keine Import-, API-, Persistenz- oder Schemaaenderung; Phase 7 bleibt abgeschlossen. | +| 2026-08-25 | Phase-7-Ergebnis- und Timeslot-Dichte nach Nutzerkorrektur nachgeschaerft: Im Resultfenster verwenden ausschliesslich Fenstertitel und wiederholte Inhaltsueberschrift H4 mit 16 px statt H3 mit 18 px. Die Finding-Trefferliste behaelt die verbindliche 16-px-Inhaltsuntergrenze, verwendet fuer Titel aber Regular 400, eine kompaktere Zeilenhoehe sowie schmalere Iconspalte, Abstaende und Innenraender; dadurch stehen mehr Zeichen pro Zeile ohne schwer wirkende Fettschrift zur Verfuegung. Timeslots besitzen in jedem Zustand eine 1-px-Kontur, 12 px Abstand und getrennte Interaktionszonen: links Checkbox plus Datum ausschliesslich fuer die Auswahl, rechts Zaehler plus Dreieck ausschliesslich zum Auf- und Zuklappen; Auswahl und Expansion sind nicht mehr gekoppelt. Am freigegebenen Dummy-Client wurden 16 px/400, 1-px-Kontur, 12-px-Abstand und die unabhaengigen Zustandswechsel geometrie- und zustandsbasiert verifiziert. Acht fokussierte Regressionen sowie der Gesamtlauf mit 753 bestandenen und 8 uebersprungenen optionalen PostgreSQL-Tests, Local-only-Sicherheitscheck, Designcheck und vollstaendiger Client-/Server-Produktionsbuild erfolgreich. Keine Import-, API-, Persistenz- oder Schemaaenderung; Phase 7 bleibt abgeschlossen. | +| 2026-08-25 | Phase-7/13A-Rueckwaertskompatibilitaet fuer bereits persistierte PurpleKnight-HTML-Altimporte ergaenzt: Das fruehere `ResultDetail`-JSON wird read-only und begrenzt als `Column: value`-Tabelle projiziert, aktiviert damit das vorhandene Results-Fenster und wird bei vorhandener strukturierter Tabelle nicht mehr zusaetzlich im Finding oder unter Additional Information angezeigt. Das alte `Framework`-JSON wird ohne Ausfuehrung in lesbare MITRE- und ANSSI-Felder aufgeloest; die nur im alten HTML-Schema zusaetzlich sichtbaren Rohfelder `Grade` und `Exposure Type` werden in diesem Kompatibilitaetsfall ausgeblendet. Originalwerte und Persistenz bleiben unveraendert, ein Reimport ist fuer die Darstellungskorrektur nicht erforderlich. Zwei synthetische Regressionen pruefen JSON-Tabellenprojektion, Framework-Aufloesung und die Unterdrueckung redundanter Rohfelder. Gesamtlauf 753 bestanden, 8 optionale PostgreSQL-Tests uebersprungen; Local-only-, Designpruefung und Client-/Server-Produktionsbuild erfolgreich. Keine API-, SQL-, Profil- oder Persistenzmigration; Phase 13A bleibt abgeschlossen. | +| 2026-08-25 | Phase-7-Kachelunterbau auf ausdruecklichen Nutzerwunsch anwendungsweit entfernt: Die gemeinsamen Segmenttokens fuer Flaeche und Kontur sind in dunklem und hellem Skin transparent. Donut-Racks, Mandantenkachelgruppen, Dashboardgruppen, Work-Matrix, Policy-, Pathfinder- und weitere tokengebundene Kachelgruppen behalten Radius, Inset und den 12-px-Gap, zeigen aber keine zweite sichtbare Gruppenflaeche oder Aussenkontur mehr. Einzelkacheln behalten unveraendert Flaeche, graue Kontur, Auswahlzustand und Schatten. Die verbindliche Projektregel wurde auf transparente Layoutsegmente aktualisiert. Im Browser wurden Data-Hub-Donutgruppe, Mandantenkachelgruppe und Work-Matrix in beiden Skins mit `rgba(0, 0, 0, 0)` fuer Hintergrund und Kontur verifiziert; die Work-Kachelkontur blieb sichtbar. Dreizehn fokussierte Segment-/Dashboardtests sowie der Gesamtlauf mit 751 bestandenen und 8 uebersprungenen optionalen PostgreSQL-Tests, Local-only-Sicherheitscheck, Designcheck und vollstaendiger Client-/Server-Produktionsbuild erfolgreich. Keine Fachlogik-, API-, Persistenz- oder Schemaaenderung; Phase 7 bleibt abgeschlossen. | +| 2026-08-25 | Phase-7-Client-Info-Kopf um den aktiven Clientkontext ergaenzt: Direkt hinter der H1 `Client Info` stehen jetzt das vorhandene rechtsgerichtete Dreieck im gelben Aktivton und der Name des aktiven Clients auf der H3-Typografiestufe. Der bisher rechtsbuendig gerenderte Clientname wird im Dashboard unterdrueckt, damit er nicht doppelt erscheint; Verbindungsstatus und die Kopfgeometrie der uebrigen Ansichten bleiben unveraendert. Am freigegebenen Dummy-Client wurden Reihenfolge `Client Info` → gelbes 24-px-Dreieck → `Dummy`, Aktivfarbe `rgb(217, 150, 42)` und die Abwesenheit einer zweiten rechten Namensinstanz verifiziert. Sechs fokussierte Header-/Icontests sowie der Gesamtlauf mit 751 bestandenen und 8 uebersprungenen optionalen PostgreSQL-Tests, Local-only-Sicherheitscheck, Designcheck und vollstaendiger Client-/Server-Produktionsbuild erfolgreich. Keine Fachlogik-, API-, Persistenz- oder Schemaaenderung; Phase 7 bleibt abgeschlossen. | +| 2026-08-25 | Phase-7-Client-Info um eine Timeslotauswahl in der oberen Kontextzeile ergaenzt: Das Dashboard verwendet die bereits bestehende zentrale WorkTimeslotControl und damit dieselbe servergestuetzte Timeslotliste, aktive ScanRun-Auswahl und `openProject`-Grenze wie Work; keine zweite Auswahl- oder Ladefachlogik wurde eingefuehrt. Der Selektor steht rechtsbuendig neben Client-, Bericht- und Datensatzkontext. Am freigegebenen Dummy-Client wurde der Wechsel von 18.08.2026 mit 318 Datensaetzen auf 22.07.2026 mit vier Scanberichten und 885 Datensaetzen in derselben Client-Info-Ansicht verifiziert. Elf fokussierte Dashboard-/Timeslottests sowie der Gesamtlauf mit 750 bestandenen und 8 uebersprungenen optionalen PostgreSQL-Tests, Local-only-Sicherheitscheck, Designcheck und vollstaendiger Client-/Server-Produktionsbuild erfolgreich. Keine API-, Persistenz- oder Schemaaenderung; Phase 7 bleibt abgeschlossen. | +| 2026-08-25 | Phase-7-Donut-Units auf Nutzerwunsch vereinfacht: Die farbigen horizontalen Akzentstriche am oberen Rand der gemeinsamen DonutMetricCard wurden zentral samt ungenutzter Aufbauanimation entfernt. Ringtrack, Wertbogen, Kartenkontur, Titel, Werte, Prozentunit und alle Tonfarben bleiben unveraendert; die Aenderung gilt damit konsistent fuer Datahub und kompakte Sidebar-Donuts. In der laufenden Data-Hub-Ansicht wurden alle sechs Statusunits geprueft, ihr ehemaliges Pseudoelement liefert jeweils `content: none`. Sechs fokussierte Donut-/Datahubtests sowie der Gesamtlauf mit 750 bestandenen und 8 uebersprungenen optionalen PostgreSQL-Tests, Local-only-Sicherheitscheck, Designcheck und vollstaendiger Client-/Server-Produktionsbuild erfolgreich. Der zuvor dokumentierte PurpleKnight-Extractorfehler wurde unabhaengig davon im unmittelbar vorhergehenden Phase-13A-Schritt behoben; keine Fachlogik-, API-, Persistenz- oder Schemaaenderung, Phase 7 bleibt abgeschlossen. | +| 2026-08-25 | Phase-13A-PurpleKnight-HTML-Paritaet zur Excel-Anzeige nachgehaertet: Extractor 1.1.0 projiziert die 26 Spalten von `Indicators results` in identischer Reihenfolge und mit Excel-kompatiblen Status-, Hybrid-, Laufzeit-, Framework-, Result- und Zeitwerten. Eingebettete `IndicatorReportObjects` werden ueber den neuen generischen `supportingTables`-Vertrag als eigenstaendige SI-Ergebnisblaetter erhalten und durch das vorhandene Result-Feld verlinkt; React enthaelt weiterhin keine Quellformatlogik. Die doppelte Source-Table-ID bei HTML mit bereits dekodierten Tabellen wurde durch explizit kollisionsfreie Tabellenindizes behoben. Synthetische Regressionen pruefen 26 Hauptspalten, Result-Verweis, Detailkopf/-zeile, Excel-Zeitformat und kanonische Result-Verknuepfung. Die beiden ausdruecklich freigegebenen Dummyberichte wurden read-only gegengeprueft: 119/119 Hauptzeilen, alle nicht-prosaischen Hauptfelder sowie alle 20 Detailtabellen einschliesslich jeder Kopfzeile und Zelle stimmen ueberein; Inhalte wurden weder als Fixture uebernommen noch dauerhaft protokolliert, temporaere Pruefartefakte wurden entfernt. Gesamtlauf 750 bestanden, 8 optionale PostgreSQL-Tests uebersprungen; Local-only-, Designpruefung und Client-/Server-Produktionsbuild erfolgreich. Keine API-, SQL- oder Persistenzmigration; Phase 13A bleibt abgeschlossen. | +| 2026-08-25 | Phase-7-Severity-Verteilung um den unbezeichneten CIS-CAT-Anteil ergaenzt: Der bisher nur als dunkle Trackflaeche sichtbare Rest wurde am freigegebenen Dummy-Timeslot fachlich geprueft. Von 413 Datensaetzen ohne Severity stammen exakt 411 aus CIS-CAT und 2 aus Maester. Nur die 411 CIS-CAT-Datensaetze erscheinen deshalb als eigener neutralgrauer Abschnitt `CIS-CAT` mit 46 Prozent; die zwei Maester-Datensaetze bleiben ein ehrlicher, winziger unklassifizierter Rest. Die CIS-CAT-Legende fuehrt ueber die vorhandene Scanquellenfacette nach Work, statt einen nicht vorhandenen Severity-Wert vorzutaeuschen. Im Browser wurden Beschriftung `CIS-CAT`, Anzahl 411, Anteil 46 Prozent und die graue Segmentfarbe `rgb(138, 142, 149)` verifiziert. Acht Dashboardtests, Local-only-Sicherheitscheck, Designcheck und vollstaendiger Client-/Server-Produktionsbuild erfolgreich. Der bereits dokumentierte fachfremde PurpleKnight-Extractorfehler im Gesamtlauf bleibt unveraendert; keine Import-, API-, Persistenz- oder Schemaaenderung, Phase 7 bleibt abgeschlossen. | +| 2026-08-25 | Phase-7-Dashboard nach Nutzerkorrektur bereinigt: Die Directory-overview-Kachel verwendet keine violett-blaue Akzentkante mehr, sondern rundum die normale gemeinsame 1-px-Kachelkontur. In den Statuskacheln stehen Prozentwerte nur noch zentriert im Donut; ausserhalb bleiben die absoluten Werte fuer Deviation, Passed und Not Run sowie die fachliche Erlaeuterung des Compliance Score. Am freigegebenen Client Dummy wurden ausschliesslich Geometrie- und Elementzustaende verifiziert: Directory overview rundum `rgb(85, 91, 101)` bei 1 px, keine aeusseren Prozentwerte, Donutwerte weiterhin vorhanden. Sieben Dashboard-Regressionspruefungen, Local-only-Sicherheitscheck, Designcheck und vollstaendiger Client-/Server-Produktionsbuild erfolgreich. Der Gesamtlauf erreichte 748 bestandene und 8 uebersprungene Tests; ein fachfremder PurpleKnight-HTML-Extractor-Test bleibt wegen einer doppelten synthetischen Source-Table-ID rot und wird durch diese reine Dashboardaenderung nicht beruehrt. Keine Fachlogik-, API-, Persistenz- oder Schemaaenderung; Phase 7 bleibt abgeschlossen. | +| 2026-08-25 | Phase-7-Segmentabstand auf Nutzerwunsch vergroessert: Das gemeinsame `--segment-gap` verwendet jetzt 12 px statt 8 px und gilt damit konsistent fuer alle Kachelsegmente. Die Work-Matrix fuehrt denselben Wert in ihrer Spaltenberechnung und eine entsprechend angepasste virtuelle Zeilenhoehe, damit CSS-Layout und Scrollmathematik uebereinstimmen. Im laufenden, ausdruecklich freigegebenen Client Dummy wurden ausschliesslich Geometriesignale geprueft: horizontaler und vertikaler Abstand jeweils exakt 12 px, Kachelbreite weiterhin 320 px. Drei fokussierte Vertragsregressionen sowie der Gesamtlauf mit 748 bestandenen und 8 uebersprungenen optionalen PostgreSQL-Tests, Local-only-Sicherheitspruefung, Designcheck und vollstaendiger Client-/Server-Produktionsbuild erfolgreich. Keine Fachlogik-, API-, Persistenz- oder Schemaaenderung; Phase 7 bleibt abgeschlossen. | +| 2026-08-25 | Phase-7/12/13A-Reimportzielbindung fuer zusammengefuehrte historische Timeslots korrigiert: Der werkzeugspezifische Reimport verwendet jetzt die Assessment-ID des konkret zu ersetzenden ScanRuns statt pauschal der ersten Assessment-ID des kalendarisch gruppierten Timeslots. Dadurch bleibt die serverseitige fail-closed-Pruefung unveraendert wirksam, ohne gueltige Altimporte abzulehnen, deren vier Scannerlaeufe historisch in getrennten Assessments gespeichert und im Datahub zu einem Tag zusammengefuehrt werden. Zwei UI-Vertragsregressionen und neun HTTP-Reimporttests sind gruen. Am ausdruecklich freigegebenen Client Dummy wurde der Fehler mit dem unveraenderten PingCastle-Original reproduziert und nach der Korrektur bis zur sicheren, vorausgewaehlten Vorschau `Expected replacement source` verifiziert; die Vorschau wurde abgebrochen, kein Reimport abgeschlossen und keine Daten veraendert. Gesamtlauf 748 bestanden, 8 optionale PostgreSQL-Tests uebersprungen; Local-only-, Designpruefung und Client-/Server-Produktionsbuild erfolgreich. Keine API-, SQL-, Schema- oder Persistenzaenderung; Phasen 7, 12 und 13A bleiben abgeschlossen. | +| 2026-08-25 | Phase-13A-Scanner-HTML-Erweiterung umgesetzt: Neue versionierte Source Extractors lesen PurpleKnight-HTML aus `reportJSON` plus Kategorie-Indikatorzuweisungen und erzeugte Maester-Einzel- beziehungsweise Multi-Tenant-HTML-Berichte aus ihrem eingebetteten Ergebnis-JSON, ohne JavaScript auszufuehren. Originalwerte und Objektpfade bleiben erhalten; HTML-Inhalt wird nur fuer sichere Anzeigewerte in Klartext dekodiert. Script-only-Berichte gelten nach der Formatdekodierung als auswertbar, sobald ein registrierter Extractor FindingCandidates liefert. Synthetische Fixtures und vier End-to-End-Regressionen pruefen Profilwahl, Einzel-/Multi-Tenant-Extraktion, aktive Script-Inhalte, Feldabbildung und kanonische Persistenzprojektion. Der ausdruecklich bereitgestellte PurpleKnight-Dummy wurde nur ueber inhaltsfreie technische Signale erfolgreich gegen Profil und Extractor verifiziert; die bereitgestellte Maester-Datei ist ein Report-Template ohne `Tests` und wird folgerichtig nicht als Ergebnisbericht extrahiert. Gesamtlauf 748 bestanden, 8 optionale PostgreSQL-Tests uebersprungen; Local-only-Sicherheitspruefung, Designcheck und Client-/Server-Produktionsbuild erfolgreich. Keine API-, SQL-, Persistenz- oder Profilversionsaenderung; Phase 13A bleibt abgeschlossen. | +| 2026-08-25 | Phase-7-Typografiedichte auf Nutzerentscheidung gezielt teilzurueckgenommen: Inter, H1 56 px, H2 32 px, H3 18 px, H4 16 px, 20-px-Detailtitel und kontinuierlicher Lesetext mit 16 px bleiben unveraendert. Neu getrennte strukturierte Datenrollen setzen Tabellen-, Grid- und Raw-Data-Inhalte auf 14 px; Controls auf 13 px; Labels, Metadaten und Tabellenkoepfe auf 12 px; Badges auf 11 px. Allgemeine Tabellenzellen, Work Grid, Raw Data und Kompatibilitaetstokens verwenden die neuen Rollen, ohne Dashboard-, Importer-, API-, Persistenz- oder Schemaaenderung. Vier fokussierte Testdateien mit 10 Tests sowie der Gesamtlauf mit 744 bestandenen und 8 uebersprungenen optionalen PostgreSQL-Tests, Local-only-Sicherheitspruefung, Designcheck mit 0 Rohfarben und vollstaendiger Client-/Server-Produktionsbuild erfolgreich. Phase 7 bleibt abgeschlossen. | | 2026-08-24 | Phase-14-Containerverbindung korrigiert: Die Repository-Laufzeit uebernimmt `ASSESSOR_POSTGRES_HOST` in die PostgreSQL-Verbindungszeichenfolge, sodass der App-Container den Compose-Dienst `postgres` statt seines eigenen Loopbacks anspricht. `ASSESSOR_DATABASE_URL` behaelt Vorrang und `127.0.0.1` bleibt der lokale Standard. Docker-Hostname und lokaler Fallback sind synthetisch regressionsgeprueft; Gesamtlauf 735 bestanden, 8 optionale PostgreSQL-Tests uebersprungen, Local-only- und Designpruefung sowie Client-/Server-Produktionsbuild erfolgreich. Keine Schema- oder Datenmigration; Phase 14 bleibt offen. | | 2026-08-24 | Phase-7-Segment-/Kachelgrammatik nach Nutzerreferenz anwendungsweit umgesetzt und als Projektvorgabe verankert: gemeinsame Segment- und Kacheltokens fuer Flaeche, Kontur, Radius, Inset, Gap, Schatten, Auswahl und Breiten; flache Gruppencontainer; gleichartige Inhalts-, Aktions- und Hinzufuegekacheln; Statusfarben nur als Akzent; unvollstaendige Zeilen bleiben unstretched. Datahub, Dashboard, Sidebar, Work-TileGrid, DB Structure, Policy Analysis und statische Pathfinder-Karten verwenden den Vertrag. Die verbindliche Nutzerregel verbietet abgeschnittene, geklemmte, ellipsierte oder verborgene Titel, Werte, Labels, Zusatztexte und Aktionen. Dashboardstatuskarten wurden auf 290 beziehungsweise 210 px abgestimmt; Anzahl und Prozentwert stehen getrennt, sodass `Compliance` und Werte wie `453` vollstaendig bleiben. Das Donut-Raster nutzt auf Desktop sechs Spalten und die Matrix verteilt ihre feste Spaltenzahl ueber die volle Segmentbreite. Bei Platzmangel wird Inhalt neu angeordnet oder die Kachel verbreitert beziehungsweise responsiv umgebrochen. Sechzehn fokussierte Layout-/Donuttests und der Gesamtlauf mit 736 bestandenen sowie 8 uebersprungenen optionalen PostgreSQL-Tests, Local-only- und Designpruefung mit 0 Rohfarben sowie Client-/Server-Produktionsbuild sind erfolgreich. Keine Fachlogik-, API-, Persistenz- oder Schemaaenderung; Phase 7 bleibt abgeschlossen. | | 2026-08-24 | Phase-7-Finding-Titelhierarchie nach visueller Nutzerkorrektur nachgeschaerft: Trefferlistentitel bleiben 16 px, verwenden aber Medium 500 statt Semibold; der geoeffnete Finding-Titel verwendet eine neue zentrale 20-px-Detailtitelrolle mit Semibold. Finding-Abschnitt 18 px, Matrixkacheln 16 px und die 16-px-Untergrenze fuer Inhalt bleiben unveraendert. Titel brechen nur an Wortgrenzen. Drei fokussierte Typografieregressionen sowie der Gesamtlauf mit 736 bestandenen und 8 uebersprungenen Tests, Local-only-/Designpruefung und Client-/Server-Produktionsbuild erfolgreich. Keine Fachlogik-, API-, Persistenz- oder Schemaaenderung; Phase 7 bleibt abgeschlossen. | @@ -2078,4 +2108,3 @@ Diese Entscheidungen werden erst getroffen, wenn die jeweilige Phase ansteht ode | 2026-07-17 | Phase 1 abgeschlossen: synthetische, quellengestützte Fixtures für PingCastle, CIS-CAT und Maester ergänzt und über den generischen Importweg automatisiert geprüft; 21 Testdateien mit 51 Tests, Local-only-Prüfung und Produktionsbuild erfolgreich. | | 2026-07-17 | Phase 1 begonnen: Format- und Fehlerfalltests erweitert, generische Fixture und Testbaseline ergänzt, Gesamtworkflow und Belastungsfälle automatisiert, leere Importe abgewiesen und englische Titelzuordnung korrigiert; Phase bleibt bis zum vollständigen Quellenkorpus in Arbeit. | | 2026-07-17 | Ersten versionierten Umsetzungsplan mit Zielarchitektur, Phasen, Abnahmekriterien, Entscheidungen und Risiken angelegt. | - diff --git a/fixtures/README.md b/fixtures/README.md index bbee419..95bd035 100644 --- a/fixtures/README.md +++ b/fixtures/README.md @@ -30,4 +30,14 @@ All files below are deliberately small, synthetic, and free of customer or compa - https://github.com/maester365/maester/blob/main/powershell/public/core/Convert-MtResultsToFlatObject.ps1 - https://maester.dev/docs/commands/Invoke-Maester/ +- File: `maester/test-results.synthetic.html` +- Models the inert JSON object embedded by the official single-file Maester HTML report generator; it contains synthetic test values only. +- Sources: + - https://github.com/maester365/maester/blob/main/powershell/public/Get-MtHtmlReport.ps1 + - https://github.com/maester365/maester/blob/main/powershell/public/core/ConvertTo-MtMaesterResult.ps1 + - https://maester.dev/docs/commands/Get-MtHtmlReport/ + +- File: `purple-knight/security-assessment.synthetic.html` +- Models the script-embedded `window.reportJSON` and category indicator assignments observed in a locally supplied PurpleKnight dummy report. No source values were copied into this fixture. + When an anonymized real export can legally be added, it should supplement these structural fixtures and must be reviewed for tenant names, domains, accounts, identifiers, evidence, comments, and embedded metadata first. diff --git a/fixtures/maester/test-results.synthetic.html b/fixtures/maester/test-results.synthetic.html new file mode 100644 index 0000000..b0a017a --- /dev/null +++ b/fixtures/maester/test-results.synthetic.html @@ -0,0 +1,65 @@ + + +Maester synthetic report + +
+ + + + diff --git a/fixtures/purple-knight/security-assessment.synthetic.html b/fixtures/purple-knight/security-assessment.synthetic.html new file mode 100644 index 0000000..2fcef0c --- /dev/null +++ b/fixtures/purple-knight/security-assessment.synthetic.html @@ -0,0 +1,51 @@ + + +Purple Knight synthetic report + +
+ + + + + diff --git a/src/app/App.tsx b/src/app/App.tsx index 43c060e..f8b869a 100644 --- a/src/app/App.tsx +++ b/src/app/App.tsx @@ -78,7 +78,10 @@ export function App() { setDataHubDetailClientName(isDetailView ? clientName : undefined); }, []); const connectionIndicator =