feat(linkedin): newsletter Step 3-4 draft + consistency (S8)

This commit is contained in:
Kjell Tore Guttormsen 2026-05-27 21:25:42 +02:00
commit 39ae875b96

View file

@ -70,10 +70,11 @@ single most important correction from the Seres process (plan §0.4, principle 5
| 9 | **Hook / conversion gate** | persona gate on the distribution text post-lock: "would YOU click?" | **`persona-reviewer`** (conversion mode) | | 9 | **Hook / conversion gate** | persona gate on the distribution text post-lock: "would YOU click?" | **`persona-reviewer`** (conversion mode) |
| 10 | **Scheduling** | register the edition in the plugin queue/state for native scheduling | `hooks/scripts/queue-manager.mjs` | | 10 | **Scheduling** | register the edition in the plugin queue/state for native scheduling | `hooks/scripts/queue-manager.mjs` |
> **Build status:** Steps 02 are implemented below. Steps 310 are added in > **Build status:** Steps 04 are implemented below. Steps 510 are added in
> subsequent build sessions (plan steps S8S10). Until then, this command takes > subsequent build sessions (plan steps S9S10). Until then, this command takes
> an edition from load → calibration → verified research notes, then writes the > an edition from load → calibration → verified research → draft →
> research phase to `edition-state.json` and HANDOVER and stops cleanly. > consistency/quality pass, persisting each phase to `edition-state.json` and
> the HANDOVER and stopping cleanly between sessions.
--- ---
@ -221,12 +222,128 @@ Next session: Step 3 — Draft.
--- ---
## Steps 310 (added in subsequent build sessions) ## Step 3: Draft — dramaturgical order, voice-matched
Drafting, consistency/quality, the fact-check sweep, the pre-lock persona sweep, Turn the verified research notes (Step 2) into a full draft. This is a
optional annotation, lock/delivery, the post-lock hook-gate, and scheduling are *long-form* draft, not a feed post: it has an arc, not a hook-and-three-bullets.
implemented in plan steps S8S10. Each will append its phase here, reading the
phase contract from `config/edition-state.template.json` and the long-form > **This phase may span multiple sessions.** A long edition can exceed a single
> session's context budget. If you approach the budget mid-draft, stop cleanly,
> write the partial draft to the edition folder, record `currentPhase: "draft"`
> with a section-level cursor in `edition-state.json`, and append a precise
> "draft resumes at section <X>" pointer to the edition-HANDOVER §6. The next
> session re-reads Step 0, picks up the cursor, and continues. Never start the
> consistency pass (Step 4) on a half-written draft.
**Procedure:**
1. **Re-read the voice profile** (`assets/voice-samples/`) before writing a single
sentence — this is the existing LTL rule and it is not optional for long-form.
The draft must read as the author, not as generic LinkedIn prose.
2. **Lay out the dramaturgical order** from the brief (Step 1) and notes (Step 2):
- **Ingress + first paragraph** establish ONE clear premise (this is the front
half of the premise→conclusion arc enforced in Step 4).
- **Body** develops the 24 key points in the order that builds tension, each
anchored to a verified note. Carry each note's source marker inline as a
comment so the Step 5 fact-check sweep can find it.
- **Conclusion** grips the premise concretely and twists it forward (direction +
one concrete grip) — it does not merely summarize.
3. **Draft with the `content-repurposer` muscle.** Reuse `agents/content-repurposer.md`
(its article→long-form conversion discipline) for the section-to-prose work —
invoke it via `Task` for individual sections when useful, *from this command
layer* (foreground, principle 4). The command owns assembly and voice; the
agent assists with conversion. The draft is voice-matched by THIS session, not
self-certified for voice — voice-match remains an `[OPERATØR]` / `[GATE:
voice-trainer]` judgment, never auto-passed (plan §10.0).
4. **Write the draft** to the edition folder (`<serie>/linkedin/<article>.draft.md`),
set `currentPhase: "draft"` in `edition-state.json`, and append a
"draft complete → next: consistency/quality" pointer to the HANDOVER §6.
```
Draft complete (or: partial — resumes at section <X>).
- Premise established: <one line>
- Key points drafted: <N>/<N>
- Voice-match: [OPERATØR]/[GATE: voice-trainer] — NOT self-certified
Draft written: <serie>/linkedin/<article>.draft.md
Next: Step 4 — Consistency + quality.
```
## Step 4: Consistency + quality
Run the draft through the long-form quality rules. This is a *tightening* pass —
the gap between draft and final is closed by **swapping weaker for sharper and
cutting, not by expansion**; hold the length flat (plan §8).
> **Inlined rules (forward-reference note).** The canonical long-form quality
> rules live in `references/longform-quality-rules.md` — but that file is not
> authored until plan step S12. So the rules are **inlined here now**. When S12
> lands, this block is EXTRACTED to that reference file and replaced with a
> pointer; there is no dangling reference at any point.
**Calibration first (a per-sweep user choice, not a default — plan §8):** before
running this pass, confirm fold-in aggressiveness (conservative vs. aggressive),
jargon handling, and — when it matters later — persona weighting on conflict. Ask
once if the Step 1 brief did not already settle it.
Apply each rule and report a pass/flag per rule:
1. **Threads.** Every thread opened in the ingress/body resolves by the
conclusion — no dropped setups, no orphaned promises.
2. **Premise→conclusion arc.** The premise set in the ingress (Step 3) is the same
premise the conclusion grips and twists forward. If the draft drifted to a
different premise, realign the conclusion or the ingress — do not leave two
premises.
3. **Leader-takeaway.** The edition lands ONE clear takeaway + ONE concrete action.
Cut references hard; hands-on credibility beats a citation-pile. If the reader
cannot state the takeaway in one sentence, tighten until they can.
4. **AI-slop removal (forbidden phrases — strip on sight).** These are the Seres
ban-list; they read as machine-written and must not appear:
- "her må jeg være ærlig" / "for å være ærlig"
- "ikke bare X, men Y"
- gratuitous three-item listing (rule-of-three as a tic)
- "i en stadig mer kompleks verden"
- tacked-on summary sentences that restate what was just said
5. **General, not org-/person-specific.** No personal agency anecdotes; present
opportunities, not provocations. At most ONE structural anchoring reference per
text — never repeated criticism of a named person.
6. **Formatting dose (minimal).** Bold = at most one point per section. Short lists
(24 items) only where the text already enumerates — never turn load-bearing
reasoning into bullets. Tables sparingly. *"No article should look like a
PowerPoint printout."*
7. **Close gaps by tightening, not expanding.** Swap weaker passages for sharper
ones; keep the length flat.
After the pass, set `currentPhase: "quality"` in `edition-state.json` and append a
"quality pass complete → next: fact-check sweep" pointer to the HANDOVER §6.
```
Consistency + quality pass complete.
- Threads resolved: <yes/flags>
- Premise→conclusion arc: <intact/realigned>
- Leader-takeaway: <one line>
- AI-slop phrases removed: <N>
- Formatting dose: <within bounds/trimmed>
- Length delta vs. draft: <flat/±N words> (target: flat)
Next: Step 5 — Fact-check sweep (guilty-until-disproven, BEFORE lock).
```
---
## Steps 510 (added in subsequent build sessions)
The fact-check sweep, the pre-lock persona sweep, optional annotation,
lock/delivery, the post-lock hook-gate, and scheduling are implemented in plan
steps S9S10. Each will append its phase here, reading the phase contract from
`config/edition-state.template.json` and (once extracted in S12) the long-form
quality rules from `references/longform-quality-rules.md`. quality rules from `references/longform-quality-rules.md`.
--- ---