Wave 3 / Step 8 of the remediation plan (Phase 1 — usable by a non-author). The flagship long-form engine shipped bespoke-as-general: a maintainer-private absolute series path and a hardcoded 'Maskinrommet' brand in the renderers. Both are now generalized so a non-author can run the pipeline without inheriting the author's filesystem or publication identity. - commands/newsletter.md + config/edition-state.template.json: series-root default /Users/ktg/repos/maskinrommet/serier -> $HOME/linkedin-series; reconciled the prose that called the maskinrommet folder 'the default' so it no longer contradicts the new neutral default. LTL_SERIES_ROOT override contract preserved. - render/build-linkedin.mjs + render/build-carousel.mjs: brand is now an LTL_BRAND env-var (empty default -> generic). Samle-post title, carousel footer brand-span, and cover-eyebrow fallback are de-branded; empty brand renders clean chrome. The operator sets LTL_BRAND=Maskinrommet in their own env to re-brand (same pattern as LTL_SERIES_ROOT). - config/image-credit-caption.template.md: 'Maskinrommet-/serie-badge' -> generic 'serie-badge'. Out of scope (Step 9): the residual 'Maskinrommet skrivekontrakt §C2/§A' references in newsletter.md are the writing-contract generalization, handled next. [skip-docs]: three-doc + version reconciliation is Step 21 (pre-review-gate, per plan: 'LAST so it captures everything'). These intermediate Wave commits are NOT pushed before the /trekreview gate, so the three-doc obligation (which governs pushed changes) is satisfied at Step 21, not per local checkpoint commit. Verify: grep -rIn '/Users/ktg' config/ commands/ render/ (excl .local) -> no matches; grep -rn 'Maskinrommet' render/ -> no matches (de-branded); node --check on both render scripts -> OK; LTL_SERIES_ROOT still present in newsletter.md. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
3 KiB
Bilde-credit + caption — cover per edition
TEMPLATE. Copy this to
<serie>/linkedin/image-credit-caption.mdand fill it in per series./linkedin:newsletterStep 7.5 (visual-assets phase) reads it and updates the row for the edition in production; the values flow into<serie>/linkedin/edition-config.json→coverCredit+captions[NN], whichrender/build-linkedin.mjsreads when it buildsPOST.html(Step 8). This file is the human-readable source of truth for motif + credit + caption; the JSON is the machine copy the renderer consumes.
LinkedIn-editoren har et «Add credit and caption»-felt under hvert bilde. Fyll inn per cover. Caption = én kort linje som koder artikkelens signal (det leseren skal sitte igjen med), ikke en bildebeskrivelse.
Format i editoren: ofte ett felt. Lim «Caption — Credit» eller bruk feltene hver for seg om de finnes.
Verifiseringsplikt — credit skal være ærlig
Er coveret KI-generert (Nano Banana Pro / Gemini / DALL·E / Midjourney) → credit MÅ si det. Aldri la et AI-bilde framstå som foto eller egenprodusert illustrasjon. Eksempel-credit for AI-cover:
Felles credit (alle editions): Illustrasjon generert med <verktøy> — f.eks.
Illustrasjon generert med Google Gemini (Nano Banana Pro).
Er coveret et ekte foto eller en håndlaget figur → bytt til den ærlige creditten
(Foto: <fotograf>, Egenprodusert figur). Avvik fra felles-creditten føres under.
Per-edition credit-avvik: (list any edition whose credit differs from the felles-credit, with the reason — e.g. «Del 3: Egenprodusert figur (kodet SVG)». None by default.)
Motiv + caption per edition
| Del | Cover (motiv) | Caption |
|---|---|---|
| 01 | <one-line motif — what the cover depicts> | <one-line caption — the article's signal> |
| 02 | … | … |
| samle | <optional samle-post badge/motif> |
Naming-konvensjon (cover-filer)
cover.png— godkjent, fast navn. Det eneste filnavnetbuild-linkedin.mjsleser. Operator-gaten i Step 7.5 kopierer den godkjente kandidaten hit.cover-v<N>-kandidat.png— genererings-forsøk (mcp-image eller etterbehandlet). Flere kan ligge side om side uten å overskrive den godkjente.cover-raw.png— valgfri ekstern pre-edit-kilde (DALL·E / Midjourney / fotograf).fig<N>.png— inline-figur (fig1.png,fig2.png, …), referert fra utkast-markdown medog lastet opp manuelt i editoren (build-linkedin.mjsembedder ikke figurer).
Carousel-utgaver
Carousel-editions (typografisk deck via render/build-carousel.mjs) har som regel
ingen foto-cover → ingen bilde-credit nødvendig. Slide-kilden er
linkedin/NN/carousel.md, rendret til linkedin/NN/carousel.pdf. En carousel-edition
som også legger en feed-cover trenger likevel en rad over.
Samle-post
Ev. serie-badge (egen asset) → ingen credit. Lenken til serien ligger i første kommentar, ikke i bildet.