Same trap as in ThreadNet-Web: a commit touching only docs/ produced a pipeline with zero jobs, which GitLab marks as failed - pipeline 187 on 2026-08-06. build_embedded is skipped by its changes rule and publish_npm depends on it, so nothing is left.
The path list is now a YAML anchor shared with build_embedded instead of a second copy. CI_PIPELINE_SOURCE == web stays allowed so publish_npm remains reachable after a docs-only commit.
Refs axion1337.chat/threadnet-call#1
0.19.2-threadnet.6 liegt mit 12,5 KB statt 12,8 MB in der Registry: package.json und Lizenzen, kein dist/. Woher der Upload kam, laesst sich nicht mehr klaeren - beide publish_npm-Laeufe von heute sind fehlgeschlagen, der eine vor dem Upload am fehlenden dist-tag, der andere danach mit 409. Die Nummer ist verbrannt, npm-Versionen sind nicht ueberschreibbar.
Der neue Check bricht ab, wenn embedded/web/dist weniger als 50 Dateien hat (erwartet ~150). Das kostet nichts und verhindert, dass diese Klasse Fehler noch einmal eine Versionsnummer verbrennt.
npm bricht ab, sobald eine Version wie 0.19.2-threadnet.6 ohne --tag veroeffentlicht werden soll - der Suffix macht sie zur Prerelease. "threadnet" statt "latest", denn latest soll nicht auf eine Vorabversion zeigen.
Refs axion1337.chat/threadnet-call#2
build_embedded sammelte embedded/web/dist, Vite schreibt aber nach dist/ - der Job lief seit jeher gruen und lud dabei NICHTS hoch ("WARNING: embedded/web/dist: no matching files"). publish_npm haengt per needs:artifacts daran und haette ein Paket ohne dist/ veroeffentlicht.
Upstream setzt den Pfad ueber das Download-Ziel des Artefakts; hier wird nach dem Build verschoben.
Refs axion1337.chat/threadnet-call#2
Die Datei setzt VITE_PRODUCT_NAME und landet damit im Bundle, stand aber nicht in der changes:-Liste von build_embedded - der vorige Commit haette also den Produktnamen geaendert, ohne dass die CI ueberhaupt baut.
Refs axion1337.chat/threadnet-call#2
Registry-Entscheidung evidenzbasiert: das Package ist pnpm-Dependency von
ThreadNet-Webs apps/web, der Lockfile pinnt die Tarball-URL auf rohana -
Registry bleibt dort. Publish-Auth ueber CI-Variable GITEA_NPM_TOKEN statt
lokaler Klartext-.npmrc.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>