| 100.00% | Adverbs in dialogue tags | Target: ≤10% dialogue tags with adverbs | | totalTags | 25 | | adverbTagCount | 0 | | adverbTags | (empty) | | dialogueSentences | 50 | | tagDensity | 0.5 | | leniency | 1 | | rawRatio | 0 | | effectiveRatio | 0 | |
| 84.89% | AI-ism adverb frequency | Target: <2% AI-ism adverbs (58 tracked) | | wordCount | 1654 | | totalAiIsmAdverbs | 5 | | found | | | highlights | | 0 | "very" | | 1 | "slowly" | | 2 | "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) | |
| 93.95% | AI-ism word frequency | Target: <2% AI-ism words (290 tracked) | | wordCount | 1654 | | totalAiIsms | 2 | | 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 | 2 | | narrationSentences | 73 | | matches | | 0 | "was proud" | | 1 | "was afraid" |
| |
| 100.00% | Filter word density | Target: ≤3% sentences with filter/hedge words | | filterCount | 1 | | hedgeCount | 1 | | narrationSentences | 73 | | filterMatches | | | hedgeMatches | | |
| 100.00% | Gibberish response detection | Target: ≤1% gibberish-like sentences (hard fail if a sentence exceeds 800 words) | | analyzedSentences | 98 | | gibberishSentences | 0 | | adjustedGibberishSentences | 0 | | longSentenceCount | 0 | | runOnParagraphCount | 0 | | giantParagraphCount | 0 | | wordSaladCount | 0 | | repetitionLoopCount | 0 | | controlTokenCount | 0 | | repeatedSegmentCount | 0 | | maxSentenceWordsSeen | 61 | | ratio | 0 | | matches | (empty) | |
| 100.00% | Markdown formatting overuse | Target: ≤5% words in markdown formatting | | markdownSpans | 0 | | markdownWords | 0 | | totalWords | 1638 | | ratio | 0 | | matches | (empty) | |
| 100.00% | Missing dialogue indicators (quotation marks) | Target: ≤10% speech attributions without quotation marks | | totalAttributions | 25 | | unquotedAttributions | 0 | | matches | (empty) | |
| 100.00% | Name drop frequency | Target: ≤1.0 per-name mentions per 100 words | | totalMentions | 37 | | wordCount | 1074 | | uniqueNames | 11 | | maxNameDensity | 0.93 | | worstName | "Eva" | | maxWindowNameDensity | 2 | | worstWindowName | "Lucien" | | discoveredNames | | Eva | 10 | | Rory | 4 | | Lucien | 10 | | Moreau | 3 | | Silas | 1 | | Thursday | 1 | | Edinburgh | 1 | | English | 1 | | Ptolemy | 4 | | Cardiff | 1 | | Lane | 1 |
| | persons | | 0 | "Eva" | | 1 | "Rory" | | 2 | "Lucien" | | 3 | "Moreau" | | 4 | "Silas" | | 5 | "Ptolemy" |
| | places | | 0 | "Edinburgh" | | 1 | "English" | | 2 | "Cardiff" | | 3 | "Lane" |
| | globalScore | 1 | | windowScore | 1 | |
| 100.00% | Narrator intent-glossing | Target: ≤2% narration sentences with intent-glossing patterns | | analyzedSentences | 47 | | glossingSentenceCount | 0 | | matches | (empty) | |
| 100.00% | "Not X but Y" pattern overuse | Target: ≤1 "not X but Y" per 1000 words | | totalMatches | 0 | | per1kWords | 0 | | wordCount | 1638 | | matches | (empty) | |
| 100.00% | Overuse of "that" (subordinate clause padding) | Target: ≤2% sentences with "that" clauses | | thatCount | 0 | | totalSentences | 98 | | matches | (empty) | |
| 100.00% | Paragraph length variance | Target: CV ≥0.5 for paragraph word counts | | totalParagraphs | 48 | | mean | 34.13 | | std | 27.17 | | cv | 0.796 | | sampleLengths | | 0 | 51 | | 1 | 91 | | 2 | 3 | | 3 | 27 | | 4 | 4 | | 5 | 45 | | 6 | 11 | | 7 | 82 | | 8 | 5 | | 9 | 41 | | 10 | 42 | | 11 | 4 | | 12 | 2 | | 13 | 59 | | 14 | 73 | | 15 | 70 | | 16 | 6 | | 17 | 33 | | 18 | 40 | | 19 | 24 | | 20 | 7 | | 21 | 28 | | 22 | 66 | | 23 | 7 | | 24 | 62 | | 25 | 38 | | 26 | 75 | | 27 | 7 | | 28 | 34 | | 29 | 3 | | 30 | 56 | | 31 | 10 | | 32 | 52 | | 33 | 18 | | 34 | 82 | | 35 | 76 | | 36 | 7 | | 37 | 18 | | 38 | 82 | | 39 | 4 | | 40 | 5 | | 41 | 6 | | 42 | 14 | | 43 | 8 | | 44 | 42 | | 45 | 51 | | 46 | 42 | | 47 | 25 |
| |
| 100.00% | Passive voice overuse | Target: ≤2% passive sentences | | passiveCount | 1 | | totalSentences | 73 | | matches | | |
| 22.70% | Past progressive (was/were + -ing) overuse | Target: ≤2% past progressive verbs | | pastProgressiveCount | 5 | | totalVerbs | 188 | | matches | | 0 | "wasn't wearing" | | 1 | "was always running" | | 2 | "was standing" | | 3 | "was already mapping" | | 4 | "was coming" |
| |
| 0.00% | Em-dash & semicolon overuse | Target: ≤2% sentences with em-dashes/semicolons | | emDashCount | 16 | | semicolonCount | 3 | | flaggedSentences | 13 | | totalSentences | 98 | | ratio | 0.133 | | matches | | 0 | "Eva had a key, but Eva also had a gift for leaving keys in the pockets of coats she wasn't wearing, so Rory threw the deadbolts without checking the peephole—one, two, three, the third always sticking—and opened the door onto the smell of frying onions and Lucien Moreau." | | 1 | "In eight months of knowing him—through blood and bargains and one night she still couldn't think about in daylight—she had never once seen him rained on." | | 2 | "The head of the cane slid into the gap, ivory handle against the jamb—not forcing, just refusing to be excluded." | | 3 | "Below them, the Haques' kitchen roared; somewhere on the stairs a naan basket was being ferried." | | 4 | "He set the cane against the bookcase—out of his own reach, she noticed." | | 5 | "Lucien crouched and let the tabby push its face into his palm, and steam very nearly rose off him; he was always running hot, one of the inheritances from his father's side, and cats adored him for it." | | 6 | "\"Three days. You've known three days.\" Her last delivery had ended ninety minutes ago; she still smelled of sesame oil and rain, and she'd spent those ninety minutes on Eva's sofa with a cat on her knees, not knowing." | | 7 | "\"Cheung telephoned one of my people Tuesday night. Your employer keeps my number behind the till for emergencies he'd rather not take to the police.\" From inside his coat—dry, everything inside that coat always dry—he drew a photograph and held it out." | | 8 | "She was already mapping it—the old machinery of planning grinding awake, the thing her brain did while the rest of her wanted to be sick." | | 9 | "Eight months ago he'd asked about the scar on her wrist, the only person who ever had, and she'd told him the truth—Eva, a greenhouse roof in Cardiff, a bet of one pound when they were nine—and he'd laughed in a way she'd have sworn he didn't know how to." | | 10 | "His mouth was cool with rain and the rest of him was a furnace under soaked wool, and he went utterly still—as if she were a bargain he was afraid to breathe on—and then his hand came up to cradle the back of her skull, careful, careful, and he answered her." | | 11 | "She let go of his lapels and stepped away, and found, examining herself, that the fury was still there—banked, not extinguished—but that it had company now." | | 12 | "She crossed the room and shot the deadbolts—one, two, three, the third sticking the way it always did until she leaned her weight into it." |
| |
| 100.00% | Purple prose (modifier overload) | Target: <4% adverbs, <2% -ly adverbs, no adj stacking | | wordCount | 645 | | adjectiveStacks | 0 | | stackExamples | (empty) | | adverbCount | 13 | | adverbRatio | 0.020155038759689922 | | lyAdverbCount | 4 | | lyAdverbRatio | 0.006201550387596899 | |
| 100.00% | Repeated phrase echo | Target: ≤20% sentences with echoes (window: 2) | | totalSentences | 98 | | echoCount | 0 | | echoWords | (empty) | |
| 100.00% | Sentence length variance | Target: CV ≥0.4 for sentence word counts | | totalSentences | 98 | | mean | 16.71 | | std | 13.61 | | cv | 0.814 | | sampleLengths | | 0 | 3 | | 1 | 48 | | 2 | 3 | | 3 | 6 | | 4 | 26 | | 5 | 33 | | 6 | 23 | | 7 | 3 | | 8 | 7 | | 9 | 20 | | 10 | 4 | | 11 | 12 | | 12 | 16 | | 13 | 17 | | 14 | 3 | | 15 | 8 | | 16 | 61 | | 17 | 21 | | 18 | 5 | | 19 | 9 | | 20 | 14 | | 21 | 13 | | 22 | 5 | | 23 | 4 | | 24 | 38 | | 25 | 4 | | 26 | 2 | | 27 | 9 | | 28 | 39 | | 29 | 11 | | 30 | 42 | | 31 | 31 | | 32 | 18 | | 33 | 4 | | 34 | 24 | | 35 | 24 | | 36 | 6 | | 37 | 27 | | 38 | 6 | | 39 | 25 | | 40 | 2 | | 41 | 2 | | 42 | 6 | | 43 | 5 | | 44 | 4 | | 45 | 20 | | 46 | 7 | | 47 | 18 | | 48 | 10 | | 49 | 25 |
| |
| 71.77% | Sentence opener variety | Target: ≥60% unique sentence openers | | consecutiveRepeats | 8 | | diversityRatio | 0.47959183673469385 | | totalSentences | 98 | | uniqueOpeners | 47 | |
| 0.00% | Adverb-first sentence starts | Target: ≥3% sentences starting with an adverb | | adverbCount | 0 | | totalSentences | 60 | | matches | (empty) | | ratio | 0 | |
| 13.33% | Pronoun-first sentence starts | Target: ≤30% sentences starting with a pronoun | | pronounCount | 31 | | totalSentences | 60 | | matches | | 0 | "She'd expected Eva." | | 1 | "He was wet." | | 2 | "She got the door halfway" | | 3 | "He said it quietly, which" | | 4 | "He stepped over the threshold" | | 5 | "she told the man" | | 6 | "He looked down at the" | | 7 | "He set the cane against" | | 8 | "She laughed, one dry note" | | 9 | "Her last delivery had ended" | | 10 | "Her wrist throbbed at the" | | 11 | "She took the photograph." | | 12 | "She had run two hundred" | | 13 | "She was already mapping it—the" | | 14 | "She set the photograph face-down" | | 15 | "Her voice stayed level" | | 16 | "She was proud of that," | | 17 | "His jaw did something small" | | 18 | "He drew the bundle out" | | 19 | "He held it out" |
| | ratio | 0.517 | |
| 1.67% | Subject-first sentence starts | Target: ≤72% sentences starting with a subject | | subjectCount | 55 | | totalSentences | 60 | | matches | | 0 | "She'd expected Eva." | | 1 | "Eva had a key, but" | | 2 | "He was wet." | | 3 | "That was the first wrong" | | 4 | "The rain had found the" | | 5 | "The stairwell bulb lit his" | | 6 | "She got the door halfway" | | 7 | "The head of the cane" | | 8 | "He said it quietly, which" | | 9 | "Rory stood in the doorway" | | 10 | "He stepped over the threshold" | | 11 | "Ptolemy rose from a stack" | | 12 | "Rory told the cat" | | 13 | "she told the man" | | 14 | "He looked down at the" | | 15 | "He set the cane against" | | 16 | "A courtesy, or an apology." | | 17 | "Ptolemy butted his shin." | | 18 | "Lucien crouched and let the" | | 19 | "She laughed, one dry note" |
| | ratio | 0.917 | |
| 0.00% | Subordinate conjunction sentence starts | Target: ≥2% sentences starting with a subordinating conjunction | | subConjCount | 0 | | totalSentences | 60 | | matches | (empty) | | ratio | 0 | |
| 66.33% | Technical jargon density | Target: ≤6% sentences with technical-jargon patterns | | analyzedSentences | 28 | | technicalSentenceCount | 3 | | matches | | 0 | "Evan looked the same and worse: same jaw, same gym-built shoulders, same way of leaning over a counter as if it owed him money." | | 1 | "Ptolemy abandoned his ankle and climbed onto the stack and began kneading the top envelope with a proprietary air, as if the past were a thing a cat could hold …" | | 2 | "His mouth was cool with rain and the rest of him was a furnace under soaked wool, and he went utterly still—as if she were a bargain he was afraid to breathe on…" |
| |
| 100.00% | Useless dialogue additions | Target: ≤5% dialogue tags with trailing filler fragments | | totalTags | 25 | | uselessAdditionCount | 0 | | matches | (empty) | |
| 100.00% | Dialogue tag variety (said vs. fancy) | Target: ≤10% fancy dialogue tags | | totalTags | 13 | | fancyCount | 1 | | fancyTags | | | dialogueSentences | 50 | | tagDensity | 0.26 | | leniency | 0.52 | | rawRatio | 0.077 | | effectiveRatio | 0.04 | |