{"abstract":"Negative-strand transcript offsets visit exons in reference order.","category":"Genomic coordinate mapping","checks":7,"contract":"Map zero-based transcript offset across disjoint half-open exons to a reference base; return None outside transcript.","evaluation_group":"model-38d3692e5b34c187","failed_approach":"Reversing bases within each exon leaves exon traversal wrong.","family":"z-genetics_coordinates-exon-order","id":"FA-12541","implementations":{"attempt":{"sha256":"31c69ece09aff0504918f5f12d15a271ceaf2bfa16def2fd43ca0cd67c5e5a72","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(exons, strand, offset):\n    for a,b in sorted(exons):\n     if 0 <= offset < b-a: return a+offset if strand=='+' else b-1-offset\n     offset -= b-a\n    return None\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ne=[(10*N,10*N+2),(10*N+10,10*N+13)]\ncheck('minus first',solve(e,'-',0),10*N+12)\ncheck('minus junction',solve(e,'-',3),10*N+1)\ncheck('minus last',solve(e,'-',4),10*N)\ncheck('plus first',solve(e,'+',0),10*N)\ncheck('plus junction',solve(e,'+',2),10*N+10)\ncheck('past end',solve(e,'-',5),None)\ncheck('negative',solve(e,'+',-1),None)\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":"098a95cf174c5a5e2afb5175f872250cedb156d47336ce83e699c02bbbf78216","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(exons, strand, offset):\n    for a,b in sorted(exons):\n     if 0 <= offset < b-a: return a+offset\n     offset -= b-a\n    return None\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ne=[(10*N,10*N+2),(10*N+10,10*N+13)]\ncheck('minus first',solve(e,'-',0),10*N+12)\ncheck('minus junction',solve(e,'-',3),10*N+1)\ncheck('minus last',solve(e,'-',4),10*N)\ncheck('plus first',solve(e,'+',0),10*N)\ncheck('plus junction',solve(e,'+',2),10*N+10)\ncheck('past end',solve(e,'-',5),None)\ncheck('negative',solve(e,'+',-1),None)\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"},"fixed":{"sha256":"54abb47e9905e1d02af4e0ce186389801312d0fecd18bc2b8b8b57aaafd2fd2a","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(exons, strand, offset):\n    for a,b in sorted(exons, reverse=strand=='-'):\n     if 0 <= offset < b-a: return a+offset if strand=='+' else b-1-offset\n     offset -= b-a\n    return None\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ne=[(10*N,10*N+2),(10*N+10,10*N+13)]\ncheck('minus first',solve(e,'-',0),10*N+12)\ncheck('minus junction',solve(e,'-',3),10*N+1)\ncheck('minus last',solve(e,'-',4),10*N)\ncheck('plus first',solve(e,'+',0),10*N)\ncheck('plus junction',solve(e,'+',2),10*N+10)\ncheck('past end',solve(e,'-',5),None)\ncheck('negative',solve(e,'+',-1),None)\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":"Synthetic coordinate fixtures only; not a production annotation or alignment implementation. 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-genetics_coordinates-exon-order","generated_at":"2026-09-29T14:38:57.881697+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"An abstract offline coordinate model isolates this software mapping defect; it does not model biological interpretation.","repair":"Reverse exon traversal on the negative strand before consuming transcript offsets.","root_cause":"Exons are traversed in increasing reference order for both strands.","sha256":"fd9e4991bba62b265c5968d07b9546183639d8ce98492baafacd17c7a1764bea","title":"Negative-strand transcript offsets visit exons in reference order · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":43.121,"exit_code":1,"observations":[{"actual":11,"check":"minus first","expected":22,"passed":false},{"actual":21,"check":"minus junction","expected":11,"passed":false},{"actual":20,"check":"minus last","expected":10,"passed":false},{"actual":10,"check":"plus first","expected":10,"passed":true},{"actual":20,"check":"plus junction","expected":20,"passed":true},{"actual":null,"check":"past end","expected":null,"passed":true},{"actual":null,"check":"negative","expected":null,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"minus first\", \"actual\": 11, \"expected\": 22, \"passed\": false}, {\"check\": \"minus junction\", \"actual\": 21, \"expected\": 11, \"passed\": false}, {\"check\": \"minus last\", \"actual\": 20, \"expected\": 10, \"passed\": false}, {\"check\": \"plus first\", \"actual\": 10, \"expected\": 10, \"passed\": true}, {\"check\": \"plus junction\", \"actual\": 20, \"expected\": 20, \"passed\": true}, {\"check\": \"past end\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"negative\", \"actual\": null, \"expected\": null, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":42.947,"exit_code":1,"observations":[{"actual":10,"check":"minus first","expected":22,"passed":false},{"actual":21,"check":"minus junction","expected":11,"passed":false},{"actual":22,"check":"minus last","expected":10,"passed":false},{"actual":10,"check":"plus first","expected":10,"passed":true},{"actual":20,"check":"plus junction","expected":20,"passed":true},{"actual":null,"check":"past end","expected":null,"passed":true},{"actual":null,"check":"negative","expected":null,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"minus first\", \"actual\": 10, \"expected\": 22, \"passed\": false}, {\"check\": \"minus junction\", \"actual\": 21, \"expected\": 11, \"passed\": false}, {\"check\": \"minus last\", \"actual\": 22, \"expected\": 10, \"passed\": false}, {\"check\": \"plus first\", \"actual\": 10, \"expected\": 10, \"passed\": true}, {\"check\": \"plus junction\", \"actual\": 20, \"expected\": 20, \"passed\": true}, {\"check\": \"past end\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"negative\", \"actual\": null, \"expected\": null, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":41.322,"exit_code":0,"observations":[{"actual":22,"check":"minus first","expected":22,"passed":true},{"actual":11,"check":"minus junction","expected":11,"passed":true},{"actual":10,"check":"minus last","expected":10,"passed":true},{"actual":10,"check":"plus first","expected":10,"passed":true},{"actual":20,"check":"plus junction","expected":20,"passed":true},{"actual":null,"check":"past end","expected":null,"passed":true},{"actual":null,"check":"negative","expected":null,"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"minus first\", \"actual\": 22, \"expected\": 22, \"passed\": true}, {\"check\": \"minus junction\", \"actual\": 11, \"expected\": 11, \"passed\": true}, {\"check\": \"minus last\", \"actual\": 10, \"expected\": 10, \"passed\": true}, {\"check\": \"plus first\", \"actual\": 10, \"expected\": 10, \"passed\": true}, {\"check\": \"plus junction\", \"actual\": 20, \"expected\": 20, \"passed\": true}, {\"check\": \"past end\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"negative\", \"actual\": null, \"expected\": null, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}