feat(linkedin): v2.3.0 — Step 7.5 visual-assets phase in /linkedin:newsletter

Endring 7 from the change-spec: make visual assets an explicit pipeline
phase. New Step 7.5 (visual-assets) between annotation (Step 7) and lock
(Step 8): cover (+ optional inline figures) or carousel deck, generated and
operator-gated BEFORE lock so build-linkedin.mjs picks up cover.png at lock
without a post-lock re-render. Pipeline 13 → 14 phases.

- commands/newsletter.md: Step 7.5 section, pipeline overview + build-status,
  resumption table (annotation → 7.5; new visual-assets → 8), Step 8
  precondition, reference-file list.
- config/edition-state.template.json: visual-assets phase + additive
  articles.NN.visualAssets schema (format / cover / figures / carousel).
- config/image-credit-caption.template.md (new): motif + credit + caption
  table, honest-about-AI credit, naming convention.
- Two generation routes, no lock-in: default mcp-image (cover-v<N>-kandidat.png)
  or external cover-raw.png. Operator-gate via SendUserFile → cp to cover.png.
  Carousel branch reuses render/build-carousel.mjs.
- Doc/orchestration-only — no new code. Commands (24) + agents (15) unchanged.
- Version sync 2.2.0 → 2.3.0 across plugin.json, CHANGELOG, README, CLAUDE.md,
  root README + root CLAUDE.md.

Correction: spec claimed build-linkedin.mjs handles fig1-4; verified it does
NOT — it embeds only cover.png by fixed name; figures are referenced in the
draft markdown and uploaded manually. Step 7.5 documents actual behavior.

All 8 acceptance criteria met. JSON valid (14 phases); 20/20 render tests pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Kjell Tore Guttormsen 2026-05-28 22:49:19 +02:00
commit 7ebd28cb0b
9 changed files with 304 additions and 29 deletions

View file

