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>
162 lines
8 KiB
Markdown
162 lines
8 KiB
Markdown
# Reader Persona Library
|
|
|
|
Reusable reader profiles for the long-form pipeline (`/linkedin:newsletter`).
|
|
A reader persona is **not** a target-audience demographic — it is a named
|
|
reader who reads a finished draft *read-only* and judges whether it **lands**
|
|
(not whether it is "correct"). Personas give direction; the editor holds the
|
|
pen. Personas never write text.
|
|
|
|
Copy this file to `personas.local.md` and adjust the active set per project:
|
|
|
|
```bash
|
|
cp config/personas.template.md config/personas.local.md
|
|
```
|
|
|
|
`personas.local.md` is gitignored (via `*.local.md`) so your active overrides
|
|
stay local. The template ships the three Seres seed personas below; clone,
|
|
trim, or extend them per series.
|
|
|
|
---
|
|
|
|
## How the library is used
|
|
|
|
- **Per-project selection.** `/linkedin:newsletter` (Step 1) picks the relevant
|
|
personas from this library and marks the primary in the edition brief.
|
|
- **«primær trumfer».** Exactly one persona is the **primær** reader. On
|
|
conflict between personas, the primær weighs highest. A *secondary* NO caused
|
|
by role mismatch or an expertise ceiling («this I already know cold») is a
|
|
SIGNAL that the gate works — accept it, do not distort the text to chase it.
|
|
A *primær* NO is **not** accepted: the text is revised until the primær
|
|
reaches a clean YES.
|
|
- **Two sweep modes** (same `persona-reviewer` agent): resonance mode (Step 6,
|
|
BEFORE lock — «does the point land for this reader?») and conversion mode
|
|
(Step 9, after lock — binary «would YOU click?» on the hook only).
|
|
|
|
### Per-artifact personas (one or more personas per edition)
|
|
|
|
This library is a *starting point*, not a fixed cast. **Each artifact (each
|
|
newsletter edition) carries its own resolved persona set** — one or more
|
|
personas, exactly one marked `primær` — so different editions can target
|
|
different readers without editing a shared file. `/linkedin:newsletter` Step 1
|
|
**resolves** the active set in this order and records it in
|
|
`edition-state.json` → `articles.NN.personas` (so it is stable across the
|
|
multi-session pipeline and is the single source the Step 6 sweep AND the
|
|
Step 6.5 headless package read):
|
|
|
|
1. **Already in `articles.NN.personas`** → use as-is (a resumed edition keeps
|
|
the set it was calibrated with).
|
|
2. **`<serie>/linkedin/personas.md`** (a per-series file, same block grammar as
|
|
below) → load it. Use this when a whole series shares a cast.
|
|
3. **Plugin `config/personas.local.md`** (else this `personas.template.md`) →
|
|
select the relevant subset of the global library.
|
|
4. **None / insufficient** → **define interactively** in Step 1 (the operator
|
|
names one or more personas and their five fields via `AskUserQuestion`); the
|
|
resolved set is written to `articles.NN.personas`.
|
|
|
|
Each resolved entry carries the five fields below plus `tier`
|
|
(`primær` | `sekundær`) and `source` (`edition-state` | `series-file` |
|
|
`plugin-library` | `interactive`). Exactly one `primær` per artifact; «primær
|
|
trumfer» (below) is unchanged. Personas defined interactively for one edition
|
|
can be promoted to a reusable block by pasting them into `personas.local.md`
|
|
(plugin-wide) or `<serie>/linkedin/personas.md` (series-wide).
|
|
|
|
### The click-gate is blocking (bar = primær ekte JA)
|
|
|
|
The persona sweep is not advisory — it returns a **blocking verdict**
|
|
(PASS / REWORK / BLOCK), and the bar is the **primær reader's genuine, unqualified
|
|
JA**. The three Seres seed personas are the canonical set: **A = IT-divisjonsdirektør**
|
|
(sekundær), **B = KI-seksjonsleder** (sekundær), **C = Linjeleder** (PRIMÆR — trumfer).
|
|
|
|
- **Bar = C ekte JA.** A clean, unqualified yes from the primær. **«JA med store
|
|
forbehold» = NEI.**
|
|
- ⛔ **Hard fail (= omskriv, ikke annotér):** the verdict is BLOCK, regardless of
|
|
the other axes, when the primær —
|
|
- «mistet meg» (disengaged before the takeaway), or
|
|
- does not own the action (the takeaway is someone else's job), or
|
|
- hits a **sjargong-mur** (a wall of technical vocabulary their `sjargong`
|
|
rejects), or
|
|
- hits a **modell-/navne-katalog** (product/model/benchmark names listed for
|
|
completeness).
|
|
- These are **rewrite triggers**, not annotations the editor can wave through. A
|
|
*sekundær* NO from a role/expertise ceiling stays a SIGNAL the gate works —
|
|
never distort the text to chase it.
|
|
|
|
Each persona documents five fields. Keep the lowercase field keys exactly — the
|
|
pipeline and the structural check key off them:
|
|
|
|
- **rolle** — who they are and what they own.
|
|
- **avkobler** — what disconnects them / makes them stop reading.
|
|
- **overbeviser** — what convinces them / earns their trust.
|
|
- **ekspertise** — expertise level, including any ceiling that makes basics fall flat.
|
|
- **sjargong** — jargon tolerance (which vocabulary lands, which repels).
|
|
|
|
---
|
|
|
|
## Seed personas (Seres series, public-sector AI adoption)
|
|
|
|
### Persona 1 — IT-divisjonsdirektør (sekundær)
|
|
|
|
- **rolle** — Leder IT-divisjonen i en stor offentlig virksomhet; eier drift,
|
|
sikkerhet, arkitektur og leverandørforhold med budsjett- og risikoansvar.
|
|
- **avkobler** — Hype uten driftskonsekvenser; «AI løser alt»; manglende kobling
|
|
til sikkerhet, forvaltningskrav og totalkostnad; abstrakt strategiprat uten et
|
|
klart hvem-eier-hva.
|
|
- **overbeviser** — Konkret arkitektur og driftsmodell, etterlevelse/sikkerhet,
|
|
realistisk totalkostnad, referanser fra sammenlignbar virksomhet, og en tydelig
|
|
ansvarsdeling.
|
|
- **ekspertise** — Høy teknisk og organisatorisk. Ekspertise-tak på grunnleggende
|
|
IT-forklaringer: en post som forklarer systemintegrasjon fra bunnen lander ikke
|
|
(sekundær-NEI her er et signal, ikke en svikt).
|
|
- **sjargong** — Høy toleranse for IT-/arkitektur-sjargong; lav for AI-buzzwords
|
|
og konsulentspråk.
|
|
|
|
### Persona 2 — KI-seksjonsleder (sekundær)
|
|
|
|
- **rolle** — Leder en KI-seksjon; bygger AI-kapabilitet, rådgir ledelsen og
|
|
balanserer eksperimentering mot forvaltningskrav.
|
|
- **avkobler** — Overforenkling av hva AI er; ignorering av governance, EU AI Act
|
|
og personvern; «bare kjør i gang»-holdning; manglende erkjennelse av at
|
|
dømmekraften ikke kan settes ut.
|
|
- **overbeviser** — Nyansert forståelse av hva AI kan og ikke kan, konkret kobling
|
|
til forvaltningsverdier, erfaringsbasert framfor teoretisk, og ærlighet om
|
|
begrensninger.
|
|
- **ekspertise** — Høy i AI-domenet. Ekspertise-tak: kjenner modellene og
|
|
teknikkene, så en «hva er en LLM»-post faller flatt. Verdien ligger i syntese
|
|
og dømmekraft, ikke grunnkurs.
|
|
- **sjargong** — Høy toleranse for AI-/ML-sjargong; lav for vagt lederspråk og
|
|
overdreven popularisering.
|
|
|
|
### Persona 3 — Linjeleder (primær)
|
|
|
|
> **Dette er primær-personaen.** Ved konflikt mellom personaer vekter denne
|
|
> høyest. En primær-NEI godtas ikke — teksten revideres til ren primær-JA.
|
|
|
|
- **rolle** — Mellomleder med fag- og personalansvar i offentlig virksomhet; skal
|
|
beslutte om og hvordan AI tas i bruk i egen enhet, uten dyp teknisk bakgrunn.
|
|
- **avkobler** — Teknisk dypdykk uten «hva betyr dette for meg og mine»;
|
|
frykt-retorikk; abstrakt policy; språk som forutsetter at hen kan koden.
|
|
- **overbeviser** — Konkrete eksempler fra arbeidshverdagen, et klart ansvars- og
|
|
dømmekraftsbilde, trygghet på at hen kan ta gode beslutninger uten å være
|
|
tekniker, og en leder-takeaway hen kan handle på allerede i morgen.
|
|
- **ekspertise** — Lav-til-middels teknisk; høy på ledelse og forvaltning. Trenger
|
|
oversettelse, ikke nedlatenhet.
|
|
- **sjargong** — Lav toleranse for teknisk sjargong; setter pris på presise,
|
|
hverdagsnære formuleringer.
|
|
|
|
---
|
|
|
|
## Adding a persona
|
|
|
|
Copy the block below into `personas.local.md` and fill every field. Mark at most
|
|
one persona as `primær` per project; if you add a new primary, demote the old one
|
|
to sekundær.
|
|
|
|
```markdown
|
|
### Persona N — [Title] ([primær | sekundær])
|
|
|
|
- **rolle** — [Who they are and what they own.]
|
|
- **avkobler** — [What makes them stop reading.]
|
|
- **overbeviser** — [What earns their trust.]
|
|
- **ekspertise** — [Expertise level + any ceiling that makes basics fall flat.]
|
|
- **sjargong** — [Which vocabulary lands, which repels.]
|
|
```
|