| 100.00% | Adverbs in dialogue tags | Target: ≤10% dialogue tags with adverbs | | totalTags | 2 | | adverbTagCount | 0 | | adverbTags | (empty) | | dialogueSentences | 4 | | tagDensity | 0.5 | | leniency | 1 | | rawRatio | 0 | | effectiveRatio | 0 | |
| 90.89% | AI-ism adverb frequency | Target: <2% AI-ism adverbs (58 tracked) | | wordCount | 1098 | | 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) | |
| 77.23% | AI-ism word frequency | Target: <2% AI-ism words (290 tracked) | | wordCount | 1098 | | totalAiIsms | 5 | | found | | | highlights | | 0 | "echo" | | 1 | "pulse" | | 2 | "silence" | | 3 | "perfect" |
| |
| 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 | 80 | | matches | (empty) | |
| 100.00% | Filter word density | Target: ≤3% sentences with filter/hedge words | | filterCount | 1 | | hedgeCount | 0 | | narrationSentences | 80 | | filterMatches | | | hedgeMatches | (empty) | |
| 100.00% | Gibberish response detection | Target: ≤1% gibberish-like sentences (hard fail if a sentence exceeds 800 words) | | analyzedSentences | 83 | | gibberishSentences | 0 | | adjustedGibberishSentences | 0 | | longSentenceCount | 0 | | runOnParagraphCount | 0 | | giantParagraphCount | 0 | | wordSaladCount | 0 | | repetitionLoopCount | 0 | | controlTokenCount | 0 | | repeatedSegmentCount | 0 | | maxSentenceWordsSeen | 68 | | ratio | 0 | | matches | (empty) | |
| 100.00% | Markdown formatting overuse | Target: ≤5% words in markdown formatting | | markdownSpans | 0 | | markdownWords | 0 | | totalWords | 1114 | | ratio | 0 | | matches | (empty) | |
| 100.00% | Missing dialogue indicators (quotation marks) | Target: ≤10% speech attributions without quotation marks | | totalAttributions | 5 | | unquotedAttributions | 0 | | matches | (empty) | |
| 100.00% | Name drop frequency | Target: ≤1.0 per-name mentions per 100 words | | totalMentions | 16 | | wordCount | 1100 | | uniqueNames | 9 | | maxNameDensity | 0.45 | | worstName | "Rory" | | maxWindowNameDensity | 1 | | worstWindowName | "Rory" | | discoveredNames | | Rory | 5 | | Heartstone | 1 | | Eva | 3 | | December | 1 | | Richmond | 2 | | Park | 1 | | Cardiff | 1 | | Pen | 1 | | Ponds | 1 |
| | persons | | | places | | 0 | "Richmond" | | 1 | "Park" | | 2 | "Cardiff" |
| | globalScore | 1 | | windowScore | 1 | |
| 59.09% | Narrator intent-glossing | Target: ≤2% narration sentences with intent-glossing patterns | | analyzedSentences | 55 | | glossingSentenceCount | 2 | | matches | | 0 | "looked like a photograph left out in the" | | 1 | "felt like a trapped bird" |
| |
| 100.00% | "Not X but Y" pattern overuse | Target: ≤1 "not X but Y" per 1000 words | | totalMatches | 0 | | per1kWords | 0 | | wordCount | 1114 | | matches | (empty) | |
| 100.00% | Overuse of "that" (subordinate clause padding) | Target: ≤2% sentences with "that" clauses | | thatCount | 1 | | totalSentences | 83 | | matches | | |
| 100.00% | Paragraph length variance | Target: CV ≥0.5 for paragraph word counts | | totalParagraphs | 34 | | mean | 32.76 | | std | 26.06 | | cv | 0.795 | | sampleLengths | | 0 | 18 | | 1 | 73 | | 2 | 27 | | 3 | 72 | | 4 | 75 | | 5 | 5 | | 6 | 57 | | 7 | 1 | | 8 | 17 | | 9 | 6 | | 10 | 77 | | 11 | 66 | | 12 | 47 | | 13 | 9 | | 14 | 40 | | 15 | 13 | | 16 | 54 | | 17 | 24 | | 18 | 11 | | 19 | 61 | | 20 | 4 | | 21 | 59 | | 22 | 4 | | 23 | 69 | | 24 | 6 | | 25 | 65 | | 26 | 11 | | 27 | 22 | | 28 | 1 | | 29 | 25 | | 30 | 3 | | 31 | 45 | | 32 | 13 | | 33 | 34 |
| |
| 100.00% | Passive voice overuse | Target: ≤2% passive sentences | | passiveCount | 1 | | totalSentences | 80 | | matches | | |
| 13.78% | Past progressive (was/were + -ing) overuse | Target: ≤2% past progressive verbs | | pastProgressiveCount | 5 | | totalVerbs | 179 | | matches | | 0 | "was keeping" | | 1 | "was trying" | | 2 | "were turning" | | 3 | "was shrinking" | | 4 | "was shrieking" |
| |
| 0.00% | Em-dash & semicolon overuse | Target: ≤2% sentences with em-dashes/semicolons | | emDashCount | 16 | | semicolonCount | 0 | | flaggedSentences | 13 | | totalSentences | 83 | | ratio | 0.157 | | matches | | 0 | "Wildflowers carpeted the clearing beyond them — she knew from Eva's warning that they bloomed year-round here, blue and white and a red she'd never been able to name, colours too vivid for December." | | 1 | "The pendant had led her here — pulsing stronger with every step east, and stronger still now, until each beat pressed against her like a thumb testing fruit." | | 2 | "It stopped being weather and became atmosphere — the still, cellar-damp cold of somewhere underground, though the sky above the clearing was clear and crowded with stars." | | 3 | "The crimson stone glowed from within, faint but steady, and as she watched, the glow brightened, dimmed, brightened — in rhythm." | | 4 | "She crouched and touched one — a white bloom, open wide as a throat — and it flinched from her fingertip." | | 5 | "It came from everywhere now — north, east, behind her, inside the stones themselves, a vibration she felt in her molars more than heard." | | 6 | "There was no light to cast it — no moon, no torch, nothing but stars — and yet something tall moved through the gap between stones, unhurried, and did not come out the other side." | | 7 | "She backed toward the stone gap she'd entered through, and the ground under her was soft — softer than it had been, giving like flesh, and she refused to look down, refused, and walked faster." | | 8 | "Not a breath — a weather system of breath, a long drawn sigh that stirred the hair on her neck and carried a smell like wet stone and lilies and, underneath, the cloying sweetness of a room where something has been left too long." | | 9 | "The far stones stood further away than they should, the whole space stretched like taffy, and the flowers nearest her had opened wider — some of them beyond flowers now, petals peeling back to show pale ridged interiors, rows of them, and she turned and ran for the gap in the stones because the gap was shrinking, the two grey pillars sliding toward each other like an eyelid closing." | | 10 | "She landed in bracken on the ordinary side of the grove, rolled, came up on her hands and knees, and the pendant was shrieking against her chest — not warm now, hot, pulsing so fast it felt like a trapped bird." | | 11 | "Then, from the gap between the pillars — a gap no wider than a hand's span now — came her own voice." | | 12 | "And in the centre of the gem, where no flaw had been before, a single hairline crack ran from edge to edge — thin as a paper cut, and shaped exactly like a crescent." |
| |
| 100.00% | Purple prose (modifier overload) | Target: <4% adverbs, <2% -ly adverbs, no adj stacking | | wordCount | 7 | | adjectiveStacks | 0 | | stackExamples | (empty) | | adverbCount | 0 | | adverbRatio | 0 | | lyAdverbCount | 0 | | lyAdverbRatio | 0 | |
| 100.00% | Repeated phrase echo | Target: ≤20% sentences with echoes (window: 2) | | totalSentences | 83 | | echoCount | 0 | | echoWords | (empty) | |
| 100.00% | Sentence length variance | Target: CV ≥0.4 for sentence word counts | | totalSentences | 83 | | mean | 13.42 | | std | 12.45 | | cv | 0.928 | | sampleLengths | | 0 | 14 | | 1 | 4 | | 2 | 8 | | 3 | 1 | | 4 | 29 | | 5 | 13 | | 6 | 22 | | 7 | 6 | | 8 | 21 | | 9 | 21 | | 10 | 34 | | 11 | 4 | | 12 | 13 | | 13 | 9 | | 14 | 16 | | 15 | 19 | | 16 | 3 | | 17 | 28 | | 18 | 5 | | 19 | 3 | | 20 | 6 | | 21 | 27 | | 22 | 2 | | 23 | 19 | | 24 | 1 | | 25 | 6 | | 26 | 2 | | 27 | 9 | | 28 | 3 | | 29 | 3 | | 30 | 12 | | 31 | 21 | | 32 | 29 | | 33 | 15 | | 34 | 27 | | 35 | 18 | | 36 | 21 | | 37 | 4 | | 38 | 21 | | 39 | 1 | | 40 | 21 | | 41 | 9 | | 42 | 4 | | 43 | 24 | | 44 | 6 | | 45 | 6 | | 46 | 13 | | 47 | 2 | | 48 | 1 | | 49 | 35 |
| |
| 71.95% | Sentence opener variety | Target: ≥60% unique sentence openers | | consecutiveRepeats | 6 | | diversityRatio | 0.47560975609756095 | | totalSentences | 82 | | uniqueOpeners | 39 | |
| 100.00% | Adverb-first sentence starts | Target: ≥3% sentences starting with an adverb | | adverbCount | 3 | | totalSentences | 70 | | matches | | 0 | "Then again, quicker." | | 1 | "Then, from the gap between" | | 2 | "Only then did she lift" |
| | ratio | 0.043 | |
| 100.00% | Pronoun-first sentence starts | Target: ≤30% sentences starting with a pronoun | | pronounCount | 20 | | totalSentences | 70 | | matches | | 0 | "It took Rory forty." | | 1 | "She checked her phone for" | | 2 | "She pocketed the phone and" | | 3 | "It had been warm all" | | 4 | "She'd told her never to" | | 5 | "She stepped between the stones." | | 6 | "It stopped being weather and" | | 7 | "She counted without meaning to," | | 8 | "Her voice fell into the" | | 9 | "She pulled it out on" | | 10 | "She pressed two fingers to" | | 11 | "She let the pendant fall" | | 12 | "She crouched and touched one" | | 13 | "It came from everywhere now" | | 14 | "She clapped a hand over" | | 15 | "She waited for it to" | | 16 | "She backed toward the stone" | | 17 | "She risked a glance back." | | 18 | "She threw herself sideways through" | | 19 | "She landed in bracken on" |
| | ratio | 0.286 | |
| 88.57% | Subject-first sentence starts | Target: ≤72% sentences starting with a subject | | subjectCount | 52 | | totalSentences | 70 | | matches | | 0 | "The grove should have been" | | 1 | "It took Rory forty." | | 2 | "She checked her phone for" | | 3 | "The screen glowed a sickly" | | 4 | "She pocketed the phone and" | | 5 | "It had been warm all" | | 6 | "The standing stones rose out" | | 7 | "Wildflowers carpeted the clearing beyond" | | 8 | "Tonight they looked grey." | | 9 | "Tonight the whole clearing looked" | | 10 | "Eva had told her never" | | 11 | "She'd told her never to" | | 12 | "Rory had two out of" | | 13 | "Dymas was missing." | | 14 | "The pendant had led her" | | 15 | "She stepped between the stones." | | 16 | "The cold changed." | | 17 | "That was the first wrong" | | 18 | "It stopped being weather and" | | 19 | "She counted without meaning to," |
| | ratio | 0.743 | |
| 100.00% | Subordinate conjunction sentence starts | Target: ≥2% sentences starting with a subordinating conjunction | | subConjCount | 2 | | totalSentences | 70 | | matches | | 0 | "Now it was warm and" | | 1 | "As if the stone was" |
| | ratio | 0.029 | |
| 86.47% | Technical jargon density | Target: ≤6% sentences with technical-jargon patterns | | analyzedSentences | 38 | | technicalSentenceCount | 3 | | matches | | 0 | "Now it was warm and pulsing, a slow beat against her chest like a second heart that didn't match her own." | | 1 | "A woman's voice humming something in a key that kept bending, sliding between major and minor like light through warped glass." | | 2 | "Not a breath — a weather system of breath, a long drawn sigh that stirred the hair on her neck and carried a smell like wet stone and lilies and, underneath, th…" |
| |
| 100.00% | Useless dialogue additions | Target: ≤5% dialogue tags with trailing filler fragments | | totalTags | 2 | | uselessAdditionCount | 0 | | matches | (empty) | |
| 100.00% | Dialogue tag variety (said vs. fancy) | Target: ≤10% fancy dialogue tags | |