Cookbook · Recipe
Cited trend stories.
Once a week Papyrus can draft stories about what is moving in your publication's own map, and prove where every sentence came from. This recipe follows the path from a week of items to a draft in the Proposals queue, using Shipped as the open example. The example drafts there are a demonstration, not a launch.
Step 1 · Signals
The map says what is moving.
The weekly knowledge run counts your items per topic and per entity, week by week, and marks clusters New, Growing or Cooling. Those counts are the signals. Code, not a model, picks the rising and cooling ones and attaches the releases behind each.
::include{kind="block" name="knowledge-trending-list" limit=6}
The Wet Weave · sample data
- TechniqueHover weaving25 vs 8, up +212%42 items25 in the last 4 weeks
- MaterialSeaweed fibre13 items11 in the last 4 weeks
- MaterialWillow22 vs 14, up +57%45 items22 in the last 4 weeks
- MaterialRattan10 vs 22, down −55%41 items10 in the last 4 weeks
- GearMesh reed bags9 vs 5, up +80%14 items9 in the last 4 weeks
- TechniqueLidded baskets9 vs 5, up +80%23 items9 in the last 4 weeks
Change is the items in the last 4 weeks against the 4 weeks before. There is no percent when those earlier 4 weeks hold fewer than 5 items or the topic has under 8 weeks of history; under 4 weeks it is new.
Step 2 · Draft and check
One model call, then a check that does not trust it.
A single GPT-6 Luna call drafts the story from the signals and releases it is given. Each sentence comes back with the handles of what it rests on. Then code rejects the draft unless every sentence cites something real, at least two signals back the story, and every number and date comes from the evidence that sentence cites. A rejected draft is never filed; the run record keeps it with the reasons.
papyrus ideas trends --site shipped \
--snapshot https://shipped.anth.us/_data/knowledge/ \
--store proposals --dry-run
What the check reports
A failing draft lists each problem with the sentence it came from:
no_citation
unknown_signal:S99
number_not_in_cited_signals:40
A passing draft keeps its sentences with the signals each one cites.
Step 3 · The chart
Drawn by code, from real counts.
The model names which signals to chart and writes the caption. It never supplies a number. The chart is built from the cited signals' weekly counts and travels with the draft, so an editor approves the copy and the figure together.
{"type": "line", "unit": "items per week",
"x": ["2026-08-31", "...", "2026-10-19"],
"series": [{"signal": "entity:platform--hugging-face",
"label": "Hugging Face", "values": [1, 2, 3, 4, 7, 3, 3, 2]}]}
A real component, sample data
Step 4 · File and steer
A Proposal, one soft review, readers' votes.
The draft is filed as an AI story draft Proposal with one soft review request for the whole run. Readers vote on it, an editor reads it, and the editor decides. The weekly step is off by default and switched on per site; on the Shipped stack it is three stack parameters. Approving a draft does not yet create a story.
How Shipped turns on Proposals is one line of its open configuration: proposals: { publish: true }.
The editorial process
How it stays honest.
- The weekly run. Items are grouped, counted and reviewed. Every pass records who accepted what, and AI is labelled as AI.
- The draft. A model writes; it is not trusted.
- The check. Code verifies citations and numbers. It proves where a sentence points, not that the sentence reads its evidence correctly.
- The editor. An editor reads every draft and decides. Nothing publishes until they do.
Cited Trends in full. The Papyrus doc is docs/idea-pipeline.md.