Codegen-Nachzug hub — Mengen-Wege pruefen ab jetzt das Aenderungs-Recht
Der Ausstoss eines Erzeuger-Laufs vom 2026-08-22T05:13Z lag 121 Dateien gross unversioniert
im Arbeitsbaum. Gepruefte Entscheidung: uebernommen, mit EINER benannten Korrektur.
BELEG, dass der Ausstoss reproduzierbar ist: Arbeitsbaum-Stand gesichert, auf HEAD
zurueckgesetzt, voller Modul-Lauf `codegen routes --module hub` neu gefahren, danach
byte-verglichen — deckungsgleich (sha1 ueber alle 171 .ts identisch), mit Positiv-Kontrolle
gegen HEAD (163 Unterschiede, der Vergleich greift also wirklich).
WAS SICH FACHLICH AENDERT — 11 Router (chats, examresults, exams, faqs, glossaries,
hubquestions, knowledgebases, polls, quotes, savedreplies, wikipages):
PUT /many vorher extendForNewRights(BASE) -> verlangte `hub.<e>.new`
nachher extendForMassEditOrEdit() -> `hub.<e>.edit` ODER `hub.<e>.massEdit`
DELETE /many vorher extendForDeleteRights(BASE) -> verlangte `hub.<e>.delete`
nachher extendForMassDeleteOrDelete() -> `hub.<e>.delete` ODER `hub.<e>.massDelete`
Der PUT-Fall ist eine Korrektur, kein Zusatz: eine Mengen-AENDERUNG verlangte bis hierher das
ANLEGE-Recht. Wer `new` haelt, aber weder `edit` noch `massEdit`, verliert den Mengen-Weg — er
haette ihn nie haben duerfen. Wer `edit` haelt, aber nicht `new`, gewinnt ihn. Der DELETE-Fall
ist rein additiv (any-of): niemand verliert, `massDelete`-Halter gewinnen.
Dazu die 4xx-Klassifikation aus der Vorlage (ValidationError/CastError enden als 400 + warn
statt 500 + error) in allen create/update/delete/get-Handlern.
DIE EINE KORREKTUR AM AUSSTOSS: der Modul-Lauf entfernt in routerHubQuestions.ts still die von
Hand gesetzte Montage `use('/:id/comments', routerHubQuestionsComments)` samt Einfuhr — acht
Kommentar-/Reaktions-/Stimmen-Routen waeren danach ueber HTTP unerreichbar gewesen.
Wiederhergestellt und mit dem vorgeschriebenen Zeile-1-Haertungsmarker versehen, damit der
naechste Lauf sie meldet statt sie zu entfernen. Gegenprobe am Waechter: `--probe` meldete
vorher 0 gehaertete Dateien, jetzt 1, mit dem Vermerk "NUR ueber den Marker" — die zwei
Bestands-Achsen (verlorene Deklaration / verlorener Hand-Import) sind fuer eine verlorene
`use()`-Montage strukturell blind.
Verify: `npm run build` gruen; Testreihe 217/217 in 16 Suiten gruen. Kontrolle vorher gefahren:
mit dem rohen Ausstoss fielen 2 Proben in `hubquestionsRouterMounting.test.ts`, bei HEAD waren
dieselben 5/5 gruen — die Regression war echt und ist geschlossen.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
im Arbeitsbaum. Gepruefte Entscheidung: uebernommen, mit EINER benannten Korrektur.
BELEG, dass der Ausstoss reproduzierbar ist: Arbeitsbaum-Stand gesichert, auf HEAD
zurueckgesetzt, voller Modul-Lauf `codegen routes --module hub` neu gefahren, danach
byte-verglichen — deckungsgleich (sha1 ueber alle 171 .ts identisch), mit Positiv-Kontrolle
gegen HEAD (163 Unterschiede, der Vergleich greift also wirklich).
WAS SICH FACHLICH AENDERT — 11 Router (chats, examresults, exams, faqs, glossaries,
hubquestions, knowledgebases, polls, quotes, savedreplies, wikipages):
PUT /many vorher extendForNewRights(BASE) -> verlangte `hub.<e>.new`
nachher extendForMassEditOrEdit() -> `hub.<e>.edit` ODER `hub.<e>.massEdit`
DELETE /many vorher extendForDeleteRights(BASE) -> verlangte `hub.<e>.delete`
nachher extendForMassDeleteOrDelete() -> `hub.<e>.delete` ODER `hub.<e>.massDelete`
Der PUT-Fall ist eine Korrektur, kein Zusatz: eine Mengen-AENDERUNG verlangte bis hierher das
ANLEGE-Recht. Wer `new` haelt, aber weder `edit` noch `massEdit`, verliert den Mengen-Weg — er
haette ihn nie haben duerfen. Wer `edit` haelt, aber nicht `new`, gewinnt ihn. Der DELETE-Fall
ist rein additiv (any-of): niemand verliert, `massDelete`-Halter gewinnen.
Dazu die 4xx-Klassifikation aus der Vorlage (ValidationError/CastError enden als 400 + warn
statt 500 + error) in allen create/update/delete/get-Handlern.
DIE EINE KORREKTUR AM AUSSTOSS: der Modul-Lauf entfernt in routerHubQuestions.ts still die von
Hand gesetzte Montage `use('/:id/comments', routerHubQuestionsComments)` samt Einfuhr — acht
Kommentar-/Reaktions-/Stimmen-Routen waeren danach ueber HTTP unerreichbar gewesen.
Wiederhergestellt und mit dem vorgeschriebenen Zeile-1-Haertungsmarker versehen, damit der
naechste Lauf sie meldet statt sie zu entfernen. Gegenprobe am Waechter: `--probe` meldete
vorher 0 gehaertete Dateien, jetzt 1, mit dem Vermerk "NUR ueber den Marker" — die zwei
Bestands-Achsen (verlorene Deklaration / verlorener Hand-Import) sind fuer eine verlorene
`use()`-Montage strukturell blind.
Verify: `npm run build` gruen; Testreihe 217/217 in 16 Suiten gruen. Kontrolle vorher gefahren:
mit dem rohen Ausstoss fielen 2 Proben in `hubquestionsRouterMounting.test.ts`, bei HEAD waren
dieselben 5/5 gruen — die Regression war echt und ist geschlossen.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>