FA-11346 / Spreadsheet calculation semantics / Open access
Range SUM coerces text and logical cells into numbers · case 01
A range sum includes numeric-looking labels and logical cells.
ROOT CAUSE
Scalar coercion rules are reused for range members.
VERIFIED REPAIR
Sum only exact int or float cell values.
Unsuccessful approach: Using isinstance for numbers still admits booleans in Python.
Case contract
A range contains finite ints, floats, strings, booleans or None. Return SUM of numeric cells only; strings, booleans and blanks are ignored.
Why this case matters
This isolated spreadsheet model makes cell semantics explicit; it does not claim compatibility with every workbook engine.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(cells):
total = 0
for cell in cells:
try:
total += float(cell) if cell is not None else 0
except ValueError:
pass
return total
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('numeric text ignored', solve([N, str(N)]), N)
check('logical true ignored', solve([N, True]), N)
check('blank range', solve([None, '']), 0)
check('zero retained', solve([0, N]), N)
check('negative cells', solve([-N, N/2]), -N/2)
check('empty range', solve([]), 0)
check('labels ignored', solve(['item', False, N]), N)
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 |
|---|---|---|---|
| numeric text ignored | 2.0 | 1 | Failed |
| logical true ignored | 2.0 | 1 | Failed |
| blank range | 0 | 0 | Passed |
| zero retained | 1.0 | 1 | Passed |
| negative cells | -0.5 | -0.5 | Passed |
| empty range | 0 | 0 | Passed |
| labels ignored | 1.0 | 1 | Passed |
SHA-256 / 05a13a1ab58bf46e99dcbe310fea1cc1cbe5d7106ac921681e92cfa996019276
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(cells):
return sum(cell for cell in cells if isinstance(cell, (int, float)))
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('numeric text ignored', solve([N, str(N)]), N)
check('logical true ignored', solve([N, True]), N)
check('blank range', solve([None, '']), 0)
check('zero retained', solve([0, N]), N)
check('negative cells', solve([-N, N/2]), -N/2)
check('empty range', solve([]), 0)
check('labels ignored', solve(['item', False, N]), N)
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 |
|---|---|---|---|
| numeric text ignored | 1 | 1 | Passed |
| logical true ignored | 2 | 1 | Failed |
| blank range | 0 | 0 | Passed |
| zero retained | 1 | 1 | Passed |
| negative cells | -0.5 | -0.5 | Passed |
| empty range | 0 | 0 | Passed |
| labels ignored | 1 | 1 | Passed |
SHA-256 / c1c4d3a63d5a461684204cefb57dbe9e35f06ebdbc43c3aa0b48fb1e8944fd6b
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(cells):
return sum(cell for cell in cells if type(cell) in (int, float))
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('numeric text ignored', solve([N, str(N)]), N)
check('logical true ignored', solve([N, True]), N)
check('blank range', solve([None, '']), 0)
check('zero retained', solve([0, N]), N)
check('negative cells', solve([-N, N/2]), -N/2)
check('empty range', solve([]), 0)
check('labels ignored', solve(['item', False, N]), N)
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 |
|---|---|---|---|
| numeric text ignored | 1 | 1 | Passed |
| logical true ignored | 1 | 1 | Passed |
| blank range | 0 | 0 | Passed |
| zero retained | 1 | 1 | Passed |
| negative cells | -0.5 | -0.5 | Passed |
| empty range | 0 | 0 | Passed |
| labels ignored | 1 | 1 | Passed |
SHA-256 / 3cad63eb071230a398ea7675cfc75645477a703a0651f985e9b01af7c1fe6441
Verification & scope
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:38:47.154695+00:00.
Case digest / f69f0ff7dbce9d478dd45496a55f4349ad8891a97a47659f04630032622d7570