{"abstract":"Blood-bag and library labels containing \"-\" are laid out wider than printed.","category":"Barcode symbology encoding","checks":8,"contract":"Validate and size a Codabar symbol text with a wide:narrow ratio between 2 and 3 inclusive. The first and last characters must be start/stop letters A-D (uppercase only, at least two characters); body characters are 0-9 - $ : / . +. Each character has 7 elements: digits, \"-\" and \"$\" have 2 wide elements, \": / . +\" and A-D have 3. One narrow gap separates adjacent characters. Return the total width in narrow modules or an error.","contract_signature":"text, ratio","evaluation_group":"w2-barcode-symbology-encoding-codabar-width","failed_approach":"Adding only \"-\" still sizes \"$\" incorrectly.","family":"w2-barcode-symbology-encoding-codabar-width-dash-dollar-class","id":"FA-79546","implementations":{"attempt":{"sha256":"56149b505b316387334b3f5b2149ae9d947562f19f801bc03bec789194313cb1","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(text, ratio):\n    if not 2 <= ratio <= 3:\n        return {'error': 'ratio'}\n    if len(text) < 2:\n        return {'error': 'short'}\n    if text[0] not in 'ABCD' or text[-1] not in 'ABCD':\n        return {'error': 'start-stop'}\n    body = text[1:-1]\n    for ch in body:\n        if ch not in '0123456789-$:/.+':\n            return {'error': 'char', 'char': ch}\n    total = 0\n    for ch in text:\n        wides = 2 if ch in '0123456789-' else 3\n        total += (7 - wides) + wides * ratio\n    return {'modules': total + len(text) - 1}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[('A$5535B', 3), {'modules': 87}], [('A+1$$3C', 3), {'modules': 89}], [('DA/40D', 2.5), {'error': 'char', 'char': 'A'}], [('AE2$5C', 3), {'error': 'char', 'char': 'E'}], [('a+d', 2.5), {'error': 'start-stop'}], [('ad', 3), {'error': 'start-stop'}], [('C5525D', 1.5), {'error': 'ratio'}], [('A10-A', 2), {'modules': 51}]], [[('A1$57-B', 3), {'modules': 87}], [('A$6D', 3), {'modules': 51}], [('A$65B', 3), {'modules': 63}], [('a$5D', 1.5), {'error': 'ratio'}], [('CD', 2), {'modules': 21}], [('AAA$03d', 4), {'error': 'ratio'}], [('A+3d', 2), {'error': 'start-stop'}], [('A5/39-C', 2.5), {'modules': 80.5}]], [[('D/2-B', 2.5), {'modules': 58.5}], [('C:$63A', 2.5), {'modules': 69.5}], [('D+$$75C', 2), {'modules': 72}], [('A$7:+d', 1.5), {'error': 'ratio'}], [('a+A', 4), {'error': 'ratio'}], [('A9505D', 2), {'modules': 61}], [('a958$3C', 1.5), {'error': 'ratio'}], [('B5$C', 2.5), {'modules': 46.0}]], [[('D556$A', 2), {'modules': 61}], [('B$D', 2), {'modules': 31}], [('D55B', 3), {'modules': 51}], [('B+-+-5B', 1.5), {'error': 'ratio'}], [('A95-42T', 1.5), {'error': 'ratio'}], [('aT', 2.5), {'error': 'start-stop'}], [('A:5B', 2), {'modules': 42}], [('D0+$A', 2.5), {'modules': 58.5}]], [[('D$D', 3), {'modules': 39}], [('C5$C', 2), {'modules': 41}], [('A$A', 2.5), {'modules': 35.0}], [('Cd', 2.5), {'error': 'start-stop'}], [('A97+$5d', 2.5), {'error': 'start-stop'}], [('B5C', 3), {'modules': 39}], [('aB', 3), {'error': 'start-stop'}], [('A-31A', 3), {'modules': 63}]]]\nlabels = [\"regression: wide count for - and $\", \"repair trap\", \"combined fault\", \"control\", \"control\", \"boundary\", \"boundary\", \"control\"]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"%s %d\" % (labels[i % len(labels)], i), solve(*args), expected)\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":"d59507f7fd71c905bed2729e329aa59ff404fa0ce5a3afae1b8c2dc4801243bc","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(text, ratio):\n    if not 2 <= ratio <= 3:\n        return {'error': 'ratio'}\n    if len(text) < 2:\n        return {'error': 'short'}\n    if text[0] not in 'ABCD' or text[-1] not in 'ABCD':\n        return {'error': 'start-stop'}\n    body = text[1:-1]\n    for ch in body:\n        if ch not in '0123456789-$:/.+':\n            return {'error': 'char', 'char': ch}\n    total = 0\n    for ch in text:\n        wides = 2 if ch in '0123456789' else 3\n        total += (7 - wides) + wides * ratio\n    return {'modules': total + len(text) - 1}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[('A$5535B', 3), {'modules': 87}], [('A+1$$3C', 3), {'modules': 89}], [('DA/40D', 2.5), {'error': 'char', 'char': 'A'}], [('AE2$5C', 3), {'error': 'char', 'char': 'E'}], [('a+d', 2.5), {'error': 'start-stop'}], [('ad', 3), {'error': 'start-stop'}], [('C5525D', 1.5), {'error': 'ratio'}], [('A10-A', 2), {'modules': 51}]], [[('A1$57-B', 3), {'modules': 87}], [('A$6D', 3), {'modules': 51}], [('A$65B', 3), {'modules': 63}], [('a$5D', 1.5), {'error': 'ratio'}], [('CD', 2), {'modules': 21}], [('AAA$03d', 4), {'error': 'ratio'}], [('A+3d', 2), {'error': 'start-stop'}], [('A5/39-C', 2.5), {'modules': 80.5}]], [[('D/2-B', 2.5), {'modules': 58.5}], [('C:$63A', 2.5), {'modules': 69.5}], [('D+$$75C', 2), {'modules': 72}], [('A$7:+d', 1.5), {'error': 'ratio'}], [('a+A', 4), {'error': 'ratio'}], [('A9505D', 2), {'modules': 61}], [('a958$3C', 1.5), {'error': 'ratio'}], [('B5$C', 2.5), {'modules': 46.0}]], [[('D556$A', 2), {'modules': 61}], [('B$D', 2), {'modules': 31}], [('D55B', 3), {'modules': 51}], [('B+-+-5B', 1.5), {'error': 'ratio'}], [('A95-42T', 1.5), {'error': 'ratio'}], [('aT', 2.5), {'error': 'start-stop'}], [('A:5B', 2), {'modules': 42}], [('D0+$A', 2.5), {'modules': 58.5}]], [[('D$D', 3), {'modules': 39}], [('C5$C', 2), {'modules': 41}], [('A$A', 2.5), {'modules': 35.0}], [('Cd', 2.5), {'error': 'start-stop'}], [('A97+$5d', 2.5), {'error': 'start-stop'}], [('B5C', 3), {'modules': 39}], [('aB', 3), {'error': 'start-stop'}], [('A-31A', 3), {'modules': 63}]]]\nlabels = [\"regression: wide count for - and $\", \"repair trap\", \"combined fault\", \"control\", \"control\", \"boundary\", \"boundary\", \"control\"]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"%s %d\" % (labels[i % len(labels)], i), solve(*args), expected)\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":"A deterministic bounded teaching model with a stipulated contract; it makes no claim of conformance to any published specification. 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":"w2-barcode-symbology-encoding-codabar-width-dash-dollar-class","generated_at":"2026-09-29T14:49:45.628364+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Retail, logistics, pharmacy and document workflows depend on encoders that produce exactly the module pattern, code-set switches, separators and quiet zones scanners expect; one misplaced module or separator makes a label unreadable or, worse, scan as different data.","root_cause":"Only digits are placed in the two-wide class; \"-\" and \"$\" also belong to it.","sha256":"2f81e584321eb92ac827359a5c089f128202648c0b49b3faabd85feff9263359","title":"Codabar gives dash and dollar three wide elements · 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.556,"exit_code":1,"observations":[{"actual":{"modules":89},"check":"regression: wide count for - and $ 0","expected":{"modules":87},"passed":false},{"actual":{"modules":93},"check":"repair trap 1","expected":{"modules":89},"passed":false},{"actual":{"char":"A","error":"char"},"check":"combined fault 2","expected":{"char":"A","error":"char"},"passed":true},{"actual":{"char":"E","error":"char"},"check":"control 3","expected":{"char":"E","error":"char"},"passed":true},{"actual":{"error":"start-stop"},"check":"control 4","expected":{"error":"start-stop"},"passed":true},{"actual":{"error":"start-stop"},"check":"boundary 5","expected":{"error":"start-stop"},"passed":true},{"actual":{"error":"ratio"},"check":"boundary 6","expected":{"error":"ratio"},"passed":true},{"actual":{"modules":51},"check":"control 7","expected":{"modules":51},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: wide count for - and $ 0\", \"actual\": {\"modules\": 89}, \"expected\": {\"modules\": 87}, \"passed\": false}, {\"check\": \"repair trap 1\", \"actual\": {\"modules\": 93}, \"expected\": {\"modules\": 89}, \"passed\": false}, {\"check\": \"combined fault 2\", \"actual\": {\"error\": \"char\", \"char\": \"A\"}, \"expected\": {\"error\": \"char\", \"char\": \"A\"}, \"passed\": true}, {\"check\": \"control 3\", \"actual\": {\"error\": \"char\", \"char\": \"E\"}, \"expected\": {\"error\": \"char\", \"char\": \"E\"}, \"passed\": true}, {\"check\": \"control 4\", \"actual\": {\"error\": \"start-stop\"}, \"expected\": {\"error\": \"start-stop\"}, \"passed\": true}, {\"check\": \"boundary 5\", \"actual\": {\"error\": \"start-stop\"}, \"expected\": {\"error\": \"start-stop\"}, \"passed\": true}, {\"check\": \"boundary 6\", \"actual\": {\"error\": \"ratio\"}, \"expected\": {\"error\": \"ratio\"}, \"passed\": true}, {\"check\": \"control 7\", \"actual\": {\"modules\": 51}, \"expected\": {\"modules\": 51}, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.212,"exit_code":1,"observations":[{"actual":{"modules":89},"check":"regression: wide count for - and $ 0","expected":{"modules":87},"passed":false},{"actual":{"modules":93},"check":"repair trap 1","expected":{"modules":89},"passed":false},{"actual":{"char":"A","error":"char"},"check":"combined fault 2","expected":{"char":"A","error":"char"},"passed":true},{"actual":{"char":"E","error":"char"},"check":"control 3","expected":{"char":"E","error":"char"},"passed":true},{"actual":{"error":"start-stop"},"check":"control 4","expected":{"error":"start-stop"},"passed":true},{"actual":{"error":"start-stop"},"check":"boundary 5","expected":{"error":"start-stop"},"passed":true},{"actual":{"error":"ratio"},"check":"boundary 6","expected":{"error":"ratio"},"passed":true},{"actual":{"modules":52},"check":"control 7","expected":{"modules":51},"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: wide count for - and $ 0\", \"actual\": {\"modules\": 89}, \"expected\": {\"modules\": 87}, \"passed\": false}, {\"check\": \"repair trap 1\", \"actual\": {\"modules\": 93}, \"expected\": {\"modules\": 89}, \"passed\": false}, {\"check\": \"combined fault 2\", \"actual\": {\"error\": \"char\", \"char\": \"A\"}, \"expected\": {\"error\": \"char\", \"char\": \"A\"}, \"passed\": true}, {\"check\": \"control 3\", \"actual\": {\"error\": \"char\", \"char\": \"E\"}, \"expected\": {\"error\": \"char\", \"char\": \"E\"}, \"passed\": true}, {\"check\": \"control 4\", \"actual\": {\"error\": \"start-stop\"}, \"expected\": {\"error\": \"start-stop\"}, \"passed\": true}, {\"check\": \"boundary 5\", \"actual\": {\"error\": \"start-stop\"}, \"expected\": {\"error\": \"start-stop\"}, \"passed\": true}, {\"check\": \"boundary 6\", \"actual\": {\"error\": \"ratio\"}, \"expected\": {\"error\": \"ratio\"}, \"passed\": true}, {\"check\": \"control 7\", \"actual\": {\"modules\": 52}, \"expected\": {\"modules\": 51}, \"passed\": false}], \"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."}}