FAILURE MAP
← Case archive

FA-97491 / Knitting and sewing pattern grading / Open access

Neckband pick-up counter: vertical ratio · case 01

A 40-row edge picks up 53 stitches instead of 30, flaring the band.

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

ROOT CAUSE

The 3-per-4-rows ratio is inverted.

VERIFIED REPAIR

Pick up 3 stitches for every 4 rows.

Unsuccessful approach: The 2-in-3 garter ratio does not match the stockinette contract.

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(4 * n, 3) + 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: vertical ratio', [[['vertical', 30], ['vertical', 41]], 1, 3], [54, 54]],
  ['repair check: vertical ratio',
   [[['vertical', 20], ['vertical', 41], ['horizontal', 20], ['diagonal', 7]], 4, 2], [72, 74]],
  ['generated control 1', [[['vertical', 20]], 2, 0], [15, 16]],
  ['generated control 2', [[['vertical', 20], ['vertical', 7]], 2, 1], [20, 21]],
  ['generated control 3', [[['diagonal', 60], ['vertical', 30], ['vertical', 22], ['horizontal', 22]], 6, 3],
   [116, 117]]],
 [['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: vertical ratio',
   [[['vertical', 18], ['diagonal', 60], ['vertical', 18], ['horizontal', 22]], 6, 2], [104, 104]],
  ['repair check: vertical ratio', [[['vertical', 22], ['horizontal', 13], ['vertical', 20]], 2, 1],
   [45, 45]],
  ['generated control 1', [[['horizontal', 20], ['diagonal', 60]], 6, 0], [74, 78]],
  ['generated control 2', [[['diagonal', 60]], 4, 2], [54, 54]],
  ['generated control 3', [[['vertical', 20], ['vertical', 18]], 6, 1], [29, 31]]],
 [['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: vertical ratio', [[['horizontal', 10], ['vertical', 10]], 4, 1], [18, 21]],
  ['repair check: vertical ratio', [[['vertical', 18]], 4, 1], [14, 17]],
  ['generated control 1', [[['horizontal', 7], ['diagonal', 7], ['vertical', 7]], 4, 2], [18, 18]],
  ['generated control 2', [[['vertical', 18], ['horizontal', 18]], 4, 2], [32, 34]],
  ['generated control 3', [[['horizontal', 60], ['diagonal', 20], ['vertical', 20]], 4, 1], [93, 93]]],
 [['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: vertical ratio',
   [[['vertical', 60], ['vertical', 10], ['horizontal', 30], ['vertical', 7]], 2, 2], [88, 88]],
  ['repair check: vertical ratio', [[['vertical', 20], ['diagonal', 41], ['diagonal', 10]], 6, 2], [61, 62]],
  ['generated control 1', [[['horizontal', 22]], 2, 2], [22, 22]],
  ['generated control 2', [[['diagonal', 60], ['vertical', 18], ['diagonal', 41], ['vertical', 22]], 1, 2],
   [122, 122]],
  ['generated control 3', [[['horizontal', 7], ['horizontal', 22], ['vertical', 41], ['vertical', 41]], 1, 1],
   [91, 91]]],
 [['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: vertical ratio', [[['horizontal', 7], ['vertical', 13]], 2, 2], [17, 18]],
  ['repair check: vertical ratio', [[['vertical', 22], ['horizontal', 18]], 1, 3], [35, 35]],
  ['generated control 1',
   [[['vertical', 18], ['vertical', 13], ['diagonal', 41], ['horizontal', 41], ['curve', 10]], 2, 2],
   'error: edge'],
  ['generated control 2', [[['vertical', 41], ['horizontal', 13], ['vertical', 20], ['vertical', 7]], 1, 0],
   [64, 64]],
  ['generated control 3', [[['horizontal', 41]], 6, 3], [41, 45]]]]
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 fixtureActualExpectedOutcome
front neck[128, 130][82, 82]Failed
already valid[22, 22][22, 22]Passed
diagonal edge[12, 12][12, 12]Passed
regression: vertical ratio[95, 95][54, 54]Failed
repair check: vertical ratio[108, 110][72, 74]Failed
generated control 1[27, 28][15, 16]Failed
generated control 2[36, 37][20, 21]Failed
generated control 3[145, 147][116, 117]Failed

