{"abstract":"Printed symbols are wider than the layout box and get clipped.","category":"Barcode symbology encoding","checks":8,"contract":"Encode text for Code 39 with a wide:narrow ratio of 2 or 3. Standard mode accepts only the 43 characters 0-9 A-Z - . space $ / + %. Full ASCII mode maps lowercase to \"+\" plus the capital, controls 1..26 to \"$\" plus A..Z, NUL to %U, 27..31 to %A..%E, DEL to %T, and punctuation (including the four standard shift characters $ % + /) to its two-character escape. Every symbol character, including the start/stop \"*\", has 6 narrow and 3 wide elements, and one narrow gap separates adjacent characters. Return the framed data and the total width in narrow modules.","evaluation_group":"w2-barcode-symbology-encoding-code39-full-ascii","failed_approach":"Adding one frame character still misses the other.","family":"w2-barcode-symbology-encoding-code39-full-ascii-start-stop-count","id":"FA-79461","implementations":{"attempt":{"sha256":"7ea10b5e3042b95f3c4f9400f2d1d2cdb161709a423b1ef3343b3309d7417dc6","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(text, mode, ratio):\n    std = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%'\n    if ratio not in (2, 3):\n        return {'error': 'ratio'}\n    if mode == 'standard':\n        for ch in text:\n            if ch not in std:\n                return {'error': 'char', 'char': ch}\n        enc = text\n    else:\n        punct = {'$': '/D', '%': '/E', '+': '/K', '/': '/O', '!': '/A', '\"': '/B', '#': '/C', '&': '/F', \"'\": '/G',\n                 '(': '/H', ')': '/I', '*': '/J', ',': '/L', ':': '/Z', ';': '%F', '<': '%G', '=': '%H', '>': '%I',\n                 '?': '%J', '@': '%V', '[': '%K', '\\\\': '%L', ']': '%M', '^': '%N', '_': '%O', '`': '%W',\n                 '{': '%P', '|': '%Q', '}': '%R', '~': '%S'}\n        enc = ''\n        for ch in text:\n            o = ord(ch)\n            if o > 127:\n                return {'error': 'char', 'char': ch}\n            if ch in punct:\n                enc += punct[ch]\n            elif 'a' <= ch <= 'z':\n                enc += '+' + ch.upper()\n            elif 1 <= o <= 26:\n                enc += '$' + chr(o + 64)\n            elif o == 0:\n                enc += '%U'\n            elif 27 <= o <= 31:\n                enc += '%' + chr(o - 27 + 65)\n            elif o == 127:\n                enc += '%T'\n            else:\n                enc += ch\n    count = len(enc) + 1\n    return {'data': '*' + enc + '*', 'modules': count * (6 + 3 * ratio) + (count - 1)}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[('PN/7PN/7$5', 'full', 3), {'data': '*PN/O7PN/O7/D5*', 'modules': 239}], [('', 'standard', 3), {'data': '**', 'modules': 31}], [('café', 'standard', 4), {'error': 'ratio'}], [('ABPN/7PN/7', 'full', 1), {'error': 'ratio'}], [('a+ba+b', 'full', 4), {'error': 'ratio'}], [('Z-9a+blot', 'standard', 2), {'error': 'char', 'char': 'a'}], [('café\\t', 'full', 4), {'error': 'ratio'}], [('\\x1b', 'full', 2), {'data': '*%A*', 'modules': 51}]], [[('\\x1blotlot', 'full', 2), {'data': '*%A+L+O+T+L+O+T*', 'modules': 207}], [('\\t\\x7fq', 'full', 2), {'data': '*$I%T+Q*', 'modules': 103}], [('', 'standard', 1), {'error': 'ratio'}], [('PN/7\\x1blot', 'full', 4), {'error': 'ratio'}], [('\\x00caféq', 'full', 4), {'error': 'ratio'}], [('q$5café', 'standard', 4), {'error': 'ratio'}], [('', 'full', 4), {'error': 'ratio'}], [('#1', 'full', 2), {'data': '*/C1*', 'modules': 64}]], [[('$5 \\x00', 'full', 2), {'data': '*/D5 %U*', 'modules': 103}], [('', 'full', 2), {'data': '**', 'modules': 25}], [('#1café', 'standard', 4), {'error': 'ratio'}], [(' ', 'full', 1), {'error': 'ratio'}], [('*\\x1bcafé', 'full', 2), {'error': 'char', 'char': 'é'}], [('', 'full', 4), {'error': 'ratio'}], [('\\x7f#1', 'standard', 4), {'error': 'ratio'}], [('ABPN/7Z-9', 'full', 2), {'data': '*ABPN/O7Z-9*', 'modules': 155}]], [[('AB12', 'standard', 2), {'data': '*AB12*', 'modules': 77}], [('', 'full', 2), {'data': '**', 'modules': 25}], [('#1café', 'full', 2), {'error': 'char', 'char': 'é'}], [(' ABPN/7', 'full', 1), {'error': 'ratio'}], [('qAB', 'standard', 3), {'error': 'char', 'char': 'q'}], [('Z-950%', 'full', 1), {'error': 'ratio'}], [('', 'full', 4), {'error': 'ratio'}], [('*', 'full', 2), {'data': '*/J*', 'modules': 51}]], [[('$5lot', 'full', 3), {'data': '*/D5+L+O+T*', 'modules': 175}], [('a+ba+b', 'full', 3), {'data': '*+A/K+B+A/K+B*', 'modules': 223}], [('AB\\x1b', 'standard', 1), {'error': 'ratio'}], [('Z-9$512', 'standard', 4), {'error': 'ratio'}], [('xq', 'standard', 1), {'error': 'ratio'}], [('\\x7f$5', 'full', 1), {'error': 'ratio'}], [('\\x7f#1', 'full', 4), {'error': 'ratio'}], [('  \\t', 'full', 2), {'data': '*  $I*', 'modules': 77}]]]\nlabels = [\"regression: start and stop characters\", \"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":"4969fdd4590e5004294b6418efd2712cae45e27d1a9e0bdcd6b179a0230026c7","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(text, mode, ratio):\n    std = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%'\n    if ratio not in (2, 3):\n        return {'error': 'ratio'}\n    if mode == 'standard':\n        for ch in text:\n            if ch not in std:\n                return {'error': 'char', 'char': ch}\n        enc = text\n    else:\n        punct = {'$': '/D', '%': '/E', '+': '/K', '/': '/O', '!': '/A', '\"': '/B', '#': '/C', '&': '/F', \"'\": '/G',\n                 '(': '/H', ')': '/I', '*': '/J', ',': '/L', ':': '/Z', ';': '%F', '<': '%G', '=': '%H', '>': '%I',\n                 '?': '%J', '@': '%V', '[': '%K', '\\\\': '%L', ']': '%M', '^': '%N', '_': '%O', '`': '%W',\n                 '{': '%P', '|': '%Q', '}': '%R', '~': '%S'}\n        enc = ''\n        for ch in text:\n            o = ord(ch)\n            if o > 127:\n                return {'error': 'char', 'char': ch}\n            if ch in punct:\n                enc += punct[ch]\n            elif 'a' <= ch <= 'z':\n                enc += '+' + ch.upper()\n            elif 1 <= o <= 26:\n                enc += '$' + chr(o + 64)\n            elif o == 0:\n                enc += '%U'\n            elif 27 <= o <= 31:\n                enc += '%' + chr(o - 27 + 65)\n            elif o == 127:\n                enc += '%T'\n            else:\n                enc += ch\n    count = len(enc)\n    return {'data': '*' + enc + '*', 'modules': count * (6 + 3 * ratio) + (count - 1)}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[('PN/7PN/7$5', 'full', 3), {'data': '*PN/O7PN/O7/D5*', 'modules': 239}], [('', 'standard', 3), {'data': '**', 'modules': 31}], [('café', 'standard', 4), {'error': 'ratio'}], [('ABPN/7PN/7', 'full', 1), {'error': 'ratio'}], [('a+ba+b', 'full', 4), {'error': 'ratio'}], [('Z-9a+blot', 'standard', 2), {'error': 'char', 'char': 'a'}], [('café\\t', 'full', 4), {'error': 'ratio'}], [('\\x1b', 'full', 2), {'data': '*%A*', 'modules': 51}]], [[('\\x1blotlot', 'full', 2), {'data': '*%A+L+O+T+L+O+T*', 'modules': 207}], [('\\t\\x7fq', 'full', 2), {'data': '*$I%T+Q*', 'modules': 103}], [('', 'standard', 1), {'error': 'ratio'}], [('PN/7\\x1blot', 'full', 4), {'error': 'ratio'}], [('\\x00caféq', 'full', 4), {'error': 'ratio'}], [('q$5café', 'standard', 4), {'error': 'ratio'}], [('', 'full', 4), {'error': 'ratio'}], [('#1', 'full', 2), {'data': '*/C1*', 'modules': 64}]], [[('$5 \\x00', 'full', 2), {'data': '*/D5 %U*', 'modules': 103}], [('', 'full', 2), {'data': '**', 'modules': 25}], [('#1café', 'standard', 4), {'error': 'ratio'}], [(' ', 'full', 1), {'error': 'ratio'}], [('*\\x1bcafé', 'full', 2), {'error': 'char', 'char': 'é'}], [('', 'full', 4), {'error': 'ratio'}], [('\\x7f#1', 'standard', 4), {'error': 'ratio'}], [('ABPN/7Z-9', 'full', 2), {'data': '*ABPN/O7Z-9*', 'modules': 155}]], [[('AB12', 'standard', 2), {'data': '*AB12*', 'modules': 77}], [('', 'full', 2), {'data': '**', 'modules': 25}], [('#1café', 'full', 2), {'error': 'char', 'char': 'é'}], [(' ABPN/7', 'full', 1), {'error': 'ratio'}], [('qAB', 'standard', 3), {'error': 'char', 'char': 'q'}], [('Z-950%', 'full', 1), {'error': 'ratio'}], [('', 'full', 4), {'error': 'ratio'}], [('*', 'full', 2), {'data': '*/J*', 'modules': 51}]], [[('$5lot', 'full', 3), {'data': '*/D5+L+O+T*', 'modules': 175}], [('a+ba+b', 'full', 3), {'data': '*+A/K+B+A/K+B*', 'modules': 223}], [('AB\\x1b', 'standard', 1), {'error': 'ratio'}], [('Z-9$512', 'standard', 4), {'error': 'ratio'}], [('xq', 'standard', 1), {'error': 'ratio'}], [('\\x7f$5', 'full', 1), {'error': 'ratio'}], [('\\x7f#1', 'full', 4), {'error': 'ratio'}], [('  \\t', 'full', 2), {'data': '*  $I*', 'modules': 77}]]]\nlabels = [\"regression: start and stop characters\", \"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"},"fixed":{"sha256":"9ea5552bad53cc89e8de9ca18f860111237388cb5ce2cb9dd9b91e699defdbf1","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(text, mode, ratio):\n    std = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%'\n    if ratio not in (2, 3):\n        return {'error': 'ratio'}\n    if mode == 'standard':\n        for ch in text:\n            if ch not in std:\n                return {'error': 'char', 'char': ch}\n        enc = text\n    else:\n        punct = {'$': '/D', '%': '/E', '+': '/K', '/': '/O', '!': '/A', '\"': '/B', '#': '/C', '&': '/F', \"'\": '/G',\n                 '(': '/H', ')': '/I', '*': '/J', ',': '/L', ':': '/Z', ';': '%F', '<': '%G', '=': '%H', '>': '%I',\n                 '?': '%J', '@': '%V', '[': '%K', '\\\\': '%L', ']': '%M', '^': '%N', '_': '%O', '`': '%W',\n                 '{': '%P', '|': '%Q', '}': '%R', '~': '%S'}\n        enc = ''\n        for ch in text:\n            o = ord(ch)\n            if o > 127:\n                return {'error': 'char', 'char': ch}\n            if ch in punct:\n                enc += punct[ch]\n            elif 'a' <= ch <= 'z':\n                enc += '+' + ch.upper()\n            elif 1 <= o <= 26:\n                enc += '$' + chr(o + 64)\n            elif o == 0:\n                enc += '%U'\n            elif 27 <= o <= 31:\n                enc += '%' + chr(o - 27 + 65)\n            elif o == 127:\n                enc += '%T'\n            else:\n                enc += ch\n    count = len(enc) + 2\n    return {'data': '*' + enc + '*', 'modules': count * (6 + 3 * ratio) + (count - 1)}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[('PN/7PN/7$5', 'full', 3), {'data': '*PN/O7PN/O7/D5*', 'modules': 239}], [('', 'standard', 3), {'data': '**', 'modules': 31}], [('café', 'standard', 4), {'error': 'ratio'}], [('ABPN/7PN/7', 'full', 1), {'error': 'ratio'}], [('a+ba+b', 'full', 4), {'error': 'ratio'}], [('Z-9a+blot', 'standard', 2), {'error': 'char', 'char': 'a'}], [('café\\t', 'full', 4), {'error': 'ratio'}], [('\\x1b', 'full', 2), {'data': '*%A*', 'modules': 51}]], [[('\\x1blotlot', 'full', 2), {'data': '*%A+L+O+T+L+O+T*', 'modules': 207}], [('\\t\\x7fq', 'full', 2), {'data': '*$I%T+Q*', 'modules': 103}], [('', 'standard', 1), {'error': 'ratio'}], [('PN/7\\x1blot', 'full', 4), {'error': 'ratio'}], [('\\x00caféq', 'full', 4), {'error': 'ratio'}], [('q$5café', 'standard', 4), {'error': 'ratio'}], [('', 'full', 4), {'error': 'ratio'}], [('#1', 'full', 2), {'data': '*/C1*', 'modules': 64}]], [[('$5 \\x00', 'full', 2), {'data': '*/D5 %U*', 'modules': 103}], [('', 'full', 2), {'data': '**', 'modules': 25}], [('#1café', 'standard', 4), {'error': 'ratio'}], [(' ', 'full', 1), {'error': 'ratio'}], [('*\\x1bcafé', 'full', 2), {'error': 'char', 'char': 'é'}], [('', 'full', 4), {'error': 'ratio'}], [('\\x7f#1', 'standard', 4), {'error': 'ratio'}], [('ABPN/7Z-9', 'full', 2), {'data': '*ABPN/O7Z-9*', 'modules': 155}]], [[('AB12', 'standard', 2), {'data': '*AB12*', 'modules': 77}], [('', 'full', 2), {'data': '**', 'modules': 25}], [('#1café', 'full', 2), {'error': 'char', 'char': 'é'}], [(' ABPN/7', 'full', 1), {'error': 'ratio'}], [('qAB', 'standard', 3), {'error': 'char', 'char': 'q'}], [('Z-950%', 'full', 1), {'error': 'ratio'}], [('', 'full', 4), {'error': 'ratio'}], [('*', 'full', 2), {'data': '*/J*', 'modules': 51}]], [[('$5lot', 'full', 3), {'data': '*/D5+L+O+T*', 'modules': 175}], [('a+ba+b', 'full', 3), {'data': '*+A/K+B+A/K+B*', 'modules': 223}], [('AB\\x1b', 'standard', 1), {'error': 'ratio'}], [('Z-9$512', 'standard', 4), {'error': 'ratio'}], [('xq', 'standard', 1), {'error': 'ratio'}], [('\\x7f$5', 'full', 1), {'error': 'ratio'}], [('\\x7f#1', 'full', 4), {'error': 'ratio'}], [('  \\t', 'full', 2), {'data': '*  $I*', 'modules': 77}]]]\nlabels = [\"regression: start and stop characters\", \"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-code39-full-ascii-start-stop-count","generated_at":"2026-09-29T14:49:44.767508+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.","repair":"Count the start and stop characters in the symbol width.","root_cause":"The character count excludes the two \"*\" framing characters.","sha256":"e7e03b0429a90c06f2e424a0e7186ff6e9ef078c990b9d71327f1ef3348c7e87","title":"Code 39 width omits the start and stop characters · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":41.32,"exit_code":1,"observations":[{"actual":{"data":"*PN/O7PN/O7/D5*","modules":223},"check":"regression: start and stop characters 0","expected":{"data":"*PN/O7PN/O7/D5*","modules":239},"passed":false},{"actual":{"data":"**","modules":15},"check":"repair trap 1","expected":{"data":"**","modules":31},"passed":false},{"actual":{"error":"ratio"},"check":"combined fault 2","expected":{"error":"ratio"},"passed":true},{"actual":{"error":"ratio"},"check":"control 3","expected":{"error":"ratio"},"passed":true},{"actual":{"error":"ratio"},"check":"control 4","expected":{"error":"ratio"},"passed":true},{"actual":{"char":"a","error":"char"},"check":"boundary 5","expected":{"char":"a","error":"char"},"passed":true},{"actual":{"error":"ratio"},"check":"boundary 6","expected":{"error":"ratio"},"passed":true},{"actual":{"data":"*%A*","modules":38},"check":"control 7","expected":{"data":"*%A*","modules":51},"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: start and stop characters 0\", \"actual\": {\"data\": \"*PN/O7PN/O7/D5*\", \"modules\": 223}, \"expected\": {\"data\": \"*PN/O7PN/O7/D5*\", \"modules\": 239}, \"passed\": false}, {\"check\": \"repair trap 1\", \"actual\": {\"data\": \"**\", \"modules\": 15}, \"expected\": {\"data\": \"**\", \"modules\": 31}, \"passed\": false}, {\"check\": \"combined fault 2\", \"actual\": {\"error\": \"ratio\"}, \"expected\": {\"error\": \"ratio\"}, \"passed\": true}, {\"check\": \"control 3\", \"actual\": {\"error\": \"ratio\"}, \"expected\": {\"error\": \"ratio\"}, \"passed\": true}, {\"check\": \"control 4\", \"actual\": {\"error\": \"ratio\"}, \"expected\": {\"error\": \"ratio\"}, \"passed\": true}, {\"check\": \"boundary 5\", \"actual\": {\"error\": \"char\", \"char\": \"a\"}, \"expected\": {\"error\": \"char\", \"char\": \"a\"}, \"passed\": true}, {\"check\": \"boundary 6\", \"actual\": {\"error\": \"ratio\"}, \"expected\": {\"error\": \"ratio\"}, \"passed\": true}, {\"check\": \"control 7\", \"actual\": {\"data\": \"*%A*\", \"modules\": 38}, \"expected\": {\"data\": \"*%A*\", \"modules\": 51}, \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":42.834,"exit_code":1,"observations":[{"actual":{"data":"*PN/O7PN/O7/D5*","modules":207},"check":"regression: start and stop characters 0","expected":{"data":"*PN/O7PN/O7/D5*","modules":239},"passed":false},{"actual":{"data":"**","modules":-1},"check":"repair trap 1","expected":{"data":"**","modules":31},"passed":false},{"actual":{"error":"ratio"},"check":"combined fault 2","expected":{"error":"ratio"},"passed":true},{"actual":{"error":"ratio"},"check":"control 3","expected":{"error":"ratio"},"passed":true},{"actual":{"error":"ratio"},"check":"control 4","expected":{"error":"ratio"},"passed":true},{"actual":{"char":"a","error":"char"},"check":"boundary 5","expected":{"char":"a","error":"char"},"passed":true},{"actual":{"error":"ratio"},"check":"boundary 6","expected":{"error":"ratio"},"passed":true},{"actual":{"data":"*%A*","modules":25},"check":"control 7","expected":{"data":"*%A*","modules":51},"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: start and stop characters 0\", \"actual\": {\"data\": \"*PN/O7PN/O7/D5*\", \"modules\": 207}, \"expected\": {\"data\": \"*PN/O7PN/O7/D5*\", \"modules\": 239}, \"passed\": false}, {\"check\": \"repair trap 1\", \"actual\": {\"data\": \"**\", \"modules\": -1}, \"expected\": {\"data\": \"**\", \"modules\": 31}, \"passed\": false}, {\"check\": \"combined fault 2\", \"actual\": {\"error\": \"ratio\"}, \"expected\": {\"error\": \"ratio\"}, \"passed\": true}, {\"check\": \"control 3\", \"actual\": {\"error\": \"ratio\"}, \"expected\": {\"error\": \"ratio\"}, \"passed\": true}, {\"check\": \"control 4\", \"actual\": {\"error\": \"ratio\"}, \"expected\": {\"error\": \"ratio\"}, \"passed\": true}, {\"check\": \"boundary 5\", \"actual\": {\"error\": \"char\", \"char\": \"a\"}, \"expected\": {\"error\": \"char\", \"char\": \"a\"}, \"passed\": true}, {\"check\": \"boundary 6\", \"actual\": {\"error\": \"ratio\"}, \"expected\": {\"error\": \"ratio\"}, \"passed\": true}, {\"check\": \"control 7\", \"actual\": {\"data\": \"*%A*\", \"modules\": 25}, \"expected\": {\"data\": \"*%A*\", \"modules\": 51}, \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":38.82,"exit_code":0,"observations":[{"actual":{"data":"*PN/O7PN/O7/D5*","modules":239},"check":"regression: start and stop characters 0","expected":{"data":"*PN/O7PN/O7/D5*","modules":239},"passed":true},{"actual":{"data":"**","modules":31},"check":"repair trap 1","expected":{"data":"**","modules":31},"passed":true},{"actual":{"error":"ratio"},"check":"combined fault 2","expected":{"error":"ratio"},"passed":true},{"actual":{"error":"ratio"},"check":"control 3","expected":{"error":"ratio"},"passed":true},{"actual":{"error":"ratio"},"check":"control 4","expected":{"error":"ratio"},"passed":true},{"actual":{"char":"a","error":"char"},"check":"boundary 5","expected":{"char":"a","error":"char"},"passed":true},{"actual":{"error":"ratio"},"check":"boundary 6","expected":{"error":"ratio"},"passed":true},{"actual":{"data":"*%A*","modules":51},"check":"control 7","expected":{"data":"*%A*","modules":51},"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: start and stop characters 0\", \"actual\": {\"data\": \"*PN/O7PN/O7/D5*\", \"modules\": 239}, \"expected\": {\"data\": \"*PN/O7PN/O7/D5*\", \"modules\": 239}, \"passed\": true}, {\"check\": \"repair trap 1\", \"actual\": {\"data\": \"**\", \"modules\": 31}, \"expected\": {\"data\": \"**\", \"modules\": 31}, \"passed\": true}, {\"check\": \"combined fault 2\", \"actual\": {\"error\": \"ratio\"}, \"expected\": {\"error\": \"ratio\"}, \"passed\": true}, {\"check\": \"control 3\", \"actual\": {\"error\": \"ratio\"}, \"expected\": {\"error\": \"ratio\"}, \"passed\": true}, {\"check\": \"control 4\", \"actual\": {\"error\": \"ratio\"}, \"expected\": {\"error\": \"ratio\"}, \"passed\": true}, {\"check\": \"boundary 5\", \"actual\": {\"error\": \"char\", \"char\": \"a\"}, \"expected\": {\"error\": \"char\", \"char\": \"a\"}, \"passed\": true}, {\"check\": \"boundary 6\", \"actual\": {\"error\": \"ratio\"}, \"expected\": {\"error\": \"ratio\"}, \"passed\": true}, {\"check\": \"control 7\", \"actual\": {\"data\": \"*%A*\", \"modules\": 51}, \"expected\": {\"data\": \"*%A*\", \"modules\": 51}, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}