diff --git a/docs/issues/0055-npm-scope-aufloesung-threadnet-web.md b/docs/issues/0055-npm-scope-aufloesung-threadnet-web.md index 86cfcd9..6c40296 100644 --- a/docs/issues/0055-npm-scope-aufloesung-threadnet-web.md +++ b/docs/issues/0055-npm-scope-aufloesung-threadnet-web.md @@ -127,3 +127,45 @@ Fallstrick und der Prüfung, dass die Tarball-URL auf rohana zeigt. **Nicht angefasst:** `allow_failure: true` auf `publish_npm` — eigener Befund, liegt weiterhin bei sorb. + +## Korrektur 2026-08-20 — „vollständig geschlossen" stimmte nicht + +Der Abschnitt oben schließt mit dem Satz, die Lücke sei „vollständig geschlossen, nicht +nur an einer Stelle". Das war falsch, und es ist am 2026-08-19 in Produktion aufgefallen. + +**Was passiert ist:** Der Release-Kandidat `v0.6.0-rc.1` erzeugte kein Image. +`docker_web` scheiterte mit + +``` +[ERR_PNPM_FETCH_404] GET https://registry.npmjs.org/@sorb%2Fthreadnet-call-embedded +No authorization header was set for the request. +``` + +— also exakt der Fehler, den dieses Issue behoben haben sollte. + +**Warum die Abnahme ihn nicht gefunden hat:** Sie hat gemessen, ob die `.npmrc` +*wirkt*, wenn sie vorhanden ist — in einem isolierten Baum, im frischen Klon, im +CI-Job `web`. Überall dort liegt sie im Wurzelverzeichnis und wird gelesen. Nicht +geprüft wurde, ob sie überall *ankommt*, wo installiert wird. Und im Docker-Build kam +sie nie an: Die `COPY`-Zeile in `apps/web/Dockerfile` listet die Dateien einzeln auf +und führte `.npmrc` nicht. + +**Warum es trotzdem monatelang gutging** — und das ist die eigentliche Pointe, denn die +`.npmrc` sagt es in ihrem eigenen Kommentar voraus: Unter pnpm 10 nahm +`--frozen-lockfile` die im Lockfile gepinnte Tarball-URL und löste gar nichts auf. Der +Schutz kam also nicht von der `.npmrc`, sondern vom Lockfile. Erst der Upstream-Merge +brachte pnpm 11 mit `minimumReleaseAgeStrict: true`; das prüft für jeden Eintrag das +Veröffentlichungsdatum, braucht dafür Registry-Metadaten — und landet ohne `.npmrc` bei +npmjs. + +**Behoben** in `ThreadNet-Web:c90ac4d`: `.npmrc` steht jetzt in der `COPY`-Zeile. +Belegt durch den Bau von `v0.6.0-rc.2` und alle folgenden. + +**Die Lehre ist nicht „eine Datei vergessen".** Die Abnahme hat die richtige Frage +falsch gestellt: „wirkt die Konfiguration?" statt „liegt sie an jeder Stelle, an der +installiert wird?". Für Konfiguration, die per Dateisystem-Position wirkt, ist die +Liste der Orte die Prüfung — nicht das Verhalten an einem davon. Dieselbe Klasse wie +der Fallstrick weiter oben, dass der Desktop-Client seine eigene `config.json` lädt. + +Status bleibt `done`: Die Lücke ist jetzt tatsächlich geschlossen. Korrigiert wurde die +Behauptung, nicht der Zustand.