{
 "schema_version": "1.0",
 "page_kind": "article",
 "pack_kind": "generate",
 "slug": "reciprocal-rank-fusion",
 "title": "Reciprocal rank fusion",
 "dek": "Reciprocal rank fusion merges two or more ranked lists of search results into one, using only each result's position in each list and never its score. Many search engines use it to combine keyword search with search by meaning. This page gives the formula with an example you can check by hand, where its constant of 60 came from, the methods before it, where it runs today, what it cannot do, what it did on three of our own benches, and what one paper of May 2026 measured on a related task.",
 "published": "2026-11-09",
 "series": [
  "guide"
 ],
 "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/reciprocal-rank-fusion/",
  "md_url": "https://research.strata2signal.com/reciprocal-rank-fusion/index.md",
  "md_sha": "5405c72dee0fccfba4a4e853794f5028730b1ad3a605e9f4c58d96e914bc13bb",
  "html_sha": "d15e37f3649c037ca20ee95a9f699e75dfe35f04233c8b0acb00b475a4f32111",
  "anchors_sha": "c0f713d5e78ded5c46d802be65df9850f516365273d4a13bcf9272228e0a107e"
 },
 "short": {
  "paragraph": "Two searches over the same documents return two ranked lists whose scores are in different units, like a temperature and a price. Reciprocal rank fusion (RRF) throws the scores away: each list gives each result 1 / (60 + its position), the points are added, and the highest total comes first. It comes from a two-page paper of 2009 whose authors fixed the 60 in a pilot run. On two of our benches where one list was much stronger, fusion beat the weaker list and never the stronger; on a public chat-memory benchmark, where the lists were close, it lifted keyword search from 400 to 409 of 470 questions with one embedding model, which the registered test read as no material difference, and to 417 with another (no registered test). A later run added a learned-sparse list (keyword search with learned weights) on the same questions: 416 of 470 alone and 417 to 425 fused, and all five of its comparisons registered in advance, sparse against keyword search alone among them, read no material difference, which the registration says is not the same as equal.",
  "from_dek": false,
  "counts": {
   "words": 4928,
   "minutes": 22,
   "tables": 4,
   "kit": true
  },
  "bullets": []
 },
 "sections": [
  {
   "id": "what-it-does",
   "heading": "What it does",
   "level": 2,
   "span": [
    4814,
    5532
   ],
   "chunks": [
    [
     4814,
     5532
    ]
   ],
   "chars": 718,
   "digest": "keyword search finds exact names or numbers while embedding models find paraphrases. merging these lists via RRF avoids mixing different score units by using positions to vote for results. RuleSage uses this method to merge keyword and embedding lists before a slower model re-reads the shortlist.",
   "digest_skipped": null
  },
  {
   "id": "the-formula-by-hand",
   "heading": "The formula, by hand",
   "level": 2,
   "span": [
    5532,
    6896
   ],
   "chunks": [
    [
     5532,
     6896
    ]
   ],
   "chars": 1364,
   "digest": "the RRF score for a result is the sum of 1 / (k + rank) for every list it appears in. with k = 60, a result appearing in both lists can beat a lone first place. a larger k flattens the points, making appearing in both lists the main way up.",
   "digest_skipped": null
  },
  {
   "id": "why-60",
   "heading": "Why 60",
   "level": 2,
   "span": [
    6896,
    8582
   ],
   "chunks": [
    [
     6896,
     8582
    ]
   ],
   "chars": 1686,
   "digest": null,
   "digest_skipped": null
  },
  {
   "id": "where-it-came-from",
   "heading": "Where it came from",
   "level": 2,
   "span": [
    8582,
    11104
   ],
   "chunks": [
    [
     8582,
     11104
    ]
   ],
   "chars": 2522,
   "digest": null,
   "digest_skipped": null
  },
  {
   "id": "where-it-runs-today",
   "heading": "Where it runs today",
   "level": 2,
   "span": [
    11104,
    13736
   ],
   "chunks": [
    [
     11104,
     13736
    ]
   ],
   "chars": 2632,
   "digest": "various engines like Elasticsearch, OpenSearch, and MongoDB use RRF with a default k of 60. Qdrant uses a default k of 2 and zero-based ranks. Weaviate uses RRF but has moved to relative score fusion as its default from v1.24.",
   "digest_skipped": null
  },
  {
   "id": "what-it-cannot-do",
   "heading": "What it cannot do",
   "level": 2,
   "span": [
    13736,
    15511
   ],
   "chunks": [
    [
     13736,
     15511
    ]
   ],
   "chars": 1775,
   "digest": "RRF ignores score gaps and can result in ties. a list's depth also decides who can score, as results beyond a cut-off get nothing. additionally, a tuned combination like CC can outperform RRF in certain settings.",
   "digest_skipped": null
  },
  {
   "id": "our-benches",
   "heading": "What it did on our benches",
   "level": 2,
   "span": [
    15511,
    25457
   ],
   "chunks": [
    [
     15511,
     25457
    ]
   ],
   "chars": 9946,
   "digest": null,
   "digest_skipped": null
  },
  {
   "id": "an-outside-reading",
   "heading": "An outside reading on the same benchmark",
   "level": 2,
   "span": [
    25457,
    27705
   ],
   "chunks": [
    [
     25457,
     27705
    ]
   ],
   "chars": 2248,
   "digest": null,
   "digest_skipped": null
  },
  {
   "id": "what-this-page-does-not-say",
   "heading": "What this page does not say",
   "level": 2,
   "span": [
    27705,
    28574
   ],
   "chunks": [
    [
     27705,
     28574
    ]
   ],
   "chars": 869,
   "digest": null,
   "digest_skipped": null
  },
  {
   "id": "what-to-take-with-you",
   "heading": "What to take with you",
   "level": 2,
   "span": [
    28574,
    29507
   ],
   "chunks": [
    [
     28574,
     29507
    ]
   ],
   "chars": 933,
   "digest": "RRF is arithmetic on positions that rewards agreement and loses score gaps. the value 60 is a pilot's setting rather than a law. on the benches described, fusing a much weaker list did not beat the stronger list.",
   "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": [
    29507,
    30070
   ],
   "chunks": [
    [
     29507,
     30070
    ]
   ],
   "chars": 563,
   "digest": null,
   "digest_skipped": "credits"
  },
  {
   "id": "the-rest-of-the-seminar",
   "heading": "The rest of the seminar",
   "level": 2,
   "span": [
    30070,
    31379
   ],
   "chunks": [
    [
     30070,
     31379
    ]
   ],
   "chars": 1309,
   "digest": null,
   "digest_skipped": "credits"
  },
  {
   "id": "who-ran-this-and-thanks",
   "heading": "Who ran this, and thanks",
   "level": 2,
   "span": [
    31379,
    31774
   ],
   "chunks": [
    [
     31379,
     31774
    ]
   ],
   "chars": 395,
   "digest": null,
   "digest_skipped": "credits"
  },
  {
   "id": "sources",
   "heading": "Sources",
   "level": 2,
   "span": [
    31774,
    34624
   ],
   "chunks": [
    [
     31774,
     34624
    ]
   ],
   "chars": 2850,
   "digest": "the sources include papers from SIGIR, TREC, and arXiv, as well as documentation from various search engines. all were read on specific dates in 2026, with some exceptions for the May 2026 paper and the learned-sparse model's card.",
   "digest_skipped": null
  }
 ],
 "chips": [
  {
   "id": "c-e8806c65",
   "q": "how does reciprocal rank fusion combine different search results?",
   "a": "It ignores individual scores and instead uses the position of results. Each list votes for its results by position, the votes are added, and the totals determine the merged order.",
   "cites": [
    "what-it-does"
   ],
   "published": false,
   "publish_state": "held",
   "quote": "",
   "quote_cite": ""
  },
  {
   "id": "c-f7429d7a",
   "q": "how is the rrf score calculated for a specific result?",
   "a": "For each result d, the score is the sum over lists of 1 / (k + rank of d in that list).",
   "cites": [
    "the-formula-by-hand"
   ],
   "published": false,
   "publish_state": "held",
   "quote": "",
   "quote_cite": ""
  },
  {
   "id": "c-ca0e473f",
   "q": "which historical voting rules relate to merging rankings?",
   "a": "The process is compared to Jean-Charles de Borda's count from 1781 and the Marquis de Condorcet's rule from 1785.",
   "cites": [
    "where-it-came-from"
   ],
   "published": false,
   "publish_state": "held",
   "quote": "",
   "quote_cite": ""
  },
  {
   "id": "c-0eebfada",
   "q": "what information does the rrf algorithm discard?",
   "a": "It ignores score gaps and the distribution of scores because it is a function of ranks. This means a result that won its list by a mile and one that won by a hair both receive the same score.",
   "cites": [
    "what-it-cannot-do"
   ],
   "published": false,
   "publish_state": "held",
   "quote": "",
   "quote_cite": ""
  },
  {
   "id": "c-789673a4",
   "q": "what was the result of the longmemeval-s benchmark tests?",
   "a": "In one registered test, the fusion of BM25 and nomic-embed-text scored 409 of 470, compared to 400 for BM25 alone. A three-way fusion reached 425, though all registered comparisons read no material difference.",
   "cites": [
    "our-benches"
   ],
   "published": false,
   "publish_state": "held",
   "quote": "",
   "quote_cite": ""
  },
  {
   "id": "c-a91a66f4",
   "q": "what limitations does the article place on its own findings?",
   "a": "The article does not claim RRF is the best fusion, does not grade answers, does not claim 60 is universally correct, and does not provide information about the eight engines beyond their documentation.",
   "cites": [
    "what-this-page-does-not-say"
   ],
   "published": false,
   "publish_state": "held",
   "quote": "",
   "quote_cite": ""
  }
 ],
 "related": [
  {
   "slug": "three-librarians",
   "why": "shares ground with § The formula, by hand · § The election"
  },
  {
   "slug": "elo-ratings-explained",
   "why": "shares ground with § The formula, by hand · § How a rating moves"
  },
  {
   "slug": "embeddinggemma-2-on-release-day",
   "why": "shares ground with § What it does · § What to take with you"
  }
 ],
 "thanks": "## Who ran this, and thanks {#who-ran-this-and-thanks}\n\nThis page stands on the authors of every paper cited here, on deep-recall's and LongMemEval's authors, and on the teams who document their engines plainly enough to quote. A small human team asked for it and chose what it would cover; a fleet of AI agents read the sources, computed the examples and drafted it under that team's rulings.",
 "kit": {
  "url": "https://research.strata2signal.com/reciprocal-rank-fusion/data/",
  "licence": "CC BY 4.0",
  "files": [
   "README.md",
   "SHA256SUMS",
   "learned-sparse-2026-11-07/full-s1/control-card.json",
   "learned-sparse-2026-11-07/full-s1/fuse/F1.rows.ndjson",
   "learned-sparse-2026-11-07/full-s1/fuse/F1h.rows.ndjson",
   "learned-sparse-2026-11-07/full-s1/fuse/F2.rows.ndjson",
   "learned-sparse-2026-11-07/full-s1/fuse/F2h.rows.ndjson",
   "learned-sparse-2026-11-07/full-s1/fuse/F3.rows.ndjson",
   "learned-sparse-2026-11-07/full-s1/fuse/F3h.rows.ndjson",
   "learned-sparse-2026-11-07/full-s1/fuse/fuse.json",
   "learned-sparse-2026-11-07/full-s1/run/rows.ndjson",
   "learned-sparse-2026-11-07/full-s1/run/run.json",
   "learned-sparse-2026-11-07/full-s1/run/summary.json",
   "learned-sparse-2026-11-07/full-s1/score/family.json",
   "learned-sparse-2026-11-07/full-s1/score/reading.json",
   "learned-sparse-2026-11-07/full-s1/score/rescore-F1.json",
   "learned-sparse-2026-11-07/full-s1/score/rescore-F1h.json",
   "learned-sparse-2026-11-07/full-s1/score/rescore-F2.json",
   "learned-sparse-2026-11-07/full-s1/score/rescore-F2h.json",
   "learned-sparse-2026-11-07/full-s1/score/rescore-F3.json",
   "learned-sparse-2026-11-07/full-s1/score/rescore-F3h.json",
   "learned-sparse-2026-11-07/full-s1/score/rescore-s1.json",
   "learned-sparse-2026-11-07/s2-skip.json",
   "longmemeval-2026-10/a0/a0-per-question.tsv",
   "longmemeval-2026-10/a0/run/rows.ndjson",
   "longmemeval-2026-10/a0/run/run.json",
   "longmemeval-2026-10/a5/a5-per-question.tsv",
   "longmemeval-2026-10/a5/run/legs.ndjson",
   "longmemeval-2026-10/a5/run/rows.ndjson",
   "longmemeval-2026-10/a5/run/run.json",
   "longmemeval-2026-10/w7/rows/a1/legs.ndjson",
   "longmemeval-2026-10/w7/rows/a1/run.json",
   "longmemeval-2026-10/w7/rows/a2/a2.ndjson",
   "longmemeval-2026-10/w7/rows/a2/run.json",
   "longmemeval-2026-10/w7/score-registered-w7.json",
   "longmemeval-2026-10/w7/w7-per-question.tsv"
  ]
 },
 "seat_class": {
  "writer": "gemma-class",
  "judge": null,
  "writer_runtime": "vllm"
 },
 "bench": {
  "bullets_written": 3,
  "bullets_kept": 0,
  "digests_written": 11,
  "digests_kept": 6,
  "chips_written": 8,
  "chips_kept": 6,
  "chips_grounded": 0,
  "chips_published": 0,
  "dropped_by": {
   "new_noun": 0,
   "figure": 0,
   "length": 0,
   "cite": 0,
   "judge": 0,
   "quote": 0,
   "directive": 0,
   "redaction": 0,
   "profanity": 0,
   "identifier": 0,
   "bare_figure": 0,
   "house_voice": 0,
   "editorial": 0,
   "hand-edit": 10
  },
  "new_noun_tokens_checked": [
   "0.016393",
   "0.2147",
   "1",
   "1.23",
   "1781",
   "1785",
   "2",
   "2009",
   "2026",
   "400",
   "409",
   "416",
   "417",
   "425",
   "470",
   "56",
   "59",
   "60",
   "AI",
   "Azure",
   "B",
   "BGE-small",
   "BM25",
   "Borda's",
   "CC",
   "Clarke",
   "CombMNZ",
   "Condorcet",
   "Condorcet's",
   "Cormack",
   "Elasticsearch",
   "EmbeddingGemma",
   "Jean-Charles",
   "LongMemEval's",
   "LongMemEval-S",
   "Marquis",
   "May",
   "Milvus",
   "MongoDB",
   "OpenSearch",
   "RRF",
   "SIGIR",
   "Search",
   "TREC",
   "Vespa",
   "Weaviate",
   "v1.24"
  ],
  "new_noun_tokens_withheld": 0,
  "figure_definition": "v3",
  "figure_boundary": "guarded",
  "drops": [
   {
    "kind": "bullet",
    "reason": "hand-edit",
    "item": null,
    "item_chars": 99,
    "text_sha": "d8f18ff3c9ce",
    "figure": "0.016393",
    "withheld": "one bullet removed from this pack by hand",
    "removed_utc": "2026-11-09",
    "why": "a context reading, not a finding: the worked example's point is that C (0.032002, found by both searches) beats A (0.016393, first in one list only); the line prints A's score alone, without the comparison that gives it a meaning (exhibit 103's E6, as exhibits 104 and 105 applied it)",
    "detail": "Carried forward by --carry-hand-edits on 2026-11-09: the writer produced this line again and the pack on disk records it removed by hand on 2026-11-09 (matched on its terminal figure). The earlier record reads: removed from this pack by hand on 2026-11-09 (UTC), after the writer ran and after the gates had counted: a context reading, not a finding: the worked example's point is that C (0.032002, found by both searches) beats A (0.016393, first in one list only); the line prints A's score alone, without the comparison that gives it a meaning (exhibit 103's E6, as exhibits 104 and 105 applied it). Not a g…"
   },
   {
    "kind": "digest",
    "reason": "hand-edit",
    "item": null,
    "item_chars": 250,
    "text_sha": "f0d1cdbc69bc",
    "section": "where-it-came-from",
    "withheld": "one section digest removed from this pack by hand",
    "removed_utc": "2026-11-09",
    "why": "it adds a claim the section does not make, that RRF 'was inspired by eighteenth-century voting rules and earlier combination methods' (the section sets the methods before it side by side and says nothing of inspiration), and it drops the exceptions to 'outperformed … CombMNZ': 6 of 7 pilots, and CombMNZ edged it on TREC 3 and the LETOR 3 set",
    "detail": "Carried forward by --carry-hand-edits on 2026-11-09: the writer produced this line again and the pack on disk records it removed by hand on 2026-11-09 (matched on its section). The earlier record reads: removed from this pack by hand on 2026-11-09 (UTC), after the writer ran and after the gates had counted: it adds a claim the section does not make, that RRF 'was inspired by eighteenth-century voting rules and earlier combination methods' (the section sets the methods before it side by side and says nothing of inspiration), and it drops the exceptions to 'outperformed … CombMNZ': 6 of 7 pilots, …"
   },
   {
    "kind": "digest",
    "reason": "hand-edit",
    "item": null,
    "item_chars": 262,
    "text_sha": "18b074b03977",
    "section": "our-benches",
    "withheld": "one section digest removed from this pack by hand",
    "removed_utc": "2026-11-09",
    "why": "it misreads the 425 (the fusion of all three lists, the learned-sparse one, BM25 and nomic-embed-text, not a sparse list added to the BGE-small fusion of the sentence before) and drops every condition the section gives: the 417 had no registered test, all five registered comparisons around the 425 read no material difference, and on the 68 claims BM25 alone found 58, so the fused 56 is below it, the section's finding where one list was much stronger",
    "detail": "Carried forward by --carry-hand-edits on 2026-11-09: the writer produced this line again and the pack on disk records it removed by hand on 2026-11-09 (matched on its section). The earlier record reads: removed from this pack by hand on 2026-11-09 (UTC), after the writer ran and after the gates had counted: it misreads the 425 (the fusion of all three lists, the learned-sparse one, BM25 and nomic-embed-text, not a sparse list added to the BGE-small fusion of the sentence before) and drops every condition the section gives: the 417 had no registered test, all five registered comparisons around th…"
   },
   {
    "kind": "digest",
    "reason": "hand-edit",
    "item": null,
    "item_chars": 295,
    "text_sha": "93d0e1fb1e9c",
    "section": "an-outside-reading",
    "withheld": "one section digest removed from this pack by hand",
    "removed_utc": "2026-11-09",
    "why": "it drops the condition the section gives the ten pairs, results returned inline; with results written to files, vector retrieval led in five of ten (the overclaim CHECK-v7's MUST M-1 folded out of the page)",
    "detail": "Carried forward by --carry-hand-edits on 2026-11-09: the writer produced this line again and the pack on disk records it removed by hand on 2026-11-09 (matched on its section). The earlier record reads: removed from this pack by hand on 2026-11-09 (UTC), after the writer ran and after the gates had counted: it drops the condition the section gives the ten pairs, results returned inline; with results written to files, vector retrieval led in five of ten (the overclaim CHECK-v7's MUST M-1 folded out of the page). Not a gate drop, and recorded here so the ledger adds up."
   },
   {
    "kind": "chip",
    "reason": "hand-edit",
    "item": null,
    "item_chars": 259,
    "text_sha": "80565081dfaa",
    "chip_id": "c-4b50128d",
    "withheld": "one chip removed from this pack by hand",
    "removed_utc": "2026-11-09",
    "why": "its question asks what supports k = 60 and its answer gives the paper's sentence about the constant k in general, where the page says the paper 'derives nothing about 60' and fixed it during a pilot",
    "detail": "Carried forward by --carry-hand-edits on 2026-11-09: the writer produced this line again and the pack on disk records it removed by hand on 2026-11-09 (matched on its line key). The earlier record reads: removed from this pack by hand on 2026-11-09 (UTC), after the writer ran and after the gates had counted: its question asks what supports k = 60 and its answer gives the paper's sentence about the constant k in general, where the page says the paper 'derives nothing about 60' and fixed it during a pilot. Not a gate drop, and recorded here so the ledger adds up."
   },
   {
    "kind": "bullet",
    "reason": "hand-edit",
    "item": null,
    "item_chars": 41,
    "text_sha": "18203ff37113",
    "figure": "416",
    "withheld": "one bullet removed from this pack by hand",
    "removed_utc": "2026-11-09",
    "why": "it drops every condition the page gives the figure: the 416 is every@5 of 470, against 400 for keyword search alone, a gain of 16 that the registered comparison read as NO MATERIAL DIFFERENCE, which the registration says 'is not the same as equal'; alone, with no denominator, no comparison and no verdict, the line reads as a finding it is not (exhibit 103's E6, as exhibits 104 and 105 applied it)",
    "detail": "removed from this pack by hand on 2026-11-09 (UTC), after the writer ran and after the gates had counted: it drops every condition the page gives the figure: the 416 is every@5 of 470, against 400 for keyword search alone, a gain of 16 that the registered comparison read as NO MATERIAL DIFFERENCE, which the registration says 'is not the same as equal'; alone, with no denominator, no comparison and no verdict, the line reads as a finding it is not (exhibit 103's E6, as exhibits 104 and 105 applied it). Not a gate drop, and recorded here so the ledger adds up."
   },
   {
    "kind": "bullet",
    "reason": "hand-edit",
    "item": null,
    "item_chars": 57,
    "text_sha": "66d65620ee77",
    "figure": "0.2147",
    "withheld": "one bullet removed from this pack by hand",
    "removed_utc": "2026-11-09",
    "why": "it drops the condition the page gives the figure, the same claim the v1 hand-read took out as 'the highest fusion score in the table was recorded at k = 80', re-composed on its score: Table 1's 0.2147 at k = 80 stands beside 0.2145 at k = 60, in a pilot the paper says found 60 near-optimal and the choice 'not critical'; alone, the line reads as if a k other than 60 won, and 'the table' names no table",
    "detail": "removed from this pack by hand on 2026-11-09 (UTC), after the writer ran and after the gates had counted: it drops the condition the page gives the figure, the same claim the v1 hand-read took out as 'the highest fusion score in the table was recorded at k = 80', re-composed on its score: Table 1's 0.2147 at k = 80 stands beside 0.2145 at k = 60, in a pilot the paper says found 60 near-optimal and the choice 'not critical'; alone, the line reads as if a k other than 60 won, and 'the table' names no table. Not a gate drop, and recorded here so the ledger adds up."
   },
   {
    "kind": "digest",
    "reason": "hand-edit",
    "item": null,
    "item_chars": 301,
    "text_sha": "5edc8a3b22b4",
    "section": "why-60",
    "withheld": "one section digest removed from this pack by hand",
    "removed_utc": "2026-11-09",
    "why": "it inverts the section's framing of the engines: the section says 'The engines' own words differ from the paper's' (Azure: 'such as 60', from its own experiments; MongoDB: a parameter 'MongoDB determined'), and the digest says the engines 'suggest similar values', which reads as corroboration of 60; and it leaves out the section's 'It derives nothing about 60', the page's case that 60 is a pilot's setting, not a law (the release audit's N-2 rule)",
    "detail": "removed from this pack by hand on 2026-11-09 (UTC), after the writer ran and after the gates had counted: it inverts the section's framing of the engines: the section says 'The engines' own words differ from the paper's' (Azure: 'such as 60', from its own experiments; MongoDB: a parameter 'MongoDB determined'), and the digest says the engines 'suggest similar values', which reads as corroboration of 60; and it leaves out the section's 'It derives nothing about 60', the page's case that 60 is a pilot's setting, not a law (the release audit's N-2 rule). Not a gate drop, and recorded here so the ledger adds up."
   },
   {
    "kind": "digest",
    "reason": "hand-edit",
    "item": null,
    "item_chars": 241,
    "text_sha": "3d84f775b456",
    "section": "what-this-page-does-not-say",
    "withheld": "one section digest removed from this pack by hand",
    "removed_utc": "2026-11-09",
    "why": "it misstates two of the page's own limits: the page does not say 'That 60 is right or wrong anywhere', where the digest has it decline only to call 60 'the only correct k'; and the page does not say 'What the 1781 and 1785 originals say' (it read Aslam and Montague's summaries), where the digest says it gives no information about 'the original eighteenth-century voting rules', which 'Where it came from' describes",
    "detail": "removed from this pack by hand on 2026-11-09 (UTC), after the writer ran and after the gates had counted: it misstates two of the page's own limits: the page does not say 'That 60 is right or wrong anywhere', where the digest has it decline only to call 60 'the only correct k'; and the page does not say 'What the 1781 and 1785 originals say' (it read Aslam and Montague's summaries), where the digest says it gives no information about 'the original eighteenth-century voting rules', which 'Where it came from' describes. Not a gate drop, and recorded here so the ledger adds up."
   },
   {
    "kind": "chip",
    "reason": "hand-edit",
    "item": null,
    "item_chars": 219,
    "text_sha": "7d242c996624",
    "chip_id": "c-2f05b9db",
    "withheld": "one chip removed from this pack by hand",
    "removed_utc": "2026-11-09",
    "why": "its question asserts what the page does not, a default k for 'most search engines' (the page reads eight engines' documentation and says six of the eight set 60), and its answer says Weaviate 'used 60 for versions 1.23 and lower', where the page says Weaviate's ranked fusion scores 1/(RANK + 60) and stopped being the default fusion from v1.24: the default fusion moved, not the k",
    "detail": "removed from this pack by hand on 2026-11-09 (UTC), after the writer ran and after the gates had counted: its question asserts what the page does not, a default k for 'most search engines' (the page reads eight engines' documentation and says six of the eight set 60), and its answer says Weaviate 'used 60 for versions 1.23 and lower', where the page says Weaviate's ranked fusion scores 1/(RANK + 60) and stopped being the default fusion from v1.24: the default fusion moved, not the k. Not a gate drop, and recorded here so the ledger adds up."
   }
  ]
 },
 "generated_utc": "2026-11-09T16:45:05Z"
}
