{"abstract":"\"N. OAK AVE.\" is returned unchanged instead of \"N OAK AVE\".","category":"Postal address normalization","checks":8,"contract":"Input one street line of synthetic text. Uppercase it, delete periods, turn commas into spaces and split on whitespace. The first token is the house number. From the remaining body, in this order: a trailing directional becomes the post-directional only if at least two body tokens exist; then a trailing suffix from the table is abbreviated only if at least two body tokens remain; then a leading directional becomes the pre-directional only if at least one name token would remain. Return number, pre, name, suffix, post joined by single spaces.","evaluation_group":"w2-postal-address-normalization-street-line","failed_approach":"Stripping only a trailing period fixes \"AVE.\" but leaves the pre-directional \"N.\" unrecognized.","family":"w2-postal-address-normalization-street-line-abbreviation-periods","id":"FA-95846","implementations":{"attempt":{"sha256":"9266211c36c1288126a08ee87a45bb1768cce7dab60a37200966d38a4b4adcee","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    s = x.upper().rstrip('.').replace(',', ' ')\n    t = s.split()\n    if not t:\n        return ''\n    num, body = t[0], t[1:]\n    SUF = {'STREET': 'ST', 'ST': 'ST', 'AVENUE': 'AVE', 'AVE': 'AVE', 'BOULEVARD': 'BLVD', 'BLVD': 'BLVD',\n           'ROAD': 'RD', 'RD': 'RD', 'LANE': 'LN', 'LN': 'LN', 'COURT': 'CT', 'CT': 'CT'}\n    DIR = {'NORTH': 'N', 'N': 'N', 'SOUTH': 'S', 'S': 'S', 'EAST': 'E', 'E': 'E', 'WEST': 'W', 'W': 'W'}\n    pre = suf = post = ''\n    if len(body) > 1 and body[-1] in DIR:\n        post = DIR[body[-1]]\n        body = body[:-1]\n    if len(body) >= 2 and body[-1] in SUF:\n        suf = SUF[body[-1]]\n        body = body[:-1]\n    if body[1:] and body[0] in DIR:\n        pre = DIR[body[0]]\n        body = body[1:]\n    return ' '.join(p for p in [num, pre] + body + [suf, post] if p)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['mixed-case suffix is abbreviated', '107 Oak Street', '107 OAK ST'], ['periods removed from abbreviations', '107 N. OAK Ave.', '107 N OAK AVE'], ['street named for a direction keeps its name', '107 North', '107 NORTH'], ['two-token body with post-directional', '107 OAK WEST', '107 OAK W'], ['suffix followed by post-directional', '107 OAK ROAD SOUTH', '107 OAK RD S'], ['direction-named street with suffix', '107 WEST ST', '107 WEST ST'], ['direction-named street with suffix and post-directional', '107 EAST LANE NORTH', '107 EAST LN N'], ['comma-separated control', '107 S OAK BOULEVARD,', '107 S OAK BLVD']], [['mixed-case suffix is abbreviated', '114 Elm Street', '114 ELM ST'], ['periods removed from abbreviations', '114 N. ELM Ave.', '114 N ELM AVE'], ['street named for a direction keeps its name', '114 North', '114 NORTH'], ['two-token body with post-directional', '114 ELM WEST', '114 ELM W'], ['suffix followed by post-directional', '114 ELM ROAD SOUTH', '114 ELM RD S'], ['direction-named street with suffix', '114 WEST ST', '114 WEST ST'], ['direction-named street with suffix and post-directional', '114 EAST LANE NORTH', '114 EAST LN N'], ['comma-separated control', '114 S ELM BOULEVARD,', '114 S ELM BLVD']], [['mixed-case suffix is abbreviated', '121 Maple Street', '121 MAPLE ST'], ['periods removed from abbreviations', '121 N. MAPLE Ave.', '121 N MAPLE AVE'], ['street named for a direction keeps its name', '121 North', '121 NORTH'], ['two-token body with post-directional', '121 MAPLE WEST', '121 MAPLE W'], ['suffix followed by post-directional', '121 MAPLE ROAD SOUTH', '121 MAPLE RD S'], ['direction-named street with suffix', '121 WEST ST', '121 WEST ST'], ['direction-named street with suffix and post-directional', '121 EAST LANE NORTH', '121 EAST LN N'], ['comma-separated control', '121 S MAPLE BOULEVARD,', '121 S MAPLE BLVD']], [['mixed-case suffix is abbreviated', '128 Birch Street', '128 BIRCH ST'], ['periods removed from abbreviations', '128 N. BIRCH Ave.', '128 N BIRCH AVE'], ['street named for a direction keeps its name', '128 North', '128 NORTH'], ['two-token body with post-directional', '128 BIRCH WEST', '128 BIRCH W'], ['suffix followed by post-directional', '128 BIRCH ROAD SOUTH', '128 BIRCH RD S'], ['direction-named street with suffix', '128 WEST ST', '128 WEST ST'], ['direction-named street with suffix and post-directional', '128 EAST LANE NORTH', '128 EAST LN N'], ['comma-separated control', '128 S BIRCH BOULEVARD,', '128 S BIRCH BLVD']], [['mixed-case suffix is abbreviated', '135 Cedar Street', '135 CEDAR ST'], ['periods removed from abbreviations', '135 N. CEDAR Ave.', '135 N CEDAR AVE'], ['street named for a direction keeps its name', '135 North', '135 NORTH'], ['two-token body with post-directional', '135 CEDAR WEST', '135 CEDAR W'], ['suffix followed by post-directional', '135 CEDAR ROAD SOUTH', '135 CEDAR RD S'], ['direction-named street with suffix', '135 WEST ST', '135 WEST ST'], ['direction-named street with suffix and post-directional', '135 EAST LANE NORTH', '135 EAST LN N'], ['comma-separated control', '135 S CEDAR BOULEVARD,', '135 S CEDAR BLVD']]]\nfor label, arg, expected in fixtures[N - 1]:\n    check(label, solve(arg), 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":"3d3b2401532672883a010c5a385da6cc95d48283587bf96a34cdb49c945f80dd","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    s = x.upper().replace(',', ' ')\n    t = s.split()\n    if not t:\n        return ''\n    num, body = t[0], t[1:]\n    SUF = {'STREET': 'ST', 'ST': 'ST', 'AVENUE': 'AVE', 'AVE': 'AVE', 'BOULEVARD': 'BLVD', 'BLVD': 'BLVD',\n           'ROAD': 'RD', 'RD': 'RD', 'LANE': 'LN', 'LN': 'LN', 'COURT': 'CT', 'CT': 'CT'}\n    DIR = {'NORTH': 'N', 'N': 'N', 'SOUTH': 'S', 'S': 'S', 'EAST': 'E', 'E': 'E', 'WEST': 'W', 'W': 'W'}\n    pre = suf = post = ''\n    if len(body) > 1 and body[-1] in DIR:\n        post = DIR[body[-1]]\n        body = body[:-1]\n    if len(body) >= 2 and body[-1] in SUF:\n        suf = SUF[body[-1]]\n        body = body[:-1]\n    if body[1:] and body[0] in DIR:\n        pre = DIR[body[0]]\n        body = body[1:]\n    return ' '.join(p for p in [num, pre] + body + [suf, post] if p)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['mixed-case suffix is abbreviated', '107 Oak Street', '107 OAK ST'], ['periods removed from abbreviations', '107 N. OAK Ave.', '107 N OAK AVE'], ['street named for a direction keeps its name', '107 North', '107 NORTH'], ['two-token body with post-directional', '107 OAK WEST', '107 OAK W'], ['suffix followed by post-directional', '107 OAK ROAD SOUTH', '107 OAK RD S'], ['direction-named street with suffix', '107 WEST ST', '107 WEST ST'], ['direction-named street with suffix and post-directional', '107 EAST LANE NORTH', '107 EAST LN N'], ['comma-separated control', '107 S OAK BOULEVARD,', '107 S OAK BLVD']], [['mixed-case suffix is abbreviated', '114 Elm Street', '114 ELM ST'], ['periods removed from abbreviations', '114 N. ELM Ave.', '114 N ELM AVE'], ['street named for a direction keeps its name', '114 North', '114 NORTH'], ['two-token body with post-directional', '114 ELM WEST', '114 ELM W'], ['suffix followed by post-directional', '114 ELM ROAD SOUTH', '114 ELM RD S'], ['direction-named street with suffix', '114 WEST ST', '114 WEST ST'], ['direction-named street with suffix and post-directional', '114 EAST LANE NORTH', '114 EAST LN N'], ['comma-separated control', '114 S ELM BOULEVARD,', '114 S ELM BLVD']], [['mixed-case suffix is abbreviated', '121 Maple Street', '121 MAPLE ST'], ['periods removed from abbreviations', '121 N. MAPLE Ave.', '121 N MAPLE AVE'], ['street named for a direction keeps its name', '121 North', '121 NORTH'], ['two-token body with post-directional', '121 MAPLE WEST', '121 MAPLE W'], ['suffix followed by post-directional', '121 MAPLE ROAD SOUTH', '121 MAPLE RD S'], ['direction-named street with suffix', '121 WEST ST', '121 WEST ST'], ['direction-named street with suffix and post-directional', '121 EAST LANE NORTH', '121 EAST LN N'], ['comma-separated control', '121 S MAPLE BOULEVARD,', '121 S MAPLE BLVD']], [['mixed-case suffix is abbreviated', '128 Birch Street', '128 BIRCH ST'], ['periods removed from abbreviations', '128 N. BIRCH Ave.', '128 N BIRCH AVE'], ['street named for a direction keeps its name', '128 North', '128 NORTH'], ['two-token body with post-directional', '128 BIRCH WEST', '128 BIRCH W'], ['suffix followed by post-directional', '128 BIRCH ROAD SOUTH', '128 BIRCH RD S'], ['direction-named street with suffix', '128 WEST ST', '128 WEST ST'], ['direction-named street with suffix and post-directional', '128 EAST LANE NORTH', '128 EAST LN N'], ['comma-separated control', '128 S BIRCH BOULEVARD,', '128 S BIRCH BLVD']], [['mixed-case suffix is abbreviated', '135 Cedar Street', '135 CEDAR ST'], ['periods removed from abbreviations', '135 N. CEDAR Ave.', '135 N CEDAR AVE'], ['street named for a direction keeps its name', '135 North', '135 NORTH'], ['two-token body with post-directional', '135 CEDAR WEST', '135 CEDAR W'], ['suffix followed by post-directional', '135 CEDAR ROAD SOUTH', '135 CEDAR RD S'], ['direction-named street with suffix', '135 WEST ST', '135 WEST ST'], ['direction-named street with suffix and post-directional', '135 EAST LANE NORTH', '135 EAST LN N'], ['comma-separated control', '135 S CEDAR BOULEVARD,', '135 S CEDAR BLVD']]]\nfor label, arg, expected in fixtures[N - 1]:\n    check(label, solve(arg), 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":"5e3db513a029c237e258c864dba1fe1bf8b1c9eda00c9cbac0c32fd6464ae6dc","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    s = x.upper().replace('.', '').replace(',', ' ')\n    t = s.split()\n    if not t:\n        return ''\n    num, body = t[0], t[1:]\n    SUF = {'STREET': 'ST', 'ST': 'ST', 'AVENUE': 'AVE', 'AVE': 'AVE', 'BOULEVARD': 'BLVD', 'BLVD': 'BLVD',\n           'ROAD': 'RD', 'RD': 'RD', 'LANE': 'LN', 'LN': 'LN', 'COURT': 'CT', 'CT': 'CT'}\n    DIR = {'NORTH': 'N', 'N': 'N', 'SOUTH': 'S', 'S': 'S', 'EAST': 'E', 'E': 'E', 'WEST': 'W', 'W': 'W'}\n    pre = suf = post = ''\n    if len(body) > 1 and body[-1] in DIR:\n        post = DIR[body[-1]]\n        body = body[:-1]\n    if len(body) >= 2 and body[-1] in SUF:\n        suf = SUF[body[-1]]\n        body = body[:-1]\n    if body[1:] and body[0] in DIR:\n        pre = DIR[body[0]]\n        body = body[1:]\n    return ' '.join(p for p in [num, pre] + body + [suf, post] if p)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['mixed-case suffix is abbreviated', '107 Oak Street', '107 OAK ST'], ['periods removed from abbreviations', '107 N. OAK Ave.', '107 N OAK AVE'], ['street named for a direction keeps its name', '107 North', '107 NORTH'], ['two-token body with post-directional', '107 OAK WEST', '107 OAK W'], ['suffix followed by post-directional', '107 OAK ROAD SOUTH', '107 OAK RD S'], ['direction-named street with suffix', '107 WEST ST', '107 WEST ST'], ['direction-named street with suffix and post-directional', '107 EAST LANE NORTH', '107 EAST LN N'], ['comma-separated control', '107 S OAK BOULEVARD,', '107 S OAK BLVD']], [['mixed-case suffix is abbreviated', '114 Elm Street', '114 ELM ST'], ['periods removed from abbreviations', '114 N. ELM Ave.', '114 N ELM AVE'], ['street named for a direction keeps its name', '114 North', '114 NORTH'], ['two-token body with post-directional', '114 ELM WEST', '114 ELM W'], ['suffix followed by post-directional', '114 ELM ROAD SOUTH', '114 ELM RD S'], ['direction-named street with suffix', '114 WEST ST', '114 WEST ST'], ['direction-named street with suffix and post-directional', '114 EAST LANE NORTH', '114 EAST LN N'], ['comma-separated control', '114 S ELM BOULEVARD,', '114 S ELM BLVD']], [['mixed-case suffix is abbreviated', '121 Maple Street', '121 MAPLE ST'], ['periods removed from abbreviations', '121 N. MAPLE Ave.', '121 N MAPLE AVE'], ['street named for a direction keeps its name', '121 North', '121 NORTH'], ['two-token body with post-directional', '121 MAPLE WEST', '121 MAPLE W'], ['suffix followed by post-directional', '121 MAPLE ROAD SOUTH', '121 MAPLE RD S'], ['direction-named street with suffix', '121 WEST ST', '121 WEST ST'], ['direction-named street with suffix and post-directional', '121 EAST LANE NORTH', '121 EAST LN N'], ['comma-separated control', '121 S MAPLE BOULEVARD,', '121 S MAPLE BLVD']], [['mixed-case suffix is abbreviated', '128 Birch Street', '128 BIRCH ST'], ['periods removed from abbreviations', '128 N. BIRCH Ave.', '128 N BIRCH AVE'], ['street named for a direction keeps its name', '128 North', '128 NORTH'], ['two-token body with post-directional', '128 BIRCH WEST', '128 BIRCH W'], ['suffix followed by post-directional', '128 BIRCH ROAD SOUTH', '128 BIRCH RD S'], ['direction-named street with suffix', '128 WEST ST', '128 WEST ST'], ['direction-named street with suffix and post-directional', '128 EAST LANE NORTH', '128 EAST LN N'], ['comma-separated control', '128 S BIRCH BOULEVARD,', '128 S BIRCH BLVD']], [['mixed-case suffix is abbreviated', '135 Cedar Street', '135 CEDAR ST'], ['periods removed from abbreviations', '135 N. CEDAR Ave.', '135 N CEDAR AVE'], ['street named for a direction keeps its name', '135 North', '135 NORTH'], ['two-token body with post-directional', '135 CEDAR WEST', '135 CEDAR W'], ['suffix followed by post-directional', '135 CEDAR ROAD SOUTH', '135 CEDAR RD S'], ['direction-named street with suffix', '135 WEST ST', '135 WEST ST'], ['direction-named street with suffix and post-directional', '135 EAST LANE NORTH', '135 EAST LN N'], ['comma-separated control', '135 S CEDAR BOULEVARD,', '135 S CEDAR BLVD']]]\nfor label, arg, expected in fixtures[N - 1]:\n    check(label, solve(arg), 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 toy contract over synthetic, obviously fictitious addresses. The rules are stipulated for this model only and make no claim of conformance with any postal authority standard. 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-postal-address-normalization-street-line-abbreviation-periods","generated_at":"2026-09-29T14:52:17.437313+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Street lines are the dominant key in address matching; a single-token street named after a direction or suffix must not be abbreviated away.","repair":"Delete every period in the line before tokenizing.","root_cause":"Periods are never deleted, so \"N.\" and \"AVE.\" miss the directional and suffix tables.","sha256":"28024e959fdf53848f9d2f21103e48a0efa93653a060b83dabf596405888e712","title":"Street line standardizer: abbreviations keep their periods · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":42.085,"exit_code":1,"observations":[{"actual":"107 OAK ST","check":"mixed-case suffix is abbreviated","expected":"107 OAK ST","passed":true},{"actual":"107 N. OAK AVE","check":"periods removed from abbreviations","expected":"107 N OAK AVE","passed":false},{"actual":"107 NORTH","check":"street named for a direction keeps its name","expected":"107 NORTH","passed":true},{"actual":"107 OAK W","check":"two-token body with post-directional","expected":"107 OAK W","passed":true},{"actual":"107 OAK RD S","check":"suffix followed by post-directional","expected":"107 OAK RD S","passed":true},{"actual":"107 WEST ST","check":"direction-named street with suffix","expected":"107 WEST ST","passed":true},{"actual":"107 EAST LN N","check":"direction-named street with suffix and post-directional","expected":"107 EAST LN N","passed":true},{"actual":"107 S OAK BLVD","check":"comma-separated control","expected":"107 S OAK BLVD","passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"mixed-case suffix is abbreviated\", \"actual\": \"107 OAK ST\", \"expected\": \"107 OAK ST\", \"passed\": true}, {\"check\": \"periods removed from abbreviations\", \"actual\": \"107 N. OAK AVE\", \"expected\": \"107 N OAK AVE\", \"passed\": false}, {\"check\": \"street named for a direction keeps its name\", \"actual\": \"107 NORTH\", \"expected\": \"107 NORTH\", \"passed\": true}, {\"check\": \"two-token body with post-directional\", \"actual\": \"107 OAK W\", \"expected\": \"107 OAK W\", \"passed\": true}, {\"check\": \"suffix followed by post-directional\", \"actual\": \"107 OAK RD S\", \"expected\": \"107 OAK RD S\", \"passed\": true}, {\"check\": \"direction-named street with suffix\", \"actual\": \"107 WEST ST\", \"expected\": \"107 WEST ST\", \"passed\": true}, {\"check\": \"direction-named street with suffix and post-directional\", \"actual\": \"107 EAST LN N\", \"expected\": \"107 EAST LN N\", \"passed\": true}, {\"check\": \"comma-separated control\", \"actual\": \"107 S OAK BLVD\", \"expected\": \"107 S OAK BLVD\", \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":39.606,"exit_code":1,"observations":[{"actual":"107 OAK ST","check":"mixed-case suffix is abbreviated","expected":"107 OAK ST","passed":true},{"actual":"107 N. OAK AVE.","check":"periods removed from abbreviations","expected":"107 N OAK AVE","passed":false},{"actual":"107 NORTH","check":"street named for a direction keeps its name","expected":"107 NORTH","passed":true},{"actual":"107 OAK W","check":"two-token body with post-directional","expected":"107 OAK W","passed":true},{"actual":"107 OAK RD S","check":"suffix followed by post-directional","expected":"107 OAK RD S","passed":true},{"actual":"107 WEST ST","check":"direction-named street with suffix","expected":"107 WEST ST","passed":true},{"actual":"107 EAST LN N","check":"direction-named street with suffix and post-directional","expected":"107 EAST LN N","passed":true},{"actual":"107 S OAK BLVD","check":"comma-separated control","expected":"107 S OAK BLVD","passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"mixed-case suffix is abbreviated\", \"actual\": \"107 OAK ST\", \"expected\": \"107 OAK ST\", \"passed\": true}, {\"check\": \"periods removed from abbreviations\", \"actual\": \"107 N. OAK AVE.\", \"expected\": \"107 N OAK AVE\", \"passed\": false}, {\"check\": \"street named for a direction keeps its name\", \"actual\": \"107 NORTH\", \"expected\": \"107 NORTH\", \"passed\": true}, {\"check\": \"two-token body with post-directional\", \"actual\": \"107 OAK W\", \"expected\": \"107 OAK W\", \"passed\": true}, {\"check\": \"suffix followed by post-directional\", \"actual\": \"107 OAK RD S\", \"expected\": \"107 OAK RD S\", \"passed\": true}, {\"check\": \"direction-named street with suffix\", \"actual\": \"107 WEST ST\", \"expected\": \"107 WEST ST\", \"passed\": true}, {\"check\": \"direction-named street with suffix and post-directional\", \"actual\": \"107 EAST LN N\", \"expected\": \"107 EAST LN N\", \"passed\": true}, {\"check\": \"comma-separated control\", \"actual\": \"107 S OAK BLVD\", \"expected\": \"107 S OAK BLVD\", \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":39.405,"exit_code":0,"observations":[{"actual":"107 OAK ST","check":"mixed-case suffix is abbreviated","expected":"107 OAK ST","passed":true},{"actual":"107 N OAK AVE","check":"periods removed from abbreviations","expected":"107 N OAK AVE","passed":true},{"actual":"107 NORTH","check":"street named for a direction keeps its name","expected":"107 NORTH","passed":true},{"actual":"107 OAK W","check":"two-token body with post-directional","expected":"107 OAK W","passed":true},{"actual":"107 OAK RD S","check":"suffix followed by post-directional","expected":"107 OAK RD S","passed":true},{"actual":"107 WEST ST","check":"direction-named street with suffix","expected":"107 WEST ST","passed":true},{"actual":"107 EAST LN N","check":"direction-named street with suffix and post-directional","expected":"107 EAST LN N","passed":true},{"actual":"107 S OAK BLVD","check":"comma-separated control","expected":"107 S OAK BLVD","passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"mixed-case suffix is abbreviated\", \"actual\": \"107 OAK ST\", \"expected\": \"107 OAK ST\", \"passed\": true}, {\"check\": \"periods removed from abbreviations\", \"actual\": \"107 N OAK AVE\", \"expected\": \"107 N OAK AVE\", \"passed\": true}, {\"check\": \"street named for a direction keeps its name\", \"actual\": \"107 NORTH\", \"expected\": \"107 NORTH\", \"passed\": true}, {\"check\": \"two-token body with post-directional\", \"actual\": \"107 OAK W\", \"expected\": \"107 OAK W\", \"passed\": true}, {\"check\": \"suffix followed by post-directional\", \"actual\": \"107 OAK RD S\", \"expected\": \"107 OAK RD S\", \"passed\": true}, {\"check\": \"direction-named street with suffix\", \"actual\": \"107 WEST ST\", \"expected\": \"107 WEST ST\", \"passed\": true}, {\"check\": \"direction-named street with suffix and post-directional\", \"actual\": \"107 EAST LN N\", \"expected\": \"107 EAST LN N\", \"passed\": true}, {\"check\": \"comma-separated control\", \"actual\": \"107 S OAK BLVD\", \"expected\": \"107 S OAK BLVD\", \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}