aYOUne

Changelog

Was sich verändert hat — gruppiert nach Release, filterbar nach Komponente und Repository.

Weitere Änderungen 3
Fix module-feature

_websites braucht default:undefined, sonst materialisiert die Liste als []

Die Umkehrprobe am Persistat hat es gefangen, der Bau nicht: eine Mongoose-
Liste materialisiert sich IMMER als []. Ohne default: undefined waere
_websites: [] beim naechsten Speichern in alle 38 Module und 554 Features
gewandert — genau der Vorgabewert, den der Auftrag ausdruecklich verbietet,
und er machte "nie entschieden" von "ausdruecklich mandanten-global"
ununterscheidbar.

Dieselbe Fehlerklasse wie quality.flags und IEmployee.benefits (Kaskade 64).

Hydrierung jetzt 20/20 gruen, inkl. Negativ-Kontrolle (erfundenes Feld faellt,
strict greift also wirklich) und Umkehrprobe am Persistat.
Neu module-feature

Schema-Zwillinge fuer die W0-Kanon-Website-Felder

Modules += slug, _websites[], published, showOnWebsite, sortOrder
Features += slug, _websites[], published, showOnWebsite

Ohne die Zwillinge verwirft `strict` jede Eingabe STILL — der Vertrag traege
die Felder, gespeichert wuerde nichts, und kein Fehler erschiene.

Flip-Probe beidseitig gefahren: gegen interfaces 2026.447.1 bricht der Bau mit
2x TS2353 (Features.ts:53, Modules.ts:58), gegen 2026.448.1 mit 0 Fehlern.
Beide .add()-Bloecke sind also wirklich typgeprueft (der Konstruktor traegt
den Typ-Parameter).

ZWEI Schalter, nicht einer — D3 des Kanons, CEO-Entscheid 2026-08-21
"beide Felder": published = LEBENSZYKLUS, showOnWebsite = KANAL.

KEIN Default, KEIN Backfill bei keinem der Felder: ein Vorgabewert wanderte
beim naechsten Speichern in alle 38 Module bzw. 554 Features.

Zwei Lesepfad-Indexe je Schema deklariert (Bauform wie Awards). BEWUSST nicht
unique: der Kanon nennt {_customerID, _websites, slug} als Schluessel, und
_websites ist eine LISTE — ein unique-Index darueber traefe je Eintrag statt je
Kombination. Gleiche Lage wie Awards/Partners.
Fix module-feature

Vertrag sagt die UEBERGANGS-Semantik der Schalter, nicht die Ziel-Semantik

Der 448.0-Kommentar behauptete "absent = auf der Website nicht zeigen". Der
Leser kann das heute nicht tun: 38 Module und 554 Funktionen tragen das Feld
nicht, und Backfill ist ausdruecklich ausgeschlossen — ein strenges Tor
schaltete die Achse in derselben Sekunde dunkel.

Richtig ist: absent = KEINE Aussage, Rueckfall auf das bestehende Ersatz-Tor
("traegt eine kuratierte Beschreibung", selbst fail-closed); GESETZT gewinnt
das Feld in beide Richtungen. Die Ziel-Semantik (absent = nicht zeigen) ist
als solche benannt und braucht einen eigenen Vorgang.

Ein Vertrag, der etwas anderes behauptet als sein Leser tut, ist die teuerste
Sorte Kommentar — er bescheinigt sich selbst.