fix(dev): lt dev stellt dem App-Prozess ein Session-Passwort bereit - #93
Open
DKoenig9 wants to merge 1 commit into
Open
fix(dev): lt dev stellt dem App-Prozess ein Session-Passwort bereit#93DKoenig9 wants to merge 1 commit into
DKoenig9 wants to merge 1 commit into
Conversation
Nuxt/h3 verweigert Sessions ohne Passwort von mindestens 32 Zeichen: jeder Login antwortet mit 500 "H3Error: Empty password". `nuxt dev` faengt das ueber die .env des Projekts ab, `lt dev test` serviert aber den gebauten Nitro-Server, und der liest sie nie. Folge in SWF DNA: 42 von 92 Playwright-Tests fielen an Assertions um, die mit der Ursache nichts zu tun hatten (DEV-2972). Der App-Prozess bekommt den Wert jetzt aus lt dev. Deterministisch aus dem Slug abgeleitet statt zufaellig, damit Sessions einen Neustart ueberleben und alle Shards von `lt dev test --shard N` uebereinstimmen. Ein Projekt, das selbst einen Wert setzt, behaelt ihn - der Schluessel wird nur ergaenzt, wenn die geerbte Umgebung keinen traegt. Der Wert wandert zusaetzlich in .lt-dev/.env, damit externe Testrunner einen Stack, der sich anmelden kann, von einem unterscheiden koennen, der bei jedem Login 500 liefert. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Das Problem
Nuxt/h3 verweigert Sessions ohne Passwort von mindestens 32 Zeichen — jeder Login antwortet mit 500 (
H3Error: Empty password).nuxt devfängt das ab, weil der Dev-Server die.envdes Projekts liest.lt dev testserviert den gebauten Nitro-Server, und der liest sie nie. Ein Projekt mit vollkommen korrekter.envsieht deshalb die halbe E2E-Suite an Assertions scheitern, die mit der eigentlichen Ursache nichts zu tun haben.Aufgefallen in SWF DNA: 42 von 92 Playwright-Tests rot. Drei Läufe mit identischer
.env, einziger Unterschied war der Export in die Shell:Der CI-Job desselben Projekts erzeugt die Variable selbst und war nie betroffen — genau deshalb fällt es lokal auf und in der Pipeline nicht.
Die Änderung
lt devstellt dem App-Prozess die Variable jetzt selbst bereit, wie der CI-Job es tut.src/lib/dev-env.tsNUXT_SESSION_PASSWORD, abgeleitet aus dem Projekt-Slugsrc/lib/dev-env-bridge.ts.lt-dev/.env, damit externe Testrunner einen Stack, der sich anmelden kann, von einem unterscheiden können, der bei jedem Login 500 liefertsrc/lib/dev-patches.tslt devin Projekte schreibtZwei bewusste Entscheidungen:
Deterministisch statt zufällig. Abgeleitet als
sha256('lt-dev:session:<slug>'), erste 32 Hex-Zeichen. Damit überleben Sessions einlt dev down/up, und alle Stacks vonlt dev test --shard Nstimmen überein — bei einem Zufallswert pro Prozess hätte jeder Shard einen anderen. Unterschiedliche Projekte bekommen unterschiedliche Werte, sodass die Cookies eines Stacks nie gegen einen anderen validieren.Ein projekteigener Wert gewinnt. Der Schlüssel wird nur ergänzt, wenn die geerbte Umgebung keinen trägt —
lt devfüllt eine Lücke, es überschreibt nichts.Zur Einordnung: Das ist kein Geheimnis und soll keines sein. Es existiert, damit ein lokaler Stack ohne handgesetzte Umgebungsvariablen bootet, und erreicht keine deployte Umgebung.
Tests
3 neue Fälle in
__tests__/dev-env.test.ts: Länge (h3s 32-Zeichen-Minimum), Determinismus (gleicher Slug gleich, anderer Slug verschieden) und dass ein projekteigener Wert unangetastet bleibt.Volle Suite: 64/64 Suites, 974 Tests grün, Lint grün.
Ein Hinweis nebenbei
npm cischlägt aufmainfehl —package-lock.jsonist nicht synchron (Missing: @emnapi/core@1.11.3,@emnapi/runtime@1.11.3). Besteht unabhängig von diesem PR; ich habe die Lockfile bewusst aus dem Commit gelassen, weil sie thematisch nicht dazugehört. Sag Bescheid, wenn das hier mit rein soll.