# 06 · Lessons — turn every human edit into a reusable rule

**Why this step exists:** without this loop, the AI makes the same mistake forever — the same
hype opener, the same hard call-to-action close, every single week — and a human has to catch
it by hand every time. This step is the machine's memory: every time you rewrite an AI draft,
name *why* the AI's version was wrong so the next draft doesn't repeat it.

## Input: the diff, not the draft

Take the line-level diff between the AI draft and the version you actually published:

```json
{"removed": ["<lines you cut or replaced>"], "added": ["<lines you wrote instead>"]}
```

`removed` = what the AI produced that you rejected. `added` = what you replaced it with. The
signal you want is the *pattern* behind the swap, not the swap itself.

## Extract lessons (feed the diff to a model with this instruction)

Emit a small JSON array, one object per distinct lesson (usually 1–3; never pad just to have
more):

```json
[{"lesson": "<imperative rule, one line>", "why": "<what the AI habit reads as>", "fix": "<the concrete move to make instead>", "slug": "<kebab-case-3-to-5-words>"}]
```

- **lesson** — an imperative, reusable rule ("Open with the reader's problem, not a verb of
  aspiration"). Never a restatement of the specific edit.
- **why** — the failure mode in your council's language (slop / hype / generic / off-voice /
  uncited / hard call-to-action).
- **fix** — the move that generalizes: a structure, an opener class, a phrase substitution.
  Actionable on the *next* topic, not this one.
- **slug** — a stable kebab-case tail. Reuse the same slug for the same failure class across
  dates so retrieval keeps only the newest version.

## What counts as a lesson (abstract, reusable) — examples

- `{"lesson": "Don't open with an aspiration verb (Unleash, Supercharge, Transform)", "why": "reads as hype, fails the litmus test", "fix": "open with the reader's concrete problem, then the shift", "slug": "hype-opener"}`
- `{"lesson": "Close by opening a conversation, not barking a call-to-action", "why": "a hard CTA sounds like a product launch", "fix": "end on a soft question or a quiet implication", "slug": "hard-cta-close"}`
- `{"lesson": "Replace abstract nouns (solutions, synergies) with the concrete task", "why": "generic, could belong to anyone", "fix": "name the real job being done, not a category for it", "slug": "abstract-nouns"}`

## What is NOT a lesson — never emit these

- "The client was named X" — a fact, not guidance; facts belong in a transcript, not here.
- "Change 40% to 42%" — a specific correction, not a pattern.
- "Add the phone number" — content, not an editorial rule.

If a diff is only a factual correction with no repeatable pattern, return `[]`. If `removed`
and `added` differ only in whitespace or reordering, also return `[]`.

## Retrieval — use the lessons at draft time

Store each lesson wherever you keep durable notes (a wiki page, a notes app, a small local
database — anything queryable). At draft time, pull only the lessons relevant to the current
topic/surface and prepend them to the drafting prompt as a short "obey these" list. Dedupe by
slug, keeping only the newest version of each — an old, superseded lesson shouldn't keep
firing forever.

## Rules

1. Never encode an invented or specific proof fact as a lesson — lessons govern *how* to
   write, never *what* is true.
2. Prefer fewer, sharper lessons over many weak ones. One diff rarely yields more than three.
3. Speak your council's language so each lesson maps to a judge from `05-council.md`.
