ktg-plugin-marketplace/plugins/linkedin-studio/references/longform-quality-rules.md
Kjell Tore Guttormsen b6bb61246b 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>
2026-05-29 11:32:02 +02:00

194 lines
10 KiB
Markdown
Raw Permalink 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.

# Long-Form Quality Rules
Canonical quality rules for long-form LinkedIn content (newsletter editions,
essays, series articles). These are enforced by the `/linkedin:newsletter`
pipeline — primarily in **Step 4 (Consistency + quality)**, reinforced by the
fact-check sweep (Step 5) and the persona sweeps (Steps 6 + 9).
> **Provenance.** Distilled from the Seres series production (the operator's
> first full long-form run) and codified as the authoritative spec in plan §8.
> Source of truth: this file. `commands/newsletter.md` Step 4 points here rather
> than restating the rules — there is exactly one place to change them.
> **Scope.** These rules are for **long-form only**. Short-form feed posts are
> governed by the `PreToolUse` content-gatekeeper / voice-guardian hooks, which
> are calibrated for feed posts and stay short-form-only (plan decision B). Long-
> form quality is enforced by pipeline *phases*, not by those hooks.
---
## The rules
### 1. Leder-takeaway (lead takeaway)
Every text lands **ONE clear takeaway + ONE concrete action**. The reader should
be able to state, in a single sentence, what they now think differently and what
they will do about it.
- Cut references hard. Hands-on credibility beats a citation-pile — a text that
shows you have done the work outweighs one that quotes everyone who has written
about it.
- If the reader cannot state the takeaway in one sentence, the text is not done —
tighten until they can.
- **Serve what the reader can DO, not what the author knows.** The text exists to
give the *primær* reader (the non-technical line manager) something they can act
on from their own chair — not to demonstrate the author's breadth. Completeness
is not a virtue: if a passage exists to be thorough rather than to move the
reader's decision forward, cut it. Choose ONE concrete, verifiable (preferably
Norwegian) case over an exhaustive list.
**Pass/flag:** PASS when the one-takeaway + one-action is stated and unmistakable;
FLAG when the text carries two competing takeaways or ends without a concrete
action.
### 2. Premiss→konklusjon-bue (premise→conclusion arc)
Establish **one clear premise early** (in the ingress + first paragraph), then let
the conclusion **grip that premise concretely and twist it forward** — give a
direction plus one tangible grip. The conclusion does not merely summarize.
- The premise the conclusion grips must be the SAME premise the ingress set. If
the draft drifted to a different premise mid-text, realign the conclusion or the
ingress — never leave two premises standing.
**Pass/flag:** PASS when ingress-premise == conclusion-premise and the close moves
it forward; FLAG when the conclusion only restates, or grips a premise the opening
never set.
### 3. AI-slop-fraser (forbidden phrases — strip on sight)
These phrases read as machine-written and are **banned**. They are the Seres
ban-list; strip them on sight (the list is Norwegian because the target text is
Norwegian):
- «her må jeg være ærlig» / «for å være ærlig»
- «ikke bare X, men Y» (the not-just-X-but-Y construction as a tic)
- gratuitous three-item listing (rule-of-three used as a reflex, not because the
content actually enumerates three things)
- «i en stadig mer kompleks verden» (and equivalent throat-clearing openers)
- tacked-on summary sentences that restate what was just said
- **modell-/navne-katalog** — reeling off product names, model names, or
benchmarks (Qwen3-14B, Ministral 3, SWE-bench, Arena, «parametere», «vekter»)
for completeness' sake. A list of names is a jargon wall to the primær reader;
pick ONE concrete, verifiable case instead (see rule 1). This is a **hard fail
for the primær persona**, not a stylistic nit — it is the failure mode that
nearly shipped in the Seres process.
- **selvrefererende overhead-åpning** — meta-commentary about what the text will
or will not do, warm-ups, and openers like «Det er bra. Det er ikke det denne
teksten handler om». Start on the reader's problem, not on the text's own
framing.
**Pass/flag:** PASS when none appear; FLAG (with count) and remove each
occurrence. A modell-/navne-katalog or a sjargong-mur is a hard fail (treat as
BLOCK-level for the primær reader in the persona sweep), not a soft flag.
### 4. Generell, ikke etat-/person-spesifikk (general, not org-/person-specific)
Write for a broad reader, not as an internal memo or a grievance.
- No personal agency anecdotes.
- Present **opportunities, not provocations**.
- At most **one** structural anchoring reference per text — never repeated
criticism of a named person or organization.
**Pass/flag:** PASS when the text reads as generally useful and carries ≤1
structural anchor; FLAG personal anecdotes, provocations, and any repeated naming.
### 5. Formaterings-dose (minimal formatting dose)
> *"No article should look like a PowerPoint printout."*
- **Bold** = at most one point per section.
- Short lists (24 items) **only** where the text already enumerates — never turn
load-bearing reasoning into bullets. Prose carries the argument; lists carry
genuine enumerations.
- Tables sparingly.
**Pass/flag:** PASS when formatting stays within these bounds; FLAG (and trim) when
bold is scattered, reasoning has been bulletized, or tables proliferate.
### 6. Gap lukkes med stramming, ikke utvidelse (close gaps by tightening, not expanding)
The gap between a draft and the final is closed by **swapping weaker passages for
sharper ones and cutting** — not by adding material. **Hold the length flat.**
This rule holds across every later phase too: fact-check fixes (Step 5), persona
rework (Step 6), and hook revisions (Step 9) all close their gaps by tightening,
never by expansion.
**Pass/flag:** target a **flat** length delta vs. the prior draft; FLAG when a
revision grew the word count to cover a weakness instead of sharpening it.
### 7. Kalibrering per sweep (per-sweep calibration — a user choice, not a default)
Before each quality / fact-check / persona sweep, **the operator calibrates**
this is a per-sweep user choice, never a silent default:
- **Fold-in aggressiveness** — conservative vs. aggressive when folding flags back
into the text.
- **Jargon handling** — keep, gloss, or cut domain jargon.
- **Persona weighting on conflict** — how to weigh a secondary persona's flag
against the primær when they disagree (the primær trumfer rule still governs the
final gate, but the calibration sets how hard a secondary signal is chased).
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 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. 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
Whether a text *lands*, matches voice, is original, or reaches prose quality is
**subjective judgment** and is NEVER self-certified green by Claude (plan §10.0).
These rules give objective-where-possible checks (forbidden-phrase presence,
length delta, formatting counts, one-takeaway test), but the resonance verdict is
routed to the persona sweep (`[GATE]`) or the operator (`[OPERATØR]`), never
auto-passed.
## Related
- `commands/newsletter.md` — Step 4 applies these rules; the whole pipeline
references them.
- `agents/fact-checker.md` — Step 5 sweep (guilty-until-disproven).
- `agents/persona-reviewer.md` — Step 6 (resonance) + Step 9 (conversion) reader
jury.
- `config/personas.template.md` — the reader personas + "primær trumfer" rule.
- `references/newsletter-strategy-guide.md` — strategic context for long-form.