| 100.00% | Adverbs in dialogue tags | Target: ≤10% dialogue tags with adverbs | | totalTags | 16 | | adverbTagCount | 0 | | adverbTags | (empty) | | dialogueSentences | 50 | | tagDensity | 0.32 | | leniency | 0.64 | | rawRatio | 0 | | effectiveRatio | 0 | |
| 68.55% | AI-ism adverb frequency | Target: <2% AI-ism adverbs (58 tracked) | | wordCount | 1113 | | totalAiIsmAdverbs | 7 | | found | | | highlights | | 0 | "softly" | | 1 | "very" | | 2 | "carefully" |
| |
| 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) | |
| 86.52% | AI-ism word frequency | Target: <2% AI-ism words (290 tracked) | | wordCount | 1113 | | totalAiIsms | 3 | | found | | 0 | | | 1 | | word | "the last thing" | | count | 1 |
| | 2 | |
| | highlights | | 0 | "traced" | | 1 | "the last thing" | | 2 | "silence" |
| |
| 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 | 36 | | matches | (empty) | |
| 100.00% | Filter word density | Target: ≤3% sentences with filter/hedge words | | filterCount | 0 | | hedgeCount | 1 | | narrationSentences | 36 | | filterMatches | (empty) | | hedgeMatches | | |
| 100.00% | Gibberish response detection | Target: ≤1% gibberish-like sentences (hard fail if a sentence exceeds 800 words) | | analyzedSentences | 69 | | gibberishSentences | 0 | | adjustedGibberishSentences | 0 | | longSentenceCount | 0 | | runOnParagraphCount | 0 | | giantParagraphCount | 0 | | wordSaladCount | 0 | | repetitionLoopCount | 0 | | controlTokenCount | 0 | | repeatedSegmentCount | 0 | | maxSentenceWordsSeen | 80 | | ratio | 0 | | matches | (empty) | |
| 100.00% | Markdown formatting overuse | Target: ≤5% words in markdown formatting | | markdownSpans | 0 | | markdownWords | 0 | | totalWords | 1117 | | ratio | 0 | | matches | (empty) | |
| 100.00% | Missing dialogue indicators (quotation marks) | Target: ≤10% speech attributions without quotation marks | | totalAttributions | 19 | | unquotedAttributions | 0 | | matches | (empty) | |
| 99.49% | Name drop frequency | Target: ≤1.0 per-name mentions per 100 words | | totalMentions | 17 | | wordCount | 594 | | uniqueNames | 5 | | maxNameDensity | 1.01 | | worstName | "Rory" | | maxWindowNameDensity | 1.5 | | worstWindowName | "Rory" | | discoveredNames | | Rory | 6 | | Eva | 5 | | Ptolemy | 1 | | Lucien | 4 | | Bengali | 1 |
| | persons | | | places | | | globalScore | 0.995 | | windowScore | 1 | |
| 41.30% | Narrator intent-glossing | Target: ≤2% narration sentences with intent-glossing patterns | | analyzedSentences | 23 | | glossingSentenceCount | 1 | | matches | | |
| 100.00% | "Not X but Y" pattern overuse | Target: ≤1 "not X but Y" per 1000 words | | totalMatches | 0 | | per1kWords | 0 | | wordCount | 1117 | | matches | (empty) | |
| 100.00% | Overuse of "that" (subordinate clause padding) | Target: ≤2% sentences with "that" clauses | | thatCount | 0 | | totalSentences | 69 | | matches | (empty) | |
| 100.00% | Paragraph length variance | Target: CV ≥0.5 for paragraph word counts | | totalParagraphs | 48 | | mean | 23.27 | | std | 22.13 | | cv | 0.951 | | sampleLengths | | 0 | 47 | | 1 | 3 | | 2 | 49 | | 3 | 8 | | 4 | 5 | | 5 | 9 | | 6 | 32 | | 7 | 5 | | 8 | 2 | | 9 | 31 | | 10 | 30 | | 11 | 44 | | 12 | 56 | | 13 | 10 | | 14 | 2 | | 15 | 56 | | 16 | 4 | | 17 | 2 | | 18 | 7 | | 19 | 47 | | 20 | 3 | | 21 | 4 | | 22 | 12 | | 23 | 12 | | 24 | 6 | | 25 | 4 | | 26 | 75 | | 27 | 41 | | 28 | 2 | | 29 | 27 | | 30 | 2 | | 31 | 16 | | 32 | 40 | | 33 | 22 | | 34 | 8 | | 35 | 80 | | 36 | 26 | | 37 | 13 | | 38 | 78 | | 39 | 12 | | 40 | 4 | | 41 | 52 | | 42 | 2 | | 43 | 20 | | 44 | 43 | | 45 | 41 | | 46 | 12 | | 47 | 11 |
| |
| 100.00% | Passive voice overuse | Target: ≤2% passive sentences | | passiveCount | 0 | | totalSentences | 36 | | matches | (empty) | |
| 7.69% | Past progressive (was/were + -ing) overuse | Target: ≤2% past progressive verbs | | pastProgressiveCount | 3 | | totalVerbs | 104 | | matches | | 0 | "was cataloguing" | | 1 | "was winding" | | 2 | "was watching" |
| |
| 60.04% | Em-dash & semicolon overuse | Target: ≤2% sentences with em-dashes/semicolons | | emDashCount | 3 | | semicolonCount | 0 | | flaggedSentences | 2 | | totalSentences | 69 | | ratio | 0.029 | | matches | | 0 | "Lucien stood on the landing with rain darkening the shoulders of his charcoal suit, his cane hooked over one forearm, that mismatched gaze — amber, black, amber, black — flicking past her into the flat like he was cataloguing every book on the shelves before he'd even said hello." | | 1 | "Rory studied him — the crouch that had to be killing his knees, the cane forgotten against the sofa, the way he was watching her like her answer actually mattered more than any ledger or any dead demon woman ever had." |
| |
| 81.70% | Purple prose (modifier overload) | Target: <4% adverbs, <2% -ly adverbs, no adj stacking | | wordCount | 591 | | adjectiveStacks | 0 | | stackExamples | (empty) | | adverbCount | 36 | | adverbRatio | 0.06091370558375635 | | lyAdverbCount | 7 | | lyAdverbRatio | 0.011844331641285956 | |
| 100.00% | Repeated phrase echo | Target: ≤20% sentences with echoes (window: 2) | | totalSentences | 69 | | echoCount | 0 | | echoWords | (empty) | |
| 100.00% | Sentence length variance | Target: CV ≥0.4 for sentence word counts | | totalSentences | 69 | | mean | 16.19 | | std | 15.17 | | cv | 0.937 | | sampleLengths | | 0 | 47 | | 1 | 3 | | 2 | 49 | | 3 | 5 | | 4 | 3 | | 5 | 5 | | 6 | 9 | | 7 | 26 | | 8 | 6 | | 9 | 5 | | 10 | 2 | | 11 | 31 | | 12 | 30 | | 13 | 19 | | 14 | 18 | | 15 | 4 | | 16 | 3 | | 17 | 32 | | 18 | 24 | | 19 | 10 | | 20 | 2 | | 21 | 31 | | 22 | 4 | | 23 | 21 | | 24 | 3 | | 25 | 1 | | 26 | 2 | | 27 | 7 | | 28 | 27 | | 29 | 20 | | 30 | 3 | | 31 | 4 | | 32 | 12 | | 33 | 9 | | 34 | 3 | | 35 | 6 | | 36 | 4 | | 37 | 37 | | 38 | 38 | | 39 | 25 | | 40 | 16 | | 41 | 2 | | 42 | 15 | | 43 | 12 | | 44 | 2 | | 45 | 16 | | 46 | 40 | | 47 | 22 | | 48 | 4 | | 49 | 4 |
| |
| 68.12% | Sentence opener variety | Target: ≥60% unique sentence openers | | consecutiveRepeats | 8 | | diversityRatio | 0.4782608695652174 | | totalSentences | 69 | | uniqueOpeners | 33 | |
| 100.00% | Adverb-first sentence starts | Target: ≥3% sentences starting with an adverb | | adverbCount | 3 | | totalSentences | 29 | | matches | | 0 | "Somewhere below them, through the" | | 1 | "More a surrender." | | 2 | "Instead he crossed the small" |
| | ratio | 0.103 | |
| 54.48% | Pronoun-first sentence starts | Target: ≤30% sentences starting with a pronoun | | pronounCount | 12 | | totalSentences | 29 | | matches | | 0 | "It wasn't Eva." | | 1 | "She stopped herself, jaw tight," | | 2 | "he said, quiet now" | | 3 | "she asked, because her hands" | | 4 | "She poured two glasses of" | | 5 | "It also felt stupid, six" | | 6 | "He set the glass down," | | 7 | "Her voice cracked and she" | | 8 | "She pressed the heel of" | | 9 | "He stood, and for a" | | 10 | "She looked at him properly" | | 11 | "He almost smiled" |
| | ratio | 0.414 | |
| 28.97% | Subject-first sentence starts | Target: ≤72% sentences starting with a subject | | subjectCount | 25 | | totalSentences | 29 | | matches | | 0 | "The three deadbolts took Rory" | | 1 | "It wasn't Eva." | | 2 | "Lucien stood on the landing" | | 3 | "Ptolemy, traitor that he was," | | 4 | "Rory didn't move from the" | | 5 | "She stopped herself, jaw tight," | | 6 | "he said, quiet now" | | 7 | "Rory glanced past him down" | | 8 | "Lucien wiped his shoes on" | | 9 | "The cane he set against" | | 10 | "she asked, because her hands" | | 11 | "She poured two glasses of" | | 12 | "The distance felt necessary." | | 13 | "It also felt stupid, six" | | 14 | "Lucien turned the glass in" | | 15 | "The word landed between them" | | 16 | "He set the glass down," | | 17 | "Her voice cracked and she" | | 18 | "She pressed the heel of" | | 19 | "That got a laugh out" |
| | ratio | 0.862 | |
| 0.00% | Subordinate conjunction sentence starts | Target: ≥2% sentences starting with a subordinating conjunction | | subConjCount | 0 | | totalSentences | 29 | | matches | (empty) | | ratio | 0 | |
| 0.00% | Technical jargon density | Target: ≤6% sentences with technical-jargon patterns | | analyzedSentences | 14 | | technicalSentenceCount | 3 | | matches | | 0 | "Lucien stood on the landing with rain darkening the shoulders of his charcoal suit, his cane hooked over one forearm, that mismatched gaze — amber, black, amber…" | | 1 | "Ptolemy, traitor that he was, had already abandoned his post on the windowsill and was winding himself around Lucien's ankles, purring like they were old friend…" | | 2 | "The cane he set against his knee, tapping it once, twice, a nervous habit she recognised even if he'd never admit to having nerves." |
| |
| 93.75% | Useless dialogue additions | Target: ≤5% dialogue tags with trailing filler fragments | | totalTags | 16 | | uselessAdditionCount | 1 | | matches | | 0 | "Her voice cracked, hated that six weeks of practiced indifference dissolved this fast" |
| |
| 100.00% | Dialogue tag variety (said vs. fancy) | Target: ≤10% fancy dialogue tags | | totalTags | 9 | | fancyCount | 1 | | fancyTags | | | dialogueSentences | 50 | | tagDensity | 0.18 | | leniency | 0.36 | | rawRatio | 0.111 | | effectiveRatio | 0.04 | |