← Design notes

The quality score — Ink's target functionlive · calibrating

Ink's pieces are written once and read by everyone, so quality is the first priority (owner, 2026-09-02). This page is the method: how an editorial is scored, how the persona × topic crossover is measured so a piece reads as written by the persona and not by an imposter, what the first readings said, and how the readers' verdicts calibrate the judges. The brew selects by this number; every knob in the brew is tuned against it.

1 · The number

IQS = 100 × (wE·E + wV·V + wS·S + wL·landed)   over pieces that pass the lint

The weights follow the format's promise (owner, 09-02: does a fable need a different target function? — yes, in the weights, not the axes). Tonight's reading showed why: the fable and the kicker scored specificity 0.0 by construction and fell below plainly worse pieces. Same scale for every format — a 75 fable and a 75 essay are both good of their kind.

Format classEVSlandedThe light formats' E rubric
reported — Essay · Notes · Review · Scorecard0.400.350.25—for the light formats the「position」line reads does it make ONE point that lands — a premise pushed to its end, a turn the reader didn't see coming — rather than a thesis dressed as a joke?; a kicker with a thesis is a bad kicker
voiced — Letter · Advice · Dispatch · Dialogue0.400.450.15—
light — Fable · Shouts · Overheard · Kicker · Riddle0.300.450.000.25

landed is the gate's cold read of a light piece — a second model, as a stranger, answers one question: is it actually funny or delightful, or an essay wearing a joke hat, a pun list, a laboured premise? It was a pass/fail at the gate (it dropped Yu Hua's kicker as「a somber reflection, not a joke」); for the light formats it now counts in the score too, where specificity cannot.

AxisWhat it measuresHowWho judges
L · the lintthe machine's tells — the negation pivot (not X, but Y), em-dash cadence, the rule of three, the metronome, the AI vocabulary; in English and in Chineseregexes, no call (lib/ink_lint.py); a hard gate: a piece with a tell is edited or dropped, never scored. Length-scaled since 09-03 (the calibration below): the soft tells — a triple, a dash pair, a consultant's word — are allowed three per thousand words (a fourth fails; the 09-08 brew had dropped two edited pieces at exactly three), one triple per thousand; the antithesis turn stays zero-tolerance at any lengthcode
E · editorialthe Pulitzer test for editorial writing, adapted:「clearness of style, moral purpose, sound reasoning, power to influence」→ clarity · reasoning · specificity · a position a reader could disagree with · carry (one thing the reader can repeat tomorrow)1–5 per line, each with one quoted line of evidence; (mean − 1) / 4the rival family (Gemini Flash; the writer is DeepSeek)
V · voicethe crossover: does the piece read as the persona's own writing?three independent measures, none of which sees the profile: trait match (½) — five checkable writing traits extracted once from the persona's REAL prose, scored yes/partly/no on the piece; the imposter test (¼) — the judge gets the persona's real paragraphs and three unlabelled pieces (the persona's, the same piece rewritten in another persona's voice, another persona's piece) and must pick from the writing alone, both orderings; the stylometric rank (¼) — function words, punctuation, sentence shape against the persona's own prose, ranked against the cast (code)the rival family + code
S · specificityreported opinion beats asserted opinionnumbers, dates, names, attributed quotes per 100 words, squashed to 0–1 (3 per 100 words is a reported piece; 0.5 is a sermon)code
R · the readersthe ground truth👍/👎 at the end of every piece, the written Feedback (the ⋯ menu and, since v1070, a third button beside the thumbs), the door taps (rooms opened from the piece) — and, recorded automatically since v1070 (owner: important data), the completion rate: how far each reader scrolled into each piece (the furthest point of the body, 0–1; ≥ 0.9 = reached the end) and the seconds on it with the app visible, beaconed when the piece is left, one row per reader per piece (ink_reads); the console's edition view shows「N read · % to the end · minutes」per piecepeople

2 · Where the method comes from

