25 KiB
andreknie.de Findings Remediation Plan
Status: Umsetzungsanleitung, noch nicht abgearbeitet
Zielgruppe: Nachfolgendes Codex-Modell, insbesondere Luna
Letzter Review: 2026-07-28
1. Auftrag und Arbeitsgrenzen
Dieser Plan beschreibt die schrittweise Behebung der Findings aus dem vollstaendigen Review aller Seiten, Komponenten und relevanten Backend-Flows von andreknie.de.
Wichtig:
- Nicht alle Arbeitspakete auf einmal umsetzen.
- Zu Beginn eines neuen Tasks genau ein vom Benutzer ausgewaehltes Arbeitspaket bearbeiten.
- Vor der Implementierung den aktuellen Stand erneut lesen und die Findings verifizieren.
- Keine unaufgeforderten Refactorings ausserhalb des ausgewaehlten Pakets.
- Bestehende Benutzer-Aenderungen im Worktree nicht zuruecksetzen.
- Keine echten Kontakt-, Newsletter- oder Speaker-CV-Anfragen in Produktion absenden.
- Personenbezogene Produktionsdaten niemals in Logs, Antworten, Screenshots, Commits oder Test-Fixtures uebernehmen.
2. Verbindlicher Repository-Kontext
2.1 Source of Truth
Arbeitsverzeichnis:
C:\Coding\Orchestrator
Component:
C:\Coding\Orchestrator\privat\CV\andreknie.de
Hub:
https://git.d-hive.de/ankn/Orchestrator.git
Foederiertes Spoke-Repository:
https://git.d-hive.de/dHive/andreknie.de.git
Nicht verwenden:
- Das alte GitHub-Repository. Es ist veraltet.
- Eine separate lokale Clone-Kopie von andreknie.de.
- Direkte Aenderungen ausserhalb des Orchestrator-Monorepos.
2.2 Vor jeder Arbeit lesen
Vom Orchestrator-Root:
AGENTS.md
.agents/AGENTS.md
.kiro/steering/*.md
privat/CV/andreknie.de/README.md
privat/CV/andreknie.de/DEPLOYMENT-PLAN.md
privat/CV/andreknie.de/.gitea/workflows/deploy.yml
privat/CV/andreknie.de/FINDINGS-REMEDIATION-PLAN.md
Dabei haben die aktuellen System- und Benutzeranweisungen Vorrang. Fuer
versionierte Aenderungen gilt der in den Repository-Regeln beschriebene
Feature-Branch-, Commit-, Push- und Pull-/Merge-Request-Ablauf. Nicht direkt auf
master oder main pushen.
2.3 Gitea und Foederation
- Gitea wird ueber
teamit Browser-Authentifizierung verwendet. - Lokales Tool:
C:\Coding\tools\tea\tea.exe
- Gitea-Login:
dhive - Der Runner arbeitet im foederierten Spoke.
- Deployment erst nach erfolgreichem Review und Merge.
- Vor einem Deployment die aktuellen Orchestrator-/Federationsanleitungen erneut lesen. Keine eigene Synchronisationsvariante erfinden.
- Workflow-Status nach dem Merge im Spoke mit
tea actions runspruefen. - Live-Deployment erst als erfolgreich melden, wenn der Gitea-Run erfolgreich
ist und die konkrete Aenderung auf
https://andreknie.deverifiziert wurde.
3. Technischer Ausgangspunkt
Stack:
- React 19
- React Router 7
- Vite 8
- Express 5
- Caddy
- Datei-basiertes CMS aus Markdown und YAML
- Gitea Actions Deployment
Relevante Befehle im Component-Verzeichnis:
& 'C:\Users\knie\.cache\codex-runtimes\codex-primary-runtime\dependencies\bin\fallback\pnpm.cmd' run build
& 'C:\Users\knie\.cache\codex-runtimes\codex-primary-runtime\dependencies\bin\fallback\pnpm.cmd' run test
.\node_modules\.bin\eslint.CMD src server plugins vite.config.js
Hinweise:
- Der volle Lint ueber das gesamte Repository erfasst alte generierte Dateien
unter
site/assetsund ist deshalb fuer gezielte Source-Pruefungen nicht aussagekraeftig. - Fuer UI-Tests den lokalen Vite-Server starten und Desktop sowie Mobil mit Browser-Automation pruefen.
- Relevante Viewports:
- Desktop: 1440 x 900
- Mobile: 375 x 844
- Mobile: 390 x 844
- Mobile: 430 x 932
- Nach Tests alle selbst gestarteten lokalen Server beenden.
4. Allgemeiner Ablauf fuer jedes Arbeitspaket
- Repository-Regeln und diesen Plan lesen.
git status --short --branchim Orchestrator pruefen.- Bei fremden Aenderungen nicht zuruecksetzen; Ueberschneidungen sorgfaeltig analysieren.
- Aktuellen Hub-Stand per Fast-Forward aktualisieren.
- Einen aussagekraeftigen Feature-Branch erstellen.
- Nur die Dateien des ausgewaehlten Arbeitspakets bearbeiten.
- Relevante Unit-, Integrations- und Browser-Tests ausfuehren.
- Build und gezielten Source-Lint ausfuehren.
- Diff auf Scope, Secrets, generierte Artefakte und unbeabsichtigte Content-Aenderungen pruefen.
- Conventional Commit erstellen.
- Branch zum Gitea-Hub pushen und Pull-/Merge-Request erstellen.
- PR/MR pruefen; nicht ohne erfolgreiche Quality Gates mergen.
- Nach Freigabe mergen und den dokumentierten Hub-and-Spoke- Federationsablauf ausfuehren.
- Gitea-Deployment beobachten.
- Live nur die betroffenen Funktionen read-only pruefen. Keine echten Formulare absenden.
5. Prioritaet 1: Datenschutz und Ausfallsicherheit
Branch-Vorschlag:
fix/andreknie-data-lifecycle
5.1 Token-Lebenszyklus korrigieren
Betroffene Dateien:
server/services/confirmationToken.js
server/routes/contact.js
server/routes/talk-request.js
server/routes/newsletter.js
src/pages/Datenschutz.jsx
Aktuelles Problem:
- Bestaetigte Tokens bleiben durch die Cleanup-Bedingung dauerhaft erhalten.
- Die Token-Datei enthaelt personenbezogene Formulardaten.
- Bestaetigte Tokens werden vor erfolgreichem Abschluss des Folgeprozesses verbraucht.
Umsetzung:
- Token-Zustaende explizit modellieren, mindestens
pendingundprocessing. - Eine atomare Funktion einfuehren, die einen gueltigen Token fuer die Verarbeitung reserviert, ihn aber noch nicht endgueltig entfernt.
- Nach erfolgreichem Folgeprozess den Token vollstaendig aus der Datei entfernen.
- Bei einem Folgefehler den Token wieder auf
pendingsetzen oder eine kontrollierte Wiederholung erlauben. - Abgelaufene Tokens unabhaengig vom bisherigen Status entfernen.
- Bestaetigte personenbezogene Payloads nicht als Historie behalten.
- Gleichzeitige Aufrufe weiterhin durch den vorhandenen Mutex schuetzen.
- Keine Tokenwerte oder Payloads loggen.
- Vor einer Bereinigung bestehender Produktionsdaten eine Sicherung nach dem vorhandenen Betriebs-/Backup-Verfahren vorsehen. Keine Produktionsdateien aus dem lokalen Task heraus manipulieren.
Vorgesehene Tests:
- Unit: Ein neuer Token ist vor Ablauf gueltig.
- Unit: Ein abgelaufener Token wird abgelehnt und entfernt.
- Unit: Ein erfolgreich verarbeiteter Token wird entfernt.
- Unit: Ein fehlgeschlagener Folgeprozess laesst einen kontrollierten Retry zu.
- Unit: Zwei parallele Bestaetigungen erzeugen genau einen Folgeprozess.
- Unit: Cleanup entfernt abgelaufene pending/processing-Datensaetze.
- Unit: Cleanup behaelt keine erfolgreich verarbeiteten personenbezogenen Payloads.
- Integration Kontakt: Erfolgreicher Mailversand fuehrt zu Success-Redirect.
- Integration Kontakt: Mailfehler fuehrt nicht zum endgueltigen Tokenverlust.
- Integration Newsletter: Wiederholte Bestaetigung erzeugt keinen doppelten Subscriber.
- Integration Talk Request: Gleiches Verhalten wie beim Kontaktformular.
Akzeptanzkriterien:
- Kein erfolgreich verarbeiteter Token verbleibt in
pending-tokens.json. - Ein temporaerer Mailfehler vernichtet keine Anfrage.
- Ein Token kann nicht zwei Stakeholder-Mails oder zwei Newsletter-Eintraege erzeugen.
- Tests enthalten nur synthetische Daten.
5.2 SMTP-Konfiguration und Fehlerverhalten haerten
Betroffene Dateien:
server/services/mailer.js
server/index.js
server/routes/contact.js
server/routes/talk-request.js
server/routes/newsletter.js
server/routes/speaker-cv.js
Umsetzung:
- Produktionsbetrieb ohne notwendige SMTP-Konfiguration nicht stillschweigend als erfolgreichen Versand behandeln.
- Konfigurationspruefung beim Serverstart oder einen eindeutigen
mailerReady-Status einfuehren. - Healthcheck so erweitern, dass die Mail-Konfiguration ohne Ausgabe von Secrets als bereit/nicht bereit erkennbar ist.
- Nutzerfreundliche Fehlerantwort liefern, wenn kein Versand moeglich ist.
- Serverlogs auf technische IDs und Fehlertypen begrenzen.
- Speaker-CV-Lead nur gemaess klarer Reihenfolge speichern und versenden; Wiederholungen duerfen keine unkontrollierten Duplikate erzeugen.
Vorgesehene Tests:
- Unit: Mailer meldet fehlende Konfiguration als nicht bereit.
- Unit: Keine SMTP-Zugangsdaten erscheinen in Fehlern oder Logs.
- Integration: Route liefert bei fehlendem Mailer keinen falschen Erfolg.
- Integration: SMTP-Fehler wird mit passendem HTTP-Status behandelt.
- Integration: Erfolgsfall bleibt unveraendert.
- Integration Speaker CV: Fehlendes PDF und Mailfehler werden getrennt behandelt.
Akzeptanzkriterien:
- Keine UI-Erfolgsmeldung, wenn nachweislich keine Mail ausgeloest werden konnte.
- Healthcheck offenbart keine Secrets.
- Bestehender erfolgreicher Produktionsflow bleibt kompatibel.
5.3 Datenschutztext mit Implementierung synchronisieren
Betroffene Datei:
src/pages/Datenschutz.jsx
Umsetzung:
- Erst nach Festlegung und Implementierung der Speicherfristen anpassen.
- Kontakt, Vortragsanfrage, Newsletter, Ressourcen und Speaker CV getrennt beschreiben.
- Aufbewahrungsdauer beziehungsweise Loeschkriterium konkret benennen.
- Widerrufs- oder Abmeldeweg fuer Newsletter eindeutig nennen.
- Keine rechtlichen Behauptungen erfinden; bei fachlicher Unsicherheit Text als pruefbeduerftig kennzeichnen und den Benutzer um Freigabe bitten.
Vorgesehene Tests:
- Browser: Datenschutzseite bei Desktop und Mobile ohne Layoutfehler.
- Content-Review: Jede Aussage entspricht dem implementierten Datenfluss.
- Linktest: Alle genannten Mailadressen und internen Links sind korrekt.
6. Prioritaet 2: Mobile Nutzbarkeit und Ressourcen
Branch-Vorschlag:
fix/andreknie-mobile-navigation
6.1 Bottom-Dock mobil korrigieren
Betroffene Dateien:
src/components/BottomDock.jsx
src/components/BottomDock.css
src/index.css
src/pages/Home.css
Umsetzung:
- Mobile Informationsarchitektur festlegen:
- bevorzugt weniger primaere Dock-Eintraege plus Menue, oder
- ein horizontal scrollbares Dock mit klarer Bedienbarkeit.
- Dock-Hoehe als CSS-Variable definieren.
- Global ausreichend unteren Inhaltsabstand reservieren.
env(safe-area-inset-bottom)beruecksichtigen.- Touch-Ziele mindestens 44 x 44 CSS-Pixel gross halten.
- Primaere Hero-CTAs duerfen zu keinem Zeitpunkt vom Dock verdeckt werden.
- Footer, Kontaktformular, About-Profil und lange Detailseiten pruefen.
- Desktop-Dock nicht unbeabsichtigt veraendern.
Vorgesehene Tests:
- Browser 375 x 844: Hero-Buttons vollstaendig sichtbar und klickbar.
- Browser 390 x 844: Kein Text oder Formularfeld durch Dock verdeckt.
- Browser 430 x 932: Safe-Area und Footer funktionieren.
- Browser 1440 x 900: Desktop-Dock unveraendert.
- DOM-Messung: Dock liegt innerhalb des Viewports.
- DOM-Messung: Dokument besitzt keinen horizontalen Overflow.
- Tastatur: Jeder sichtbare Dock-Eintrag ist erreichbar.
- Screenshot-Vergleich fuer Home, About, Contact und Article Detail.
Akzeptanzkriterien:
- Kein Dock-Overlay auf CTAs, Formularen oder Footer-Inhalten.
- Kein horizontaler Seitenoverflow.
- Mobile Touch-Ziele bleiben ergonomisch.
6.2 Ressourcen-Flow entscheiden und umsetzen
Betroffene Dateien:
src/pages/Resources.jsx
src/hooks/useFormSubmit.js
src/utils/validation.js
server/routes/resource-download.js
content/resources/*
src/pages/Datenschutz.jsx
Vor Implementierung Benutzerentscheidung einholen:
- Variante A: Freier direkter Download ohne Lead-Erfassung.
- Variante B: Download nach erfolgreicher Lead-Erfassung.
- Variante C: Ressourcen-Seite bis zur Befuellung ausblenden.
Fuer Variante B:
- Formular mit Name, E-Mail, Unternehmen, Resource-ID und Honeypot erstellen.
- Vorhandene Validierung verwenden statt duplizieren.
- API-Antwort auswerten und nur die serverseitig gelieferte Download-URL verwenden.
- Lade-, Validierungs-, Fehler- und Erfolgszustand implementieren.
- Resource-ID serverseitig gegen eine Allowlist vorhandener Ressourcen validieren, nicht nur gegen ein Zeichenmuster.
- Datenschutztext und Speicherfristen anpassen.
Vorgesehene Tests:
- Unit: Client- und Servervalidierung fuer alle Pflichtfelder.
- Unit: Unbekannte Resource-ID wird abgelehnt.
- Integration: Gueltige Anfrage liefert erwartete lokale Download-URL.
- Integration: Honeypot erzeugt keine Lead-Datei.
- Integration: Fehler beim Speichern liefert keinen Download-Erfolg.
- Browser: Download-Button besitzt eine echte Funktion.
- Browser: Fehler- und Ladezustand sind sichtbar und zugaenglich.
- Security: Keine Pfadmanipulation ueber Resource-ID.
Akzeptanzkriterien:
- Kein sichtbarer Button ohne Funktion.
- Download und Datenschutzerklaerung entsprechen derselben gewaehlten Variante.
7. Prioritaet 3: SEO und Dokumentstruktur
Branch-Vorschlag:
fix/andreknie-seo
7.1 SEOHead normalisieren
Betroffene Dateien:
index.html
src/components/SEOHead.jsx
src/pages/*.jsx
public/images/*
Umsetzung:
- API von
SEOHeadeindeutig machen:titleist immer ohne Brand-Suffix. - Brand-Suffix zentral genau einmal hinzufuegen.
- Statische Metadaten in
index.htmlals kompatiblen Fallback gestalten, sodass React Helmet keine konkurrierenden doppelten Tags erzeugt. - Canonical-Link ergaenzen.
- Open-Graph- und Twitter-Metadaten vervollstaendigen.
- Ein tatsaechlich vorhandenes OG-Bild bereitstellen.
- Jede Route mit individuellem Titel, Description und Canonical versehen.
- Artikel und Kniepunkte aus ihren Content-Metadaten versorgen.
- 404-Seite mit
noindex,followauszeichnen.
Vorgesehene Tests:
- Unit fuer
SEOHead: Brand erscheint genau einmal. - Unit: Relative und absolute Bild-URLs werden korrekt behandelt.
- Browser je Route: genau ein aktiver Titel.
- Browser je Route: genau eine Description.
- Browser je Route: genau ein Canonical-Link.
- Browser Artikel: Titel und Description stammen aus dem Artikel.
- Browser Kniepunkt: Titel, Description, URL und Bild stimmen mit der Ausgabe ueberein.
- Asset-Test: OG-Bild liefert lokal und live HTTP 200.
- Build: Keine Helmet- oder React-Warnungen.
Akzeptanzkriterien:
- Kein Titel enthaelt
Dr. Andre Kniedoppelt. - Keine konkurrierenden Description-Tags.
- Alle 15 Routen haben passende Metadaten.
7.2 Ueberschriften und Landmarks korrigieren
Betroffene Dateien:
src/pages/Articles.jsx
src/pages/ArticleSingle.jsx
src/pages/KniepunktIssue.jsx
plugins/vite-plugin-content.js
content/kniepunkt/*
Umsetzung:
- Artikeluebersicht und Artikeldetail mit einem
main-Landmark versehen. - Kniepunkt-Titel nur einmal als
h1rendern. - Bevorzugt Markdown-Content beim Build normalisieren oder den ersten redundanten H1 kontrolliert entfernen.
- Keine pauschale Regex-Manipulation verwenden, wenn ein Markdown-AST oder
marked-Hook die Struktur sicherer bearbeiten kann. - Ueberschriftenhierarchie in allen Detailseiten pruefen.
Vorgesehene Tests:
- Browser: Jede Route besitzt genau ein
main. - Browser: Jede normale Seite besitzt genau ein
h1. - Unit Content-Plugin: Markdown mit und ohne initiales H1 wird korrekt gerendert.
- Regression: Bestehende Artikelkoerper verlieren keine Inhalte.
8. Prioritaet 4: Barrierefreiheit
Branch-Vorschlag:
fix/andreknie-accessibility
8.1 Navigation und Formulare
Betroffene Dateien:
src/components/Navigation.jsx
src/components/BottomDock.jsx
src/pages/Contact.jsx
src/components/NewsletterSignup.jsx
src/components/SpeakerCvRequest.jsx
Umsetzung:
- Jedem Dock-Link einen zugreifbaren Namen geben.
- Aktive Route mit
aria-current="page"markieren, auch auf Detailrouten. - Hamburger um
aria-expandedundaria-controlsergaenzen. - Label zwischen
Menue oeffnenundMenue schliessenwechseln. - Menue per Escape schliessbar machen.
- Formularlabels mit eindeutigen
id/htmlForverbinden. - Fehlertexte mit
aria-describedbyverknuepfen. - Serverfehler und Erfolgsmeldungen ueber
aria-livebekanntgeben. - Honeypots mit
hiddenoder einer gleichwertigen robusten Loesung vollstaendig aus Accessibility- und Tab-Reihenfolge entfernen. - Sichtbare Fokusdarstellung fuer Suchfelder und Buttons sicherstellen.
Vorgesehene Tests:
- Component-Test Navigation:
aria-expandedfolgt dem Menuezustand. - Component-Test Navigation: Escape schliesst das Menue.
- Component-Test BottomDock: Jeder Link hat einen Namen.
- Component-Test Forms: Labels sind programmatisch zugeordnet.
- Component-Test Forms: Fehler referenzieren das richtige Feld.
- Tastaturtest: Komplette Navigation ohne Maus.
- Browser-Snapshot: Honeypot erscheint nicht im Accessibility-Baum.
- Browser-Snapshot: Dock-Links besitzen eindeutige Namen.
8.2 Testimonials und Logos
Betroffene Dateien:
src/components/TestimonialSlider.jsx
src/components/TestimonialSlider.css
src/components/LogoMarquee.jsx
src/components/LogoMarquee.css
Umsetzung:
- Nur einen logischen Satz Testimonials fuer Assistenztechnologien exponieren.
- Technische Loop-Kopien mit
aria-hidden="true"ausblenden. - Sichtbaren aktiven Eintrag beziehungsweise Carousel-Position semantisch bekanntgeben.
- Pfeile und Scrollbereich per Tastatur bedienbar machen.
- Logo-Duplikate fuer Screenreader ausblenden.
- Animationen bei Fokus/Hover pausierbar machen.
- Bestehendes visuelles Endlosverhalten und Zentrierung erhalten.
Vorgesehene Tests:
- Component-Test: Bei drei Testimonials werden fuer Screenreader nur drei logische Inhalte exponiert.
- Browser-Snapshot: Keine 27 vorgelesenen Testimonials.
- Browser-Snapshot: Keine dreifach vorgelesenen Logos.
- Desktop: zehnmal rechts und zehnmal links ohne sichtbaren Sprung.
- Mobile: Swipe bleibt funktionsfaehig.
- Tastatur: Vor/zurueck funktioniert und Fokus bleibt sichtbar.
8.3 Reduced Motion und Canvas-Lebenszyklus
Betroffene Dateien:
src/index.css
src/pages/Home.css
src/components/BottomDock.css
src/components/LogoMarquee.css
src/components/StatsCube.css
src/components/BackgroundPattern.jsx
src/components/DotCloudIcon.jsx
Umsetzung:
- Zentrale
prefers-reduced-motion: reduce-Regeln ergaenzen. - Endlos-CSS-Animationen stoppen oder auf einen statischen Zustand setzen.
- Canvas-Animationen bei Reduce Motion nicht starten.
- Canvas-Animationen pausieren, wenn der Tab verborgen ist.
- Optional Intersection Observer verwenden, damit nicht sichtbare Canvas- Komponenten keine Frames berechnen.
getComputedStylenicht in jedem Animationsframe erneut lesen.- Debug-Logs aus
DotCloudIconentfernen.
Vorgesehene Tests:
- Browser mit Reduce Motion: keine Endlosanimationen.
- Browser normal: Design und Interaktion bleiben erhalten.
- Component-Test:
requestAnimationFramewird beim Unmount abgebrochen. - Component-Test: Reduce Motion startet keinen Animationsloop.
- Console-Test: Keine DotCloud-Debugausgaben.
9. Prioritaet 5: Performance, Dependencies und Deployment
Branch-Vorschlag:
perf/andreknie-initial-load
9.1 Initialen Bundle verkleinern
Betroffene Dateien:
src/App.jsx
src/hooks/useContent.js
plugins/vite-plugin-content.js
vite.config.js
Umsetzung in zwei getrennten Schritten:
- Routen mit
React.lazyundSuspensecode-splitten. - Danach Content-Auslieferung umbauen:
- Listenmetadaten von vollstaendigen HTML-Bodies trennen.
- Detailinhalte nur fuer die aufgerufene Detailseite laden.
- Build-Zeit-Generierung beibehalten; kein unnoetiges neues CMS einfuehren.
- Einen stabilen Ladezustand ohne Layoutsprung bereitstellen.
- Chunk-Grenzwert als CI-Pruefung dokumentieren.
Vorgesehene Tests:
- Build: mehrere Route-Chunks statt eines einzigen App-Chunks.
- Bundle-Messung vor/nachher dokumentieren.
- Zielwert initiales JS: deutlich unter dem aktuellen Build von ca. 805 KB unkomprimiert.
- Browser: Direktaufruf jeder Route funktioniert.
- Browser: Reload einer Detailroute funktioniert hinter Caddy-Fallback.
- Browser: Keine leeren Seiten waehrend Lazy Loading.
- Regression: Alle 62 Artikel, 48 Kniepunkte und 19 Podcast-Eintraege bleiben erreichbar.
9.2 Dependency-Findings bearbeiten
Betroffene Dateien:
package.json
package-lock.json
Umsetzung:
npm audit --omit=deverneut ausfuehren.- React-Router-Advisory auf Anwendbarkeit pruefen.
- Keine automatische Downgrade-Empfehlung ungeprueft anwenden.
- Auf eine nachweislich gefixte kompatible Version aktualisieren.
- Router-Verhalten aller Routen testen.
- Audit als CI-Schritt einbauen, wenn das Repository dies ohne instabile Netzwerkfehler erlaubt.
Vorgesehene Tests:
npm audit --omit=dev- Build und Source-Lint.
- Direktnavigation und Client-Navigation aller Routen.
- Browser Back/Forward.
- 404 und Detailrouten.
9.3 Deployment-Artefakte bereinigen
Betroffene Datei:
.gitea/workflows/deploy.yml
Aktuelles Problem:
- Neue
dist/assetswerden nachsite/assetskopiert. - Alte gehashte Dateien werden nicht entfernt.
- Aktueller Bestand beim Review: 29 Dateien, ca. 28.5 MB.
Umsetzung:
- Neues Build zuerst in ein separates Release-Verzeichnis kopieren.
- Vollstaendigkeit des Releases pruefen.
siteatomar oder kontrolliert auf den neuen Stand umschalten.- Rollback ueber ein klar begrenztes vorheriges Release ermoeglichen.
- Nicht mit einer ungesicherten rekursiven Loeschung auf einem berechneten Pfad arbeiten.
- Caddy-Konfiguration und Umami-Dateien nicht versehentlich entfernen.
- Alte Releases nach einer definierten Anzahl kontrolliert bereinigen.
Vorgesehene Tests:
- Workflow-Test auf Feature-Branch ohne Produktionsumschaltung, falls Infrastruktur dies unterstuetzt.
- Build-Artefakt enthaelt
index.html, aktuelle JS-/CSS-Dateien und Assets. - Keine Referenz in
index.htmlzeigt auf eine geloeschte Datei. - Rollback-Test auf das unmittelbar vorherige Release.
- Nach Deployment: Startseite und eine Detailroute liefern HTTP 200.
- Live: HTML referenziert genau den neuen Bundle-Hash.
- Live: Umami-Script und CSP bleiben erhalten.
10. Abschluss-Quality-Gates je Paket
Pflicht:
& 'C:\Users\knie\.cache\codex-runtimes\codex-primary-runtime\dependencies\bin\fallback\pnpm.cmd' run build
& 'C:\Users\knie\.cache\codex-runtimes\codex-primary-runtime\dependencies\bin\fallback\pnpm.cmd' run test
.\node_modules\.bin\eslint.CMD src server plugins vite.config.js
git diff --check
git status --short
Zusaetzlich je nach Paket:
- Backend: Integrations-Tests der betroffenen Routes.
- UI: Desktop- und Mobile-Browserpruefung.
- Accessibility: DOM-/Accessibility-Snapshot und Tastaturpruefung.
- SEO: Anzahl und Inhalt aller Head-Tags kontrollieren.
- Performance: Buildgroessen vor/nachher festhalten.
- Deployment: Gitea-Run und Live-Bundle verifizieren.
Ein Paket ist erst fertig, wenn:
- alle vorgesehenen Tests gruen sind,
- keine unerklaerten Warnungen neu hinzugekommen sind,
- der Diff auf das Paket begrenzt ist,
- PR/MR erstellt und geprueft wurde,
- bei beauftragtem Deployment der Gitea-Run erfolgreich ist,
- die konkrete Aenderung live verifiziert wurde.
11. Empfohlene Paket-Reihenfolge
- Datenschutz und Ausfallsicherheit
- Mobiles Bottom-Dock
- SEO und Dokumentstruktur
- Barrierefreiheit
- Ressourcen-Flow nach Benutzerentscheidung
- Performance und Dependencies
- Deployment-Artefakte
Die Pakete 1 und 2 haben den groessten unmittelbaren Nutzen. SEO und Barrierefreiheit koennen danach unabhaengig bearbeitet werden. Die Content-/Bundle-Architektur sollte erst angefasst werden, wenn die funktionalen Flows stabil und ausreichend getestet sind.
12. Startprompt fuer einen neuen Codex-Chat
Der Benutzer ersetzt <ARBEITSPAKET> durch genau eines der oben beschriebenen
Pakete.
Arbeite im Orchestrator-Monorepo unter C:\Coding\Orchestrator an andreknie.de.
Die Source of Truth ist ausschliesslich
C:\Coding\Orchestrator\privat\CV\andreknie.de. Verwende nicht das alte
GitHub-Repository und keine separate Clone-Kopie.
Lies zuerst vollstaendig:
- C:\Coding\Orchestrator\AGENTS.md
- C:\Coding\Orchestrator\.agents\AGENTS.md
- die relevanten Dateien unter C:\Coding\Orchestrator\.kiro\steering\
- C:\Coding\Orchestrator\privat\CV\andreknie.de\README.md
- C:\Coding\Orchestrator\privat\CV\andreknie.de\DEPLOYMENT-PLAN.md
- C:\Coding\Orchestrator\privat\CV\andreknie.de\.gitea\workflows\deploy.yml
- C:\Coding\Orchestrator\privat\CV\andreknie.de\FINDINGS-REMEDIATION-PLAN.md
Setze ausschliesslich dieses Arbeitspaket aus dem Plan um:
<ARBEITSPAKET>
Vorgehen:
1. Verifiziere den aktuellen Stand und das Finding.
2. Erstelle einen Feature-Branch nach den Repository-Regeln.
3. Implementiere nur den Scope des ausgewaehlten Pakets.
4. Fuehre alle im Plan vorgesehenen Tests sowie Build, Tests und gezielten
Source-Lint aus.
5. Pruefe Desktop und Mobile, sofern UI betroffen ist.
6. Zeige mir danach Findings, Aenderungen, Testergebnisse und verbleibende
Risiken.
7. Nutze Gitea und die dokumentierte Hub-and-Spoke-Foederation. Nicht direkt
auf master/main pushen.
8. Erstelle einen PR/MR, aber merge und deploye erst, wenn ich das in diesem
Chat ausdruecklich freigebe.
Schuetze personenbezogene Daten und Secrets. Sende keine echten Formulare in
der Live-Umgebung ab. Erfinde keine Deployment- oder Federationsschritte,
sondern halte dich an die vorhandenen Anleitungen.