NC Bench
Overview
About
Tests
Categories
Models
Vendors
Compare
Run: 2026-03-18-01KM08BXF5TP5V15MPC83H5XPX
Run Details
Model:
GPT-5.4 Mini (Reasoning, Low)
Test:
Bad Writing Habits
Scenario:
Romance: separated couple reunites
Duration:
16.9s
Cost:
$0.015293
Provider:
OpenAI
Evaluation summary
Score
Evaluator
Details Link
100.00%
Adverbs in dialogue tags
(details)
94.05%
AI-ism adverb frequency
(details)
100.00%
AI-ism character names
(details)
100.00%
AI-ism location names
(details)
76.21%
AI-ism word frequency
(details)
100.00%
Cliché density
(details)
100.00%
Emotion telling (show vs. tell)
(details)
99.30%
Filter word density
(details)
100.00%
Gibberish response detection
(details)
100.00%
Markdown formatting overuse
(details)
100.00%
Missing dialogue indicators (quotation marks)
(details)
33.33%
Name drop frequency
(details)
100.00%
Narrator intent-glossing
(details)
100.00%
"Not X but Y" pattern overuse
(details)
100.00%
Overuse of "that" (subordinate clause padding)
(details)
100.00%
Paragraph length variance
(details)
100.00%
Passive voice overuse
(details)
100.00%
Past progressive (was/were + -ing) overuse
(details)
100.00%
Em-dash & semicolon overuse
(details)
95.13%
Purple prose (modifier overload)
(details)
100.00%
Repeated phrase echo
(details)
100.00%
Sentence length variance
(details)
43.62%
Sentence opener variety
(details)
43.86%
Adverb-first sentence starts
(details)
83.16%
Pronoun-first sentence starts
(details)
6.05%
Subject-first sentence starts
(details)
0.00%
Subordinate conjunction sentence starts
(details)
100.00%
Technical jargon density
(details)
100.00%
Useless dialogue additions
(details)
100.00%
Dialogue tag variety (said vs. fancy)
(details)
85.8240%
Overall
Model input
System
You are an expert fiction writer. Always keep the following rules in mind: - Write in past tense and use General English spelling, grammar, and colloquialisms/slang. - Write in active voice - Always follow the "show, don't tell" principle. - Avoid adverbs and cliches and overused/commonly used phrases. Aim for fresh and original descriptions. - Convey events and story through dialogue. - Mix short, punchy sentences with long, descriptive ones. Drop fill words to add variety. - Skip "he/she said said" dialogue tags and convey people's actions or face expressions through their speech - Avoid mushy dialog and descriptions, have dialogue always continue the action, never stall or add unnecessary fluff. Vary the descriptions to not repeat yourself. - Put dialogue on its own paragraph to separate scene and action. - Reduce indicators of uncertainty like "trying" or "maybe" When writing text: - NEVER conclude the scene on your own, follow the beat instructions very closely. - NEVER end with foreshadowing. - NEVER write further than what I prompt you with. - AVOID imagining possible endings, NEVER deviate from the instructions. - STOP EARLY if the continuation contains what was required in the instructions. You do not need to fill out the full amount of words possible.
User/Human
Take into account the following glossary of characters/locations/items/lore... when writing your response: <codex> <character id="4412" name="Aurora Carter" aliases="Rory, Laila, Aurora, Carter, Malphora" pronouns="she/her" species="Human" storyRole="Protagonist"> <eyeColor>bright blue</eyeColor> <hair>straight shoulder-length black</hair> <height>5'6"</height> <age>25</age> <scar>small crescent-shaped scar on her left wrist from a childhood accident</scar> <description>Aurora, referred to by her friends as Rory, is cool-headed, intelligent, and known for quick out-of-the-box thinking.</description> <backstory>Born in Cardiff to an Irish barrister father (Brendan Carter) and Welsh teacher mother (Jennifer Carter née Ellis), Rory reluctantly pursued Pre-Law at Cardiff University. She fled to London at the behest of her childhood friend Eva after leaving an abusive ex named Evan. By day, Rory works part-time as a delivery person for Yu-Fei Cheung's Golden Empress restaurant. She lives in a flat above Silas' bar.</backstory> </character> <character id="4415" name="Lucien Moreau" aliases="Lucien, Luc, the Frenchman" pronouns="he/him" species="Half-Demon" storyRole="Ally"> <eyeColor>heterochromatic — one amber, one black</eyeColor> <hair>slicked-back platinum blond</hair> <height>5'11"</height> <age>32</age> <cane>ivory-handled cane that conceals a thin blade</cane> <dress>tailored charcoal suits</dress> <description>An impeccably dressed fixer and information broker in London's supernatural underworld. He speaks four languages fluently.</description> <backstory>Born in Marseille to a human mother and a demon father from the realm of Avaros.</backstory> </character> <location id="858" name="Eva's Flat" aliases="Eva's place, the flat on Brick Lane" realm="Earth"> <cat>tabby cat named Ptolemy</cat> <security>three deadbolts on the front door</security> <description>A cramped one-bedroom flat above a curry house on Brick Lane, East London. Every surface is covered with books, scrolls, and research notes.</description> </location> </codex> Continue the story using the following instructions: <instructions> Write a fully fleshed out scene of at least 1000 words in the romance genre. Two people who parted on complicated terms are forced together again when one shows up unannounced at the other's flat. There's history between them — attraction, hurt, and things left unsaid. Write the scene from the moment the door opens. Use the codex entries above as your world reference for characters and setting. Only include the prose of the scene without any markdown or commentary. </instructions>
Model response
Messages
Meta
AI
Rory cracked the first deadbolt, then the second, then the third with the same careful hand she used for everything she did not trust. When the door swung in, Lucien Moreau filled the frame like he owned the hallway, the stairwell, the whole damned building. Charcoal suit.
Ivory cane tucked under one
arm. Blond hair slicked back so clean it caught the weak light from the landing. One amber eye. One black.
Rory kept one hand on
the door edge and the other on the chain of her bag, as if she might swing it like a weapon. “You’ve got some nerve.”
Lucien’s mouth shifted, not quite
a smile,
not quite a wince
. “And you’ve not invited me in. How
very
rude, Rory.”
She leaned her shoulder against
the door, blocking him without moving a muscle. “You vanished.” “I believed distance had become fashionable.” “Don’t.”
His gaze dropped to her
wrist, to the crescent scar peeking from her sleeve, then lifted back to her face.
That look landed harder than
the rest of him.
She hated that it still
did. Behind her, the flat breathed around them.
Paper piles sagged off the
table. Half-open books made little cliffs on the floor.
A stack of marked-up notes
leaned against a bowl of stale fruit.
Ptolemy, sprawled on the back
of the sofa like a fat judge, opened one eye at Lucien and closed it again with visible disdain. Lucien’s nostrils flared once. “Your cat still judges me.” “Ptolemy has taste.” “I recall him biting my glove.” “He had good reason.” Lucien’s mouth twitched. “You let me stand in the hall for sport.” “I let you stand in the hall because I’m deciding whether to slam the door in your face.” His gaze slid over her, taking in the loose jumper, the rolled sleeves, the socks with the heel worn thin.
Her pulse gave a stupid
little kick she would have rather strangled. “You
look
well,” he said.
She barked a laugh without
humour. “That’s a lie.” “It was diplomacy.” “I don’t want diplomacy from you.”
The hallway noise swelled around
them.
Someone downstairs shouted in rapid
Hindi.
The curry house smell crawled
up the stairs, all cumin and fried oil.
Lucien stood there, smelling faintly
of cold rain and expensive soap, like he had stepped out of a different borough entirely.
He lifted the cane a
fraction. “May I come in, or do you prefer we conduct our reunion on the landing like schoolchildren?” “Reunion.” “Yes, that rather awkward thing where two people who have been on excellent terms with a wall in between them are forced to exchange words.” Rory stared at him. “You practised that in the mirror?” “One must prepare for important occasions.” “Is that what this is?” Lucien’s eyes held hers. For a beat, the hall went quiet around the edges. “Yes.” The word landed with a
weight
that made her
stomach
turn over.
She hated him for coming
here looking like that, polished and calm, as if he had not ripped a hole through her life and walked away through it. She opened the door wider, just enough. “If you’ve come to sell me something, get back in the lift.” “I’ve never sold you anything.” “You sold me a lie once.” The line of his jaw tightened. He moved past her anyway, careful with the cane, expensive shoes barely making a sound on the scuffed floorboards. Rory shut the door behind him and threw the bolts home one by one. The metal clicks sounded too loud in the narrow flat. Lucien stood in the middle of Eva’s living room, eyes adjusting as they swept over the chaos. “This place has not improved.” “It’s not here for your approval.” “No, I can see that.” Ptolemy rose, stretched, then hopped down from the sofa and padded straight to Lucien. Rory froze. The cat rubbed his flank against Lucien’s trouser leg. Rory stared. “That traitor.” Lucien looked down, one brow lifting. “I appear to have retained at least one admirer.” “Don’t encourage him.” Lucien crouched with careful grace, cane balanced against his knee. Ptolemy thrust his head under that elegant hand without a shred of dignity. Lucien scratched behind the cat’s ear and the creature purred loud enough to rattle the teacups on the windowsill. Rory crossed her arms. “You’re not supposed to be good at that.” “Good at what?” “At anything warm.” Lucien’s fingers stilled on the cat’s fur. When he looked up, the humour had gone out of his face. “Must I remind you that I am, in fact, a person and not a decorative knife?” “That was never the part I doubted.” His mouth parted, then shut. Ptolemy
chose that moment
to head-butt his hand and the tiny interruption broke the
tension
just enough to keep the room from snapping in half. Rory pointed at the sofa with one finger. “Sit. Or don’t. I don’t care.” Lucien rose in one smooth motion and settled on the far end of the sofa, cane across his knees. He did not sprawl. He never sprawled. Even seated, he looked arranged. Rory stayed standing. “Talk.”
He folded his hands over
the cane. “I need your help.” “No.” “You have not heard the issue.” “I don’t need to. The answer’s no.” “Rory.”
She hated that he could
say her name in that voice and make her chest tighten like he’d wrapped a hand around her ribs. “You do not get to come here looking all cut-glass and tragic and think I’m going to leap up to fix whatever mess you’ve made.” “Not my mess.” “That’s a new one.” Lucien took a breath through his nose, slow and
measured
. “One of my contacts has gone silent. He disappeared after a meeting in Whitechapel. The last thing he sent me was a set of names and a location. Your flat on Brick Lane happened to be the nearest place where I could arrive without a tail.” Rory gave him a flat
look
. “You turned up here because it was convenient.” “And because I wanted to see you.” Silence struck the room. Ptolemy lifted his head between them like a small furry referee. Rory almost wished she could blame the heat in her cheeks on the curry house downstairs. “Don’t do that.” “Do what?” “Say things like that and stand there with that face.” Lucien leaned back a fraction, all composed angles and old danger. “My face has never offended you before.” “It has offended me plenty. I just used to be distracted.”
His amber eye flicked, quick
as a blade. The black one followed with a slower, stranger
intensity
that always made her
feel
as if he could see through her skin. “You are still distracted,” he murmured. Rory laughed once. “That’s rich, coming from the man who disappeared without a word.”
His shoulders barely moved, but
she saw the change anyway. A tiny hardening around the mouth. The set of his throat. “I did not vanish without reason.” “Then say the reason.” “I cannot.” She threw her hands out. “Of course you can’t. You can never just talk. You always turn everything into a puzzle and then act surprised when people bleed on the floor trying to solve it.” That finally drew him upright. “I came here because I thought you might wish to know that someone has been asking after you.” She went still. “What?” “Not in a friendly manner.” “Who?” Lucien’s gaze shifted to the window, to the rain-streaked glass, then back to her face. “That remains under negotiation.” Rory stared at him for a long second, then crossed the room until she stood over him. “You used me to get in the door, didn’t you?” His chin lifted. He did not deny it. “Your security remains admirable.” “My security is three deadbolts and a cat with a grudge.” “It was enough to make certain people hesitate.” “Certain people.” “The kind who do not enjoy being seen.” Rory planted her hands on her hips. “You’re here because someone’s sniffing around me, and you thought that would make me grateful.” “I am here because someone is sniffing around you, and I did not fancy waiting until you discovered it by accident.” There it was. The old pull. The old problem. He could irritate her into fury and then hand her something that looked suspiciously like care, and it always
unsettled
her more than the lies. She looked away first. “You could have called.” “You changed your number.” “You could have emailed.” “You blocked my email.” “You could have sent a pigeon.” That got him. The smallest flash of amusement crossed his face before he swallowed it. “I do not own a pigeon.” “You’d know the right people.” His gaze settled on her mouth, just for a second, and the room became crowded with a memory she had no business entertaining. Lucien’s hand at her waist in a narrow alley. Lucien’s voice low in her ear. Lucien leaving before dawn with a coat thrown over one shoulder and no promise except the one he never said out loud. She stepped back so fast her heel struck a book on the floor. “Tell me the names.” “No.” “Lucien.” “No. Not yet.” “Then why are you here?” His eyes held hers. The air between them tightened. “Because I needed to know whether you were safe.” Rory went
very
still. “That’s your excuse?” “It is not an excuse.” “It sounds like one.” “It was the truth.” She laughed again, but this time it carried no humour at all. “You don’t get to turn up after months and say the truth like it fixes everything.” He rose. The movement shifted the room, made the sofa
look
smaller, the ceiling lower. He was close enough now that she could smell rain on his coat and the faint mineral note of his skin. Close enough that she had to work to keep her expression steady. “I have not come to fix anything.” “No?” “No.” He looked tired then. Not visibly. Not in the way a man looked tired after a long day. It sat deeper, behind the one black eye, tucked where even his tailored suit could not hide it. “I have come because I made a mistake.” Rory’s mouth went dry. He had never said that to her before. Not once. She
tried to
laugh it off and found the sound broken in her throat. “That’s not like you.” “No.” The answer came soft. Honest. It scared her more than any lie. She folded her arms tighter, as if that could hold her in place. “Start talking.” Lucien glanced toward the kitchen table buried under notes and maps. “First, we put a kettle on. You have been angry at me before breakfast, which I admit is a new low even for us.” Rory stared at him. “You walk in here with secrets, refuse to tell me who’s after me, and now you want tea?” “I want you calm enough to listen.” “I listen fine when people stop being impossible.” He moved past her toward the tiny kitchen alcove, cane tapping once against the floorboards. Rory watched him with narrowed eyes, half expecting him to open the wrong cupboard and insult the contents.
Instead, he found the kettle
with unnerving confidence and set it on the stove. Ptolemy jumped back onto the sofa and settled into a tight loaf, yellow eyes following both of them. Rory came after Lucien, stopping at the table so she could keep a bit of distance. He reached for a mug, then paused. “You still use the chipped one?” She glanced at the mug in his hand, the one with the cracked blue rim. “It pours tea.” “It was a gift.” “It was free.” His mouth curved, the faintest ghost of it. “You did keep it.” She pulled a chair out and sat backwards in it, arms folded over the back. “Don’t get cocky. I keep all sorts of rubbish.” Lucien poured water into the kettle from the tap, his sleeves riding up a fraction to show pale wrists and the edge of a cufflink. Rory hated how
familiar
the motion felt.
Hated that some
part of her body still remembered where his hands had been, where they should have stayed. He turned the gas on and faced her. “Someone sent a note to one of my clubs this morning. Your name was on it.” Rory’s expression hardened. “My name?” “Yes.” “What else?” “One line. ‘She still lives above the bar.’” The flat
seemed to
shift under her feet. “Who?” Lucien’s jaw flexed. “That is why I am here.” Rory watched him, watched the controlled stillness he wore like a second suit. She
knew that look
. He
was holding
something back. He always did. But this time there was strain under it, a crack in the polish. “You should have opened with that.” “I wanted to see whether you would throw me out first.” “And?” “And I am disappointed to find I rather expected you to.” Her
eyes narrowed
. “Lucien.” He crossed the tiny kitchen in two steps and stopped close enough that she had to tilt her chin to meet his gaze. The kettle clicked as it warmed on the stove behind him. Ptolemy let out a low, impatient mew. Lucien looked at her for a long, quiet beat. “I missed you,” he said. Rory’s breath caught. Her jaw tightened hard enough to ache. “That’s a terrible opening line.” “One of mine, then.” “Still terrible.” “I had not come prepared to
charm
you.” “You came prepared to manipulate me.” “Yes.” The honesty hit harder than any smooth excuse would have. Rory stood so
quickly
the chair legs scraped the floor. “There you are. That’s the Lucien I remember.” His eyes sharpened. “You remember more than that.” Her mouth opened, then shut. The flat felt too small for both their breathing. Lucien did not move away. He never did, not when it mattered. That had been part of the trouble between them from the start. He had stayed close enough to hurt and left her wanting the space to scream at him for it. The kettle
began to
rise toward a boil. Steam hissed under the lid. Rory stared at him across two feet of floor and a pile of old damage. “If someone put my address in a note,” she said, “you should have brought me the note.” “I did not wish to arrive empty-handed.” “What did you bring?” His gaze dropped to the cane at his side. “Bad news.” Rory gave a short, sharp exhale and looked toward the window, toward the rain dragging lines down the glass. “Fine.” Lucien’s brow lifted. “Fine?” “You can have tea. Then you tell me everything you know. Every name. Every place. Every lie you’ve already decided not to say.” His expression changed at that,
not much, but enough
. The strain eased at the edges. “And after?” Rory looked back at him, bright-eyed and furious and far too aware of how close he stood. “After, Lucien, I decide whether I’m still angry enough to kick you out.”
created_at
"2026-03-18T10:37:52.497Z"
3/18/2026, 10:37:52 AM
model
"openai/gpt-5.4-mini-20260317"
app_id
182717
external_user
(null)
streamed
true
cancelled
false
latency
2713
moderation_latency
(null)
generation_time
16680
tokens_prompt
1034
tokens_completion
4238
native_tokens_prompt
927
native_tokens_completion
3244
native_tokens_completion_images
0
native_tokens_reasoning
57
native_tokens_cached
0
num_media_prompt
(null)
num_input_audio_prompt
(null)
num_media_completion
0
num_search_results
(null)
origin
"https://ncbench.com/"
is_byok
false
finish_reason
"stop"
native_finish_reason
"completed"
usage
0.01529325
router
(null)
provider_responses
0
endpoint_id
"9ee065b2-3d1c-43bc-bdd7-28af3b148282"
id
"resp_06f05a5c750a1e6f0169ba80809328819583c17fafc675fe9b"
is_byok
false
latency
420
model_permaslug
"openai/gpt-5.4-mini-20260317"
provider_name
"OpenAI"
status
200
user_agent
"langchainjs-openai/1.0.0 ((node/v24.14.0; linux; x64))"
http_referer
(null)
api_type
"completions"
id
"gen-1773830272-8VmGucun01tP77fNRWEg"
upstream_id
"resp_06f05a5c750a1e6f0169ba80809328819583c17fafc675fe9b"
total_cost
0.01529325
cache_discount
(null)
upstream_inference_cost
0
provider_name
"OpenAI"
Evaluation details
Result
Evaluator
Details
Meta Data
100.00%
Adverbs in dialogue tags
Target: ≤10% dialogue tags with adverbs
totalTags
4
adverbTagCount
0
adverbTags
(empty)
dialogueSentences
138
tagDensity
0.029
leniency
0.058
rawRatio
0
effectiveRatio
0
94.05%
AI-ism adverb frequency
Target: <2% AI-ism adverbs (58 tracked)
wordCount
2522
totalAiIsmAdverbs
3
found
0
adverb
"very"
count
2
1
adverb
"quickly"
count
1
highlights
0
"very"
1
"quickly"
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)
76.21%
AI-ism word frequency
Target: <2% AI-ism words (290 tracked)
wordCount
2522
totalAiIsms
12
found
0
word
"pulse"
count
1
1
word
"weight"
count
1
2
word
"stomach"
count
1
3
word
"tension"
count
1
4
word
"measured"
count
1
5
word
"the last thing"
count
1
6
word
"silence"
count
1
7
word
"flicked"
count
1
8
word
"intensity"
count
1
9
word
"unsettled"
count
1
10
word
"familiar"
count
1
11
word
"charm"
count
1
highlights
0
"pulse"
1
"weight"
2
"stomach"
3
"tension"
4
"measured"
5
"the last thing"
6
"silence"
7
"flicked"
8
"intensity"
9
"unsettled"
10
"familiar"
11
"charm"
100.00%
Cliché density
Target: ≤1 cliche(s) per 800-word window
totalCliches
1
maxInWindow
1
found
0
label
"eyes widened/narrowed"
count
1
highlights
0
"eyes narrowed"
100.00%
Emotion telling (show vs. tell)
Target: ≤3% sentences with emotion telling
emotionTells
0
narrationSentences
164
matches
(empty)
99.30%
Filter word density
Target: ≤3% sentences with filter/hedge words
filterCount
2
hedgeCount
3
narrationSentences
164
filterMatches
0
"feel"
1
"look"
hedgeMatches
0
"tried to"
1
"seemed to"
2
"began to"
100.00%
Gibberish response detection
Target: ≤1% gibberish-like sentences (hard fail if a sentence exceeds 800 words)
analyzedSentences
298
gibberishSentences
0
adjustedGibberishSentences
0
longSentenceCount
0
runOnParagraphCount
0
giantParagraphCount
0
wordSaladCount
0
repetitionLoopCount
0
controlTokenCount
0
maxSentenceWordsSeen
46
ratio
0
matches
(empty)
100.00%
Markdown formatting overuse
Target: ≤5% words in markdown formatting
markdownSpans
0
markdownWords
0
totalWords
2522
ratio
0
matches
(empty)
100.00%
Missing dialogue indicators (quotation marks)
Target: ≤10% speech attributions without quotation marks
totalAttributions
19
unquotedAttributions
0
matches
(empty)
33.33%
Name drop frequency
Target: ≤1.0 per-name mentions per 100 words
totalMentions
65
wordCount
1597
uniqueNames
6
maxNameDensity
1.75
worstName
"Lucien"
maxWindowNameDensity
4
worstWindowName
"Lucien"
discoveredNames
Lucien
28
Moreau
1
Hindi
1
Eva
1
Rory
27
Ptolemy
7
persons
0
"Lucien"
1
"Moreau"
2
"Eva"
3
"Rory"
4
"Ptolemy"
places
(empty)
globalScore
0.623
windowScore
0.333
100.00%
Narrator intent-glossing
Target: ≤2% narration sentences with intent-glossing patterns
analyzedSentences
109
glossingSentenceCount
1
matches
0
"not quite a smile, not quite a wince"
1
"not quite a wince"
100.00%
"Not X but Y" pattern overuse
Target: ≤1 "not X but Y" per 1000 words
totalMatches
1
per1kWords
0.397
wordCount
2522
matches
0
"not much, but enough"
100.00%
Overuse of "that" (subordinate clause padding)
Target: ≤2% sentences with "that" clauses
thatCount
5
totalSentences
298
matches
0
"hated that it"
1
"chose that moment"
2
"hated that he"
3
"Hated that some"
4
"knew that look"
100.00%
Paragraph length variance
Target: CV ≥0.5 for paragraph word counts
totalParagraphs
229
mean
11.01
std
11.84
cv
1.075
sampleLengths
0
24
1
48
2
26
3
4
4
11
5
10
6
13
7
2
8
6
9
1
10
35
11
57
12
4
13
5
14
3
15
6
16
4
17
3
18
9
19
18
20
32
21
5
22
6
23
3
24
3
25
6
26
46
27
6
28
17
29
1
30
25
31
4
32
6
33
6
34
5
35
14
36
1
37
40
38
7
39
12
40
5
41
6
42
49
43
17
44
5
45
6
46
5
47
16
48
9
49
2
100.00%
Passive voice overuse
Target: ≤2% passive sentences
passiveCount
0
totalSentences
164
matches
(empty)
100.00%
Past progressive (was/were + -ing) overuse
Target: ≤2% past progressive verbs
pastProgressiveCount
1
totalVerbs
273
matches
0
"was holding"
100.00%
Em-dash & semicolon overuse
Target: ≤2% sentences with em-dashes/semicolons
emDashCount
0
semicolonCount
0
flaggedSentences
0
totalSentences
298
ratio
0
matches
(empty)
95.13%
Purple prose (modifier overload)
Target: <4% adverbs, <2% -ly adverbs, no adj stacking
wordCount
1602
adjectiveStacks
0
stackExamples
(empty)
adverbCount
73
adverbRatio
0.04556803995006242
lyAdverbCount
8
lyAdverbRatio
0.004993757802746567
100.00%
Repeated phrase echo
Target: ≤20% sentences with echoes (window: 2)
totalSentences
298
echoCount
0
echoWords
(empty)
100.00%
Sentence length variance
Target: CV ≥0.4 for sentence word counts
totalSentences
298
mean
8.46
std
6.72
cv
0.794
sampleLengths
0
24
1
21
2
2
3
6
4
14
5
3
6
2
7
26
8
4
9
11
10
10
11
13
12
2
13
6
14
1
15
20
16
9
17
6
18
7
19
6
20
8
21
12
22
24
23
4
24
5
25
3
26
6
27
4
28
3
29
9
30
18
31
20
32
12
33
5
34
6
35
3
36
3
37
6
38
6
39
6
40
13
41
21
42
6
43
17
44
1
45
25
46
4
47
6
48
6
49
5
43.62%
Sentence opener variety
Target: ≥60% unique sentence openers
consecutiveRepeats
19
diversityRatio
0.21476510067114093
totalSentences
298
uniqueOpeners
64
43.86%
Adverb-first sentence starts
Target: ≥3% sentences starting with an adverb
adverbCount
2
totalSentences
152
matches
0
"Even seated, he looked arranged."
1
"Instead, he found the kettle"
ratio
0.013
83.16%
Pronoun-first sentence starts
Target: ≤30% sentences starting with a pronoun
pronounCount
52
totalSentences
152
matches
0
"She leaned her shoulder against"
1
"His gaze dropped to her"
2
"She hated that it still"
3
"His gaze slid over her,"
4
"Her pulse gave a stupid"
5
"She barked a laugh without"
6
"He lifted the cane a"
7
"She hated him for coming"
8
"She opened the door wider,"
9
"He moved past her anyway,"
10
"His mouth parted, then shut."
11
"He did not sprawl."
12
"He never sprawled."
13
"He folded his hands over"
14
"She hated that he could"
15
"His amber eye flicked, quick"
16
"His shoulders barely moved, but"
17
"She threw her hands out."
18
"She went still."
19
"His chin lifted."
ratio
0.342
6.05%
Subject-first sentence starts
Target: ≤72% sentences starting with a subject
subjectCount
138
totalSentences
152
matches
0
"Rory cracked the first deadbolt,"
1
"Ivory cane tucked under one"
2
"Rory kept one hand on"
3
"Lucien’s mouth shifted, not quite"
4
"She leaned her shoulder against"
5
"His gaze dropped to her"
6
"That look landed harder than"
7
"She hated that it still"
8
"Paper piles sagged off the"
9
"A stack of marked-up notes"
10
"Ptolemy, sprawled on the back"
11
"Lucien’s nostrils flared once."
12
"Lucien’s mouth twitched."
13
"His gaze slid over her,"
14
"Her pulse gave a stupid"
15
"She barked a laugh without"
16
"The hallway noise swelled around"
17
"Someone downstairs shouted in rapid"
18
"The curry house smell crawled"
19
"Lucien stood there, smelling faintly"
ratio
0.908
0.00%
Subordinate conjunction sentence starts
Target: ≥2% sentences starting with a subordinating conjunction
subConjCount
0
totalSentences
152
matches
(empty)
ratio
0
100.00%
Technical jargon density
Target: ≤6% sentences with technical-jargon patterns
analyzedSentences
70
technicalSentenceCount
1
matches
0
"She hated him for coming here looking like that, polished and calm, as if he had not ripped a hole through her life and walked away through it."
100.00%
Useless dialogue additions
Target: ≤5% dialogue tags with trailing filler fragments
totalTags
4
uselessAdditionCount
0
matches
(empty)
100.00%
Dialogue tag variety (said vs. fancy)
Target: ≤10% fancy dialogue tags
totalTags
4
fancyCount
1
fancyTags
0
"he murmured (murmur)"
dialogueSentences
138
tagDensity
0.029
leniency
0.058
rawRatio
0.25
effectiveRatio
0.014
85.8240%