feat(linkedin): v2.4.0 — editorial-reviewer agent + Step 5.5 craft gate in /linkedin:newsletter
Endring 8 from the change spec (Del 4 production, Maskinrommet). The persona resonance sweep measures reader-response (does it land?); nothing measured prose craft or narrative architecture (is it well-made?). In Del 4 every persona reported PASS, yet the editor found 8 fresh editorial points on first reading — ~6/8 craft/architecture blind spots no agent could see. v2.4.0 adds the missing editor role. New Step 5.5 (editorial-review) runs between fact-check (Step 5) and the persona sweep (Step 6): a new editorial-reviewer agent (Opus) judges two axes — prosa-handverk (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). Returns <=10 flags as direction (never copy), each BLOCK/REWORK/NICE, operator-gated via SendUserFile. Runs before the persona sweep so the personas measure resonance instead of stumbling on craft noise. Mirrors the Maskinrommet writing-contract section C2 (bidirectional mirror rule). - agents/editorial-reviewer.md (NEW, Opus, orange) + fasit fixture (editorial-reviewer-cases.md: Del 4 v5 gold standard, 8 points -> 2 axes + severities, 3 BLOCK / 5 REWORK, 6/8 blind spots) + structural lint (7 tests). - Step 5.5 wired into commands/newsletter.md; pipeline 14 -> 15 phases. - editorial-review phase + additive editorialReview state in config/edition-state.template.json; resumption: factcheck-sweep -> Step 5.5, editorial-review -> Step 6 (spec said fact-check; canonical key is factcheck-sweep). - persona-reviewer contract unchanged: editorial-reviewer is supplementary (one measures craft, one measures response). - All doc levels synced (plugin + root README/CLAUDE.md, CHANGELOG, plugin.json 2.3.0 -> 2.4.0; agents 15 -> 16). 94 tests green. Acceptance-criterion #8 (live run on Del 4 v5) delivered as fasit fixture: a live run needs a session reload (new agent not invokable until then) + read access to the Del 4 v5 draft in Maskinrommet. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
7ebd28cb0b
commit
9df3de795c
11 changed files with 714 additions and 28 deletions
|
|
@ -5,6 +5,30 @@ All notable changes to this project will be documented in this file.
|
|||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [2.4.0] - 2026-05-29
|
||||
|
||||
### Summary
|
||||
An **editor's craft gate** becomes an explicit pipeline phase in `/linkedin:newsletter`. The Del 4 production run (Maskinrommet, 2026-05-28) exposed a gap: the persona resonance sweep returned 15 flags across three personas and *every persona reported PASS / ready-to-publish* — yet the editor (KTG) found **eight fresh editorial points on first reading**, and only ~25 % overlapped anything the personas had touched. The other six — a missing theory anchor (SDT), a broken series-title link, a stranded small-business addressee, verbatim repetitions, em-dash over-density, an internal contradiction — were **craft and narrative-architecture blind spots no agent measured.** `persona-reviewer` measures *reader response* (does it land?); it does not measure *prose craft* or *narrative architecture* (is it well-made?). Two different roles; only one existed. A persona PASS was mis-reporting "ready for the editor's reading", costing an extra editorial round per article. v2.4.0 adds **Step 5.5 — Editorial review**, between fact-check (Step 5) and the persona sweep (Step 6), and a new **`editorial-reviewer` agent** (Opus) that mirrors the Maskinrommet writing-contract §C2. Pipeline 14 → 15 phases; 15 → 16 agents. Backward-compatible: the only state-shape change is additive (`editorialReview`), and existing editions resume by `currentPhase` (`factcheck-sweep` now resumes at Step 5.5 instead of Step 6 — an intended deterministic improvement). Doc/orchestration-only for the pipeline wiring; the new agent + its fasit fixture + structural lint test are the only new files.
|
||||
|
||||
### Added
|
||||
- **`agents/editorial-reviewer.md`** (new, Opus, orange) — an **editor**, not a reader. Judges two axes: **prosa-håndverk** (P1 em-dash density · P2 verbatim repetition · P3 postulated numbers without source/hedge · P4 internal contradiction · P5 versal-tic — mostly grep-able) and **narrativ-arkitektur** (A1 concrete instantiation · A2 theory-anchored hypotheses · A3 series-title symmetry · A4 equally-usable action per addressee · A5 un-overloaded conclusion — evaluative). Returns **≤10 flags** as direction (never rewritten copy — the jury judges, the writer writes), each with a quote/line-ref and a **severity: BLOCK / REWORK / NICE**. Tools `Read` + `Grep`. The checklist is the operationalized mirror of the **Maskinrommet skrivekontrakt §C2** (bidirectional mirror rule: §C2 is the source of truth). *New agent — requires a session reload before it is invokable.*
|
||||
- **Step 5.5 — Editorial review** in `commands/newsletter.md`, between Step 5 (fact-check) and Step 6 (persona sweep). Runs a single foreground `editorial-reviewer` `Task` call, writes the report to `<serie>/NN-editorial-review.md`, surfaces it to the operator via **`SendUserFile`** (the Endring-5 / Step-7.5 operator-gate pattern), folds approved flags in **by tightening** (rule 6) → v(n+1), and optionally re-runs the agent on the cleaned version. **Why before the persona sweep:** the personas measure response — if the prose is locally messy the persona flags become noise; clean the craft first so Step 6 measures what it was built to measure.
|
||||
- **`editorial-review` phase string** + **`articles.NN.editorialReview` schema** + **`_doc.editorialReview` note** in `config/edition-state.template.json` `_doc.phases` (14 → 15 phases). Additive; `editorialReview: null` until Step 5.5 runs. The craft companion to `factcheckLog` (truth) and `personaSweep` (response).
|
||||
- **`agents/fixtures/editorial-reviewer-cases.md`** (new) — fasit fixture: the Del 4 v5 gold standard. KTG's eight editorial points mapped to the two axes + severities (3 BLOCK / 5 REWORK), with the persona-overlap column showing 6/8 were editorial-only blind spots. The calibration target for acceptance-criterion #8 (a live run needs a session reload + Maskinrommet read access; until then the fixture is the gold-standard of record).
|
||||
- **`agents/__tests__/editorial-reviewer-fixture.test.mjs`** (new) — structural lint mirroring the persona-reviewer / fact-checker fixture tests: asserts both axes, all ten checks (P1–P5 + A1–A5), the three severities, the eight Del 4 cases, the §C2 tie, the direction-not-copy boundary, and the blind-spot rationale. 7 tests, green.
|
||||
|
||||
### Changed
|
||||
- **`/linkedin:newsletter` pipeline overview** — 14 → 15 phases; the overview table, build-status note, and reference-file list reflect Step 5.5.
|
||||
- **Resumption table** in `commands/newsletter.md` — `currentPhase: "factcheck-sweep"` now resumes at **Step 5.5** (was Step 6); new `editorial-review` row resumes at Step 6. (Spec said `currentPhase: "fact-check"`; the canonical key in this plugin is `factcheck-sweep` — wired to the real key.)
|
||||
- **Step 5 hand-off + ordering note** — fact-check now hands off to Step 5.5; the BEFORE-lock note names editorial review (5.5) and the persona sweep (6) as the two gates the fact-check precedes.
|
||||
- **Step 6 intro** — now reads on the "editorially-cleaned, fact-checked draft"; the persona sweep judges response, not craft (that was 5.5).
|
||||
- README, CLAUDE.md, root README, root CLAUDE.md, plugin.json version + descriptions.
|
||||
|
||||
### Not changed (explicit non-deltas)
|
||||
- **`persona-reviewer` contract** — bit-for-bit unchanged. Editorial review is *supplementary*: one agent measures craft (5.5), one measures response (6). The role boundary is sharp — `editorial-reviewer` never flags "this won't resonate", `persona-reviewer` never flags em-dash density.
|
||||
- **Steps 0–5, 6 body, 7, 7.5, 8–10** — contract unchanged apart from the Step 5→5.5→6 wiring and the Step 6 intro line.
|
||||
- **Renderers, hooks, scripts, command count (24)** — all unchanged. No new `.mjs` runtime code (the only new code is the fixture lint test).
|
||||
|
||||
## [2.3.0] - 2026-05-28
|
||||
|
||||
### Summary
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue