{"abstract":"Tab expansion leaves annotation endpoints on old columns.","category":"Annotation span alignment","checks":7,"contract":"Map each source half-open span through tab expansion using tabstop columns: each tab advances to the next multiple of tabstop; return mapped boundaries.","contract_signature":"text, spans, tabstop","evaluation_group":"annotation-span-tab-expansion-offset-map","failed_approach":"Adding a fixed width per earlier tab ignores the current display column.","family":"w3-annotation-span-alignment-tab-expansion-offset-map","id":"FA-100221","implementations":{"attempt":{"sha256":"8ac3ce138886d31dcbac2d9dbb91d3ded55285accdba6a48bd52ad4612fd29c5","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(text, spans, tabstop):\n    out=[]\n    for s,e in spans:\n     out.append([s+text[:s].count(\"\\t\")*(tabstop-1),e+text[:e].count(\"\\t\")*(tabstop-1)])\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('single tab before span', solve('a\tb',[[2,3]],4), [[4,5]])\ncheck('tab inside span', solve('a\tb',[[1,3]],4), [[1,5]])\ncheck('second tab depends on column', solve('ab\tc\td',[[4,6]],4), [[5,9]])\ncheck('no tabs unchanged', solve('abc',[[0,2]],N), [[0,2]])\ncheck('empty spans', solve('a\tb',[],N), [])\ncheck('span ending before tab', solve('ab\tc',[[0,2]],3), [[0,2]])\ncheck('singleton after tab', solve('x\ty',[[2,3]],N+1), [[N+1,N+2]])\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":"08808514daa7a314264f044e179cf37e062ac9418c615f4bb470c2c22c99af0a","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(text, spans, tabstop):\n    return [list(span) for span in spans]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('single tab before span', solve('a\tb',[[2,3]],4), [[4,5]])\ncheck('tab inside span', solve('a\tb',[[1,3]],4), [[1,5]])\ncheck('second tab depends on column', solve('ab\tc\td',[[4,6]],4), [[5,9]])\ncheck('no tabs unchanged', solve('abc',[[0,2]],N), [[0,2]])\ncheck('empty spans', solve('a\tb',[],N), [])\ncheck('span ending before tab', solve('ab\tc',[[0,2]],3), [[0,2]])\ncheck('singleton after tab', solve('x\ty',[[2,3]],N+1), [[N+1,N+2]])\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":"Contracts use integer offsets, explicit edits, and supplied token boundaries; they do not define a tokenizer or production annotation format. 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":"w3-annotation-span-alignment-tab-expansion-offset-map","generated_at":"2026-09-30T16:48:33.099098+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"A small offline annotation transformation keeps span coordinates explicit when text or token boundaries change.","root_cause":"Source offsets are reused after tabs expand to multiple display columns.","sha256":"e8895b50c15c6d32bd546d6d6da8d10fc1bba681bab492133a46516dc3e64481","title":"Tab expansion leaves annotation endpoints on old columns · case 01","variant":1,"variant_policy":"The fixture code references N, supplied as 1 through 5. Fixed boundary checks may repeat. These records share one mechanism and must remain together in evaluation splits.","verified":true,"visibility":"public","verification":{"attempt":{"elapsed_ms":27.492,"exit_code":1,"observations":[{"actual":[[5,6]],"check":"single tab before span","expected":[[4,5]],"passed":false},{"actual":[[1,6]],"check":"tab inside span","expected":[[1,5]],"passed":false},{"actual":[[7,12]],"check":"second tab depends on column","expected":[[5,9]],"passed":false},{"actual":[[0,2]],"check":"no tabs unchanged","expected":[[0,2]],"passed":true},{"actual":[],"check":"empty spans","expected":[],"passed":true},{"actual":[[0,2]],"check":"span ending before tab","expected":[[0,2]],"passed":true},{"actual":[[3,4]],"check":"singleton after tab","expected":[[2,3]],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"single tab before span\", \"actual\": [[5, 6]], \"expected\": [[4, 5]], \"passed\": false}, {\"check\": \"tab inside span\", \"actual\": [[1, 6]], \"expected\": [[1, 5]], \"passed\": false}, {\"check\": \"second tab depends on column\", \"actual\": [[7, 12]], \"expected\": [[5, 9]], \"passed\": false}, {\"check\": \"no tabs unchanged\", \"actual\": [[0, 2]], \"expected\": [[0, 2]], \"passed\": true}, {\"check\": \"empty spans\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"span ending before tab\", \"actual\": [[0, 2]], \"expected\": [[0, 2]], \"passed\": true}, {\"check\": \"singleton after tab\", \"actual\": [[3, 4]], \"expected\": [[2, 3]], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":27.94,"exit_code":1,"observations":[{"actual":[[2,3]],"check":"single tab before span","expected":[[4,5]],"passed":false},{"actual":[[1,3]],"check":"tab inside span","expected":[[1,5]],"passed":false},{"actual":[[4,6]],"check":"second tab depends on column","expected":[[5,9]],"passed":false},{"actual":[[0,2]],"check":"no tabs unchanged","expected":[[0,2]],"passed":true},{"actual":[],"check":"empty spans","expected":[],"passed":true},{"actual":[[0,2]],"check":"span ending before tab","expected":[[0,2]],"passed":true},{"actual":[[2,3]],"check":"singleton after tab","expected":[[2,3]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"single tab before span\", \"actual\": [[2, 3]], \"expected\": [[4, 5]], \"passed\": false}, {\"check\": \"tab inside span\", \"actual\": [[1, 3]], \"expected\": [[1, 5]], \"passed\": false}, {\"check\": \"second tab depends on column\", \"actual\": [[4, 6]], \"expected\": [[5, 9]], \"passed\": false}, {\"check\": \"no tabs unchanged\", \"actual\": [[0, 2]], \"expected\": [[0, 2]], \"passed\": true}, {\"check\": \"empty spans\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"span ending before tab\", \"actual\": [[0, 2]], \"expected\": [[0, 2]], \"passed\": true}, {\"check\": \"singleton after tab\", \"actual\": [[2, 3]], \"expected\": [[2, 3]], \"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."}}