FindingSourceWhat Ink took from it
The test of excellence for editorial writing is「clearness of style, moral purpose, sound reasoning, and power to influence public opinion」; since 2026 the prize is Opinion Writing —「well-reasoned and compelling arguments… originally researched and reported, or informed by personal experience」pulitzer.orgthe five E lines, and「reported」as an axis of its own (S)
LLM judges agree with human reviewers about as often as humans agree with each other — IF the rubric separates its criteria, pairwise judgments swap positions, length is controlled, the judge is never the writer's own family, and the judge is re-calibrated against human labels monthlythe 2025–26 judge-bias literatureevery judge is the rival family; the imposter test runs both orderings; the readers' verdicts are the labels the judges are calibrated to
The authorship gap: personalized LLM text sits below the human cross-author floor (LUAR 0.48–0.51 vs 0.63) — closer to the model's own fingerprint than to any human. Single metrics lie (cross-metric |r| < 0.07). A judge that reads the same profile the writer read measures instruction-following, not voicePersonalBench; Theory-grounded evaluation of LLM personalization (both 2026)three independent voice measures, none of which sees the profile; the honest expectation: climb toward the human floor, do not expect to cross it
Voice comes from real prose samples, not a description; stripping tells without restoring voice leaves sterile textSudowrite's voice matching; the two-classifier findingthe exemplar bank — the persona's own quoted paragraphs — rides the writer's brief, the editor's voice pass, and the judges

3 · What the first readings said

Seventeen proof pieces, three editions, scored in one evening (about 0.9¢ a piece). IQS ran 46–89.

PieceIQSEVStrait match
Buffett · letter88.91.000.800.840.6
Li Ka-shing · letter84.00.900.850.700.7
Jobs · essay77.90.851.000.201.0
Banksy · Shouts71.80.850.860.181.0
Einstein · notes65.70.750.600.590.2
Asimov · fable64.40.850.710.110.7
Mouratoglou · Shouts63.90.400.950.490.9
Brownlee · review62.00.850.650.100.8
Dan Wang · notes61.00.750.540.460.4
Roosevelt · essay60.50.600.590.640.4
Churchill · essay58.00.800.440.410.2
Federer · kicker55.60.650.590.300.4
Darwin · dispatch50.90.750.410.220.2
Chestnut · fable48.00.600.310.580.0
Twain · kicker46.20.500.490.320.3
Dylan · Shouts46.10.550.400.410.3

4 · The two levers

