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:
parent
e162cdce38
commit
e69ea1f4c9
20 changed files with 2520 additions and 59 deletions
|
|
@ -6,20 +6,21 @@
|
|||
|
||||
*AI-generated: all code produced by Claude Code through dialog-driven development. [Full disclosure →](../../README.md#ai-generated-code-disclosure)*
|
||||
|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||
|
||||
A comprehensive Claude Code plugin that turns LinkedIn from a chore into a full-spectrum content engine — short-form feed posts, carousels, video scripts, and long-form newsletter editions. v2.0.0 consolidated the surface (27 → 24 commands, 16 → 14 agents) and added `/linkedin:newsletter` as a multi-session long-form orchestrator with fact-check + persona-sweep gates BEFORE lock. **v2.1.0** adds two more gates BEFORE prose to `/linkedin:newsletter` — a skeleton gate (Step 2.5) and a spine-prose gate (Step 3a) — encoding the Maskinrommet writing-contract §A discipline (premiss / problem / anbefaling / gevinst / vei videre) into the pipeline itself, so spine errors get caught in minutes at the skeleton stage instead of hours at the resonance stage or a full day post-lock. v2.2.0 hardened the longform gates with the lessons from the next production run: blocking persona hard-fails (primær «mistet meg» / doesn't own the action / jargon wall / model-name catalog → BLOCK), a post-cutoff fact-check mandate, a new Norwegian-chronicle de-AI voice-scrubber agent, render+annotate operator gates, and edition state reconciled with the global STATE.md continuity system. v2.3.0 makes visual assets an explicit pipeline phase — **Step 7.5 (visual-assets)** between annotation and lock: the cover (+ optional inline figures) or a carousel deck is generated and operator-gated *before* lock, so the renderer picks up `cover.png` without a post-lock re-render. **v2.4.0** adds an **editor's craft gate** — new **Step 5.5 (editorial-review)** between fact-check and the persona sweep: a new `editorial-reviewer` agent (Opus) judges *craft* (prose-craft + narrative-architecture), not reader-response, returning ≤10 flags (BLOCK / REWORK / NICE) operator-gated via `SendUserFile` so the personas measure resonance instead of stumbling on craft noise (pipeline 14 → 15 phases). 24 slash commands, 16 specialized agents, 9 automated hooks, and a 24-document knowledge base grounded in LinkedIn's actual algorithm signals. Updated for the January 2026 **360Brew** algorithm change, where LinkedIn now validates your profile before distributing content.
|
||||
A comprehensive Claude Code plugin that turns LinkedIn from a chore into a full-spectrum content engine — short-form feed posts, carousels, video scripts, and long-form newsletter editions. v2.0.0 consolidated the surface (27 → 24 commands, 16 → 14 agents) and added `/linkedin:newsletter` as a multi-session long-form orchestrator with fact-check + persona-sweep gates BEFORE lock. **v2.1.0** adds two more gates BEFORE prose to `/linkedin:newsletter` — a skeleton gate (Step 2.5) and a spine-prose gate (Step 3a) — encoding the Maskinrommet writing-contract §A discipline (premiss / problem / anbefaling / gevinst / vei videre) into the pipeline itself, so spine errors get caught in minutes at the skeleton stage instead of hours at the resonance stage or a full day post-lock. v2.2.0 hardened the longform gates with the lessons from the next production run: blocking persona hard-fails (primær «mistet meg» / doesn't own the action / jargon wall / model-name catalog → BLOCK), a post-cutoff fact-check mandate, a new Norwegian-chronicle de-AI voice-scrubber agent, render+annotate operator gates, and edition state reconciled with the global STATE.md continuity system. v2.3.0 makes visual assets an explicit pipeline phase — **Step 7.5 (visual-assets)** between annotation and lock: the cover (+ optional inline figures) or a carousel deck is generated and operator-gated *before* lock, so the renderer picks up `cover.png` without a post-lock re-render. **v2.4.0** adds an **editor's craft gate** — new **Step 5.5 (editorial-review)** between fact-check and the persona sweep: a new `editorial-reviewer` agent (Opus) judges *craft* (prose-craft + narrative-architecture), not reader-response, returning ≤10 flags (BLOCK / REWORK / NICE) operator-gated via `SendUserFile` so the personas measure resonance instead of stumbling on craft noise (pipeline 14 → 15 phases). **v3.1.0** adds a **cold adversarial review package** as **Step 6.5 (headless-review)** in `/linkedin:newsletter` — three new headless archetypes (`content-reviewer`, `language-reviewer`, `fact-reviewer`) that re-review a frozen draft with NO drafting-session context, surfaced standalone via the new `/linkedin:headless-review` command (run in a fresh session for maximum isolation), plus a `/linkedin:pivot` command + pivot-detection gate that re-opens cleared gates after a late change, and per-artifact personas configurable per edition (pipeline 15 → 16 phases). 26 slash commands, 19 specialized agents, 9 automated hooks, and a 24-document knowledge base grounded in LinkedIn's actual algorithm signals. Updated for the January 2026 **360Brew** algorithm change, where LinkedIn now validates your profile before distributing content.
|
||||
|
||||
---
|
||||
|
||||
## Table of Contents
|
||||
|
||||
- [What's New in v3.1.0](#whats-new-in-v310)
|
||||
- [What's New in v3.0.0](#whats-new-in-v300)
|
||||
- [What's New in v2.4.0](#whats-new-in-v240)
|
||||
- [What's New in v2.3.0](#whats-new-in-v230)
|
||||
|
|
@ -44,6 +45,20 @@ A comprehensive Claude Code plugin that turns LinkedIn from a chore into a full-
|
|||
|
||||
---
|
||||
|
||||
## What's New in v3.1.0
|
||||
|
||||
**An adversarial review package becomes part of the long-form pipeline (Endring 9).** The Del 4 production run (the Security Champions pivot) shipped a high-quality article, but its quality assurance leaned on one good editor plus the operator's availability to re-read it several times — it did not scale. The root cause: the editor (Step 5.5) and the persona sweep (Step 6) ran *in the same session as drafting*, sharing the conversation history (which versions passed, what was cut, which flags were raised). They carried the drafting session's **framing-bias** and were therefore not independent. Three symptoms followed: the resonance sweep effectively judged an early version rather than the one that shipped, editor-approval was single-source, and the fact-check was post-hoc relative to a late pivot — so the pivot could build on an unverified premise.
|
||||
|
||||
v3.1.0 answers the operator's explicit question — *how do I start sessions with no context from the main session, to review both content and language?* — with a **cold review package** that reconstructs everything from disk and refuses the drafting session's framing as "context pollution".
|
||||
|
||||
- **Three new headless review archetypes** (all Opus, cold/headless): **`content-reviewer`** (maroon — argument integrity: C1 logical holes · C2 unsupported assumptions · C3 argument contradiction · C4 missing concretization · C5 unanswered objection; ≤8 flags), **`language-reviewer`** (navy — Norwegian language: L1 verbatim repetition · L2 anglicisms · L3 stiff bureaucratic register · L4 language-level self-contradiction · L5 clang/rhythm; ≤10 flags; a deliberate cold re-take of the editorial prose axis), and **`fact-reviewer`** (gold — cold re-verification on the frozen/pivoted version via web search: F1 verifiable claims · F2 quote precision · F3 number attribution · F4 source quality; 🔴/🟡/🟢 + a pivot-risk subsection; deliberate redundancy with `fact-checker` to catch a pivot premise that arrived after Step 5).
|
||||
- **New `/linkedin:headless-review` command** — runs the cold package on a FROZEN draft, designed to be invoked in a **fresh session** for maximum isolation (the parent then has no drafting transcript) and reconstructs the draft + writing contract + personas from disk.
|
||||
- **New Step 6.5 (headless-review)** in `/linkedin:newsletter` — fans the package out in parallel after the in-session persona sweep (Step 6), on a frozen draft snapshot, BEFORE lock; the independence layer the in-session gates cannot be. Converged flags (two independent cold reviewers agreeing) are the strongest signal.
|
||||
- **New `/linkedin:pivot` command + pivot-detection gate** — a late change re-opens the cleared gates (fact-check → editorial → persona → headless) so they re-run on the changed version before lock. Heuristic: a draft that drifted **> 20 % in word count OR gained > 2 sections** since Step 6 cleared fires the gate (enforced as a Step 8 lock precondition).
|
||||
- **Per-artifact personas** (`articles.NN.personas`) — one or more readers configurable **per edition**, resolved in order (edition-state → `<serie>/linkedin/personas.md` per-series file → plugin library/template → interactive definition); feeds both the Step 6 sweep and the Step 6.5 package.
|
||||
|
||||
Counts: 24 → 26 commands; 16 → 19 agents; newsletter pipeline 15 → 16 phases. **Backward-compatible** — every state-shape change is additive (`personas`/`pivots`/`headlessReview`); existing editions resume by `currentPhase`. **Reload required** before the three new agents resolve (the plugin agent set is built at session start).
|
||||
|
||||
## What's New in v3.0.0
|
||||
|
||||
**The plugin is renamed `linkedin-thought-leadership` → `linkedin-studio` ("LinkedIn Thought Leadership" → LinkedIn Studio).** The old display title read as pompous; the new name is plain and matches how the plugin already describes itself — a *LinkedIn content engine*. This is a **breaking** release because the identity changes at three levels, but **no functionality changes** — v3.0.0 is byte-for-byte v2.4.0 under a new name.
|
||||
|
|
@ -203,7 +218,7 @@ The wizard handles everything: 360Brew profile checklist, voice and user profile
|
|||
|
||||
## Commands
|
||||
|
||||
All 24 commands use colon notation: `/linkedin:post`, `/linkedin:quick`, etc.
|
||||
All 26 commands use colon notation: `/linkedin:post`, `/linkedin:quick`, etc.
|
||||
|
||||
### Onboarding
|
||||
|
||||
|
|
@ -257,7 +272,7 @@ All 24 commands use colon notation: `/linkedin:post`, `/linkedin:quick`, etc.
|
|||
|
||||
## Agent Architecture
|
||||
|
||||
The plugin delegates specialized work to 16 purpose-built agents. Each agent has its own model assignment, color identity, and focused responsibility.
|
||||
The plugin delegates specialized work to 19 purpose-built agents. Each agent has its own model assignment, color identity, and focused responsibility.
|
||||
|
||||
| Agent | Model | Color | Primary Responsibility |
|
||||
|-------|-------|-------|----------------------|
|
||||
|
|
@ -277,6 +292,9 @@ The plugin delegates specialized work to 16 purpose-built agents. Each agent has
|
|||
| `editorial-reviewer` | Opus | Orange | Editor's craft gate (v2.4, Step 5.5, before persona sweep): **prosa-håndverk** + **narrativ-arkitektur**, ≤10 flags BLOCK/REWORK/NICE as direction, operator-gated via `SendUserFile`; mirrors Maskinrommet §C2 (longform) |
|
||||
| `persona-reviewer` | Opus | Olive | Reader-persona **skeleton** (v2.1, before prose) + **resonance** (before lock) + **hook-conversion** (after lock) gate, blocking hard-fail list (longform) |
|
||||
| `voice-scrubber` | Opus | Red | De-AI scrub + Norwegian-chronicle voice-drift correction; gold standard = approved Norwegian editions, not the English post corpus (longform, v2.2) |
|
||||
| `content-reviewer` | Opus | Maroon | (v3.1, Step 6.5 — cold/headless) Argument integrity: C1 logical holes · C2 unsupported assumptions · C3 argument contradiction · C4 missing concretization · C5 unanswered objection; ≤8 flags BLOCK/REWORK/NICE; refuses drafting-session framing as context pollution (longform) |
|
||||
| `language-reviewer` | Opus | Navy | (v3.1, Step 6.5 — cold/headless) Norwegian language: L1 verbatim repetition · L2 anglicisms · L3 stiff bureaucratic register · L4 language-level self-contradiction · L5 clang/rhythm; ≤10 flags; deliberate cold re-take of editorial's prose axis (longform) |
|
||||
| `fact-reviewer` | Opus | Gold | (v3.1, Step 6.5 — cold/headless) Cold re-verification on the frozen/pivoted version (web search): F1 verifiable claims · F2 quote precision · F3 number attribution · F4 source quality; 🔴/🟡/🟢 + pivot-risk; deliberate redundancy with `fact-checker` to catch a pivot premise that arrived after Step 5 (longform) |
|
||||
|
||||
### Content Pipeline
|
||||
|
||||
|
|
@ -294,7 +312,7 @@ trend-spotter --> content-planner --> differentiation-checker --> content-optimi
|
|||
|
||||
Parallel support agents: `strategy-advisor`, `analytics-interpreter`, `network-builder`, `content-repurposer`, `video-scripter`.
|
||||
|
||||
Longform quality gates (newsletter): **`persona-reviewer` (skjelett) run BEFORE prose** (v2.1, Step 2.5) → `voice-scrubber` de-AI / chronicle-voice scrub (v2.2, Step 4) → `fact-checker` (Step 5) → **`editorial-reviewer` craft gate run BEFORE the persona sweep** (v2.4, Step 5.5) → `persona-reviewer` (resonance) run BEFORE lock (Step 6) → `persona-reviewer` (conversion) run AFTER lock on the hook (Step 9).
|
||||
Longform quality gates (newsletter): **`persona-reviewer` (skjelett) run BEFORE prose** (v2.1, Step 2.5) → `voice-scrubber` de-AI / chronicle-voice scrub (v2.2, Step 4) → `fact-checker` (Step 5) → **`editorial-reviewer` craft gate run BEFORE the persona sweep** (v2.4, Step 5.5) → `persona-reviewer` (resonance) run BEFORE lock (Step 6) → **headless adversarial review package run COLD BEFORE lock** (v3.1, Step 6.5: `content-reviewer` + `language-reviewer` + `fact-reviewer` + `persona-reviewer`) → `persona-reviewer` (conversion) run AFTER lock on the hook (Step 9).
|
||||
|
||||
> **Note (agent invocation + reload):** Commands invoke agents by their **namespaced**
|
||||
> type — `subagent_type: linkedin-studio:<name>`, never the bare name. And a
|
||||
|
|
@ -604,6 +622,7 @@ Scheduled posts are tracked in `assets/drafts/queue.json`:
|
|||
|
||||
| Version | Date | Highlights |
|
||||
|---------|------|-----------|
|
||||
| **3.1.0** | 2026-05-29 | Adversarial review package (Endring 9). New **`/linkedin:headless-review`** command + **Step 6.5 (headless-review)** in `/linkedin:newsletter`: three cold/headless archetypes — **`content-reviewer`** (argument), **`language-reviewer`** (Norwegian), **`fact-reviewer`** (cold re-verification + pivot-risk) — plus `persona-reviewer` (resonance/conversion), all with NO drafting-session context. New **`/linkedin:pivot`** command + pivot-detection gate (> 20 % word-count / > 2 new sections re-opens cleared gates before lock). **Per-artifact personas** (`articles.NN.personas`). Pipeline 15 → 16 phases; 24 → 26 commands; 16 → 19 agents; additive `personas`/`pivots`/`headlessReview` state. Backward-compatible; reload required for the new agents. |
|
||||
| **3.0.0** | 2026-05-29 | **Renamed** `linkedin-thought-leadership` → `linkedin-studio` ("LinkedIn Thought Leadership" → **LinkedIn Studio**). Breaking (slug + agent namespace `linkedin-studio:<agent>` + runtime state path `~/.claude/linkedin-studio.local.md` all change; reinstall required, state migrated in place), but **functionality byte-identical to v2.4.0**. The `/linkedin:*` commands are unchanged (frontmatter-namespaced, slug-independent). Catch-all skill dir renamed to match (`skills/linkedin-studio/`); the five functional skills unchanged. |
|
||||
| **2.4.0** | 2026-05-29 | Editor's craft gate as an explicit pipeline phase. New **`editorial-reviewer` agent** (Opus) + **Step 5.5 — Editorial review** in `/linkedin:newsletter` (between fact-check and the persona sweep): two axes — **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); ≤10 flags BLOCK/REWORK/NICE as direction; operator-gated via `SendUserFile`; mirrors Maskinrommet §C2. Motivated by Del 4 (every persona PASS, yet 8 fresh editor points, ~6/8 craft/architecture blind spots). `editorial-review` phase + additive `editorialReview` state. Pipeline 14 → 15 phases; 15 → 16 agents. New agent + fasit fixture + lint test the only new files; commands (24) unchanged. |
|
||||
| **2.3.0** | 2026-05-28 | Visual assets as an explicit pipeline phase. New **Step 7.5 — Visual assets** in `/linkedin:newsletter` (between annotation and lock): cover (+ optional inline figures) or carousel deck, generated (default `mcp-image`; external `cover-raw.png` accepted) and operator-gated via `SendUserFile` BEFORE lock so `build-linkedin.mjs` picks up `cover.png` without a post-lock re-render. Explicit `format: "carousel"` branch reusing `build-carousel.mjs`. New `config/image-credit-caption.template.md`; additive `visualAssets` state + naming convention (`cover.png` / `cover-v<N>-kandidat.png` / `cover-raw.png` / `fig<N>.png`). Pipeline 13 → 14 phases. Doc/orchestration-only (no new code); commands (24) + agents (15) unchanged. |
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue