FA-95876 / Postal address normalization / Open access
Secondary unit extractor: long designators are emitted verbatim · case 01
The unit reads "SUITE 100" and "APARTMENT 1B" instead of "STE 100" and "APT 1B".
ROOT CAUSE
The designator token is copied into the unit instead of being mapped through the table.
VERIFIED REPAIR
Emit the mapped canonical designator from the table.
Unsuccessful approach: Truncating the designator to three letters turns SUITE into "SUI" and FLOOR into "FLO".
Case contract
Input one uppercase-able street line. Split on whitespace. A final token "#ID" (with at least one character after #) becomes unit "# ID". Otherwise, if at least three tokens exist and the second-to-last token is a designator (APARTMENT/APT->APT, SUITE/STE->STE, UNIT, FLOOR/FL->FL, #), the last token is its identifier. Return [street, unit] with unit "" when none is found.
Why this case matters
Separating the secondary unit from the street line decides whether two deliveries go to the same building and which unit receives them.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
DES = {'APARTMENT': 'APT', 'APT': 'APT', 'SUITE': 'STE', 'STE': 'STE', 'UNIT': 'UNIT', 'FLOOR': 'FL',
'FL': 'FL', '#': '#'}
t = x.upper().split()
if len(t) >= 2 and t[-1].startswith('#') and len(t[-1]) > 1:
return [' '.join(t[:-1]), '# ' + t[-1][1:]]
if len(t) >= 3 and t[-2] in DES:
return [' '.join(t[:-2]), t[-2] + ' ' + t[-1]]
return [' '.join(t), '']
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['trailing apartment is split off', '21 OAK ST APARTMENT 1B', ['21 OAK ST', 'APT 1B']], ['suite designator abbreviated', '21 OAK ST SUITE 100', ['21 OAK ST', 'STE 100']], ['attached hash unit', '21 OAK ST #1B', ['21 OAK ST', '# 1B']], ['separate hash token', '21 OAK ST # 5', ['21 OAK ST', '# 5']], ['dangling hash stays in the street', '21 OAK ST #', ['21 OAK ST #', '']], ['single-character attached unit', '21 OAK ST #1', ['21 OAK ST', '# 1']], ['designator line without street', 'UNIT 9', ['UNIT 9', '']], ['building name with floor', 'FAKEWAY FLOOR 1', ['FAKEWAY', 'FL 1']], ['substring APT inside a word is not a designator', '21 CAPTAIN WAY', ['21 CAPTAIN WAY', '']]], [['trailing apartment is split off', '22 ELM ST APARTMENT 2B', ['22 ELM ST', 'APT 2B']], ['suite designator abbreviated', '22 ELM ST SUITE 200', ['22 ELM ST', 'STE 200']], ['attached hash unit', '22 ELM ST #2B', ['22 ELM ST', '# 2B']], ['separate hash token', '22 ELM ST # 6', ['22 ELM ST', '# 6']], ['dangling hash stays in the street', '22 ELM ST #', ['22 ELM ST #', '']], ['single-character attached unit', '22 ELM ST #2', ['22 ELM ST', '# 2']], ['designator line without street', 'UNIT 10', ['UNIT 10', '']], ['building name with floor', 'FAKEWAY FLOOR 2', ['FAKEWAY', 'FL 2']], ['substring APT inside a word is not a designator', '22 CAPTAIN WAY', ['22 CAPTAIN WAY', '']]], [['trailing apartment is split off', '23 MAPLE ST APARTMENT 3B', ['23 MAPLE ST', 'APT 3B']], ['suite designator abbreviated', '23 MAPLE ST SUITE 300', ['23 MAPLE ST', 'STE 300']], ['attached hash unit', '23 MAPLE ST #3B', ['23 MAPLE ST', '# 3B']], ['separate hash token', '23 MAPLE ST # 7', ['23 MAPLE ST', '# 7']], ['dangling hash stays in the street', '23 MAPLE ST #', ['23 MAPLE ST #', '']], ['single-character attached unit', '23 MAPLE ST #3', ['23 MAPLE ST', '# 3']], ['designator line without street', 'UNIT 11', ['UNIT 11', '']], ['building name with floor', 'FAKEWAY FLOOR 3', ['FAKEWAY', 'FL 3']], ['substring APT inside a word is not a designator', '23 CAPTAIN WAY', ['23 CAPTAIN WAY', '']]], [['trailing apartment is split off', '24 BIRCH ST APARTMENT 4B', ['24 BIRCH ST', 'APT 4B']], ['suite designator abbreviated', '24 BIRCH ST SUITE 400', ['24 BIRCH ST', 'STE 400']], ['attached hash unit', '24 BIRCH ST #4B', ['24 BIRCH ST', '# 4B']], ['separate hash token', '24 BIRCH ST # 8', ['24 BIRCH ST', '# 8']], ['dangling hash stays in the street', '24 BIRCH ST #', ['24 BIRCH ST #', '']], ['single-character attached unit', '24 BIRCH ST #4', ['24 BIRCH ST', '# 4']], ['designator line without street', 'UNIT 12', ['UNIT 12', '']], ['building name with floor', 'FAKEWAY FLOOR 4', ['FAKEWAY', 'FL 4']], ['substring APT inside a word is not a designator', '24 CAPTAIN WAY', ['24 CAPTAIN WAY', '']]], [['trailing apartment is split off', '25 CEDAR ST APARTMENT 5B', ['25 CEDAR ST', 'APT 5B']], ['suite designator abbreviated', '25 CEDAR ST SUITE 500', ['25 CEDAR ST', 'STE 500']], ['attached hash unit', '25 CEDAR ST #5B', ['25 CEDAR ST', '# 5B']], ['separate hash token', '25 CEDAR ST # 9', ['25 CEDAR ST', '# 9']], ['dangling hash stays in the street', '25 CEDAR ST #', ['25 CEDAR ST #', '']], ['single-character attached unit', '25 CEDAR ST #5', ['25 CEDAR ST', '# 5']], ['designator line without street', 'UNIT 13', ['UNIT 13', '']], ['building name with floor', 'FAKEWAY FLOOR 5', ['FAKEWAY', 'FL 5']], ['substring APT inside a word is not a designator', '25 CAPTAIN WAY', ['25 CAPTAIN WAY', '']]]]
for label, arg, expected in fixtures[N - 1]:
check(label, solve(arg), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| trailing apartment is split off | ['21 OAK ST', 'APARTMENT 1B'] | ['21 OAK ST', 'APT 1B'] | Failed |
| suite designator abbreviated | ['21 OAK ST', 'SUITE 100'] | ['21 OAK ST', 'STE 100'] | Failed |
| attached hash unit | ['21 OAK ST', '# 1B'] | ['21 OAK ST', '# 1B'] | Passed |
| separate hash token | ['21 OAK ST', '# 5'] | ['21 OAK ST', '# 5'] | Passed |
| dangling hash stays in the street | ['21 OAK ST #', ''] | ['21 OAK ST #', ''] | Passed |
| single-character attached unit | ['21 OAK ST', '# 1'] | ['21 OAK ST', '# 1'] | Passed |
| designator line without street | ['UNIT 9', ''] | ['UNIT 9', ''] | Passed |
| building name with floor | ['FAKEWAY', 'FLOOR 1'] | ['FAKEWAY', 'FL 1'] | Failed |
| substring APT inside a word is not a designator | ['21 CAPTAIN WAY', ''] | ['21 CAPTAIN WAY', ''] | Passed |
SHA-256 / 03a2b33f53617731b81455cf73bbecf61cb219c6476202584ddbd1b4a80fcb74
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
DES = {'APARTMENT': 'APT', 'APT': 'APT', 'SUITE': 'STE', 'STE': 'STE', 'UNIT': 'UNIT', 'FLOOR': 'FL',
'FL': 'FL', '#': '#'}
t = x.upper().split()
if len(t) >= 2 and t[-1].startswith('#') and len(t[-1]) > 1:
return [' '.join(t[:-1]), '# ' + t[-1][1:]]
if len(t) >= 3 and t[-2] in DES:
return [' '.join(t[:-2]), t[-2][:3] + ' ' + t[-1]]
return [' '.join(t), '']
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['trailing apartment is split off', '21 OAK ST APARTMENT 1B', ['21 OAK ST', 'APT 1B']], ['suite designator abbreviated', '21 OAK ST SUITE 100', ['21 OAK ST', 'STE 100']], ['attached hash unit', '21 OAK ST #1B', ['21 OAK ST', '# 1B']], ['separate hash token', '21 OAK ST # 5', ['21 OAK ST', '# 5']], ['dangling hash stays in the street', '21 OAK ST #', ['21 OAK ST #', '']], ['single-character attached unit', '21 OAK ST #1', ['21 OAK ST', '# 1']], ['designator line without street', 'UNIT 9', ['UNIT 9', '']], ['building name with floor', 'FAKEWAY FLOOR 1', ['FAKEWAY', 'FL 1']], ['substring APT inside a word is not a designator', '21 CAPTAIN WAY', ['21 CAPTAIN WAY', '']]], [['trailing apartment is split off', '22 ELM ST APARTMENT 2B', ['22 ELM ST', 'APT 2B']], ['suite designator abbreviated', '22 ELM ST SUITE 200', ['22 ELM ST', 'STE 200']], ['attached hash unit', '22 ELM ST #2B', ['22 ELM ST', '# 2B']], ['separate hash token', '22 ELM ST # 6', ['22 ELM ST', '# 6']], ['dangling hash stays in the street', '22 ELM ST #', ['22 ELM ST #', '']], ['single-character attached unit', '22 ELM ST #2', ['22 ELM ST', '# 2']], ['designator line without street', 'UNIT 10', ['UNIT 10', '']], ['building name with floor', 'FAKEWAY FLOOR 2', ['FAKEWAY', 'FL 2']], ['substring APT inside a word is not a designator', '22 CAPTAIN WAY', ['22 CAPTAIN WAY', '']]], [['trailing apartment is split off', '23 MAPLE ST APARTMENT 3B', ['23 MAPLE ST', 'APT 3B']], ['suite designator abbreviated', '23 MAPLE ST SUITE 300', ['23 MAPLE ST', 'STE 300']], ['attached hash unit', '23 MAPLE ST #3B', ['23 MAPLE ST', '# 3B']], ['separate hash token', '23 MAPLE ST # 7', ['23 MAPLE ST', '# 7']], ['dangling hash stays in the street', '23 MAPLE ST #', ['23 MAPLE ST #', '']], ['single-character attached unit', '23 MAPLE ST #3', ['23 MAPLE ST', '# 3']], ['designator line without street', 'UNIT 11', ['UNIT 11', '']], ['building name with floor', 'FAKEWAY FLOOR 3', ['FAKEWAY', 'FL 3']], ['substring APT inside a word is not a designator', '23 CAPTAIN WAY', ['23 CAPTAIN WAY', '']]], [['trailing apartment is split off', '24 BIRCH ST APARTMENT 4B', ['24 BIRCH ST', 'APT 4B']], ['suite designator abbreviated', '24 BIRCH ST SUITE 400', ['24 BIRCH ST', 'STE 400']], ['attached hash unit', '24 BIRCH ST #4B', ['24 BIRCH ST', '# 4B']], ['separate hash token', '24 BIRCH ST # 8', ['24 BIRCH ST', '# 8']], ['dangling hash stays in the street', '24 BIRCH ST #', ['24 BIRCH ST #', '']], ['single-character attached unit', '24 BIRCH ST #4', ['24 BIRCH ST', '# 4']], ['designator line without street', 'UNIT 12', ['UNIT 12', '']], ['building name with floor', 'FAKEWAY FLOOR 4', ['FAKEWAY', 'FL 4']], ['substring APT inside a word is not a designator', '24 CAPTAIN WAY', ['24 CAPTAIN WAY', '']]], [['trailing apartment is split off', '25 CEDAR ST APARTMENT 5B', ['25 CEDAR ST', 'APT 5B']], ['suite designator abbreviated', '25 CEDAR ST SUITE 500', ['25 CEDAR ST', 'STE 500']], ['attached hash unit', '25 CEDAR ST #5B', ['25 CEDAR ST', '# 5B']], ['separate hash token', '25 CEDAR ST # 9', ['25 CEDAR ST', '# 9']], ['dangling hash stays in the street', '25 CEDAR ST #', ['25 CEDAR ST #', '']], ['single-character attached unit', '25 CEDAR ST #5', ['25 CEDAR ST', '# 5']], ['designator line without street', 'UNIT 13', ['UNIT 13', '']], ['building name with floor', 'FAKEWAY FLOOR 5', ['FAKEWAY', 'FL 5']], ['substring APT inside a word is not a designator', '25 CAPTAIN WAY', ['25 CAPTAIN WAY', '']]]]
for label, arg, expected in fixtures[N - 1]:
check(label, solve(arg), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| trailing apartment is split off | ['21 OAK ST', 'APA 1B'] | ['21 OAK ST', 'APT 1B'] | Failed |
| suite designator abbreviated | ['21 OAK ST', 'SUI 100'] | ['21 OAK ST', 'STE 100'] | Failed |
| attached hash unit | ['21 OAK ST', '# 1B'] | ['21 OAK ST', '# 1B'] | Passed |
| separate hash token | ['21 OAK ST', '# 5'] | ['21 OAK ST', '# 5'] | Passed |
| dangling hash stays in the street | ['21 OAK ST #', ''] | ['21 OAK ST #', ''] | Passed |
| single-character attached unit | ['21 OAK ST', '# 1'] | ['21 OAK ST', '# 1'] | Passed |
| designator line without street | ['UNIT 9', ''] | ['UNIT 9', ''] | Passed |
| building name with floor | ['FAKEWAY', 'FLO 1'] | ['FAKEWAY', 'FL 1'] | Failed |
| substring APT inside a word is not a designator | ['21 CAPTAIN WAY', ''] | ['21 CAPTAIN WAY', ''] | Passed |
SHA-256 / 934176901ab7d60d50df275c3fa170a50111917d0c8329eb3d2e155d61e6d401
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
DES = {'APARTMENT': 'APT', 'APT': 'APT', 'SUITE': 'STE', 'STE': 'STE', 'UNIT': 'UNIT', 'FLOOR': 'FL',
'FL': 'FL', '#': '#'}
t = x.upper().split()
if len(t) >= 2 and t[-1].startswith('#') and len(t[-1]) > 1:
return [' '.join(t[:-1]), '# ' + t[-1][1:]]
if len(t) >= 3 and t[-2] in DES:
return [' '.join(t[:-2]), DES[t[-2]] + ' ' + t[-1]]
return [' '.join(t), '']
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['trailing apartment is split off', '21 OAK ST APARTMENT 1B', ['21 OAK ST', 'APT 1B']], ['suite designator abbreviated', '21 OAK ST SUITE 100', ['21 OAK ST', 'STE 100']], ['attached hash unit', '21 OAK ST #1B', ['21 OAK ST', '# 1B']], ['separate hash token', '21 OAK ST # 5', ['21 OAK ST', '# 5']], ['dangling hash stays in the street', '21 OAK ST #', ['21 OAK ST #', '']], ['single-character attached unit', '21 OAK ST #1', ['21 OAK ST', '# 1']], ['designator line without street', 'UNIT 9', ['UNIT 9', '']], ['building name with floor', 'FAKEWAY FLOOR 1', ['FAKEWAY', 'FL 1']], ['substring APT inside a word is not a designator', '21 CAPTAIN WAY', ['21 CAPTAIN WAY', '']]], [['trailing apartment is split off', '22 ELM ST APARTMENT 2B', ['22 ELM ST', 'APT 2B']], ['suite designator abbreviated', '22 ELM ST SUITE 200', ['22 ELM ST', 'STE 200']], ['attached hash unit', '22 ELM ST #2B', ['22 ELM ST', '# 2B']], ['separate hash token', '22 ELM ST # 6', ['22 ELM ST', '# 6']], ['dangling hash stays in the street', '22 ELM ST #', ['22 ELM ST #', '']], ['single-character attached unit', '22 ELM ST #2', ['22 ELM ST', '# 2']], ['designator line without street', 'UNIT 10', ['UNIT 10', '']], ['building name with floor', 'FAKEWAY FLOOR 2', ['FAKEWAY', 'FL 2']], ['substring APT inside a word is not a designator', '22 CAPTAIN WAY', ['22 CAPTAIN WAY', '']]], [['trailing apartment is split off', '23 MAPLE ST APARTMENT 3B', ['23 MAPLE ST', 'APT 3B']], ['suite designator abbreviated', '23 MAPLE ST SUITE 300', ['23 MAPLE ST', 'STE 300']], ['attached hash unit', '23 MAPLE ST #3B', ['23 MAPLE ST', '# 3B']], ['separate hash token', '23 MAPLE ST # 7', ['23 MAPLE ST', '# 7']], ['dangling hash stays in the street', '23 MAPLE ST #', ['23 MAPLE ST #', '']], ['single-character attached unit', '23 MAPLE ST #3', ['23 MAPLE ST', '# 3']], ['designator line without street', 'UNIT 11', ['UNIT 11', '']], ['building name with floor', 'FAKEWAY FLOOR 3', ['FAKEWAY', 'FL 3']], ['substring APT inside a word is not a designator', '23 CAPTAIN WAY', ['23 CAPTAIN WAY', '']]], [['trailing apartment is split off', '24 BIRCH ST APARTMENT 4B', ['24 BIRCH ST', 'APT 4B']], ['suite designator abbreviated', '24 BIRCH ST SUITE 400', ['24 BIRCH ST', 'STE 400']], ['attached hash unit', '24 BIRCH ST #4B', ['24 BIRCH ST', '# 4B']], ['separate hash token', '24 BIRCH ST # 8', ['24 BIRCH ST', '# 8']], ['dangling hash stays in the street', '24 BIRCH ST #', ['24 BIRCH ST #', '']], ['single-character attached unit', '24 BIRCH ST #4', ['24 BIRCH ST', '# 4']], ['designator line without street', 'UNIT 12', ['UNIT 12', '']], ['building name with floor', 'FAKEWAY FLOOR 4', ['FAKEWAY', 'FL 4']], ['substring APT inside a word is not a designator', '24 CAPTAIN WAY', ['24 CAPTAIN WAY', '']]], [['trailing apartment is split off', '25 CEDAR ST APARTMENT 5B', ['25 CEDAR ST', 'APT 5B']], ['suite designator abbreviated', '25 CEDAR ST SUITE 500', ['25 CEDAR ST', 'STE 500']], ['attached hash unit', '25 CEDAR ST #5B', ['25 CEDAR ST', '# 5B']], ['separate hash token', '25 CEDAR ST # 9', ['25 CEDAR ST', '# 9']], ['dangling hash stays in the street', '25 CEDAR ST #', ['25 CEDAR ST #', '']], ['single-character attached unit', '25 CEDAR ST #5', ['25 CEDAR ST', '# 5']], ['designator line without street', 'UNIT 13', ['UNIT 13', '']], ['building name with floor', 'FAKEWAY FLOOR 5', ['FAKEWAY', 'FL 5']], ['substring APT inside a word is not a designator', '25 CAPTAIN WAY', ['25 CAPTAIN WAY', '']]]]
for label, arg, expected in fixtures[N - 1]:
check(label, solve(arg), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| trailing apartment is split off | ['21 OAK ST', 'APT 1B'] | ['21 OAK ST', 'APT 1B'] | Passed |
| suite designator abbreviated | ['21 OAK ST', 'STE 100'] | ['21 OAK ST', 'STE 100'] | Passed |
| attached hash unit | ['21 OAK ST', '# 1B'] | ['21 OAK ST', '# 1B'] | Passed |
| separate hash token | ['21 OAK ST', '# 5'] | ['21 OAK ST', '# 5'] | Passed |
| dangling hash stays in the street | ['21 OAK ST #', ''] | ['21 OAK ST #', ''] | Passed |
| single-character attached unit | ['21 OAK ST', '# 1'] | ['21 OAK ST', '# 1'] | Passed |
| designator line without street | ['UNIT 9', ''] | ['UNIT 9', ''] | Passed |
| building name with floor | ['FAKEWAY', 'FL 1'] | ['FAKEWAY', 'FL 1'] | Passed |
| substring APT inside a word is not a designator | ['21 CAPTAIN WAY', ''] | ['21 CAPTAIN WAY', ''] | Passed |
SHA-256 / 0fdebd8f113467d3a2e3fb0fd2bba9918377364c2b54f2030350c84425b2e27a
Verification & scope
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.
Observations recorded using Python 3.12.14 at 2026-09-29T14:52:17.609048+00:00.
Case digest / 6318e1eb6a758134badcd7ba7c46270f90515c723c5f1b5b2b7555c91c588e10