@ -206,19 +206,20 @@ Key commands: `/architect`, `/architect:ros`, `/architect:security`, `/architect
---
### [LinkedIn Thought Leadership](plugins/linkedin-thought-leadership/) `v2.2.0`
### [LinkedIn Thought Leadership](plugins/linkedin-thought-leadership/) `v2.3.0`
Build authentic LinkedIn authority through algorithmic understanding, strategic consistency, and AI-assisted content creation.
v2.2.0 **hardens the longform gates** with the lessons from the second `/linkedin:newsletter` production run (Seres-serien): the persona gate is now **blocking with an explicit hard-fail list** (primær «mistet meg» / doesn't own the action / sjargong-mur / modell-/navne-katalog → BLOCK; «JA med store forbehold» = NEI); fact-check is **orthogonal to narrative strength** with a **post-cutoff web-search mandate** + high-frequency-error checklist; a new **`voice-scrubber`** agent (Opus) does de-AI scrub + Norwegian-chronicle voice-drift correction (gold standard = approved Norwegian editions, NOT the English post corpus); operator gates become **render+annotate** rounds; and per-edition state is **reconciled with the global STATE.md** continuity system (`edition-HANDOVER.md` removed). Agents 14 → 15; commands unchanged (24). v2.1.0's skeleton-gate-before-prose and v2.0.0's full-spectrum surface are preserved. Updated for the January 2026 360Brew algorithm change, which validates your creator profile before distributing content.
v2.3.0 makes **visual assets an explicit pipeline phase** in `/linkedin:newsletter`: new **Step 7.5 (visual-assets)** between annotation (Step 7) and lock (Step 8). The cover (+ optional inline figures) or a carousel deck is generated (default `mcp-image`; external `cover-raw.png` accepted) and operator-gated via `SendUserFile` **before lock**, so `render/build-linkedin.mjs` picks up `cover.png` + the edition-config credit/caption at lock without a post-lock re-render. Pipeline 13 → 14 phases; new `config/image-credit-caption.template.md` + additive `visualAssets` state; doc/orchestration-only (no new code). v2.2.0 **hardened the longform gates** with the lessons from the second production run (Seres-serien): the persona gate is **blocking with an explicit hard-fail list** (primær «mistet meg» / doesn't own the action / sjargong-mur / modell-/navne-katalog → BLOCK); fact-check is **orthogonal to narrative strength** with a **post-cutoff web-search mandate**; a **`voice-scrubber`** agent (Opus) does de-AI scrub + Norwegian-chronicle voice-drift correction; operator gates became **render+annotate** rounds; and per-edition state was **reconciled with the global STATE.md** continuity system (`edition-HANDOVER.md` removed). Commands unchanged (24); 15 agents. v2.1.0's skeleton-gate-before-prose and v2.0.0's full-spectrum surface are preserved. Updated for the January 2026 360Brew algorithm change, which validates your creator profile before distributing content.
- **Visual-assets gate BEFORE lock (v2.3)** — Step 7.5 decides image needs from the article type (method-heavy → 12 inline figures; diagnosis-heavy → cover only), briefs each image, generates via mcp-image or an external `cover-raw.png`, surfaces candidates with `SendUserFile`, and copies the approved one to the fixed `cover.png` name. Explicit `format: "carousel"` branch reusing `build-carousel.mjs`.
- **Blocking persona hard-fails (v2.2)**`persona-reviewer` + `personas.template.md` make primær «mistet meg», doesn't-own-the-action, sjargong-mur, and modell-/navne-katalog BLOCK-level rewrites, not annotations. The bar is the primær reader's *clean* JA.
- **Fact-check orthogonal to polish (v2.2)**`fact-checker` web-searches every post-cutoff claim (never confirms from memory) and runs an explicit checklist for person titles, org-varying "standards", over-credited studies, source scope, and founding/release years.
- **New `voice-scrubber` agent (v2.2, Opus)** — aggressive de-AI scrub (Pass 1) + Norwegian-chronicle voice-drift correction (Pass 2), calibrated to the **approved Norwegian editions** rather than the English post corpus; wired into Step 4. *New agent — requires a session reload before invokable.*
- **Render+annotate operator gates (v2.2)** — Steps 2.5/3a surface an annotatable `file://` review page (`build-html.mjs`) as the primary operator-review flow; `AskUserQuestion` becomes a receipt + fallback.
- **STATE.md-reconciled edition state (v2.2)** — narrative state in `<serie>/STATE.md` (auto-injected, overwritten each phase), machine state in `edition-state.json`; no separate `edition-HANDOVER.md`.
- **Skeleton gate BEFORE prose (v2.1)**`/linkedin:newsletter` Step 2.5 writes a five-line spine (premiss / problem / anbefaling / gevinst / vei videre) + one-line section pitches to `<serie>/NN-skjelett.md`. Operator-gate AND parallel persona-skjelett-sweep must both return JA before the pipeline can advance. Step 3a follows with spine prose (one paragraph per section) and its own operator-gate. Encodes the Maskinrommet writing-contract §A discipline into the pipeline.
- **Long-form `/linkedin:newsletter` orchestrator** — multi-session 13-phase pipeline (research → **skeleton + persona-skjelett-sweep****spine prose** → full prose draft → **de-AI/voice scrub** → fact-check sweep → persona sweep → lock → delivery → hook-gate) with maintained edition-state. Newsletter editions, essays, series articles
- **Long-form `/linkedin:newsletter` orchestrator** — multi-session 14-phase pipeline (research → **skeleton + persona-skjelett-sweep****spine prose** → full prose draft → **de-AI/voice scrub** → fact-check sweep → persona sweep → annotation → **visual assets (cover/figures or carousel, BEFORE lock)** lock → delivery → hook-gate) with maintained edition-state. Newsletter editions, essays, series articles
- **Three longform-quality gate agent modes**`fact-checker` (Opus, verifies every claim against primary sources) and `persona-reviewer` (Opus) with three modes: **`skjelett`** (Step 2.5, before prose), **`resonans`** (Step 6, before lock), **`konverter`** (Step 9, after lock)
- **Render pipeline in-plugin**`build-html.mjs`, `build-pdf.mjs`, `build-linkedin.mjs`, `build-carousel.mjs` with self-hosted Newsreader/Inter/JetBrains Mono under OFL-1.1
- **Guided onboarding**`/linkedin:onboarding` walks new users through profile → setup → first post in one flow
@ -233,7 +234,7 @@ v2.2.0 **hardens the longform gates** with the lessons from the second `/linkedi
Key commands: `/linkedin:onboarding`, `/linkedin:post`, `/linkedin:quick`, `/linkedin:newsletter`, `/linkedin:carousel`, `/linkedin:react`, `/linkedin:report`
14 specialized agents · 24 commands · 6 skills · 9 hooks · 24 reference docs
15 specialized agents · 24 commands · 6 skills · 9 hooks · 24 reference docs
→ [Full documentation](plugins/linkedin-thought-leadership/README.md)