| 100.00% | Adverbs in dialogue tags | Target: ≤10% dialogue tags with adverbs | | totalTags | 6 | | adverbTagCount | 0 | | adverbTags | (empty) | | dialogueSentences | 107 | | tagDensity | 0.056 | | leniency | 0.112 | | rawRatio | 0 | | effectiveRatio | 0 | |
| 93.80% | AI-ism adverb frequency | Target: <2% AI-ism adverbs (58 tracked) | | wordCount | 2421 | | totalAiIsmAdverbs | 3 | | found | | | highlights | | 0 | "perfectly" | | 1 | "carefully" | | 2 | "slowly" |
| |
| 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 | 2421 | | totalAiIsms | 9 | | found | | | highlights | | 0 | "velvet" | | 1 | "weight" | | 2 | "scanning" | | 3 | "measured" | | 4 | "stomach" | | 5 | "warmth" | | 6 | "pulse" | | 7 | "tenderness" |
| |
| 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 | 202 | | matches | (empty) | |
| 100.00% | Filter word density | Target: ≤3% sentences with filter/hedge words | | filterCount | 0 | | hedgeCount | 2 | | narrationSentences | 202 | | filterMatches | (empty) | | hedgeMatches | | 0 | "started to" | | 1 | "seemed to" |
| |
| 100.00% | Gibberish response detection | Target: ≤1% gibberish-like sentences (hard fail if a sentence exceeds 800 words) | | analyzedSentences | 303 | | gibberishSentences | 0 | | adjustedGibberishSentences | 0 | | longSentenceCount | 0 | | runOnParagraphCount | 0 | | giantParagraphCount | 0 | | wordSaladCount | 0 | | repetitionLoopCount | 0 | | controlTokenCount | 0 | | maxSentenceWordsSeen | 47 | | ratio | 0 | | matches | (empty) | |
| 100.00% | Markdown formatting overuse | Target: ≤5% words in markdown formatting | | markdownSpans | 0 | | markdownWords | 0 | | totalWords | 2418 | | ratio | 0 | | matches | (empty) | |
| 100.00% | Missing dialogue indicators (quotation marks) | Target: ≤10% speech attributions without quotation marks | | totalAttributions | 12 | | unquotedAttributions | 0 | | matches | (empty) | |
| 83.33% | Name drop frequency | Target: ≤1.0 per-name mentions per 100 words | | totalMentions | 60 | | wordCount | 1812 | | uniqueNames | 12 | | maxNameDensity | 1.27 | | worstName | "Aurora" | | maxWindowNameDensity | 2.5 | | worstWindowName | "Aurora" | | discoveredNames | | Aurora | 23 | | Lucien | 16 | | Moreau | 1 | | Eva | 5 | | Brick | 1 | | Lane | 1 | | Marseille | 1 | | Ptolemy | 4 | | London | 1 | | Soho | 1 | | One | 3 | | Blood | 3 |
| | persons | | 0 | "Aurora" | | 1 | "Lucien" | | 2 | "Moreau" | | 3 | "Eva" | | 4 | "Ptolemy" | | 5 | "Blood" |
| | places | | 0 | "Brick" | | 1 | "Lane" | | 2 | "Marseille" | | 3 | "London" | | 4 | "Soho" | | 5 | "One" |
| | globalScore | 0.865 | | windowScore | 0.833 | |
| 100.00% | Narrator intent-glossing | Target: ≤2% narration sentences with intent-glossing patterns | | analyzedSentences | 122 | | glossingSentenceCount | 0 | | matches | (empty) | |
| 100.00% | "Not X but Y" pattern overuse | Target: ≤1 "not X but Y" per 1000 words | | totalMatches | 1 | | per1kWords | 0.414 | | wordCount | 2418 | | matches | | 0 | "not mortal, but ugly enough" |
| |
| 100.00% | Overuse of "that" (subordinate clause padding) | Target: ≤2% sentences with "that" clauses | | thatCount | 2 | | totalSentences | 303 | | matches | | 0 | "hated that her" | | 1 | "stripped that polish" |
| |
| 100.00% | Paragraph length variance | Target: CV ≥0.5 for paragraph word counts | | totalParagraphs | 195 | | mean | 12.4 | | std | 15.76 | | cv | 1.271 | | sampleLengths | | 0 | 26 | | 1 | 83 | | 2 | 7 | | 3 | 3 | | 4 | 11 | | 5 | 5 | | 6 | 7 | | 7 | 2 | | 8 | 9 | | 9 | 12 | | 10 | 19 | | 11 | 40 | | 12 | 8 | | 13 | 1 | | 14 | 32 | | 15 | 39 | | 16 | 5 | | 17 | 3 | | 18 | 3 | | 19 | 30 | | 20 | 2 | | 21 | 5 | | 22 | 3 | | 23 | 35 | | 24 | 4 | | 25 | 3 | | 26 | 2 | | 27 | 13 | | 28 | 15 | | 29 | 7 | | 30 | 42 | | 31 | 24 | | 32 | 5 | | 33 | 4 | | 34 | 34 | | 35 | 4 | | 36 | 12 | | 37 | 9 | | 38 | 60 | | 39 | 43 | | 40 | 12 | | 41 | 3 | | 42 | 5 | | 43 | 2 | | 44 | 5 | | 45 | 9 | | 46 | 59 | | 47 | 8 | | 48 | 3 | | 49 | 2 |
| |
| 100.00% | Passive voice overuse | Target: ≤2% passive sentences | | passiveCount | 1 | | totalSentences | 202 | | matches | | |
| 100.00% | Past progressive (was/were + -ing) overuse | Target: ≤2% past progressive verbs | | pastProgressiveCount | 0 | | totalVerbs | 299 | | matches | (empty) | |
| 100.00% | Em-dash & semicolon overuse | Target: ≤2% sentences with em-dashes/semicolons | | emDashCount | 3 | | semicolonCount | 0 | | flaggedSentences | 3 | | totalSentences | 303 | | ratio | 0.01 | | matches | | 0 | "For half a beat, the noise from Brick Lane climbed the stairwell and filled the space between them—voices from the curry house below, a motorbike whining past, a drunk laugh cut short by the weather." | | 1 | "Research notes covered the walls in layers—maps, symbols, thread, coffee rings, frantic handwriting climbing over older frantic handwriting." | | 2 | "Every line on him looked deliberate—the clean shave, the straight collar, the long fingers, the face made for lies people wanted to believe." |
| |
| 93.92% | Purple prose (modifier overload) | Target: <4% adverbs, <2% -ly adverbs, no adj stacking | | wordCount | 1821 | | adjectiveStacks | 1 | | stackExamples | | 0 | "over older frantic handwriting." |
| | adverbCount | 73 | | adverbRatio | 0.040087863811092805 | | lyAdverbCount | 8 | | lyAdverbRatio | 0.004393190554640308 | |
| 100.00% | Repeated phrase echo | Target: ≤20% sentences with echoes (window: 2) | | totalSentences | 303 | | echoCount | 0 | | echoWords | (empty) | |
| 100.00% | Sentence length variance | Target: CV ≥0.4 for sentence word counts | | totalSentences | 303 | | mean | 7.98 | | std | 7.09 | | cv | 0.889 | | sampleLengths | | 0 | 26 | | 1 | 35 | | 2 | 31 | | 3 | 10 | | 4 | 7 | | 5 | 7 | | 6 | 3 | | 7 | 11 | | 8 | 5 | | 9 | 7 | | 10 | 2 | | 11 | 3 | | 12 | 6 | | 13 | 8 | | 14 | 2 | | 15 | 2 | | 16 | 19 | | 17 | 3 | | 18 | 18 | | 19 | 4 | | 20 | 4 | | 21 | 1 | | 22 | 1 | | 23 | 9 | | 24 | 8 | | 25 | 1 | | 26 | 21 | | 27 | 11 | | 28 | 15 | | 29 | 4 | | 30 | 20 | | 31 | 5 | | 32 | 3 | | 33 | 3 | | 34 | 14 | | 35 | 5 | | 36 | 11 | | 37 | 2 | | 38 | 5 | | 39 | 3 | | 40 | 6 | | 41 | 13 | | 42 | 16 | | 43 | 4 | | 44 | 3 | | 45 | 2 | | 46 | 4 | | 47 | 9 | | 48 | 15 | | 49 | 2 |
| |
| 45.38% | Sentence opener variety | Target: ≥60% unique sentence openers | | consecutiveRepeats | 14 | | diversityRatio | 0.25742574257425743 | | totalSentences | 303 | | uniqueOpeners | 78 | |
| 57.14% | Adverb-first sentence starts | Target: ≥3% sentences starting with an adverb | | adverbCount | 3 | | totalSentences | 175 | | matches | | 0 | "Instead she stepped aside." | | 1 | "Slowly, Lucien lifted his hands" | | 2 | "Instead she took one step" |
| | ratio | 0.017 | |
| 66.86% | Pronoun-first sentence starts | Target: ≤30% sentences starting with a pronoun | | pronounCount | 67 | | totalSentences | 175 | | matches | | 0 | "His mouth bent, though not" | | 1 | "Her grip tightened." | | 2 | "She started to shut the" | | 3 | "He put his palm flat" | | 4 | "He used her name in" | | 5 | "She hated that her body" | | 6 | "He stared at Lucien for" | | 7 | "He lowered his hand from" | | 8 | "She caught it in the" | | 9 | "She held his gaze." | | 10 | "She wanted it to." | | 11 | "She knew it." | | 12 | "He dipped his head once" | | 13 | "He did not comment on" | | 14 | "He set his cane against" | | 15 | "His coat slid from his" | | 16 | "Her stomach dipped before she" | | 17 | "She stared at him." | | 18 | "He looked back without blinking." | | 19 | "It shocked them both." |
| | ratio | 0.383 | |
| 40.00% | Subject-first sentence starts | Target: ≤72% sentences starting with a subject | | subjectCount | 147 | | totalSentences | 175 | | matches | | 0 | "Lucien took up the whole" | | 1 | "The other stayed black as" | | 2 | "Aurora kept one hand on" | | 3 | "His mouth bent, though not" | | 4 | "Her grip tightened." | | 5 | "She started to shut the" | | 6 | "He put his palm flat" | | 7 | "Aurora looked down." | | 8 | "Blood had soaked into the" | | 9 | "Lucien had always worn damage" | | 10 | "He used her name in" | | 11 | "She hated that her body" | | 12 | "The tabby’s ears flattened." | | 13 | "He stared at Lucien for" | | 14 | "Lucien glanced at the cat." | | 15 | "He lowered his hand from" | | 16 | "The movement cost him something." | | 17 | "She caught it in the" | | 18 | "Rain drummed against the stairwell" | | 19 | "Water ran from the hem" |
| | ratio | 0.84 | |
| 57.14% | Subordinate conjunction sentence starts | Target: ≥2% sentences starting with a subordinating conjunction | | subConjCount | 2 | | totalSentences | 175 | | matches | | 0 | "Even half-soaked and bleeding, he" | | 1 | "By the time she returned," |
| | ratio | 0.011 | |
| 74.83% | Technical jargon density | Target: ≤6% sentences with technical-jargon patterns | | analyzedSentences | 63 | | technicalSentenceCount | 6 | | matches | | 0 | "He used her name in that low Marseille velvet that used to slip under her skin and stay there all night." | | 1 | "Even half-soaked and bleeding, he looked infuriatingly composed, as if he had turned up for an appointment rather than on her doorstep near midnight with his ex…" | | 2 | "Three narrow rents ran from his upper ribs towards his side, as if something with claws had raked through cloth and skin in one clean swipe." | | 3 | "His fingers closed just above the crescent scar on her left wrist, warm now, careful around the old mark as if he remembered it without being told." | | 4 | "He looked less like the untouchable broker everyone in Soho lowered their voice around and more like the man who had once stood in her kitchen at two in the mor…" | | 5 | "She stared at him, at the line of his throat, at the damp blond hair escaping its careful slick at the temples, at the hand around her wrist that held but never…" |
| |
| 41.67% | Useless dialogue additions | Target: ≤5% dialogue tags with trailing filler fragments | | totalTags | 6 | | uselessAdditionCount | 1 | | matches | | 0 | "she went on, hands busy because her mouth had stopped listening to caution" |
| |
| 100.00% | Dialogue tag variety (said vs. fancy) | Target: ≤10% fancy dialogue tags | | totalTags | 5 | | fancyCount | 2 | | fancyTags | | 0 | "Aurora muttered (mutter)" | | 1 | "he murmured (murmur)" |
| | dialogueSentences | 107 | | tagDensity | 0.047 | | leniency | 0.093 | | rawRatio | 0.4 | | effectiveRatio | 0.037 | |