# 01 · Oracle — score this week's candidate ideas

**Why this step exists:** most content pipelines skip straight to drafting, so every idea
gets equal effort regardless of whether it's actually good. The Oracle is a cheap triage pass
— score the raw *seeds* (a real thing that happened, a hot take, a screenshot) before anyone
spends time writing. Judge the seed, not a finished draft. A bad seed drafted well is still a
bad post.

## What counts as a candidate

Anything that could become a post: a commit message, a session note, a client conversation
you can generalize, a screenshot of someone venting online, a stat from a real source, a
correction of some hype you saw. Collect these raw — one line each is fine — before scoring.

## Score each candidate 0, 1, or 2 on these dimensions

Adapt the dimension names to your niche, but keep the shape: reward specificity and a real
stance, punish generic filler.

### `anecdote` — is there a real story or proof behind this?
Rewards candidates tied to something that actually happened — a real event, a real number, a
fact you can stand behind.
- **0** — hypothetical or generic advice; no real event, no first-party detail.
- **1** — something real happened, but the specifics (the number, the timeline, what broke)
  are still implicit and would need an interview to surface.
- **2** — a concrete first-party event, or maps directly to a fact you've already verified.

### `pov` — is there a specific, falsifiable, or contrarian point of view?
Rewards a stance that could be wrong, or that disagrees with common advice. Punishes
consensus mush everyone already nods at.
- **0** — safe consensus; nothing here to disagree with.
- **1** — a clear opinion, but one most people already hold.
- **2** — falsifiable or contrarian: a claim a smart reader could actually argue against.

### `relevance` — does it map to your actual audience/niche?
Rewards candidates that land squarely in a niche you serve, not "general business."
- **0** — no audience fit; abstract or off-topic for your reader.
- **1** — general audience, no specific niche.
- **2** — maps cleanly to a niche you can name.

### `genericity` — the "could belong to anyone" litmus (INVERSE — high is BAD)
This dimension is *subtracted* from the total, so a high score here hurts the idea. The
litmus: **if this post could belong to any company in your space, it's wrong.**
A candidate that requires an invented stat, an unearned "10x," or reads like every other
post in your feed scores HIGH here (penalty). A candidate carrying your real nouns, a real
number, your actual voice, and the reader-as-hero framing scores LOW.
- **0** — unmistakably yours; no one else could post this verbatim.
- **1** — mostly specific but has some interchangeable filler.
- **2** — slop: hype, buzzwords, or a claim that would need an invented fact to stand up.

## Your approved facts

Keep a short list of the ONLY real numbers/claims you're allowed to cite — a revenue result,
a time saved, a headcount, a certification. A candidate that only works if you fabricate a
stat, client, testimonial, or outcome not on that list is a genericity penalty, never an
anecdote bonus. (Put your own list here before you run this — this is the one part of the
kit you have to fill in yourself, because it's *your* facts.)

## Weighting

Total = weighted sum of the four dimensions (genericity weighted negative). Tune these
weights to your own risk tolerance — reward `anecdote` and `pov` the most if you want sharper,
riskier posts; reward `relevance` more if you're niching down hard. There's no universally
correct set of numbers here; what matters is that `genericity` always pulls the score down,
never up.

## Output

Score every candidate you were given, one object per candidate:

```json
[{"ref": "candidate-id", "dims": {"anecdote": 2, "pov": 1, "relevance": 2, "genericity": 0}}]
```

Rank by total score, take the top handful, and feed those into `02-interview.md`.
