linkedin-studio/tests/fixtures/editorial-reviewer-cases.md
Kjell Tore Guttormsen 9111f006cc refactor(linkedin-studio): move agent fasit fixtures + tests out of agents/ (v0.5.3)
The 6 long-form-review fasit fixtures (agents/fixtures/*-cases.md) were registered
by Claude Code as junk `fixtures:*` agents because agents/ is scanned recursively.
They are test fixtures, not capabilities. Moved them + their 6 lint tests to
tests/ + tests/fixtures/ and retargeted the 5 agent fasit-refs. Count-neutral
namespace hygiene (ls agents/*.md still 19).

- agents/fixtures/*-cases.md            -> tests/fixtures/        (6)
- agents/__tests__/*-fixture.test.mjs   -> tests/                 (6; ../fixtures -> ./fixtures)
- 5 agent refs ${CLAUDE_PLUGIN_ROOT}/agents/fixtures -> /tests/fixtures
- version-sync 0.5.2 -> 0.5.3 (plugin.json / README badge / CLAUDE.md / CHANGELOG)

Verify: fixture-lint 35/35 at new path; render 20/20, hooks 139/139; test-runner 109/0/0.
Reinstall/reload required for the 6 spurious agents to leave the registry.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CrTb8ktf1XZWEVwgz5MTTo
2026-06-24 13:29:57 +02:00

157 lines
7.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Editorial-Reviewer Fasit Fixture
The Del 4 production round (Maskinrommet, 2026-05-28) as the gold standard for the
`editorial-reviewer` agent. The persona resonance sweep returned 15 flags across
three personas (Linjeleder C primær + KI-seksjon B sekundær + IT-direktør A
sekundær) and **every persona reported PASS / ready-to-publish**. KTG then found
**eight editorial points on first reading** — and only ~25 % of them overlapped
anything the personas had touched. The other six were craft/architecture blind
spots. Those eight points are the fasit below: a correct `editorial-reviewer` run
on Del 4 v5 should surface **comparable flags**, mapped to the two axes with
consistent severities.
This file is a *fasit*, not a test harness. The structural lint lives in
`agents/__tests__/editorial-reviewer-fixture.test.mjs`. Whether the agent's live
flags actually reproduce these directions is `[GATE]`/`[OPERATØR]` — it is **not**
self-certified here.
> **The jury judges; the writer writes.** Every expected output below is
> **direction, not rewritten copy.** A correct agent run hands back flags + a
> severity — never edited prose. (`Foreslått retning`, not a new sentence.)
> **Why this gate exists.** A persona PASS measures *reader response*, not *craft*.
> Six of these eight points were invisible to the persona sweep because they are
> architecture and prose-craft defects, not resonance defects. The numbers tell
> the story: persona overlap ≈ 2/8; editorial-only ≈ 6/8.
---
## The two axes (the agent judges on exactly these)
Both axes are the operationalized mirror of the **Maskinrommet skrivekontrakt
§C2** — §C2 is the source of truth; this fixture and the agent's checklist follow
it. (§C2 is the craft half of the writing contract; §A — skeleton-before-prose —
is codified in `references/longform-quality-rules.md` rule 8.)
- **Prosa-håndverk** (mechanical, grep-able): P1 tankestrek-tetthet · P2 ordrette
gjentakelser · P3 postulerte tall uten kilde/hedge · P4 indre selvmotsigelse ·
P5 versal-tic.
- **Narrativ-arkitektur** (evaluative): A1 konkret instansiering · A2 teori-anker
for hypoteser · A3 serietittel-symmetri · A4 like-brukbar handling per adressat ·
A5 konklusjon ikke overlastet.
## Severity (every flag carries exactly one)
- **BLOCK** — misrepresents the piece or loses the takeaway.
- **REWORK** — a real craft/architecture weakness, not load-bearing-fatal.
- **NICE** — cheap polish, fold in if convenient.
---
## The eight Del 4 editorial points (fasit)
Each case states the point KTG raised, the axis it belongs to, the expected
severity, and the direction a correct agent run returns. The persona-overlap
column records whether the persona sweep had already (partially) touched it —
the whole reason the gate is needed is the rows marked **blindsone**.
### Case 1 — manglende konkret eksempel (abstract figure never instantiated)
- **Axis:** A1 (arkitektur) · **Severity:** REWORK
- **Persona overlap:** delvis (KI-seksjon B brushed it) — *not* a pure blind spot.
- **Fasit / direction:** An abstract figure carries the section but never lands on
one concrete case the reader can picture. Direction: instantiate with a single
verifiable (preferably Norwegian) case — do not list several. The agent flags
the *absence of instantiation*; it does not supply the case.
### Case 2 — postulert tall uten kilde eller hedge (postulated number)
- **Axis:** P3 (prosa) · **Severity:** REWORK
- **Persona overlap:** delvis (IT-direktør A brushed it).
- **Fasit / direction:** A specific figure is stated as fact with neither an inline
source marker nor a hedge. This is distinct from a fact-check finding — Step 5
verifies numbers that *have* a provenance; here the provenance is simply
**absent**. Direction: source it or hedge it ("anslagsvis"); else cut.
### Case 3 — manglende SDT-anker for tillit-effekt (unanchored hypothesis) — BLINDSONE
- **Axis:** A2 (arkitektur) · **Severity:** BLOCK
- **Persona overlap:** none — pure blind spot.
- **Fasit / direction:** A psychological hypothesis about a trust effect is asserted
as if established, with no named theory anchor (e.g. Self-Determination Theory)
and no explicit hedge. A hypothesis dressed as a finding is an architecture
defect. Direction: anchor in a named model OR mark it explicitly as hypothesis.
### Case 4 — brutt serietittel-kobling (broken series-title symmetry) — BLINDSONE
- **Axis:** A3 (arkitektur) · **Severity:** REWORK
- **Persona overlap:** none — pure blind spot.
- **Fasit / direction:** The part does not bind back to the series premise / its own
title — it floats free of the whole. Direction: tie the part's argument back to
the series title so the reader feels the part-of-a-whole. (N/A only for a
standalone edition; Del 4 is part of a series, so it applies.)
### Case 5 — manglende småbedrifts-tommelfingerregel (stranded addressee) — BLINDSONE
- **Axis:** A4 (arkitektur) · **Severity:** BLOCK
- **Persona overlap:** none — pure blind spot.
- **Fasit / direction:** The text addresses more than one reader but the actionable
takeaway only serves one; the small-business reader leaves with nothing they can
do. Direction: add a small-business rule of thumb so each addressee gets an
equally-usable action. (Stranding an addressee = BLOCK: that reader has no
takeaway at all.)
### Case 6 — ordrette gjentakelser (verbatim repetition) — BLINDSONE
- **Axis:** P2 (prosa) · **Severity:** REWORK
- **Persona overlap:** none — pure blind spot.
- **Fasit / direction:** A distinctive phrase recurs more than twice. Direction:
vary or cut the repeats; keep at most the one load-bearing use. `grep`-findable.
### Case 7 — tankestrek-tetthet (em-dash over-density) — BLINDSONE
- **Axis:** P1 (prosa) · **Severity:** REWORK
- **Persona overlap:** none — pure blind spot.
- **Fasit / direction:** Em-dashes run above ~1 per 50 words (clusters within
paragraphs). Direction: thin them to the local target; the em-dash is a tool,
not a tic. Report the count. `grep`-findable.
### Case 8 — indre selvmotsigelse (internal contradiction) — BLINDSONE
- **Axis:** P4 (prosa) · **Severity:** BLOCK
- **Persona overlap:** none — pure blind spot.
- **Fasit / direction:** Two passages cannot both be true (an assertion the
conclusion silently reverses). Direction: name the contradiction and resolve one
side — a contradiction misrepresents the piece, so BLOCK.
---
## Expected aggregate (what a correct run looks like)
- **Total flags:** 8 (well within the ≤10 cap — no suppression needed).
- **By axis:** prosa-håndverk = 4 (P1, P2, P3, P4) · narrativ-arkitektur = 4 (A1,
A2, A3, A4). A5 (overloaded conclusion) and P5 (versal-tic) did **not** flag on
Del 4 v5 — record them clean.
- **By severity:** BLOCK = 3 (A2, A4, P4) · REWORK = 5 (A1, P3, A3, P2, P1) ·
NICE = 0.
- **Persona overlap:** 2/8 (Cases 1 + 2, both delvis) · editorial-only blind
spots: 6/8 (Cases 38). This 6/8 is the quantified case for the gate.
A run that reproduces ~these eight directions, on ~these axes, with ~these
severities, is **comparable** to KTG's actual editorial round — the bar
acceptance-criterion #8 sets. Exact wording is the editor's; the agent returns
direction, never copy.
## Calibration boundary
Whether the agent's live flags truly match this fasit is judged by the operator
(`[OPERATØR]`), not self-certified here. This fixture is the calibration target,
the same way `persona-reviewer-cases.md` and `fact-checker-cases.md` are fasits
for their agents.
> **Live-run note.** A live run on Del 4 v5 requires (a) a Claude Code session
> reload — a freshly added agent is not invokable until the plugin agent set is
> rebuilt at session start — and (b) read access to the Del 4 v5 draft in the
> Maskinrommet series folder. Until both hold, this fixture is the gold-standard
> of record.