The reporter's notebook Stage 2½ of the brew. For every commission: the peg article fetched in full where the site allows (the link-unfurl module; walled sites fall through to the snippet) · three searches — the subject, the editor's angle, the persona × the subject — with the two best pages fetched · one Flash distillation into dated facts, numbers, people, attributed quotes, what is disputed, what is not established, and what the persona has said on this before, every line with its source number. The writer's rule changes from「facts only from the peg card」to「facts only from the notebook」; the reader's peg card grows to the article's opening paragraphs when the fetch succeeded. About 0.6¢ a piece.
The voice harvest For a persona whose exemplar bank is thin — the historic greats above all (Ink's staples: fewer rights questions, and the owner's ask: make them read great) — search the open web for PRIMARY text (letters, notebooks, speeches, essays), fetch the best pages, and have Flash copy out verbatim paragraphs written by the persona, never about. The bank grows to 24 (09-03; was 14); the persona's traits are re-extracted from the fuller bank; the writer's brief picks the three paragraphs nearest the piece's subject. python lib/ink_brew.py voices runs it over every fixed-horizon persona; about 1¢ each. The name is not the author (09-03). Searched by name, Gutenberg answered with the American novelist Winston Churchill and with Paine's biography of Twain — a harvest that trusts a search copies a stranger. The greats now carry a hand-listed shelf of their own public-domain books (lib/ink/voices.json: Twain's travel books, autobiography chapters, essays, speeches and letters; Sir Winston's war books, the African journey, The World Crisis vol. 1 and the 1909 speeches — never the novels, never a life of someone else), read before any search. The two banks were also dirty: Churchill's held four passages twice (bare and in quotation marks), Twain's carried the researcher's own note as Twain — the corpus miner now dedupes and filters those, and voices --force rebuilds a bank from scratch.
The Chinese rendition (09-02 late) The owner's read of the first renditions:「awful — literal; it ignored readability and beauty」. The one-shot Flash gloss had produced English word order in Chinese characters:「他们会议的结果被称为公报……那是个错误。它通过故事来约束。」The method now: a Chinese-native model with thinking (V4 Pro), two passes — 意译 (read the paragraph, write it as Chinese: subjects dropped, sentences re-cut, 被/的/它/进行/作为 scaffolding gone, the headline written as a headline) then 润色 against the translationese lint's own findings (被-passives, 的 density, pronoun-headed sentences, scaffolding words, the calques「那是个错误」「换句话说」) — and the lint decides what ships. The same paragraph after:「会谈结果叫公报。外交语言里,公报听起来像是最弱的结果:没有达成有约束力的协议,才会发表公报。误解了。公报是刻意的想象行为,靠故事把人拴在一起。」Lint 18 → 0; about 5¢ a piece. Of the sixteen existing renditions, fourteen had failed the new lint; all were re-rendered.
The rendition, measured (09-04) The owner's second read:「it burned twice the writer's tokens · sometimes out of context · western names sometimes transliterated, sometimes not · sometimes literal」. The ledger explained the cost: 90% of the rendition's output tokens were reasoning; ten first passes became six polishes and three second polishes; four runs thought to the 16k cap and were retried. The proposed remedy — re-author the piece as the persona for Chinese readers (the card, the beat, the notebook and a glossary in the brief; a three-line Chinese outline before the prose; thinking off; one call) — was measured before it shipped: exam/rendition_ab.py renders the ten dev renditions again with the candidate recipe and asks the rival model (Gemini Flash) a blind pairwise question in both orders, the shelf's rendition against the new one.

The arms:
armrecipejudge (new · tie · old)lint-clean first pass¢ / pieces / piece
1re-authoring brief · thinking OFF · one call + one polish on a fail0 · 1 · 93 / 100.621
2the same brief · thinking ON1 · 2 · 7 (one rendition failed outright)6 / 103.4224
3the two-pass 意译 → 润色 WITH thinking, plus the notebook, the glossary and the names rule0 · 6 · 49 / 105.6 (1.3–10.8)385
4 (shipped)arm 1 plus the periodical rhythm (财新 · 三联) · thinking off · one call0 · 1 · 9 (the judge stays with the old; the owner overruled)10 / 100.4521
The machine judge and the lint agreed: the reasoning was what enforced the Chinese-sentence rules, every cheaper arm shipped the pronoun-headed sentence (它/他们/这 opening 5–14 sentences), and arm 3 shipped as the safe choice. The owner then read all ten triples and reversed it:「New recipe = cheap arm > the shelf's. The cheap arm wins on fluency; the flow of the article is smoother.」A Chinese reader did not hear the tell the regex counted, so the per-sentence pronoun rule is retired (the ratio rule survives, counted once) and the cheap arm ships — ten times cheaper, fifteen times faster. The owner's second note set the register:「Chinese is compact; readers prefer longer sentences rather than a burst of short ones, unless the rhetoric requires」— 财新's opinion prose runs 45–60 字 a sentence in two or three 分句, 三联's features flow scene into reflection on 而/却/也/则. Arm 4's brief asks for 20–45 字 sentences carrying two or three 分句, a short sentence only for emphasis and never three in a row, the connectors named, a good magazine's vocabulary; the lint gained a short_burst tell and a rhythm() meter (mean 字 a sentence), and its Chinese metronome threshold moved from .38 to .30 because the periodical rhythm asks for sentences of a similar, longer measure. On the ten pieces the mean rose from 21.3 to 25.2 字 a sentence (Hawking 19 → 34); the antithesis that survives a polish gets one more pass of its own, sentence by sentence (Perel 7 → 4 → 0); all ten came out lint-clean at 0.45¢ and 21 s a piece. What every arm from 1 on carries: the reporter's notebook as background, the house glossary (lib/ink/glossary-zh.json, ~200 terms, whole-word matched with plurals) and one names rule in both passes — people, companies, products, publications and institutions keep the original script (Hinton, OpenAI, The Atlantic, Nvidia); places and long-dead historical figures take their universal Chinese name (伦敦, 拿破仑, 莎士比亚). The lesson for the loop (ink-loop): a machine judge is one voice, the human read is the label — the two disagreed here and the human won. The pairs page (the rendition, old and new) shows all ten; exam/rendition_ab.py stays as the measuring stick.

