feat(linkedin-studio): v3.1.0 — Endring 9 adversarial review-pakke + per-artefakt personas

Cold, adversarial review package for the long-form pipeline + configurable
per-edition personas. Motivated by Del 4 (Security Champions pivot): the
in-session editor + persona sweep shared the drafting session's framing-bias,
so the shipped version was never independently re-reviewed.

Headless package (9a/9b):
- New Step 6.5 (headless-review) in /linkedin:newsletter, after the persona
  sweep, before lock — the independence layer the in-session gates can't be.
- New standalone /linkedin:headless-review command (run in a fresh session for
  maximum isolation; reconstructs frozen draft + contract + personas from disk).
- 3 new Opus archetypes, each with a cardinal context-isolation block that
  refuses drafting-session framing as "context pollution":
  - content-reviewer (argument integrity C1–C5, ≤8 flags)
  - language-reviewer (Norwegian language L1–L5, ≤10 flags)
  - fact-reviewer (cold re-verification F1–F4, risk-sort + pivot-risk, WebSearch)
- Deliberate redundancy with fact-checker / editorial-reviewer documented so
  the pairs are never de-duplicated.

Pivot-reopen (9c):
- New /linkedin:pivot command: logs articles.NN.pivots[], resets currentPhase,
  un-locks, marks gates to re-run.
- Pivot-detection gate in Step 8 lock precondition (>20% word-count change or
  >2 new sections re-opens cleared gates). Del 4 v8→v11 worked example.

Per-artifact personas (new requirement):
- articles.NN.personas with resolution order (edition-state → series file →
  plugin library → interactive). One or more readers configurable per edition.

Schema/docs:
- edition-state.template.json: additive personas[], pivots[], headlessReview,
  headless-review phase (16 phases); personaSweep.resonance.wordCount baseline.
- 3 fasit fixtures + 3 structural lint tests (Del 4 worked cases).
- Counts: 24→26 commands, 16→19 agents, 15→16 newsletter phases.
- README + CLAUDE.md (plugin + root) + CHANGELOG synced.

Verification: 35 agent-fixture + 59 hook + 20 render tests green. Backward-
compatible (additive state); reload required before the 3 new agents resolve.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Kjell Tore Guttormsen 2026-05-29 13:01:24 +02:00
commit e69ea1f4c9
20 changed files with 2520 additions and 59 deletions

View file

