| 100.00% | Adverbs in dialogue tags | Target: ≤10% dialogue tags with adverbs | | totalTags | 5 | | adverbTagCount | 0 | | adverbTags | (empty) | | dialogueSentences | 10 | | tagDensity | 0.5 | | leniency | 1 | | rawRatio | 0 | | effectiveRatio | 0 | |
| 90.33% | AI-ism adverb frequency | Target: <2% AI-ism adverbs (58 tracked) | | wordCount | 1034 | | totalAiIsmAdverbs | 2 | | found | | | highlights | | |
| 100.00% | AI-ism character names | Target: 0 AI-default names (17 tracked, −20% each) | | codexExemptions | (empty) | | found | (empty) | |
| 100.00% | AI-ism location names | Target: 0 AI-default location names (33 tracked, −20% each) | | codexExemptions | (empty) | | found | (empty) | |
| 75.82% | AI-ism word frequency | Target: <2% AI-ism words (290 tracked) | | wordCount | 1034 | | totalAiIsms | 5 | | found | | | highlights | | 0 | "flickered" | | 1 | "scanned" | | 2 | "chill" | | 3 | "absolutely" | | 4 | "familiar" |
| |
| 100.00% | Cliché density | Target: ≤1 cliche(s) per 800-word window | | totalCliches | 0 | | maxInWindow | 0 | | found | (empty) | | highlights | (empty) | |
| 100.00% | Emotion telling (show vs. tell) | Target: ≤3% sentences with emotion telling | | emotionTells | 0 | | narrationSentences | 63 | | matches | (empty) | |
| 97.51% | Filter word density | Target: ≤3% sentences with filter/hedge words | | filterCount | 0 | | hedgeCount | 2 | | narrationSentences | 63 | | filterMatches | (empty) | | hedgeMatches | | |
| 100.00% | Gibberish response detection | Target: ≤1% gibberish-like sentences (hard fail if a sentence exceeds 800 words) | | analyzedSentences | 69 | | gibberishSentences | 0 | | adjustedGibberishSentences | 0 | | longSentenceCount | 0 | | runOnParagraphCount | 0 | | giantParagraphCount | 0 | | wordSaladCount | 0 | | repetitionLoopCount | 0 | | controlTokenCount | 0 | | maxSentenceWordsSeen | 47 | | ratio | 0 | | matches | (empty) | |
| 100.00% | Markdown formatting overuse | Target: ≤5% words in markdown formatting | | markdownSpans | 0 | | markdownWords | 0 | | totalWords | 1043 | | ratio | 0 | | matches | (empty) | |
| 100.00% | Missing dialogue indicators (quotation marks) | Target: ≤10% speech attributions without quotation marks | | totalAttributions | 4 | | unquotedAttributions | 0 | | matches | (empty) | |
| 100.00% | Name drop frequency | Target: ≤1.0 per-name mentions per 100 words | | totalMentions | 34 | | wordCount | 926 | | uniqueNames | 25 | | maxNameDensity | 0.65 | | worstName | "Quinn" | | maxWindowNameDensity | 1.5 | | worstWindowName | "Quinn" | | discoveredNames | | Soho | 1 | | Detective | 1 | | Harlow | 1 | | Quinn | 6 | | Raven | 2 | | Nest | 3 | | Charing | 1 | | Cross | 1 | | Road | 1 | | Hendon | 1 | | Cambridge | 1 | | Circus | 1 | | Georgian | 1 | | Morris | 2 | | Bermondsey | 1 | | Tube | 1 | | Victorian | 1 | | Transport | 1 | | London | 1 | | Edison | 1 | | Spanish | 1 | | Glock | 1 | | Saint | 1 | | Christopher | 1 | | Former | 1 |
| | persons | | 0 | "Harlow" | | 1 | "Quinn" | | 2 | "Raven" | | 3 | "Morris" | | 4 | "Edison" | | 5 | "Saint" | | 6 | "Christopher" |
| | places | | 0 | "Soho" | | 1 | "Charing" | | 2 | "Cross" | | 3 | "Road" | | 4 | "Cambridge" | | 5 | "Georgian" | | 6 | "Bermondsey" | | 7 | "Transport" | | 8 | "London" |
| | globalScore | 1 | | windowScore | 1 | |
| 100.00% | Narrator intent-glossing | Target: ≤2% narration sentences with intent-glossing patterns | | analyzedSentences | 52 | | glossingSentenceCount | 1 | | matches | | 0 | "quite gas, strips of cold blue LEDs that gave the" |
| |
| 100.00% | "Not X but Y" pattern overuse | Target: ≤1 "not X but Y" per 1000 words | | totalMatches | 0 | | per1kWords | 0 | | wordCount | 1043 | | matches | (empty) | |
| 100.00% | Overuse of "that" (subordinate clause padding) | Target: ≤2% sentences with "that" clauses | | thatCount | 1 | | totalSentences | 69 | | matches | | |
| 100.00% | Paragraph length variance | Target: CV ≥0.5 for paragraph word counts | | totalParagraphs | 29 | | mean | 35.97 | | std | 28.59 | | cv | 0.795 | | sampleLengths | | 0 | 27 | | 1 | 79 | | 2 | 49 | | 3 | 3 | | 4 | 17 | | 5 | 54 | | 6 | 66 | | 7 | 50 | | 8 | 8 | | 9 | 38 | | 10 | 10 | | 11 | 73 | | 12 | 2 | | 13 | 64 | | 14 | 118 | | 15 | 8 | | 16 | 66 | | 17 | 6 | | 18 | 11 | | 19 | 32 | | 20 | 61 | | 21 | 24 | | 22 | 37 | | 23 | 4 | | 24 | 48 | | 25 | 22 | | 26 | 4 | | 27 | 11 | | 28 | 51 |
| |
| 88.55% | Passive voice overuse | Target: ≤2% passive sentences | | passiveCount | 3 | | totalSentences | 63 | | matches | | 0 | "being followed" | | 1 | "been transformed" | | 2 | "were rolled" |
| |
| 65.77% | Past progressive (was/were + -ing) overuse | Target: ≤2% past progressive verbs | | pastProgressiveCount | 3 | | totalVerbs | 149 | | matches | | 0 | "was building" | | 1 | "was heading" | | 2 | "were looking" |
| |
| 0.00% | Em-dash & semicolon overuse | Target: ≤2% sentences with em-dashes/semicolons | | emDashCount | 11 | | semicolonCount | 0 | | flaggedSentences | 10 | | totalSentences | 69 | | ratio | 0.145 | | matches | | 0 | "She'd clocked him outside the Raven's Nest twenty minutes ago — a thin man in a waxed jacket who'd been watching the entrance for the better part of an hour before slipping inside, staying twelve minutes, then leaving with something tucked under his arm wrapped in brown paper." | | 1 | "There it was — the slight rotation of the head, the stumble in his stride." | | 2 | "He cut left into a narrow passage between two Georgian terraces, then right again onto a street she didn't immediately recognise — the city folding itself into unfamiliar geometry the way it did when you left the main arteries." | | 3 | "She pulled out her phone without slowing, tried to pin the route, but he ducked into a stairwell she nearly missed entirely — worn stone steps descending below street level, no signage, the kind of entrance that registered as a maintenance shaft unless you were looking." | | 4 | "The stairwell opened into what had clearly once been a Tube station — the curved Victorian brickwork was unmistakable, terracotta tiles still adhering to the walls in patches, the ghost of a station name barely legible beneath decades of grime." | | 5 | "Dozens of them, stretching the length of the platform under a canopy of mismatched lighting — Edison bulbs strung between iron hooks, lanterns burning something that wasn't quite gas, strips of cold blue LEDs that gave the sellers' faces an aquatic pallor." | | 6 | "A child — she thought it was a child — sat on an upturned crate eating something that left dark stains on its fingers." | | 7 | "She stepped down from the stairwell access onto the platform and felt the change immediately — a shift in air pressure, a faint resistance, as if the atmosphere here maintained a slightly different density." | | 8 | "A scar ran the length of his left forearm — she clocked it because his sleeves were rolled to the elbow despite the underground chill." | | 9 | "\"Somewhere that doesn't appear in any case file you're building.\" He picked up a small canvas bag from the floor beside him — medical supplies, she noted, the shape of it familiar." |
| |
| 100.00% | Purple prose (modifier overload) | Target: <4% adverbs, <2% -ly adverbs, no adj stacking | | wordCount | 664 | | adjectiveStacks | 0 | | stackExamples | (empty) | | adverbCount | 24 | | adverbRatio | 0.03614457831325301 | | lyAdverbCount | 11 | | lyAdverbRatio | 0.016566265060240965 | |
| 100.00% | Repeated phrase echo | Target: ≤20% sentences with echoes (window: 2) | | totalSentences | 69 | | echoCount | 0 | | echoWords | (empty) | |
| 100.00% | Sentence length variance | Target: CV ≥0.4 for sentence word counts | | totalSentences | 69 | | mean | 15.12 | | std | 11.26 | | cv | 0.745 | | sampleLengths | | 0 | 8 | | 1 | 19 | | 2 | 48 | | 3 | 3 | | 4 | 8 | | 5 | 20 | | 6 | 12 | | 7 | 32 | | 8 | 3 | | 9 | 2 | | 10 | 3 | | 11 | 15 | | 12 | 2 | | 13 | 27 | | 14 | 20 | | 15 | 7 | | 16 | 39 | | 17 | 14 | | 18 | 13 | | 19 | 4 | | 20 | 46 | | 21 | 8 | | 22 | 7 | | 23 | 18 | | 24 | 13 | | 25 | 10 | | 26 | 20 | | 27 | 11 | | 28 | 18 | | 29 | 6 | | 30 | 18 | | 31 | 2 | | 32 | 40 | | 33 | 24 | | 34 | 1 | | 35 | 42 | | 36 | 14 | | 37 | 19 | | 38 | 18 | | 39 | 24 | | 40 | 8 | | 41 | 6 | | 42 | 16 | | 43 | 34 | | 44 | 10 | | 45 | 6 | | 46 | 11 | | 47 | 3 | | 48 | 21 | | 49 | 8 |
| |
| 70.05% | Sentence opener variety | Target: ≥60% unique sentence openers | | consecutiveRepeats | 5 | | diversityRatio | 0.463768115942029 | | totalSentences | 69 | | uniqueOpeners | 32 | |
| 0.00% | Adverb-first sentence starts | Target: ≥3% sentences starting with an adverb | | adverbCount | 0 | | totalSentences | 59 | | matches | (empty) | | ratio | 0 | |
| 30.17% | Pronoun-first sentence starts | Target: ≤30% sentences starting with a pronoun | | pronounCount | 28 | | totalSentences | 59 | | matches | | 0 | "She'd clocked him outside the" | | 1 | "She'd been watching the Nest" | | 2 | "He was fast for someone" | | 3 | "He glanced back." | | 4 | "He broke into a full" | | 5 | "He cut left into a" | | 6 | "He was heading north." | | 7 | "She pulled out her phone" | | 8 | "She stopped at the top" | | 9 | "He'd gone in radioing that" | | 10 | "He'd come out two days" | | 11 | "He had been thirty-four years" | | 12 | "He had taken his coffee" | | 13 | "She scanned for the waxed" | | 14 | "She stepped down from the" | | 15 | "Her ears adjusted with the" | | 16 | "She looked down." | | 17 | "Her right hand had gone" | | 18 | "She hadn't consciously decided to" | | 19 | "He wasn't gripping hard." |
| | ratio | 0.475 | |
| 19.32% | Subject-first sentence starts | Target: ≤72% sentences starting with a subject | | subjectCount | 52 | | totalSentences | 59 | | matches | | 0 | "The rain had turned Soho" | | 1 | "Every streetlamp doubled itself in" | | 2 | "She'd clocked him outside the" | | 3 | "That was enough." | | 4 | "She'd been watching the Nest" | | 5 | "Anything that moved in or" | | 6 | "He was fast for someone" | | 7 | "Quinn gained ground on Charing" | | 8 | "He glanced back." | | 9 | "He broke into a full" | | 10 | "Quinn followed without breaking stride," | | 11 | "The driver shouted something she" | | 12 | "He cut left into a" | | 13 | "The green neon of the" | | 14 | "Rain came in sideways now," | | 15 | "He was heading north." | | 16 | "She pulled out her phone" | | 17 | "She stopped at the top" | | 18 | "Steam rose from a grille" | | 19 | "The passage smelled of damp" |
| | ratio | 0.881 | |
| 0.00% | Subordinate conjunction sentence starts | Target: ≥2% sentences starting with a subordinating conjunction | | subConjCount | 0 | | totalSentences | 59 | | matches | (empty) | | ratio | 0 | |
| 0.00% | Technical jargon density | Target: ≤6% sentences with technical-jargon patterns | | analyzedSentences | 33 | | technicalSentenceCount | 7 | | matches | | 0 | "She'd clocked him outside the Raven's Nest twenty minutes ago — a thin man in a waxed jacket who'd been watching the entrance for the better part of an hour bef…" | | 1 | "Quinn gained ground on Charing Cross Road, dodging a group of tourists huddled under a single inadequate umbrella, her boots hitting the pavement in the rhythm …" | | 2 | "She pulled out her phone without slowing, tried to pin the route, but he ducked into a stairwell she nearly missed entirely — worn stone steps descending below …" | | 3 | "Three years ago, Morris had followed a lead into a building in Bermondsey that shouldn't have contained what it contained." | | 4 | "But the platforms on either side of the dry tracks had been transformed into something that bore no relationship to Transport for London's remit." | | 5 | "She stepped down from the stairwell access onto the platform and felt the change immediately — a shift in air pressure, a faint resistance, as if the atmosphere…" | | 6 | "His hold was the kind that communicated information rather than force." |
| |
| 100.00% | Useless dialogue additions | Target: ≤5% dialogue tags with trailing filler fragments | | totalTags | 5 | | uselessAdditionCount | 0 | | matches | (empty) | |
| 100.00% | Dialogue tag variety (said vs. fancy) | Target: ≤10% fancy dialogue tags | |