5 · Calibration — the readers are the label

The majors as the standard (owner, 09-03) python lib/ink_brew.py calibrate fetches free pieces from the outlets the essays page cites — the Guardian's comment page (through its AMP mirror), The Conversation, Aeon, Noema, the Atlantic's Ideas, the New Yorker's Shouts & Murmurs, Slate's Dear Prudence, Paul Graham — and reads them with the same three instruments the brew scores its own pieces with: the lint, E and S (no V — no persona). The shelf is lib/ink/calibration.json; every run freezes the pieces and their readings under brew/calibration/<date>.json, so the standard re-lints offline. No subscription was needed for the first cut; the paywalled titles (NYT Opinion, the Economist, Project Syndicate's 120-word stub) are left out and can join with a subscription cookie if the free set proves thin.

The first cut (09-03, eight pieces, 4¢):
PiecewordsESlint (old rule → length-scaled)
Aeon · What we can't measure about AI4,0461.000.58FAIL → PASS (4 triples, 2 consultant words, a dash pair)
Aeon · Superlative projects3,5540.750.83FAIL → PASS
Atlantic Ideas · Who will thrive in the AI age3,7470.800.56FAIL → FAIL: one antithesis turn
Atlantic Ideas · Automation led to misery1,4470.850.43FAIL → FAIL: one antithesis turn
New Yorker · Shouts & Murmurs8430.450.64PASS (clean)
Slate · Dear Prudence ×2697 · 1,2190.40 · 0.500.49 · 0.42PASS
Paul Graham · The best essay4,3350.750.31FAIL → FAIL: eight antithesis turns, six plain contrasts
(The fourth cut the same night, ten pieces with The Conversation and Noema added: E 0.45–0.95, mean 0.68 · S 0.24–0.78, mean 0.49 · 2,600 words on average · lint pass 4 of 10 — the judges move a tenth between runs on the same text, which is the noise floor to read every IQS against.)

What the standard says. ① E for a professional essay is 0.65–0.95; Ink's essays sit at 0.6–0.85 and its best pieces (Buffett's letter at 1.0) reach the field. The light and voiced formats read low for humans too (a real Shouts 0.45, Prudence 0.4–0.5) — the E rubric is an essay rubric even with the light rewording, so a light piece's E is comparable only with other light pieces, which is what the format-class weights do. ② S runs 0.3–0.9 for the majors (mean 0.57); a great essay can be unspecific (Graham at 0.31) — S is a reported-piece meter, not a quality meter, and its weight (0.25 reported · 0.15 voiced · 0 light) is about right. ③ The lint was length-blind. Three of eight professional pieces failed on triples and dash pairs that simply come with 4,000 words; the allowances are now per thousand words, and five of eight pass. ④ The remaining three fail on the antithesis turn — the Atlantic's essays carry one each, Paul Graham eight in 4,300 words. The field uses the turn at roughly one per 1,500 words; Ink still refuses it (owner: fatal) — the honest reading is that the gate is stricter than the Atlantic on this one tell, by design. ⑤ Length: the majors' essays ran 1,400–4,300 words; Ink's new 1,000–1,400 floor is the short end of the field's range, a daily's length rather than a magazine's.
The sentence gap (owner, 09-04)「Still short sentences — even the English original has many. Compare with the English majors and find our structure gap.」exam/sentence_gap.py reads the majors' pieces the calibration had fetched and every English piece on the shelf with one ruler: words a sentence, the share of short (≤ 8 words) and long (≥ 30) sentences, sentences sitting in a run of three short ones, clauses a sentence, sentences a paragraph, sentences opening on a bare pronoun. Paul Graham (8 words a sentence, half of them short) is a famous personal style, not the field, and is shown apart.
measuremajorsmajors without Grahamours (43 pieces)
words a sentence, mean · median16.3 · 1621.0 · 1612.7 · 11
short sentences (≤ 8 words)26%13%35%
long sentences (≥ 30 words)13%20%4.5%
sentences in a run of three short ones9%1%11%
clauses a sentence · single-clause share2.8 · 31%3.3 · 22%2.1 · 44%
sentences a paragraph3.33.65.3
sentences opening on It / This / They19%22%31%
Two causes, both ours. ① The writer's house rules said「say each thing directly and once, as a plain claim … let some be four words」— written against the AI tone, and it produced a house of four-word sentences: the plain-claim rule cut the qualifying clause, the four-word permission licensed the burst. ② The editor's sentences pass asked for「some sentences under eight words」and its voice pass for「be plainer」— measured in the loop, the two passes together took a 24-word-a-sentence draft back to 12 and cut a fifth of the words, whatever the writer had done.

