{"abstract":"Readable directories are mistaken for searchable directories.","category":"Filesystem semantics","checks":6,"contract":"Deterministic in-memory filesystem model. Given already-selected permission triples 0..7 for each ancestor, return whether a known file name can be traversed. Search bit 1 is needed at every ancestor; listing bit 4 is irrelevant. Empty ancestors succeeds.","evaluation_group":"model-9b72159302f0888f","failed_approach":"Checking only the immediate parent ignores blocked ancestors.","family":"z-filesystems-directory-search","id":"FA-11566","implementations":{"attempt":{"sha256":"df9a77dd1ab118b603824ddc192908a5d60def1aa7e8f7a86400e53623a1966b","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(ancestors):\n    return not ancestors or bool(ancestors[-1]&1)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('search without listing',solve([1]*N),True)\ncheck('readable but unsearchable',solve([4]),False)\ncheck('blocked ancestor searchable parent',solve([0,1]),False)\ncheck('blocked middle ancestor',solve([7,4,7]),False)\ncheck('all permissions',solve([7]*N),True)\ncheck('no ancestors',solve([]),True)\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":"c20456c5c565419709e8aa3e9a382b6231eb6a7ae01d4bd17e3d72550b7dff18","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(ancestors):\n    return all(bits & 4 != 0 for bits in ancestors)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('search without listing',solve([1]*N),True)\ncheck('readable but unsearchable',solve([4]),False)\ncheck('blocked ancestor searchable parent',solve([0,1]),False)\ncheck('blocked middle ancestor',solve([7,4,7]),False)\ncheck('all permissions',solve([7]*N),True)\ncheck('no ancestors',solve([]),True)\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":"103ad69efd42a812da2a93b2ac2daa3ab469b35146147c6d1ab57bceacfea139","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(ancestors):\n    return all(bits & 1 != 0 for bits in ancestors)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('search without listing',solve([1]*N),True)\ncheck('readable but unsearchable',solve([4]),False)\ncheck('blocked ancestor searchable parent',solve([0,1]),False)\ncheck('blocked middle ancestor',solve([7,4,7]),False)\ncheck('all permissions',solve([7]*N),True)\ncheck('no ancestors',solve([]),True)\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-filesystems-directory-search","generated_at":"2026-09-29T14:38:49.093353+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"An offline semantic experiment for file API clients; it models only the stated operations, not a complete operating system.","repair":"Require execute/search permission on every traversed directory.","root_cause":"Directory read permission is treated as permission to traverse a known child name.","sha256":"0ab270c25e87cd3d9e1c3c69f54049d10abd073bcad1ac6732acd3772c285d5f","title":"Readable directories are mistaken for searchable directories · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":39.409,"exit_code":1,"observations":[{"actual":true,"check":"search without listing","expected":true,"passed":true},{"actual":false,"check":"readable but unsearchable","expected":false,"passed":true},{"actual":true,"check":"blocked ancestor searchable parent","expected":false,"passed":false},{"actual":true,"check":"blocked middle ancestor","expected":false,"passed":false},{"actual":true,"check":"all permissions","expected":true,"passed":true},{"actual":true,"check":"no ancestors","expected":true,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"search without listing\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"readable but unsearchable\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"blocked ancestor searchable parent\", \"actual\": true, \"expected\": false, \"passed\": false}, {\"check\": \"blocked middle ancestor\", \"actual\": true, \"expected\": false, \"passed\": false}, {\"check\": \"all permissions\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"no ancestors\", \"actual\": true, \"expected\": true, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":38.155,"exit_code":1,"observations":[{"actual":false,"check":"search without listing","expected":true,"passed":false},{"actual":true,"check":"readable but unsearchable","expected":false,"passed":false},{"actual":false,"check":"blocked ancestor searchable parent","expected":false,"passed":true},{"actual":true,"check":"blocked middle ancestor","expected":false,"passed":false},{"actual":true,"check":"all permissions","expected":true,"passed":true},{"actual":true,"check":"no ancestors","expected":true,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"search without listing\", \"actual\": false, \"expected\": true, \"passed\": false}, {\"check\": \"readable but unsearchable\", \"actual\": true, \"expected\": false, \"passed\": false}, {\"check\": \"blocked ancestor searchable parent\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"blocked middle ancestor\", \"actual\": true, \"expected\": false, \"passed\": false}, {\"check\": \"all permissions\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"no ancestors\", \"actual\": true, \"expected\": true, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":37.999,"exit_code":0,"observations":[{"actual":true,"check":"search without listing","expected":true,"passed":true},{"actual":false,"check":"readable but unsearchable","expected":false,"passed":true},{"actual":false,"check":"blocked ancestor searchable parent","expected":false,"passed":true},{"actual":false,"check":"blocked middle ancestor","expected":false,"passed":true},{"actual":true,"check":"all permissions","expected":true,"passed":true},{"actual":true,"check":"no ancestors","expected":true,"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"search without listing\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"readable but unsearchable\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"blocked ancestor searchable parent\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"blocked middle ancestor\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"all permissions\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"no ancestors\", \"actual\": true, \"expected\": true, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}