"Avaros is Prince Mammon's realm per codex, but Tomás says Prince Belphegor's agents operate there."
status
"missed"
nearMiss
parsed
entry
"853"
detail
"ruler"
explanation
"The ruler of Luxuria (Lust) is Prince Lilith, but the Crimson Court is based in Dymas (Gluttony), ruled by Prince Belphegor. Lilith is not the ruler of Dymas."
paragraph
11
substring
"Prince Lilith"
reason
"entry mismatch: got \"853\", expected \"855\""
falsePositiveDetails
0
parsed
entry
"4412"
detail
"hair"
explanation
"Aurora's hair is straight shoulder-length black, not waist-length silver."
paragraph
2
substring
"her waist-length silver hair"
status
"false_positive"
location
extractedText
"[not found in paragraph 2]"
inBounds
true
expectedText
"his natural black hair falling into his face"
locationAccurate
false
closestExpected
entry
"4420"
detail
"hair"
summary
"Kai has dyed electric-blue hair per codex, but the passage says natural black hair."
reason
"entry mismatch: got \"4412\", expected \"4420\""
1
parsed
entry
"4414"
detail
"hair"
explanation
"Eva's hair is curly red, but the description is correct. (No violation—this is a stylistic repetition of the codex.)"
paragraph
2
substring
"curly red hair"
status
"false_positive"
location
extractedText
"curly red hair"
inBounds
true
expectedText
"Her square glasses kept fogging"
locationAccurate
false
closestExpected
entry
"4414"
detail
"glasses"
summary
"Eva wears round glasses per codex, but the passage says square glasses."
"The ruler of Luxuria (Lust) is Prince Lilith, but the Crimson Court is based in Dymas (Gluttony), ruled by Prince Belphegor. Lilith is not the ruler of Dymas."
paragraph
11
substring
"Prince Lilith"
status
"false_positive"
location
extractedText
"[not found in paragraph 11]"
inBounds
true
expectedText
"Prince Belphegor's agents are kidnapping humans"
locationAccurate
false
closestExpected
entry
"855"
detail
"ruler"
summary
"Avaros is Prince Mammon's realm per codex, but Tomás says Prince Belphegor's agents operate there."
reason
"entry mismatch: got \"853\", expected \"855\""
3
parsed
entry
"860"
detail
"containerColor"
explanation
"Somnian Dream Dust is stored in small cobalt-blue glass vials, sealed with black wax, not red vials with white wax."
paragraph
16
substring
"little red glass vials, sealed with white wax"
status
"false_positive"
location
extractedText
"[not found in paragraph 16]"
inBounds
true
expectedText
"little red glass vials"
locationAccurate
false
closestExpected
entry
"2005"
detail
"containerColor"
summary
"Dream Dust is stored in cobalt-blue vials per codex, but Isolde says red glass vials."
reason
"entry mismatch: got \"860\", expected \"2005\""
4
parsed
entry
"862"
detail
"ruler"
explanation
"The ruler of Luxuria (Lust) is Prince Lilith, but the Crimson Court is based in Dymas (Gluttony), ruled by Prince Belphegor. Lilith is not the ruler of Dymas."
paragraph
16
substring
"Prince Lilith"
status
"false_positive"
location
extractedText
"[not found in paragraph 16]"
inBounds
true
expectedText
"Prince Belphegor's agents are kidnapping humans"
locationAccurate
false
closestExpected
entry
"855"
detail
"ruler"
summary
"Avaros is Prince Mammon's realm per codex, but Tomás says Prince Belphegor's agents operate there."
reason
"entry mismatch: got \"862\", expected \"855\""
5
parsed
entry
"2001"
detail
"gemstoneColor"
explanation
"The Heartstone Pendant's gemstone is deep crimson, but the description is correct. (No violation—this is a stylistic repetition of the codex.)"
paragraph
25
substring
"crimson stone"
status
"false_positive"
location
extractedText
(null)
inBounds
false
expectedText
"the golden chain tangled in her fingers"
locationAccurate
(null)
closestExpected
entry
"2001"
detail
"chainMaterial"
summary
"The Heartstone Pendant has a silver chain per codex, but the passage says golden chain."
"The winter solstice is the time when the Veil weakens, but the text does not specify which solstice. However, the codex does not specify a solstice date, so this is not a violation. (No violation—this is a narrative choice.)"
paragraph
28
substring
"We end this before the solstice"
status
"false_positive"
location
extractedText
(null)
inBounds
false
expectedText
""
locationAccurate
(null)
70.8333%
Precision
True positives: 17/24
totalReported
24
truePositives
17
reportedDetails
0
parsed
entry
"861"
detail
"parkLocation"
explanation
"The Fae Grove is located in Richmond Park, not Hyde Park."
paragraph
1
substring
"Hyde Park"
status
"true_positive"
matchedExpected
entry
"861"
detail
"parkLocation"
summary
"The Fae Grove is in Richmond Park per codex, but the passage says Hyde Park."
location
extractedText
"Hyde Park"
inBounds
true
expectedText
"The Fae Grove in Hyde Park"
locationAccurate
true
1
parsed
entry
"4424"
detail
"eyeColor"
explanation
"Isolde's eye color is pale lavender, not pale blue."
paragraph
1
substring
"pale blue eyes"
status
"true_positive"
matchedExpected
entry
"4424"
detail
"eyeColor"
summary
"Isolde has pale lavender eyes per codex, but the passage says pale blue eyes."
location
extractedText
"pale blue eyes"
inBounds
true
expectedText
"Her pale blue eyes, unblinking"
locationAccurate
true
2
parsed
entry
"4424"
detail
"footprints"
explanation
"Isolde leaves no footprints when she walks."
paragraph
1
substring
"bare feet leaving clear prints in the soft earth"
status
"true_positive"
matchedExpected
entry
"4424"
detail
"footprints"
summary
"Isolde leaves no footprints per codex, but the passage says she leaves clear prints."
location
extractedText
"[not found in paragraph 1]"
inBounds
true
expectedText
"her bare feet leaving clear prints in the soft earth"
locationAccurate
false
3
parsed
entry
"4412"
detail
"hair"
explanation
"Aurora's hair is straight shoulder-length black, not waist-length silver."
paragraph
2
substring
"her waist-length silver hair"
status
"false_positive"
location
extractedText
"[not found in paragraph 2]"
inBounds
true
expectedText
"his natural black hair falling into his face"
locationAccurate
false
closestExpected
entry
"4420"
detail
"hair"
summary
"Kai has dyed electric-blue hair per codex, but the passage says natural black hair."
reason
"entry mismatch: got \"4412\", expected \"4420\""
4
parsed
entry
"2006"
detail
"material"
explanation
"The Fae-Forged Blade is made of moonsilver, not described as warm."
paragraph
2
substring
"Fae-Forged Blade warm at her hip"
status
"true_positive"
matchedExpected
entry
"2006"
detail
"material"
summary
"Fae-Forged Blades are moonsilver per codex, but Wei-Lin says bronze."
location
extractedText
"Fae-Forged Blade warm at her hip"
inBounds
true
expectedText
"bronze daggers, they say"
locationAccurate
false
5
parsed
entry
"4414"
detail
"hair"
explanation
"Eva's hair is curly red, but the description is correct. (No violation—this is a stylistic repetition of the codex.)"
paragraph
2
substring
"curly red hair"
status
"false_positive"
location
extractedText
"curly red hair"
inBounds
true
expectedText
"Her square glasses kept fogging"
locationAccurate
false
closestExpected
entry
"4414"
detail
"glasses"
summary
"Eva wears round glasses per codex, but the passage says square glasses."
"Eva wears round glasses per codex, but the passage says square glasses."
location
extractedText
"square glasses"
inBounds
true
expectedText
"Her square glasses kept fogging"
locationAccurate
true
7
parsed
entry
"7002"
detail
"signedYear"
explanation
"The Covenant of Separation was signed in 1215, not 1066."
paragraph
10
substring
"the old treaty from 1066"
status
"true_positive"
matchedExpected
entry
"7002"
detail
"signedYear"
summary
"The Covenant of Separation was signed in 1215 per codex, but Cormac says 1066."
location
extractedText
"[not found in paragraph 10]"
inBounds
true
expectedText
"the old treaty from 1066"
locationAccurate
false
8
parsed
entry
"4415"
detail
"eyeColor"
explanation
"Lucien's eyes are heterochromatic (one amber, one black), not both amber."
paragraph
11
substring
"Both his amber eyes"
status
"true_positive"
matchedExpected
entry
"4415"
detail
"eyeColor"
summary
"Lucien has heterochromatic eyes (one amber, one black), but the passage says both amber."
location
extractedText
"[not found in paragraph 11]"
inBounds
true
expectedText
"Both his amber eyes were fixed"
locationAccurate
false
9
parsed
entry
"4415"
detail
"cane"
explanation
"Lucien's cane has an ivory handle, not mahogany."
paragraph
11
substring
"leaning on his mahogany cane"
status
"true_positive"
matchedExpected
entry
"4415"
detail
"cane"
summary
"Lucien carries an ivory-handled cane per codex, but the passage says mahogany."
location
extractedText
"[not found in paragraph 11]"
inBounds
true
expectedText
"leaning on his mahogany cane"
locationAccurate
false
10
parsed
entry
"853"
detail
"ruler"
explanation
"The ruler of Luxuria (Lust) is Prince Lilith, but the Crimson Court is based in Dymas (Gluttony), ruled by Prince Belphegor. Lilith is not the ruler of Dymas."
paragraph
11
substring
"Prince Lilith"
status
"false_positive"
location
extractedText
"[not found in paragraph 11]"
inBounds
true
expectedText
"Prince Belphegor's agents are kidnapping humans"
locationAccurate
false
closestExpected
entry
"855"
detail
"ruler"
summary
"Avaros is Prince Mammon's realm per codex, but Tomás says Prince Belphegor's agents operate there."
reason
"entry mismatch: got \"853\", expected \"855\""
11
parsed
entry
"4421"
detail
"tattoo"
explanation
"Yasmin's flame serpent tattoo is on her left arm, not the right."
paragraph
13
substring
"flame serpent tattoo on her right arm"
status
"true_positive"
matchedExpected
entry
"4421"
detail
"tattoo"
summary
"Yasmin's flame serpent tattoo is on her left arm per codex, but the passage says right arm."
location
extractedText
"[not found in paragraph 13]"
inBounds
true
expectedText
"tattoo on her right arm"
locationAccurate
false
12
parsed
entry
"4422"
detail
"eyeColor"
explanation
"Father Cormac's eyes are pale blue, not dark brown."
paragraph
14
substring
"dark brown eyes"
status
"true_positive"
matchedExpected
entry
"4422"
detail
"eyeColor"
summary
"Father Cormac has pale blue eyes per codex, but the passage says dark brown eyes."
location
extractedText
"[not found in paragraph 14]"
inBounds
true
expectedText
"his dark brown eyes troubled"
locationAccurate
false
13
parsed
entry
"4422"
detail
"rosary"
explanation
"Father Cormac's rosary is made of rowan wood, not cedar."
paragraph
14
substring
"cedar rosary beads"
status
"true_positive"
matchedExpected
entry
"4422"
detail
"rosary"
summary
"Cormac carries a rowan wood rosary per codex, but the passage says cedar."
location
extractedText
"[not found in paragraph 14]"
inBounds
true
expectedText
"his cedar rosary beads"
locationAccurate
false
14
parsed
entry
"4423"
detail
"tattoo"
explanation
"Wei-Lin's dragon tattoo covers his entire back, not his chest."
paragraph
15
substring
"dragon tattoo on his chest"
status
"true_positive"
matchedExpected
entry
"4423"
detail
"tattoo"
summary
"Wei-Lin's dragon tattoo covers his back per codex, but the passage says chest."
location
extractedText
"[not found in paragraph 15]"
inBounds
true
expectedText
"the dragon tattoo on his chest"
locationAccurate
false
15
parsed
entry
"860"
detail
"containerColor"
explanation
"Somnian Dream Dust is stored in small cobalt-blue glass vials, sealed with black wax, not red vials with white wax."
paragraph
16
substring
"little red glass vials, sealed with white wax"
status
"false_positive"
location
extractedText
"[not found in paragraph 16]"
inBounds
true
expectedText
"little red glass vials"
locationAccurate
false
closestExpected
entry
"2005"
detail
"containerColor"
summary
"Dream Dust is stored in cobalt-blue vials per codex, but Isolde says red glass vials."
reason
"entry mismatch: got \"860\", expected \"2005\""
16
parsed
entry
"862"
detail
"ruler"
explanation
"The ruler of Luxuria (Lust) is Prince Lilith, but the Crimson Court is based in Dymas (Gluttony), ruled by Prince Belphegor. Lilith is not the ruler of Dymas."
paragraph
16
substring
"Prince Lilith"
status
"false_positive"
location
extractedText
"[not found in paragraph 16]"
inBounds
true
expectedText
"Prince Belphegor's agents are kidnapping humans"
locationAccurate
false
closestExpected
entry
"855"
detail
"ruler"
summary
"Avaros is Prince Mammon's realm per codex, but Tomás says Prince Belphegor's agents operate there."
reason
"entry mismatch: got \"862\", expected \"855\""
17
parsed
entry
"4420"
detail
"hair"
explanation
"Kai's hair is dyed electric-blue in an undercut, not natural black."
paragraph
17
substring
"natural black hair"
status
"true_positive"
matchedExpected
entry
"4420"
detail
"hair"
summary
"Kai has dyed electric-blue hair per codex, but the passage says natural black hair."
location
extractedText
"[not found in paragraph 17]"
inBounds
true
expectedText
"his natural black hair falling into his face"
locationAccurate
false
18
parsed
entry
"6006"
detail
"logo"
explanation
"Blackthorn Security's logo is a thorned branch inside a shield, not a sword inside a circle."
paragraph
18
substring
"the sword inside a circle"
status
"true_positive"
matchedExpected
entry
"6006"
detail
"logo"
summary
"Blackthorn Security's logo is a thorned branch inside a shield per codex, but Kai says a sword inside a circle."
location
extractedText
"[not found in paragraph 18]"
inBounds
true
expectedText
"the sword inside a circle"
locationAccurate
false
19
parsed
entry
"4417"
detail
"scar"
explanation
"Tomás's scar is on his left forearm, not the right."
paragraph
20
substring
"scarred right forearm"
status
"true_positive"
matchedExpected
entry
"4417"
detail
"scar"
summary
"Tomás has a scar on his left forearm per codex, but the passage says right forearm."
location
extractedText
(null)
inBounds
false
expectedText
"His scarred right forearm"
locationAccurate
(null)
20
parsed
entry
"4417"
detail
"birthplace"
explanation
"Tomás was born in Seville, Spain, not Madrid."
paragraph
20
substring
"Madrid accent"
status
"true_positive"
matchedExpected
entry
"4417"
detail
"birthplace"
summary
"Tomás was born in Seville per codex, but the passage implies Madrid accent."
location
extractedText
(null)
inBounds
false
expectedText
"His Madrid accent"
locationAccurate
(null)
21
parsed
entry
"2001"
detail
"gemstoneColor"
explanation
"The Heartstone Pendant's gemstone is deep crimson, but the description is correct. (No violation—this is a stylistic repetition of the codex.)"
paragraph
25
substring
"crimson stone"
status
"false_positive"
location
extractedText
(null)
inBounds
false
expectedText
"the golden chain tangled in her fingers"
locationAccurate
(null)
closestExpected
entry
"2001"
detail
"chainMaterial"
summary
"The Heartstone Pendant has a silver chain per codex, but the passage says golden chain."
"The Heartstone Pendant's chain is silver, not golden."
paragraph
25
substring
"golden chain"
status
"true_positive"
matchedExpected
entry
"2001"
detail
"chainMaterial"
summary
"The Heartstone Pendant has a silver chain per codex, but the passage says golden chain."
location
extractedText
(null)
inBounds
false
expectedText
"the golden chain tangled in her fingers"
locationAccurate
(null)
23
parsed
entry
"4412"
detail
"age"
explanation
"The winter solstice is the time when the Veil weakens, but the text does not specify which solstice. However, the codex does not specify a solstice date, so this is not a violation. (No violation—this is a narrative choice.)"