aYOUne

Changelog

What changed — grouped by release, filterable by component and repository.

Other changes 3
Fix blocks

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>
Fix blocks

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>
New blocks

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>