FA-11801 / Document structure integrity / Open access
Nested list numbering survives a parent item advance · case 01
Nested list numbering survives a parent item advance in the controlled document model.
ROOT CAUSE
Counters are independent even though advancing an ancestor restarts descendant list levels.
VERIFIED REPAIR
Reset every deeper counter whenever a list item is emitted.
Unsuccessful approach: Resetting only the immediate child leaves skipped deeper levels stale.
Case contract
For levels 0 through 7, emit that level counter after incrementing it and reset all deeper counters to zero; skipped levels are legal.
Why this case matters
Structured editing must preserve document semantics independently of visual rendering.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(levels):
counts=[0]*8
out=[]
for level in levels:
counts[level]+=1
out.append(counts[level])
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [(([0,2,2,0,2]+[2]*N,),[1,1,2,2,1]+list(range(2,N+2))), (([],),[]), (([0,0],),[1,2]), (([1,2,1,2],),[1,1,2,1]), (([7,7],),[1,2]), (([0,1,2,0,2],),[1,1,1,2,1])]
for i, (args, expected) in enumerate(fixtures):
check("document fixture " + str(i), solve(*args), expected)
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 |
|---|---|---|---|
| document fixture 0 | [1, 1, 2, 2, 3, 4] | [1, 1, 2, 2, 1, 2] | Failed |
| document fixture 1 | [] | [] | Passed |
| document fixture 2 | [1, 2] | [1, 2] | Passed |
| document fixture 3 | [1, 1, 2, 2] | [1, 1, 2, 1] | Failed |
| document fixture 4 | [1, 2] | [1, 2] | Passed |
| document fixture 5 | [1, 1, 1, 2, 2] | [1, 1, 1, 2, 1] | Failed |
SHA-256 / ffafdcc11629dade75922d839622d933f8201668cb489cedc408dc81211ae200
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(levels):
counts=[0]*8
out=[]
for level in levels:
counts[level]+=1
if level+1<8: counts[level+1]=0
out.append(counts[level])
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [(([0,2,2,0,2]+[2]*N,),[1,1,2,2,1]+list(range(2,N+2))), (([],),[]), (([0,0],),[1,2]), (([1,2,1,2],),[1,1,2,1]), (([7,7],),[1,2]), (([0,1,2,0,2],),[1,1,1,2,1])]
for i, (args, expected) in enumerate(fixtures):
check("document fixture " + str(i), solve(*args), expected)
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 |
|---|---|---|---|
| document fixture 0 | [1, 1, 2, 2, 3, 4] | [1, 1, 2, 2, 1, 2] | Failed |
| document fixture 1 | [] | [] | Passed |
| document fixture 2 | [1, 2] | [1, 2] | Passed |
| document fixture 3 | [1, 1, 2, 1] | [1, 1, 2, 1] | Passed |
| document fixture 4 | [1, 2] | [1, 2] | Passed |
| document fixture 5 | [1, 1, 1, 2, 2] | [1, 1, 1, 2, 1] | Failed |
SHA-256 / 82a65cbe2fb8d09dfc9ca45ed047ec992c20c1da78f5788247dc595da65488dc
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(levels):
counts=[0]*8
out=[]
for level in levels:
counts[level]+=1
for child in range(level+1,8): counts[child]=0
out.append(counts[level])
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [(([0,2,2,0,2]+[2]*N,),[1,1,2,2,1]+list(range(2,N+2))), (([],),[]), (([0,0],),[1,2]), (([1,2,1,2],),[1,1,2,1]), (([7,7],),[1,2]), (([0,1,2,0,2],),[1,1,1,2,1])]
for i, (args, expected) in enumerate(fixtures):
check("document fixture " + str(i), solve(*args), expected)
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 |
|---|---|---|---|
| document fixture 0 | [1, 1, 2, 2, 1, 2] | [1, 1, 2, 2, 1, 2] | Passed |
| document fixture 1 | [] | [] | Passed |
| document fixture 2 | [1, 2] | [1, 2] | Passed |
| document fixture 3 | [1, 1, 2, 1] | [1, 1, 2, 1] | Passed |
| document fixture 4 | [1, 2] | [1, 2] | Passed |
| document fixture 5 | [1, 1, 1, 2, 1] | [1, 1, 1, 2, 1] | Passed |
SHA-256 / 3ada181f9e5013f3323ff979265171c134f0d78defa3e4b5531697fb810e9a6a
Verification & scope
An offline simplified document model, not a claim of conformance to any office file format. 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:51.124904+00:00.
Case digest / a923a92808334b7eef7dd60463e6d0b372c736bb4548098cebfdd94619eea43d