FA-51211 / Raster clipping / Open access
Dashed stroke clip phase: dash boundary · case 01
An exact dash boundary is assigned to the preceding run.
ROOT CAUSE
An exact dash boundary is assigned to the preceding run.
THE FAILURE
An exact dash boundary is assigned to the preceding run.
Unsuccessful approach: Adding one to compensate for strict comparison moves samples one step early across every dash boundary.
Case contract
A logical stroke has positive integer dash lengths; an odd-length dash array is duplicated to preserve on/off parity over cycles. Each draw advances path phase through all samples, including clipped samples. Move begins a new subpath at the configured offset. Changing offset affects the next move, while changing pattern resets phase immediately. Empty pattern means solid. Draw reports visible on-sample positions within that segment.
Why this case matters
Raster clip state can leak coverage across draws even when every individual region is valid.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(commands, size):
pattern=[]
offset=0
phase=0
out=[]
for cmd in commands:
op=cmd[0]
if op=='pattern':
pattern=list(cmd[1])
if len(pattern)%2: pattern=pattern*2
phase=offset
elif op=='offset': offset=cmd[1]
elif op=='move': phase=offset
elif op=='advance': phase+=cmd[1]
elif op=='draw':
length,visible=cmd[1],set(cmd[2])
covered=[]
for i in range(length):
on=True
if pattern:
position=(phase+i)%sum(pattern)
dash=0
while position>pattern[dash]:
position-=pattern[dash]
dash+=1
on=dash%2==0
if on and i in visible and 0<=i<size: covered.append(i)
phase+=length
out.append(covered)
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
if N == 1:
check('explicit sequence 0', solve([['pattern', [1, 1, 1]], ['draw', 6, [0, 1, 2, 3, 4, 5]]], 4), [[0, 2]])
check('explicit sequence 1', solve([['offset', -1], ['pattern', [2, 1]], ['draw', 4, [0, 1, 2, 3]]], 4), [[1, 2]])
check('explicit sequence 2', solve([['pattern', [2, 1]], ['draw', 1, [0]], ['offset', 2], ['draw', 3, [0, 1, 2]]], 4), [[0], [0, 2]])
check('explicit sequence 3', solve([['offset', 1], ['pattern', [2, 2]], ['draw', 2, [0, 1]], ['move'], ['draw', 3, [0, 1, 2]]], 4), [[0], [0]])
check('explicit sequence 4', solve([['pattern', [2, 2]], ['draw', 1, [0]], ['advance', 1], ['draw', 3, [0, 1, 2]]], 4), [[0], [2]])
check('explicit sequence 5', solve([['pattern', [2, 2]], ['draw', 3, [0]], ['draw', 3, [0, 1, 2]]], 4), [[0], [1, 2]])
check('explicit sequence 6', solve([['pattern', [1, 2]], ['draw', 4, [0, 1, 2, 3]]], 4), [[0, 3]])
check('explicit sequence 7', solve([['pattern', []], ['draw', 10, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]], ['draw', 2, [0, 1]]], 4), [[0, 1, 2, 3], [0, 1]])
check('explicit sequence 8', solve([['offset', 1], ['pattern', [1, 2]], ['draw', 4, [0, 1, 2, 3]]], 4), [[2]])
check('explicit sequence 9', solve([['pattern', [1, 1]], ['draw', 0, []]], 4), [[]])
if N == 2:
check('explicit sequence 0', solve([['pattern', [1, 1, 1]], ['draw', 6, [0, 1, 2, 3, 4, 5]]], 5), [[0, 2, 4]])
check('explicit sequence 1', solve([['offset', -1], ['pattern', [2, 1]], ['draw', 4, [0, 1, 2, 3]]], 5), [[1, 2]])
check('explicit sequence 2', solve([['pattern', [2, 1]], ['draw', 1, [0]], ['offset', 2], ['draw', 3, [0, 1, 2]]], 5), [[0], [0, 2]])
check('explicit sequence 3', solve([['offset', 1], ['pattern', [2, 2]], ['draw', 2, [0, 1]], ['move'], ['draw', 3, [0, 1, 2]]], 5), [[0], [0]])
check('explicit sequence 4', solve([['pattern', [2, 2]], ['draw', 1, [0]], ['advance', 1], ['draw', 3, [0, 1, 2]]], 5), [[0], [2]])
check('explicit sequence 5', solve([['pattern', [2, 2]], ['draw', 3, [0]], ['draw', 3, [0, 1, 2]]], 5), [[0], [1, 2]])
check('explicit sequence 6', solve([['pattern', [1, 2]], ['draw', 4, [0, 1, 2, 3]]], 5), [[0, 3]])
check('explicit sequence 7', solve([['pattern', []], ['draw', 10, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]], ['draw', 2, [0, 1]]], 5), [[0, 1, 2, 3, 4], [0, 1]])
check('explicit sequence 8', solve([['offset', 1], ['pattern', [1, 2]], ['draw', 4, [0, 1, 2, 3]]], 5), [[2]])
check('explicit sequence 9', solve([['pattern', [1, 1]], ['draw', 0, []]], 5), [[]])
if N == 3:
check('explicit sequence 0', solve([['pattern', [1, 1, 1]], ['draw', 6, [0, 1, 2, 3, 4, 5]]], 6), [[0, 2, 4]])
check('explicit sequence 1', solve([['offset', -1], ['pattern', [2, 1]], ['draw', 4, [0, 1, 2, 3]]], 6), [[1, 2]])
check('explicit sequence 2', solve([['pattern', [2, 1]], ['draw', 1, [0]], ['offset', 2], ['draw', 3, [0, 1, 2]]], 6), [[0], [0, 2]])
check('explicit sequence 3', solve([['offset', 1], ['pattern', [2, 2]], ['draw', 2, [0, 1]], ['move'], ['draw', 3, [0, 1, 2]]], 6), [[0], [0]])
check('explicit sequence 4', solve([['pattern', [2, 2]], ['draw', 1, [0]], ['advance', 1], ['draw', 3, [0, 1, 2]]], 6), [[0], [2]])
check('explicit sequence 5', solve([['pattern', [2, 2]], ['draw', 3, [0]], ['draw', 3, [0, 1, 2]]], 6), [[0], [1, 2]])
check('explicit sequence 6', solve([['pattern', [1, 2]], ['draw', 4, [0, 1, 2, 3]]], 6), [[0, 3]])
check('explicit sequence 7', solve([['pattern', []], ['draw', 10, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]], ['draw', 2, [0, 1]]], 6), [[0, 1, 2, 3, 4, 5], [0, 1]])
check('explicit sequence 8', solve([['offset', 1], ['pattern', [1, 2]], ['draw', 4, [0, 1, 2, 3]]], 6), [[2]])
check('explicit sequence 9', solve([['pattern', [1, 1]], ['draw', 0, []]], 6), [[]])
if N == 4:
check('explicit sequence 0', solve([['pattern', [1, 1, 1]], ['draw', 6, [0, 1, 2, 3, 4, 5]]], 7), [[0, 2, 4]])
check('explicit sequence 1', solve([['offset', -1], ['pattern', [2, 1]], ['draw', 4, [0, 1, 2, 3]]], 7), [[1, 2]])
check('explicit sequence 2', solve([['pattern', [2, 1]], ['draw', 1, [0]], ['offset', 2], ['draw', 3, [0, 1, 2]]], 7), [[0], [0, 2]])
check('explicit sequence 3', solve([['offset', 1], ['pattern', [2, 2]], ['draw', 2, [0, 1]], ['move'], ['draw', 3, [0, 1, 2]]], 7), [[0], [0]])
check('explicit sequence 4', solve([['pattern', [2, 2]], ['draw', 1, [0]], ['advance', 1], ['draw', 3, [0, 1, 2]]], 7), [[0], [2]])
check('explicit sequence 5', solve([['pattern', [2, 2]], ['draw', 3, [0]], ['draw', 3, [0, 1, 2]]], 7), [[0], [1, 2]])
check('explicit sequence 6', solve([['pattern', [1, 2]], ['draw', 4, [0, 1, 2, 3]]], 7), [[0, 3]])
check('explicit sequence 7', solve([['pattern', []], ['draw', 10, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]], ['draw', 2, [0, 1]]], 7), [[0, 1, 2, 3, 4, 5, 6], [0, 1]])
check('explicit sequence 8', solve([['offset', 1], ['pattern', [1, 2]], ['draw', 4, [0, 1, 2, 3]]], 7), [[2]])
check('explicit sequence 9', solve([['pattern', [1, 1]], ['draw', 0, []]], 7), [[]])
if N == 5:
check('explicit sequence 0', solve([['pattern', [1, 1, 1]], ['draw', 6, [0, 1, 2, 3, 4, 5]]], 8), [[0, 2, 4]])
check('explicit sequence 1', solve([['offset', -1], ['pattern', [2, 1]], ['draw', 4, [0, 1, 2, 3]]], 8), [[1, 2]])
check('explicit sequence 2', solve([['pattern', [2, 1]], ['draw', 1, [0]], ['offset', 2], ['draw', 3, [0, 1, 2]]], 8), [[0], [0, 2]])
check('explicit sequence 3', solve([['offset', 1], ['pattern', [2, 2]], ['draw', 2, [0, 1]], ['move'], ['draw', 3, [0, 1, 2]]], 8), [[0], [0]])
check('explicit sequence 4', solve([['pattern', [2, 2]], ['draw', 1, [0]], ['advance', 1], ['draw', 3, [0, 1, 2]]], 8), [[0], [2]])
check('explicit sequence 5', solve([['pattern', [2, 2]], ['draw', 3, [0]], ['draw', 3, [0, 1, 2]]], 8), [[0], [1, 2]])
check('explicit sequence 6', solve([['pattern', [1, 2]], ['draw', 4, [0, 1, 2, 3]]], 8), [[0, 3]])
check('explicit sequence 7', solve([['pattern', []], ['draw', 10, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]], ['draw', 2, [0, 1]]], 8), [[0, 1, 2, 3, 4, 5, 6, 7], [0, 1]])
check('explicit sequence 8', solve([['offset', 1], ['pattern', [1, 2]], ['draw', 4, [0, 1, 2, 3]]], 8), [[2]])
check('explicit sequence 9', solve([['pattern', [1, 1]], ['draw', 0, []]], 8), [[]])
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 |
|---|---|---|---|
| explicit sequence 0 | [[0, 1, 3]] | [[0, 2]] | Failed |
| explicit sequence 1 | [[0, 1, 2, 3]] | [[1, 2]] | Failed |
| explicit sequence 2 | [[0], [0, 1, 2]] | [[0], [0, 2]] | Failed |
| explicit sequence 3 | [[0, 1], [0, 1]] | [[0], [0]] | Failed |
| explicit sequence 4 | [[0], [0, 2]] | [[0], [2]] | Failed |
| explicit sequence 5 | [[0], [1, 2]] | [[0], [1, 2]] | Passed |
| explicit sequence 6 | [[0, 1, 3]] | [[0, 3]] | Failed |
| explicit sequence 7 | [[0, 1, 2, 3], [0, 1]] | [[0, 1, 2, 3], [0, 1]] | Passed |
| explicit sequence 8 | [[0, 2, 3]] | [[2]] | Failed |
| explicit sequence 9 | [[]] | [[]] | Passed |
SHA-256 / 303d9eff0eae033bba2df71afcbcdf1c46f2f6e83068ad578150654681c2516a
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(commands, size):
pattern=[]
offset=0
phase=0
out=[]
for cmd in commands:
op=cmd[0]
if op=='pattern':
pattern=list(cmd[1])
if len(pattern)%2: pattern=pattern*2
phase=offset
elif op=='offset': offset=cmd[1]
elif op=='move': phase=offset
elif op=='advance': phase+=cmd[1]
elif op=='draw':
length,visible=cmd[1],set(cmd[2])
covered=[]
for i in range(length):
on=True
if pattern:
position=(phase+i)%sum(pattern)
dash=0
while dash+1<len(pattern) and position+1>=pattern[dash]:
position-=pattern[dash]
dash+=1
on=dash%2==0
if on and i in visible and 0<=i<size: covered.append(i)
phase+=length
out.append(covered)
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
if N == 1:
check('explicit sequence 0', solve([['pattern', [1, 1, 1]], ['draw', 6, [0, 1, 2, 3, 4, 5]]], 4), [[0, 2]])
check('explicit sequence 1', solve([['offset', -1], ['pattern', [2, 1]], ['draw', 4, [0, 1, 2, 3]]], 4), [[1, 2]])
check('explicit sequence 2', solve([['pattern', [2, 1]], ['draw', 1, [0]], ['offset', 2], ['draw', 3, [0, 1, 2]]], 4), [[0], [0, 2]])
check('explicit sequence 3', solve([['offset', 1], ['pattern', [2, 2]], ['draw', 2, [0, 1]], ['move'], ['draw', 3, [0, 1, 2]]], 4), [[0], [0]])
check('explicit sequence 4', solve([['pattern', [2, 2]], ['draw', 1, [0]], ['advance', 1], ['draw', 3, [0, 1, 2]]], 4), [[0], [2]])
check('explicit sequence 5', solve([['pattern', [2, 2]], ['draw', 3, [0]], ['draw', 3, [0, 1, 2]]], 4), [[0], [1, 2]])
check('explicit sequence 6', solve([['pattern', [1, 2]], ['draw', 4, [0, 1, 2, 3]]], 4), [[0, 3]])
check('explicit sequence 7', solve([['pattern', []], ['draw', 10, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]], ['draw', 2, [0, 1]]], 4), [[0, 1, 2, 3], [0, 1]])
check('explicit sequence 8', solve([['offset', 1], ['pattern', [1, 2]], ['draw', 4, [0, 1, 2, 3]]], 4), [[2]])
check('explicit sequence 9', solve([['pattern', [1, 1]], ['draw', 0, []]], 4), [[]])
if N == 2:
check('explicit sequence 0', solve([['pattern', [1, 1, 1]], ['draw', 6, [0, 1, 2, 3, 4, 5]]], 5), [[0, 2, 4]])
check('explicit sequence 1', solve([['offset', -1], ['pattern', [2, 1]], ['draw', 4, [0, 1, 2, 3]]], 5), [[1, 2]])
check('explicit sequence 2', solve([['pattern', [2, 1]], ['draw', 1, [0]], ['offset', 2], ['draw', 3, [0, 1, 2]]], 5), [[0], [0, 2]])
check('explicit sequence 3', solve([['offset', 1], ['pattern', [2, 2]], ['draw', 2, [0, 1]], ['move'], ['draw', 3, [0, 1, 2]]], 5), [[0], [0]])
check('explicit sequence 4', solve([['pattern', [2, 2]], ['draw', 1, [0]], ['advance', 1], ['draw', 3, [0, 1, 2]]], 5), [[0], [2]])
check('explicit sequence 5', solve([['pattern', [2, 2]], ['draw', 3, [0]], ['draw', 3, [0, 1, 2]]], 5), [[0], [1, 2]])
check('explicit sequence 6', solve([['pattern', [1, 2]], ['draw', 4, [0, 1, 2, 3]]], 5), [[0, 3]])
check('explicit sequence 7', solve([['pattern', []], ['draw', 10, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]], ['draw', 2, [0, 1]]], 5), [[0, 1, 2, 3, 4], [0, 1]])
check('explicit sequence 8', solve([['offset', 1], ['pattern', [1, 2]], ['draw', 4, [0, 1, 2, 3]]], 5), [[2]])
check('explicit sequence 9', solve([['pattern', [1, 1]], ['draw', 0, []]], 5), [[]])
if N == 3:
check('explicit sequence 0', solve([['pattern', [1, 1, 1]], ['draw', 6, [0, 1, 2, 3, 4, 5]]], 6), [[0, 2, 4]])
check('explicit sequence 1', solve([['offset', -1], ['pattern', [2, 1]], ['draw', 4, [0, 1, 2, 3]]], 6), [[1, 2]])
check('explicit sequence 2', solve([['pattern', [2, 1]], ['draw', 1, [0]], ['offset', 2], ['draw', 3, [0, 1, 2]]], 6), [[0], [0, 2]])
check('explicit sequence 3', solve([['offset', 1], ['pattern', [2, 2]], ['draw', 2, [0, 1]], ['move'], ['draw', 3, [0, 1, 2]]], 6), [[0], [0]])
check('explicit sequence 4', solve([['pattern', [2, 2]], ['draw', 1, [0]], ['advance', 1], ['draw', 3, [0, 1, 2]]], 6), [[0], [2]])
check('explicit sequence 5', solve([['pattern', [2, 2]], ['draw', 3, [0]], ['draw', 3, [0, 1, 2]]], 6), [[0], [1, 2]])
check('explicit sequence 6', solve([['pattern', [1, 2]], ['draw', 4, [0, 1, 2, 3]]], 6), [[0, 3]])
check('explicit sequence 7', solve([['pattern', []], ['draw', 10, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]], ['draw', 2, [0, 1]]], 6), [[0, 1, 2, 3, 4, 5], [0, 1]])
check('explicit sequence 8', solve([['offset', 1], ['pattern', [1, 2]], ['draw', 4, [0, 1, 2, 3]]], 6), [[2]])
check('explicit sequence 9', solve([['pattern', [1, 1]], ['draw', 0, []]], 6), [[]])
if N == 4:
check('explicit sequence 0', solve([['pattern', [1, 1, 1]], ['draw', 6, [0, 1, 2, 3, 4, 5]]], 7), [[0, 2, 4]])
check('explicit sequence 1', solve([['offset', -1], ['pattern', [2, 1]], ['draw', 4, [0, 1, 2, 3]]], 7), [[1, 2]])
check('explicit sequence 2', solve([['pattern', [2, 1]], ['draw', 1, [0]], ['offset', 2], ['draw', 3, [0, 1, 2]]], 7), [[0], [0, 2]])
check('explicit sequence 3', solve([['offset', 1], ['pattern', [2, 2]], ['draw', 2, [0, 1]], ['move'], ['draw', 3, [0, 1, 2]]], 7), [[0], [0]])
check('explicit sequence 4', solve([['pattern', [2, 2]], ['draw', 1, [0]], ['advance', 1], ['draw', 3, [0, 1, 2]]], 7), [[0], [2]])
check('explicit sequence 5', solve([['pattern', [2, 2]], ['draw', 3, [0]], ['draw', 3, [0, 1, 2]]], 7), [[0], [1, 2]])
check('explicit sequence 6', solve([['pattern', [1, 2]], ['draw', 4, [0, 1, 2, 3]]], 7), [[0, 3]])
check('explicit sequence 7', solve([['pattern', []], ['draw', 10, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]], ['draw', 2, [0, 1]]], 7), [[0, 1, 2, 3, 4, 5, 6], [0, 1]])
check('explicit sequence 8', solve([['offset', 1], ['pattern', [1, 2]], ['draw', 4, [0, 1, 2, 3]]], 7), [[2]])
check('explicit sequence 9', solve([['pattern', [1, 1]], ['draw', 0, []]], 7), [[]])
if N == 5:
check('explicit sequence 0', solve([['pattern', [1, 1, 1]], ['draw', 6, [0, 1, 2, 3, 4, 5]]], 8), [[0, 2, 4]])
check('explicit sequence 1', solve([['offset', -1], ['pattern', [2, 1]], ['draw', 4, [0, 1, 2, 3]]], 8), [[1, 2]])
check('explicit sequence 2', solve([['pattern', [2, 1]], ['draw', 1, [0]], ['offset', 2], ['draw', 3, [0, 1, 2]]], 8), [[0], [0, 2]])
check('explicit sequence 3', solve([['offset', 1], ['pattern', [2, 2]], ['draw', 2, [0, 1]], ['move'], ['draw', 3, [0, 1, 2]]], 8), [[0], [0]])
check('explicit sequence 4', solve([['pattern', [2, 2]], ['draw', 1, [0]], ['advance', 1], ['draw', 3, [0, 1, 2]]], 8), [[0], [2]])
check('explicit sequence 5', solve([['pattern', [2, 2]], ['draw', 3, [0]], ['draw', 3, [0, 1, 2]]], 8), [[0], [1, 2]])
check('explicit sequence 6', solve([['pattern', [1, 2]], ['draw', 4, [0, 1, 2, 3]]], 8), [[0, 3]])
check('explicit sequence 7', solve([['pattern', []], ['draw', 10, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]], ['draw', 2, [0, 1]]], 8), [[0, 1, 2, 3, 4, 5, 6, 7], [0, 1]])
check('explicit sequence 8', solve([['offset', 1], ['pattern', [1, 2]], ['draw', 4, [0, 1, 2, 3]]], 8), [[2]])
check('explicit sequence 9', solve([['pattern', [1, 1]], ['draw', 0, []]], 8), [[]])
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 |
|---|---|---|---|
| explicit sequence 0 | [[1, 3]] | [[0, 2]] | Failed |
| explicit sequence 1 | [[1]] | [[1, 2]] | Failed |
| explicit sequence 2 | [[0], [2]] | [[0], [0, 2]] | Failed |
| explicit sequence 3 | [[], []] | [[0], [0]] | Failed |
| explicit sequence 4 | [[0], [2]] | [[0], [2]] | Passed |
| explicit sequence 5 | [[0], [1]] | [[0], [1, 2]] | Failed |
| explicit sequence 6 | [[]] | [[0, 3]] | Failed |
| explicit sequence 7 | [[0, 1, 2, 3], [0, 1]] | [[0, 1, 2, 3], [0, 1]] | Passed |
| explicit sequence 8 | [[]] | [[2]] | Failed |
| explicit sequence 9 | [[]] | [[]] | Passed |
SHA-256 / 0433561dda4ed3c46d9f155cf66281764c01403978b48c10de75361a663afebb
HELD IN THE MEMBER ARCHIVE
The verified repair and its recorded checks are member-only.
This mechanism has 10 recorded checks per implementation. The open-access tier publishes the failure and the unsuccessful fix; the repaired source that passes every check, and the observations that prove it, are available to members.
Every case sharing this mechanism uses the same contract and the same repair, so this one record is held back for all of them.
Member access is invitation-based. Sign in with your invited account to inspect the repair.
Sign in to the archive ↗Verification & scope
Finite one-dimensional integer sample sets model coverage state only; no geometric intersection, memory layout, GPU or graphics-standard conformance is claimed. 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:45:16.806260+00:00.
Case digest / 828826f6d0b1ef56a0ad507f23c71a0bda7eb38d37e6d66d67cada385479b1f7