| 100.00% | Adverbs in dialogue tags | Target: ≤10% dialogue tags with adverbs | | totalTags | 19 | | adverbTagCount | 1 | | adverbTags | | 0 | "she whispered again [again]" |
| | dialogueSentences | 147 | | tagDensity | 0.129 | | leniency | 0.259 | | rawRatio | 0.053 | | effectiveRatio | 0.014 | |
| 88.46% | AI-ism adverb frequency | Target: <2% AI-ism adverbs (58 tracked) | | wordCount | 2167 | | totalAiIsmAdverbs | 5 | | found | | | highlights | | 0 | "softly" | | 1 | "carefully" | | 2 | "very" | | 3 | "really" |
| |
| 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) | |
| 76.93% | AI-ism word frequency | Target: <2% AI-ism words (290 tracked) | | wordCount | 2167 | | totalAiIsms | 10 | | found | | | highlights | | 0 | "measured" | | 1 | "silence" | | 2 | "fascinating" | | 3 | "echoed" | | 4 | "comforting" | | 5 | "pulse" | | 6 | "familiar" | | 7 | "warmth" |
| |
| 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 | 152 | | matches | (empty) | |
| 67.67% | Filter word density | Target: ≤3% sentences with filter/hedge words | | filterCount | 6 | | hedgeCount | 2 | | narrationSentences | 152 | | filterMatches | | 0 | "look" | | 1 | "feel" | | 2 | "feel feel" |
| | hedgeMatches | | |
| 100.00% | Gibberish response detection | Target: ≤1% gibberish-like sentences (hard fail if a sentence exceeds 800 words) | | analyzedSentences | 280 | | gibberishSentences | 0 | | adjustedGibberishSentences | 0 | | longSentenceCount | 0 | | runOnParagraphCount | 0 | | giantParagraphCount | 0 | | wordSaladCount | 0 | | repetitionLoopCount | 0 | | controlTokenCount | 0 | | repeatedSegmentCount | 0 | | maxSentenceWordsSeen | 38 | | ratio | 0 | | matches | (empty) | |
| 100.00% | Markdown formatting overuse | Target: ≤5% words in markdown formatting | | markdownSpans | 0 | | markdownWords | 0 | | totalWords | 2165 | | ratio | 0 | | matches | (empty) | |
| 100.00% | Missing dialogue indicators (quotation marks) | Target: ≤10% speech attributions without quotation marks | | totalAttributions | 44 | | unquotedAttributions | 0 | | matches | (empty) | |
| 66.67% | Name drop frequency | Target: ≤1.0 per-name mentions per 100 words | | totalMentions | 58 | | wordCount | 1380 | | uniqueNames | 7 | | maxNameDensity | 1.45 | | worstName | "Rory" | | maxWindowNameDensity | 3 | | worstWindowName | "Rory" | | discoveredNames | | Lucien | 19 | | Moreau | 1 | | Eva | 6 | | Ptolemy | 8 | | Rory | 20 | | Brick | 2 | | Lane | 2 |
| | persons | | 0 | "Lucien" | | 1 | "Moreau" | | 2 | "Eva" | | 3 | "Ptolemy" | | 4 | "Rory" |
| | places | | | globalScore | 0.775 | | windowScore | 0.667 | |
| 99.49% | Narrator intent-glossing | Target: ≤2% narration sentences with intent-glossing patterns | | analyzedSentences | 99 | | glossingSentenceCount | 2 | | matches | | 0 | "looked like an old bruise" | | 1 | "as if trying to smooth the air" |
| |
| 100.00% | "Not X but Y" pattern overuse | Target: ≤1 "not X but Y" per 1000 words | | totalMatches | 2 | | per1kWords | 0.924 | | wordCount | 2165 | | matches | | 0 | "not taking the coat off, not pretending this was anything but a visit he might be made to end at once" | | 1 | "not pretending this was anything but a visit he might be made to end at once" |
| |
| 100.00% | Overuse of "that" (subordinate clause padding) | Target: ≤2% sentences with "that" clauses | | thatCount | 2 | | totalSentences | 280 | | matches | | 0 | "hated that she" | | 1 | "see that the" |
| |
| 100.00% | Paragraph length variance | Target: CV ≥0.5 for paragraph word counts | | totalParagraphs | 185 | | mean | 11.7 | | std | 13.3 | | cv | 1.137 | | sampleLengths | | 0 | 11 | | 1 | 49 | | 2 | 18 | | 3 | 3 | | 4 | 6 | | 5 | 45 | | 6 | 5 | | 7 | 4 | | 8 | 1 | | 9 | 42 | | 10 | 9 | | 11 | 5 | | 12 | 8 | | 13 | 2 | | 14 | 46 | | 15 | 12 | | 16 | 7 | | 17 | 7 | | 18 | 6 | | 19 | 18 | | 20 | 7 | | 21 | 4 | | 22 | 11 | | 23 | 15 | | 24 | 40 | | 25 | 5 | | 26 | 14 | | 27 | 3 | | 28 | 10 | | 29 | 4 | | 30 | 16 | | 31 | 56 | | 32 | 37 | | 33 | 11 | | 34 | 5 | | 35 | 5 | | 36 | 4 | | 37 | 5 | | 38 | 31 | | 39 | 5 | | 40 | 14 | | 41 | 1 | | 42 | 47 | | 43 | 9 | | 44 | 4 | | 45 | 1 | | 46 | 48 | | 47 | 5 | | 48 | 6 | | 49 | 12 |
| |
| 100.00% | Passive voice overuse | Target: ≤2% passive sentences | | passiveCount | 2 | | totalSentences | 152 | | matches | | 0 | "were thrown" | | 1 | "was amused" |
| |
| 100.00% | Past progressive (was/were + -ing) overuse | Target: ≤2% past progressive verbs | | pastProgressiveCount | 1 | | totalVerbs | 265 | | matches | | |
| 100.00% | Em-dash & semicolon overuse | Target: ≤2% sentences with em-dashes/semicolons | | emDashCount | 2 | | semicolonCount | 0 | | flaggedSentences | 1 | | totalSentences | 280 | | ratio | 0.004 | | matches | | 0 | "Not dishevelled—Lucien probably woke up dressed for a funeral—but tired in the fine lines at the corners of his eyes, and in the way he leaned more heavily on the cane than she remembered." |
| |
| 100.00% | Purple prose (modifier overload) | Target: <4% adverbs, <2% -ly adverbs, no adj stacking | | wordCount | 1383 | | adjectiveStacks | 0 | | stackExamples | (empty) | | adverbCount | 55 | | adverbRatio | 0.03976861894432393 | | lyAdverbCount | 12 | | lyAdverbRatio | 0.008676789587852495 | |
| 100.00% | Repeated phrase echo | Target: ≤20% sentences with echoes (window: 2) | | totalSentences | 280 | | echoCount | 0 | | echoWords | (empty) | |
| 100.00% | Sentence length variance | Target: CV ≥0.4 for sentence word counts | | totalSentences | 280 | | mean | 7.73 | | std | 6.33 | | cv | 0.819 | | sampleLengths | | 0 | 11 | | 1 | 6 | | 2 | 11 | | 3 | 8 | | 4 | 24 | | 5 | 18 | | 6 | 3 | | 7 | 6 | | 8 | 22 | | 9 | 23 | | 10 | 5 | | 11 | 4 | | 12 | 1 | | 13 | 9 | | 14 | 10 | | 15 | 9 | | 16 | 14 | | 17 | 9 | | 18 | 5 | | 19 | 8 | | 20 | 2 | | 21 | 9 | | 22 | 3 | | 23 | 34 | | 24 | 10 | | 25 | 2 | | 26 | 7 | | 27 | 7 | | 28 | 6 | | 29 | 18 | | 30 | 7 | | 31 | 4 | | 32 | 6 | | 33 | 5 | | 34 | 8 | | 35 | 7 | | 36 | 6 | | 37 | 14 | | 38 | 20 | | 39 | 5 | | 40 | 9 | | 41 | 5 | | 42 | 3 | | 43 | 10 | | 44 | 4 | | 45 | 13 | | 46 | 3 | | 47 | 5 | | 48 | 10 | | 49 | 15 |
| |
| 44.64% | Sentence opener variety | Target: ≥60% unique sentence openers | | consecutiveRepeats | 15 | | diversityRatio | 0.2571428571428571 | | totalSentences | 280 | | uniqueOpeners | 72 | |
| 100.00% | Adverb-first sentence starts | Target: ≥3% sentences starting with an adverb | | adverbCount | 7 | | totalSentences | 135 | | matches | | 0 | "Then Lucien Moreau leaned close" | | 1 | "Instead she stood there with" | | 2 | "Instead it made the silence" | | 3 | "Just enough for her to" | | 4 | "Just the old pull of" | | 5 | "Instead she said," | | 6 | "Then he descended without saying" |
| | ratio | 0.052 | |
| 62.96% | Pronoun-first sentence starts | Target: ≤30% sentences starting with a pronoun | | pronounCount | 53 | | totalSentences | 135 | | matches | | 0 | "She knew the cut of" | | 1 | "She should have shut the" | | 2 | "His gaze moved past her," | | 3 | "He looked tired." | | 4 | "He glanced down at the" | | 5 | "He trotted into the narrow" | | 6 | "She could tell Lucien to" | | 7 | "She could call Eva." | | 8 | "She could take the chain" | | 9 | "He’d been standing here a" | | 10 | "She slid the chain loose" | | 11 | "His cane clicked softly on" | | 12 | "He smelled of cold air," | | 13 | "It should have made Rory" | | 14 | "She folded her arms." | | 15 | "She felt the floor turn" | | 16 | "She searched his face." | | 17 | "It was effortful." | | 18 | "His black eye held hers." | | 19 | "She wanted to pick it" |
| | ratio | 0.393 | |
| 26.67% | Subject-first sentence starts | Target: ≤72% sentences starting with a subject | | subjectCount | 117 | | totalSentences | 135 | | matches | | 0 | "The door opened three inches," | | 1 | "Rory’s hand tightened around the" | | 2 | "She knew the cut of" | | 3 | "She should have shut the" | | 4 | "The little crescent scar there" | | 5 | "His gaze moved past her," | | 6 | "Books covered the little table," | | 7 | "A stack of scrolls leaned" | | 8 | "A faint smile touched his" | | 9 | "He looked tired." | | 10 | "Rory’s attention snagged on that" | | 11 | "He glanced down at the" | | 12 | "The words landed too softly" | | 13 | "Rory’s fingers went cold on" | | 14 | "A book shifted on the" | | 15 | "He trotted into the narrow" | | 16 | "Lucien bent with obvious care" | | 17 | "Ptolemy sniffed them, then purred." | | 18 | "The smile came back, but" | | 19 | "Rory glanced over her shoulder." |
| | ratio | 0.867 | |
| 0.00% | Subordinate conjunction sentence starts | Target: ≥2% sentences starting with a subordinating conjunction | | subConjCount | 0 | | totalSentences | 135 | | matches | (empty) | | ratio | 0 | |
| 100.00% | Technical jargon density | Target: ≤6% sentences with technical-jargon patterns | | analyzedSentences | 53 | | technicalSentenceCount | 2 | | matches | | 0 | "Ptolemy slipped between their ankles, purring as if trying to smooth the air." | | 1 | "She looked at him and found she was still searching his face for the man who’d made her feel wanted, and for the man who’d made her feel foolish for believing i…" |
| |
| 100.00% | Useless dialogue additions | Target: ≤5% dialogue tags with trailing filler fragments | | totalTags | 19 | | uselessAdditionCount | 0 | | matches | (empty) | |
| 100.00% | Dialogue tag variety (said vs. fancy) | Target: ≤10% fancy dialogue tags | | totalTags | 17 | | fancyCount | 3 | | fancyTags | | 0 | "she muttered (mutter)" | | 1 | "she repeated (repeat)" | | 2 | "she whispered again (whisper)" |
| | dialogueSentences | 147 | | tagDensity | 0.116 | | leniency | 0.231 | | rawRatio | 0.176 | | effectiveRatio | 0.041 | |