Plan, Zusammenfassung und Verifikation zum Quick-Vorgang 260921-9ie, Registereintrag #35 geschlossen, STATE.md nachgezogen. Nachgewiesen: pnpm lint fuehrt 5 von 5 Workspace-Aufgaben aus (vorher "No tasks were executed") und endet auf dem Bestand mit Exit 0; eine Wegwerfdatei mit debugger laesst denselben Aufruf mit Exit 1 und noDebugger-Befund scheitern. Repo-weit 0 parse-Fehler, 0 Fehler. Die Regelgruppe security bleibt unangetastet auf error. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TPPB4ApQxzSU1rwV2Ffj9J
24 KiB
phase, plan, type, wave, depends_on, files_modified, autonomous, requirements, estimate, must_haves
| phase | plan | type | wave | depends_on | files_modified | autonomous | requirements | estimate | must_haves | ||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| quick-260921-9ie | 01 | execute | 1 |
|
true |
|
|
|
Purpose: Der Eintrag #35 im Maengelregister beschreibt ein Pruef-Tor, das nichts prueft. Solange biome.json einen in Biome 2.5.0 unbekannten Schluessel traegt und keine einzige App ein lint-Skript hat, laeuft jeder Lauf entweder in einen Konfigurationsfehler oder an allem vorbei. Ein Tor ohne Biss ist schaedlicher als gar keines, weil es Sicherheit vortaeuscht.
Output: Eine fuer Biome 2.5.0 gueltige biome.json, ein lint-Skript in allen fuenf Workspaces, ein Cache-Bezug in turbo.json und eine nachgezogene Entwickler-Anleitung. pnpm lint ist danach gruen auf dem Bestand und wird rot, sobald ein echter Fehler dazukommt.
Gemessener Ausgangsstand (2026-09-21, vor dem Umbau)
Alles Folgende wurde in der Planung am laufenden Projekt gemessen, nicht aus dem Registereintrag uebernommen:
biome.jsontraegtorganizeImportsauf oberster Ebene — Biome 2.5.0 kennt den Schluessel dort nicht und bricht jeden Aufruf ab.biome migrate --writeauf einer Kopie liefert die verbindliche Zielform:assist.actions.source.organizeImportsmit Wert"on", undlinter.rules.recommended: truewird zulinter.rules.preset: "recommended". Der zweite Teil steht nicht im Registereintrag, ist aber Teil der Migration.- Der Schalter
javascript.parser.unsafeParameterDecoratorsEnabledsenkt die parse-Fehler inapps/apivon 238 in 19 Dateien auf 30 in 1 Datei. Der Registereintrag nennt „17 allein in user.controller.ts" — das ist in zwei Punkten falsch: der Pfad lautetapps/api/src/user/user.controller.ts(Einzahluser, nichtusers), und die tatsaechliche Wirkung ist um ein Vielfaches groesser. - Die verbleibenden 30 parse-Fehler liegen in
apps/api/src/tenders/__fixtures__/cosinex-search.html, dazu 2 inapps/web/src/app/globals.css(Tailwind-4-At-Regeln, die Biomes CSS-Parser nicht kennt). - Anfuehrungszeichen: 854 Importzeilen in
apps/api, 642 inapps/webbenutzen einfache Anfuehrungszeichen, null benutzen doppelte.quoteStyle: "single"ist damit belegt, nicht geraten. turbo lintmeldet heute „No tasks were executed" bei Exit 0 — der Leerlauf ist reproduziert.
Entscheidung: Zweig (b), mit Begruendung aus der Messung
Die Vorgabe liess zwei Zweige zu. Gemessen wurde:
| Aufruf | Exit | Fehler | Warnungen |
|---|---|---|---|
biome check . |
1 | 760 | 2594 |
biome lint . |
1 | 275 | 2594 |
biome format . |
1 | 319 | — |
Zweig (a) scheidet damit aus: die Befunde sind nicht blosse Warnungen, der Lauf faellt auch als reines lint durch. Also Zweig (b), in drei praezisen Schritten statt eines pauschalen Rundumschlags:
- Das Skript ruft
biome lint, nichtbiome check. Das nimmt die 319 Formatierungsbefunde und die Importsortierung aus dem Tor heraus — genau die Befunde, die einen projektweiten Umbau erzwingen wuerden. Die Formatierungs-Einstellungen bleiben in der Datei gueltig und wirken weiter fuerbiome format --writeund den Editor. - Zwei Dateien werden von Biome ausgenommen.
apps/api/src/tenders/__fixtures__/cosinex-search.htmlist eine abgespeicherte Fremdseite als Testvorlage, kein eigener Quellcode; das Verzeichnis__fixtures__enthaelt ausschliesslich Datendateien (html, zip, xml) und keine einzige TypeScript-Datei.apps/web/src/app/globals.cssscheitert an Tailwind-4-Syntax, die Biome nicht kennt. - Gezielte Herabstufungen statt Quellcode-Umbau. Von den 275 Fehlern sind 32 parse-Fehler (durch Schritt 2 erledigt) und 243 echte Regelverstoesse — 217 davon in
apps/web, 25 inapps/api, 1 inapps/desktop. Verteilung: Barrierefreiheit 184,suspicious33,correctness/useExhaustiveDependencies20,security/noScriptUrl6.
Sicherheitsrelevanter Befund, der die Herabstufung begrenzt: alle 6 Treffer der Regel lint/security/noScriptUrl liegen ausnahmslos in der ausgenommenen HTML-Testvorlage, in keiner einzigen echten Quelldatei. Die Gruppe security wird deshalb nicht herabgestuft und bleibt auf error. Es wird keine Sicherheitsregel stummgeschaltet — die 6 Treffer verschwinden, weil die Fremdseite nicht mehr geprueft wird, nicht weil die Regel entschaerft wurde.
Die uebrigen Regeln werden auf warn gesetzt, nicht abgeschaltet: sie bleiben im Bericht sichtbar und bilden den Rueckstand, den der Registereintrag ohnehin als eigenen Durchlauf vorsieht. Nach dem Umbau: 0 Fehler, 2826 Warnungen, Exit 0 — und Exit 1, sobald ein echter Fehler dazukommt (in der Planung mit einer Wegwerfdatei gegengeprueft).
<execution_context>
@/.claude/gsd-core/workflows/execute-plan.md
@/.claude/gsd-core/templates/summary.md
</execution_context>
@biome.json @turbo.json @package.json @apps/api/package.json @apps/web/package.json @.gitea/workflows/ci.yml
Task 1: biome.json reparieren und die Kette bis pnpm lint an apps/api nachweisen biome.json, apps/api/package.json biome.json, apps/api/package.json, turbo.json, package.json Schreibe `biome.json` im Wurzelverzeichnis neu. Der Schluessel `$schema` und der komplette `formatter`-Block (enabled true, indentStyle space, indentWidth 2, lineWidth 100) bleiben unveraendert stehen. Entferne den Schluessel `organizeImports` von der obersten Ebene und setze stattdessen `assist.actions.source.organizeImports` auf den Wert `"on"` — das ist wortgleich die Ausgabe von `biome migrate --write`, nicht geraten. Ersetze im selben Zug `linter.rules.recommended: true` durch `linter.rules.preset: "recommended"`; auch das gehoert zur Migration und wird sonst uebersehen. `linter.enabled` bleibt true.Ergaenze einen javascript-Block mit zwei Unterschluesseln: parser.unsafeParameterDecoratorsEnabled auf true, damit NestJS-Parameter-Dekoratoren ueberhaupt geparst werden, und formatter.quoteStyle auf "single", belegt durch 1496 einfach-gequotete Importzeilen gegen null doppelt-gequotete.
Ergaenze einen vcs-Block mit enabled true, clientKind "git" und useIgnoreFile true, damit .gitignore gilt und Biome nicht in node_modules, .next, dist oder target laeuft. Wichtig: dieser Block funktioniert nur, solange die Konfigurationsdatei im selben Verzeichnis wie .gitignore liegt, also im Wurzelverzeichnis — bei einem Aufruf mit abweichendem Konfigurationspfad bricht Biome mit einem Datei-nicht-gefunden-Fehler ab.
Ergaenze files.includes mit genau drei Eintraegen in dieser Reihenfolge: dem Alles-Muster, einem verneinenden Muster fuer beliebig tief liegende __fixtures__-Verzeichnisse, und einem verneinenden Muster fuer den Pfad apps/web/src/app/globals.css. Verneinende Muster tragen in Biome 2.x ein vorangestelltes Ausrufezeichen.
Ergaenze unter linter.rules die Herabstufungen: die Gruppe a11y bekommt direkt den Wert "warn" (Gruppen nehmen laut mitgeliefertem Schema eine Schweregrad-Zeichenkette entgegen), unter correctness bekommt useExhaustiveDependencies den Wert "warn", und unter suspicious bekommen noArrayIndexKey, noAssignInExpressions, noControlCharactersInRegex, noDoubleEquals und useIterableCallbackReturn je den Wert "warn". Die Gruppe security wird nicht aufgefuehrt und behaelt damit den voreingestellten Schweregrad error — das ist Absicht und darf nicht „der Vollstaendigkeit halber" mit herabgestuft werden.
Trage anschliessend in apps/api/package.json unter scripts einen Eintrag lint mit dem Wert biome lint . ein. Aendere sonst nichts an der Datei — insbesondere keine Abhaengigkeiten und keine Versionen, Biome 2.5.0 liegt bereits im Lockfile.
Fass in diesem Schritt keine einzige Quelldatei an. Wenn nach dem Umbau git status irgendetwas ausserhalb der beiden genannten Dateien zeigt, ist etwas schiefgelaufen.
cd /home/vicolab/projects/tessera-ctl
1. Konfiguration ist fuer Biome 2.5.0 gueltig und der alte Schluessel ist weg
node -e "const c=require('./biome.json'); if(c.organizeImports!==undefined) throw new Error('Schluessel liegt noch auf oberster Ebene'); if(c.assist.actions.source.organizeImports!=='on') throw new Error('assist fehlt'); if(c.linter.rules.preset!=='recommended') throw new Error('preset fehlt'); if(c.javascript.parser.unsafeParameterDecoratorsEnabled!==true) throw new Error('Parser-Schalter fehlt'); if(c.javascript.formatter.quoteStyle!=='single') throw new Error('quoteStyle fehlt'); if(c.linter.rules.security!==undefined) throw new Error('security wurde angefasst'); console.log('config OK');"
erwartet: "config OK", Exit 0
2. biome migrate meldet keinen Migrationsbedarf mehr
pnpm exec biome migrate 2>&1 | grep -q "configuration needs migration" && { echo "FEHLER: noch migrationsbeduerftig"; exit 1; } || echo "migrate sauber"
erwartet: "migrate sauber"
3. Null parse-Fehler repo-weit (vorher 238 allein in apps/api)
pnpm exec biome lint . --reporter=json --max-diagnostics=20000 > /tmp/biome_probe.json 2>/dev/null node -e "const d=require('/tmp/biome_probe.json').diagnostics||[]; const p=d.filter(x=>x.category==='parse'); const e=d.filter(x=>x.severity==='error'); console.log('parse:',p.length,'errors:',e.length); if(p.length||e.length) process.exit(1);"
erwartet: "parse: 0 errors: 0", Exit 0
4. Die Kette traegt: apps/api laeuft ueber turbo und ist gruen
pnpm exec turbo lint --force --filter=@tessera/api 2>&1 | tail -5
erwartet: "1 successful, 1 total", Exit 0
5. Kein Quellcode angefasst (git-Status zuerst festhalten, damit ein Fehler von git nicht verschluckt wird)
git status --porcelain > /tmp/gsd_status.txt || { echo "FEHLER: git status fehlgeschlagen"; exit 1; }
FREMD=$(grep -vE "^ M .planning/STATE.md$" /tmp/gsd_status.txt | grep -vE "biome.json|apps/api/package.json|^?? .planning/quick/" || true)
test -z "$FREMD" || { echo "FEHLER: fremde Aenderungen:"; echo "$FREMD"; exit 1; }
echo "Diff sauber"
biome.json ist fuer Biome 2.5.0 gueltig, biome migrate meldet keinen Bedarf mehr, repo-weit null parse-Fehler und null Fehler, turbo lint --filter=@tessera/api fuehrt eine echte Aufgabe aus und endet mit Exit 0, und der Diff enthaelt ausser den beiden Zieldateien nichts.
Ergaenze in turbo.json auf oberster Ebene, neben dem vorhandenen tasks-Objekt, den Schluessel globalDependencies mit biome.json als einzigem Eintrag. Ohne diesen Bezug liegt die Konfigurationsdatei ausserhalb jedes Workspace-Verzeichnisses, und turbo wuerde nach einer Aenderung an den Regeln weiterhin zwischengespeicherte Lint-Ergebnisse ausliefern — also erneut ein Tor, das gruen meldet, ohne geprueft zu haben. Genau diese Klasse von Fehler ist der Anlass des Vorgangs. Die bestehende lint-Aufgabe unter tasks bleibt unveraendert.
Weise danach zwei Dinge nach, die zusammen den eigentlichen Mangel schliessen: dass pnpm lint fuenf echte Aufgaben ausfuehrt statt keiner, und dass der Lauf rot wird, sobald ein echter Regelverstoss im Baum liegt. Lege fuer die Gegenprobe eine Wegwerfdatei unter apps/api/src an, die eine debugger-Anweisung und einen losen Gleichheitsvergleich enthaelt, lass den Lauf darauf scheitern und entferne die Datei danach wieder. Der Lauf fuer die Gegenprobe braucht --force, sonst kann der turbo-Cache das Ergebnis verdecken.
cd /home/vicolab/projects/tessera-ctl
1. Alle fuenf Workspaces haben ein lint-Skript
node -e "const fs=require('fs'); const ps=['apps/api','apps/web','apps/desktop','packages/shared','packages/module-sdk']; const miss=ps.filter(p=>!(JSON.parse(fs.readFileSync(p+'/package.json','utf8')).scripts||{}).lint); if(miss.length) throw new Error('ohne lint-Skript: '+miss); console.log('5/5 Workspaces haben lint');"
erwartet: "5/5 Workspaces haben lint"
2. turbo kennt biome.json als globale Abhaengigkeit
node -e "const t=require('./turbo.json'); if(!(t.globalDependencies||[]).includes('biome.json')) throw new Error('globalDependencies fehlt'); console.log('globalDependencies OK');"
erwartet: "globalDependencies OK"
3. pnpm lint fuehrt echte Aufgaben aus und ist gruen (vorher: "No tasks were executed")
pnpm exec turbo lint --force 2>&1 | tail -6
erwartet: "5 successful, 5 total", Exit 0, KEIN "No tasks were executed"
4. GEGENPROBE — das Tor muss beissen
printf 'export function probe(x: number) {\n debugger;\n return x == null;\n}\n' > apps/api/src/gate_probe.ts pnpm exec turbo lint --force --filter=@tessera/api > /tmp/bite.txt 2>&1; BITE=$? rm -f apps/api/src/gate_probe.ts echo "Gegenprobe Exit=$BITE (erwartet 1)"; grep -c "noDebugger" /tmp/bite.txt test "$BITE" -eq 1 || { echo "FEHLER: Tor beisst nicht"; exit 1; }
5. Wegwerfdatei ist wieder weg und nach dem gruenen Lauf ist alles sauber
test ! -f apps/api/src/gate_probe.ts && echo "Probe entfernt" pnpm exec turbo lint --force 2>&1 | tail -3
erwartet: erneut "5 successful, 5 total", Exit 0
</automated>
Alle fuenf Workspaces tragen ein `lint`-Skript, `turbo.json` bezieht `biome.json` als globale Abhaengigkeit ein, `pnpm lint` meldet 5 von 5 ausgefuehrten Aufgaben mit Exit 0, und die Gegenprobe mit einem absichtlichen Verstoss liefert Exit 1 samt `noDebugger`-Befund. Die Wegwerfdatei ist entfernt, der abschliessende Lauf wieder gruen.
Task 3: Entwickler-Anleitung nachziehen und Registereintrag #35 schliessen
docs/anleitung-entwicklung.md, .planning/WINDOWS.md
docs/anleitung-entwicklung.md
In `docs/anleitung-entwicklung.md` beschreibt der Absatz ab Zeile 61 Biome als aktives Werkzeug und nennt dabei die Importsortierung. Die Aussage stimmt weiterhin, ist aber unvollstaendig, weil bis jetzt gar nichts geprueft wurde. Ergaenze den Absatz um drei Punkte in ganzen Saetzen und in derselben Tonlage wie der umgebende Text: dass `pnpm lint` seit diesem Vorgang je Workspace `biome lint .` ausfuehrt und der CI-Schritt damit echt prueft; dass das Tor auf Fehler blockiert, waehrend Stilhinweise als Warnungen erscheinen, ohne den Lauf zu stoppen; und dass derzeit rund 2800 solcher Warnungen offen sind — ueberwiegend aus der Regelfamilie um den Typ `any` sowie Barrierefreiheits-Hinweise in `apps/web` —, die bewusst als eigener Durchlauf stehen bleiben und nicht Teil dieses Vorgangs waren.
Erwaehne dabei ausdruecklich, dass pnpm lint nicht formatiert und nicht auf Formatierung besteht: fuer Formatierung gibt es biome format --write, das getrennt und absichtlich von Hand angestossen wird. Dieser Satz verhindert, dass jemand spaeter das Skript auf biome check umstellt und damit ungewollt einen projektweiten Umbau ausloest.
Schliesse danach den Registereintrag ueber das Werkzeug, nicht durch Handarbeit an der Tabelle — der Befehl zieht die Zaehler im Kopf der Datei mit. Nutze dafuer den windows fixed-Unterbefehl von gsd-tools mit der Kennung 35.
cd /home/vicolab/projects/tessera-ctl
1. Anleitung nennt den neuen Zustand
grep -qE "pnpm lint" docs/anleitung-entwicklung.md && grep -qiE "warnung" docs/anleitung-entwicklung.md && echo "Anleitung ergaenzt"
erwartet: "Anleitung ergaenzt"
2. Registereintrag 35 steht auf fixed und traegt ein Loesedatum
node -e "const fs=require('fs'); const row=fs.readFileSync('.planning/WINDOWS.md','utf8').split('\n').find(l=>l.startsWith('| 35 |')); const c=row.split('|').map(s=>s.trim()); if(c[7]!=='fixed') throw new Error('Status ist: '+c[7]); if(!c[10]) throw new Error('resolved_at fehlt'); console.log('#35 fixed am',c[10]);"
erwartet: "#35 fixed am ", Exit 0
3. Abschliessender Gesamtnachweis — das Tor laeuft, prueft und ist gruen
pnpm exec turbo lint --force 2>&1 | tail -4
erwartet: "5 successful, 5 total", Exit 0
</automated>
Die Entwickler-Anleitung beschreibt den tatsaechlichen Zustand samt offenem Warnungs-Rueckstand und der Trennung von Pruefen und Formatieren; Eintrag #35 im Maengelregister steht auf `fixed` mit Loesedatum; der abschliessende Gesamtlauf ist gruen.
<threat_model>
Trust Boundaries
| Boundary | Description |
|---|---|
| Entwickler-Arbeitsplatz → CI-Runner | biome.json und die lint-Skripte bestimmen, was der CI-Schritt „Lint" in .gitea/workflows/ci.yml tatsaechlich ausfuehrt. Beide wandern per Commit in die Pipeline. |
| Quellcode → Lint-Tor | Das Tor entscheidet, welche Befunde einen Lauf blockieren und welche nur berichtet werden. Eine Herabstufung hier wirkt auf jeden spaeteren Beitrag. |
STRIDE Threat Register
| Threat ID | Category | Component | Severity | Disposition | Mitigation Plan |
|---|---|---|---|---|---|
| T-35-01 | Tampering | biome.json → linter.rules |
high | mitigate | Eine pauschale Herabstufung koennte echte Sicherheitsregeln stummschalten. Die Gruppe security wird in Task 1 ausdruecklich nicht aufgefuehrt und behaelt error. Belegt: die 6 gemessenen lint/security/noScriptUrl-Treffer liegen ausnahmslos in der ausgenommenen HTML-Testvorlage, in keiner echten Quelldatei. Task 1 Verify prueft maschinell, dass linter.rules.security nicht gesetzt ist. |
| T-35-02 | Tampering | biome.json → files.includes |
medium | mitigate | Das verneinende Muster fuer __fixtures__ koennte kuenftig echten Quellcode der Pruefung entziehen. Gemessen: das einzige solche Verzeichnis enthaelt ausschliesslich Datendateien (html, zip, xml) und keine einzige TypeScript-Datei. Der Ausschluss bleibt auf dieses Muster plus eine namentlich genannte CSS-Datei begrenzt; kein Verzeichnis unter src wird pauschal ausgenommen. |
| T-35-03 | Tampering | falsch-gruenes Tor (lint-Skripte, turbo.json) |
high | mitigate | Der eigentliche Mangel aus #35 ist ein Tor, das gruen meldet, ohne zu pruefen. Ein falsch geschriebenes Skript oder ein stale Cache wuerde ihn wiederholen. Zwei Gegenmassnahmen: globalDependencies verwirft den Cache bei Regelaenderungen, und Task 2 Verify baut einen absichtlichen Verstoss ein und verlangt Exit 1 samt noDebugger-Befund. |
| T-35-04 | Denial of Service | .gitea/workflows/ci.yml Schritt „Lint" |
medium | accept | Der Schritt kann ab jetzt rot werden und die Pipeline anhalten. Das ist der Zweck des Vorgangs, nicht ein Nebenschaden. Angenommen, weil der Ausgangszustand — ein Tor ohne Biss — das groessere Risiko traegt; das Tor ist auf dem aktuellen Bestand nachweislich gruen, blockiert also niemanden ohne Anlass. |
| T-35-SC | Tampering | Paketinstallationen (npm/pnpm) | — | n/a | Dieser Plan installiert kein Paket und hebt keine Version an; Biome 2.5.0 liegt bereits im Lockfile und in node_modules. Es gibt keinen Paketmanager-Installationsschritt, das Package-Legitimacy-Gate greift hier nicht. Ausdruecklich festgehalten statt stillschweigend ausgelassen. |
| </threat_model> |
pnpm exec biome migratemeldet keinen Migrationsbedarf → Konfiguration ist fuer 2.5.0 gueltig.pnpm exec biome lint . --reporter=json --max-diagnostics=20000→ null Eintraege mitcategoryparseund null mitseverityerror.pnpm exec turbo lint --force→ „5 successful, 5 total", Exit 0, und die Zeile „No tasks were executed" taucht nicht mehr auf.- Gegenprobe: Wegwerfdatei mit
debuggerunterapps/api/src→pnpm exec turbo lint --force --filter=@tessera/apiendet mit Exit 1; Datei danach entfernt, Lauf wieder gruen. linter.rules.securityist inbiome.jsonnicht gesetzt → Sicherheitsregeln blieben auferror.git diff --statzeigt ausschliesslich die neun infiles_modifiedgelisteten Dateien — keine Quelldatei wurde umformatiert.- Eintrag 35 in
.planning/WINDOWS.mdsteht auffixedmit gefuelltemresolved_at.
<success_criteria>
pnpm lintfuehrt in allen fuenf Workspaces eine echte Biome-Pruefung aus und endet auf dem unveraenderten Bestand mit Exit 0.- Ein absichtlich eingebauter Regelverstoss laesst denselben Aufruf mit Exit 1 scheitern.
- Biome bricht nirgends mehr mit einem Konfigurationsfehler ab; repo-weit null parse-Fehler (vorher 238 allein in
apps/api). - Die Regelgruppe
securityist unveraendert auferror; keine Sicherheitsregel wurde entschaerft. - Kein Quellcode wurde umformatiert und keine Paketversion angehoben.
- Der offene Warnungs-Rueckstand (rund 2800, ueberwiegend
any-Familie und Barrierefreiheit) ist in der Entwickler-Anleitung als bewusst offener Punkt festgehalten. - Eintrag #35 im Maengelregister ist geschlossen. </success_criteria>
Halte in der Zusammenfassung ausdruecklich fest: (1) dass Zweig (b) gewaehlt wurde, mit den gemessenen Exit-Codes und Befundzahlen als Begruendung; (2) dass die Regelgruppe security unangetastet blieb und warum die 6 noScriptUrl-Treffer trotzdem verschwinden; (3) dass die beiden Zahlenangaben im Registereintrag #35 („17 Fehler in users/user.controller.ts") von der Messung abweichen — der Pfad lautet apps/api/src/user/user.controller.ts und die tatsaechliche Wirkung des Parser-Schalters betrug 238 parse-Fehler in 19 Dateien; (4) den verbleibenden Warnungs-Rueckstand als benannten, offenen Folgepunkt.