FA-97501 / Knitting and sewing pattern grading / Open access
Neckband pick-up counter: rib residue · case 01
A 4+2 rib ends up with a multiple of 4, so it does not start and end on knit 2.
ROOT CAUSE
The residue ignores the +plus part of the rib formula.
VERIFIED REPAIR
Compute the residue of total - plus.
Unsuccessful approach: Adding plus flips the residue for odd offsets.
Case contract
Edges [kind, count]: vertical picks up 3 per 4 rows, diagonal 9 per 10 rows, each rounded half-up per edge; horizontal picks 1 per stitch; other kinds -> "error: edge". The rib needs a count of multiple*k + plus; adjust the total up to the next such count (unchanged if already valid). Return [raw_total, adjusted].
Why this case matters
Neckbands and button bands pick up stitches at edge ratios and must fit the rib repeat.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import math
from fractions import Fraction
N = 1
observations = []
def solve(edges, multiple, plus):
total = 0
for kind, n in edges:
if kind == 'vertical':
total += math.floor(Fraction(3 * n, 4) + Fraction(1, 2))
elif kind == 'horizontal':
total += n
elif kind == 'diagonal':
total += math.floor(Fraction(9 * n, 10) + Fraction(1, 2))
else:
return 'error: edge'
r = total % multiple
adjusted = total if r == 0 else total + (multiple - r)
return [total, adjusted]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['front neck', [[['vertical', 40], ['horizontal', 22], ['vertical', 40]], 4, 2], [82, 82]],
['already valid', [[['horizontal', 22]], 4, 2], [22, 22]],
['diagonal edge', [[['diagonal', 13]], 2, 0], [12, 12]],
['regression: rib residue', [[['vertical', 7]], 6, 3], [5, 9]],
['repair check: rib residue', [[['vertical', 30], ['vertical', 41], ['vertical', 10]], 6, 2], [62, 62]],
['generated control 1', [[['horizontal', 13]], 6, 0], [13, 18]],
['generated control 2', [[['diagonal', 41], ['horizontal', 10]], 2, 3], [47, 47]],
['generated control 3',
[[['diagonal', 18], ['horizontal', 10], ['horizontal', 13], ['diagonal', 22]], 2, 2], [59, 60]]],
[['already valid', [[['horizontal', 22]], 4, 2], [22, 22]],
['diagonal edge', [[['diagonal', 13]], 2, 0], [12, 12]],
['unknown edge', [[['curve', 10]], 2, 0], 'error: edge'],
['regression: rib residue', [[['diagonal', 10]], 2, 1], [9, 9]],
['repair check: rib residue', [[['vertical', 7], ['horizontal', 13], ['horizontal', 20]], 6, 1], [38, 43]],
['generated control 1', [[['vertical', 20]], 6, 0], [15, 18]],
['generated control 2', [[['horizontal', 18], ['diagonal', 7], ['vertical', 13], ['vertical', 13]], 6, 3],
[44, 45]],
['generated control 3', [[['diagonal', 18]], 4, 1], [16, 17]]],
[['diagonal edge', [[['diagonal', 13]], 2, 0], [12, 12]],
['unknown edge', [[['curve', 10]], 2, 0], 'error: edge'],
['front neck', [[['vertical', 40], ['horizontal', 22], ['vertical', 40]], 4, 2], [82, 82]],
['regression: rib residue', [[['vertical', 22]], 4, 2], [17, 18]],
['repair check: rib residue', [[['vertical', 7]], 6, 2], [5, 8]],
['generated control 1', [[['vertical', 30], ['vertical', 30], ['vertical', 41]], 1, 2], [77, 77]],
['generated control 2',
[[['vertical', 41], ['diagonal', 22], ['horizontal', 18], ['horizontal', 60]], 2, 0], [129, 130]],
['generated control 3', [[['horizontal', 30], ['diagonal', 22], ['diagonal', 20]], 6, 3], [68, 69]]],
[['unknown edge', [[['curve', 10]], 2, 0], 'error: edge'],
['front neck', [[['vertical', 40], ['horizontal', 22], ['vertical', 40]], 4, 2], [82, 82]],
['already valid', [[['horizontal', 22]], 4, 2], [22, 22]],
['regression: rib residue', [[['diagonal', 20]], 4, 2], [18, 18]],
['repair check: rib residue',
[[['vertical', 18], ['diagonal', 60], ['vertical', 13], ['horizontal', 22]], 4, 3], [100, 103]],
['generated control 1', [[['diagonal', 7]], 1, 0], [6, 6]],
['generated control 2', [[['vertical', 22], ['diagonal', 7], ['horizontal', 30], ['diagonal', 22]], 6, 0],
[73, 78]],
['generated control 3', [[['vertical', 22]], 2, 0], [17, 18]]],
[['front neck', [[['vertical', 40], ['horizontal', 22], ['vertical', 40]], 4, 2], [82, 82]],
['already valid', [[['horizontal', 22]], 4, 2], [22, 22]],
['diagonal edge', [[['diagonal', 13]], 2, 0], [12, 12]],
['regression: rib residue', [[['diagonal', 22], ['vertical', 22]], 4, 3], [37, 39]],
['repair check: rib residue',
[[['vertical', 22], ['vertical', 20], ['horizontal', 20], ['horizontal', 10]], 4, 1], [62, 65]],
['generated control 1', [[['diagonal', 20]], 6, 3], [18, 21]],
['generated control 2', [[['vertical', 10]], 1, 0], [8, 8]],
['generated control 3', [[['diagonal', 10], ['vertical', 13], ['vertical', 13], ['horizontal', 22]], 6, 3],
[51, 51]]]]
for label, args, expected in fixtures[N - 1]:
check(label, 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 |
|---|---|---|---|
| front neck | [82, 84] | [82, 82] | Failed |
| already valid | [22, 24] | [22, 22] | Failed |
| diagonal edge | [12, 12] | [12, 12] | Passed |
| regression: rib residue | [5, 6] | [5, 9] | Failed |
| repair check: rib residue | [62, 66] | [62, 62] | Failed |
| generated control 1 | [13, 18] | [13, 18] | Passed |
| generated control 2 | [47, 48] | [47, 47] | Failed |
| generated control 3 | [59, 60] | [59, 60] | Passed |
SHA-256 / 97c591a75b9dae1e8f1734e5b487273b876a3cd68cf8c235ec47e51f314b79d0
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import math
from fractions import Fraction
N = 1
observations = []
def solve(edges, multiple, plus):
total = 0
for kind, n in edges:
if kind == 'vertical':
total += math.floor(Fraction(3 * n, 4) + Fraction(1, 2))
elif kind == 'horizontal':
total += n
elif kind == 'diagonal':
total += math.floor(Fraction(9 * n, 10) + Fraction(1, 2))
else:
return 'error: edge'
r = (total + plus) % multiple
adjusted = total if r == 0 else total + (multiple - r)
return [total, adjusted]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['front neck', [[['vertical', 40], ['horizontal', 22], ['vertical', 40]], 4, 2], [82, 82]],
['already valid', [[['horizontal', 22]], 4, 2], [22, 22]],
['diagonal edge', [[['diagonal', 13]], 2, 0], [12, 12]],
['regression: rib residue', [[['vertical', 7]], 6, 3], [5, 9]],
['repair check: rib residue', [[['vertical', 30], ['vertical', 41], ['vertical', 10]], 6, 2], [62, 62]],
['generated control 1', [[['horizontal', 13]], 6, 0], [13, 18]],
['generated control 2', [[['diagonal', 41], ['horizontal', 10]], 2, 3], [47, 47]],
['generated control 3',
[[['diagonal', 18], ['horizontal', 10], ['horizontal', 13], ['diagonal', 22]], 2, 2], [59, 60]]],
[['already valid', [[['horizontal', 22]], 4, 2], [22, 22]],
['diagonal edge', [[['diagonal', 13]], 2, 0], [12, 12]],
['unknown edge', [[['curve', 10]], 2, 0], 'error: edge'],
['regression: rib residue', [[['diagonal', 10]], 2, 1], [9, 9]],
['repair check: rib residue', [[['vertical', 7], ['horizontal', 13], ['horizontal', 20]], 6, 1], [38, 43]],
['generated control 1', [[['vertical', 20]], 6, 0], [15, 18]],
['generated control 2', [[['horizontal', 18], ['diagonal', 7], ['vertical', 13], ['vertical', 13]], 6, 3],
[44, 45]],
['generated control 3', [[['diagonal', 18]], 4, 1], [16, 17]]],
[['diagonal edge', [[['diagonal', 13]], 2, 0], [12, 12]],
['unknown edge', [[['curve', 10]], 2, 0], 'error: edge'],
['front neck', [[['vertical', 40], ['horizontal', 22], ['vertical', 40]], 4, 2], [82, 82]],
['regression: rib residue', [[['vertical', 22]], 4, 2], [17, 18]],
['repair check: rib residue', [[['vertical', 7]], 6, 2], [5, 8]],
['generated control 1', [[['vertical', 30], ['vertical', 30], ['vertical', 41]], 1, 2], [77, 77]],
['generated control 2',
[[['vertical', 41], ['diagonal', 22], ['horizontal', 18], ['horizontal', 60]], 2, 0], [129, 130]],
['generated control 3', [[['horizontal', 30], ['diagonal', 22], ['diagonal', 20]], 6, 3], [68, 69]]],
[['unknown edge', [[['curve', 10]], 2, 0], 'error: edge'],
['front neck', [[['vertical', 40], ['horizontal', 22], ['vertical', 40]], 4, 2], [82, 82]],
['already valid', [[['horizontal', 22]], 4, 2], [22, 22]],
['regression: rib residue', [[['diagonal', 20]], 4, 2], [18, 18]],
['repair check: rib residue',
[[['vertical', 18], ['diagonal', 60], ['vertical', 13], ['horizontal', 22]], 4, 3], [100, 103]],
['generated control 1', [[['diagonal', 7]], 1, 0], [6, 6]],
['generated control 2', [[['vertical', 22], ['diagonal', 7], ['horizontal', 30], ['diagonal', 22]], 6, 0],
[73, 78]],
['generated control 3', [[['vertical', 22]], 2, 0], [17, 18]]],
[['front neck', [[['vertical', 40], ['horizontal', 22], ['vertical', 40]], 4, 2], [82, 82]],
['already valid', [[['horizontal', 22]], 4, 2], [22, 22]],
['diagonal edge', [[['diagonal', 13]], 2, 0], [12, 12]],
['regression: rib residue', [[['diagonal', 22], ['vertical', 22]], 4, 3], [37, 39]],
['repair check: rib residue',
[[['vertical', 22], ['vertical', 20], ['horizontal', 20], ['horizontal', 10]], 4, 1], [62, 65]],
['generated control 1', [[['diagonal', 20]], 6, 3], [18, 21]],
['generated control 2', [[['vertical', 10]], 1, 0], [8, 8]],
['generated control 3', [[['diagonal', 10], ['vertical', 13], ['vertical', 13], ['horizontal', 22]], 6, 3],
[51, 51]]]]
for label, args, expected in fixtures[N - 1]:
check(label, 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 |
|---|---|---|---|
| front neck | [82, 82] | [82, 82] | Passed |
| already valid | [22, 22] | [22, 22] | Passed |
| diagonal edge | [12, 12] | [12, 12] | Passed |
| regression: rib residue | [5, 9] | [5, 9] | Passed |
| repair check: rib residue | [62, 64] | [62, 62] | Failed |
| generated control 1 | [13, 18] | [13, 18] | Passed |
| generated control 2 | [47, 47] | [47, 47] | Passed |
| generated control 3 | [59, 60] | [59, 60] | Passed |
SHA-256 / cb20c80d7e915713797fa2c4b71a5a8cefc72bd238f8ccaec478f643f48fcb94
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
import math
from fractions import Fraction
N = 1
observations = []
def solve(edges, multiple, plus):
total = 0
for kind, n in edges:
if kind == 'vertical':
total += math.floor(Fraction(3 * n, 4) + Fraction(1, 2))
elif kind == 'horizontal':
total += n
elif kind == 'diagonal':
total += math.floor(Fraction(9 * n, 10) + Fraction(1, 2))
else:
return 'error: edge'
r = (total - plus) % multiple
adjusted = total if r == 0 else total + (multiple - r)
return [total, adjusted]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['front neck', [[['vertical', 40], ['horizontal', 22], ['vertical', 40]], 4, 2], [82, 82]],
['already valid', [[['horizontal', 22]], 4, 2], [22, 22]],
['diagonal edge', [[['diagonal', 13]], 2, 0], [12, 12]],
['regression: rib residue', [[['vertical', 7]], 6, 3], [5, 9]],
['repair check: rib residue', [[['vertical', 30], ['vertical', 41], ['vertical', 10]], 6, 2], [62, 62]],
['generated control 1', [[['horizontal', 13]], 6, 0], [13, 18]],
['generated control 2', [[['diagonal', 41], ['horizontal', 10]], 2, 3], [47, 47]],
['generated control 3',
[[['diagonal', 18], ['horizontal', 10], ['horizontal', 13], ['diagonal', 22]], 2, 2], [59, 60]]],
[['already valid', [[['horizontal', 22]], 4, 2], [22, 22]],
['diagonal edge', [[['diagonal', 13]], 2, 0], [12, 12]],
['unknown edge', [[['curve', 10]], 2, 0], 'error: edge'],
['regression: rib residue', [[['diagonal', 10]], 2, 1], [9, 9]],
['repair check: rib residue', [[['vertical', 7], ['horizontal', 13], ['horizontal', 20]], 6, 1], [38, 43]],
['generated control 1', [[['vertical', 20]], 6, 0], [15, 18]],
['generated control 2', [[['horizontal', 18], ['diagonal', 7], ['vertical', 13], ['vertical', 13]], 6, 3],
[44, 45]],
['generated control 3', [[['diagonal', 18]], 4, 1], [16, 17]]],
[['diagonal edge', [[['diagonal', 13]], 2, 0], [12, 12]],
['unknown edge', [[['curve', 10]], 2, 0], 'error: edge'],
['front neck', [[['vertical', 40], ['horizontal', 22], ['vertical', 40]], 4, 2], [82, 82]],
['regression: rib residue', [[['vertical', 22]], 4, 2], [17, 18]],
['repair check: rib residue', [[['vertical', 7]], 6, 2], [5, 8]],
['generated control 1', [[['vertical', 30], ['vertical', 30], ['vertical', 41]], 1, 2], [77, 77]],
['generated control 2',
[[['vertical', 41], ['diagonal', 22], ['horizontal', 18], ['horizontal', 60]], 2, 0], [129, 130]],
['generated control 3', [[['horizontal', 30], ['diagonal', 22], ['diagonal', 20]], 6, 3], [68, 69]]],
[['unknown edge', [[['curve', 10]], 2, 0], 'error: edge'],
['front neck', [[['vertical', 40], ['horizontal', 22], ['vertical', 40]], 4, 2], [82, 82]],
['already valid', [[['horizontal', 22]], 4, 2], [22, 22]],
['regression: rib residue', [[['diagonal', 20]], 4, 2], [18, 18]],
['repair check: rib residue',
[[['vertical', 18], ['diagonal', 60], ['vertical', 13], ['horizontal', 22]], 4, 3], [100, 103]],
['generated control 1', [[['diagonal', 7]], 1, 0], [6, 6]],
['generated control 2', [[['vertical', 22], ['diagonal', 7], ['horizontal', 30], ['diagonal', 22]], 6, 0],
[73, 78]],
['generated control 3', [[['vertical', 22]], 2, 0], [17, 18]]],
[['front neck', [[['vertical', 40], ['horizontal', 22], ['vertical', 40]], 4, 2], [82, 82]],
['already valid', [[['horizontal', 22]], 4, 2], [22, 22]],
['diagonal edge', [[['diagonal', 13]], 2, 0], [12, 12]],
['regression: rib residue', [[['diagonal', 22], ['vertical', 22]], 4, 3], [37, 39]],
['repair check: rib residue',
[[['vertical', 22], ['vertical', 20], ['horizontal', 20], ['horizontal', 10]], 4, 1], [62, 65]],
['generated control 1', [[['diagonal', 20]], 6, 3], [18, 21]],
['generated control 2', [[['vertical', 10]], 1, 0], [8, 8]],
['generated control 3', [[['diagonal', 10], ['vertical', 13], ['vertical', 13], ['horizontal', 22]], 6, 3],
[51, 51]]]]
for label, args, expected in fixtures[N - 1]:
check(label, 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 |
|---|---|---|---|
| front neck | [82, 82] | [82, 82] | Passed |
| already valid | [22, 22] | [22, 22] | Passed |
| diagonal edge | [12, 12] | [12, 12] | Passed |
| regression: rib residue | [5, 9] | [5, 9] | Passed |
| repair check: rib residue | [62, 62] | [62, 62] | Passed |
| generated control 1 | [13, 18] | [13, 18] | Passed |
| generated control 2 | [47, 47] | [47, 47] | Passed |
| generated control 3 | [59, 60] | [59, 60] | Passed |
SHA-256 / 50e16aa51cd7fd54821a8978138e647679bf6b6e88b1d0a73e278bc00bb01c6e
Verification & scope
A deterministic toy contract stated in full here; it is a bounded teaching model, not an authoritative reference or standards implementation. 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:52:32.827481+00:00.
Case digest / 7f188e3ea1646c0ca62d6188162315b60c1d8a93694758281f161a5fd79c6f8c