| 66.67% | Adverbs in dialogue tags | Target: ≤10% dialogue tags with adverbs | | totalTags | 15 | | adverbTagCount | 2 | | adverbTags | | 0 | "Rory said flatly [flatly]" | | 1 | "he said quietly [quietly]" |
| | dialogueSentences | 28 | | tagDensity | 0.536 | | leniency | 1 | | rawRatio | 0.133 | | effectiveRatio | 0.133 | |
| 74.23% | AI-ism adverb frequency | Target: <2% AI-ism adverbs (58 tracked) | | wordCount | 970 | | totalAiIsmAdverbs | 5 | | found | | | highlights | | 0 | "very" | | 1 | "gently" | | 2 | "precisely" | | 3 | "quickly" | | 4 | "slowly" |
| |
| 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) | |
| 79.38% | AI-ism word frequency | Target: <2% AI-ism words (290 tracked) | | wordCount | 970 | | totalAiIsms | 4 | | found | | | highlights | | 0 | "could feel" | | 1 | "treacherous" | | 2 | "flickered" | | 3 | "charm" |
| |
| 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 | 59 | | matches | (empty) | |
| 100.00% | Filter word density | Target: ≤3% sentences with filter/hedge words | | filterCount | 0 | | hedgeCount | 0 | | narrationSentences | 59 | | filterMatches | (empty) | | hedgeMatches | (empty) | |
| 100.00% | Gibberish response detection | Target: ≤1% gibberish-like sentences (hard fail if a sentence exceeds 800 words) | | analyzedSentences | 72 | | gibberishSentences | 0 | | adjustedGibberishSentences | 0 | | longSentenceCount | 0 | | runOnParagraphCount | 0 | | giantParagraphCount | 0 | | wordSaladCount | 0 | | repetitionLoopCount | 0 | | controlTokenCount | 0 | | repeatedSegmentCount | 0 | | maxSentenceWordsSeen | 52 | | ratio | 0 | | matches | (empty) | |
| 100.00% | Markdown formatting overuse | Target: ≤5% words in markdown formatting | | markdownSpans | 0 | | markdownWords | 0 | | totalWords | 970 | | ratio | 0 | | matches | (empty) | |
| 100.00% | Missing dialogue indicators (quotation marks) | Target: ≤10% speech attributions without quotation marks | | totalAttributions | 18 | | unquotedAttributions | 0 | | matches | (empty) | |
| 100.00% | Name drop frequency | Target: ≤1.0 per-name mentions per 100 words | | totalMentions | 27 | | wordCount | 766 | | uniqueNames | 11 | | maxNameDensity | 0.91 | | worstName | "Lucien" | | maxWindowNameDensity | 2 | | worstWindowName | "Lucien" | | discoveredNames | | Rory | 6 | | Moreau | 1 | | Rue | 1 | | Saint-Ferréol | 1 | | Yu-Fei | 1 | | French | 1 | | English | 1 | | Eva | 5 | | Marseille | 1 | | London | 2 | | Lucien | 7 |
| | persons | | 0 | "Rory" | | 1 | "Moreau" | | 2 | "Saint-Ferréol" | | 3 | "Yu-Fei" | | 4 | "Eva" | | 5 | "Lucien" |
| | places | | | globalScore | 1 | | windowScore | 1 | |
| 100.00% | Narrator intent-glossing | Target: ≤2% narration sentences with intent-glossing patterns | | analyzedSentences | 38 | | 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 | 970 | | matches | (empty) | |
| 74.07% | Overuse of "that" (subordinate clause padding) | Target: ≤2% sentences with "that" clauses | | thatCount | 2 | | totalSentences | 72 | | matches | | 0 | "understood that the" | | 1 | "chose that moment" |
| |
| 100.00% | Paragraph length variance | Target: CV ≥0.5 for paragraph word counts | | totalParagraphs | 36 | | mean | 26.94 | | std | 24.15 | | cv | 0.896 | | sampleLengths | | 0 | 58 | | 1 | 5 | | 2 | 100 | | 3 | 3 | | 4 | 41 | | 5 | 8 | | 6 | 33 | | 7 | 5 | | 8 | 65 | | 9 | 42 | | 10 | 9 | | 11 | 2 | | 12 | 6 | | 13 | 73 | | 14 | 34 | | 15 | 7 | | 16 | 10 | | 17 | 27 | | 18 | 17 | | 19 | 5 | | 20 | 6 | | 21 | 67 | | 22 | 48 | | 23 | 7 | | 24 | 55 | | 25 | 21 | | 26 | 13 | | 27 | 10 | | 28 | 18 | | 29 | 9 | | 30 | 52 | | 31 | 25 | | 32 | 45 | | 33 | 8 | | 34 | 19 | | 35 | 17 |
| |
| 99.32% | Passive voice overuse | Target: ≤2% passive sentences | | passiveCount | 1 | | totalSentences | 59 | | matches | | |
| 54.01% | Past progressive (was/were + -ing) overuse | Target: ≤2% past progressive verbs | | pastProgressiveCount | 3 | | totalVerbs | 137 | | matches | | 0 | "were looking" | | 1 | "was feeling" | | 2 | "was bracing" |
| |
| 100.00% | Em-dash & semicolon overuse | Target: ≤2% sentences with em-dashes/semicolons | | emDashCount | 0 | | semicolonCount | 0 | | flaggedSentences | 0 | | totalSentences | 72 | | ratio | 0 | | matches | (empty) | |
| 97.45% | Purple prose (modifier overload) | Target: <4% adverbs, <2% -ly adverbs, no adj stacking | | wordCount | 769 | | adjectiveStacks | 0 | | stackExamples | (empty) | | adverbCount | 33 | | adverbRatio | 0.04291287386215865 | | lyAdverbCount | 10 | | lyAdverbRatio | 0.013003901170351105 | |
| 100.00% | Repeated phrase echo | Target: ≤20% sentences with echoes (window: 2) | | totalSentences | 72 | | echoCount | 0 | | echoWords | (empty) | |
| 100.00% | Sentence length variance | Target: CV ≥0.4 for sentence word counts | | totalSentences | 72 | | mean | 13.47 | | std | 11.13 | | cv | 0.826 | | sampleLengths | | 0 | 6 | | 1 | 26 | | 2 | 26 | | 3 | 5 | | 4 | 17 | | 5 | 15 | | 6 | 19 | | 7 | 7 | | 8 | 42 | | 9 | 3 | | 10 | 5 | | 11 | 4 | | 12 | 25 | | 13 | 7 | | 14 | 8 | | 15 | 27 | | 16 | 6 | | 17 | 5 | | 18 | 43 | | 19 | 3 | | 20 | 19 | | 21 | 6 | | 22 | 6 | | 23 | 30 | | 24 | 9 | | 25 | 2 | | 26 | 6 | | 27 | 14 | | 28 | 2 | | 29 | 41 | | 30 | 16 | | 31 | 25 | | 32 | 9 | | 33 | 7 | | 34 | 10 | | 35 | 10 | | 36 | 17 | | 37 | 9 | | 38 | 8 | | 39 | 5 | | 40 | 6 | | 41 | 11 | | 42 | 24 | | 43 | 12 | | 44 | 12 | | 45 | 8 | | 46 | 5 | | 47 | 22 | | 48 | 21 | | 49 | 7 |
| |
| 74.07% | Sentence opener variety | Target: ≥60% unique sentence openers | | consecutiveRepeats | 10 | | diversityRatio | 0.5277777777777778 | | totalSentences | 72 | | uniqueOpeners | 38 | |
| 100.00% | Adverb-first sentence starts | Target: ≥3% sentences starting with an adverb | | adverbCount | 2 | | totalSentences | 50 | | matches | | 0 | "Of course Eva had told" | | 1 | "Instead, she sat down on" |
| | ratio | 0.04 | |
| 28.00% | Pronoun-first sentence starts | Target: ≤30% sentences starting with a pronoun | | pronounCount | 24 | | totalSentences | 50 | | matches | | 0 | "She yanked the door open." | | 1 | "His voice was low, the" | | 2 | "He glanced past her shoulder" | | 3 | "His mouth tightened." | | 4 | "he corrected, very gently, and" | | 5 | "She had built a life" | | 6 | "He inclined his head, conceding" | | 7 | "He had done it the" | | 8 | "He had done it the" | | 9 | "She should close the door." | | 10 | "She should tell him to" | | 11 | "She had said exactly that" | | 12 | "she said, and stepped aside" | | 13 | "He came in slowly, the" | | 14 | "He stopped in the middle" | | 15 | "he said quietly" | | 16 | "Her heart was a fist" | | 17 | "He looked at her for" | | 18 | "Her breath caught." | | 19 | "She had not expected that." |
| | ratio | 0.48 | |
| 10.00% | Subject-first sentence starts | Target: ≤72% sentences starting with a subject | | subjectCount | 45 | | totalSentences | 50 | | matches | | 0 | "The first deadbolt took two" | | 1 | "The second stuck, the way" | | 2 | "She yanked the door open." | | 3 | "Lucien Moreau stood on the" | | 4 | "The yellow bulb above the" | | 5 | "Charcoal suit, not a crease" | | 6 | "A fine mist beaded on" | | 7 | "Nobody called her that anymore." | | 8 | "Eva called her Rory." | | 9 | "Silas called her kid, when" | | 10 | "Lucien had never called her" | | 11 | "His voice was low, the" | | 12 | "He glanced past her shoulder" | | 13 | "His mouth tightened." | | 14 | "Rory's grip tightened on the" | | 15 | "Eva told everyone everything when" | | 16 | "Rory said flatly" | | 17 | "he corrected, very gently, and" | | 18 | "She had built a life" | | 19 | "Ptolemy chose that moment to" |
| | ratio | 0.9 | |
| 100.00% | Subordinate conjunction sentence starts | Target: ≥2% sentences starting with a subordinating conjunction | | subConjCount | 1 | | totalSentences | 50 | | matches | | 0 | "Because she could hear what" |
| | ratio | 0.02 | |
| 53.57% | Technical jargon density | Target: ≤6% sentences with technical-jargon patterns | | analyzedSentences | 24 | | technicalSentenceCount | 3 | | matches | | 0 | "One eye was amber, one black, and both of them were looking at her the way they had looked at her in the rain-soaked alley off Rue Saint-Ferréol, as if she were…" | | 1 | "Because she could hear what he didn't say, and she could feel the old pull low in her chest, the same treacherous tug that had kept her awake in Marseille and o…" | | 2 | "He inclined his head, conceding the point without conceding anything else." |
| |
| 100.00% | Useless dialogue additions | Target: ≤5% dialogue tags with trailing filler fragments | | totalTags | 15 | | uselessAdditionCount | 0 | | matches | (empty) | |
| 78.57% | Dialogue tag variety (said vs. fancy) | Target: ≤10% fancy dialogue tags | | totalTags | 12 | | fancyCount | 2 | | fancyTags | | 0 | "he corrected (correct)" | | 1 | "Lucien murmured (murmur)" |
| | dialogueSentences | 28 | | tagDensity | 0.429 | | leniency | 0.857 | | rawRatio | 0.167 | | effectiveRatio | 0.143 | |