| 100.00% | Adverbs in dialogue tags | Target: ≤10% dialogue tags with adverbs | |
| 95.80% | AI-ism adverb frequency | Target: <2% AI-ism adverbs (58 tracked) | | wordCount | 1190 | | totalAiIsmAdverbs | 1 | | 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) | |
| 32.77% | AI-ism word frequency | Target: <2% AI-ism words (290 tracked) | | wordCount | 1190 | | totalAiIsms | 16 | | found | | | highlights | | 0 | "quickened" | | 1 | "jaw clenched" | | 2 | "footsteps" | | 3 | "echoing" | | 4 | "standard" | | 5 | "echoed" | | 6 | "echo" | | 7 | "constructed" | | 8 | "navigate" | | 9 | "sense of" | | 10 | "electric" | | 11 | "weight" |
| |
| 100.00% | Cliché density | Target: ≤1 cliche(s) per 800-word window | | totalCliches | 1 | | maxInWindow | 1 | | found | | 0 | | label | "jaw/fists clenched" | | count | 1 |
|
| | highlights | | |
| 100.00% | Emotion telling (show vs. tell) | Target: ≤3% sentences with emotion telling | | emotionTells | 0 | | narrationSentences | 117 | | matches | (empty) | |
| 100.00% | Filter word density | Target: ≤3% sentences with filter/hedge words | | filterCount | 1 | | hedgeCount | 2 | | narrationSentences | 117 | | filterMatches | | | hedgeMatches | | |
| 100.00% | Gibberish response detection | Target: ≤1% gibberish-like sentences (hard fail if a sentence exceeds 800 words) | | analyzedSentences | 117 | | gibberishSentences | 0 | | adjustedGibberishSentences | 0 | | longSentenceCount | 0 | | runOnParagraphCount | 0 | | giantParagraphCount | 0 | | wordSaladCount | 0 | | repetitionLoopCount | 0 | | controlTokenCount | 0 | | maxSentenceWordsSeen | 35 | | ratio | 0 | | matches | (empty) | |
| 100.00% | Markdown formatting overuse | Target: ≤5% words in markdown formatting | | markdownSpans | 0 | | markdownWords | 0 | | totalWords | 1178 | | ratio | 0 | | matches | (empty) | |
| 100.00% | Missing dialogue indicators (quotation marks) | Target: ≤10% speech attributions without quotation marks | | totalAttributions | 3 | | unquotedAttributions | 0 | | matches | (empty) | |
| 94.82% | Name drop frequency | Target: ≤1.0 per-name mentions per 100 words | | totalMentions | 29 | | wordCount | 1178 | | uniqueNames | 13 | | maxNameDensity | 1.1 | | worstName | "Quinn" | | maxWindowNameDensity | 2 | | worstWindowName | "Quinn" | | discoveredNames | | Soho | 3 | | Harlow | 1 | | Quinn | 13 | | Greek | 2 | | Street | 2 | | Raven | 1 | | Nest | 1 | | Station | 1 | | Met | 1 | | Morris | 1 | | London | 1 | | Veil | 1 | | Market | 1 |
| | persons | | 0 | "Harlow" | | 1 | "Quinn" | | 2 | "Morris" |
| | places | | 0 | "Soho" | | 1 | "Greek" | | 2 | "Street" | | 3 | "Raven" | | 4 | "Station" | | 5 | "London" |
| | globalScore | 0.948 | | windowScore | 1 | |
| 60.71% | Narrator intent-glossing | Target: ≤2% narration sentences with intent-glossing patterns | | analyzedSentences | 84 | | glossingSentenceCount | 3 | | matches | | 0 | "quite make out in the darkness" | | 1 | "tasted like rust and forgotten things" | | 2 | "looked like market stalls" |
| |
| 100.00% | "Not X but Y" pattern overuse | Target: ≤1 "not X but Y" per 1000 words | | totalMatches | 1 | | per1kWords | 0.849 | | wordCount | 1178 | | matches | | |
| 100.00% | Overuse of "that" (subordinate clause padding) | Target: ≤2% sentences with "that" clauses | | thatCount | 0 | | totalSentences | 117 | | matches | (empty) | |
| 100.00% | Paragraph length variance | Target: CV ≥0.5 for paragraph word counts | | totalParagraphs | 28 | | mean | 42.07 | | std | 24.25 | | cv | 0.576 | | sampleLengths | | 0 | 70 | | 1 | 78 | | 2 | 48 | | 3 | 56 | | 4 | 57 | | 5 | 52 | | 6 | 68 | | 7 | 3 | | 8 | 49 | | 9 | 50 | | 10 | 3 | | 11 | 83 | | 12 | 12 | | 13 | 73 | | 14 | 23 | | 15 | 32 | | 16 | 38 | | 17 | 44 | | 18 | 34 | | 19 | 45 | | 20 | 5 | | 21 | 67 | | 22 | 4 | | 23 | 60 | | 24 | 43 | | 25 | 8 | | 26 | 58 | | 27 | 15 |
| |
| 96.27% | Passive voice overuse | Target: ≤2% passive sentences | | passiveCount | 3 | | totalSentences | 117 | | matches | | 0 | "been sealed" | | 1 | "been closed" | | 2 | "been abandoned" |
| |
| 100.00% | Past progressive (was/were + -ing) overuse | Target: ≤2% past progressive verbs | | pastProgressiveCount | 1 | | totalVerbs | 203 | | matches | | |
| 20.76% | Em-dash & semicolon overuse | Target: ≤2% sentences with em-dashes/semicolons | | emDashCount | 5 | | semicolonCount | 0 | | flaggedSentences | 5 | | totalSentences | 117 | | ratio | 0.043 | | matches | | 0 | "That's when he'd moved—no hesitation, no attempt at innocent explanation." | | 1 | "His choice told her something—he knew the area, knew the exit points." | | 2 | "The basement belonged to the old station—parts of it that had been sealed off decades ago, before the tube network consolidated." | | 3 | "One of the ghost stations—the ones the tube network had constructed but never opened, or had closed decades ago." | | 4 | "Her torch beam caught the edge of it before the scene registered properly—a space that shouldn't exist, sheltered beneath the arches of the station, filled with tents and tables and figures in hooded cloaks." |
| |
| 100.00% | Purple prose (modifier overload) | Target: <4% adverbs, <2% -ly adverbs, no adj stacking | | wordCount | 1190 | | adjectiveStacks | 0 | | stackExamples | (empty) | | adverbCount | 40 | | adverbRatio | 0.03361344537815126 | | lyAdverbCount | 11 | | lyAdverbRatio | 0.009243697478991597 | |
| 100.00% | Repeated phrase echo | Target: ≤20% sentences with echoes (window: 2) | | totalSentences | 117 | | echoCount | 0 | | echoWords | (empty) | |
| 100.00% | Sentence length variance | Target: CV ≥0.4 for sentence word counts | | totalSentences | 117 | | mean | 10.07 | | std | 6.45 | | cv | 0.64 | | sampleLengths | | 0 | 19 | | 1 | 24 | | 2 | 27 | | 3 | 12 | | 4 | 7 | | 5 | 23 | | 6 | 17 | | 7 | 9 | | 8 | 10 | | 9 | 13 | | 10 | 5 | | 11 | 17 | | 12 | 10 | | 13 | 3 | | 14 | 15 | | 15 | 2 | | 16 | 14 | | 17 | 25 | | 18 | 3 | | 19 | 11 | | 20 | 8 | | 21 | 14 | | 22 | 12 | | 23 | 9 | | 24 | 11 | | 25 | 7 | | 26 | 12 | | 27 | 4 | | 28 | 18 | | 29 | 13 | | 30 | 6 | | 31 | 13 | | 32 | 19 | | 33 | 2 | | 34 | 1 | | 35 | 14 | | 36 | 3 | | 37 | 19 | | 38 | 9 | | 39 | 3 | | 40 | 18 | | 41 | 12 | | 42 | 21 | | 43 | 9 | | 44 | 8 | | 45 | 3 | | 46 | 9 | | 47 | 5 | | 48 | 8 | | 49 | 6 |
| |
| 56.98% | Sentence opener variety | Target: ≥60% unique sentence openers | | consecutiveRepeats | 10 | | diversityRatio | 0.39316239316239315 | | totalSentences | 117 | | uniqueOpeners | 46 | |
| 100.00% | Adverb-first sentence starts | Target: ≥3% sentences starting with an adverb | | adverbCount | 5 | | totalSentences | 109 | | matches | | 0 | "Instead, she'd found answers in" | | 1 | "Just pure flight." | | 2 | "Too late for most of" | | 3 | "Then he disappeared." | | 4 | "Then she saw it." |
| | ratio | 0.046 | |
| 100.00% | Pronoun-first sentence starts | Target: ≤30% sentences starting with a pronoun | | pronounCount | 21 | | totalSentences | 109 | | matches | | 0 | "He'd bolted from the Raven's" | | 1 | "She'd only gone to the" | | 2 | "He knew she was police." | | 3 | "Her sharp jaw clenched as" | | 4 | "She'd learned long ago that" | | 5 | "You just needed them to" | | 6 | "His choice told her something—he" | | 7 | "He worked in Soho, or" | | 8 | "He'd gone down." | | 9 | "She could hear his footsteps" | | 10 | "She paused at the top" | | 11 | "She'd lost Morris three years" | | 12 | "She descended, torch beam cutting" | | 13 | "She played her torch across" | | 14 | "He'd reached another platform." | | 15 | "She could call it in." | | 16 | "He'd known these tunnels existed," | | 17 | "She moved forward into the" | | 18 | "Her breath formed small clouds" | | 19 | "Her torch beam caught the" |
| | ratio | 0.193 | |
| 74.68% | Subject-first sentence starts | Target: ≤72% sentences starting with a subject | | subjectCount | 84 | | totalSentences | 109 | | matches | | 0 | "The rain hammered against the" | | 1 | "Detective Harlow Quinn's trainers splashed" | | 2 | "The figure ahead moved with" | | 3 | "He'd bolted from the Raven's" | | 4 | "Quinn had been nursing a" | | 5 | "She'd only gone to the" | | 6 | "The suspect glanced back once," | | 7 | "He knew she was police." | | 8 | "The warrant card clipped to" | | 9 | "That's when he'd moved—no hesitation," | | 10 | "Quinn's worn leather watch caught" | | 11 | "The rain intensified." | | 12 | "Quinn's cropped hair, salt-and-pepper at" | | 13 | "Water ran down her neck" | | 14 | "Her sharp jaw clenched as" | | 15 | "She'd learned long ago that" | | 16 | "You just needed them to" | | 17 | "The suspect took a hard" | | 18 | "The back way toward Greek" | | 19 | "His choice told her something—he" |
| | ratio | 0.771 | |
| 0.00% | Subordinate conjunction sentence starts | Target: ≥2% sentences starting with a subordinating conjunction | | subConjCount | 0 | | totalSentences | 109 | | matches | (empty) | | ratio | 0 | |
| 100.00% | Technical jargon density | Target: ≤6% sentences with technical-jargon patterns | | analyzedSentences | 54 | | technicalSentenceCount | 2 | | matches | | 0 | "Her torch beam caught the edge of it before the scene registered properly—a space that shouldn't exist, sheltered beneath the arches of the station, filled with…" | | 1 | "The place where half the criminal underworld seemed to be buying and selling things that didn't fit into normal categories." |
| |
| 100.00% | Useless dialogue additions | Target: ≤5% dialogue tags with trailing filler fragments | | totalTags | 0 | | uselessAdditionCount | 0 | | matches | (empty) | |
| 100.00% | Dialogue tag variety (said vs. fancy) | Target: ≤10% fancy dialogue tags | |