Commit graph

2 commits

Author SHA1 Message Date
e0f964ad60 fix(linkedin-studio): N18 Del 1 — opprydding velter aldri et vellykket figur-render [skip-docs]
Funnet av N18-roundtrip-røyken: render-suiten var grønn 1 av 4 kjøringer, ikke
"grønn siden N13" som STATE påsto. Rotårsaken er produksjonskode, ikke en test-flake.

runChromeScreenshot.finish() sender SIGKILL til forelder-Chrome og resolver
umiddelbart uten å vente på at prosessen dør. SIGKILL på forelderen dreper ikke
dens renderer/GPU-barn, som fortsetter å skrive inn i --user-data-dir under
workDir mens finally-blokken traverserer samme katalog. rmSync tømmer den, nye
filer dukker opp, og fjerning av selve katalogen feiler med ENOTEMPTY. Ren
timing-race — derav de ~50 %.

Brukerkonsekvensen var den verste sorten: PNG-en skrives til outPath UTENFOR
workDir og er allerede ferdig når dette skjer, så oppryddingen veltet et render
som faktisk lyktes.

Fix: cleanupWorkDir() — eksplisitt retry-løkke (testbar med injisert rm) pluss
fs sine egne maxRetries/retryDelay, og den kaster aldri. En temp-katalog som blir
liggende er en bagatell mot å miste et ferdig bilde; OS rydder tmpdir.

TDD: rødt bevist først (manglende eksport), så 3 tester på kontrakten — svelger
ENOTEMPTY og forsøker på nytt, fjerner katalogen i normaltilfellet, gir seg stille
når den allerede er borte.

render 60/0 -> 63/0, grønn 5 av 5 kjøringer (var 1 av 4). test-runner 270/0.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QxvWAjte7vPcF79QeSRvRJ
2026-07-26 17:19:01 +02:00
c4434ed789 feat(linkedin-studio): N2 — build-figur renderer (SVG/HTML->PNG, 3 mål, token-seam) [skip-docs]
TDD (33 nye tester, render-suite 20->53/0 = ny floor, 4 ekte e2e-renders):
- render/build-figur.mjs: SVG/HTML -> PNG via headless Chrome; tre mål
  (article 1200xauto, carousel 1080x1350, single 1200x1200), overstyrbare
  via --width/--height; CLI + importerbar modul.
- Token-seam: design-tokens leses fra
  LINKEDIN_STUDIO_DATA/profile/brand-tokens.json (brukerdata), nøytrale
  defaults i modulen — merkevare aldri hardkodet i repoet. Injiseres som
  CSS-variabler (--figur-*).
- Warn-validering (aldri hard fail): min 24pt tekst, fargebudsjett
  (maks 2 ikke-nøytrale farger).
- Robust Chrome-oppdagelse: app-bundle-stier -> PATH -> install-hint
  (prober injiserbare for test).
- macOS-quirk (verifisert lokalt, Chrome 150): headless skriver PNG-en men
  avslutter aldri -> stderr-watchdog («written to file») + kill + verifisering
  av output. Søk-først utført (kjent headless-ustabilitet på macOS).
- Fixture: nøytral demo-SVG (placeholder-søylediagram) under
  render/__tests__/fixtures/.

Alle seks suiter grønne: test-runner 138/0, trends 245/0, brain 134/0,
hooks 140/0, tests 35/0, render 53/0.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: 26f26c3d-be91-47c4-bbdf-4694ba063b67
2026-07-16 20:26:19 +02:00