| 0.0000% | Accuracy (recall) | Matched: 11/30, FP: 41 | | parsedCount | 52 | | matched | 11 | | total | 30 | | falsePositives | 41 | | expectedDetails | | 0 | | expected | | entry | "861" | | detail | "parkLocation" | | summary | "The Fae Grove is in Richmond Park per codex, but the passage says Hyde Park." |
| | status | "missed" | | nearMiss | | parsed | | entry | "4423" | | detail | "location" | | explanation | "The codex states The Veil Market is currently located at an abandoned Tube station beneath Camden, not Shoreditch." | | paragraph | 1 | | substring | "The market's moved to an abandoned station under Shoreditch" |
| | reason | "entry mismatch: got \"4423\", expected \"861\"" |
|
| | 1 | | expected | | entry | "861" | | detail | "standingStones" | | summary | "The grove has oak standing stones per codex, but the passage says elm." |
| | status | "missed" | | nearMiss | | parsed | | entry | "4424" | | detail | "standingStones" | | explanation | "The codex states standing stones mark the boundary, but the text does not contradict this." | | paragraph | 1 | | substring | "The ancient elm standing stones hummed" |
| | reason | "entry mismatch: got \"4424\", expected \"861\"" |
|
| | 2 | | expected | | entry | "4424" | | detail | "eyeColor" | | summary | "Isolde has pale lavender eyes per codex, but the passage says pale blue eyes." |
| | status | "matched" | | matchedBy | | entry | "4424" | | detail | "eyeColor" | | explanation | "The codex states Isolde's eye color is pale lavender, not pale blue." | | paragraph | 1 | | substring | "her pale blue eyes, unblinking" |
| | location | | extractedText | "her pale blue eyes, unblinking" | | inBounds | true | | expectedText | "Her pale blue eyes, unblinking" | | locationAccurate | true |
|
| | 3 | | expected | | entry | "4424" | | detail | "footprints" | | summary | "Isolde leaves no footprints per codex, but the passage says she leaves clear prints." |
| | status | "matched" | | matchedBy | | entry | "4424" | | detail | "footprints" | | explanation | "The codex states Isolde leaves no footprints, but the text describes clear prints." | | paragraph | 1 | | substring | "her bare feet leaving clear prints" |
| | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "her bare feet leaving clear prints in the soft earth" | | locationAccurate | false |
|
| | 4 | | expected | | entry | "2006" | | detail | "temperature" | | summary | "The Fae-Forged Blade is always cold per codex, but the passage says warm." |
| | status | "missed" | | nearMiss | | parsed | | entry | "7003" | | detail | "" | | explanation | "The codex states peak activity is during the winter solstice, but the text does not contradict this." | | paragraph | 1 | | substring | "peakActivity" |
| | reason | "entry mismatch: got \"7003\", expected \"2006\"" |
|
| | 5 | | expected | | entry | "4414" | | detail | "glasses" | | summary | "Eva wears round glasses per codex, but the passage says square glasses." |
| | status | "matched" | | matchedBy | | entry | "4414" | | detail | "glasses" | | explanation | "The codex states Eva wears \"round glasses,\" not square." | | paragraph | 1 | | substring | "her square glasses kept fogging" |
| | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "Her square glasses kept fogging" | | locationAccurate | false |
|
| | 6 | | expected | | entry | "2005" | | detail | "containerColor" | | summary | "Dream Dust is stored in cobalt-blue vials per codex, but Isolde says red glass vials." |
| | status | "missed" | | nearMiss | | parsed | | entry | "7003" | | detail | "" | | explanation | "The codex states peak activity is during the winter solstice, but the text does not contradict this." | | paragraph | 1 | | substring | "peakActivity" |
| | reason | "entry mismatch: got \"7003\", expected \"2005\"" |
|
| | 7 | | expected | | entry | "2005" | | detail | "sealMaterial" | | summary | "Dream Dust vials are sealed with black wax per codex, but Isolde says white wax." |
| | status | "missed" | | nearMiss | | parsed | | entry | "7003" | | detail | "" | | explanation | "The codex states peak activity is during the winter solstice, but the text does not contradict this." | | paragraph | 1 | | substring | "peakActivity" |
| | reason | "entry mismatch: got \"7003\", expected \"2005\"" |
|
| | 8 | | expected | | entry | "6003" | | detail | "master" | | summary | "The Somnian Cult serves Prince Asmodeus per codex, but Isolde says Prince Lilith." |
| | status | "missed" | | nearMiss | | parsed | | entry | "7003" | | detail | "" | | explanation | "The codex states peak activity is during the winter solstice, but the text does not contradict this." | | paragraph | 1 | | substring | "peakActivity" |
| | reason | "entry mismatch: got \"7003\", expected \"6003\"" |
|
| | 9 | | expected | | entry | "4422" | | detail | "eyeColor" | | summary | "Father Cormac has pale blue eyes per codex, but the passage says dark brown eyes." |
| | status | "missed" | | nearMiss | | parsed | | entry | "4422" | | detail | "hair" | | explanation | "The codex states Father Cormac has \"thinning ginger\" hair, but the text describes it as \"dark brown.\"" | | paragraph | 1 | | substring | "Cormac crossed himself, his dark brown eyes troubled beneath his thinning ginger hair" |
| | reason | "detail mismatch: got \"hair\", expected \"eyeColor\"" |
|
| | 10 | | expected | | entry | "4422" | | detail | "rosary" | | summary | "Cormac carries a rowan wood rosary per codex, but the passage says cedar." |
| | status | "matched" | | matchedBy | | entry | "4422" | | detail | "rosaryMaterial" | | explanation | "The codex states the rosary is made of \"rowan wood,\" not cedar." | | paragraph | 1 | | substring | "Cormac crossed himself, his cedar rosary beads tightly" |
| | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "his cedar rosary beads" | | locationAccurate | false |
|
| | 11 | | expected | | entry | "7002" | | detail | "signedYear" | | summary | "The Covenant of Separation was signed in 1215 per codex, but Cormac says 1066." |
| | status | "matched" | | matchedBy | | entry | "7002" | | detail | "signedYear" | | explanation | "The codex states the Covenant was signed in **1215**, not 1066." | | paragraph | 1 | | substring | "The Covenant of Separation — the old treaty from 1066" |
| | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "the old treaty from 1066" | | locationAccurate | false |
|
| | 12 | | expected | | entry | "6004" | | detail | "headquarters" | | summary | "The Parish Guard HQ is St. Brigid's in Islington per codex, but Cormac says Southwark." |
| | status | "missed" | | nearMiss | | parsed | | entry | "7003" | | detail | "" | | explanation | "The codex states peak activity is during the winter solstice, but the text does not contradict this." | | paragraph | 1 | | substring | "peakActivity" |
| | reason | "entry mismatch: got \"7003\", expected \"6004\"" |
|
| | 13 | | expected | | entry | "4415" | | detail | "cane" | | summary | "Lucien carries an ivory-handled cane per codex, but the passage says mahogany." |
| | status | "matched" | | matchedBy | | entry | "4415" | | detail | "caneMaterial" | | explanation | "The codex states his cane is \"ivory-handled,\" not mahogany." | | paragraph | 1 | | substring | "leaning on his mahogany cane" |
| | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "leaning on his mahogany cane" | | locationAccurate | false |
|
| | 14 | | expected | | entry | "4415" | | detail | "eyeColor" | | summary | "Lucien has heterochromatic eyes (one amber, one black), but the passage says both amber." |
| | status | "missed" | | nearMiss | | parsed | | entry | "4415" | | detail | "hair" | | explanation | "The codex states Lucien's hair is \"slicked-back platinum blond,\" not described as having amber eyes in isolation." | | paragraph | 1 | | substring | "both his amber eyes were fixed on Isolde with a calculating expression" |
| | reason | "detail mismatch: got \"hair\", expected \"eyeColor\"" |
|
| | 15 | | expected | | entry | "4421" | | detail | "tattoo" | | summary | "Yasmin's flame serpent tattoo is on her left arm per codex, but the passage says right arm." |
| | status | "matched" | | matchedBy | | entry | "4421" | | detail | "tattooLocation" | | explanation | "The codex states Yasmin has a \"flame serpent tattoo coiling up her left arm.\"" | | paragraph | 1 | | substring | "The flame serpent tattoo on her right arm" |
| | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "tattoo on her right arm" | | locationAccurate | false |
|
| | 16 | | expected | | entry | "4423" | | detail | "tattoo" | | summary | "Wei-Lin's dragon tattoo covers his back per codex, but the passage says chest." |
| | status | "matched" | | matchedBy | | entry | "4423" | | detail | "tattooLocation" | | explanation | "The codex states the dragon tattoo covers his entire back, not his chest." | | paragraph | 1 | | substring | "The edge of the dragon tattoo on his chest" |
| | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "the dragon tattoo on his chest" | | locationAccurate | false |
|
| | 17 | | expected | | entry | "2006" | | detail | "material" | | summary | "Fae-Forged Blades are moonsilver per codex, but Wei-Lin says bronze." |
| | status | "missed" | | nearMiss | | parsed | | entry | "7003" | | detail | "" | | explanation | "The codex states peak activity is during the winter solstice, but the text does not contradict this." | | paragraph | 1 | | substring | "peakActivity" |
| | reason | "entry mismatch: got \"7003\", expected \"2006\"" |
|
| | 18 | | expected | | entry | "856" | | detail | "currentLocation" | | summary | "The Veil Market is under Camden per codex, but Wei-Lin says Shoreditch." |
| | status | "missed" | | nearMiss | | parsed | | entry | "4423" | | detail | "location" | | explanation | "The codex states The Veil Market is currently located at an abandoned Tube station beneath Camden, not Shoreditch." | | paragraph | 1 | | substring | "The market's moved to an abandoned station under Shoreditch" |
| | reason | "entry mismatch: got \"4423\", expected \"856\"" |
|
| | 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 | "The codex states Kai's hair is \"dyed electric-blue in an undercut.\"" | | paragraph | 1 | | substring | "his natural black hair falling into his face" |
| | location | | extractedText | "[not found in paragraph 1]" | | 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 | "missed" | | nearMiss | | parsed | | entry | "7003" | | detail | "" | | explanation | "The codex states peak activity is during the winter solstice, but the text does not contradict this." | | paragraph | 1 | | substring | "peakActivity" |
| | reason | "entry mismatch: got \"7003\", expected \"6006\"" |
|
| | 21 | | expected | | entry | "4419" | | detail | "walkingStick" | | summary | "Maggie carries a blackthorn stick per codex, but the passage says oak." |
| | status | "missed" | | nearMiss | | parsed | | entry | "7003" | | detail | "" | | explanation | "The codex states peak activity is during the winter solstice, but the text does not contradict this." | | paragraph | 1 | | substring | "peakActivity" |
| | reason | "entry mismatch: got \"7003\", expected \"4419\"" |
|
| | 22 | | expected | | entry | "4419" | | detail | "eyeColor" | | summary | "Maggie has grey eyes per codex, but the passage says green." |
| | status | "matched" | | matchedBy | | entry | "4419" | | detail | "eyeColor" | | explanation | "The codex states Maggie's eye color is \"sharp grey,\" not \"green eyes.\"" | | paragraph | 1 | | substring | "Maggie rapped her oak walking stick" |
| | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "Her keen green eyes" | | locationAccurate | false |
|
| | 23 | | expected | | entry | "6001" | | detail | "foundingYear" | | summary | "The Wardens were founded in 1215 per codex, but Maggie says 1066." |
| | status | "missed" | | nearMiss | | parsed | | entry | "7003" | | detail | "" | | explanation | "The codex states peak activity is during the winter solstice, but the text does not contradict this." | | paragraph | 1 | | substring | "peakActivity" |
| | reason | "entry mismatch: got \"7003\", expected \"6001\"" |
|
| | 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 | "missed" | | nearMiss | | parsed | | entry | "7003" | | detail | "" | | explanation | "The codex states peak activity is during the winter solstice, but the text does not contradict this." | | paragraph | 1 | | substring | "peakActivity" |
| | reason | "entry mismatch: got \"7003\", expected \"4417\"" |
|
| | 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 | "The codex states Tomás was born in Seville, Spain, but the text does not mention Spain." | | paragraph | 1 | | substring | "Tomás, who had been quietly checking medical supplies in his bag" |
| | location | | extractedText | "[not found in paragraph 1]" | | 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 | "4418" | | detail | "age" | | explanation | "The codex states Nyx is \"ageless,\" but the text does not contradict this." | | paragraph | 1 | | substring | "Nyx materialized" |
| | reason | "detail mismatch: got \"age\", expected \"eyeColor\"" |
|
| | 27 | | expected | | entry | "2001" | | detail | "chainMaterial" | | summary | "The Heartstone Pendant has a silver chain per codex, but the passage says golden chain." |
| | status | "missed" | | nearMiss | | parsed | | entry | "7003" | | detail | "" | | explanation | "The codex states peak activity is during the winter solstice, but the text does not contradict this." | | paragraph | 1 | | substring | "peakActivity" |
| | reason | "entry mismatch: got \"7003\", expected \"2001\"" |
|
| | 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 | "missed" | | nearMiss | | parsed | | entry | "7003" | | detail | "" | | explanation | "The codex states peak activity is during the winter solstice, but the text does not contradict this." | | paragraph | 1 | | substring | "peakActivity" |
| | reason | "entry mismatch: got \"7003\", expected \"2001\"" |
|
| | 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 | "7003" | | detail | "" | | explanation | "The codex states peak activity is during the winter solstice, but the text does not contradict this." | | paragraph | 1 | | substring | "peakActivity" |
| | reason | "entry mismatch: got \"7003\", expected \"855\"" |
|
|
| | falsePositiveDetails | | 0 | | parsed | | entry | "4424" | | detail | "hair" | | explanation | "The codex says her hair is silver, reaching her waist, but the text describes it as waist-length without specifying color." | | paragraph | 1 | | substring | "her waist-length silver hair stirring in a breeze" |
| | status | "false_positive" | | location | | extractedText | "her waist-length silver hair stirring in a breeze" | | inBounds | true | | expectedText | "Her pale blue eyes, unblinking" | | locationAccurate | false |
| | closestExpected | | entry | "4424" | | detail | "eyeColor" | | summary | "Isolde has pale lavender eyes per codex, but the passage says pale blue eyes." |
| | reason | "detail mismatch: got \"hair\", expected \"eyeColor\"" |
| | 1 | | parsed | | entry | "4412" | | detail | "alias" | | explanation | "The codex lists \"Rory\" as a primary alias for Aurora, not \"Aurora\" alone." | | paragraph | 1 | | substring | "Aurora arrived first, the Fae-Forged Blade warm at her hip" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "" | | locationAccurate | false |
|
| | 2 | | parsed | | entry | "4412" | | detail | "description" | | explanation | "The codex states the Fae-Forged Blade was given to Aurora by Isolde, not that it was strapped to her hip that morning." | | paragraph | 1 | | substring | "its familiar warmth a comfort against the chill" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "" | | locationAccurate | false |
|
| | 3 | | parsed | | entry | "4415" | | detail | "hair" | | explanation | "The codex states Lucien's hair is \"slicked-back platinum blond,\" not described as having amber eyes in isolation." | | paragraph | 1 | | substring | "both his amber eyes were fixed on Isolde with a calculating expression" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "leaning on his mahogany cane" | | locationAccurate | false |
| | closestExpected | | entry | "4415" | | detail | "cane" | | summary | "Lucien carries an ivory-handled cane per codex, but the passage says mahogany." |
| | reason | "detail mismatch: got \"hair\", expected \"cane\"" |
| | 4 | | parsed | | entry | "4415" | | detail | "alias" | | explanation | "The codex lists \"Lucien\" as an alias, but the text uses \"Lucien\" without a distinct descriptor that contradicts the codex's \"The Frenchman\" role." | | paragraph | 1 | | substring | "Lucien drawled" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "leaning on his mahogany cane" | | locationAccurate | false |
| | closestExpected | | entry | "4415" | | detail | "cane" | | summary | "Lucien carries an ivory-handled cane per codex, but the passage says mahogany." |
| | reason | "detail mismatch: got \"alias\", expected \"cane\"" |
| | 5 | | parsed | | entry | "4415" | | detail | "father" | | explanation | "The codex does not explicitly mention Lucien's father's name or role; the text incorrectly implies a familial relationship beyond the codex's \"Half-Demon\" lineage." | | paragraph | 1 | | substring | "—he says his father—" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "leaning on his mahogany cane" | | locationAccurate | false |
| | closestExpected | | entry | "4415" | | detail | "cane" | | summary | "Lucien carries an ivory-handled cane per codex, but the passage says mahogany." |
| | reason | "detail mismatch: got \"father\", expected \"cane\"" |
| | 6 | | parsed | | entry | "4416" | | detail | "watchLocation" | | explanation | "The codex states Detective Quinn wears her watch on her left wrist, but the text does not contradict this." | | paragraph | 1 | | substring | "Kai, I need everything you can find on that Blackfriars rift" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "" | | locationAccurate | false |
|
| | 7 | | parsed | | entry | "4416" | | detail | "description" | | explanation | "The codex does not mention Kai having a dragon tattoo or any physical traits associated with him." | | paragraph | 1 | | substring | "The edge of the dragon tattoo on his chest was visible" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "" | | locationAccurate | false |
|
| | 8 | | parsed | | entry | "4423" | | detail | "age" | | explanation | "The codex states Zhou Wei-Lin is 48 years old, but the text does not contradict this." | | paragraph | 1 | | substring | "Wei-Lin, leaning against one of the standing stones" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "the dragon tattoo on his chest" | | locationAccurate | false |
| | closestExpected | | entry | "4423" | | detail | "tattoo" | | summary | "Wei-Lin's dragon tattoo covers his back per codex, but the passage says chest." |
| | reason | "detail mismatch: got \"age\", expected \"tattoo\"" |
| | 9 | | parsed | | entry | "4423" | | detail | "missingFinger" | | explanation | "The text does not mention missing fingers, only the tattoo." | | paragraph | 1 | | substring | "The edge of the dragon tattoo" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "the dragon tattoo on his chest" | | locationAccurate | false |
| | closestExpected | | entry | "4423" | | detail | "tattoo" | | summary | "Wei-Lin's dragon tattoo covers his back per codex, but the passage says chest." |
| | reason | "detail mismatch: got \"missingFinger\", expected \"tattoo\"" |
| | 10 | | parsed | | entry | "4422" | | detail | "hair" | | explanation | "The codex states Father Cormac has \"thinning ginger\" hair, but the text describes it as \"dark brown.\"" | | paragraph | 1 | | substring | "Cormac crossed himself, his dark brown eyes troubled beneath his thinning ginger hair" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "his dark brown eyes troubled" | | locationAccurate | false |
| | closestExpected | | entry | "4422" | | detail | "eyeColor" | | summary | "Father Cormac has pale blue eyes per codex, but the passage says dark brown eyes." |
| | reason | "detail mismatch: got \"hair\", expected \"eyeColor\"" |
| | 11 | | parsed | | entry | "4418" | | detail | "age" | | explanation | "The codex states Nyx is \"ageless,\" but the text does not contradict this." | | paragraph | 1 | | substring | "Nyx materialized" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "their glowing blue eyes" | | locationAccurate | false |
| | closestExpected | | entry | "4418" | | detail | "eyeColor" | | summary | "Nyx has violet eyes per codex, but the passage says blue." |
| | reason | "detail mismatch: got \"age\", expected \"eyeColor\"" |
| | 12 | | parsed | | entry | "4418" | | detail | "voice" | | explanation | "The codex states Nyx's voice is a \"whisper carried on the wind,\" not explicitly \"wind through dead leaves.\"" | | paragraph | 1 | | substring | "their voice like wind through dead leaves" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "their glowing blue eyes" | | locationAccurate | false |
| | closestExpected | | entry | "4418" | | detail | "eyeColor" | | summary | "Nyx has violet eyes per codex, but the passage says blue." |
| | reason | "detail mismatch: got \"voice\", expected \"eyeColor\"" |
| | 13 | | parsed | | entry | "4424" | | detail | "age" | | explanation | "The codex states Isolde is **300 years old**, and the text confirms this." | | paragraph | 1 | | substring | "Her pale blue eyes, unblinking" |
| | status | "false_positive" | | location | | extractedText | "Her pale blue eyes, unblinking" | | inBounds | true | | expectedText | "Her pale blue eyes, unblinking" | | locationAccurate | true |
| | closestExpected | | entry | "4424" | | detail | "eyeColor" | | summary | "Isolde has pale lavender eyes per codex, but the passage says pale blue eyes." |
| | reason | "detail mismatch: got \"age\", expected \"eyeColor\"" |
| | 14 | | parsed | | entry | "4424" | | detail | "speech" | | explanation | "The codex states Isolde \"speaks in riddles,\" but the text describes her intoning a statement rather than speaking in riddles." | | paragraph | 1 | | substring | "Isolde intoned" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "Her pale blue eyes, unblinking" | | locationAccurate | false |
| | closestExpected | | entry | "4424" | | detail | "eyeColor" | | summary | "Isolde has pale lavender eyes per codex, but the passage says pale blue eyes." |
| | reason | "detail mismatch: got \"speech\", expected \"eyeColor\"" |
| | 15 | | parsed | | entry | "4424" | | detail | "description" | | explanation | "The codex states she is a \"Half-Fae seer exiled from the Fae Courts for sharing visions with mortals,\" but the text does not contradict this." | | paragraph | 1 | | substring | "Her pale blue eyes, unblinking" |
| | status | "false_positive" | | location | | extractedText | "Her pale blue eyes, unblinking" | | inBounds | true | | expectedText | "Her pale blue eyes, unblinking" | | locationAccurate | true |
| | closestExpected | | entry | "4424" | | detail | "eyeColor" | | summary | "Isolde has pale lavender eyes per codex, but the passage says pale blue eyes." |
| | reason | "detail mismatch: got \"description\", expected \"eyeColor\"" |
| | 16 | | parsed | | entry | "4420" | | detail | "headphones" | | explanation | "The codex states Kai wears \"noise-cancelling headphones,\" but the text does not contradict this." | | paragraph | 1 | | substring | "Kai, I need everything you can find" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | 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 | "detail mismatch: got \"headphones\", expected \"hair\"" |
| | 17 | | parsed | | entry | "4420" | | detail | "tattooLocation" | | explanation | "The codex states Kai's tattoo is on the inside of his right wrist, which matches the text." | | paragraph | 1 | | substring | "small circuit board tattoo on the inside of his right wrist" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | 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 | "detail mismatch: got \"tattooLocation\", expected \"hair\"" |
| | 18 | | parsed | | entry | "4418" | | detail | "form" | | explanation | "The codex states Nyx is a \"humanoid silhouette of living shadow,\" and they can shift between solid and incorporeal forms." | | paragraph | 1 | | substring | "Nyx materialized from the shadow of a standing stone" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "their glowing blue eyes" | | locationAccurate | false |
| | closestExpected | | entry | "4418" | | detail | "eyeColor" | | summary | "Nyx has violet eyes per codex, but the passage says blue." |
| | reason | "detail mismatch: got \"form\", expected \"eyeColor\"" |
| | 19 | | parsed | | entry | "4418" | | detail | "height" | | explanation | "The codex states Nyx is approximately 6'2\" in solid form, which is consistent." | | paragraph | 1 | | substring | "Nyx materialized" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "their glowing blue eyes" | | locationAccurate | false |
| | closestExpected | | entry | "4418" | | detail | "eyeColor" | | summary | "Nyx has violet eyes per codex, but the passage says blue." |
| | reason | "detail mismatch: got \"height\", expected \"eyeColor\"" |
| | 20 | | parsed | | entry | "4423" | | detail | "location" | | explanation | "The codex states The Veil Market is currently located at an abandoned Tube station beneath Camden, not Shoreditch." | | paragraph | 1 | | substring | "The market's moved to an abandoned station under Shoreditch" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "the dragon tattoo on his chest" | | locationAccurate | false |
| | closestExpected | | entry | "4423" | | detail | "tattoo" | | summary | "Wei-Lin's dragon tattoo covers his back per codex, but the passage says chest." |
| | reason | "detail mismatch: got \"location\", expected \"tattoo\"" |
| | 21 | | parsed | | entry | "4424" | | detail | "location" | | explanation | "The codex states The Fae Grove is in Richmond Park, not Hyde Park." | | paragraph | 1 | | substring | "The Fae Grove in Hyde Park" |
| | status | "false_positive" | | location | | extractedText | "The Fae Grove in Hyde Park" | | inBounds | true | | expectedText | "Her pale blue eyes, unblinking" | | locationAccurate | false |
| | closestExpected | | entry | "4424" | | detail | "eyeColor" | | summary | "Isolde has pale lavender eyes per codex, but the passage says pale blue eyes." |
| | reason | "detail mismatch: got \"location\", expected \"eyeColor\"" |
| | 22 | | parsed | | entry | "4424" | | detail | "standingStones" | | explanation | "The codex states standing stones mark the boundary, but the text does not contradict this." | | paragraph | 1 | | substring | "The ancient elm standing stones hummed" |
| | status | "false_positive" | | location | | extractedText | "The ancient elm standing stones hummed" | | inBounds | true | | expectedText | "Her pale blue eyes, unblinking" | | locationAccurate | false |
| | closestExpected | | entry | "4424" | | detail | "eyeColor" | | summary | "Isolde has pale lavender eyes per codex, but the passage says pale blue eyes." |
| | reason | "detail mismatch: got \"standingStones\", expected \"eyeColor\"" |
| | 23 | | parsed | | entry | "4412" | | detail | "description" | | explanation | "The codex states the Heartstone was given to Aurora by an unknown benefactor and is from Dymas, not Avaros." | | paragraph | 1 | | substring | "The Heartstone was forged in Avaros" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "" | | locationAccurate | false |
|
| | 24 | | parsed | | entry | "4424" | | detail | "compulsion" | | explanation | "The codex states Isolde cannot lie but can mislead, which is consistent." | | paragraph | 1 | | substring | "The Covenant of Separation — the old treaty from 1066" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "Her pale blue eyes, unblinking" | | locationAccurate | false |
| | closestExpected | | entry | "4424" | | detail | "eyeColor" | | summary | "Isolde has pale lavender eyes per codex, but the passage says pale blue eyes." |
| | reason | "detail mismatch: got \"compulsion\", expected \"eyeColor\"" |
| | 25 | | parsed | | entry | "7002" | | detail | "signatories" | | explanation | "The codex states signatories include rulers of Hel, Fae Courts, and human sorcerers, but the text does not contradict this." | | paragraph | 1 | | substring | "The Covenant of Separation — the old treaty from 1215" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "the old treaty from 1066" | | locationAccurate | false |
| | closestExpected | | entry | "7002" | | detail | "signedYear" | | summary | "The Covenant of Separation was signed in 1215 per codex, but Cormac says 1066." |
| | reason | "detail mismatch: got \"signatories\", expected \"signedYear\"" |
| | 26 | | parsed | | entry | "4412" | | detail | "description" | | explanation | "The codex states the Heartstone was given to Aurora by an unknown benefactor, but the text implies it is personal to her." | | paragraph | 1 | | substring | "Rory felt the Heartstone pulse in her pocket" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "" | | locationAccurate | false |
|
| | 27 | | parsed | | entry | "4424" | | detail | "appearance" | | explanation | "The codex states the Veil is a \"faint shimmering distortion,\" not explicitly described as gossamer." | | paragraph | 1 | | substring | "The Veil shimmered — thin as gossamer" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "Her pale blue eyes, unblinking" | | locationAccurate | false |
| | closestExpected | | entry | "4424" | | detail | "eyeColor" | | summary | "Isolde has pale lavender eyes per codex, but the passage says pale blue eyes." |
| | reason | "detail mismatch: got \"appearance\", expected \"eyeColor\"" |
| | 28 | | parsed | | entry | "7003" | | detail | "" | | explanation | "The codex states peak activity is during the winter solstice, but the text does not contradict this." | | paragraph | 1 | | substring | "peakActivity" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "The Fae Grove in Hyde Park" | | locationAccurate | false |
| | closestExpected | | entry | "861" | | detail | "parkLocation" | | summary | "The Fae Grove is in Richmond Park per codex, but the passage says Hyde Park." |
| | reason | "entry mismatch: got \"7003\", expected \"861\"" |
| | 29 | | parsed | | entry | "4424" | | detail | "ruler" | | explanation | "The codex states the Crimson Court's ruler is Prince Lilith, but the text describes Prince Lilith as the master of the Somnian Cult." | | paragraph | 1 | | substring | "The Crimson Court stirs" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "Her pale blue eyes, unblinking" | | locationAccurate | false |
| | closestExpected | | entry | "4424" | | detail | "eyeColor" | | summary | "Isolde has pale lavender eyes per codex, but the passage says pale blue eyes." |
| | reason | "detail mismatch: got \"ruler\", expected \"eyeColor\"" |
| | 30 | | parsed | | entry | "4423" | | detail | "location" | | explanation | "The codex states Zhou Wei-Lin runs \"Zhou's Golden Dragon\" in Chinatown, which is consistent." | | paragraph | 1 | | substring | "Chinatown" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "the dragon tattoo on his chest" | | locationAccurate | false |
| | closestExpected | | entry | "4423" | | detail | "tattoo" | | summary | "Wei-Lin's dragon tattoo covers his back per codex, but the passage says chest." |
| | reason | "detail mismatch: got \"location\", expected \"tattoo\"" |
| | 31 | | parsed | | entry | "4420" | | detail | "livingLocation" | | explanation | "The codex states Kai lives in a converted shipping container in Hackney Wick, not contradicted." | | paragraph | 1 | | substring | "Kai, I need everything you can find on that Blackfriars rift" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | 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 | "detail mismatch: got \"livingLocation\", expected \"hair\"" |
| | 32 | | parsed | | entry | "4423" | | detail | "missingFinger" | | explanation | "The codex states Zhou Wei-Lin has a missing finger, but the text does not mention this." | | paragraph | 1 | | substring | "Wei-Lin, leaning against one of the standing stones" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "the dragon tattoo on his chest" | | locationAccurate | false |
| | closestExpected | | entry | "4423" | | detail | "tattoo" | | summary | "Wei-Lin's dragon tattoo covers his back per codex, but the passage says chest." |
| | reason | "detail mismatch: got \"missingFinger\", expected \"tattoo\"" |
| | 33 | | parsed | | entry | "4421" | | detail | "scent" | | explanation | "The codex states Yasmin's scent is \"faintly of sandalwood and burnt sage,\" but the text does not contradict this." | | paragraph | 1 | | substring | "Yasmin uncorked a small vial and sniffed its contents" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | 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." |
| | reason | "detail mismatch: got \"scent\", expected \"tattoo\"" |
| | 34 | | parsed | | entry | "4412" | | detail | "description" | | explanation | "The codex states the Heartstone was given to Aurora, but the text describes Rory feeling it." | | paragraph | 1 | | substring | "Rory felt the Heartstone pulse" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "" | | locationAccurate | false |
|
| | 35 | | parsed | | entry | "4417" | | detail | "description" | | explanation | "The codex states Tomás is a former paramedic who provides off-the-books medical care, which is consistent." | | paragraph | 1 | | substring | "Tomás, who had been quietly checking medical supplies in his bag" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | 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 | "detail mismatch: got \"description\", expected \"scar\"" |
| | 36 | | parsed | | entry | "4418" | | detail | "form" | | explanation | "The codex states Nyx can shift between solid and incorporeal forms, which is consistent." | | paragraph | 1 | | substring | "Nyx materialized from the shadow" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "their glowing blue eyes" | | locationAccurate | false |
| | closestExpected | | entry | "4418" | | detail | "eyeColor" | | summary | "Nyx has violet eyes per codex, but the passage says blue." |
| | reason | "detail mismatch: got \"form\", expected \"eyeColor\"" |
| | 37 | | parsed | | entry | "4413" | | detail | "limp" | | explanation | "The codex states Silas has a \"slight limp in his left leg,\" which is consistent." | | paragraph | 1 | | substring | "Silas rubbed his left knee" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "" | | locationAccurate | false |
|
| | 38 | | parsed | | entry | "4424" | | detail | "age" | | explanation | "The codex states Isolde is 300 years old, which is consistent." | | paragraph | 1 | | substring | "Her pale blue eyes, unblinking" |
| | status | "false_positive" | | location | | extractedText | "Her pale blue eyes, unblinking" | | inBounds | true | | expectedText | "Her pale blue eyes, unblinking" | | locationAccurate | true |
| | closestExpected | | entry | "4424" | | detail | "eyeColor" | | summary | "Isolde has pale lavender eyes per codex, but the passage says pale blue eyes." |
| | reason | "detail mismatch: got \"age\", expected \"eyeColor\"" |
| | 39 | | parsed | | entry | "4412" | | detail | "description" | | explanation | "The codex states the Heartstone is from Dymas, not Avaros." | | paragraph | 1 | | substring | "The Heartstone was forged in Avaros" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "" | | locationAccurate | false |
|
| | 40 | | parsed | | entry | "4424" | | detail | "location" | | explanation | "The codex states The Fae Grove is in Richmond Park, not Hyde Park." | | paragraph | 1 | | substring | "The Fae Grove in Hyde Park" |
| | status | "false_positive" | | location | | extractedText | "The Fae Grove in Hyde Park" | | inBounds | true | | expectedText | "Her pale blue eyes, unblinking" | | locationAccurate | false |
| | closestExpected | | entry | "4424" | | detail | "eyeColor" | | summary | "Isolde has pale lavender eyes per codex, but the passage says pale blue eyes." |
| | reason | "detail mismatch: got \"location\", expected \"eyeColor\"" |
|
| |
| 21.1538% | Precision | True positives: 11/52 | | totalReported | 52 | | truePositives | 11 | | reportedDetails | | 0 | | parsed | | entry | "4424" | | detail | "eyeColor" | | explanation | "The codex states Isolde's eye color is pale lavender, not pale blue." | | 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 | "hair" | | explanation | "The codex says her hair is silver, reaching her waist, but the text describes it as waist-length without specifying color." | | paragraph | 1 | | substring | "her waist-length silver hair stirring in a breeze" |
| | status | "false_positive" | | location | | extractedText | "her waist-length silver hair stirring in a breeze" | | inBounds | true | | expectedText | "Her pale blue eyes, unblinking" | | locationAccurate | false |
| | closestExpected | | entry | "4424" | | detail | "eyeColor" | | summary | "Isolde has pale lavender eyes per codex, but the passage says pale blue eyes." |
| | reason | "detail mismatch: got \"hair\", expected \"eyeColor\"" |
| | 2 | | parsed | | entry | "4412" | | detail | "alias" | | explanation | "The codex lists \"Rory\" as a primary alias for Aurora, not \"Aurora\" alone." | | paragraph | 1 | | substring | "Aurora arrived first, the Fae-Forged Blade warm at her hip" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "" | | locationAccurate | false |
|
| | 3 | | parsed | | entry | "4412" | | detail | "description" | | explanation | "The codex states the Fae-Forged Blade was given to Aurora by Isolde, not that it was strapped to her hip that morning." | | paragraph | 1 | | substring | "its familiar warmth a comfort against the chill" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "" | | locationAccurate | false |
|
| | 4 | | parsed | | entry | "4415" | | detail | "hair" | | explanation | "The codex states Lucien's hair is \"slicked-back platinum blond,\" not described as having amber eyes in isolation." | | paragraph | 1 | | substring | "both his amber eyes were fixed on Isolde with a calculating expression" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "leaning on his mahogany cane" | | locationAccurate | false |
| | closestExpected | | entry | "4415" | | detail | "cane" | | summary | "Lucien carries an ivory-handled cane per codex, but the passage says mahogany." |
| | reason | "detail mismatch: got \"hair\", expected \"cane\"" |
| | 5 | | parsed | | entry | "4415" | | detail | "caneMaterial" | | explanation | "The codex states his cane is \"ivory-handled,\" not mahogany." | | paragraph | 1 | | 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 1]" | | inBounds | true | | expectedText | "leaning on his mahogany cane" | | locationAccurate | false |
|
| | 6 | | parsed | | entry | "4415" | | detail | "alias" | | explanation | "The codex lists \"Lucien\" as an alias, but the text uses \"Lucien\" without a distinct descriptor that contradicts the codex's \"The Frenchman\" role." | | paragraph | 1 | | substring | "Lucien drawled" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "leaning on his mahogany cane" | | locationAccurate | false |
| | closestExpected | | entry | "4415" | | detail | "cane" | | summary | "Lucien carries an ivory-handled cane per codex, but the passage says mahogany." |
| | reason | "detail mismatch: got \"alias\", expected \"cane\"" |
| | 7 | | parsed | | entry | "4415" | | detail | "father" | | explanation | "The codex does not explicitly mention Lucien's father's name or role; the text incorrectly implies a familial relationship beyond the codex's \"Half-Demon\" lineage." | | paragraph | 1 | | substring | "—he says his father—" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "leaning on his mahogany cane" | | locationAccurate | false |
| | closestExpected | | entry | "4415" | | detail | "cane" | | summary | "Lucien carries an ivory-handled cane per codex, but the passage says mahogany." |
| | reason | "detail mismatch: got \"father\", expected \"cane\"" |
| | 8 | | parsed | | entry | "4417" | | detail | "birthplace" | | explanation | "The codex states Tomás was born in Seville, Spain, but the text does not mention Spain." | | paragraph | 1 | | substring | "Tomás, who had been quietly checking medical supplies in his bag" |
| | 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 | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "His Madrid accent" | | locationAccurate | false |
|
| | 9 | | parsed | | entry | "4420" | | detail | "hair" | | explanation | "The codex states Kai's hair is \"dyed electric-blue in an undercut.\"" | | paragraph | 1 | | substring | "his natural black hair falling into his face" |
| | 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 1]" | | inBounds | true | | expectedText | "his natural black hair falling into his face" | | locationAccurate | false |
|
| | 10 | | parsed | | entry | "4416" | | detail | "watchLocation" | | explanation | "The codex states Detective Quinn wears her watch on her left wrist, but the text does not contradict this." | | paragraph | 1 | | substring | "Kai, I need everything you can find on that Blackfriars rift" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "" | | locationAccurate | false |
|
| | 11 | | parsed | | entry | "4416" | | detail | "description" | | explanation | "The codex does not mention Kai having a dragon tattoo or any physical traits associated with him." | | paragraph | 1 | | substring | "The edge of the dragon tattoo on his chest was visible" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "" | | locationAccurate | false |
|
| | 12 | | parsed | | entry | "4423" | | detail | "age" | | explanation | "The codex states Zhou Wei-Lin is 48 years old, but the text does not contradict this." | | paragraph | 1 | | substring | "Wei-Lin, leaning against one of the standing stones" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "the dragon tattoo on his chest" | | locationAccurate | false |
| | closestExpected | | entry | "4423" | | detail | "tattoo" | | summary | "Wei-Lin's dragon tattoo covers his back per codex, but the passage says chest." |
| | reason | "detail mismatch: got \"age\", expected \"tattoo\"" |
| | 13 | | parsed | | entry | "4423" | | detail | "tattooLocation" | | explanation | "The codex states the dragon tattoo covers his entire back, not his chest." | | paragraph | 1 | | substring | "The edge of the 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 1]" | | inBounds | true | | expectedText | "the dragon tattoo on his chest" | | locationAccurate | false |
|
| | 14 | | parsed | | entry | "4423" | | detail | "missingFinger" | | explanation | "The text does not mention missing fingers, only the tattoo." | | paragraph | 1 | | substring | "The edge of the dragon tattoo" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "the dragon tattoo on his chest" | | locationAccurate | false |
| | closestExpected | | entry | "4423" | | detail | "tattoo" | | summary | "Wei-Lin's dragon tattoo covers his back per codex, but the passage says chest." |
| | reason | "detail mismatch: got \"missingFinger\", expected \"tattoo\"" |
| | 15 | | parsed | | entry | "4422" | | detail | "hair" | | explanation | "The codex states Father Cormac has \"thinning ginger\" hair, but the text describes it as \"dark brown.\"" | | paragraph | 1 | | substring | "Cormac crossed himself, his dark brown eyes troubled beneath his thinning ginger hair" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "his dark brown eyes troubled" | | locationAccurate | false |
| | closestExpected | | entry | "4422" | | detail | "eyeColor" | | summary | "Father Cormac has pale blue eyes per codex, but the passage says dark brown eyes." |
| | reason | "detail mismatch: got \"hair\", expected \"eyeColor\"" |
| | 16 | | parsed | | entry | "7002" | | detail | "signedYear" | | explanation | "The codex states the Covenant was signed in **1215**, not 1066." | | paragraph | 1 | | 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 1]" | | inBounds | true | | expectedText | "the old treaty from 1066" | | locationAccurate | false |
|
| | 17 | | parsed | | entry | "4418" | | detail | "age" | | explanation | "The codex states Nyx is \"ageless,\" but the text does not contradict this." | | paragraph | 1 | | substring | "Nyx materialized" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "their glowing blue eyes" | | locationAccurate | false |
| | closestExpected | | entry | "4418" | | detail | "eyeColor" | | summary | "Nyx has violet eyes per codex, but the passage says blue." |
| | reason | "detail mismatch: got \"age\", expected \"eyeColor\"" |
| | 18 | | parsed | | entry | "4418" | | detail | "voice" | | explanation | "The codex states Nyx's voice is a \"whisper carried on the wind,\" not explicitly \"wind through dead leaves.\"" | | paragraph | 1 | | substring | "their voice like wind through dead leaves" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "their glowing blue eyes" | | locationAccurate | false |
| | closestExpected | | entry | "4418" | | detail | "eyeColor" | | summary | "Nyx has violet eyes per codex, but the passage says blue." |
| | reason | "detail mismatch: got \"voice\", expected \"eyeColor\"" |
| | 19 | | parsed | | entry | "4419" | | detail | "eyeColor" | | explanation | "The codex states Maggie's eye color is \"sharp grey,\" not \"green eyes.\"" | | paragraph | 1 | | substring | "Maggie rapped her oak walking stick" |
| | status | "true_positive" | | matchedExpected | | entry | "4419" | | detail | "eyeColor" | | summary | "Maggie has grey eyes per codex, but the passage says green." |
| | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "Her keen green eyes" | | locationAccurate | false |
|
| | 20 | | parsed | | entry | "4424" | | detail | "age" | | explanation | "The codex states Isolde is **300 years old**, and the text confirms this." | | paragraph | 1 | | substring | "Her pale blue eyes, unblinking" |
| | status | "false_positive" | | location | | extractedText | "Her pale blue eyes, unblinking" | | inBounds | true | | expectedText | "Her pale blue eyes, unblinking" | | locationAccurate | true |
| | closestExpected | | entry | "4424" | | detail | "eyeColor" | | summary | "Isolde has pale lavender eyes per codex, but the passage says pale blue eyes." |
| | reason | "detail mismatch: got \"age\", expected \"eyeColor\"" |
| | 21 | | parsed | | entry | "4424" | | detail | "footprints" | | explanation | "The codex states Isolde leaves no footprints, but the text describes clear prints." | | paragraph | 1 | | substring | "her bare feet leaving clear prints" |
| | 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 |
|
| | 22 | | parsed | | entry | "4424" | | detail | "speech" | | explanation | "The codex states Isolde \"speaks in riddles,\" but the text describes her intoning a statement rather than speaking in riddles." | | paragraph | 1 | | substring | "Isolde intoned" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "Her pale blue eyes, unblinking" | | locationAccurate | false |
| | closestExpected | | entry | "4424" | | detail | "eyeColor" | | summary | "Isolde has pale lavender eyes per codex, but the passage says pale blue eyes." |
| | reason | "detail mismatch: got \"speech\", expected \"eyeColor\"" |
| | 23 | | parsed | | entry | "4424" | | detail | "description" | | explanation | "The codex states she is a \"Half-Fae seer exiled from the Fae Courts for sharing visions with mortals,\" but the text does not contradict this." | | paragraph | 1 | | substring | "Her pale blue eyes, unblinking" |
| | status | "false_positive" | | location | | extractedText | "Her pale blue eyes, unblinking" | | inBounds | true | | expectedText | "Her pale blue eyes, unblinking" | | locationAccurate | true |
| | closestExpected | | entry | "4424" | | detail | "eyeColor" | | summary | "Isolde has pale lavender eyes per codex, but the passage says pale blue eyes." |
| | reason | "detail mismatch: got \"description\", expected \"eyeColor\"" |
| | 24 | | parsed | | entry | "4421" | | detail | "tattooLocation" | | explanation | "The codex states Yasmin has a \"flame serpent tattoo coiling up her left arm.\"" | | paragraph | 1 | | substring | "The 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 1]" | | inBounds | true | | expectedText | "tattoo on her right arm" | | locationAccurate | false |
|
| | 25 | | parsed | | entry | "4420" | | detail | "headphones" | | explanation | "The codex states Kai wears \"noise-cancelling headphones,\" but the text does not contradict this." | | paragraph | 1 | | substring | "Kai, I need everything you can find" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | 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 | "detail mismatch: got \"headphones\", expected \"hair\"" |
| | 26 | | parsed | | entry | "4420" | | detail | "tattooLocation" | | explanation | "The codex states Kai's tattoo is on the inside of his right wrist, which matches the text." | | paragraph | 1 | | substring | "small circuit board tattoo on the inside of his right wrist" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | 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 | "detail mismatch: got \"tattooLocation\", expected \"hair\"" |
| | 27 | | parsed | | entry | "4414" | | detail | "glasses" | | explanation | "The codex states Eva wears \"round glasses,\" not square." | | paragraph | 1 | | substring | "her square glasses kept fogging" |
| | status | "true_positive" | | matchedExpected | | entry | "4414" | | detail | "glasses" | | summary | "Eva wears round glasses per codex, but the passage says square glasses." |
| | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "Her square glasses kept fogging" | | locationAccurate | false |
|
| | 28 | | parsed | | entry | "4418" | | detail | "form" | | explanation | "The codex states Nyx is a \"humanoid silhouette of living shadow,\" and they can shift between solid and incorporeal forms." | | paragraph | 1 | | substring | "Nyx materialized from the shadow of a standing stone" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "their glowing blue eyes" | | locationAccurate | false |
| | closestExpected | | entry | "4418" | | detail | "eyeColor" | | summary | "Nyx has violet eyes per codex, but the passage says blue." |
| | reason | "detail mismatch: got \"form\", expected \"eyeColor\"" |
| | 29 | | parsed | | entry | "4418" | | detail | "height" | | explanation | "The codex states Nyx is approximately 6'2\" in solid form, which is consistent." | | paragraph | 1 | | substring | "Nyx materialized" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "their glowing blue eyes" | | locationAccurate | false |
| | closestExpected | | entry | "4418" | | detail | "eyeColor" | | summary | "Nyx has violet eyes per codex, but the passage says blue." |
| | reason | "detail mismatch: got \"height\", expected \"eyeColor\"" |
| | 30 | | parsed | | entry | "4423" | | detail | "location" | | explanation | "The codex states The Veil Market is currently located at an abandoned Tube station beneath Camden, not Shoreditch." | | paragraph | 1 | | substring | "The market's moved to an abandoned station under Shoreditch" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "the dragon tattoo on his chest" | | locationAccurate | false |
| | closestExpected | | entry | "4423" | | detail | "tattoo" | | summary | "Wei-Lin's dragon tattoo covers his back per codex, but the passage says chest." |
| | reason | "detail mismatch: got \"location\", expected \"tattoo\"" |
| | 31 | | parsed | | entry | "4424" | | detail | "location" | | explanation | "The codex states The Fae Grove is in Richmond Park, not Hyde Park." | | paragraph | 1 | | substring | "The Fae Grove in Hyde Park" |
| | status | "false_positive" | | location | | extractedText | "The Fae Grove in Hyde Park" | | inBounds | true | | expectedText | "Her pale blue eyes, unblinking" | | locationAccurate | false |
| | closestExpected | | entry | "4424" | | detail | "eyeColor" | | summary | "Isolde has pale lavender eyes per codex, but the passage says pale blue eyes." |
| | reason | "detail mismatch: got \"location\", expected \"eyeColor\"" |
| | 32 | | parsed | | entry | "4424" | | detail | "standingStones" | | explanation | "The codex states standing stones mark the boundary, but the text does not contradict this." | | paragraph | 1 | | substring | "The ancient elm standing stones hummed" |
| | status | "false_positive" | | location | | extractedText | "The ancient elm standing stones hummed" | | inBounds | true | | expectedText | "Her pale blue eyes, unblinking" | | locationAccurate | false |
| | closestExpected | | entry | "4424" | | detail | "eyeColor" | | summary | "Isolde has pale lavender eyes per codex, but the passage says pale blue eyes." |
| | reason | "detail mismatch: got \"standingStones\", expected \"eyeColor\"" |
| | 33 | | parsed | | entry | "4412" | | detail | "description" | | explanation | "The codex states the Heartstone was given to Aurora by an unknown benefactor and is from Dymas, not Avaros." | | paragraph | 1 | | substring | "The Heartstone was forged in Avaros" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "" | | locationAccurate | false |
|
| | 34 | | parsed | | entry | "4424" | | detail | "compulsion" | | explanation | "The codex states Isolde cannot lie but can mislead, which is consistent." | | paragraph | 1 | | substring | "The Covenant of Separation — the old treaty from 1066" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "Her pale blue eyes, unblinking" | | locationAccurate | false |
| | closestExpected | | entry | "4424" | | detail | "eyeColor" | | summary | "Isolde has pale lavender eyes per codex, but the passage says pale blue eyes." |
| | reason | "detail mismatch: got \"compulsion\", expected \"eyeColor\"" |
| | 35 | | parsed | | entry | "7002" | | detail | "signatories" | | explanation | "The codex states signatories include rulers of Hel, Fae Courts, and human sorcerers, but the text does not contradict this." | | paragraph | 1 | | substring | "The Covenant of Separation — the old treaty from 1215" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "the old treaty from 1066" | | locationAccurate | false |
| | closestExpected | | entry | "7002" | | detail | "signedYear" | | summary | "The Covenant of Separation was signed in 1215 per codex, but Cormac says 1066." |
| | reason | "detail mismatch: got \"signatories\", expected \"signedYear\"" |
| | 36 | | parsed | | entry | "4412" | | detail | "description" | | explanation | "The codex states the Heartstone was given to Aurora by an unknown benefactor, but the text implies it is personal to her." | | paragraph | 1 | | substring | "Rory felt the Heartstone pulse in her pocket" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "" | | locationAccurate | false |
|
| | 37 | | parsed | | entry | "4424" | | detail | "appearance" | | explanation | "The codex states the Veil is a \"faint shimmering distortion,\" not explicitly described as gossamer." | | paragraph | 1 | | substring | "The Veil shimmered — thin as gossamer" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "Her pale blue eyes, unblinking" | | locationAccurate | false |
| | closestExpected | | entry | "4424" | | detail | "eyeColor" | | summary | "Isolde has pale lavender eyes per codex, but the passage says pale blue eyes." |
| | reason | "detail mismatch: got \"appearance\", expected \"eyeColor\"" |
| | 38 | | parsed | | entry | "7003" | | detail | "" | | explanation | "The codex states peak activity is during the winter solstice, but the text does not contradict this." | | paragraph | 1 | | substring | "peakActivity" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "The Fae Grove in Hyde Park" | | locationAccurate | false |
| | closestExpected | | entry | "861" | | detail | "parkLocation" | | summary | "The Fae Grove is in Richmond Park per codex, but the passage says Hyde Park." |
| | reason | "entry mismatch: got \"7003\", expected \"861\"" |
| | 39 | | parsed | | entry | "4424" | | detail | "ruler" | | explanation | "The codex states the Crimson Court's ruler is Prince Lilith, but the text describes Prince Lilith as the master of the Somnian Cult." | | paragraph | 1 | | substring | "The Crimson Court stirs" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "Her pale blue eyes, unblinking" | | locationAccurate | false |
| | closestExpected | | entry | "4424" | | detail | "eyeColor" | | summary | "Isolde has pale lavender eyes per codex, but the passage says pale blue eyes." |
| | reason | "detail mismatch: got \"ruler\", expected \"eyeColor\"" |
| | 40 | | parsed | | entry | "4423" | | detail | "location" | | explanation | "The codex states Zhou Wei-Lin runs \"Zhou's Golden Dragon\" in Chinatown, which is consistent." | | paragraph | 1 | | substring | "Chinatown" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "the dragon tattoo on his chest" | | locationAccurate | false |
| | closestExpected | | entry | "4423" | | detail | "tattoo" | | summary | "Wei-Lin's dragon tattoo covers his back per codex, but the passage says chest." |
| | reason | "detail mismatch: got \"location\", expected \"tattoo\"" |
| | 41 | | parsed | | entry | "4420" | | detail | "livingLocation" | | explanation | "The codex states Kai lives in a converted shipping container in Hackney Wick, not contradicted." | | paragraph | 1 | | substring | "Kai, I need everything you can find on that Blackfriars rift" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | 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 | "detail mismatch: got \"livingLocation\", expected \"hair\"" |
| | 42 | | parsed | | entry | "4423" | | detail | "missingFinger" | | explanation | "The codex states Zhou Wei-Lin has a missing finger, but the text does not mention this." | | paragraph | 1 | | substring | "Wei-Lin, leaning against one of the standing stones" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "the dragon tattoo on his chest" | | locationAccurate | false |
| | closestExpected | | entry | "4423" | | detail | "tattoo" | | summary | "Wei-Lin's dragon tattoo covers his back per codex, but the passage says chest." |
| | reason | "detail mismatch: got \"missingFinger\", expected \"tattoo\"" |
| | 43 | | parsed | | entry | "4422" | | detail | "rosaryMaterial" | | explanation | "The codex states the rosary is made of \"rowan wood,\" not cedar." | | paragraph | 1 | | substring | "Cormac crossed himself, 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 1]" | | inBounds | true | | expectedText | "his cedar rosary beads" | | locationAccurate | false |
|
| | 44 | | parsed | | entry | "4421" | | detail | "scent" | | explanation | "The codex states Yasmin's scent is \"faintly of sandalwood and burnt sage,\" but the text does not contradict this." | | paragraph | 1 | | substring | "Yasmin uncorked a small vial and sniffed its contents" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | 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." |
| | reason | "detail mismatch: got \"scent\", expected \"tattoo\"" |
| | 45 | | parsed | | entry | "4412" | | detail | "description" | | explanation | "The codex states the Heartstone was given to Aurora, but the text describes Rory feeling it." | | paragraph | 1 | | substring | "Rory felt the Heartstone pulse" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "" | | locationAccurate | false |
|
| | 46 | | parsed | | entry | "4417" | | detail | "description" | | explanation | "The codex states Tomás is a former paramedic who provides off-the-books medical care, which is consistent." | | paragraph | 1 | | substring | "Tomás, who had been quietly checking medical supplies in his bag" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | 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 | "detail mismatch: got \"description\", expected \"scar\"" |
| | 47 | | parsed | | entry | "4418" | | detail | "form" | | explanation | "The codex states Nyx can shift between solid and incorporeal forms, which is consistent." | | paragraph | 1 | | substring | "Nyx materialized from the shadow" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "their glowing blue eyes" | | locationAccurate | false |
| | closestExpected | | entry | "4418" | | detail | "eyeColor" | | summary | "Nyx has violet eyes per codex, but the passage says blue." |
| | reason | "detail mismatch: got \"form\", expected \"eyeColor\"" |
| | 48 | | parsed | | entry | "4413" | | detail | "limp" | | explanation | "The codex states Silas has a \"slight limp in his left leg,\" which is consistent." | | paragraph | 1 | | substring | "Silas rubbed his left knee" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "" | | locationAccurate | false |
|
| | 49 | | parsed | | entry | "4424" | | detail | "age" | | explanation | "The codex states Isolde is 300 years old, which is consistent." | | paragraph | 1 | | substring | "Her pale blue eyes, unblinking" |
| | status | "false_positive" | | location | | extractedText | "Her pale blue eyes, unblinking" | | inBounds | true | | expectedText | "Her pale blue eyes, unblinking" | | locationAccurate | true |
| | closestExpected | | entry | "4424" | | detail | "eyeColor" | | summary | "Isolde has pale lavender eyes per codex, but the passage says pale blue eyes." |
| | reason | "detail mismatch: got \"age\", expected \"eyeColor\"" |
| | 50 | | parsed | | entry | "4412" | | detail | "description" | | explanation | "The codex states the Heartstone is from Dymas, not Avaros." | | paragraph | 1 | | substring | "The Heartstone was forged in Avaros" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "" | | locationAccurate | false |
|
| | 51 | | parsed | | entry | "4424" | | detail | "location" | | explanation | "The codex states The Fae Grove is in Richmond Park, not Hyde Park." | | paragraph | 1 | | substring | "The Fae Grove in Hyde Park" |
| | status | "false_positive" | | location | | extractedText | "The Fae Grove in Hyde Park" | | inBounds | true | | expectedText | "Her pale blue eyes, unblinking" | | locationAccurate | false |
| | closestExpected | | entry | "4424" | | detail | "eyeColor" | | summary | "Isolde has pale lavender eyes per codex, but the passage says pale blue eyes." |
| | reason | "detail mismatch: got \"location\", expected \"eyeColor\"" |
|
| |