"Wei-Lin's dragon tattoo covers his back per codex, but the passage says chest."
status
"missed"
17
expected
entry
"2006"
detail
"material"
summary
"Fae-Forged Blades are moonsilver per codex, but Wei-Lin says bronze."
status
"missed"
18
expected
entry
"856"
detail
"currentLocation"
summary
"The Veil Market is under Camden per codex, but Wei-Lin says Shoreditch."
status
"matched"
matchedBy
entry
"856"
detail
"currentLocation"
explanation
"The Veil Market is located under Camden during this cycle; not under Shoreditch."
paragraph
6
substring
"The market's moved to an abandoned station under Shoreditch for this lunar cycle."
location
extractedText
"[not found in paragraph 6]"
inBounds
true
expectedText
"abandoned station under Shoreditch"
locationAccurate
false
19
expected
entry
"4420"
detail
"hair"
summary
"Kai has dyed electric-blue hair per codex, but the passage says natural black hair."
status
"matched"
matchedBy
entry
"4420"
detail
"hair"
explanation
"Kai's hair is dyed electric-blue in an undercut, not natural black hair."
paragraph
6
substring
"his natural black hair falling into his face."
location
extractedText
"[not found in paragraph 6]"
inBounds
true
expectedText
"his natural black hair falling into his face"
locationAccurate
false
20
expected
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."
status
"matched"
matchedBy
entry
"6006"
detail
"logo"
explanation
"Blackthorn Security's logo is a thorned branch inside a shield, not a sword inside a circle."
paragraph
6
substring
"Their logo — the sword inside a circle — was flagged on CCTV"
location
extractedText
"[not found in paragraph 6]"
inBounds
true
expectedText
"the sword inside a circle"
locationAccurate
false
21
expected
entry
"4419"
detail
"walkingStick"
summary
"Maggie carries a blackthorn stick per codex, but the passage says oak."
status
"missed"
22
expected
entry
"4419"
detail
"eyeColor"
summary
"Maggie has grey eyes per codex, but the passage says green."
status
"missed"
nearMiss
parsed
entry
"4421"
detail
"eyeColor"
explanation
"Yasmin's eye color is amber; this is correct, so no violation here."
paragraph
5
substring
"her amber eyes narrowing"
reason
"entry mismatch: got \"4421\", expected \"4419\""
23
expected
entry
"6001"
detail
"foundingYear"
summary
"The Wardens were founded in 1215 per codex, but Maggie says 1066."
status
"matched"
matchedBy
entry
"6001"
detail
"foundingYear"
explanation
"The Wardens were founded in 1215, not 1066."
paragraph
7
substring
"The Wardens were founded in 1066"
location
extractedText
"[not found in paragraph 7]"
inBounds
true
expectedText
"The Wardens were founded in 1066"
locationAccurate
false
24
expected
entry
"4417"
detail
"scar"
summary
"Tomás has a scar on his left forearm per codex, but the passage says right forearm."
status
"matched"
matchedBy
entry
"4417"
detail
"scar"
explanation
"Tomás' scar is on his left forearm, not right forearm."
paragraph
8
substring
"His scarred right forearm brushed the zipper as he closed it."
location
extractedText
"[not found in paragraph 8]"
inBounds
true
expectedText
"His scarred right forearm"
locationAccurate
false
25
expected
entry
"4417"
detail
"birthplace"
summary
"Tomás was born in Seville per codex, but the passage implies Madrid accent."
status
"matched"
matchedBy
entry
"4417"
detail
"birthplace"
explanation
"Tomás was born in Seville, Spain, not Madrid."
paragraph
8
substring
"His Madrid accent thickened with agitation."
location
extractedText
"[not found in paragraph 8]"
inBounds
true
expectedText
"His Madrid accent"
locationAccurate
false
26
expected
entry
"4418"
detail
"eyeColor"
summary
"Nyx has violet eyes per codex, but the passage says blue."
status
"missed"
nearMiss
parsed
entry
"4421"
detail
"eyeColor"
explanation
"Yasmin's eye color is amber; this is correct, so no violation here."
paragraph
5
substring
"her amber eyes narrowing"
reason
"entry mismatch: got \"4421\", expected \"4418\""
27
expected
entry
"2001"
detail
"chainMaterial"
summary
"The Heartstone Pendant has a silver chain per codex, but the passage says golden chain."
status
"matched"
matchedBy
entry
"2001"
detail
"chainMaterial"
explanation
"The Heartstone Pendant's chain is silver, not golden."
paragraph
10
substring
"the golden chain tangled in her fingers"
location
extractedText
"[not found in paragraph 10]"
inBounds
true
expectedText
"the golden chain tangled in her fingers"
locationAccurate
false
28
expected
entry
"2001"
detail
"origin"
summary
"The Heartstone Pendant was forged in Dymas per codex, but Isolde says it was forged in Avaros."
status
"matched"
matchedBy
entry
"2001"
detail
"origin"
explanation
"The Heartstone Pendant's origin is Dymas, not Avaros."
paragraph
10
substring
"The Heartstone was forged in Avaros."
location
extractedText
"[not found in paragraph 10]"
inBounds
true
expectedText
"The Heartstone was forged in Avaros"
locationAccurate
false
29
expected
entry
"855"
detail
"ruler"
summary
"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
"Dymas is ruled by Prince Belphegor, but the Crimson Court is a council of seven demon lords, no indication base moved; plus, Lucien incorrectly states the base moved to Irath; there's no mention of this in the codex."
paragraph
4
substring
"the Crimson Court's base of operations has shifted from Dymas to Irath."
reason
"entry mismatch: got \"853\", expected \"855\""
falsePositiveDetails
0
parsed
entry
"858"
detail
"security"
explanation
"Eva's flat is on Brick Lane with three deadbolts on the front door as security; glasses are round, not square, and should be specified as round; this description is inconsistent."
paragraph
2
substring
"Her square glasses kept fogging in the grove's strange microclimate."
status
"false_positive"
location
extractedText
"Her square glasses kept fogging in the grove's strange microclimate."
inBounds
true
expectedText
""
locationAccurate
true
1
parsed
entry
"6002"
detail
"operations"
explanation
"Prince Lilith rules Luxuria, not the Somnian Cult; the Somnian Cult's master is Prince Asmodeus."
paragraph
2
substring
"Their master, Prince Lilith, demands more dreamers for her garden of sleeping souls."
status
"false_positive"
location
extractedText
"[not found in paragraph 2]"
inBounds
true
expectedText
""
locationAccurate
false
2
parsed
entry
"853"
detail
"ruler"
explanation
"Dymas is ruled by Prince Belphegor, but the Crimson Court is a council of seven demon lords, no indication base moved; plus, Lucien incorrectly states the base moved to Irath; there's no mention of this in the codex."
paragraph
4
substring
"the Crimson Court's base of operations has shifted from Dymas to Irath."
status
"false_positive"
location
extractedText
"[not found in paragraph 4]"
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
"4421"
detail
"skinTone"
explanation
"Yasmin's flame serpent tattoo is on her left arm, not right arm."
paragraph
5
substring
"The flame serpent tattoo on her right arm seemed to writhe"
status
"false_positive"
location
extractedText
"[not found in paragraph 5]"
inBounds
true
expectedText
"tattoo on her right arm"
locationAccurate
false
closestExpected
entry
"4421"
detail
"tattoo"
summary
"Yasmin's flame serpent tattoo is on her left arm per codex, but the passage says right arm."
"Prince Belphegor rules Dymas, so this is consistent."
paragraph
11
substring
"Prince Belphegor's agents are kidnapping humans"
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\""
7
parsed
entry
"6002"
detail
"ruler"
explanation
"Prince Belphegor rules Dymas, not Avaros where Mammon rules. The text does not phrase incorrectly here; no violation."
paragraph
11
substring
"Prince Belphegor's agents are kidnapping humans"
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 \"6002\", expected \"855\""
8
parsed
entry
"4412"
detail
"aliases"
explanation
"Aurora's nickname \"Rory\" is correct; no violation."
paragraph
12
substring
"Rory"
status
"false_positive"
location
extractedText
"Rory"
inBounds
true
expectedText
""
locationAccurate
true
9
parsed
entry
"4412"
detail
"scar"
explanation
"Silas has a slight limp in his left leg, not an old injury to the knee; minor difference, but the codex gives a limp from a knee injury, so this may be acceptable."
paragraph
13
substring
"She rubbed his left knee — the old injury from that very operation."
status
"false_positive"
location
extractedText
"[not found in paragraph 13]"
inBounds
true
expectedText
"His scarred right forearm"
locationAccurate
false
closestExpected
entry
"4417"
detail
"scar"
summary
"Tomás has a scar on his left forearm per codex, but the passage says right forearm."
reason
"entry mismatch: got \"4412\", expected \"4417\""
61.5385%
Precision
True positives: 16/26
totalReported
26
truePositives
16
reportedDetails
0
parsed
entry
"4424"
detail
"eyeColor"
explanation
"Isolde is described with pale lavender eyes in the codex, not pale blue eyes."
paragraph
1
substring
"Her pale blue eyes, unblinking"
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
"Her pale blue eyes, unblinking"
inBounds
true
expectedText
"Her pale blue eyes, unblinking"
locationAccurate
true
1
parsed
entry
"4424"
detail
"footprints"
explanation
"Isolde leaves no footprints when she walks; this contradicts the text stating she leaves clear prints."
paragraph
1
substring
"her 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
2
parsed
entry
"858"
detail
"security"
explanation
"Eva's flat is on Brick Lane with three deadbolts on the front door as security; glasses are round, not square, and should be specified as round; this description is inconsistent."
paragraph
2
substring
"Her square glasses kept fogging in the grove's strange microclimate."
status
"false_positive"
location
extractedText
"Her square glasses kept fogging in the grove's strange microclimate."
inBounds
true
expectedText
""
locationAccurate
true
3
parsed
entry
"6002"
detail
"operations"
explanation
"Prince Lilith rules Luxuria, not the Somnian Cult; the Somnian Cult's master is Prince Asmodeus."
paragraph
2
substring
"Their master, Prince Lilith, demands more dreamers for her garden of sleeping souls."
status
"false_positive"
location
extractedText
"[not found in paragraph 2]"
inBounds
true
expectedText
""
locationAccurate
false
4
parsed
entry
"6003"
detail
"master"
explanation
"The Somnian Cult is led by Prince Asmodeus, not Prince Lilith."
paragraph
2
substring
"Their master, Prince Lilith, demands more dreamers for her garden of sleeping souls."
status
"true_positive"
matchedExpected
entry
"6003"
detail
"master"
summary
"The Somnian Cult serves Prince Asmodeus per codex, but Isolde says Prince Lilith."
location
extractedText
"[not found in paragraph 2]"
inBounds
true
expectedText
"Prince Lilith, demands more dreamers"
locationAccurate
false
5
parsed
entry
"4422"
detail
"eyeColor"
explanation
"Father Cormac has pale blue eyes, not dark brown eyes."
paragraph
3
substring
"his dark brown eyes troubled beneath his thinning ginger hair."
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 3]"
inBounds
true
expectedText
"his dark brown eyes troubled"
locationAccurate
false
6
parsed
entry
"4422"
detail
"rosary"
explanation
"Father Cormac's rosary is made of rowan wood beads, not cedar."
paragraph
3
substring
"He gripped his cedar rosary beads tightly."
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 3]"
inBounds
true
expectedText
"his cedar rosary beads"
locationAccurate
false
7
parsed
entry
"7002"
detail
"signedYear"
explanation
"The Covenant of Separation was signed in 1215, not 1066."
paragraph
3
substring
"the Covenant of Separation — 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 3]"
inBounds
true
expectedText
"the old treaty from 1066"
locationAccurate
false
8
parsed
entry
"4415"
detail
"eyeColor"
explanation
"Lucien has heterochromatic eyes (one amber, one black), not both amber eyes."
paragraph
4
substring
"Both his amber eyes were fixed on Isolde"
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 4]"
inBounds
true
expectedText
"Both his amber eyes were fixed"
locationAccurate
false
9
parsed
entry
"4415"
detail
"cane"
explanation
"Lucien's cane is ivory-handled, not described as mahogany."
paragraph
4
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 4]"
inBounds
true
expectedText
"leaning on his mahogany cane"
locationAccurate
false
10
parsed
entry
"853"
detail
"ruler"
explanation
"Dymas is ruled by Prince Belphegor, but the Crimson Court is a council of seven demon lords, no indication base moved; plus, Lucien incorrectly states the base moved to Irath; there's no mention of this in the codex."
paragraph
4
substring
"the Crimson Court's base of operations has shifted from Dymas to Irath."
status
"false_positive"
location
extractedText
"[not found in paragraph 4]"
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
"skinTone"
explanation
"Yasmin's flame serpent tattoo is on her left arm, not right arm."
paragraph
5
substring
"The flame serpent tattoo on her right arm seemed to writhe"
status
"false_positive"
location
extractedText
"[not found in paragraph 5]"
inBounds
true
expectedText
"tattoo on her right arm"
locationAccurate
false
closestExpected
entry
"4421"
detail
"tattoo"
summary
"Yasmin's flame serpent tattoo is on her left arm per codex, but the passage says right arm."
"The Heartstone Pendant's chain is silver, not golden."
paragraph
10
substring
"the golden chain tangled in her fingers"
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
"[not found in paragraph 10]"
inBounds
true
expectedText
"the golden chain tangled in her fingers"
locationAccurate
false
21
parsed
entry
"2001"
detail
"origin"
explanation
"The Heartstone Pendant's origin is Dymas, not Avaros."
paragraph
10
substring
"The Heartstone was forged in Avaros."
status
"true_positive"
matchedExpected
entry
"2001"
detail
"origin"
summary
"The Heartstone Pendant was forged in Dymas per codex, but Isolde says it was forged in Avaros."
location
extractedText
"[not found in paragraph 10]"
inBounds
true
expectedText
"The Heartstone was forged in Avaros"
locationAccurate
false
22
parsed
entry
"853"
detail
"ruler"
explanation
"Prince Belphegor rules Dymas, so this is consistent."
paragraph
11
substring
"Prince Belphegor's agents are kidnapping humans"
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\""
23
parsed
entry
"6002"
detail
"ruler"
explanation
"Prince Belphegor rules Dymas, not Avaros where Mammon rules. The text does not phrase incorrectly here; no violation."
paragraph
11
substring
"Prince Belphegor's agents are kidnapping humans"
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 \"6002\", expected \"855\""
24
parsed
entry
"4412"
detail
"aliases"
explanation
"Aurora's nickname \"Rory\" is correct; no violation."
paragraph
12
substring
"Rory"
status
"false_positive"
location
extractedText
"Rory"
inBounds
true
expectedText
""
locationAccurate
true
25
parsed
entry
"4412"
detail
"scar"
explanation
"Silas has a slight limp in his left leg, not an old injury to the knee; minor difference, but the codex gives a limp from a knee injury, so this may be acceptable."
paragraph
13
substring
"She rubbed his left knee — the old injury from that very operation."
status
"false_positive"
location
extractedText
"[not found in paragraph 13]"
inBounds
true
expectedText
"His scarred right forearm"
locationAccurate
false
closestExpected
entry
"4417"
detail
"scar"
summary
"Tomás has a scar on his left forearm per codex, but the passage says right forearm."