Editor
Skill data2story/data2story.github.io/new/ukschool/blog_opus47_0525_1126/archival/skills/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).From its SKILL.md
npx -y skills add data2story/data2story.github.io --skill editorAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
13.2 KB, ~3.1k tokens by cl100k_base, as published. Nobody here has run it
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.jsonandPROJECT_DIR/detective.jsonbefore 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 bydet_01,det_02, ... Each haslabel,content(prose),category,source_url,key_facts. These are the external context — background, benchmarks, domain knowledge.analyst.json: items keyed byana_01,ana_02, ... Each haslabel,content(prose with actual numbers),type,strength,calculation(code + output),data_table(chart-ready data),based_on(det_xx refs). These are 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 or smaller than intuition suggests
- Common sense explanations turn out not to hold
- The detective context (
det_xxitems) 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:
- Section ID:
edt_01,edt_02, ... (sequential) - Section title (optional — use only if it adds clarity)
- Purpose: hook / context / evidence / turn / close
- Findings: which
ana_xxitems this section draws on, in order of importance - Context: which
det_xxitems provide background for this section - What it says: full publication-ready prose — complete paragraphs, not notes
- Chart placeholder:
[CHART: ana_xx]— which finding'sdata_tableshould drive the chart here, if any - Media placeholder:
[MEDIA: hint]— flag sections that benefit from a specific non-text element. Use exactly one of these hints; never use booleantrue:[MEDIA: map]— data has geographic dimension (locations, regions, routes, coordinates)[MEDIA: video]— section describes an event, action, transformation, or process[MEDIA: image]— emotional beat, atmosphere, or scene that data alone cannot convey[MEDIA: audio]— topic involves music, sound, or data that can be heard[MEDIA: interactive]— reader should explore, discover, or participate (quiz, demo, slider, scrollytelling)[MEDIA: instance]— a concrete embeddable example from detective.json should appear here The Designer makes the final call — these are editorial signals, not mandates.
- Instance placeholder:
[INSTANCE: inst_xx]— when a concrete real-world example should appear here (a song to listen to, a photo to see, a sound to hear). Reference aninst_xxID from detective.json'sinstancesarray. Only use when the instance makes the reader experience the data point rather than just read about it. The Designer will decide the exact embed format.
Multimodal awareness
When writing the narrative structure, actively look for multimodal opportunities:
- Geographic data (cities, countries, coordinates, routes) → flag
[MEDIA: map] - Events, incidents, anecdotes, processes → flag
[MEDIA: video] - Music, sound, rhythm, acoustic data → flag
[MEDIA: audio] - Surprising findings the reader should guess first → flag
[MEDIA: interactive] - Emotional turning points, atmosphere shifts → flag
[MEDIA: image]
Media Opportunity Scan
Do not force a fixed media checklist. Before assigning [MEDIA: ...] hints, scan the dataset and story for what the material naturally supports:
- Time / sequence: trend chart, timeline, scrollytelling, animation, or sonification if rhythm helps.
- Geography / routes: map, flow view, route animation, or location cards.
- Hierarchy / ranking / distribution: chart, treemap, sortable table, quiz, or stat callout.
- Network / relationships: node-link view, Sankey, adjacency matrix, or interactive explorer.
- Individual cases / concrete examples: card deck, image, instance embed, quote browser, or annotated profile.
- Visual subject matter: images or video when the subject is inherently seen: animals, places, art, food, fashion, objects, sports, architecture.
- Sound / speech / music / rhythm: audio only when hearing adds meaning, evidence, atmosphere, or embodied understanding.
- Abstract interpretation / caveats: text-only can be the right choice.
Aim for richness and variety when the data supports it, but never add video, audio, maps, or generated assets merely to satisfy a quota. If a normally tempting medium would be forced or decorative, set media_placeholder to null and explain the choice in editorial_notes.
Audio deserves special restraint. Use [MEDIA: audio] only when the topic has a meaningful sonic dimension or when a carefully specified sonification would help the reader understand a pattern. For generic social, geographic, animal, or policy datasets, audio is usually optional rather than expected.
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
contentfields — 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, so the Programmer knows exactly which
<p>references which finding:
If a paragraph uses no specific finding (pure editorial connective tissue), tag it[ana_09] More than a third of all answers end in zero — 36.2%, versus the 10% expected from chance. [ana_07, ana_10] The median answer is just 44, and only five problems produce a negative number — all involving temperature. [det_02] The problem writers at Surge AI were constrained to integer answers and mental math...[editorial].
Output
editor.md
Write PROJECT_DIR/editor.md — the prose document that the Programmer will copy verbatim into HTML:
## Story Spine
**Core claim**: ...
**Tension**: ...
**Payoff**: ...
## Sections
### edt_01: [Title or "Hook"]
**Evidence**: ana_01, ana_04 | **Context**: det_02, det_05
[ana_01] First paragraph — draws on this specific finding, with actual numbers.
[ana_04, det_02] Second paragraph — mixes a data finding with detective context.
[editorial] Third paragraph — pure narrative connective tissue, no specific data claim.
[CHART: ana_01]
[MEDIA: image]
### edt_02: [Title]
**Evidence**: ana_07 | **Context**: det_01
[ana_07] First paragraph with numbers from this finding.
[det_01] Background context paragraph.
[CHART: ana_07]
## Editorial Notes
- [Which numbers must be exact, which caveats must stay visible, which sections are load-bearing]
Every section header includes the edt_xx ID. Every section lists its evidence (ana_xx IDs) and context (det_xx IDs) on the line below the header. This creates a clear audit trail from prose → data.
editor.json
Write PROJECT_DIR/editor.json — machine-readable structure:
{
"meta": {
"role": "editor",
"version": "2.0"
},
"core_claim": "One sentence — what this blog argues",
"items": {
"edt_01": {
"label": "Hook — The surprising finding",
"purpose": "hook",
"title": null,
"findings": ["ana_01", "ana_04"],
"context": ["det_02", "det_05"],
"triage": {
"ana_01": "lead",
"ana_04": "supporting"
},
"chart_placeholder": "ana_01",
"media_placeholder": "image",
"editorial_notes": "20.1% must be exact, do not round"
},
"edt_02": {
"label": "The Boom",
"purpose": "context",
"title": "The Boom",
"findings": ["ana_07"],
"context": ["det_01"],
"triage": {
"ana_07": "supporting"
},
"chart_placeholder": "ana_07",
"media_placeholder": null,
"editorial_notes": null
}
},
"full_triage": {
"ana_01": "lead",
"ana_02": "supporting",
"ana_03": "color",
"ana_04": "supporting",
"ana_05": "cut"
}
}
Field rules
items: dict keyed byedt_01,edt_02, ... — one per section, in narrative orderlabel: short name for this sectionpurpose: one ofhook,context,evidence,turn,closetitle: section title for display (null if no title)findings: array ofana_xxIDs this section draws on, ordered by importancecontext: array ofdet_xxIDs that provide background for this sectiontriage: maps eachana_xxused in this section to its role (lead/supporting/color)chart_placeholder: theana_xxID whosedata_tableshould drive the main chart in this section (null if no chart)media_placeholder: media type hint — one of"map","video","image","audio","interactive","instance", ornullif no non-text media is genuinely useful. Never write booleantrueor a vague string like"media".editorial_notes: constraints the Designer and Programmer must respect (exact numbers, visible caveats, etc.)full_triage: maps EVERYana_xxID from analyst.json to its editorial role. This ensures nothing is silently dropped.
Scientific Paper Mode
When analyst.json contains paper structure analysis or review analysis, these additional narrative strategies become available:
Academic Narrative Angles
Choose the narrative angle that creates the most tension. These are not mutually exclusive — combine as needed:
"The Verdict Explained" — Why was this paper accepted or rejected?
- Lead with the decision, then unpack the evidence
- Core tension: the gap between what the authors claim and what reviewers saw
- Best for: papers with interesting review dynamics
"The Best Paper Autopsy" — What made this paper stand out?
- Lead with a specific, surprising quality (not "it was good")
- Use quantitative comparisons to other papers at the same venue
- Best for: award-winning papers, especially when the reasons aren't obvious
"The Reviewers' War" — When reviewers dramatically disagree
- Lead with the most extreme divergence in opinion
- Show what each reviewer saw differently in the same paper
- Best for: controversial papers, borderline decisions
"The Missing Experiment" — What reviewers wanted but didn't get
- Lead with what the paper could have shown but didn't
- Frame as a gap that the reader can now understand
- Best for: rejected papers where the core idea had merit
"The Method Behind the Breakthrough" — Technical deep-dive made accessible
- Lead with the real-world impact, then explain how it works
- Use analogies and progressive disclosure
- Best for: genuinely novel methods that a data-literate reader can appreciate
"Before and After" — How this paper changed the field
- Lead with what people believed before, contrast with after
- Show the citation trail as evidence of influence
- Best for: influential papers with clear downstream impact
Paper-Specific Writing Rules (in addition to existing rules)
- When discussing reviews, quote specific reviewer language — don't paraphrase into blandness
- Present both sides of reviewer disagreements before revealing the outcome
- Use paper figures directly when they tell the story better than words
- Frame technical contributions in terms of what they enable, not just what they are
- If the paper was rejected, maintain analytical respect — explain why the concerns mattered, don't mock
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.
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.