FAILURE MAP
← Case archive

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.

Verified by executionVariant 1 · 7 checks per implementationDownload source bundle ↓JSON ↗

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 fixtureActualExpectedOutcome
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 fixtureActualExpectedOutcome
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 fixtureActualExpectedOutcome
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