The loop (exam/rhythm_loop.py: re-draft one or two existing commissions with a candidate rule, measure the draft and the edited piece against the majors' targets, guard with the AI-tone lint; ~2–4¢ and three minutes a piece; Nolan's review and Hawking's notes were the test pieces, two of the shortest on the shelf):
loopruledraft, words a sentenceafter the editortone
0 (control)the old line12.0 · 9.9—antithesis ×2 in each raw draft — the editor's job, then as now
1「18–30 words, two or three clauses — the claim, then its qualification」19.8 · 17.0—antithesis ×2–6: the rule's own dash and「claim, then qualification」shape were mirrored
2positive clauses (cause, condition, consequence), no dash19.8 · 14.8—×1–3, level with the control
3+ a self-audit「join neighbouring short sentences」26.3 · 26.1—overshot: no short sentence left, metronome, antithesis ×5–8
4a range (16–30), one short sentence a paragraph; the exemplars carry the voice, not the measure24.5 · 25.512.4 · 13.0 under the OLD editorthe editor re-chopped — the second cause, found
5the editor keeps the measure15.9 · 14.120.1 · 18.9clean; one metronome
6rule 4 again, plus a kicker and a scorecard23.6 · 20.0 · 16.4 · 21.219.4 · 19.2 · 14.4 · 19.66/7 targets on the essays, the scorecard clean; a nine-sentence kicker tripped the metronome
7+ variance:「a few past forty … never a steady beat」in the rule and in the editor's pass19.7 · 23.520.3 · 24.4both pass the lint after the editor with no antithesis left; Nolan 6/7 targets, Hawking 4/7 (a little over the ceiling, and Hawking opens 37% of sentences on a pronoun — his own habit)
8 (shipped)ONE SHORT LINE PER FORMAT CLASS, swapped in, no numbers (owner:「the LLM is not good at numeric requirements」·「the more you say to the system prompt, the worse the result」): reported · voiced · light18.1 · 12.8 · 12.3 · 11.3 · 18.6 · 15.119.6 · 21.9 · 19 · 24 · — · 21.7the class lines draft the shapes but the editor's one numeric line flattened every class to the essay measure — a kicker came out at 19 words a sentence; Perel kept antithesis ×2 through the passes
9THE EDITOR KNOWS THE CLASS (EDIT_MEASURE: essay · talking to one person · the joke's measure, never lengthen the turn) + a sentence-by-sentence antithesis pass when the turn survives9.5 · 16.2 · 13.7 · 15.313 · (clean as drafted) · 23.0 · 21.1the light class lands: Rams's kicker 13 words a sentence, a sixth short, lint clean — the New Yorker Shouts measure; the antithesis pass takes Perel 2 → 0 and Hawking 1 → 0; but the essay edits lost every short sentence (metronome · no_short_sentence)
10 (shipped)the editor LEAVES the short sentences that land a point, joins only a broken thought, never with a dash17.6 · 15.117.3 · 17.9Hawking lands at his own prose's measure (17), 5/7 targets, lint pass, antithesis 0; Perel antithesis 5 → 0 but four triples survive (her voice loves lists — the editor's existing job)
Loss of voice? The owner's question after reading loops 5–7 (they read「much more fluent」): does the house measure erase each persona's habit and structure? Measured: the personas' OWN exemplar prose runs 14–18 words a sentence (Rams 14.2 · Hawking 16.8 · Nolan 17.1 · Buffett 18.2) — the shelf's 8–11 was nobody's voice; the old rule and the old editor had flattened all of them into one clipped sound. The loop pieces sit nearer each persona's own measure and the stylometric voice score held or rose (Rams .71→.86 · Buffett .86→1.0 · Hawking .57→.43–.57 · Nolan .14→.14–.43). Hawking was the one real loss (17 → 24, above his measure). The data-driven fix — write each persona's own measure into the brief — was declined by the owner (numbers don't steer a model); the class swap below is the answer instead.

