| 82.35% | Adverbs in dialogue tags | Target: ≤10% dialogue tags with adverbs | | totalTags | 23 | | adverbTagCount | 5 | | adverbTags | | 0 | "she said quietly [quietly]" | | 1 | "He moved further [further]" | | 2 | "she said quietly [quietly]" | | 3 | "she said finally [finally]" | | 4 | "She turned away [away]" |
| | dialogueSentences | 85 | | tagDensity | 0.271 | | leniency | 0.541 | | rawRatio | 0.217 | | effectiveRatio | 0.118 | |
| 82.77% | AI-ism adverb frequency | Target: <2% AI-ism adverbs (58 tracked) | | wordCount | 2031 | | totalAiIsmAdverbs | 7 | | found | | | highlights | | 0 | "slightly" | | 1 | "really" | | 2 | "carefully" | | 3 | "slowly" | | 4 | "very" | | 5 | "utterly" |
| |
| 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) | |
| 72.92% | AI-ism word frequency | Target: <2% AI-ism words (290 tracked) | | wordCount | 2031 | | totalAiIsms | 11 | | found | | 0 | | | 1 | | | 2 | | | 3 | | | 4 | | word | "down her spine" | | count | 1 |
| | 5 | | | 6 | | | 7 | | | 8 | | | 9 | | | 10 | |
| | highlights | | 0 | "echoed" | | 1 | "navigating" | | 2 | "familiar" | | 3 | "flickered" | | 4 | "down her spine" | | 5 | "implication" | | 6 | "comfortable" | | 7 | "silence" | | 8 | "constructed" | | 9 | "traced" | | 10 | "etched" |
| |
| 100.00% | Cliché density | Target: ≤1 cliche(s) per 800-word window | | totalCliches | 1 | | maxInWindow | 1 | | found | | 0 | | label | "hung in the air" | | count | 1 |
|
| | highlights | | |
| 100.00% | Emotion telling (show vs. tell) | Target: ≤3% sentences with emotion telling | | emotionTells | 0 | | narrationSentences | 108 | | matches | (empty) | |
| 89.95% | Filter word density | Target: ≤3% sentences with filter/hedge words | | filterCount | 1 | | hedgeCount | 3 | | narrationSentences | 108 | | filterMatches | | | hedgeMatches | | |
| 100.00% | Gibberish response detection | Target: ≤1% gibberish-like sentences (hard fail if a sentence exceeds 800 words) | | analyzedSentences | 170 | | gibberishSentences | 0 | | adjustedGibberishSentences | 0 | | longSentenceCount | 0 | | runOnParagraphCount | 0 | | giantParagraphCount | 0 | | wordSaladCount | 0 | | repetitionLoopCount | 0 | | controlTokenCount | 0 | | maxSentenceWordsSeen | 67 | | ratio | 0 | | matches | (empty) | |
| 100.00% | Markdown formatting overuse | Target: ≤5% words in markdown formatting | | markdownSpans | 0 | | markdownWords | 0 | | totalWords | 2017 | | ratio | 0 | | matches | (empty) | |
| 100.00% | Missing dialogue indicators (quotation marks) | Target: ≤10% speech attributions without quotation marks | | totalAttributions | 26 | | unquotedAttributions | 0 | | matches | (empty) | |
| 100.00% | Name drop frequency | Target: ≤1.0 per-name mentions per 100 words | | totalMentions | 42 | | wordCount | 1263 | | uniqueNames | 13 | | maxNameDensity | 0.79 | | worstName | "Rory" | | maxWindowNameDensity | 1.5 | | worstWindowName | "Rory" | | discoveredNames | | Tuesday | 1 | | Eva | 4 | | Paris | 3 | | Moreau | 3 | | Controlled | 1 | | Ptolemy | 4 | | Rory | 10 | | French | 2 | | Lucien | 7 | | Old | 1 | | Eight | 2 | | Silas | 1 | | Four | 3 |
| | persons | | 0 | "Eva" | | 1 | "Moreau" | | 2 | "Ptolemy" | | 3 | "Rory" | | 4 | "Lucien" | | 5 | "Silas" |
| | places | | | globalScore | 1 | | windowScore | 1 | |
| 81.51% | Narrator intent-glossing | Target: ≤2% narration sentences with intent-glossing patterns | | analyzedSentences | 73 | | glossingSentenceCount | 2 | | matches | | 0 | "looked like he hadn't slept in days" | | 1 | "as if offering commentary" |
| |
| 100.00% | "Not X but Y" pattern overuse | Target: ≤1 "not X but Y" per 1000 words | | totalMatches | 2 | | per1kWords | 0.992 | | wordCount | 2017 | | matches | | 0 | "Not a polite knock either, but three sharp raps" | | 1 | "not embarrassment, but anger" |
| |
| 100.00% | Overuse of "that" (subordinate clause padding) | Target: ≤2% sentences with "that" clauses | | thatCount | 1 | | totalSentences | 170 | | matches | | |
| 100.00% | Paragraph length variance | Target: CV ≥0.5 for paragraph word counts | | totalParagraphs | 96 | | mean | 21.01 | | std | 19.28 | | cv | 0.918 | | sampleLengths | | 0 | 28 | | 1 | 62 | | 2 | 3 | | 3 | 14 | | 4 | 1 | | 5 | 57 | | 6 | 31 | | 7 | 63 | | 8 | 6 | | 9 | 17 | | 10 | 27 | | 11 | 1 | | 12 | 4 | | 13 | 48 | | 14 | 9 | | 15 | 7 | | 16 | 9 | | 17 | 57 | | 18 | 13 | | 19 | 32 | | 20 | 8 | | 21 | 1 | | 22 | 22 | | 23 | 16 | | 24 | 74 | | 25 | 3 | | 26 | 39 | | 27 | 27 | | 28 | 14 | | 29 | 2 | | 30 | 20 | | 31 | 7 | | 32 | 12 | | 33 | 3 | | 34 | 37 | | 35 | 65 | | 36 | 13 | | 37 | 5 | | 38 | 35 | | 39 | 13 | | 40 | 4 | | 41 | 47 | | 42 | 5 | | 43 | 2 | | 44 | 42 | | 45 | 12 | | 46 | 23 | | 47 | 9 | | 48 | 18 | | 49 | 1 |
| |
| 100.00% | Passive voice overuse | Target: ≤2% passive sentences | | passiveCount | 1 | | totalSentences | 108 | | matches | | |
| 14.81% | Past progressive (was/were + -ing) overuse | Target: ≤2% past progressive verbs | | pastProgressiveCount | 6 | | totalVerbs | 216 | | matches | | 0 | "was standing" | | 1 | "was trying" | | 2 | "was looking" | | 3 | "wasn't looking" | | 4 | "was looking" | | 5 | "wasn't running" |
| |
| 0.00% | Em-dash & semicolon overuse | Target: ≤2% sentences with em-dashes/semicolons | | emDashCount | 12 | | semicolonCount | 0 | | flaggedSentences | 11 | | totalSentences | 170 | | ratio | 0.065 | | matches | | 0 | "His mismatched eyes swept over her—taking in the oversized sweater, the hair scraped back in a messy knot, the crescent scar on her wrist that she'd never bothered to hide from him." | | 1 | "Rory felt the familiar prickle of frustration build in her chest—the same frustration she'd felt every time she tried to hate him and failed." | | 2 | "For a moment, something flickered behind those strange eyes—amber and black, human and something else—that made Rory's breath catch despite herself." | | 3 | "Ptolemy immediately wound between Lucien's legs as he entered, and Rory watched the half-demon's expression shift—something softer crossing his features as he bent to scratch behind the cat's ears." | | 4 | "Rory felt heat rise to her cheeks—not embarrassment, but anger." | | 5 | "\"—is a wall. And then you walked into Silas' back room with ink on your fingers and that ridiculous takeaway container and looked at me like I was a problem you wanted to solve.\"" | | 6 | "This close, she could smell his cologne—something dark and expensive, the same one he'd worn in Paris." | | 7 | "Lucien's expression shifted—something vulnerable breaking through the composure he wore like armor." | | 8 | "She studied his face—the exhaustion etched into it, the genuine fear beneath the composure, the way he was looking at her like she mattered." | | 9 | "The smile that crossed his face was small but real—the first genuine expression she'd seen from him." | | 10 | "They didn't capture the tangle of emotions warring in her chest—the anger still present, the hurt still sharp, but underneath it all, something warm and terrifying that had never quite gone away." |
| |
| 100.00% | Purple prose (modifier overload) | Target: <4% adverbs, <2% -ly adverbs, no adj stacking | | wordCount | 1092 | | adjectiveStacks | 0 | | stackExamples | (empty) | | adverbCount | 38 | | adverbRatio | 0.0347985347985348 | | lyAdverbCount | 16 | | lyAdverbRatio | 0.014652014652014652 | |
| 100.00% | Repeated phrase echo | Target: ≤20% sentences with echoes (window: 2) | | totalSentences | 170 | | echoCount | 0 | | echoWords | (empty) | |
| 100.00% | Sentence length variance | Target: CV ≥0.4 for sentence word counts | | totalSentences | 170 | | mean | 11.86 | | std | 10.63 | | cv | 0.896 | | sampleLengths | | 0 | 10 | | 1 | 18 | | 2 | 5 | | 3 | 19 | | 4 | 38 | | 5 | 3 | | 6 | 14 | | 7 | 1 | | 8 | 2 | | 9 | 11 | | 10 | 8 | | 11 | 3 | | 12 | 33 | | 13 | 7 | | 14 | 9 | | 15 | 15 | | 16 | 25 | | 17 | 6 | | 18 | 32 | | 19 | 5 | | 20 | 1 | | 21 | 6 | | 22 | 1 | | 23 | 5 | | 24 | 5 | | 25 | 17 | | 26 | 6 | | 27 | 4 | | 28 | 1 | | 29 | 4 | | 30 | 5 | | 31 | 19 | | 32 | 24 | | 33 | 9 | | 34 | 7 | | 35 | 9 | | 36 | 6 | | 37 | 21 | | 38 | 3 | | 39 | 5 | | 40 | 22 | | 41 | 13 | | 42 | 7 | | 43 | 25 | | 44 | 8 | | 45 | 1 | | 46 | 22 | | 47 | 15 | | 48 | 1 | | 49 | 7 |
| |
| 52.35% | Sentence opener variety | Target: ≥60% unique sentence openers | | consecutiveRepeats | 16 | | diversityRatio | 0.37058823529411766 | | totalSentences | 170 | | uniqueOpeners | 63 | |
| 100.00% | Adverb-first sentence starts | Target: ≥3% sentences starting with an adverb | | adverbCount | 3 | | totalSentences | 97 | | matches | | 0 | "Instead, her fingers found the" | | 1 | "Of course he remembered." | | 2 | "Especially not to her." |
| | ratio | 0.031 | |
| 42.68% | Pronoun-first sentence starts | Target: ≤30% sentences starting with a pronoun | | pronounCount | 43 | | totalSentences | 97 | | matches | | 0 | "She pushed back from the" | | 1 | "Her name in his accent," | | 2 | "She hadn't heard that voice" | | 3 | "She should have looked through" | | 4 | "She should have taken a" | | 5 | "His mismatched eyes swept over" | | 6 | "He looked exactly the same." | | 7 | "She did not step aside." | | 8 | "He inclined his head slightly," | | 9 | "she said quietly" | | 10 | "He looked tired." | | 11 | "His mouth curved, but the" | | 12 | "She stepped aside." | | 13 | "she said, closing the door" | | 14 | "He straightened, surveying the chaos" | | 15 | "He turned to face her," | | 16 | "She folded her arms across" | | 17 | "His jaw tightened again." | | 18 | "He moved further into the" | | 19 | "He stopped near the window," |
| | ratio | 0.443 | |
| 47.63% | Subject-first sentence starts | Target: ≤72% sentences starting with a subject | | subjectCount | 80 | | totalSentences | 97 | | matches | | 0 | "The knock came at half" | | 1 | "Rory set down her pen." | | 2 | "Ptolemy lifted his head from" | | 3 | "She pushed back from the" | | 4 | "The voice that filtered through" | | 5 | "Her name in his accent," | | 6 | "She hadn't heard that voice" | | 7 | "She should have looked through" | | 8 | "She should have taken a" | | 9 | "Lucien Moreau stood in the" | | 10 | "The ivory handle caught the" | | 11 | "His mismatched eyes swept over" | | 12 | "He looked exactly the same." | | 13 | "The nickname came out flat" | | 14 | "She did not step aside." | | 15 | "He inclined his head slightly," | | 16 | "The words hung between them." | | 17 | "Rory felt the familiar prickle" | | 18 | "she said quietly" | | 19 | "A muscle twitched in his" |
| | ratio | 0.825 | |
| 0.00% | Subordinate conjunction sentence starts | Target: ≥2% sentences starting with a subordinating conjunction | | subConjCount | 0 | | totalSentences | 97 | | matches | (empty) | | ratio | 0 | |
| 74.83% | Technical jargon density | Target: ≤6% sentences with technical-jargon patterns | | analyzedSentences | 42 | | technicalSentenceCount | 4 | | matches | | 0 | "Not a polite knock either, but three sharp raps that echoed through the thin walls of Eva's flat." | | 1 | "Here they stood, two people who'd burned through each other like wildfire in Paris, and he was standing in her friend's hallway at nearly midnight asking for he…" | | 2 | "His fingers brushed a strand of hair from her face, tucking it behind her ear with a gentleness that contradicted everything about him." | | 3 | "The smile that crossed his face was small but real—the first genuine expression she'd seen from him." |
| |
| 100.00% | Useless dialogue additions | Target: ≤5% dialogue tags with trailing filler fragments | | totalTags | 23 | | uselessAdditionCount | 1 | | matches | | 0 | "He turned, and the admission hung in the air between them, heavy with implication" |
| |
| 100.00% | Dialogue tag variety (said vs. fancy) | Target: ≤10% fancy dialogue tags | | totalTags | 8 | | fancyCount | 0 | | fancyTags | (empty) | | dialogueSentences | 85 | | tagDensity | 0.094 | | leniency | 0.188 | | rawRatio | 0 | | effectiveRatio | 0 | |