SHA-256 / ddbcd54ee35d6d36fc0b233201e7da2d4bbb3a20f88e514ce985a67bd05b0568

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(2 * n, 3) + 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: vertical ratio', [[['vertical', 30], ['vertical', 41]], 1, 3], [54, 54]],
  ['repair check: vertical ratio',
   [[['vertical', 20], ['vertical', 41], ['horizontal', 20], ['diagonal', 7]], 4, 2], [72, 74]],
  ['generated control 1', [[['vertical', 20]], 2, 0], [15, 16]],
  ['generated control 2', [[['vertical', 20], ['vertical', 7]], 2, 1], [20, 21]],
  ['generated control 3', [[['diagonal', 60], ['vertical', 30], ['vertical', 22], ['horizontal', 22]], 6, 3],
   [116, 117]]],
 [['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: vertical ratio',
   [[['vertical', 18], ['diagonal', 60], ['vertical', 18], ['horizontal', 22]], 6, 2], [104, 104]],
  ['repair check: vertical ratio', [[['vertical', 22], ['horizontal', 13], ['vertical', 20]], 2, 1],
   [45, 45]],
  ['generated control 1', [[['horizontal', 20], ['diagonal', 60]], 6, 0], [74, 78]],
  ['generated control 2', [[['diagonal', 60]], 4, 2], [54, 54]],
  ['generated control 3', [[['vertical', 20], ['vertical', 18]], 6, 1], [29, 31]]],
 [['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: vertical ratio', [[['horizontal', 10], ['vertical', 10]], 4, 1], [18, 21]],
  ['repair check: vertical ratio', [[['vertical', 18]], 4, 1], [14, 17]],
  ['generated control 1', [[['horizontal', 7], ['diagonal', 7], ['vertical', 7]], 4, 2], [18, 18]],
  ['generated control 2', [[['vertical', 18], ['horizontal', 18]], 4, 2], [32, 34]],
  ['generated control 3', [[['horizontal', 60], ['diagonal', 20], ['vertical', 20]], 4, 1], [93, 93]]],
 [['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: vertical ratio',
   [[['vertical', 60], ['vertical', 10], ['horizontal', 30], ['vertical', 7]], 2, 2], [88, 88]],
  ['repair check: vertical ratio', [[['vertical', 20], ['diagonal', 41], ['diagonal', 10]], 6, 2], [61, 62]],
  ['generated control 1', [[['horizontal', 22]], 2, 2], [22, 22]],
  ['generated control 2', [[['diagonal', 60], ['vertical', 18], ['diagonal', 41], ['vertical', 22]], 1, 2],
   [122, 122]],
  ['generated control 3', [[['horizontal', 7], ['horizontal', 22], ['vertical', 41], ['vertical', 41]], 1, 1],
   [91, 91]]],
 [['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: vertical ratio', [[['horizontal', 7], ['vertical', 13]], 2, 2], [17, 18]],
  ['repair check: vertical ratio', [[['vertical', 22], ['horizontal', 18]], 1, 3], [35, 35]],
  ['generated control 1',
   [[['vertical', 18], ['vertical', 13], ['diagonal', 41], ['horizontal', 41], ['curve', 10]], 2, 2],
   'error: edge'],
  ['generated control 2', [[['vertical', 41], ['horizontal', 13], ['vertical', 20], ['vertical', 7]], 1, 0],
   [64, 64]],
  ['generated control 3', [[['horizontal', 41]], 6, 3], [41, 45]]]]
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 fixtureActualExpectedOutcome
front neck[76, 78][82, 82]Failed
already valid[22, 22][22, 22]Passed
diagonal edge[12, 12][12, 12]Passed
regression: vertical ratio[47, 47][54, 54]Failed
repair check: vertical ratio[66, 66][72, 74]Failed
generated control 1[13, 14][15, 16]Failed
generated control 2[18, 19][20, 21]Failed
generated control 3[111, 111][116, 117]Failed

