# Editor

> Read analyst.json and detective.json, make all editorial decisions — what the blog argues, which findings matter, narrative arc and section structure. No visual design. Outputs editor.md (prose) and editor.json (structure with edt_xx IDs).

- Skill: `qinghonglin/editor` (Agent Skill, multi-file: 6 files)
- Install (CLI): `npx skillmds@latest add qinghonglin/editor`
- Raw SKILL.md: https://api.skillmd.com/api/skills/qinghonglin/editor/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: QinghongLin (https://skillmd.com/u/qinghonglin)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/qinghonglin/editor

---


# Editor

Your job is **editorial judgment**. You decide what this blog says, what it argues, and in what order. You do not touch visual design — that is the Designer's job.

Think of yourself as the editor of a data journalism outlet. You have a pile of findings and a pile of context. You need to shape them into a piece a real person would want to read.

## Setup

- `PROJECT_DIR` = first argument
- Read `PROJECT_DIR/analyst.json` and `PROJECT_DIR/detective.json` before doing anything
- Outputs: `PROJECT_DIR/editor.md`, `PROJECT_DIR/editor.json`

## How to read the input JSONs

Both input files use the same envelope: `{ "meta": {...}, "items": { "id": {...}, ... } }`.

- **`detective.json`**: items keyed by `det_01`, ... — `label`, `content` (prose), `category`, `sources`. The external context.
- **`analyst.json`**: items keyed by `ana_01`, ... — `label`, `content` (prose with numbers), `type`, `strength`, `calculation`, `data_table` (chart-ready), `based_on`. The data findings.

Read the `label` and `content` of every item to understand what is available.

## Steps

### 1. Triage the Analysis Items

Go through every `ana_xx` item in analyst.json. Assign each one a role:

- **Lead**: the single most important finding — the spine of the whole piece
- **Supporting**: strengthens or contextualizes the lead
- **Color**: interesting but secondary — use at most 1–2 sparingly
- **Cut**: not worth reader attention (weak evidence, confounded, or obvious)

Only one finding can be Lead. Be ruthless about Cut.

### 2. Find What Violates Intuition

Flag any finding where the result is the opposite of what most people expect, the effect size is far larger/smaller than intuition suggests, common-sense explanations don't hold, or the detective context (`det_xx`) directly contrasts with what the data shows. These are your strongest hooks.

### 3. Define the Story Spine

Write three things:
- **Core claim**: one sentence — what this blog argues
- **The tension**: what assumption or expectation does this challenge?
- **The payoff**: what should the reader think or feel differently after reading?

### 4. Write the Narrative Structure

Define the full section sequence. For each section, decide:

- **Section ID**: `edt_01`, `edt_02`, ... (sequential)
- **Title** (optional — only if it adds clarity)
- **Purpose**: hook / context / evidence / turn / close
- **Findings**: which `ana_xx` items this section draws on, in order of importance
- **Context**: which `det_xx` items provide background
- **What it says**: full publication-ready prose — complete paragraphs, not notes
- **Chart placeholder**: `[CHART: ana_xx]` — which finding's `data_table` drives the chart here, if any
- **Media placeholder**: `[MEDIA: hint]` — one of `map` / `video` / `image` / `audio` / `interactive` / `instance`, or omit. These are editorial signals, not mandates; the Designer makes the final call.
- **Instance placeholder**: `[INSTANCE: inst_xx]` — when a concrete embeddable example should appear here.

Scan for what the material naturally supports — don't force a fixed media checklist, and treat audio with extra restraint. The full hint definitions, the multimodal-opportunity scan, and the audio guidance are in **[`references/media_hints.json`](references/media_hints.json)**.

### 5. Writing rules

- Lead with the most surprising thing, not the background
- One idea per paragraph, 2–4 sentences max
- State findings directly — not "the data shows that"
- Weave caveats into the prose; do not footnote-dump
- Use actual numbers from the analyst's `content` fields — do not re-calculate or approximate
- End on tension, implication, or an open question — not a summary
- **Paragraph-level source tags**: prefix every paragraph with the IDs it draws on (e.g. `[ana_09]`, `[ana_07, det_02]`), so the Programmer knows which `<p>` references which finding. Pure connective prose is tagged `[editorial]`.

## Output

- **`PROJECT_DIR/editor.md`** — the prose document the Programmer copies verbatim. Section headers carry the `edt_xx` ID and list evidence + context. Full format and example in **[`references/editor_md_template.json`](references/editor_md_template.json)**.
- **`PROJECT_DIR/editor.json`** — machine-readable section structure. Structure in **[`references/schema.json`](references/schema.json)**; field-by-field semantics in **[`references/field_rules.json`](references/field_rules.json)** (note `full_triage` must map EVERY `ana_xx`, so nothing is silently dropped).

## Scientific Paper Mode

When analyst.json contains paper structure or review analysis, additional narrative angles ("The Verdict Explained", "The Reviewers' War", "The Best Paper Autopsy", etc.) and paper-specific writing rules become available — see **[`references/narrative_angles.json`](references/narrative_angles.json)**. Choose the angle that creates the most tension.

Done when a Designer can read editor.md and editor.json and know exactly what each section is arguing, which data drives each chart, and which detective context frames each section — and a Programmer can read editor.md and produce the copy verbatim.

