{"abstract":"Stopword position holes disappear from phrase matching.","category":"Search retrieval semantics","checks":7,"contract":"Given postings term->integer positions and query [term,relative position] pairs, report whether all terms share a start offset. Empty query is false.","contract_signature":"postings, query","evaluation_group":"model-c4d25e532ef7a8ef","failed_approach":"Requiring adjacent terms still ignores query holes retained by the analyzer.","family":"z-search-phrase-position-holes","id":"FA-11841","implementations":{"attempt":{"sha256":"2363fcc1de1109d5853118c53c2641a3c546d8b2f7c5ab046207656fa7eab0b8","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(postings, query):\n    return bool(query) and any(all(s+i in postings.get(t,[]) for i,(t,p) in enumerate(query)) for s in postings.get(query[0][0],[]))\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('retained hole', solve({'a':[N],'b':[N+2]}, [['a',0],['b',2]]), True)\ncheck('adjacency is wrong for hole', solve({'a':[N],'b':[N+1]}, [['a',0],['b',2]]), False)\ncheck('reversed order', solve({'a':[N+2],'b':[N]}, [['a',0],['b',2]]), False)\ncheck('later occurrence', solve({'a':[0,N+3],'b':[N+5]}, [['a',0],['b',2]]), True)\ncheck('missing term', solve({'a':[N]}, [['a',0],['b',2]]), False)\ncheck('empty query', solve({}, []), False)\ncheck('repeated term', solve({'a':[N,N+2]}, [['a',0],['a',2]]), True)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"broken":{"sha256":"df652a297a50d2cca23c80a30d621bb3e31e1258e0bcb03c2fcfb69aa065bcd1","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(postings, query):\n    return bool(query) and all(postings.get(t) for t,p in query)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('retained hole', solve({'a':[N],'b':[N+2]}, [['a',0],['b',2]]), True)\ncheck('adjacency is wrong for hole', solve({'a':[N],'b':[N+1]}, [['a',0],['b',2]]), False)\ncheck('reversed order', solve({'a':[N+2],'b':[N]}, [['a',0],['b',2]]), False)\ncheck('later occurrence', solve({'a':[0,N+3],'b':[N+5]}, [['a',0],['b',2]]), True)\ncheck('missing term', solve({'a':[N]}, [['a',0],['b',2]]), False)\ncheck('empty query', solve({}, []), False)\ncheck('repeated term', solve({'a':[N,N+2]}, [['a',0],['a',2]]), True)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"}},"limitations":"Inputs are already tokenized or scored; this model makes no claim about production engine performance or linguistic analysis. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"z-search-phrase-position-holes","generated_at":"2026-09-29T14:38:51.506104+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"An offline deterministic retrieval model isolates this search contract from tokenization, storage, and network behavior.","root_cause":"The matcher compares term presence rather than the original positional distance.","sha256":"85ed0d41893b42a153bd1c0aa3a040673ee1a613663225fc187999e155f15f9a","title":"Stopword position holes disappear from phrase matching · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verified":true,"visibility":"public","verification":{"attempt":{"elapsed_ms":41.172,"exit_code":1,"observations":[{"actual":false,"check":"retained hole","expected":true,"passed":false},{"actual":true,"check":"adjacency is wrong for hole","expected":false,"passed":false},{"actual":false,"check":"reversed order","expected":false,"passed":true},{"actual":false,"check":"later occurrence","expected":true,"passed":false},{"actual":false,"check":"missing term","expected":false,"passed":true},{"actual":false,"check":"empty query","expected":false,"passed":true},{"actual":false,"check":"repeated term","expected":true,"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"retained hole\", \"actual\": false, \"expected\": true, \"passed\": false}, {\"check\": \"adjacency is wrong for hole\", \"actual\": true, \"expected\": false, \"passed\": false}, {\"check\": \"reversed order\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"later occurrence\", \"actual\": false, \"expected\": true, \"passed\": false}, {\"check\": \"missing term\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"empty query\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"repeated term\", \"actual\": false, \"expected\": true, \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.291,"exit_code":1,"observations":[{"actual":true,"check":"retained hole","expected":true,"passed":true},{"actual":true,"check":"adjacency is wrong for hole","expected":false,"passed":false},{"actual":true,"check":"reversed order","expected":false,"passed":false},{"actual":true,"check":"later occurrence","expected":true,"passed":true},{"actual":false,"check":"missing term","expected":false,"passed":true},{"actual":false,"check":"empty query","expected":false,"passed":true},{"actual":true,"check":"repeated term","expected":true,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"retained hole\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"adjacency is wrong for hole\", \"actual\": true, \"expected\": false, \"passed\": false}, {\"check\": \"reversed order\", \"actual\": true, \"expected\": false, \"passed\": false}, {\"check\": \"later occurrence\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"missing term\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"empty query\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"repeated term\", \"actual\": true, \"expected\": true, \"passed\": true}], \"passed\": false}\n"}},"member_only":{"stages":["fixed"],"fields":["implementations.fixed","verification.fixed","harness","repair"],"note":"The verified repair, its recorded checks, the repair description, and the scoring harness are available to members."}}