| 100.00% | Adverbs in dialogue tags | Target: ≤10% dialogue tags with adverbs | | totalTags | 2 | | adverbTagCount | 0 | | adverbTags | (empty) | | dialogueSentences | 5 | | tagDensity | 0.4 | | leniency | 0.8 | | rawRatio | 0 | | effectiveRatio | 0 | |
| 87.61% | AI-ism adverb frequency | Target: <2% AI-ism adverbs (58 tracked) | | wordCount | 807 | | 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) | |
| 81.41% | AI-ism word frequency | Target: <2% AI-ism words (290 tracked) | | wordCount | 807 | | totalAiIsms | 3 | | found | | | highlights | | |
| 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 | 52 | | matches | (empty) | |
| 100.00% | Filter word density | Target: ≤3% sentences with filter/hedge words | | filterCount | 1 | | hedgeCount | 0 | | narrationSentences | 52 | | filterMatches | | | hedgeMatches | (empty) | |
| 100.00% | Gibberish response detection | Target: ≤1% gibberish-like sentences (hard fail if a sentence exceeds 800 words) | | analyzedSentences | 55 | | gibberishSentences | 0 | | adjustedGibberishSentences | 0 | | longSentenceCount | 0 | | runOnParagraphCount | 0 | | giantParagraphCount | 0 | | wordSaladCount | 0 | | repetitionLoopCount | 0 | | controlTokenCount | 0 | | repeatedSegmentCount | 0 | | maxSentenceWordsSeen | 45 | | ratio | 0 | | matches | (empty) | |
| 100.00% | Markdown formatting overuse | Target: ≤5% words in markdown formatting | | markdownSpans | 0 | | markdownWords | 0 | | totalWords | 807 | | ratio | 0 | | matches | (empty) | |
| 100.00% | Missing dialogue indicators (quotation marks) | Target: ≤10% speech attributions without quotation marks | | totalAttributions | 2 | | unquotedAttributions | 1 | | matches | | 0 | "Below, Herrera spoke, low and unhurried, to someone she could not see." |
| |
| 100.00% | Name drop frequency | Target: ≤1.0 per-name mentions per 100 words | | totalMentions | 23 | | wordCount | 778 | | uniqueNames | 16 | | maxNameDensity | 0.51 | | worstName | "Herrera" | | maxWindowNameDensity | 1 | | worstWindowName | "Quinn" | | discoveredNames | | Camden | 1 | | High | 1 | | Street | 1 | | Harlow | 1 | | Quinn | 3 | | Herrera | 4 | | Soho | 1 | | Met | 2 | | Old | 1 | | Kent | 1 | | Road | 1 | | Ray | 1 | | Morris | 2 | | Superintendent | 1 | | Christmas | 1 | | England | 1 |
| | persons | | 0 | "Harlow" | | 1 | "Quinn" | | 2 | "Herrera" | | 3 | "Ray" | | 4 | "Morris" |
| | places | | 0 | "Camden" | | 1 | "High" | | 2 | "Street" | | 3 | "Soho" | | 4 | "Old" | | 5 | "Kent" | | 6 | "Road" | | 7 | "England" |
| | globalScore | 1 | | windowScore | 1 | |
| 28.05% | Narrator intent-glossing | Target: ≤2% narration sentences with intent-glossing patterns | | analyzedSentences | 41 | | glossingSentenceCount | 2 | | matches | | 0 | "looked like a nail, a small white symbol" | | 1 | "not quite human in its pitch" |
| |
| 100.00% | "Not X but Y" pattern overuse | Target: ≤1 "not X but Y" per 1000 words | | totalMatches | 0 | | per1kWords | 0 | | wordCount | 807 | | matches | (empty) | |
| 100.00% | Overuse of "that" (subordinate clause padding) | Target: ≤2% sentences with "that" clauses | | thatCount | 1 | | totalSentences | 55 | | matches | | |
| 100.00% | Paragraph length variance | Target: CV ≥0.5 for paragraph word counts | | totalParagraphs | 19 | | mean | 42.47 | | std | 30.33 | | cv | 0.714 | | sampleLengths | | 0 | 50 | | 1 | 102 | | 2 | 58 | | 3 | 50 | | 4 | 11 | | 5 | 18 | | 6 | 5 | | 7 | 82 | | 8 | 49 | | 9 | 10 | | 10 | 114 | | 11 | 63 | | 12 | 27 | | 13 | 22 | | 14 | 20 | | 15 | 16 | | 16 | 46 | | 17 | 20 | | 18 | 44 |
| |
| 85.02% | Passive voice overuse | Target: ≤2% passive sentences | | passiveCount | 3 | | totalSentences | 52 | | matches | | 0 | "been pushed" | | 1 | "was lit" | | 2 | "been trained" |
| |
| 100.00% | Past progressive (was/were + -ing) overuse | Target: ≤2% past progressive verbs | | pastProgressiveCount | 1 | | totalVerbs | 123 | | matches | | |
| 100.00% | Em-dash & semicolon overuse | Target: ≤2% sentences with em-dashes/semicolons | | emDashCount | 0 | | semicolonCount | 0 | | flaggedSentences | 0 | | totalSentences | 55 | | ratio | 0 | | matches | (empty) | |
| 100.00% | Purple prose (modifier overload) | Target: <4% adverbs, <2% -ly adverbs, no adj stacking | | wordCount | 779 | | adjectiveStacks | 0 | | stackExamples | (empty) | | adverbCount | 17 | | adverbRatio | 0.021822849807445442 | | lyAdverbCount | 3 | | lyAdverbRatio | 0.0038510911424903724 | |
| 100.00% | Repeated phrase echo | Target: ≤20% sentences with echoes (window: 2) | | totalSentences | 55 | | echoCount | 0 | | echoWords | (empty) | |
| 100.00% | Sentence length variance | Target: CV ≥0.4 for sentence word counts | | totalSentences | 55 | | mean | 14.67 | | std | 10.33 | | cv | 0.704 | | sampleLengths | | 0 | 16 | | 1 | 34 | | 2 | 22 | | 3 | 2 | | 4 | 20 | | 5 | 31 | | 6 | 8 | | 7 | 19 | | 8 | 5 | | 9 | 6 | | 10 | 22 | | 11 | 10 | | 12 | 15 | | 13 | 14 | | 14 | 8 | | 15 | 4 | | 16 | 24 | | 17 | 6 | | 18 | 5 | | 19 | 18 | | 20 | 5 | | 21 | 15 | | 22 | 39 | | 23 | 8 | | 24 | 20 | | 25 | 17 | | 26 | 23 | | 27 | 9 | | 28 | 2 | | 29 | 8 | | 30 | 13 | | 31 | 23 | | 32 | 45 | | 33 | 5 | | 34 | 10 | | 35 | 18 | | 36 | 9 | | 37 | 6 | | 38 | 4 | | 39 | 12 | | 40 | 24 | | 41 | 8 | | 42 | 27 | | 43 | 12 | | 44 | 8 | | 45 | 2 | | 46 | 5 | | 47 | 15 | | 48 | 3 | | 49 | 13 |
| |
| 79.39% | Sentence opener variety | Target: ≥60% unique sentence openers | | consecutiveRepeats | 3 | | diversityRatio | 0.509090909090909 | | totalSentences | 55 | | uniqueOpeners | 28 | |
| 68.03% | Adverb-first sentence starts | Target: ≥3% sentences starting with an adverb | | adverbCount | 1 | | totalSentences | 49 | | matches | | 0 | "Then, closer, the scuff of" |
| | ratio | 0.02 | |
| 64.90% | Pronoun-first sentence starts | Target: ≤30% sentences starting with a pronoun | | pronounCount | 19 | | totalSentences | 49 | | matches | | 0 | "It hammered the awnings of" | | 1 | "She had watched him stitch" | | 2 | "She had not written any" | | 3 | "She took the corner hard." | | 4 | "Her boots skidded on painted" | | 5 | "Her left wrist was wet" | | 6 | "She glanced at the dial" | | 7 | "Her voice bounced off brick" | | 8 | "She pushed through the gap." | | 9 | "She could hear voices now," | | 10 | "She'd have known that gait" | | 11 | "She took the first step" | | 12 | "She had heard him call" | | 13 | "They had never found him." | | 14 | "Her hand went to her" | | 15 | "She thought about calling it" | | 16 | "Her Superintendent, who had already" | | 17 | "She thought about the bone" | | 18 | "She could go back up" |
| | ratio | 0.388 | |
| 82.45% | Subject-first sentence starts | Target: ≤72% sentences starting with a subject | | subjectCount | 37 | | totalSentences | 49 | | matches | | 0 | "The rain had come in" | | 1 | "It hammered the awnings of" | | 2 | "She had watched him stitch" | | 3 | "She had not written any" | | 4 | "That was the first mistake" | | 5 | "She took the corner hard." | | 6 | "Her boots skidded on painted" | | 7 | "The alley was narrow, walled" | | 8 | "Halfway down, a stack of" | | 9 | "Her left wrist was wet" | | 10 | "She glanced at the dial" | | 11 | "Her voice bounced off brick" | | 12 | "Nothing answered her but the" | | 13 | "She pushed through the gap." | | 14 | "Someone had painted a sign" | | 15 | "A bone, or a stylised" | | 16 | "The tunnel below was lit" | | 17 | "She could hear voices now," | | 18 | "She'd have known that gait" | | 19 | "She took the first step" |
| | ratio | 0.755 | |
| 0.00% | Subordinate conjunction sentence starts | Target: ≥2% sentences starting with a subordinating conjunction | | subConjCount | 0 | | totalSentences | 49 | | matches | (empty) | | ratio | 0 | |
| 96.77% | Technical jargon density | Target: ≤6% sentences with technical-jargon patterns | | analyzedSentences | 31 | | technicalSentenceCount | 2 | | matches | | 0 | "Former paramedic, struck off, currently the most useful pair of hands in a city full of things that bled wrong." | | 1 | "She had heard him call her name from below, and she had gone down, and when she reached the bottom there had been nothing there but his torch lying on the wet f…" |
| |
| 100.00% | Useless dialogue additions | Target: ≤5% dialogue tags with trailing filler fragments | | totalTags | 2 | | 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 | |