SHA-256 / 932f86e0b4880a8ba3718b813f3dd77d2bcf5a0da7f45554bb7aff12dc5f14bd

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: vertical ratio', [[['vertical', 30], ['vertical', 41]], 1, 3], [54, 54]],
  ['repair check: vertical ratio',
   [[['vertical', 20], ['vertical', 41], ['horizontal', 20], ['diagonal', 7]], 4, 2], [72, 74]],
  ['generated control 1', [[['vertical', 20]], 2, 0], [15, 16]],
  ['generated control 2', [[['vertical', 20], ['vertical', 7]], 2, 1], [20, 21]],
  ['generated control 3', [[['diagonal', 60], ['vertical', 30], ['vertical', 22], ['horizontal', 22]], 6, 3],
   [116, 117]]],
 [['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: vertical ratio',
   [[['vertical', 18], ['diagonal', 60], ['vertical', 18], ['horizontal', 22]], 6, 2], [104, 104]],
  ['repair check: vertical ratio', [[['vertical', 22], ['horizontal', 13], ['vertical', 20]], 2, 1],
   [45, 45]],
  ['generated control 1', [[['horizontal', 20], ['diagonal', 60]], 6, 0], [74, 78]],
  ['generated control 2', [[['diagonal', 60]], 4, 2], [54, 54]],
  ['generated control 3', [[['vertical', 20], ['vertical', 18]], 6, 1], [29, 31]]],
 [['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: vertical ratio', [[['horizontal', 10], ['vertical', 10]], 4, 1], [18, 21]],
  ['repair check: vertical ratio', [[['vertical', 18]], 4, 1], [14, 17]],
  ['generated control 1', [[['horizontal', 7], ['diagonal', 7], ['vertical', 7]], 4, 2], [18, 18]],
  ['generated control 2', [[['vertical', 18], ['horizontal', 18]], 4, 2], [32, 34]],
  ['generated control 3', [[['horizontal', 60], ['diagonal', 20], ['vertical', 20]], 4, 1], [93, 93]]],
 [['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: vertical ratio',
   [[['vertical', 60], ['vertical', 10], ['horizontal', 30], ['vertical', 7]], 2, 2], [88, 88]],
  ['repair check: vertical ratio', [[['vertical', 20], ['diagonal', 41], ['diagonal', 10]], 6, 2], [61, 62]],
  ['generated control 1', [[['horizontal', 22]], 2, 2], [22, 22]],
  ['generated control 2', [[['diagonal', 60], ['vertical', 18], ['diagonal', 41], ['vertical', 22]], 1, 2],
   [122, 122]],
  ['generated control 3', [[['horizontal', 7], ['horizontal', 22], ['vertical', 41], ['vertical', 41]], 1, 1],
   [91, 91]]],
 [['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: vertical ratio', [[['horizontal', 7], ['vertical', 13]], 2, 2], [17, 18]],
  ['repair check: vertical ratio', [[['vertical', 22], ['horizontal', 18]], 1, 3], [35, 35]],
  ['generated control 1',
   [[['vertical', 18], ['vertical', 13], ['diagonal', 41], ['horizontal', 41], ['curve', 10]], 2, 2],
   'error: edge'],
  ['generated control 2', [[['vertical', 41], ['horizontal', 13], ['vertical', 20], ['vertical', 7]], 1, 0],
   [64, 64]],
  ['generated control 3', [[['horizontal', 41]], 6, 3], [41, 45]]]]
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 fixtureActualExpectedOutcome
front neck[82, 82][82, 82]Passed
already valid[22, 22][22, 22]Passed
diagonal edge[12, 12][12, 12]Passed
regression: vertical ratio[54, 54][54, 54]Passed
repair check: vertical ratio[72, 74][72, 74]Passed
generated control 1[15, 16][15, 16]Passed
generated control 2[20, 21][20, 21]Passed
generated control 3[116, 117][116, 117]Passed

SHA-256 / 1b0a5fc6cfebc2b84f993b101bb7a735b9f9937727b40ad221770793b6ecc764

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

Case digest / 26e935b9e6a4f537f4dd3fd075d4497cd2437b0c344257e66b19a01eca6e925d