FA-11371 / Spreadsheet calculation semantics / Open access
A spill overwrites an occupied cell displaying an empty string · case 01
A dynamic array overwrites a formula whose visible result is empty.
ROOT CAUSE
Spill collision checks use displayed value truthiness rather than cell occupancy.
VERIFIED REPAIR
Permit only absent None targets; zero, False and empty strings remain occupied.
Unsuccessful approach: Checking empty strings fixes formula collisions but still treats numeric zero and False as free.
Case contract
Given equal-length proposed values and target cells, return values if all targets are None, otherwise #SPILL!. An empty string means an occupied formula cell. No partial write occurs.
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(values, targets):
return '#SPILL!' if any(targets) else values
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('empty string formula blocks', solve([N], ['']), '#SPILL!')
check('zero blocks', solve([N],[0]), '#SPILL!')
check('logical false blocks', solve([N],[False]), '#SPILL!')
check('absent cell accepts', solve([N],[None]), [N])
check('later collision blocks whole spill', solve([N,N+1],[None,0]), '#SPILL!')
check('empty shape', solve([],[]), [])
check('ordinary text blocks', solve([N],['x']), '#SPILL!')
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 |
|---|---|---|---|
| empty string formula blocks | [1] | #SPILL! | Failed |
| zero blocks | [1] | #SPILL! | Failed |
| logical false blocks | [1] | #SPILL! | Failed |
| absent cell accepts | [1] | [1] | Passed |
| later collision blocks whole spill | [1, 2] | #SPILL! | Failed |
| empty shape | [] | [] | Passed |
| ordinary text blocks | #SPILL! | #SPILL! | Passed |
SHA-256 / 3f55d3217230d84c4982d6de5dbdfcbc69d9dd6cdcadb96667d9559245546545
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(values, targets):
return '#SPILL!' if any(v or v == '' for v in targets) else values
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('empty string formula blocks', solve([N], ['']), '#SPILL!')
check('zero blocks', solve([N],[0]), '#SPILL!')
check('logical false blocks', solve([N],[False]), '#SPILL!')
check('absent cell accepts', solve([N],[None]), [N])
check('later collision blocks whole spill', solve([N,N+1],[None,0]), '#SPILL!')
check('empty shape', solve([],[]), [])
check('ordinary text blocks', solve([N],['x']), '#SPILL!')
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 |
|---|---|---|---|
| empty string formula blocks | #SPILL! | #SPILL! | Passed |
| zero blocks | [1] | #SPILL! | Failed |
| logical false blocks | [1] | #SPILL! | Failed |
| absent cell accepts | [1] | [1] | Passed |
| later collision blocks whole spill | [1, 2] | #SPILL! | Failed |
| empty shape | [] | [] | Passed |
| ordinary text blocks | #SPILL! | #SPILL! | Passed |
SHA-256 / 654aa72b4f5c7d23a04ec99344283abe59f875b004f10f21517898a2dbc5a0ef
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(values, targets):
return '#SPILL!' if any(v is not None for v in targets) else values
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('empty string formula blocks', solve([N], ['']), '#SPILL!')
check('zero blocks', solve([N],[0]), '#SPILL!')
check('logical false blocks', solve([N],[False]), '#SPILL!')
check('absent cell accepts', solve([N],[None]), [N])
check('later collision blocks whole spill', solve([N,N+1],[None,0]), '#SPILL!')
check('empty shape', solve([],[]), [])
check('ordinary text blocks', solve([N],['x']), '#SPILL!')
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 |
|---|---|---|---|
| empty string formula blocks | #SPILL! | #SPILL! | Passed |
| zero blocks | #SPILL! | #SPILL! | Passed |
| logical false blocks | #SPILL! | #SPILL! | Passed |
| absent cell accepts | [1] | [1] | Passed |
| later collision blocks whole spill | #SPILL! | #SPILL! | Passed |
| empty shape | [] | [] | Passed |
| ordinary text blocks | #SPILL! | #SPILL! | Passed |
SHA-256 / 0ea66b7c8f133243e4d6e5132911d61f5058346f8423fc1468d129c76370bc1b
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.364007+00:00.
Case digest / 98cf07cae83986f41cb957f7f753a518c333306ce1dad4e486e6772a5c3b74f7