| 0.00% | Accuracy (recall) | Matched: 10/33, FP: 23 | | parsedCount | 33 | | matched | 10 | | total | 33 | | falsePositives | 23 | | 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 | "858" | | detail | "cat" | | explanation | "The codex states Eva's flat has a cat named Ptolemy, but the text mentions Hyde Park, not Eva's location." | | paragraph | 1 | | substring | "the Fae Grove in Hyde Park" |
| | reason | "entry mismatch: got \"858\", 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 | "7005" | | detail | "" | | explanation | "The text states the Heartstone was forged in **Avaros**, but the codex confirms it originates from **Dymas**." | | paragraph | 1 | | substring | "The Heartstone was forged in Avaros" |
| | reason | "entry mismatch: got \"7005\", 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 eyes are **pale lavender**, but the text describes them as **pale blue**." | | paragraph | 1 | | substring | "Isolde stepped forward, her pale blue eyes widening" |
| | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "Her pale blue eyes, unblinking" | | locationAccurate | false |
|
| | 3 | | expected | | entry | "4424" | | detail | "eyeColor" | | summary | "Isolde has pale lavender eyes per codex, but the passage again says pale blue eyes in a later paragraph." |
| | status | "missed" | | nearMiss | | parsed | | entry | "4413" | | detail | "eyeColor" | | explanation | "The codex states Silas has \"hazel\" eyes, but the text does not contradict this." | | paragraph | 1 | | substring | "Silas, who had been standing silently at the edge of the grove" |
| | reason | "entry mismatch: got \"4413\", expected \"4424\"" |
|
| | 4 | | 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 her leaving clear prints." | | paragraph | 1 | | substring | "Her bare feet leaving clear prints in the soft earth" |
| | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "her bare feet leaving clear prints in the soft earth" | | locationAccurate | false |
|
| | 5 | | 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 | "7005" | | detail | "" | | explanation | "The text states the Heartstone was forged in **Avaros**, but the codex confirms it originates from **Dymas**." | | paragraph | 1 | | substring | "The Heartstone was forged in Avaros" |
| | reason | "entry mismatch: got \"7005\", expected \"2006\"" |
|
| | 6 | | 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,\" but the text describes them as \"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 |
|
| | 7 | | 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 | "7005" | | detail | "" | | explanation | "The text states the Heartstone was forged in **Avaros**, but the codex confirms it originates from **Dymas**." | | paragraph | 1 | | substring | "The Heartstone was forged in Avaros" |
| | reason | "entry mismatch: got \"7005\", expected \"2005\"" |
|
| | 8 | | 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 | "7005" | | detail | "" | | explanation | "The text states the Heartstone was forged in **Avaros**, but the codex confirms it originates from **Dymas**." | | paragraph | 1 | | substring | "The Heartstone was forged in Avaros" |
| | reason | "entry mismatch: got \"7005\", expected \"2005\"" |
|
| | 9 | | expected | | entry | "6003" | | detail | "master" | | summary | "The Somnian Cult serves Prince Asmodeus per codex, but Isolde says Prince Lilith." |
| | status | "missed" | | nearMiss | | parsed | | entry | "7005" | | detail | "" | | explanation | "The text states the Heartstone was forged in **Avaros**, but the codex confirms it originates from **Dymas**." | | paragraph | 1 | | substring | "The Heartstone was forged in Avaros" |
| | reason | "entry mismatch: got \"7005\", expected \"6003\"" |
|
| | 10 | | 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 | "4413" | | detail | "eyeColor" | | explanation | "The codex states Silas has \"hazel\" eyes, but the text does not contradict this." | | paragraph | 1 | | substring | "Silas, who had been standing silently at the edge of the grove" |
| | reason | "entry mismatch: got \"4413\", expected \"4422\"" |
|
| | 11 | | expected | | entry | "4422" | | detail | "rosary" | | summary | "Cormac carries a rowan wood rosary per codex, but the passage says cedar." |
| | status | "missed" | | nearMiss | | parsed | | entry | "4422" | | detail | "hair" | | explanation | "The codex states Father Cormac has \"thinning ginger\" hair, but the text describes his hair as \"dark brown.\"" | | paragraph | 1 | | substring | "Father Cormac crossed himself, his dark brown eyes troubled beneath his thinning ginger hair" |
| | reason | "detail mismatch: got \"hair\", expected \"rosary\"" |
|
| | 12 | | 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 specifies 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 |
|
| | 13 | | 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 | "7005" | | detail | "" | | explanation | "The text states the Heartstone was forged in **Avaros**, but the codex confirms it originates from **Dymas**." | | paragraph | 1 | | substring | "The Heartstone was forged in Avaros" |
| | reason | "entry mismatch: got \"7005\", expected \"6004\"" |
|
| | 14 | | 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 | "cane" | | explanation | "The codex states Lucien's cane is \"ivory-handled,\" but the text describes it as \"mahogany.\"" | | paragraph | 1 | | substring | "Both his amber eyes were fixed on Isolde" |
| | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "leaning on his mahogany cane" | | locationAccurate | false |
|
| | 15 | | expected | | entry | "4415" | | detail | "eyeColor" | | summary | "Lucien has heterochromatic eyes (one amber, one black), but the passage says both amber." |
| | status | "matched" | | matchedBy | | entry | "4415" | | detail | "eyeColor" | | explanation | "The codex states Lucien has **heterochromatic** eyes (one amber, one black), but the text describes both as \"amber.\"" | | paragraph | 1 | | substring | "Both his amber eyes were fixed on Isolde" |
| | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "Both his amber eyes were fixed" | | locationAccurate | false |
|
| | 16 | | 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 | "missed" | | nearMiss | | parsed | | entry | "4421" | | detail | "hair" | | explanation | "The codex states Yasmin's hair is \"long wavy dark,\" but the text does not contradict this." | | paragraph | 1 | | substring | "Yasmin uncorked a small vial and sniffed its contents" |
| | reason | "detail mismatch: got \"hair\", expected \"tattoo\"" |
|
| | 17 | | expected | | entry | "4423" | | detail | "tattoo" | | summary | "Wei-Lin's dragon tattoo covers his back per codex, but the passage says chest." |
| | status | "missed" | | nearMiss | | parsed | | entry | "4423" | | detail | "age" | | explanation | "The codex states Wei-Lin is 48, but the text does not contradict this." | | paragraph | 1 | | substring | "Wei-Lin, leaning against one of the standing stones with his arms folded" |
| | reason | "detail mismatch: got \"age\", expected \"tattoo\"" |
|
| | 18 | | expected | | entry | "2006" | | detail | "material" | | summary | "Fae-Forged Blades are moonsilver per codex, but Wei-Lin says bronze." |
| | status | "missed" | | nearMiss | | parsed | | entry | "7005" | | detail | "" | | explanation | "The text states the Heartstone was forged in **Avaros**, but the codex confirms it originates from **Dymas**." | | paragraph | 1 | | substring | "The Heartstone was forged in Avaros" |
| | reason | "entry mismatch: got \"7005\", expected \"2006\"" |
|
| | 19 | | expected | | entry | "856" | | detail | "currentLocation" | | summary | "The Veil Market is under Camden per codex, but Wei-Lin says Shoreditch." |
| | status | "missed" | | nearMiss | | parsed | | entry | "858" | | detail | "cat" | | explanation | "The codex states Eva's flat has a cat named Ptolemy, but the text mentions Hyde Park, not Eva's location." | | paragraph | 1 | | substring | "the Fae Grove in Hyde Park" |
| | reason | "entry mismatch: got \"858\", expected \"856\"" |
|
| | 20 | | 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,\" but the text describes it as \"natural black.\"" | | paragraph | 1 | | substring | "Kai corrected from behind his laptop screen, his natural black hair" |
| | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "his natural black hair falling into his face" | | locationAccurate | false |
|
| | 21 | | 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 | "The text mentions \"the sword inside a circle\" as Blackthorn's logo, but the codex states their logo is a **\"thorned branch inside a shield.\"" | | paragraph | 1 | | substring | "Kai, I need everything you can find on that Blackfriars rift. Eva, cross-reference with the restricted archive. Lucien, reach out to your contacts in Hel — find out what the Court is planning. Tomás, prep medical kits for a rift encounter. Father Cormac, alert the Parish Guard. Nyx — shadow the rift. Don't let anything through." |
| | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "the sword inside a circle" | | locationAccurate | false |
|
| | 22 | | expected | | entry | "4419" | | detail | "walkingStick" | | summary | "Maggie carries a blackthorn stick per codex, but the passage says oak." |
| | status | "missed" | | nearMiss | | parsed | | entry | "7005" | | detail | "" | | explanation | "The text states the Heartstone was forged in **Avaros**, but the codex confirms it originates from **Dymas**." | | paragraph | 1 | | substring | "The Heartstone was forged in Avaros" |
| | reason | "entry mismatch: got \"7005\", expected \"4419\"" |
|
| | 23 | | expected | | entry | "4419" | | detail | "eyeColor" | | summary | "Maggie has grey eyes per codex, but the passage says green." |
| | status | "missed" | | nearMiss | | parsed | | entry | "4413" | | detail | "eyeColor" | | explanation | "The codex states Silas has \"hazel\" eyes, but the text does not contradict this." | | paragraph | 1 | | substring | "Silas, who had been standing silently at the edge of the grove" |
| | reason | "entry mismatch: got \"4413\", expected \"4419\"" |
|
| | 24 | | expected | | entry | "6001" | | detail | "foundingYear" | | summary | "The Wardens were founded in 1215 per codex, but Maggie says 1066." |
| | status | "missed" | | nearMiss | | parsed | | entry | "7005" | | detail | "" | | explanation | "The text states the Heartstone was forged in **Avaros**, but the codex confirms it originates from **Dymas**." | | paragraph | 1 | | substring | "The Heartstone was forged in Avaros" |
| | reason | "entry mismatch: got \"7005\", expected \"6001\"" |
|
| | 25 | | 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 | "7005" | | detail | "" | | explanation | "The text states the Heartstone was forged in **Avaros**, but the codex confirms it originates from **Dymas**." | | paragraph | 1 | | substring | "The Heartstone was forged in Avaros" |
| | reason | "entry mismatch: got \"7005\", expected \"4417\"" |
|
| | 26 | | 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**, but the text does not contradict this." | | paragraph | 1 | | substring | "Tomás, who had been quietly checking medical supplies" |
| | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "His Madrid accent" | | locationAccurate | false |
|
| | 27 | | expected | | entry | "4418" | | detail | "eyeColor" | | summary | "Nyx has violet eyes per codex, but the passage says blue." |
| | status | "matched" | | matchedBy | | entry | "4418" | | detail | "eyeColor" | | explanation | "The codex states Nyx's eyes are \"faintly glowing violet,\" but the text describes them as \"blue.\"" | | paragraph | 1 | | substring | "Nyx materialized from the shadow of a standing stone, their glowing blue eyes" |
| | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "their glowing blue eyes" | | locationAccurate | false |
|
| | 28 | | 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 | "7005" | | detail | "" | | explanation | "The text states the Heartstone was forged in **Avaros**, but the codex confirms it originates from **Dymas**." | | paragraph | 1 | | substring | "The Heartstone was forged in Avaros" |
| | reason | "entry mismatch: got \"7005\", expected \"2001\"" |
|
| | 29 | | 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 | "7005" | | detail | "" | | explanation | "The text states the Heartstone was forged in **Avaros**, but the codex confirms it originates from **Dymas**." | | paragraph | 1 | | substring | "The Heartstone was forged in Avaros" |
| | reason | "entry mismatch: got \"7005\", expected \"2001\"" |
|
| | 30 | | 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 | "The codex states Dymas is ruled by Prince Belphegor, but the text implies Prince Lilith (Luxuria) or Mammon (Avaros) is involved, which is incorrect." | | paragraph | 1 | | substring | "the Crimson Court stirs, their servants spread Dream Dust through the city" |
| | reason | "entry mismatch: got \"853\", expected \"855\"" |
|
| | 31 | | expected | | entry | "2006" | | detail | "temperature" | | summary | "The Fae-Forged Blade is always cold per codex, but the passage again describes it as warm in a later paragraph." |
| | status | "missed" | | nearMiss | | parsed | | entry | "7005" | | detail | "" | | explanation | "The text states the Heartstone was forged in **Avaros**, but the codex confirms it originates from **Dymas**." | | paragraph | 1 | | substring | "The Heartstone was forged in Avaros" |
| | reason | "entry mismatch: got \"7005\", expected \"2006\"" |
|
| | 32 | | expected | | entry | "6002" | | detail | "headquarters" | | summary | "The Crimson Court's headquarters is in Dymas per codex, but Lucien says their base has shifted to Irath." |
| | status | "missed" | | nearMiss | | parsed | | entry | "6002" | | detail | "leadership" | | explanation | "The text mentions Prince Lilith (Luxuria) and Prince Mammon (Avaros) as involved with the Crimson Court, but the codex states the Crimson Court's leadership is a council of seven demon lords representing each circle of Hel, with no direct mention of Lilith or Mammon as primary figures." | | paragraph | 1 | | substring | "Lucien drawled, leaning on his mahogany cane. Both his amber eyes were fixed on Isolde with a calculating expression." |
| | reason | "detail mismatch: got \"leadership\", expected \"headquarters\"" |
|
|
| | falsePositiveDetails | | 0 | | parsed | | entry | "853" | | detail | "ruler" | | explanation | "The codex states Dymas is ruled by Prince Belphegor, but the text implies Prince Lilith (Luxuria) or Mammon (Avaros) is involved, which is incorrect." | | paragraph | 1 | | substring | "the Crimson Court stirs, their servants spread Dream Dust through the city" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | 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\"" |
| | 1 | | parsed | | entry | "853" | | detail | "skyColor" | | explanation | "The codex specifies Dymas has a \"warm amber\" sky, but the text does not reference this location's sky color." | | paragraph | 1 | | substring | "the ancient elm standing stones hummed with a resonance" |
| | status | "false_positive" | | location | | extractedText | "the ancient elm standing stones hummed with a resonance" | | inBounds | true | | expectedText | "" | | locationAccurate | true |
|
| | 2 | | parsed | | entry | "858" | | detail | "cat" | | explanation | "The codex states Eva's flat has a cat named Ptolemy, but the text mentions Hyde Park, not Eva's location." | | paragraph | 1 | | substring | "the Fae Grove in Hyde Park" |
| | status | "false_positive" | | location | | extractedText | "the Fae Grove in Hyde Park" | | inBounds | true | | expectedText | "The Fae Grove in Hyde Park" | | locationAccurate | true |
| | 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 \"858\", expected \"861\"" |
| | 3 | | parsed | | entry | "4414" | | detail | "hair" | | explanation | "The codex states Eva's hair is \"curly red,\" but the text describes it as \"curly\" and mentions a wool hat, not explicitly confirming the redness." | | paragraph | 1 | | substring | "her curly red hair escaping from under a wool hat" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "Her square glasses kept fogging" | | locationAccurate | false |
| | closestExpected | | entry | "4414" | | detail | "glasses" | | summary | "Eva wears round glasses per codex, but the passage says square glasses." |
| | reason | "detail mismatch: got \"hair\", expected \"glasses\"" |
| | 4 | | parsed | | entry | "4416" | | detail | "age" | | explanation | "The codex states Father Cormac is 55, but the text incorrectly states the Covenant was signed in 1066 (codex: 1215)." | | paragraph | 1 | | substring | "Father Cormac crossed himself" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "" | | locationAccurate | false |
|
| | 5 | | parsed | | entry | "4415" | | detail | "hair" | | explanation | "The codex states Lucien has \"slicked-back platinum blond\" hair, but the text describes him as \"drawling\" without contradicting the color directly." | | paragraph | 1 | | substring | "Lucien drawled, leaning on his mahogany cane" |
| | 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\"" |
| | 6 | | parsed | | entry | "4413" | | detail | "eyeColor" | | explanation | "The codex states Silas has \"hazel\" eyes, but the text does not contradict this." | | paragraph | 1 | | substring | "Silas, who had been standing silently at the edge of the grove" |
| | 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 | "entry mismatch: got \"4413\", expected \"4424\"" |
| | 7 | | parsed | | entry | "4413" | | detail | "age" | | explanation | "No age contradiction is present; the text does not mention Silas' age." | | paragraph | 1 | | substring | "Silas, who had been standing silently at the edge of the grove" |
| | 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 Wei-Lin is 48, but the text does not contradict this." | | paragraph | 1 | | substring | "Wei-Lin, leaning against one of the standing stones with his arms folded" |
| | 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 codex states Wei-Lin is missing the tip of his **left little finger**, but the text does not confirm the side of the missing finger." | | paragraph | 1 | | substring | "The edge of the dragon tattoo on his chest was visible above his collar" |
| | 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 | "4421" | | detail | "hair" | | explanation | "The codex states Yasmin's hair is \"long wavy dark,\" 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 \"hair\", expected \"tattoo\"" |
| | 11 | | parsed | | entry | "4422" | | detail | "hair" | | explanation | "The codex states Father Cormac has \"thinning ginger\" hair, but the text describes his hair as \"dark brown.\"" | | paragraph | 1 | | substring | "Father 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\"" |
| | 12 | | parsed | | entry | "4416" | | detail | "watch" | | explanation | "The codex states Detective Quinn wears a watch on her **left wrist**, but the text does not mention Quinn's watch." | | paragraph | 1 | | substring | "Father 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 | "" | | locationAccurate | false |
|
| | 13 | | parsed | | entry | "6005" | | detail | "owner" | | explanation | "The text incorrectly implies Yu-Fei Cheung is involved in the Crimson Court's operations, but the codex states Yu-Fei is neutral." | | paragraph | 1 | | substring | "The Crimson Court stirs" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "" | | locationAccurate | false |
|
| | 14 | | parsed | | entry | "6002" | | detail | "leadership" | | explanation | "The text mentions Prince Lilith (Luxuria) and Prince Mammon (Avaros) as involved with the Crimson Court, but the codex states the Crimson Court's leadership is a council of seven demon lords representing each circle of Hel, with no direct mention of Lilith or Mammon as primary figures." | | paragraph | 1 | | substring | "Lucien drawled, leaning on his mahogany cane. 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 | "the Crimson Court's base of operations has shifted from Dymas to Irath" | | locationAccurate | false |
| | closestExpected | | entry | "6002" | | detail | "headquarters" | | summary | "The Crimson Court's headquarters is in Dymas per codex, but Lucien says their base has shifted to Irath." |
| | reason | "detail mismatch: got \"leadership\", expected \"headquarters\"" |
| | 15 | | parsed | | entry | "4424" | | detail | "age" | | explanation | "The codex states Isolde is **300 years old**, but the text does not contradict this." | | paragraph | 1 | | substring | "Isolde's pale blue eyes widening" |
| | 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 \"age\", expected \"eyeColor\"" |
| | 16 | | parsed | | entry | "4424" | | detail | "speech" | | explanation | "The codex states Isolde **speaks in riddles**, but the text describes her as intoning normally." | | paragraph | 1 | | substring | "Isolde intoned, her bare feet leaving clear prints" |
| | 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\"" |
| | 17 | | parsed | | entry | "7005" | | detail | "" | | explanation | "The text states the Heartstone was forged in **Avaros**, but the codex confirms it originates from **Dymas**." | | paragraph | 1 | | substring | "The Heartstone was forged in Avaros" |
| | 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 \"7005\", expected \"861\"" |
| | 18 | | parsed | | entry | "2006" | | detail | "givenTo" | | explanation | "The text incorrectly attributes the Heartstone to Aurora, but the codex states it was given to Aurora by an **unknown benefactor** (not Isolde)." | | paragraph | 1 | | substring | "Rory felt the Heartstone Pulse in her pocket" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "the Fae-Forged Blade warm at her hip" | | locationAccurate | false |
| | closestExpected | | entry | "2006" | | detail | "temperature" | | summary | "The Fae-Forged Blade is always cold per codex, but the passage says warm." |
| | reason | "detail mismatch: got \"givenTo\", expected \"temperature\"" |
| | 19 | | parsed | | entry | "2006" | | detail | "givenTo" | | explanation | "The codex explicitly states the Fae-Forged Blade was **given to Aurora by Isolde**, but the text states Aurora \"strapped it there that morning\" without mentioning Isolde." | | paragraph | 1 | | substring | "Rory felt the Heartstone Pulse in her pocket" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "the Fae-Forged Blade warm at her hip" | | locationAccurate | false |
| | closestExpected | | entry | "2006" | | detail | "temperature" | | summary | "The Fae-Forged Blade is always cold per codex, but the passage says warm." |
| | reason | "detail mismatch: got \"givenTo\", expected \"temperature\"" |
| | 20 | | parsed | | entry | "7003" | | detail | "peakActivity" | | explanation | "The codex states rift points are most active during the **winter solstice**, but the text implies the solstice is imminent." | | paragraph | 1 | | substring | "The Veil shimmered — thin as gossamer, and getting thinner by the hour" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "" | | locationAccurate | false |
|
| | 21 | | parsed | | entry | "7003" | | detail | "peakActivity" | | explanation | "The text states the solstice is the trigger for the rift activity, but the codex specifies **winter solstice** as the peak activity time." | | 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 |
|
| | 22 | | parsed | | entry | "4416" | | detail | "" | | explanation | "No direct contradiction for Detective Quinn, but the text incorrectly implies Quinn is part of the group discussing the Veil's thinning." | | paragraph | 1 | | substring | "The Veil shimmered — thin as gossamer, and getting thinner by the hour" |
| | 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 \"4416\", expected \"861\"" |
|
| |
| 30.30% | Precision | True positives: 10/33 | | totalReported | 33 | | truePositives | 10 | | reportedDetails | | 0 | | parsed | | entry | "853" | | detail | "ruler" | | explanation | "The codex states Dymas is ruled by Prince Belphegor, but the text implies Prince Lilith (Luxuria) or Mammon (Avaros) is involved, which is incorrect." | | paragraph | 1 | | substring | "the Crimson Court stirs, their servants spread Dream Dust through the city" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | 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\"" |
| | 1 | | parsed | | entry | "853" | | detail | "skyColor" | | explanation | "The codex specifies Dymas has a \"warm amber\" sky, but the text does not reference this location's sky color." | | paragraph | 1 | | substring | "the ancient elm standing stones hummed with a resonance" |
| | status | "false_positive" | | location | | extractedText | "the ancient elm standing stones hummed with a resonance" | | inBounds | true | | expectedText | "" | | locationAccurate | true |
|
| | 2 | | parsed | | entry | "858" | | detail | "cat" | | explanation | "The codex states Eva's flat has a cat named Ptolemy, but the text mentions Hyde Park, not Eva's location." | | paragraph | 1 | | substring | "the Fae Grove in Hyde Park" |
| | status | "false_positive" | | location | | extractedText | "the Fae Grove in Hyde Park" | | inBounds | true | | expectedText | "The Fae Grove in Hyde Park" | | locationAccurate | true |
| | 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 \"858\", expected \"861\"" |
| | 3 | | parsed | | entry | "4414" | | detail | "hair" | | explanation | "The codex states Eva's hair is \"curly red,\" but the text describes it as \"curly\" and mentions a wool hat, not explicitly confirming the redness." | | paragraph | 1 | | substring | "her curly red hair escaping from under a wool hat" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "Her square glasses kept fogging" | | locationAccurate | false |
| | closestExpected | | entry | "4414" | | detail | "glasses" | | summary | "Eva wears round glasses per codex, but the passage says square glasses." |
| | reason | "detail mismatch: got \"hair\", expected \"glasses\"" |
| | 4 | | parsed | | entry | "4414" | | detail | "glasses" | | explanation | "The codex states Eva wears \"round glasses,\" but the text describes them as \"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 |
|
| | 5 | | parsed | | entry | "4416" | | detail | "age" | | explanation | "The codex states Father Cormac is 55, but the text incorrectly states the Covenant was signed in 1066 (codex: 1215)." | | paragraph | 1 | | substring | "Father Cormac crossed himself" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "" | | locationAccurate | false |
|
| | 6 | | parsed | | entry | "7002" | | detail | "signedYear" | | explanation | "The codex specifies 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 |
|
| | 7 | | parsed | | entry | "4415" | | detail | "hair" | | explanation | "The codex states Lucien has \"slicked-back platinum blond\" hair, but the text describes him as \"drawling\" without contradicting the color directly." | | paragraph | 1 | | substring | "Lucien drawled, leaning on his mahogany cane" |
| | 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\"" |
| | 8 | | parsed | | entry | "4415" | | detail | "eyeColor" | | explanation | "The codex states Lucien has **heterochromatic** eyes (one amber, one black), but the text describes both as \"amber.\"" | | paragraph | 1 | | 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 1]" | | inBounds | true | | expectedText | "Both his amber eyes were fixed" | | locationAccurate | false |
|
| | 9 | | parsed | | entry | "4415" | | detail | "cane" | | explanation | "The codex states Lucien's cane is \"ivory-handled,\" but the text describes it as \"mahogany.\"" | | paragraph | 1 | | substring | "Both his amber eyes were fixed on Isolde" |
| | 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 |
|
| | 10 | | parsed | | entry | "4413" | | detail | "eyeColor" | | explanation | "The codex states Silas has \"hazel\" eyes, but the text does not contradict this." | | paragraph | 1 | | substring | "Silas, who had been standing silently at the edge of the grove" |
| | 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 | "entry mismatch: got \"4413\", expected \"4424\"" |
| | 11 | | parsed | | entry | "4413" | | detail | "age" | | explanation | "No age contradiction is present; the text does not mention Silas' age." | | paragraph | 1 | | substring | "Silas, who had been standing silently at the edge of the grove" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "" | | locationAccurate | false |
|
| | 12 | | parsed | | entry | "4417" | | detail | "birthplace" | | explanation | "The codex states Tomás was born in **Seville**, but the text does not contradict this." | | paragraph | 1 | | substring | "Tomás, who had been quietly checking medical supplies" |
| | 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 |
|
| | 13 | | parsed | | entry | "4418" | | detail | "eyeColor" | | explanation | "The codex states Nyx's eyes are \"faintly glowing violet,\" but the text describes them as \"blue.\"" | | paragraph | 1 | | substring | "Nyx materialized from the shadow of a standing stone, their glowing blue eyes" |
| | status | "true_positive" | | matchedExpected | | entry | "4418" | | detail | "eyeColor" | | summary | "Nyx has violet eyes per codex, but the passage says blue." |
| | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "their glowing blue eyes" | | locationAccurate | false |
|
| | 14 | | parsed | | entry | "4420" | | detail | "hair" | | explanation | "The codex states Kai's hair is \"dyed electric-blue,\" but the text describes it as \"natural black.\"" | | paragraph | 1 | | substring | "Kai corrected from behind his laptop screen, his natural black hair" |
| | status | "true_positive" | | matchedExpected | | entry | "4420" | | detail | "hair" | | summary | "Kai has dyed electric-blue hair per codex, but the passage says natural black hair." |
| | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "his natural black hair falling into his face" | | locationAccurate | false |
|
| | 15 | | parsed | | entry | "6006" | | detail | "logo" | | explanation | "The text mentions \"the sword inside a circle\" as Blackthorn's logo, but the codex states their logo is a **\"thorned branch inside a shield.\"" | | paragraph | 1 | | substring | "Kai, I need everything you can find on that Blackfriars rift. Eva, cross-reference with the restricted archive. Lucien, reach out to your contacts in Hel — find out what the Court is planning. Tomás, prep medical kits for a rift encounter. Father Cormac, alert the Parish Guard. Nyx — shadow the rift. Don't let anything through." |
| | status | "true_positive" | | matchedExpected | | entry | "6006" | | detail | "logo" | | summary | "Blackthorn Security's logo is a thorned branch inside a shield per codex, but Kai says a sword inside a circle." |
| | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "the sword inside a circle" | | locationAccurate | false |
|
| | 16 | | parsed | | entry | "4423" | | detail | "age" | | explanation | "The codex states Wei-Lin is 48, but the text does not contradict this." | | paragraph | 1 | | substring | "Wei-Lin, leaning against one of the standing stones with his arms folded" |
| | 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\"" |
| | 17 | | parsed | | entry | "4423" | | detail | "missingFinger" | | explanation | "The codex states Wei-Lin is missing the tip of his **left little finger**, but the text does not confirm the side of the missing finger." | | paragraph | 1 | | substring | "The edge of the dragon tattoo on his chest was visible above his collar" |
| | 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\"" |
| | 18 | | parsed | | entry | "4421" | | detail | "hair" | | explanation | "The codex states Yasmin's hair is \"long wavy dark,\" 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 \"hair\", expected \"tattoo\"" |
| | 19 | | parsed | | entry | "4422" | | detail | "hair" | | explanation | "The codex states Father Cormac has \"thinning ginger\" hair, but the text describes his hair as \"dark brown.\"" | | paragraph | 1 | | substring | "Father 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\"" |
| | 20 | | parsed | | entry | "4416" | | detail | "watch" | | explanation | "The codex states Detective Quinn wears a watch on her **left wrist**, but the text does not mention Quinn's watch." | | paragraph | 1 | | substring | "Father 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 | "" | | locationAccurate | false |
|
| | 21 | | parsed | | entry | "6005" | | detail | "owner" | | explanation | "The text incorrectly implies Yu-Fei Cheung is involved in the Crimson Court's operations, but the codex states Yu-Fei is neutral." | | paragraph | 1 | | substring | "The Crimson Court stirs" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "" | | locationAccurate | false |
|
| | 22 | | parsed | | entry | "6002" | | detail | "leadership" | | explanation | "The text mentions Prince Lilith (Luxuria) and Prince Mammon (Avaros) as involved with the Crimson Court, but the codex states the Crimson Court's leadership is a council of seven demon lords representing each circle of Hel, with no direct mention of Lilith or Mammon as primary figures." | | paragraph | 1 | | substring | "Lucien drawled, leaning on his mahogany cane. 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 | "the Crimson Court's base of operations has shifted from Dymas to Irath" | | locationAccurate | false |
| | closestExpected | | entry | "6002" | | detail | "headquarters" | | summary | "The Crimson Court's headquarters is in Dymas per codex, but Lucien says their base has shifted to Irath." |
| | reason | "detail mismatch: got \"leadership\", expected \"headquarters\"" |
| | 23 | | parsed | | entry | "4424" | | detail | "age" | | explanation | "The codex states Isolde is **300 years old**, but the text does not contradict this." | | paragraph | 1 | | substring | "Isolde's pale blue eyes widening" |
| | 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 \"age\", expected \"eyeColor\"" |
| | 24 | | parsed | | entry | "4424" | | detail | "eyeColor" | | explanation | "The codex states Isolde's eyes are **pale lavender**, but the text describes them as **pale blue**." | | paragraph | 1 | | substring | "Isolde stepped forward, her pale blue eyes widening" |
| | 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 | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "Her pale blue eyes, unblinking" | | locationAccurate | false |
|
| | 25 | | parsed | | entry | "4424" | | detail | "footprints" | | explanation | "The codex states Isolde leaves **no footprints**, but the text describes her leaving 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 |
|
| | 26 | | parsed | | entry | "4424" | | detail | "speech" | | explanation | "The codex states Isolde **speaks in riddles**, but the text describes her as intoning normally." | | paragraph | 1 | | substring | "Isolde intoned, her bare feet leaving clear prints" |
| | 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\"" |
| | 27 | | parsed | | entry | "7005" | | detail | "" | | explanation | "The text states the Heartstone was forged in **Avaros**, but the codex confirms it originates from **Dymas**." | | paragraph | 1 | | substring | "The Heartstone was forged in Avaros" |
| | 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 \"7005\", expected \"861\"" |
| | 28 | | parsed | | entry | "2006" | | detail | "givenTo" | | explanation | "The text incorrectly attributes the Heartstone to Aurora, but the codex states it was given to Aurora by an **unknown benefactor** (not Isolde)." | | paragraph | 1 | | substring | "Rory felt the Heartstone Pulse in her pocket" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "the Fae-Forged Blade warm at her hip" | | locationAccurate | false |
| | closestExpected | | entry | "2006" | | detail | "temperature" | | summary | "The Fae-Forged Blade is always cold per codex, but the passage says warm." |
| | reason | "detail mismatch: got \"givenTo\", expected \"temperature\"" |
| | 29 | | parsed | | entry | "2006" | | detail | "givenTo" | | explanation | "The codex explicitly states the Fae-Forged Blade was **given to Aurora by Isolde**, but the text states Aurora \"strapped it there that morning\" without mentioning Isolde." | | paragraph | 1 | | substring | "Rory felt the Heartstone Pulse in her pocket" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "the Fae-Forged Blade warm at her hip" | | locationAccurate | false |
| | closestExpected | | entry | "2006" | | detail | "temperature" | | summary | "The Fae-Forged Blade is always cold per codex, but the passage says warm." |
| | reason | "detail mismatch: got \"givenTo\", expected \"temperature\"" |
| | 30 | | parsed | | entry | "7003" | | detail | "peakActivity" | | explanation | "The codex states rift points are most active during the **winter solstice**, but the text implies the solstice is imminent." | | paragraph | 1 | | substring | "The Veil shimmered — thin as gossamer, and getting thinner by the hour" |
| | status | "false_positive" | | location | | extractedText | "[not found in paragraph 1]" | | inBounds | true | | expectedText | "" | | locationAccurate | false |
|
| | 31 | | parsed | | entry | "7003" | | detail | "peakActivity" | | explanation | "The text states the solstice is the trigger for the rift activity, but the codex specifies **winter solstice** as the peak activity time." | | 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 |
|
| | 32 | | parsed | | entry | "4416" | | detail | "" | | explanation | "No direct contradiction for Detective Quinn, but the text incorrectly implies Quinn is part of the group discussing the Veil's thinning." | | paragraph | 1 | | substring | "The Veil shimmered — thin as gossamer, and getting thinner by the hour" |
| | 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 \"4416\", expected \"861\"" |
|
| |