{"abstract":"Empty string results disappear from blank counts or zero values are counted as blank.","category":"Spreadsheet calculation semantics","checks":6,"contract":"COUNTBLANK model counts None and empty string cells, including empty formula results; numeric zero, False and whitespace are not blank.","evaluation_group":"model-5c27f9f043d27e99","failed_approach":"Treating all false values as blank includes zero and FALSE.","family":"z-spreadsheets-countblank-empty-result","id":"FA-11351","implementations":{"attempt":{"sha256":"4afc0ca6a3b1eab35cc6381e14bb4c67fbe4452f0ce0d384f06f9a9dd95a7560","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(cells):\n    return sum(not cell for cell in cells)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('empty formula strings', solve(['']*N), N)\ncheck('zero is occupied', solve([0]*N), 0)\ncheck('false is occupied', solve([False, None]), 1)\ncheck('space is occupied', solve([' ', '']), 1)\ncheck('empty range', solve([]), 0)\ncheck('mixed blanks', solve([None, '', N, 'x']), 2)\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":"efad2b8c0b86ae38aca256dfac4598279dcf44d432b2f426e14579fca5f4672d","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(cells):\n    return sum(cell is None for cell in cells)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('empty formula strings', solve(['']*N), N)\ncheck('zero is occupied', solve([0]*N), 0)\ncheck('false is occupied', solve([False, None]), 1)\ncheck('space is occupied', solve([' ', '']), 1)\ncheck('empty range', solve([]), 0)\ncheck('mixed blanks', solve([None, '', N, 'x']), 2)\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":"526d9c7ffc3dbf72f5ea831666d77195535a320b8cebf6d8c29a6723d5de873b","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(cells):\n    return sum(cell is None or (type(cell) is str and cell == '') for cell in cells)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('empty formula strings', solve(['']*N), N)\ncheck('zero is occupied', solve([0]*N), 0)\ncheck('false is occupied', solve([False, None]), 1)\ncheck('space is occupied', solve([' ', '']), 1)\ncheck('empty range', solve([]), 0)\ncheck('mixed blanks', solve([None, '', N, 'x']), 2)\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":" 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":"z-spreadsheets-countblank-empty-result","generated_at":"2026-09-29T14:38:47.191687+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"This isolated spreadsheet model makes cell semantics explicit; it does not claim compatibility with every workbook engine.","repair":"Count None and empty strings explicitly.","root_cause":"Blankness is represented by either identity with None or general falsiness.","sha256":"4a03fa4fb3b932b6c983ddea1c08a4b89c3a56774b36fe813b01198810cd62fe","title":"Blank counting confuses absent cells with empty formula results · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":38.125,"exit_code":1,"observations":[{"actual":1,"check":"empty formula strings","expected":1,"passed":true},{"actual":1,"check":"zero is occupied","expected":0,"passed":false},{"actual":2,"check":"false is occupied","expected":1,"passed":false},{"actual":1,"check":"space is occupied","expected":1,"passed":true},{"actual":0,"check":"empty range","expected":0,"passed":true},{"actual":2,"check":"mixed blanks","expected":2,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"empty formula strings\", \"actual\": 1, \"expected\": 1, \"passed\": true}, {\"check\": \"zero is occupied\", \"actual\": 1, \"expected\": 0, \"passed\": false}, {\"check\": \"false is occupied\", \"actual\": 2, \"expected\": 1, \"passed\": false}, {\"check\": \"space is occupied\", \"actual\": 1, \"expected\": 1, \"passed\": true}, {\"check\": \"empty range\", \"actual\": 0, \"expected\": 0, \"passed\": true}, {\"check\": \"mixed blanks\", \"actual\": 2, \"expected\": 2, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":38.398,"exit_code":1,"observations":[{"actual":0,"check":"empty formula strings","expected":1,"passed":false},{"actual":0,"check":"zero is occupied","expected":0,"passed":true},{"actual":1,"check":"false is occupied","expected":1,"passed":true},{"actual":0,"check":"space is occupied","expected":1,"passed":false},{"actual":0,"check":"empty range","expected":0,"passed":true},{"actual":1,"check":"mixed blanks","expected":2,"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"empty formula strings\", \"actual\": 0, \"expected\": 1, \"passed\": false}, {\"check\": \"zero is occupied\", \"actual\": 0, \"expected\": 0, \"passed\": true}, {\"check\": \"false is occupied\", \"actual\": 1, \"expected\": 1, \"passed\": true}, {\"check\": \"space is occupied\", \"actual\": 0, \"expected\": 1, \"passed\": false}, {\"check\": \"empty range\", \"actual\": 0, \"expected\": 0, \"passed\": true}, {\"check\": \"mixed blanks\", \"actual\": 1, \"expected\": 2, \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":38.692,"exit_code":0,"observations":[{"actual":1,"check":"empty formula strings","expected":1,"passed":true},{"actual":0,"check":"zero is occupied","expected":0,"passed":true},{"actual":1,"check":"false is occupied","expected":1,"passed":true},{"actual":1,"check":"space is occupied","expected":1,"passed":true},{"actual":0,"check":"empty range","expected":0,"passed":true},{"actual":2,"check":"mixed blanks","expected":2,"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"empty formula strings\", \"actual\": 1, \"expected\": 1, \"passed\": true}, {\"check\": \"zero is occupied\", \"actual\": 0, \"expected\": 0, \"passed\": true}, {\"check\": \"false is occupied\", \"actual\": 1, \"expected\": 1, \"passed\": true}, {\"check\": \"space is occupied\", \"actual\": 1, \"expected\": 1, \"passed\": true}, {\"check\": \"empty range\", \"actual\": 0, \"expected\": 0, \"passed\": true}, {\"check\": \"mixed blanks\", \"actual\": 2, \"expected\": 2, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}