| 100.00% | Adverbs in dialogue tags | Target: ≤10% dialogue tags with adverbs | | totalTags | 1 | | adverbTagCount | 0 | | adverbTags | (empty) | | dialogueSentences | 5 | | tagDensity | 0.2 | | leniency | 0.4 | | rawRatio | 0 | | effectiveRatio | 0 | |
| 86.94% | AI-ism adverb frequency | Target: <2% AI-ism adverbs (58 tracked) | | wordCount | 1531 | | totalAiIsmAdverbs | 4 | | found | | | highlights | | 0 | "gently" | | 1 | "very" | | 2 | "quickly" |
| |
| 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) | |
| 67.34% | AI-ism word frequency | Target: <2% AI-ism words (290 tracked) | | wordCount | 1531 | | totalAiIsms | 10 | | found | | | highlights | | 0 | "stomach" | | 1 | "pounding" | | 2 | "footsteps" | | 3 | "resolving" | | 4 | "echoing" | | 5 | "standard" | | 6 | "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 | 129 | | matches | (empty) | |
| 87.49% | Filter word density | Target: ≤3% sentences with filter/hedge words | | filterCount | 1 | | hedgeCount | 4 | | narrationSentences | 129 | | filterMatches | | | hedgeMatches | | 0 | "seemed to" | | 1 | "tried to" | | 2 | "try to" |
| |
| 100.00% | Gibberish response detection | Target: ≤1% gibberish-like sentences (hard fail if a sentence exceeds 800 words) | | analyzedSentences | 133 | | gibberishSentences | 0 | | adjustedGibberishSentences | 0 | | longSentenceCount | 0 | | runOnParagraphCount | 0 | | giantParagraphCount | 0 | | wordSaladCount | 0 | | repetitionLoopCount | 0 | | controlTokenCount | 0 | | maxSentenceWordsSeen | 36 | | ratio | 0 | | matches | (empty) | |
| 100.00% | Markdown formatting overuse | Target: ≤5% words in markdown formatting | | markdownSpans | 0 | | markdownWords | 0 | | totalWords | 1516 | | ratio | 0 | | matches | (empty) | |
| 100.00% | Missing dialogue indicators (quotation marks) | Target: ≤10% speech attributions without quotation marks | | totalAttributions | 5 | | unquotedAttributions | 0 | | matches | (empty) | |
| 95.80% | Name drop frequency | Target: ≤1.0 per-name mentions per 100 words | | totalMentions | 30 | | wordCount | 1476 | | uniqueNames | 9 | | maxNameDensity | 1.08 | | worstName | "Quinn" | | maxWindowNameDensity | 1.5 | | worstWindowName | "Quinn" | | discoveredNames | | London | 1 | | Harlow | 1 | | Quinn | 16 | | Frith | 1 | | Street | 1 | | Morris | 5 | | Tube | 1 | | Underground | 1 | | Three | 3 |
| | persons | | 0 | "Harlow" | | 1 | "Quinn" | | 2 | "Morris" |
| | places | | 0 | "London" | | 1 | "Frith" | | 2 | "Street" | | 3 | "Three" |
| | globalScore | 0.958 | | windowScore | 1 | |
| 68.48% | Narrator intent-glossing | Target: ≤2% narration sentences with intent-glossing patterns | | analyzedSentences | 92 | | glossingSentenceCount | 3 | | matches | | 0 | "quite touching the ground" | | 1 | "symbols that seemed to shift at the edges of her vision, resolving into nothing when she tried to focus on them" | | 2 | "covers that seemed to breathe" |
| |
| 100.00% | "Not X but Y" pattern overuse | Target: ≤1 "not X but Y" per 1000 words | | totalMatches | 1 | | per1kWords | 0.66 | | wordCount | 1516 | | matches | | 0 | "Not footsteps anymore, but voices" |
| |
| 100.00% | Overuse of "that" (subordinate clause padding) | Target: ≤2% sentences with "that" clauses | | thatCount | 2 | | totalSentences | 133 | | matches | | 0 | "seen that kind" | | 1 | "shouted that this" |
| |
| 100.00% | Paragraph length variance | Target: CV ≥0.5 for paragraph word counts | | totalParagraphs | 45 | | mean | 33.69 | | std | 23.55 | | cv | 0.699 | | sampleLengths | | 0 | 74 | | 1 | 10 | | 2 | 58 | | 3 | 63 | | 4 | 7 | | 5 | 51 | | 6 | 2 | | 7 | 50 | | 8 | 55 | | 9 | 46 | | 10 | 39 | | 11 | 11 | | 12 | 10 | | 13 | 44 | | 14 | 5 | | 15 | 62 | | 16 | 9 | | 17 | 65 | | 18 | 29 | | 19 | 45 | | 20 | 14 | | 21 | 82 | | 22 | 22 | | 23 | 58 | | 24 | 47 | | 25 | 26 | | 26 | 4 | | 27 | 57 | | 28 | 29 | | 29 | 6 | | 30 | 63 | | 31 | 31 | | 32 | 23 | | 33 | 78 | | 34 | 6 | | 35 | 68 | | 36 | 44 | | 37 | 8 | | 38 | 29 | | 39 | 18 | | 40 | 18 | | 41 | 13 | | 42 | 11 | | 43 | 13 | | 44 | 13 |
| |
| 94.38% | Passive voice overuse | Target: ≤2% passive sentences | | passiveCount | 4 | | totalSentences | 129 | | matches | | 0 | "been classified" | | 1 | "been decommissioned" | | 2 | "been abandoned" | | 3 | "were cracked" | | 4 | "been discovered" |
| |
| 92.04% | Past progressive (was/were + -ing) overuse | Target: ≤2% past progressive verbs | | pastProgressiveCount | 4 | | totalVerbs | 247 | | matches | | 0 | "wasn't quite touching" | | 1 | "was getting" | | 2 | "was still watching" | | 3 | "was never coming" |
| |
| 0.00% | Em-dash & semicolon overuse | Target: ≤2% sentences with em-dashes/semicolons | | emDashCount | 16 | | semicolonCount | 0 | | flaggedSentences | 13 | | totalSentences | 133 | | ratio | 0.098 | | matches | | 0 | "The figure ahead was fast—unnaturally fast—weaving through the late-night crowd outside a pub with a fluidity that made Quinn's stomach tighten." | | 1 | "All that mattered was the gap between her and her quarry—fifteen meters, now twelve, now—" | | 2 | "Then she caught movement at the far end—a shadow slipping through a gate she hadn't noticed, half-hidden behind a skip overflowing with produce crates." | | 3 | "This was how officers ended up dead—or worse, disappeared, their cases sealed and their partners left with nothing but questions and a box of unsolved files." | | 4 | "The stairwell smelled of damp concrete and something else—something metallic, like old blood or copper wiring left to rust." | | 5 | "The walls were marked with graffiti that didn't look like any gang tags she'd seen—symbols that seemed to shift at the edges of her vision, resolving into nothing when she tried to focus on them." | | 6 | "She knew the Underground network better than most coppers—knew which stations had been decommissioned, which lines had been abandoned during the war and never reopened." | | 7 | "Somewhere ahead were answers—or at least the promise of them." | | 8 | "The suspect was easy to spot now—a figure in a dark coat moving quickly between the stalls, heading for the far end of the market." | | 9 | "A child—no, not a child, something wearing a child's shape—tugging at its mother's sleeve." | | 10 | "But by the time anyone arrived, the market would be gone—she understood that instinctively." | | 11 | "Her hand went to the inside pocket of her jacket instead, where she kept the thing she'd found in Morris's personal effects—the one item the investigators had missed when they'd sealed his files." | | 12 | "At the entrance to the market, a man sat on a stool beside a table covered in small objects—teeth, coins, stones, bones." |
| |
| 100.00% | Purple prose (modifier overload) | Target: <4% adverbs, <2% -ly adverbs, no adj stacking | | wordCount | 1495 | | adjectiveStacks | 0 | | stackExamples | (empty) | | adverbCount | 58 | | adverbRatio | 0.03879598662207358 | | lyAdverbCount | 16 | | lyAdverbRatio | 0.010702341137123745 | |
| 100.00% | Repeated phrase echo | Target: ≤20% sentences with echoes (window: 2) | | totalSentences | 133 | | echoCount | 0 | | echoWords | (empty) | |
| 100.00% | Sentence length variance | Target: CV ≥0.4 for sentence word counts | | totalSentences | 133 | | mean | 11.4 | | std | 7.99 | | cv | 0.701 | | sampleLengths | | 0 | 18 | | 1 | 25 | | 2 | 8 | | 3 | 23 | | 4 | 10 | | 5 | 21 | | 6 | 7 | | 7 | 3 | | 8 | 27 | | 9 | 26 | | 10 | 22 | | 11 | 15 | | 12 | 7 | | 13 | 11 | | 14 | 17 | | 15 | 10 | | 16 | 2 | | 17 | 2 | | 18 | 9 | | 19 | 2 | | 20 | 15 | | 21 | 12 | | 22 | 19 | | 23 | 4 | | 24 | 22 | | 25 | 9 | | 26 | 24 | | 27 | 9 | | 28 | 20 | | 29 | 17 | | 30 | 10 | | 31 | 3 | | 32 | 26 | | 33 | 8 | | 34 | 1 | | 35 | 2 | | 36 | 5 | | 37 | 2 | | 38 | 3 | | 39 | 19 | | 40 | 22 | | 41 | 3 | | 42 | 5 | | 43 | 14 | | 44 | 8 | | 45 | 5 | | 46 | 35 | | 47 | 6 | | 48 | 3 | | 49 | 3 |
| |
| 55.89% | Sentence opener variety | Target: ≥60% unique sentence openers | | consecutiveRepeats | 14 | | diversityRatio | 0.39849624060150374 | | totalSentences | 133 | | uniqueOpeners | 53 | |
| 100.00% | Adverb-first sentence starts | Target: ≥3% sentences starting with an adverb | | adverbCount | 7 | | totalSentences | 118 | | matches | | 0 | "All that mattered was the" | | 1 | "Then she caught movement at" | | 2 | "Of course not." | | 3 | "Then she heard it." | | 4 | "Somewhere ahead, that suspect was" | | 5 | "Somewhere ahead were answers—or at" | | 6 | "Only that it felt right." |
| | ratio | 0.059 | |
| 100.00% | Pronoun-first sentence starts | Target: ≤30% sentences starting with a pronoun | | pronounCount | 22 | | totalSentences | 118 | | matches | | 0 | "She'd seen that kind of" | | 1 | "She pushed harder, her shoulder" | | 2 | "She could hear footsteps ahead," | | 3 | "She sprinted, her boots skidding" | | 4 | "She pulled out her phone." | | 5 | "She knew the Underground network" | | 6 | "She moved forward, keeping her" | | 7 | "She pressed herself against the" | | 8 | "Her eyes caught the torchlight" | | 9 | "She could turn back." | | 10 | "It operated by rules she" | | 11 | "His terrible jokes." | | 12 | "She thought of his widow" | | 13 | "His daughters, twelve and fourteen," | | 14 | "She let go of the" | | 15 | "Her hand went to the" | | 16 | "She'd taken it without knowing" | | 17 | "He watched her approach without" | | 18 | "His face was ancient, lined" | | 19 | "Her voice was steady." |
| | ratio | 0.186 | |
| 100.00% | Subject-first sentence starts | Target: ≤72% sentences starting with a subject | | subjectCount | 84 | | totalSentences | 118 | | matches | | 0 | "The rain came down in" | | 1 | "Detective Harlow Quinn's boots struck" | | 2 | "The figure ahead was fast—unnaturally" | | 3 | "She'd seen that kind of" | | 4 | "She pushed harder, her shoulder" | | 5 | "The worn leather watch on" | | 6 | "The figure ducked left down" | | 7 | "Quinn followed, her hand going" | | 8 | "The alley stank of old" | | 9 | "She could hear footsteps ahead," | | 10 | "The words were automatic, a" | | 11 | "This wasn't some street kid" | | 12 | "This was something else." | | 13 | "The alley opened onto a" | | 14 | "She sprinted, her boots skidding" | | 15 | "The gate led to a" | | 16 | "Quinn paused at the threshold," | | 17 | "This was wrong." | | 18 | "This was how officers ended" | | 19 | "She pulled out her phone." |
| | ratio | 0.712 | |
| 42.37% | Subordinate conjunction sentence starts | Target: ≥2% sentences starting with a subordinating conjunction | | subConjCount | 1 | | totalSentences | 118 | | matches | | 0 | "As if someone had swept" |
| | ratio | 0.008 | |
| 99.57% | Technical jargon density | Target: ≤6% sentences with technical-jargon patterns | | analyzedSentences | 66 | | technicalSentenceCount | 4 | | matches | | 0 | "The figure ahead was fast—unnaturally fast—weaving through the late-night crowd outside a pub with a fluidity that made Quinn's stomach tighten." | | 1 | "In the warehouse where Morris had died on a case that had been classified above her pay grade and sealed before she could ask the right questions." | | 2 | "The beam cut through the darkness, revealing stairs that descended farther than made sense." | | 3 | "The old man smiled, showing teeth that were too sharp and too many." |
| |
| 100.00% | Useless dialogue additions | Target: ≤5% dialogue tags with trailing filler fragments | | totalTags | 1 | | uselessAdditionCount | 0 | | matches | (empty) | |
| 100.00% | Dialogue tag variety (said vs. fancy) | Target: ≤10% fancy dialogue tags | | totalTags | 1 | | fancyCount | 0 | | fancyTags | (empty) | | dialogueSentences | 5 | | tagDensity | 0.2 | | leniency | 0.4 | | rawRatio | 0 | | effectiveRatio | 0 | |