| 100.00% | Adverbs in dialogue tags | Target: ≤10% dialogue tags with adverbs | | totalTags | 1 | | adverbTagCount | 0 | | adverbTags | (empty) | | dialogueSentences | 1 | | tagDensity | 1 | | leniency | 1 | | rawRatio | 0 | | effectiveRatio | 0 | |
| 80.86% | AI-ism adverb frequency | Target: <2% AI-ism adverbs (58 tracked) | | wordCount | 1567 | | totalAiIsmAdverbs | 6 | | 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) | |
| 61.71% | AI-ism word frequency | Target: <2% AI-ism words (290 tracked) | | wordCount | 1567 | | totalAiIsms | 12 | | found | | | highlights | | 0 | "flicker" | | 1 | "pulse" | | 2 | "warmth" | | 3 | "reminder" | | 4 | "resolve" | | 5 | "streaming" | | 6 | "silence" | | 7 | "pulsed" | | 8 | "measured" |
| |
| 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 | 136 | | matches | (empty) | |
| 100.00% | Filter word density | Target: ≤3% sentences with filter/hedge words | | filterCount | 0 | | hedgeCount | 1 | | narrationSentences | 136 | | filterMatches | (empty) | | hedgeMatches | | |
| 100.00% | Gibberish response detection | Target: ≤1% gibberish-like sentences (hard fail if a sentence exceeds 800 words) | | analyzedSentences | 136 | | gibberishSentences | 0 | | adjustedGibberishSentences | 0 | | longSentenceCount | 0 | | runOnParagraphCount | 0 | | giantParagraphCount | 0 | | wordSaladCount | 0 | | repetitionLoopCount | 0 | | controlTokenCount | 0 | | maxSentenceWordsSeen | 69 | | ratio | 0 | | matches | (empty) | |
| 100.00% | Markdown formatting overuse | Target: ≤5% words in markdown formatting | | markdownSpans | 3 | | markdownWords | 13 | | totalWords | 1583 | | ratio | 0.008 | | matches | | 0 | "You ok? You seemed off today." | | 1 | "Just tired. Early night." | | 2 | "Rory, it's 9:47." |
| |
| 100.00% | Missing dialogue indicators (quotation marks) | Target: ≤10% speech attributions without quotation marks | | totalAttributions | 7 | | unquotedAttributions | 0 | | matches | (empty) | |
| 100.00% | Name drop frequency | Target: ≤1.0 per-name mentions per 100 words | | totalMentions | 19 | | wordCount | 1582 | | uniqueNames | 11 | | maxNameDensity | 0.19 | | worstName | "Aurora" | | maxWindowNameDensity | 1 | | worstWindowName | "Yu-Fei" | | discoveredNames | | Silas | 2 | | Richmond | 2 | | Park | 2 | | January | 1 | | Heartstone | 1 | | Yu-Fei | 2 | | Hammersmith | 1 | | Eva | 1 | | Aurora | 3 | | Danny | 1 | | Like | 3 |
| | persons | | 0 | "Silas" | | 1 | "Eva" | | 2 | "Aurora" | | 3 | "Danny" |
| | places | | 0 | "Richmond" | | 1 | "Park" | | 2 | "January" | | 3 | "Hammersmith" | | 4 | "Like" |
| | globalScore | 1 | | windowScore | 1 | |
| 100.00% | Narrator intent-glossing | Target: ≤2% narration sentences with intent-glossing patterns | | analyzedSentences | 76 | | glossingSentenceCount | 1 | | matches | | 0 | "felt like a reminder — the stone equiva" |
| |
| 100.00% | "Not X but Y" pattern overuse | Target: ≤1 "not X but Y" per 1000 words | | totalMatches | 0 | | per1kWords | 0 | | wordCount | 1583 | | matches | (empty) | |
| 100.00% | Overuse of "that" (subordinate clause padding) | Target: ≤2% sentences with "that" clauses | | thatCount | 0 | | totalSentences | 136 | | matches | (empty) | |
| 100.00% | Paragraph length variance | Target: CV ≥0.5 for paragraph word counts | | totalParagraphs | 43 | | mean | 36.81 | | std | 35.67 | | cv | 0.969 | | sampleLengths | | 0 | 9 | | 1 | 69 | | 2 | 12 | | 3 | 88 | | 4 | 6 | | 5 | 19 | | 6 | 121 | | 7 | 82 | | 8 | 10 | | 9 | 99 | | 10 | 43 | | 11 | 2 | | 12 | 58 | | 13 | 12 | | 14 | 4 | | 15 | 88 | | 16 | 43 | | 17 | 45 | | 18 | 18 | | 19 | 34 | | 20 | 13 | | 21 | 6 | | 22 | 11 | | 23 | 3 | | 24 | 43 | | 25 | 7 | | 26 | 135 | | 27 | 9 | | 28 | 71 | | 29 | 9 | | 30 | 82 | | 31 | 63 | | 32 | 5 | | 33 | 52 | | 34 | 5 | | 35 | 44 | | 36 | 11 | | 37 | 2 | | 38 | 22 | | 39 | 10 | | 40 | 3 | | 41 | 87 | | 42 | 28 |
| |
| 100.00% | Passive voice overuse | Target: ≤2% passive sentences | | passiveCount | 2 | | totalSentences | 136 | | matches | | 0 | "been locked" | | 1 | "been stretched" |
| |
| 100.00% | Past progressive (was/were + -ing) overuse | Target: ≤2% past progressive verbs | | pastProgressiveCount | 3 | | totalVerbs | 260 | | matches | | 0 | "was watching" | | 1 | "was glowing" | | 2 | "was holding" |
| |
| 0.00% | Em-dash & semicolon overuse | Target: ≤2% sentences with em-dashes/semicolons | | emDashCount | 20 | | semicolonCount | 0 | | flaggedSentences | 14 | | totalSentences | 136 | | ratio | 0.103 | | matches | | 0 | "It hadn't been locked when she'd left — she was certain of that — but the deadbolt had turned." | | 1 | "Citrus and old wood and the ghost of the lavender she'd kept on the windowsill — all there, but thin, like the scent had been stretched across too large a room." | | 2 | "She'd taken the path that cut through the old stand of oaks — the ones that always looked too large, too dark, too close together — and she'd felt it then." | | 3 | "Just — aware." | | 4 | "Not literally — she wasn't foolish enough to think the laws of distance could simply break — but the trees had kept pace, the gaps between them staying constant no matter how quickly she moved, the darkness at their edges remaining exactly the same distance from her shoulder." | | 5 | "The faint inner glow was there — a dim, deep red pulse, like a heartbeat made of light." | | 6 | "It felt like a reminder — the stone equivalent of a hand on her arm, telling her to slow down, to pay attention." | | 7 | "The glass was dark, and in the dark there was a reflection — her own face, blue-lit by the laptop screen, and behind her, in the window, something that was not the street and not the brick of the building next door." | | 8 | "Then the kettle clicked off, and the light from the laptop shifted — a small fluctuation in the power — and the reflection was just the window again." | | 9 | "But layered underneath them was something else — a silence that was too dense, too deliberate, like the room was holding its breath around a sound it didn't want her to hear." | | 10 | "And standing in the far corner of the car park, beneath the one tree that grew there — the stunted sycamore that never quite died — was a shape that was not a person and not a shadow and not a thing she could name." | | 11 | "The pendant pulsed against her chest, warm, warm, warm, and the warmth was almost an apology, almost a reassurance — almost." | | 12 | "The knock came again — three short raps, light, patient." | | 13 | "She could hear, beneath everything, a sound that might have been the door handle turning — slow, exploratory, testing — or might have been nothing at all, the house settling, the wood expanding and contracting in the cold, the small ordinary sounds a building makes when it is just a building and nothing more." |
| |
| 95.33% | Purple prose (modifier overload) | Target: <4% adverbs, <2% -ly adverbs, no adj stacking | | wordCount | 1566 | | adjectiveStacks | 0 | | stackExamples | (empty) | | adverbCount | 71 | | adverbRatio | 0.04533844189016603 | | lyAdverbCount | 11 | | lyAdverbRatio | 0.0070242656449553 | |
| 100.00% | Repeated phrase echo | Target: ≤20% sentences with echoes (window: 2) | | totalSentences | 136 | | echoCount | 0 | | echoWords | (empty) | |
| 100.00% | Sentence length variance | Target: CV ≥0.4 for sentence word counts | | totalSentences | 136 | | mean | 11.64 | | std | 12.01 | | cv | 1.032 | | sampleLengths | | 0 | 9 | | 1 | 22 | | 2 | 19 | | 3 | 4 | | 4 | 7 | | 5 | 5 | | 6 | 12 | | 7 | 12 | | 8 | 4 | | 9 | 6 | | 10 | 17 | | 11 | 31 | | 12 | 5 | | 13 | 6 | | 14 | 5 | | 15 | 6 | | 16 | 8 | | 17 | 4 | | 18 | 2 | | 19 | 19 | | 20 | 7 | | 21 | 35 | | 22 | 31 | | 23 | 3 | | 24 | 20 | | 25 | 2 | | 26 | 4 | | 27 | 3 | | 28 | 16 | | 29 | 3 | | 30 | 4 | | 31 | 48 | | 32 | 22 | | 33 | 1 | | 34 | 2 | | 35 | 2 | | 36 | 10 | | 37 | 6 | | 38 | 17 | | 39 | 18 | | 40 | 18 | | 41 | 26 | | 42 | 5 | | 43 | 9 | | 44 | 11 | | 45 | 5 | | 46 | 4 | | 47 | 23 | | 48 | 2 | | 49 | 21 |
| |
| 25.00% | Sentence opener variety | Target: ≥60% unique sentence openers | | consecutiveRepeats | 35 | | diversityRatio | 0.23529411764705882 | | totalSentences | 136 | | uniqueOpeners | 32 | |
| 100.00% | Adverb-first sentence starts | Target: ≥3% sentences starting with an adverb | | adverbCount | 7 | | totalSentences | 122 | | matches | | 0 | "Just the ordinary dark of" | | 1 | "Just — aware." | | 2 | "Then the kettle clicked off," | | 3 | "Just the dark." | | 4 | "Just the car park, maybe," | | 5 | "Then she looked at her" | | 6 | "Then she looked at the" |
| | ratio | 0.057 | |
| 46.23% | Pronoun-first sentence starts | Target: ≤30% sentences starting with a pronoun | | pronounCount | 53 | | totalSentences | 122 | | matches | | 0 | "It hadn't been locked when" | | 1 | "She watched the gap beneath" | | 2 | "She pushed it open anyway," | | 3 | "She switched on the light." | | 4 | "She locked the door behind" | | 5 | "It had started on the" | | 6 | "She'd come through Richmond Park" | | 7 | "She'd taken the path that" | | 8 | "She'd walked faster." | | 9 | "She'd broken into a jog" | | 10 | "She hadn't told herself that" | | 11 | "She didn't tell herself now," | | 12 | "She unzipped her jacket and" | | 13 | "It had been doing that" | | 14 | "She'd asked Yu-Fei about it" | | 15 | "She took the pendant out" | | 16 | "It didn't feel threatening." | | 17 | "It felt like a reminder" | | 18 | "She put it away and" | | 19 | "She sat at the table" |
| | ratio | 0.434 | |
| 29.67% | Subject-first sentence starts | Target: ≤72% sentences starting with a subject | | subjectCount | 105 | | totalSentences | 122 | | matches | | 0 | "The lock clicked open before" | | 1 | "Aurora stood on the gravel" | | 2 | "It hadn't been locked when" | | 3 | "The knob had turned." | | 4 | "She watched the gap beneath" | | 5 | "She pushed it open anyway," | | 6 | "The flat smelled wrong." | | 7 | "Citrus and old wood and" | | 8 | "She switched on the light." | | 9 | "Everything was where she'd left" | | 10 | "The mug on the counter." | | 11 | "The laptop open on the" | | 12 | "The jacket on the back" | | 13 | "Nothing out of place." | | 14 | "She locked the door behind" | | 15 | "It had started on the" | | 16 | "She'd come through Richmond Park" | | 17 | "She'd taken the path that" | | 18 | "The first flicker." | | 19 | "The sense that something in" |
| | ratio | 0.861 | |
| 0.00% | Subordinate conjunction sentence starts | Target: ≥2% sentences starting with a subordinating conjunction | | subConjCount | 0 | | totalSentences | 122 | | matches | (empty) | | ratio | 0 | |
| 71.43% | Technical jargon density | Target: ≤6% sentences with technical-jargon patterns | | analyzedSentences | 50 | | technicalSentenceCount | 5 | | matches | | 0 | "Not literally — she wasn't foolish enough to think the laws of distance could simply break — but the trees had kept pace, the gaps between them staying constant…" | | 1 | "The glass was dark, and in the dark there was a reflection — her own face, blue-lit by the laptop screen, and behind her, in the window, something that was not …" | | 2 | "She thought about the morning last month when she'd woken at five and gone to the window and seen daylight streaming across the rooftops, golden and thick like …" | | 3 | "But layered underneath them was something else — a silence that was too dense, too deliberate, like the room was holding its breath around a sound it didn't wan…" | | 4 | "She could hear, beneath everything, a sound that might have been the door handle turning — slow, exploratory, testing — or might have been nothing at all, the h…" |
| |
| 100.00% | Useless dialogue additions | Target: ≤5% dialogue tags with trailing filler fragments | | totalTags | 1 | | uselessAdditionCount | 0 | | matches | (empty) | |
| 100.00% | Dialogue tag variety (said vs. fancy) | Target: ≤10% fancy dialogue tags | | totalTags | 1 | | fancyCount | 0 | | fancyTags | (empty) | | dialogueSentences | 1 | | tagDensity | 1 | | leniency | 1 | | rawRatio | 0 | | effectiveRatio | 0 | |