@ -206,11 +206,11 @@ Key commands: `/architect`, `/architect:ros`, `/architect:security`, `/architect
---
### [LinkedIn Studio](plugins/linkedin-studio/) `v3.0.0`
### [LinkedIn Studio](plugins/linkedin-studio/) `v3.1.0`
Build authentic LinkedIn authority through algorithmic understanding, strategic consistency, and AI-assisted content creation.
**v3.0.0 renames the plugin to LinkedIn Studio** (was `linkedin-thought-leadership`): the slug, agent namespace, and runtime state-file path are now `linkedin-studio` — the `/linkedin:*` commands are unchanged. Breaking: reinstall required and the state file moves to `~/.claude/linkedin-studio.local.md`. Functionality is identical to v2.4.0. v2.4.0 adds an **editor's craft gate as an explicit pipeline phase** in `/linkedin:newsletter`: a new **`editorial-reviewer` agent** (Opus) + **Step 5.5 (editorial-review)** between fact-check (Step 5) and the persona sweep (Step 6). It judges **craft****prosa-håndverk** (em-dash density, verbatim repetition, postulated numbers, contradictions, versal-tic) + **narrativ-arkitektur** (concrete instantiation, theory-anchored hypotheses, series-title symmetry, equal action per addressee, un-overloaded conclusion) — not reader-response, returning **≤10 flags** (BLOCK / REWORK / NICE) as *direction* (never copy), operator-gated via `SendUserFile`, mirroring the Maskinrommet writing-contract §C2. Motivated by the Del 4 run, where **every persona reported PASS yet the editor found 8 fresh points on first reading, ~6/8 of them craft/architecture blind spots no agent measured.** Pipeline 14 → 15 phases; 15 → 16 agents; additive `editorialReview` state. v2.3.0 made **visual assets an explicit pipeline phase** (Step 7.5, between annotation and lock): 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**. v2.2.0 **hardened the longform gates** (blocking persona hard-fails, post-cutoff fact-check mandate, a Norwegian-chronicle `voice-scrubber`, render+annotate operator gates, STATE.md-reconciled edition state). Commands unchanged (24); 16 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.
**v3.1.0 adds a cold adversarial review package to the long-form pipeline (Endring 9)** — three new headless archetypes (`content-reviewer` argument, `language-reviewer` Norwegian, `fact-reviewer` cold re-verification + pivot-risk), all Opus, that re-review a frozen draft with NO drafting-session context; a new **Step 6.5 (headless-review)** in `/linkedin:newsletter` after the persona sweep and before lock; a standalone **`/linkedin:headless-review`** command (run in a fresh session for maximum isolation); a **`/linkedin:pivot`** command + pivot-detection gate (> 20 % word-count / > 2 new sections re-opens cleared gates before lock); and **per-artifact personas** configurable per edition. Motivated by the Del 4 Security Champions pivot, where the in-session editor + persona sweep shared the drafting session's framing-bias so the shipped version was never independently re-reviewed. Pipeline 15 → 16 phases; 24 → 26 commands; 16 → 19 agents; backward-compatible (additive state); reload required for the new agents. **v3.0.0 renames the plugin to LinkedIn Studio** (was `linkedin-thought-leadership`): the slug, agent namespace, and runtime state-file path are now `linkedin-studio` — the `/linkedin:*` commands are unchanged. Breaking: reinstall required and the state file moves to `~/.claude/linkedin-studio.local.md`. Functionality is identical to v2.4.0. v2.4.0 adds an **editor's craft gate as an explicit pipeline phase** in `/linkedin:newsletter`: a new **`editorial-reviewer` agent** (Opus) + **Step 5.5 (editorial-review)** between fact-check (Step 5) and the persona sweep (Step 6). It judges **craft****prosa-håndverk** (em-dash density, verbatim repetition, postulated numbers, contradictions, versal-tic) + **narrativ-arkitektur** (concrete instantiation, theory-anchored hypotheses, series-title symmetry, equal action per addressee, un-overloaded conclusion) — not reader-response, returning **≤10 flags** (BLOCK / REWORK / NICE) as *direction* (never copy), operator-gated via `SendUserFile`, mirroring the Maskinrommet writing-contract §C2. Motivated by the Del 4 run, where **every persona reported PASS yet the editor found 8 fresh points on first reading, ~6/8 of them craft/architecture blind spots no agent measured.** Pipeline 14 → 15 phases; 15 → 16 agents; additive `editorialReview` state. v2.3.0 made **visual assets an explicit pipeline phase** (Step 7.5, between annotation and lock): 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**. v2.2.0 **hardened the longform gates** (blocking persona hard-fails, post-cutoff fact-check mandate, a Norwegian-chronicle `voice-scrubber`, render+annotate operator gates, STATE.md-reconciled edition state). Commands unchanged (24); 16 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.
- **Editorial-review craft gate BEFORE the persona sweep (v2.4)** — Step 5.5 runs the new `editorial-reviewer` (Opus) on the fact-checked draft, two axes (prosa-håndverk + narrativ-arkitektur), ≤10 flags severity-ranked BLOCK/REWORK/NICE, surfaced to the operator via `SendUserFile`. It runs *before* the persona sweep so the personas measure resonance instead of stumbling on craft noise; `persona-reviewer` is unchanged (one measures craft, one measures response). Mirrors Maskinrommet §C2.
- **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`.