| 100.00% | Adverbs in dialogue tags | Target: ≤10% dialogue tags with adverbs | | totalTags | 18 | | adverbTagCount | 0 | | adverbTags | (empty) | | dialogueSentences | 87 | | tagDensity | 0.207 | | leniency | 0.414 | | rawRatio | 0 | | effectiveRatio | 0 | |
| 94.62% | AI-ism adverb frequency | Target: <2% AI-ism adverbs (58 tracked) | | wordCount | 1860 | | totalAiIsmAdverbs | 2 | | found | | | highlights | | |
| 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) | |
| 78.49% | AI-ism word frequency | Target: <2% AI-ism words (290 tracked) | | wordCount | 1860 | | totalAiIsms | 8 | | found | | | highlights | | 0 | "flicked" | | 1 | "pulse" | | 2 | "familiar" | | 3 | "efficient" | | 4 | "pomposity" | | 5 | "stomach" | | 6 | "pulsed" | | 7 | "fluttered" |
| |
| 100.00% | Cliché density | Target: ≤1 cliche(s) per 800-word window | | totalCliches | 1 | | maxInWindow | 1 | | found | | 0 | | label | "stomach dropped/sank" | | count | 1 |
|
| | highlights | | |
| 100.00% | Emotion telling (show vs. tell) | Target: ≤3% sentences with emotion telling | | emotionTells | 1 | | narrationSentences | 113 | | matches | | |
| 100.00% | Filter word density | Target: ≤3% sentences with filter/hedge words | | filterCount | 1 | | hedgeCount | 2 | | narrationSentences | 113 | | filterMatches | | | hedgeMatches | | |
| 100.00% | Gibberish response detection | Target: ≤1% gibberish-like sentences (hard fail if a sentence exceeds 800 words) | | analyzedSentences | 182 | | gibberishSentences | 0 | | adjustedGibberishSentences | 0 | | longSentenceCount | 0 | | runOnParagraphCount | 0 | | giantParagraphCount | 0 | | wordSaladCount | 0 | | repetitionLoopCount | 0 | | controlTokenCount | 0 | | repeatedSegmentCount | 0 | | maxSentenceWordsSeen | 41 | | ratio | 0 | | matches | (empty) | |
| 100.00% | Markdown formatting overuse | Target: ≤5% words in markdown formatting | | markdownSpans | 0 | | markdownWords | 0 | | totalWords | 1848 | | ratio | 0 | | matches | (empty) | |
| 100.00% | Missing dialogue indicators (quotation marks) | Target: ≤10% speech attributions without quotation marks | | totalAttributions | 29 | | unquotedAttributions | 0 | | matches | (empty) | |
| 100.00% | Name drop frequency | Target: ≤1.0 per-name mentions per 100 words | | totalMentions | 53 | | wordCount | 1198 | | uniqueNames | 15 | | maxNameDensity | 0.92 | | worstName | "Lucien" | | maxWindowNameDensity | 2 | | worstWindowName | "Lucien" | | discoveredNames | | Carter | 2 | | Brick | 1 | | Lane | 1 | | Lucien | 11 | | Moreau | 1 | | Eva | 9 | | March | 1 | | Ptolemy | 7 | | Cardiff | 3 | | April | 1 | | Aurora | 11 | | Brendan | 1 | | London | 1 | | Jennifer | 2 | | Rory | 1 |
| | persons | | 0 | "Carter" | | 1 | "Lucien" | | 2 | "Moreau" | | 3 | "Eva" | | 4 | "Ptolemy" | | 5 | "Aurora" | | 6 | "Brendan" | | 7 | "Jennifer" |
| | places | | 0 | "Brick" | | 1 | "Lane" | | 2 | "March" | | 3 | "Cardiff" | | 4 | "London" | | 5 | "Rory" |
| | globalScore | 1 | | windowScore | 1 | |
| 100.00% | Narrator intent-glossing | Target: ≤2% narration sentences with intent-glossing patterns | | analyzedSentences | 74 | | 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 | 1848 | | matches | (empty) | |
| 100.00% | Overuse of "that" (subordinate clause padding) | Target: ≤2% sentences with "that" clauses | | thatCount | 1 | | totalSentences | 182 | | matches | | |
| 100.00% | Paragraph length variance | Target: CV ≥0.5 for paragraph word counts | | totalParagraphs | 103 | | mean | 17.94 | | std | 16.91 | | cv | 0.943 | | sampleLengths | | 0 | 15 | | 1 | 61 | | 2 | 1 | | 3 | 10 | | 4 | 29 | | 5 | 3 | | 6 | 11 | | 7 | 56 | | 8 | 14 | | 9 | 14 | | 10 | 44 | | 11 | 30 | | 12 | 1 | | 13 | 7 | | 14 | 2 | | 15 | 33 | | 16 | 23 | | 17 | 56 | | 18 | 24 | | 19 | 12 | | 20 | 10 | | 21 | 4 | | 22 | 5 | | 23 | 7 | | 24 | 55 | | 25 | 16 | | 26 | 3 | | 27 | 9 | | 28 | 18 | | 29 | 55 | | 30 | 50 | | 31 | 17 | | 32 | 8 | | 33 | 8 | | 34 | 5 | | 35 | 5 | | 36 | 58 | | 37 | 4 | | 38 | 58 | | 39 | 31 | | 40 | 4 | | 41 | 1 | | 42 | 5 | | 43 | 13 | | 44 | 11 | | 45 | 8 | | 46 | 36 | | 47 | 14 | | 48 | 21 | | 49 | 29 |
| |
| 100.00% | Passive voice overuse | Target: ≤2% passive sentences | | passiveCount | 1 | | totalSentences | 113 | | matches | | |
| 100.00% | Past progressive (was/were + -ing) overuse | Target: ≤2% past progressive verbs | | pastProgressiveCount | 0 | | totalVerbs | 228 | | matches | (empty) | |
| 0.00% | Em-dash & semicolon overuse | Target: ≤2% sentences with em-dashes/semicolons | | emDashCount | 12 | | semicolonCount | 9 | | flaggedSentences | 18 | | totalSentences | 182 | | ratio | 0.099 | | matches | | 0 | "“You’ve got to be joking.” She made to shut the door; the cane tip slid into the gap without force, polite as a lie." | | 1 | "His mismatched eyes—amber catching the hall light, black swallowing it—flicked past her to the flat: books stacked into battlements, scrolls rubber-banded like bones, Eva’s research notes taped over the window because the curtain rail had fallen in March." | | 2 | "She hated more that he noticed it notice; his gaze dipped once, to the hollow of her throat, then back up with the discipline of a man closing a drawer." | | 3 | "Childhood glass, an accident in a Cardiff kitchen, pink and familiar; beneath it, tonight, the skin had burned while she shelved Eva’s grimoires." | | 4 | "“Do not.” His voice dropped; the black eye seemed to widen though nothing changed." | | 5 | "Not fear exactly—the flat had three deadbolts and Eva’s wards drawn in felt-tip on the backs of cereal boxes—but the old animal knowledge that some words had teeth when spoken where inside met outside." | | 6 | "The cane came up, hooked the door, and nudged it shut; Aurora redid the deadbolts herself, one, two, three, metal tongues sliding home." | | 7 | "She set two mismatched mugs on the windowsill—one chipped with a Cardiff crest, one printed with a cat in a bow tie—and rolled her sleeve." | | 8 | "She tensed; he noticed, paused, and drew out only a folded square of paper gone soft at the corners." | | 9 | "He laid it on the table between a map of ley lines and Eva’s shopping list—milk, batteries, do not summon." | | 10 | "She grabbed the picture; Ptolemy protested the disturbance with a chirp." | | 11 | "“She taught.” His amber eye caught the lamp; for an instant it looked almost human." | | 12 | "Lucien’s gaze followed, and the air changed—less oxygen, more spark." | | 13 | "Eva’s notes fluttered—WARD?" | | 14 | "MIRROR SALT?—and one slid off the glass, landing face down like it had given up." | | 15 | "His mouth moved—not a smile, the memory of one." | | 16 | "The old fuse box by the door popped; the lamps dipped." | | 17 | "She covered it by reaching for the kettle, but he was there—not touching, close enough that the fine hairs on her wrist rose toward the new mark as if iron had entered the room." |
| |
| 100.00% | Purple prose (modifier overload) | Target: <4% adverbs, <2% -ly adverbs, no adj stacking | | wordCount | 1214 | | adjectiveStacks | 0 | | stackExamples | (empty) | | adverbCount | 32 | | adverbRatio | 0.026359143327841845 | | lyAdverbCount | 4 | | lyAdverbRatio | 0.0032948929159802307 | |
| 100.00% | Repeated phrase echo | Target: ≤20% sentences with echoes (window: 2) | | totalSentences | 182 | | echoCount | 0 | | echoWords | (empty) | |
| 100.00% | Sentence length variance | Target: CV ≥0.4 for sentence word counts | | totalSentences | 182 | | mean | 10.15 | | std | 8.12 | | cv | 0.8 | | sampleLengths | | 0 | 15 | | 1 | 27 | | 2 | 34 | | 3 | 1 | | 4 | 10 | | 5 | 24 | | 6 | 5 | | 7 | 3 | | 8 | 11 | | 9 | 38 | | 10 | 18 | | 11 | 14 | | 12 | 10 | | 13 | 4 | | 14 | 8 | | 15 | 6 | | 16 | 30 | | 17 | 30 | | 18 | 1 | | 19 | 7 | | 20 | 2 | | 21 | 10 | | 22 | 12 | | 23 | 11 | | 24 | 23 | | 25 | 11 | | 26 | 23 | | 27 | 12 | | 28 | 10 | | 29 | 5 | | 30 | 13 | | 31 | 6 | | 32 | 12 | | 33 | 10 | | 34 | 4 | | 35 | 5 | | 36 | 7 | | 37 | 4 | | 38 | 12 | | 39 | 14 | | 40 | 10 | | 41 | 15 | | 42 | 16 | | 43 | 3 | | 44 | 9 | | 45 | 14 | | 46 | 4 | | 47 | 3 | | 48 | 34 | | 49 | 3 |
| |
| 52.20% | Sentence opener variety | Target: ≥60% unique sentence openers | | consecutiveRepeats | 10 | | diversityRatio | 0.34615384615384615 | | totalSentences | 182 | | uniqueOpeners | 63 | |
| 68.73% | Adverb-first sentence starts | Target: ≥3% sentences starting with an adverb | | adverbCount | 2 | | totalSentences | 97 | | matches | | 0 | "Somewhere below, the curry house" | | 1 | "Of course it did." |
| | ratio | 0.021 | |
| 75.67% | Pronoun-first sentence starts | Target: ≤30% sentences starting with a pronoun | | pronounCount | 35 | | totalSentences | 97 | | matches | | 0 | "She made to shut the" | | 1 | "His mismatched eyes—amber catching the" | | 2 | "She hated that her pulse" | | 3 | "She hated more that he" | | 4 | "Her thumb covered the little" | | 5 | "She had told herself the" | | 6 | "She had told herself a" | | 7 | "His hand did, slow enough" | | 8 | "His voice dropped; the black" | | 9 | "She stepped back." | | 10 | "He crossed into Eva’s cramped" | | 11 | "He watched her hands." | | 12 | "She pretended not to know." | | 13 | "she asked, because manners were" | | 14 | "He folded himself into Eva’s" | | 15 | "She set two mismatched mugs" | | 16 | "He leaned nearer until she" | | 17 | "It died between them." | | 18 | "He looked at the mugs." | | 19 | "She tensed; he noticed, paused," |
| | ratio | 0.361 | |
| 47.63% | Subject-first sentence starts | Target: ≤72% sentences starting with a subject | | subjectCount | 80 | | totalSentences | 97 | | matches | | 0 | "The door opened on the" | | 1 | "Aurora Carter kept one bare" | | 2 | "Ptolemy shot between her ankles" | | 3 | "She made to shut the" | | 4 | "His mismatched eyes—amber catching the" | | 5 | "A muscle moved under the" | | 6 | "The use of her full" | | 7 | "She hated that her pulse" | | 8 | "She hated more that he" | | 9 | "Ptolemy abandoned the shoes and" | | 10 | "Aurora lifted the chain free" | | 11 | "Her thumb covered the little" | | 12 | "Childhood glass, an accident in" | | 13 | "She had told herself the" | | 14 | "She had told herself a" | | 15 | "Lucien’s cane did not move." | | 16 | "His hand did, slow enough" | | 17 | "Rain jewelled the lines of" | | 18 | "The hall light buzzed." | | 19 | "Lucien stood in it all" |
| | 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 | |
| 100.00% | Technical jargon density | Target: ≤6% sentences with technical-jargon patterns | | analyzedSentences | 45 | | technicalSentenceCount | 1 | | matches | | 0 | "She covered it by reaching for the kettle, but he was there—not touching, close enough that the fine hairs on her wrist rose toward the new mark as if iron had …" |
| |
| 97.22% | Useless dialogue additions | Target: ≤5% dialogue tags with trailing filler fragments | | totalTags | 18 | | uselessAdditionCount | 1 | | matches | | 0 | "she said, and the alias slipped out softer than she allowed anyone but Eva to hear" |
| |
| 100.00% | Dialogue tag variety (said vs. fancy) | Target: ≤10% fancy dialogue tags | | totalTags | 13 | | fancyCount | 2 | | fancyTags | | 0 | "Lucien agreed (agree)" | | 1 | "he repeated (repeat)" |
| | dialogueSentences | 87 | | tagDensity | 0.149 | | leniency | 0.299 | | rawRatio | 0.154 | | effectiveRatio | 0.046 | |