| 100.00% | Adverbs in dialogue tags | Target: ≤10% dialogue tags with adverbs | | totalTags | 3 | | adverbTagCount | 0 | | adverbTags | (empty) | | dialogueSentences | 14 | | tagDensity | 0.214 | | leniency | 0.429 | | rawRatio | 0 | | effectiveRatio | 0 | |
| 100.00% | AI-ism adverb frequency | Target: <2% AI-ism adverbs (58 tracked) | | wordCount | 1034 | | totalAiIsmAdverbs | 0 | | found | (empty) | | highlights | (empty) | |
| 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) | |
| 85.49% | AI-ism word frequency | Target: <2% AI-ism words (290 tracked) | | wordCount | 1034 | | totalAiIsms | 3 | | found | | | highlights | | 0 | "echoed" | | 1 | "weight" | | 2 | "flickered" |
| |
| 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 | 57 | | matches | (empty) | |
| 100.00% | Filter word density | Target: ≤3% sentences with filter/hedge words | | filterCount | 0 | | hedgeCount | 0 | | narrationSentences | 57 | | filterMatches | (empty) | | hedgeMatches | (empty) | |
| 100.00% | Gibberish response detection | Target: ≤1% gibberish-like sentences (hard fail if a sentence exceeds 800 words) | | analyzedSentences | 68 | | gibberishSentences | 0 | | adjustedGibberishSentences | 0 | | longSentenceCount | 0 | | runOnParagraphCount | 0 | | giantParagraphCount | 0 | | wordSaladCount | 0 | | repetitionLoopCount | 0 | | controlTokenCount | 0 | | repeatedSegmentCount | 0 | | maxSentenceWordsSeen | 67 | | ratio | 0 | | matches | (empty) | |
| 100.00% | Markdown formatting overuse | Target: ≤5% words in markdown formatting | | markdownSpans | 2 | | markdownWords | 2 | | totalWords | 1034 | | ratio | 0.002 | | matches | | |
| 100.00% | Missing dialogue indicators (quotation marks) | Target: ≤10% speech attributions without quotation marks | | totalAttributions | 2 | | unquotedAttributions | 0 | | matches | (empty) | |
| 100.00% | Name drop frequency | Target: ≤1.0 per-name mentions per 100 words | | totalMentions | 18 | | wordCount | 918 | | uniqueNames | 12 | | maxNameDensity | 0.33 | | worstName | "Herrera" | | maxWindowNameDensity | 1 | | worstWindowName | "Herrera" | | discoveredNames | | Quinn | 1 | | Camden | 2 | | Inverness | 1 | | Street | 1 | | Herrera | 3 | | London | 1 | | Christmas | 1 | | Underground | 1 | | Morris | 3 | | Bermondsey | 1 | | Victorian | 2 | | Like | 1 |
| | persons | | 0 | "Quinn" | | 1 | "Herrera" | | 2 | "Morris" |
| | places | | 0 | "Inverness" | | 1 | "Street" | | 2 | "London" | | 3 | "Bermondsey" |
| | globalScore | 1 | | windowScore | 1 | |
| 90.48% | Narrator intent-glossing | Target: ≤2% narration sentences with intent-glossing patterns | | analyzedSentences | 42 | | glossingSentenceCount | 1 | | matches | | 0 | "quite anything she had a name for, and Morris just gone, vanished, like he'd never stood beside her at all" |
| |
| 100.00% | "Not X but Y" pattern overuse | Target: ≤1 "not X but Y" per 1000 words | | totalMatches | 0 | | per1kWords | 0 | | wordCount | 1034 | | matches | (empty) | |
| 100.00% | Overuse of "that" (subordinate clause padding) | Target: ≤2% sentences with "that" clauses | | thatCount | 0 | | totalSentences | 68 | | matches | (empty) | |
| 100.00% | Paragraph length variance | Target: CV ≥0.5 for paragraph word counts | | totalParagraphs | 34 | | mean | 30.41 | | std | 25.49 | | cv | 0.838 | | sampleLengths | | 0 | 16 | | 1 | 2 | | 2 | 47 | | 3 | 50 | | 4 | 43 | | 5 | 1 | | 6 | 57 | | 7 | 4 | | 8 | 2 | | 9 | 73 | | 10 | 37 | | 11 | 8 | | 12 | 78 | | 13 | 10 | | 14 | 12 | | 15 | 86 | | 16 | 9 | | 17 | 10 | | 18 | 69 | | 19 | 45 | | 20 | 30 | | 21 | 1 | | 22 | 2 | | 23 | 35 | | 24 | 67 | | 25 | 10 | | 26 | 31 | | 27 | 33 | | 28 | 26 | | 29 | 1 | | 30 | 29 | | 31 | 59 | | 32 | 47 | | 33 | 4 |
| |
| 86.80% | Passive voice overuse | Target: ≤2% passive sentences | | passiveCount | 3 | | totalSentences | 57 | | matches | | 0 | "get built" | | 1 | "was played" | | 2 | "was gone" |
| |
| 100.00% | Past progressive (was/were + -ing) overuse | Target: ≤2% past progressive verbs | | pastProgressiveCount | 2 | | totalVerbs | 152 | | matches | | 0 | "was trying" | | 1 | "was getting" |
| |
| 100.00% | Em-dash & semicolon overuse | Target: ≤2% sentences with em-dashes/semicolons | | emDashCount | 0 | | semicolonCount | 0 | | flaggedSentences | 0 | | totalSentences | 68 | | ratio | 0 | | matches | (empty) | |
| 100.00% | Purple prose (modifier overload) | Target: <4% adverbs, <2% -ly adverbs, no adj stacking | | wordCount | 791 | | adjectiveStacks | 0 | | stackExamples | (empty) | | adverbCount | 31 | | adverbRatio | 0.039190897597977246 | | lyAdverbCount | 10 | | lyAdverbRatio | 0.012642225031605562 | |
| 100.00% | Repeated phrase echo | Target: ≤20% sentences with echoes (window: 2) | | totalSentences | 68 | | echoCount | 0 | | echoWords | (empty) | |
| 100.00% | Sentence length variance | Target: CV ≥0.4 for sentence word counts | | totalSentences | 68 | | mean | 15.21 | | std | 14.33 | | cv | 0.943 | | sampleLengths | | 0 | 16 | | 1 | 2 | | 2 | 3 | | 3 | 3 | | 4 | 41 | | 5 | 14 | | 6 | 4 | | 7 | 21 | | 8 | 11 | | 9 | 43 | | 10 | 1 | | 11 | 8 | | 12 | 9 | | 13 | 18 | | 14 | 22 | | 15 | 4 | | 16 | 2 | | 17 | 36 | | 18 | 4 | | 19 | 9 | | 20 | 24 | | 21 | 24 | | 22 | 5 | | 23 | 8 | | 24 | 8 | | 25 | 17 | | 26 | 20 | | 27 | 4 | | 28 | 15 | | 29 | 9 | | 30 | 3 | | 31 | 2 | | 32 | 8 | | 33 | 10 | | 34 | 12 | | 35 | 4 | | 36 | 54 | | 37 | 19 | | 38 | 4 | | 39 | 5 | | 40 | 9 | | 41 | 10 | | 42 | 31 | | 43 | 38 | | 44 | 5 | | 45 | 8 | | 46 | 32 | | 47 | 8 | | 48 | 22 | | 49 | 1 |
| |
| 98.53% | Sentence opener variety | Target: ≥60% unique sentence openers | | consecutiveRepeats | 1 | | diversityRatio | 0.6029411764705882 | | totalSentences | 68 | | uniqueOpeners | 41 | |
| 100.00% | Adverb-first sentence starts | Target: ≥3% sentences starting with an adverb | | adverbCount | 4 | | totalSentences | 56 | | matches | | 0 | "Somewhere behind her, distantly, a" | | 1 | "Just enough to confirm what" | | 2 | "Then he ran again." | | 3 | "Somewhere in the last minute," |
| | ratio | 0.071 | |
| 100.00% | Pronoun-first sentence starts | Target: ≤30% sentences starting with a pronoun | | pronounCount | 15 | | totalSentences | 56 | | matches | | 0 | "He didn't stop." | | 1 | "He never stopped." | | 2 | "Her boots found a puddle" | | 3 | "She swore, kept running." | | 4 | "His scar caught the streetlight," | | 5 | "She followed him past a" | | 6 | "Her jacket clung heavy and" | | 7 | "She hesitated at the top" | | 8 | "Her voice echoed back at" | | 9 | "She thought of Morris." | | 10 | "She'd never bought it." | | 11 | "She drew her torch, thumbed" | | 12 | "She thought about her warrant" | | 13 | "Her hand found the grip" | | 14 | "She stepped forward anyway." |
| | ratio | 0.268 | |
| 100.00% | Subject-first sentence starts | Target: ≤72% sentences starting with a subject | | subjectCount | 37 | | totalSentences | 56 | | matches | | 0 | "The man's trainers slapped against" | | 1 | "He didn't stop." | | 2 | "He never stopped." | | 3 | "Her boots found a puddle" | | 4 | "She swore, kept running." | | 5 | "The market stalls stood shuttered" | | 6 | "The man cut left into" | | 7 | "The name stopped him for" | | 8 | "Tomás Herrera, former NHS paramedic," | | 9 | "His scar caught the streetlight," | | 10 | "She followed him past a" | | 11 | "Rain needled her face." | | 12 | "Her jacket clung heavy and" | | 13 | "Herrera ducked down a set" | | 14 | "TUBE STATION, read another, the" | | 15 | "She hesitated at the top" | | 16 | "Every instinct that had kept" | | 17 | "The air coming up from" | | 18 | "Dozens of them." | | 19 | "Her voice echoed back at" |
| | ratio | 0.661 | |
| 0.00% | Subordinate conjunction sentence starts | Target: ≥2% sentences starting with a subordinating conjunction | | subConjCount | 0 | | totalSentences | 56 | | matches | (empty) | | ratio | 0 | |
| 0.00% | Technical jargon density | Target: ≤6% sentences with technical-jargon patterns | | analyzedSentences | 26 | | technicalSentenceCount | 7 | | matches | | 0 | "Herrera ducked down a set of concrete steps she'd never noticed before, half-hidden behind a boarded hoarding advertising flats that would never get built." | | 1 | "Three years now, and she still saw it some nights when she closed her eyes, the warehouse in Bermondsey, the thing that had come apart in the dark that wasn't a…" | | 2 | "A draught pushed up from below, carrying with it the murmur again, louder now, threaded through with something that might have been music, if music could sound …" | | 3 | "Warm, amber, flickering like lanternlight, pooling along a platform that shouldn't exist, lined with stalls that definitely shouldn't exist, hung with lamps and…" | | 4 | "*Veil.* Like it meant something specific, something with weight behind it, and she was the only person in a hundred-mile radius who didn't know the punchline." | | 5 | "Behind him, the lanternlight flickered across a face in the crowd, and for one impossible half-second she saw something that was not a face at all, something wi…" | | 6 | "Rain dripped steadily off the hem of her jacket, pattering against Victorian tile that had no business existing under Camden, and somewhere beyond that barrier,…" |
| |
| 100.00% | Useless dialogue additions | Target: ≤5% dialogue tags with trailing filler fragments | | totalTags | 3 | | uselessAdditionCount | 0 | | matches | (empty) | |
| 100.00% | Dialogue tag variety (said vs. fancy) | Target: ≤10% fancy dialogue tags | |