CRLF fuer routerPageActions.ts zurueck — die Normalisierung war zu breit
Dritter Anlauf an der Zeilenenden-Frage, und diesmal GEMESSEN statt pauschal:
routerPageActions.ts CRLF <- war so, ist wieder so die fuenf *.test.ts LF <- waren so, sind wieder so
Der Vorgaenger 80a05c4 hat ALLE SECHS auf LF gedreht. Fuer die fuenf Testdateien war das richtig (mein erster Commit hatte ihnen CRLF eingeschleppt), fuer routerPageActions.ts falsch — die Datei war im Repositorium schon immer CRLF, und die "Normalisierung" war dort eine 7081-Zeilen-Aenderung, die niemand wollte.
⚠ Lehre: "Zeilenenden normalisieren" ist KEINE pauschale Handlung. Ohne .gitattributes gibt es keine Repo-weite Politik; jede Datei traegt ihren eigenen Stand, und der ist am URSPRUNGS-Commit zu messen (git show <ref>:<datei>), nicht am Nachbarn zu raten.
Der Netto-Diff dieser drei Commits gegen d43a167 ist jetzt das, was er von Anfang an haette sein sollen: 241 Zeilen dazu, 19 weg, in sechs Dateien.
CI-Tor npm run test:unit: 2398/2398, 100 Reihen.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Fixblocks
Zeilenenden zurueck auf LF + die richtige Beschreibung zum Vorgaenger
ZWEI Fehler am Vorgaenger-Commit b8656bf, beide meine:
1. DIE COMMIT-NACHRICHT IST FREMD. Sie lautet "fix(import): Menue kuriert ueber ALLE Seiten der Website" und beschreibt eine ganz andere Arbeit. Ursache: der erste Commit-Versuch wurde vom Fundament-Precheck-Hook geblockt — DER GANZE Bash-Aufruf, also auch das `cat > /tmp/cmsmsg.txt` davor. Der zweite Versuch las dieselbe Datei, die inzwischen einen fremden Stand trug. ⚠ Lehre: nach einem Hook-Block ist NICHTS aus dem Aufruf gelaufen — auch nicht die Vorbereitung. Wer danach nur den letzten Befehl wiederholt, baut auf einem Zustand auf, den er nicht hergestellt hat. Dieselbe Klasse wie das verschluckte `git add` vom 2026-08-22 (neun Dateien fielen aus dem Commit).
2. ZEILENENDEN: meine Edits schrieben CRLF in sechs Dateien, das Repositorium speichert LF (Nachbardateien 0 CRLF, core.autocrlf=false, keine .gitattributes). Der Vorgaenger-Diff zeigte deshalb 3360 Zeilen statt der echten 241/19. Hier zurueckgedreht; kuenftige Diffs und blame auf diese Dateien sind wieder lesbar.
INHALT DES VORGAENGERS (das, was in seiner Nachricht haette stehen sollen): - logos: Eintrag ohne verwertbare Bildadresse wird als Text-Chip gezeichnet, nicht als <img src="">. Gemischte Reihen tragen. - mapCustomerLogosToItems: der Filter warf bildlose Eintraege WEG — deshalb waren sie unsichtbar; ein Fix nur im Zeichner waere wirkungslos geblieben. - references: Leer-Aussage zweisprachig, nur bei Entitaets-Speisung; ein leerer INLINE-Block bleibt still. Resolver setzt __referenceItems auch bei leerer Menge. - BEWUSSTE EINENGUNG: eine ABGELEHNTE Adresse bleibt src="#" wie bei den fuenf Geschwister-Sinks (klassenweiter Vertrag, renderBlockMediaBlocks.test.ts:324).
CI-Tor npm run test:unit nach der Normalisierung: 2398/2398, 100 Reihen.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Newblocks
awards-Block fuer Auszeichnungen und Zertifikate (W11a)
Neuer Blocktyp 'awards' aus der marketing-Entitaet Awards (Fundament-Kaskade 62): Block-Config _awards[] / _awardsAuto, Filter _awardCategory, _awardsLimit, layout. Aufgeloest in resolveEntityBlocks nach block.__awardItems (Muster partners).
AUFLOESER-Weg, und die Einordnung ist hier NICHT so glatt wie bei partners: IAward traegt mit validUntil sehr wohl ein Zeitfenster, das ohne Zutun eines Menschen ablaeuft. Massgeblich bleibt der Aufloeser-Weg, weil die MENGE sich nur durch published aendert und ein Ablauf ein einmaliges, im Voraus datiertes Ereignis ist — kein taeglich wanderndes Fenster wie bei events/locations. Die Kehrseite wird an zwei Stellen entschaerft: der Resolver laesst zur Publizier-Zeit Abgelaufenes heraus, und der Zeichner schreibt die Gueltigkeit SICHTBAR an die Kachel. Damit wird aus einer stillen Falschaussage ein sichtbar veraltetes Datum.
Zwei Mengen-Bedingungen in EINEM Filter stehen unter $and, nicht zweimal $or — ein zweites $or auf derselben Ebene ueberschriebe das erste STILL und der Website-Schnitt waere ersatzlos weg.
KEIN interner Verweis aus dem slug: die Strecke /auszeichnung/<slug> existiert nicht (anders als /partner). Der Verweis der Kachel ist certificateUrl, gehaertet.
formatAwardDate bewusst ohne toLocaleDateString — dessen Ausgabe haengt am ICU-Bestand des Laufzeit-Abbilds; deutsch Punktform, sonst eindeutige ISO-Form.
aMN.Awards in die Ladeliste (18. Fremd-Modell) — ohne den Eintrag ist ay.models.Awards undefined und der Block faellt STILL auf seinen Inline-Inhalt zurueck.
BEIDE Blocktyp-Waechter nachgezogen (rg ueber src/ und __tests__/ VOR dem Push gefahren): der Mengen-Vergleich in pageblocks.test.ts bekommt seinen Charakterisierungs-Fall, die harte Zahl in renderBlockListBlocks.test.ts geht 40 -> 41. Dritter Waechter EXPLICIT_PUSHES in app.bootstrap.test.ts ebenfalls (17 -> 18) — er hat den fehlenden Eintrag im vollen Lauf gefunden.
Verify: volle Einheiten-Menge 99 Suiten / 2358 Proben gruen, davon 34 neue in awardsBlock.test.ts. Doku-Zahl 38 -> 41 (war schon vor diesem Block veraltet: locations und quotes fehlten in der Liste).
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>