refactor(linkedin)!: rename plugin linkedin-thought-leadership → linkedin-studio (v3.0.0)

BREAKING CHANGE: the marketplace slug, the agent namespace
(linkedin-studio:<agent>), and the runtime state-file path
(~/.claude/linkedin-studio.local.md) all change. Reinstall required;
existing state migrated in place (post metrics, streak, history preserved).
The /linkedin:* commands are unchanged — the command namespace is set
per-command in frontmatter and was always independent of the plugin slug.
Functionality is byte-identical to v2.4.0; this release is pure identity.

- dir + manifests: plugins/linkedin-studio + plugin.json + root marketplace.json
- agent namespace updated in commands/newsletter.md (only functional invoker)
- state path updated in 4 hook scripts + topic-rotation prompt + state template
- catch-all skill dir renamed skills/linkedin-studio (5 functional skills unchanged)
- docs + version bump to 3.0.0 across README badge, CHANGELOG, root README/CLAUDE.md
- historical records (CHANGELOG past entries, docs/ build artifacts,
  config-audit v5.0.0 snapshots) intentionally retain the old slug

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Kjell Tore Guttormsen 2026-05-29 11:32:02 +02:00
commit b6bb61246b
196 changed files with 164 additions and 138 deletions

View file

@ -0,0 +1,106 @@
# Persona-Reviewer Fasit Fixture
One reader persona, one sample draft, the six judging axes, and the two review
modes — used to sanity-check the `persona-reviewer` agent. This is a *fasit*,
not a test harness. The structural lint lives in
`agents/__tests__/persona-reviewer-fixture.test.mjs`. Whether the agent's live
flags actually match the directions below is `[GATE]`/`[OPERATØR]` — it is not
self-certified here.
**The jury judges; the editor writes.** Every expected output in this fixture is
**direction, not rewritten copy**. A correct agent run hands back flags and a
verdict — never edited text.
---
## Persona under review (primær)
Drawn from `config/personas.template.md` — the primær Linjeleder. Field keys are
lowercase to match the library contract.
- **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, 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.
> Primær trumfer: a primær NO is not accepted — the text is revised until this
> reader reaches a clean JA. A sekundær NO from a role or expertise ceiling is a
> SIGNAL the gate works, not a defect.
---
## Sample-tekst
The draft excerpt this persona reads, read-only. Deliberately mixed: a workable
human angle ("you don't outsource judgment") buried under one wall of jargon —
exactly the case where the jury should flag direction without touching the copy.
> Transformatorarkitekturen vår utnytter selvoppmerksomhets-mekanismer over en
> 175-milliarders parametermodell for å maksimere inferens-gjennomstrømning på
> tvers av distribuerte GPU-clustere. Men det egentlige poenget er enklere: en
> språkmodell tar ikke beslutningen for deg. Den foreslår — du svarer for
> resultatet. Dømmekraften kan ikke settes ut. Spørsmålet er ikke om verktøyet
> er smart nok, men om du fortsatt eier valget når det teller.
---
## The six axes
The persona-reviewer judges the sample on exactly six axes and returns **at most
five flags** as direction (the sixth that passes cleanest is simply not flagged):
1. **Krok** — does the hook hold for THIS reader in the first two lines? Here:
IKKE — the opening jargon wall ("transformatorarkitektur… inferens-
gjennomstrømning") hits `avkobler` head-on; the linjeleder stops reading
before the real point.
2. **Resonans** — does the central point land for this reader? DELVIS — the
"judgment can't be outsourced" core is exactly their concern, but it arrives
too late to land.
3. **Tone** — right for this reader (no condescension, no fear-rhetoric)? LØST —
tone is respectful and non-alarmist once past the opening.
4. **Troverdighet** — does the reader believe it? DELVIS — the closing claim is
credible but abstract; no lived example from a leader's workday to anchor it.
5. **Leder-takeaway** — one concrete thing this reader can act on tomorrow?
IKKE — there is an insight but no action the linjeleder can take in their
own unit.
6. **Lengde/driv** — does it keep moving or sag? DELVIS — the front half drags
under the jargon; the back half drives well.
Each flag is **direction**, not a rewrite: "the hook hits `avkobler` — open on
the decision the leader owns" is correct; supplying the new opening line is not.
---
## The two modes
Both modes run the same persona but differ in scope and output.
### Resonans-modus (before lock)
Runs at the newsletter pipeline's pre-lock resonance sweep. Judges all six axes
and returns ≤5 flags as direction, each tracked **LØST / DELVIS / IKKE**. The
primær must reach a clean JA before the draft is locked. For this sample, the
primær verdict is **NEI** (Krok + Leder-takeaway both IKKE) → REWORK, with the
two IKKE flags as the priority directions.
### Konverter-modus (after lock)
Runs at the post-lock conversion sweep. Judges the **hook only**, binary:
«would YOU click?» **JA / NEI**. No axis scoring, no copy — just the click
verdict and a single reason. For this sample's current hook the verdict is
**NEI** — "I'd scroll past; the first line is machinery, not me."
---
## Convergence loop
Re-run per persona until the primær returns a clean JA. Each flag is re-judged
LØST / DELVIS / IKKE against the editor's revision. The jury never writes the
fix — it only re-judges whether the revision now lands.