What ships (loop 8): one short line per format class, swapped in, never appended. The pipeline already sorts every format into reported (Essay · Notes · Review · Scorecard), voiced (Letter · Advice · Dispatch · Dialogue) and light (Shouts · Fable · Kicker · Overheard · Riddle) for scoring; the writer's brief now inserts that class's line and nothing else — the majors' essays run 18–29 words a sentence with few short ones, their humour 14 with a fifth short because the setup runs and the turn is the short sentence, and a letter is speech to one reader. Reported:「A sentence carries its thought to where it leads, the second clause giving the cause, the condition or what follows. One short sentence a paragraph, where it lands a point, never two together. Name your subject rather than opening on It or This.」Voiced:「You are talking to one person. Each claim carries its reason in the same breath, a question is allowed, and the short sentence is kept for the warning or the gift. Never two short ones together.」Light:「The setup runs long and straight-faced; the turn is the short sentence, and it comes once. A story moves one thing after another. Never three short sentences in a row.」Thirty to forty-five words each, no numbers; the writer's prompt is a hundred words shorter than under loop 7. Shared by all three: the burst ban. The editor knows the class too (loop 9 reversed loop 8's「the editor knows nothing of classes」— its one numeric line was flattening a kicker to the essay measure): its sentences pass keeps the class's measure (EDIT_MEASURE), leaves the short sentences that land a point, joins only a broken thought and never with a dash, and its voice pass keeps each sentence's length; when the antithesis turn survives the passes, one more pass rewrites those sentences alone. The writer's prompt carries ~40 words of rhythm, the editor's ~60; the exemplar block asks for the author's words and images; the metronome tell needs twelve sentences. Drafts still carry two or three antithesis turns at the writer's temperature, as the control did — the editor's job, unchanged. The next brew, against the shelf's 12.7, is the measurement.

Every piece ends in a 👍/👎 pair and, in its ⋯ menu, a Feedback… sub-page where a reader writes what they thought. During calibration the score is shown to every reader on the piece, so the number is public and argued with. Monthly (or whenever a hundred verdicts have landed): the judges' E and V are compared with the readers' verdicts and the owner's own reads; where they disagree, the weights move toward the people, and a judge that keeps disagreeing is swapped — treated as an instrument change, not a config change. The first known disagreement is on record above.

The optimisation loop Every knob in the brew — the writer's brief, the exemplar count, the editor's passes, the notebook's depth, the register mix, the model — is changed one at a time and read on IQS over a week of editions, with the readers' verdicts as the check that the judges still agree with people. The persona × beat map (IQS by persona and by beat) is the first thing to read each week: it says which crossovers work and which personas still write as imposters.
Method live from 2026-09-02 · code: lib/ink_score.py · lib/ink_lint.py · the brew's stages in lib/ink_brew.py · siblings: the brew · the essays · the look