| 100.00% | Adverbs in dialogue tags | Target: ≤10% dialogue tags with adverbs | | totalTags | 7 | | adverbTagCount | 0 | | adverbTags | (empty) | | dialogueSentences | 15 | | tagDensity | 0.467 | | leniency | 0.933 | | rawRatio | 0 | | effectiveRatio | 0 | |
| 93.14% | AI-ism adverb frequency | Target: <2% AI-ism adverbs (58 tracked) | | wordCount | 1458 | | 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) | |
| 34.84% | AI-ism word frequency | Target: <2% AI-ism words (290 tracked) | | wordCount | 1458 | | totalAiIsms | 19 | | found | | 0 | | | 1 | | | 2 | | | 3 | | | 4 | | | 5 | | | 6 | | | 7 | | | 8 | | | 9 | | | 10 | | | 11 | | | 12 | | | 13 | | | 14 | | | 15 | | | 16 | | | 17 | | | 18 | |
| | highlights | | 0 | "familiar" | | 1 | "tangible" | | 2 | "measured" | | 3 | "etched" | | 4 | "vibrated" | | 5 | "silence" | | 6 | "cacophony" | | 7 | "depths" | | 8 | "structure" | | 9 | "rhythmic" | | 10 | "flickered" | | 11 | "footsteps" | | 12 | "echoed" | | 13 | "chaotic" | | 14 | "velvet" | | 15 | "stomach" | | 16 | "scanned" | | 17 | "porcelain" | | 18 | "hulking" |
| |
| 100.00% | Cliché density | Target: ≤1 cliche(s) per 800-word window | | totalCliches | 1 | | maxInWindow | 1 | | found | | 0 | | label | "stomach dropped/sank" | | count | 1 |
|
| | highlights | | |
| 100.00% | Emotion telling (show vs. tell) | Target: ≤3% sentences with emotion telling | | emotionTells | 0 | | narrationSentences | 83 | | matches | (empty) | |
| 74.01% | Filter word density | Target: ≤3% sentences with filter/hedge words | | filterCount | 2 | | hedgeCount | 2 | | narrationSentences | 83 | | filterMatches | | | hedgeMatches | | |
| 100.00% | Gibberish response detection | Target: ≤1% gibberish-like sentences (hard fail if a sentence exceeds 800 words) | | analyzedSentences | 91 | | gibberishSentences | 0 | | adjustedGibberishSentences | 0 | | longSentenceCount | 0 | | runOnParagraphCount | 0 | | giantParagraphCount | 0 | | wordSaladCount | 0 | | repetitionLoopCount | 0 | | controlTokenCount | 0 | | repeatedSegmentCount | 0 | | maxSentenceWordsSeen | 42 | | ratio | 0 | | matches | (empty) | |
| 100.00% | Markdown formatting overuse | Target: ≤5% words in markdown formatting | | markdownSpans | 0 | | markdownWords | 0 | | totalWords | 1453 | | ratio | 0 | | matches | (empty) | |
| 100.00% | Missing dialogue indicators (quotation marks) | Target: ≤10% speech attributions without quotation marks | | totalAttributions | 2 | | unquotedAttributions | 0 | | matches | (empty) | |
| 83.33% | Name drop frequency | Target: ≤1.0 per-name mentions per 100 words | | totalMentions | 54 | | wordCount | 1317 | | uniqueNames | 21 | | maxNameDensity | 1.29 | | worstName | "Harlow" | | maxWindowNameDensity | 2.5 | | worstWindowName | "Harlow" | | discoveredNames | | Camden | 1 | | High | 1 | | Street | 2 | | Harlow | 17 | | Quinn | 1 | | Met | 2 | | Tomás | 13 | | Herrera | 2 | | Buck | 1 | | Morris | 2 | | Soho | 1 | | Tube | 1 | | Transport | 1 | | London | 2 | | Spanish | 1 | | Nestled | 1 | | Northern | 1 | | Line | 1 | | Hyde | 1 | | Park | 1 | | Met-issue | 1 |
| | persons | | 0 | "Street" | | 1 | "Harlow" | | 2 | "Quinn" | | 3 | "Tomás" | | 4 | "Herrera" | | 5 | "Buck" | | 6 | "Morris" | | 7 | "Line" |
| | places | | 0 | "Camden" | | 1 | "High" | | 2 | "Soho" | | 3 | "London" | | 4 | "Hyde" | | 5 | "Park" |
| | globalScore | 0.855 | | windowScore | 0.833 | |
| 81.51% | Narrator intent-glossing | Target: ≤2% narration sentences with intent-glossing patterns | | analyzedSentences | 73 | | glossingSentenceCount | 2 | | matches | | 0 | "fire that seemed to suck the light out of the air around it" | | 1 | "looked like cracked porcelain" |
| |
| 100.00% | "Not X but Y" pattern overuse | Target: ≤1 "not X but Y" per 1000 words | | totalMatches | 0 | | per1kWords | 0 | | wordCount | 1453 | | matches | (empty) | |
| 100.00% | Overuse of "that" (subordinate clause padding) | Target: ≤2% sentences with "that" clauses | | thatCount | 1 | | totalSentences | 91 | | matches | | |
| 90.39% | Paragraph length variance | Target: CV ≥0.5 for paragraph word counts | | totalParagraphs | 39 | | mean | 37.26 | | std | 17.37 | | cv | 0.466 | | sampleLengths | | 0 | 70 | | 1 | 32 | | 2 | 3 | | 3 | 59 | | 4 | 41 | | 5 | 56 | | 6 | 64 | | 7 | 41 | | 8 | 24 | | 9 | 43 | | 10 | 50 | | 11 | 24 | | 12 | 27 | | 13 | 37 | | 14 | 36 | | 15 | 12 | | 16 | 23 | | 17 | 51 | | 18 | 22 | | 19 | 59 | | 20 | 10 | | 21 | 19 | | 22 | 76 | | 23 | 45 | | 24 | 30 | | 25 | 27 | | 26 | 21 | | 27 | 7 | | 28 | 31 | | 29 | 49 | | 30 | 35 | | 31 | 45 | | 32 | 70 | | 33 | 37 | | 34 | 28 | | 35 | 27 | | 36 | 45 | | 37 | 38 | | 38 | 39 |
| |
| 96.81% | Passive voice overuse | Target: ≤2% passive sentences | | passiveCount | 2 | | totalSentences | 83 | | matches | | |
| 100.00% | Past progressive (was/were + -ing) overuse | Target: ≤2% past progressive verbs | | pastProgressiveCount | 3 | | totalVerbs | 208 | | matches | | 0 | "was spinning" | | 1 | "was weighing" | | 2 | "was handing" |
| |
| 0.00% | Em-dash & semicolon overuse | Target: ≤2% sentences with em-dashes/semicolons | | emDashCount | 5 | | semicolonCount | 2 | | flaggedSentences | 7 | | totalSentences | 91 | | ratio | 0.077 | | matches | | 0 | "Military precision dictated every movement; she kept her centre of gravity low, elbows tucked, eyes locked on the space between Tomás's shoulder blades." | | 1 | "Now she had a tangible link—a disgraced NHS paramedic who frequented that Soho dive with the green neon sign, carrying a bag that smelled of antiseptic and old blood." | | 2 | "He backed up against a pair of corrugated iron doors set into the side of an old railway viaduct—an abandoned Tube station that Transport for London had bricked up before Harlow even joined the force." | | 3 | "The heavy iron chains didn't fall; they dissolved into wisps of grey smoke that the rain immediately beat down into the puddles." | | 4 | "Instead, a cacophony of sound rose from the depths below—the clinking of glass, the low hum of hundreds of overlapping voices speaking in languages that made her ears ache, and the sharp, ozone tang of a thunderstorm trapped in a bottle." | | 5 | "Braziers burned with flames that were entirely the wrong colour—cobalt blue, deep emerald, and a black fire that seemed to suck the light out of the air around it." | | 6 | "Her mind instantly flashed to the crime scene photo of DS Morris—the lacerations the coroner had insisted were made by industrial machinery, despite them being in the middle of an empty Hyde Park field." |
| |
| 88.00% | Purple prose (modifier overload) | Target: <4% adverbs, <2% -ly adverbs, no adj stacking | | wordCount | 1336 | | adjectiveStacks | 2 | | stackExamples | | 0 | "small, ivory-coloured disc," | | 1 | "dry, torch-lit brickwork" |
| | adverbCount | 29 | | adverbRatio | 0.021706586826347306 | | lyAdverbCount | 12 | | lyAdverbRatio | 0.008982035928143712 | |
| 100.00% | Repeated phrase echo | Target: ≤20% sentences with echoes (window: 2) | | totalSentences | 91 | | echoCount | 0 | | echoWords | (empty) | |
| 100.00% | Sentence length variance | Target: CV ≥0.4 for sentence word counts | | totalSentences | 91 | | mean | 15.97 | | std | 8.46 | | cv | 0.53 | | sampleLengths | | 0 | 22 | | 1 | 11 | | 2 | 18 | | 3 | 19 | | 4 | 23 | | 5 | 9 | | 6 | 3 | | 7 | 16 | | 8 | 13 | | 9 | 3 | | 10 | 27 | | 11 | 18 | | 12 | 23 | | 13 | 8 | | 14 | 19 | | 15 | 29 | | 16 | 11 | | 17 | 4 | | 18 | 26 | | 19 | 23 | | 20 | 5 | | 21 | 18 | | 22 | 18 | | 23 | 9 | | 24 | 12 | | 25 | 3 | | 26 | 16 | | 27 | 27 | | 28 | 15 | | 29 | 35 | | 30 | 16 | | 31 | 8 | | 32 | 17 | | 33 | 10 | | 34 | 19 | | 35 | 18 | | 36 | 30 | | 37 | 6 | | 38 | 12 | | 39 | 18 | | 40 | 5 | | 41 | 15 | | 42 | 22 | | 43 | 1 | | 44 | 13 | | 45 | 22 | | 46 | 3 | | 47 | 14 | | 48 | 22 | | 49 | 20 |
| |
| 77.66% | Sentence opener variety | Target: ≥60% unique sentence openers | | consecutiveRepeats | 6 | | diversityRatio | 0.5054945054945055 | | totalSentences | 91 | | uniqueOpeners | 46 | |
| 82.30% | Adverb-first sentence starts | Target: ≥3% sentences starting with an adverb | | adverbCount | 2 | | totalSentences | 81 | | matches | | 0 | "Instead, a sound like grinding" | | 1 | "Instead, a cacophony of sound" |
| | ratio | 0.025 | |
| 100.00% | Pronoun-first sentence starts | Target: ≤30% sentences starting with a pronoun | | pronounCount | 20 | | totalSentences | 81 | | matches | | 0 | "Her boots hit the wet" | | 1 | "Her voice cut through the" | | 2 | "He shoved a man in" | | 3 | "She hit the padlock with" | | 4 | "She wiped the rain from" | | 5 | "He backed up against a" | | 6 | "His fingers twitched against the" | | 7 | "His Spanish accent thickened under" | | 8 | "She jammed her steel baton" | | 9 | "She tumbled onto the top" | | 10 | "She stared at the dead" | | 11 | "She tapped the glass face." | | 12 | "He was moving fast, dropping" | | 13 | "She took the steps three" | | 14 | "His customer turned slightly, and" | | 15 | "Her stomach dropped." | | 16 | "Her mind instantly flashed to" | | 17 | "She scanned the crowd of" | | 18 | "He reached for a cleaver" | | 19 | "She checked her baton, then" |
| | ratio | 0.247 | |
| 71.11% | Subject-first sentence starts | Target: ≤72% sentences starting with a subject | | subjectCount | 63 | | totalSentences | 81 | | matches | | 0 | "Rain drummed against the tarmac" | | 1 | "Detective Harlow Quinn vaulted over" | | 2 | "Her boots hit the wet" | | 3 | "A heavy canvas medical bag" | | 4 | "Her voice cut through the" | | 5 | "Tomás didn't pause." | | 6 | "He shoved a man in" | | 7 | "Harlow tucked her chin down," | | 8 | "Military precision dictated every movement;" | | 9 | "Tomás vaulted a rusted chain-link" | | 10 | "The metal rattled violently." | | 11 | "A silver medallion bounced from" | | 12 | "Harlow didn't climb the fence." | | 13 | "She hit the padlock with" | | 14 | "The mortar crumbled, the bolt" | | 15 | "The alley smelled of rotting" | | 16 | "A dead end." | | 17 | "Harlow slowed her pace, her" | | 18 | "She wiped the rain from" | | 19 | "Tomás stood thirty feet away," |
| | ratio | 0.778 | |
| 100.00% | Subordinate conjunction sentence starts | Target: ≥2% sentences starting with a subordinating conjunction | | subConjCount | 2 | | totalSentences | 81 | | matches | | 0 | "Now she had a tangible" | | 1 | "Before she could lunge the" |
| | ratio | 0.025 | |
| 80.20% | Technical jargon density | Target: ≤6% sentences with technical-jargon patterns | | analyzedSentences | 57 | | technicalSentenceCount | 5 | | matches | | 0 | "Now she had a tangible link—a disgraced NHS paramedic who frequented that Soho dive with the green neon sign, carrying a bag that smelled of antiseptic and old …" | | 1 | "A silver medallion bounced from beneath his collar, catching the distant flare of a passing bus's headlights before disappearing back against his chest." | | 2 | "Nestled against his calloused skin lay a small, ivory-coloured disc, etched with geometric grooves that glowed with a faint, sickly violet light." | | 3 | "Instead, a cacophony of sound rose from the depths below—the clinking of glass, the low hum of hundreds of overlapping voices speaking in languages that made he…" | | 4 | "Braziers burned with flames that were entirely the wrong colour—cobalt blue, deep emerald, and a black fire that seemed to suck the light out of the air around …" |
| |
| 53.57% | Useless dialogue additions | Target: ≤5% dialogue tags with trailing filler fragments | | totalTags | 7 | | uselessAdditionCount | 1 | | matches | | 0 | "Harlow took, boots crunching on broken glass" |
| |
| 83.33% | Dialogue tag variety (said vs. fancy) | Target: ≤10% fancy dialogue tags | | totalTags | 1 | | fancyCount | 1 | | fancyTags | | 0 | "a raspy voice muttered (mutter)" |
| | dialogueSentences | 15 | | tagDensity | 0.067 | | leniency | 0.133 | | rawRatio | 1 | | effectiveRatio | 0.133 | |