feat(linkedin): v2.1.0 — skeleton + spine-prose gates BEFORE prose in /linkedin:newsletter

Two new pipeline phases gate the spine before any prose is written:

- Step 2.5 — Skeleton + section pitch: writes <serie>/NN-skjelett.md with
  the five-line spine (premiss / problem / anbefaling / gevinst / vei
  videre) + one-line section pitches. Operator-gate (JA / REVIDER / NEI)
  AND parallel persona-skjelett-sweep must both return JA before the
  pipeline can advance.
- Step 3a — Spine prose: one paragraph per section against the gated
  skeleton, ~20-30% of final edition length. Operator-gate on whether the
  axis lands now that there is prose on it. Old Step 3 (Draft) split into
  3a (spine) and 3b (full expansion); 3b owns the multi-session
  draft-cursor logic.

Third persona-reviewer mode added: skjelett (alongside resonans + konverter).
Five spine axes scored HOLDER / TVILER / MANGLER, max 3 direction-only flags,
per-pitch section-pay-in check. Reads the skeleton + pitches only.

Pipeline grows from 11 to 13 phases; commands (24) and agents (14) counts
unchanged. Encodes the Maskinrommet writing-contract section A discipline
(premiss / problem / anbefaling / gevinst / vei videre) into the pipeline.

Empirically motivated by the Seres-serien Del 3 + Del 4 production:
a spine error caught at the skeleton stage costs 5-15 min, the same
error caught at Step 6 (resonance) costs 4-12 h, post-lock it costs a
day of cascading rework (delingstekst, hooks, carousel, doc refs).

Backward-compatible: existing editions stop at currentPhase: "research"
and now resume at Step 2.5 instead of Step 3 — an intended deterministic
improvement, never a contract break. Steps 1, 2, 4-10 bit-for-bit
unchanged. Renderers (build-html.mjs, build-linkedin.mjs) untouched.

New phase strings in edition-state.template.json _doc.phases:
- skeleton-pitch (between research and draft)
- spine-prose (between skeleton-pitch and draft)

Files changed (10):
- plugin.json: 2.0.0 -> 2.1.0
- CHANGELOG.md: new [2.1.0] entry
- CLAUDE.md (plugin + marketplace): pipeline 11->13 phases noted
- README.md (plugin + marketplace): What's New v2.1.0 + version row
- agents/persona-reviewer.md: third mode skjelett added; resonans + konverter unchanged
- commands/newsletter.md: Step 2.5 + 3a + 3b sections, resumption + pipeline tables
- config/edition-state.template.json: 11 -> 13 phases in _doc.phases
- references/longform-quality-rules.md: Rule 8 (Skjelett foer prosa)

Verification: 9/9 criteria PASS pre-commit. Phase strings consistent
across template + command + resumption table. Renderer files git-untouched.
All 11 original step headings preserved (Step 0/1/2/4-10).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
Kjell Tore Guttormsen 2026-05-28 10:09:47 +02:00
commit 2a27a7cd6a
10 changed files with 615 additions and 141 deletions

View file

@ -117,15 +117,43 @@ Ask once if the Step 1 brief did not already settle it. Do not assume an
aggressiveness; the same draft can be tightened conservatively or aggressively and
the operator owns that dial.
### 8. Skjelett før prosa (skeleton before prose — pre-condition for every other rule)
The argument-line — premiss, problem, anbefaling, gevinst, vei videre — must
be **explicit, visible, and confirmed** before the first sentence of prose is
written. None of the other rules can bite reliably on a draft whose spine was
never declared: Rule 1 (leder-takeaway) and Rule 2 (premiss→konklusjon-bue) in
particular collapse into post-hoc reconstruction if the spine was never gated.
- Write the five-line skeleton (premiss / problem / anbefaling / gevinst / vei
videre) and the section pitches **before any prose**. Both the operator and
the persona-skjelett-sweep (`persona-reviewer` mode: skjelett) must say JA on
this skeleton before Step 3a (spine prose) starts.
- A spine error caught at the skeleton stage costs 515 min; the same error
caught at Step 6 (resonance) costs 412 h; caught post-lock it costs a day
of cascading rework. The cheapest gate is also the earliest.
- The skeleton format is **identical to the Maskinrommet writing-contract §A**
(premiss / problem / anbefaling / gevinst / vei videre). Pipeline editions
produced through `/linkedin:newsletter` therefore satisfy that contract at
the structural level by construction.
**Pass/flag:** PASS when the skeleton + pitches exist as `<serie>/NN-skjelett.md`
and both the operator-gate AND the persona-skjelett-sweep returned JA before
prose started; FLAG retroactively if a draft turns out to have skipped this gate
(treat as a process miss and harvest the lesson — do not retrofit a skeleton
to a finished draft and call it gated).
---
## How the pipeline uses these rules
| Phase | Where the rules bite |
|-------|----------------------|
| Step 4 — Consistency + quality | Primary enforcement: apply rules 16, calibrate per rule 7, report a pass/flag per rule. |
| Step 2.5 — Skeleton + section pitch | Primary enforcement of rule 8: skeleton + pitches MUST exist and be JA from operator + persona-skjelett-sweep before prose. |
| Step 3a — Spine prose | Rule 6 applies even within spine prose (tighten, don't expand the spine); rule 8 is the gate that lets 3a start. |
| Step 4 — Consistency + quality | Primary enforcement: apply rules 16, calibrate per rule 7, report a pass/flag per rule. Rule 8 is verified as historical fact (skeleton existed + was gated). |
| Step 5 — Fact-check sweep | Fixes obey rule 6 (tighten, don't expand). |
| Step 6 — Persona sweep (pre-lock) | Rework obeys rule 6; the leader-takeaway (rule 1) and arc (rule 2) are what the reader jury judges for resonance. |
| Step 6 — Persona sweep (pre-lock) | Rework obeys rule 6; the leader-takeaway (rule 1) and arc (rule 2) are what the reader jury judges for resonance. A draft that passed rule 8 typically lands here with far fewer spine-level reworks. |
| Step 9 — Hook / conversion gate | Hook revisions obey rule 6 (sharpen the krok by tightening, body stays locked). |
## Self-certification boundary