{
 "schema_version": "1.0",
 "page_kind": "article",
 "pack_kind": "generate",
 "slug": "three-librarians",
 "title": "Three librarians and a careful reader — how RuleSage finds the right page",
 "dek": "Before RuleSage answers, something has to find the right page in a book the size of a small novel — three searchers, one referee, one careful reader, and none of them is the model that writes your answer. The whole journey, in plain english, with the shipped numbers.",
 "published": "2026-08-18",
 "series": [
  "guide",
  "notes"
 ],
 "licence": "CC BY 4.0",
 "status": "pending-judge",
 "pack_note": "no judge is seated, so every chip is held",
 "notice": "items with published:false are held and are not this page's published words",
 "source": {
  "url": "https://research.strata2signal.com/three-librarians/",
  "md_url": "https://research.strata2signal.com/three-librarians/index.md",
  "md_sha": "0913346e4301af26e664febf18fde8c3f25af28da3ff1a23ecca41b5a35a6596",
  "html_sha": "cf9b1e5aface40cdc94a3a4aee60457a451fce19bb00aaa3f2a50339d475bb52",
  "anchors_sha": "1fa53f3d35742d5c71afb148de4eb5b3b939ee4dbc162d70ba9e3edbbfc89d33"
 },
 "short": {
  "paragraph": "Before RuleSage answers, something has to find the right page in a book the size of a small novel - three searchers, one referee, one careful reader, and none of them is the model that writes your answer. The whole journey, in plain english, with the shipped numbers.",
  "from_dek": true,
  "counts": {
   "words": 3977,
   "minutes": 18,
   "tables": 1,
   "kit": false
  },
  "bullets": [
   {
    "text": "the map used by the embedder has 768",
    "figure": "768",
    "cite": "the-second-librarian-searches-by-meaning",
    "quote": "(Ours is a model called nomic-embed-text-v1.5, and its map has 768 directions - more than we can picture, and not needing to picture it is the point.) Passages about moving the robber land near each other on that map.",
    "span": [
     4672,
     4676
    ]
   },
   {
    "text": "the re-ranker reads a fixed budget of 1,200",
    "figure": "1,200",
    "cite": "the-careful-reader",
    "quote": "For each candidate it reads a fixed budget of 1,200 characters: about 595 from the opening, the final 600, and a five-character joiner between them.",
    "span": [
     11722,
     11728
    ]
   }
  ]
 },
 "sections": [
  {
   "id": "start-with-a-bad-idea",
   "heading": "Start with a bad idea",
   "level": 2,
   "span": [
    1572,
    2904
   ],
   "chunks": [
    [
     1572,
     2904
    ]
   ],
   "chars": 1332,
   "digest": "RuleSage is a board-game rules helper that answers questions by quoting rulebooks. Handing everything to a language model is a bad idea because it is slower, costlier, and likelier to drift. Instead, the system builds a shortlist of the few passages most likely to hold the answer.",
   "digest_skipped": null
  },
  {
   "id": "the-first-librarian-searches-for-your-exact-words",
   "heading": "The first librarian searches for your exact words",
   "level": 2,
   "span": [
    2904,
    4124
   ],
   "chunks": [
    [
     2904,
     4124
    ]
   ],
   "chars": 1220,
   "digest": "The first librarian uses full-text search via Postgres to find exact words. She is effective when the user's vocabulary matches the book, but she cannot understand meaning or synonyms, such as mistaking a thief for a robber.",
   "digest_skipped": null
  },
  {
   "id": "the-second-librarian-searches-by-meaning",
   "heading": "The second librarian searches by meaning",
   "level": 2,
   "span": [
    4124,
    6018
   ],
   "chunks": [
    [
     4124,
     6018
    ]
   ],
   "chars": 1894,
   "digest": "The second librarian uses semantic search and embeddings to find passages based on meaning. Using nomic-embed-text-v1.5, she finds passages that are similar in meaning even if they share no words, though she can lack precision at close range.",
   "digest_skipped": null
  },
  {
   "id": "the-third-librarian-never-left-your-aisle",
   "heading": "The third librarian never left your aisle",
   "level": 2,
   "span": [
    6018,
    7678
   ],
   "chunks": [
    [
     6018,
     7678
    ]
   ],
   "chars": 1660,
   "digest": "The third librarian searches only within the specific game's books and errata. She provides up to thirty-two candidates, with corrections taking priority. Her influence is managed by a budget and voting weight to ensure she does not crowd out other searchers.",
   "digest_skipped": null
  },
  {
   "id": "the-election",
   "heading": "The election",
   "level": 2,
   "span": [
    7678,
    10274
   ],
   "chunks": [
    [
     7678,
     10274
    ]
   ],
   "chars": 2596,
   "digest": "The election uses reciprocal-rank fusion to combine different search results. It uses a formula, 1 / (60 + rank), where 60 is the fusion constant k. This method prioritizes consensus across different search arms over a single high ranking.",
   "digest_skipped": null
  },
  {
   "id": "the-careful-reader",
   "heading": "The careful reader",
   "level": 2,
   "span": [
    10274,
    12785
   ],
   "chunks": [
    [
     10274,
     12785
    ]
   ],
   "chars": 2511,
   "digest": "The re-ranker is a MiniLM cross-encoder that reads question and passage pairs together. It uses a fixed budget of 1,200 characters, covering the opening and the tail, to select the best eight passages for the answering model.",
   "digest_skipped": null
  },
  {
   "id": "the-order-is-dealt-on-purpose",
   "heading": "The order is dealt on purpose",
   "level": 2,
   "span": [
    12785,
    13772
   ],
   "chunks": [
    [
     12785,
     13772
    ]
   ],
   "chars": 987,
   "digest": "The eight surviving passages are provided to the answering model in a specific order to avoid the lost in the middle effect. The strongest passages are placed at the top and bottom of the stack, with the weakest in the middle.",
   "digest_skipped": null
  },
  {
   "id": "the-doorman-stands-off-this-road-entirely",
   "heading": "The doorman stands off this road entirely",
   "level": 2,
   "span": [
    13772,
    15587
   ],
   "chunks": [
    [
     13772,
     15587
    ]
   ],
   "chars": 1815,
   "digest": "A doorman model, qwen3.8:27b, decides whether a question can be rendered publicly. It does not touch the answer; it only determines if a question is clear to render or must be held for a person to look at.",
   "digest_skipped": null
  },
  {
   "id": "the-nerd-shelf-the-numbers-from-the-shipped-configuration",
   "heading": "The nerd shelf — the numbers, from the shipped configuration",
   "level": 2,
   "span": [
    15587,
    16962
   ],
   "chunks": [
    [
     15587,
     16962
    ]
   ],
   "chars": 1375,
   "digest": "This section provides technical specifications for the shipped configuration, including the 768 dimensions of the embedder, the 22 MB re-ranker, and the 1,200 character scored window.",
   "digest_skipped": null
  },
  {
   "id": "a-confession-with-its-receipt",
   "heading": "A confession, with its receipt",
   "level": 2,
   "span": [
    16962,
    18723
   ],
   "chunks": [
    [
     16962,
     18723
    ]
   ],
   "chars": 1761,
   "digest": "The system previously used a hardcoded fused-score ceiling of 0.0328, which caused errors when three arms were used. The ceiling is now derived using the formula arms/(k+1) to ensure accuracy.",
   "digest_skipped": null
  },
  {
   "id": "what-this-machinery-gets-wrong",
   "heading": "What this machinery gets wrong",
   "level": 2,
   "span": [
    18723,
    19974
   ],
   "chunks": [
    [
     18723,
     19974
    ]
   ],
   "chars": 1251,
   "digest": "The machinery has permanent failure modes, such as an abstain occurring when the shortlist misses a rule. Other issues include passages being cut by machine and the fact that the re-ranker only ranks rather than verifies.",
   "digest_skipped": null
  },
  {
   "id": "what-to-take-with-you",
   "heading": "What to take with you",
   "level": 2,
   "span": [
    19974,
    21009
   ],
   "chunks": [
    [
     19974,
     21009
    ]
   ],
   "chars": 1035,
   "digest": "Finding the right page requires three skills: exact-words search, meaning search, and the aisle arm. The election uses reciprocal-rank fusion, and the careful reader uses a 1,200-character window to score the shortlist.",
   "digest_skipped": null
  },
  {
   "id": "how-to-check-our-work-and-see-it-live",
   "heading": "How to check our work — and see it live",
   "level": 2,
   "span": [
    21009,
    22351
   ],
   "chunks": [
    [
     21009,
     22351
    ]
   ],
   "chars": 1342,
   "digest": null,
   "digest_skipped": "credits"
  },
  {
   "id": "the-rest-of-the-seminar",
   "heading": "The rest of the seminar",
   "level": 2,
   "span": [
    22351,
    23597
   ],
   "chunks": [
    [
     22351,
     23597
    ]
   ],
   "chars": 1246,
   "digest": null,
   "digest_skipped": "credits"
  }
 ],
 "chips": [
  {
   "id": "c-2875fe56",
   "q": "how does rulesage handle board game rule queries?",
   "a": "RuleSage acts as a board-game rules helper that answers questions by quoting actual rulebooks with page numbers attached. It avoids making confident guesses by stating \"not in the book\" when the text is silent, rather than handing the entire corpus to a language model at once.",
   "cites": [
    "start-with-a-bad-idea"
   ],
   "published": false,
   "publish_state": "held",
   "quote": "",
   "quote_cite": ""
  },
  {
   "id": "c-ddbd3420",
   "q": "what are the limitations of full-text search?",
   "a": "Full-text search is literal about vocabulary and struggles when a user's words differ from the book's words, such as using \"thief\" instead of \"robber.\" It also lacks the ability to rank results when a specific word appears in many different passages.",
   "cites": [
    "the-first-librarian-searches-for-your-exact-words"
   ],
   "published": false,
   "publish_state": "held",
   "quote": "",
   "quote_cite": ""
  },
  {
   "id": "c-f1084207",
   "q": "how does semantic search identify relevant passages?",
   "a": "Semantic search uses embeddings to assign passages coordinates on a map of meaning. This allows the system to find passages that are similar in meaning even if they do not share specific words, such as matching \"thief\" to \"robber.\"",
   "cites": [
    "the-second-librarian-searches-by-meaning"
   ],
   "published": false,
   "publish_state": "held",
   "quote": "",
   "quote_cite": ""
  },
  {
   "id": "c-f8917943",
   "q": "how does the aisle librarian prioritize content?",
   "a": "The aisle librarian focuses only on the specific game being queried. She selects passages from the relevant rulebook and any matched publisher errata, ranking them by meaning and ensuring that corrections can take priority if slots are limited.",
   "cites": [
    "the-third-librarian-never-left-your-aisle"
   ],
   "published": false,
   "publish_state": "held",
   "quote": "",
   "quote_cite": ""
  },
  {
   "id": "c-d16ea25b",
   "q": "how does reciprocal-rank fusion resolve different scoring methods?",
   "a": "Reciprocal-rank fusion (RRF) ignores original scores and uses only the rank position of each passage. It applies the formula 1 / (60 + rank) to each ballot, ensuring that consensus between different search methods outranks a single high-ranking result.",
   "cites": [
    "the-election"
   ],
   "published": false,
   "publish_state": "held",
   "quote": "",
   "quote_cite": ""
  },
  {
   "id": "c-b2b90f40",
   "q": "what role does the cross-encoder play in the pipeline?",
   "a": "The cross-encoder, a MiniLM model, acts as a re-ranker that reads a question and a passage together as a pair. It examines a 1,200-character window covering the opening and the tail of a passage to catch nuances that distance-based search might miss.",
   "cites": [
    "the-careful-reader"
   ],
   "published": false,
   "publish_state": "held",
   "quote": "",
   "quote_cite": ""
  },
  {
   "id": "c-1cd09bd5",
   "q": "how is the final list of passages ordered for the answering model?",
   "a": "To avoid the \"lost in the middle\" effect, the strongest passages are placed at the very top and very bottom of the context stack, while the weakest passages are buried in the middle.",
   "cites": [
    "the-order-is-dealt-on-purpose"
   ],
   "published": false,
   "publish_state": "held",
   "quote": "",
   "quote_cite": ""
  },
  {
   "id": "c-25ba2d63",
   "q": "what causes an abstain response from the system?",
   "a": "An abstain occurs when the answering model finds nothing useful in the provided shortlist. This can happen if the search arms fail to find the correct passages, even if the rulebook actually contains the answer.",
   "cites": [
    "what-this-machinery-gets-wrong"
   ],
   "published": false,
   "publish_state": "held",
   "quote": "",
   "quote_cite": ""
  }
 ],
 "related": [
  {
   "slug": "four-homes-for-one-reranker",
   "why": "shares ground with § The careful reader · § What a reranker does at a rules desk"
  },
  {
   "slug": "a-short-history-of-mistral",
   "why": "shares ground with § The doorman stands off this road entirely · § Where the doorman actually stands"
  },
  {
   "slug": "two-new-frontier-models-at-the-rules-desk",
   "why": "shares ground with § Start with a bad idea · § Two strangers at the door"
  }
 ],
 "thanks": "",
 "kit": null,
 "seat_class": {
  "writer": "gemma-class",
  "judge": null,
  "writer_runtime": "vllm"
 },
 "bench": {
  "bullets_written": 3,
  "bullets_kept": 2,
  "digests_written": 12,
  "digests_kept": 12,
  "chips_written": 8,
  "chips_kept": 8,
  "chips_grounded": 0,
  "chips_published": 0,
  "dropped_by": {
   "new_noun": 0,
   "figure": 1,
   "length": 0,
   "cite": 0,
   "judge": 0,
   "quote": 0,
   "directive": 0,
   "redaction": 0,
   "profanity": 0
  },
  "new_noun_tokens_checked": [
   "0.0328",
   "1",
   "200",
   "200-character",
   "22",
   "27b",
   "60",
   "768",
   "MB",
   "MiniLM",
   "Postgres",
   "RRF",
   "nomic-embed-text-v1.5",
   "qwen3.8"
  ],
  "new_noun_tokens_withheld": 0,
  "figure_definition": "v3",
  "drops": [
   {
    "kind": "bullet",
    "reason": "figure",
    "item": "the re-ranker is a small model named MiniLM trimmed to about 22 MB",
    "detail": "terminal token not verbatim in the cited span"
   }
  ]
 },
 "generated_utc": "2026-09-09T01:28:22Z"
}
