FAILURE MAP
← Case archive

FA-10036 / Packaging / Open access

Editable installation mapping: Editable mappings target nonexistent sources · case 01

Editable mappings target nonexistent sources.

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

ROOT CAUSE

The implementation substitutes if False: return 'missing-source' for if directory not in available: return 'missing-source', so editable mappings target nonexistent sources.

VERIFIED REPAIR

Require each source directory to exist in the model.

Unsuccessful approach: The attempted repair substitutes if directory in available: return 'missing-source'. Fixture 2 still yields 'missing-source' instead of [('a', 'src/a')].

Case contract

Resolve declared modules to their source directories, reject missing sources, reject duplicate module names pointing elsewhere, exclude disabled declarations, and keep module names sorted. Identical repeats are allowed.

Why this case matters

An offline model of editable installation mapping, suitable for testing build and release tooling without external services.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(declarations, available):
    result = {}
    for module, directory, enabled in declarations:
        if not enabled: continue
        if False: return 'missing-source'
        if module in result and result[module] != directory: return 'conflict'
        result[module] = directory
    return sorted(result.items())
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('fixture 1', solve([], []), [])
check('fixture 2', solve([('a', 'src/a', True)], ['src/a']), [('a', 'src/a')])
check('fixture 3', solve([('a', 'src/a', False)], []), [])
check('fixture 4', solve([('a', 'src/a', True)], []), 'missing-source')
check('fixture 5', solve([('a', 'src/a', True), ('a', 'lib/a', True)], ['src/a', 'lib/a']), 'conflict')
check('fixture 6', solve([('a', 'src/a', True), ('a', 'src/a', True)], ['src/a']), [('a', 'src/a')])
check('fixture 7', solve([('z', 'src/z', True), ('a', 'src/a', True)], ['src/a', 'src/z']), [('a', 'src/a'), ('z', 'src/z')])
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
fixture 1[][]Passed
fixture 2[['a', 'src/a']][['a', 'src/a']]Passed
fixture 3[][]Passed
fixture 4[['a', 'src/a']]missing-sourceFailed
fixture 5conflictconflictPassed
fixture 6[['a', 'src/a']][['a', 'src/a']]Passed
fixture 7[['a', 'src/a'], ['z', 'src/z']][['a', 'src/a'], ['z', 'src/z']]Passed

SHA-256 / 1b0d3461b2a496d3e30b11b4a5ac0160b6e3d3b1cf0aa1903d7805c0958f1b33

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(declarations, available):
    result = {}
    for module, directory, enabled in declarations:
        if not enabled: continue
        if directory in available: return 'missing-source'
        if module in result and result[module] != directory: return 'conflict'
        result[module] = directory
    return sorted(result.items())
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('fixture 1', solve([], []), [])
check('fixture 2', solve([('a', 'src/a', True)], ['src/a']), [('a', 'src/a')])
check('fixture 3', solve([('a', 'src/a', False)], []), [])
check('fixture 4', solve([('a', 'src/a', True)], []), 'missing-source')
check('fixture 5', solve([('a', 'src/a', True), ('a', 'lib/a', True)], ['src/a', 'lib/a']), 'conflict')
check('fixture 6', solve([('a', 'src/a', True), ('a', 'src/a', True)], ['src/a']), [('a', 'src/a')])
check('fixture 7', solve([('z', 'src/z', True), ('a', 'src/a', True)], ['src/a', 'src/z']), [('a', 'src/a'), ('z', 'src/z')])
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
fixture 1[][]Passed
fixture 2missing-source[['a', 'src/a']]Failed
fixture 3[][]Passed
fixture 4[['a', 'src/a']]missing-sourceFailed
fixture 5missing-sourceconflictFailed
fixture 6missing-source[['a', 'src/a']]Failed
fixture 7missing-source[['a', 'src/a'], ['z', 'src/z']]Failed

SHA-256 / bf23467fa2d576b6288c583a8c3ab8111da828d22e56557087fe3adba2a02895

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(declarations, available):
    result = {}
    for module, directory, enabled in declarations:
        if not enabled: continue
        if directory not in available: return 'missing-source'
        if module in result and result[module] != directory: return 'conflict'
        result[module] = directory
    return sorted(result.items())
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('fixture 1', solve([], []), [])
check('fixture 2', solve([('a', 'src/a', True)], ['src/a']), [('a', 'src/a')])
check('fixture 3', solve([('a', 'src/a', False)], []), [])
check('fixture 4', solve([('a', 'src/a', True)], []), 'missing-source')
check('fixture 5', solve([('a', 'src/a', True), ('a', 'lib/a', True)], ['src/a', 'lib/a']), 'conflict')
check('fixture 6', solve([('a', 'src/a', True), ('a', 'src/a', True)], ['src/a']), [('a', 'src/a')])
check('fixture 7', solve([('z', 'src/z', True), ('a', 'src/a', True)], ['src/a', 'src/z']), [('a', 'src/a'), ('z', 'src/z')])
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
fixture 1[][]Passed
fixture 2[['a', 'src/a']][['a', 'src/a']]Passed
fixture 3[][]Passed
fixture 4missing-sourcemissing-sourcePassed
fixture 5conflictconflictPassed
fixture 6[['a', 'src/a']][['a', 'src/a']]Passed
fixture 7[['a', 'src/a'], ['z', 'src/z']][['a', 'src/a'], ['z', 'src/z']]Passed

SHA-256 / 55a2bd8e53b742cf8ec0aa1912ceda9be623f41c54473bced84ba9d67c9b5326

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:35.376140+00:00.

Case digest / aaf675eaa88e52b3d09433503be1faddc50ee1f2f316e70d6f65fb9f1dca4412