FAILURE MAP
← Case archive

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

Knitting chart row reader: WS decrease equivalents · case 01

A k2tog on a WS row is worked as a knit decrease, leaning and showing on the wrong face.

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

ROOT CAUSE

Only knit and purl are swapped for WS rows; decreases pass through unchanged.

VERIFIED REPAIR

Map k2tog to p2tog and ssk to ssp on WS rows.

Unsuccessful approach: Crossing the mappings reverses the decrease lean.

Case contract

chart rows are listed bottom-up (row 1 first), cells left-to-right as drawn. Rounds and RS rows read right-to-left unchanged. Flat WS rows (even rows, or odd rows when start_ws) read left-to-right with swaps k<->p, k2tog->p2tog, ssk->ssp, yo stays. Runs of identical stitches merge: k/p as "k3", others as "yo" or "yo x2". Row outside 1..len -> error.

Why this case matters

Chart readers must flip reading direction and stitch meaning on wrong-side rows.

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(chart, row, in_round, start_ws):
    SWAP = {'k': 'p', 'p': 'k', 'yo': 'yo'}
    if not 1 <= row <= len(chart):
        return 'error: no such row'
    cells = list(chart[row - 1])
    ws = (not in_round) and ((row % 2 == 0) != start_ws)
    if ws:
        seq = [SWAP.get(c, c) for c in cells]
    else:
        seq = cells[::-1]
    out = []
    for c in seq:
        if out and out[-1][0] == c:
            out[-1][1] += 1
        else:
            out.append([c, 1])
    return ', '.join(c + str(n) if c in ('k', 'p') else (c if n == 1 else '%s x%d' % (c, n)) for c, n in out)
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['RS row', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'k', 'k']], 1, False, False],
   'k2tog, yo, p1, k2'],
  ['WS row swapped', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'ssk', 'k']], 2, False, False],
   'k2, p1, ssp, p1'],
  ['in the round', [[['k', 'p'], ['ssk', 'k']], 2, True, False], 'k1, ssk'],
  ['regression: WS decrease equivalents',
   [[['ssk', 'k2tog', 'k', 'p', 'yo', 'yo', 'yo'], ['ssk', 'ssk', 'k2tog', 'k', 'yo', 'p', 'k2tog']], 2,
    False, False],
   'ssp x2, p2tog, p1, yo, k1, p2tog'],
  ['repair check: WS decrease equivalents',
   [[['ssk', 'k2tog', 'p', 'ssk', 'k2tog'], ['yo', 'k', 'k2tog', 'p', 'k2tog'], ['k', 'k', 'p', 'ssk', 'ssk'],
     ['ssk', 'ssk', 'k', 'yo', 'p'], ['ssk', 'ssk', 'yo', 'p', 'k'], ['p', 'p', 'k', 'p', 'ssk']],
    4, False, False],
   'ssp x2, p1, yo, k1'],
  ['generated control 1',
   [[['p', 'p', 'ssk', 'ssk', 'k'], ['k', 'p', 'yo', 'yo', 'ssk'], ['k', 'p', 'k', 'ssk', 'k2tog']], 2, True,
    False],
   'ssk, yo x2, p1, k1'],
  ['generated control 2',
   [[['ssk', 'yo', 'ssk', 'ssk', 'k', 'yo', 'yo'], ['k', 'yo', 'ssk', 'ssk', 'yo', 'p', 'ssk'],
     ['p', 'yo', 'k', 'yo', 'p', 'ssk', 'k2tog'], ['k', 'p', 'yo', 'yo', 'k', 'k2tog', 'yo'],
     ['ssk', 'k2tog', 'yo', 'ssk', 'ssk', 'k', 'p'], ['k2tog', 'ssk', 'yo', 'p', 'ssk', 'k', 'yo']],
    2, False, True],
   'ssk, p1, yo, ssk x2, yo, k1'],
  ['generated control 3',
   [[['yo', 'yo', 'yo', 'k', 'k2tog', 'ssk'], ['yo', 'yo', 'yo', 'k', 'k2tog', 'yo']], 1, False, False],
   'ssk, k2tog, k1, yo x3']],
 [['WS row swapped', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'ssk', 'k']], 2, False, False],
   'k2, p1, ssp, p1'],
  ['in the round', [[['k', 'p'], ['ssk', 'k']], 2, True, False], 'k1, ssk'],
  ['out of range', [[['k']], 3, False, False], 'error: no such row'],
  ['regression: WS decrease equivalents',
   [[['k2tog', 'yo', 'p', 'p'], ['ssk', 'k2tog', 'k', 'k2tog'], ['p', 'k2tog', 'k2tog', 'k'],
     ['k2tog', 'k', 'p', 'yo'], ['yo', 'k', 'k2tog', 'k']],
    4, False, False],
   'p2tog, p1, k1, yo'],
  ['repair check: WS decrease equivalents',
   [[['yo', 'p', 'p', 'yo', 'k', 'p', 'k2tog'], ['k2tog', 'k2tog', 'k2tog', 'yo', 'ssk', 'k', 'yo']], 1,
    False, True],
   'yo, k2, yo, p1, k1, p2tog'],
  ['generated control 1',
   [[['k2tog', 'k', 'ssk', 'k2tog', 'k', 'k2tog', 'ssk'], ['yo', 'p', 'ssk', 'ssk', 'k2tog', 'k', 'k'],
     ['k2tog', 'k', 'p', 'k2tog', 'p', 'k2tog', 'yo'], ['p', 'k2tog', 'yo', 'p', 'k', 'k2tog', 'k2tog'],
     ['k', 'yo', 'k2tog', 'p', 'p', 'p', 'p'], ['p', 'p', 'ssk', 'k', 'k', 'k2tog', 'yo']],
    1, False, False],
   'ssk, k2tog, k1, k2tog, ssk, k1, k2tog'],
  ['generated control 2',
   [[['k2tog', 'k', 'yo', 'ssk', 'yo', 'k2tog', 'p', 'k2tog'],
     ['k', 'k', 'yo', 'ssk', 'k', 'k2tog', 'yo', 'k'], ['p', 'ssk', 'ssk', 'p', 'ssk', 'p', 'p', 'yo'],
     ['ssk', 'k', 'p', 'p', 'yo', 'yo', 'p', 'k']],
    1, False, False],
   'k2tog, p1, k2tog, yo, ssk, yo, k1, k2tog'],
  ['generated control 3', [[['p', 'yo', 'k2tog'], ['p', 'ssk', 'k']], 1, True, False], 'k2tog, yo, p1']],
 [['in the round', [[['k', 'p'], ['ssk', 'k']], 2, True, False], 'k1, ssk'],
  ['out of range', [[['k']], 3, False, False], 'error: no such row'],
  ['RS row', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'k', 'k']], 1, False, False],
   'k2tog, yo, p1, k2'],
  ['regression: WS decrease equivalents',
   [[['ssk', 'k2tog', 'k2tog', 'k', 'p', 'p', 'yo'], ['k2tog', 'p', 'yo', 'k', 'p', 'yo', 'k'],
     ['k', 'ssk', 'k', 'k', 'k', 'ssk', 'k2tog']],
    1, False, True],
   'ssp, p2tog x2, p1, k2, yo'],
  ['repair check: WS decrease equivalents', [[['ssk', 'yo', 'ssk'], ['k2tog', 'p', 'p']], 2, False, False],
   'p2tog, k2'],
  ['generated control 1',
   [[['k2tog', 'k', 'yo', 'k2tog', 'k2tog'], ['yo', 'yo', 'k', 'k2tog', 'k'],
     ['p', 'k2tog', 'k2tog', 'k2tog', 'p']],
    2, False, True],
   'k1, k2tog, k1, yo x2'],
  ['generated control 2',
   [[['k2tog', 'p', 'ssk', 'ssk', 'yo', 'yo', 'yo'], ['yo', 'p', 'p', 'p', 'yo', 'k', 'p'],
     ['yo', 'ssk', 'k2tog', 'k', 'yo', 'k', 'k'], ['yo', 'ssk', 'k2tog', 'p', 'yo', 'yo', 'p']],
    1, False, False],
   'yo x3, ssk x2, p1, k2tog'],
  ['generated control 3',
   [[['k2tog', 'k2tog', 'yo', 'yo', 'k', 'p', 'yo'], ['k', 'yo', 'ssk', 'p', 'k', 'k', 'yo'],
     ['yo', 'yo', 'k2tog', 'k2tog', 'k2tog', 'k', 'yo'], ['k2tog', 'yo', 'ssk', 'p', 'yo', 'k2tog', 'k2tog'],
     ['ssk', 'p', 'k2tog', 'yo', 'yo', 'ssk', 'p'], ['ssk', 'k2tog', 'k', 'yo', 'k2tog', 'k', 'k2tog']],
    1, True, True],
   'yo, p1, k1, yo x2, k2tog x2']],
 [['out of range', [[['k']], 3, False, False], 'error: no such row'],
  ['RS row', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'k', 'k']], 1, False, False],
   'k2tog, yo, p1, k2'],
  ['WS row swapped', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'ssk', 'k']], 2, False, False],
   'k2, p1, ssp, p1'],
  ['regression: WS decrease equivalents',
   [[['k2tog', 'yo', 'yo', 'k', 'k2tog', 'p'], ['yo', 'ssk', 'k2tog', 'p', 'k2tog', 'k2tog']], 2, False,
    False],
   'yo, ssp, p2tog, k1, p2tog x2'],
  ['repair check: WS decrease equivalents',
   [[['p', 'yo', 'yo', 'k2tog', 'k2tog', 'ssk', 'yo', 'k2tog'],
     ['yo', 'k2tog', 'k2tog', 'ssk', 'yo', 'p', 'yo', 'k2tog'],
     ['k', 'yo', 'yo', 'yo', 'ssk', 'yo', 'p', 'ssk'],
     ['yo', 'k', 'k2tog', 'k2tog', 'yo', 'ssk', 'yo', 'k2tog'],
     ['p', 'ssk', 'k', 'k', 'ssk', 'k', 'k', 'k']],
    4, False, False],
   'yo, p1, p2tog x2, yo, ssp, yo, p2tog'],
  ['generated control 1', [[['yo', 'yo', 'p'], ['ssk', 'ssk', 'k2tog']], 1, False, True], 'yo x2, k1'],
  ['generated control 2',
   [[['k', 'ssk', 'k', 'k2tog', 'p', 'p', 'p'], ['yo', 'p', 'ssk', 'ssk', 'ssk', 'ssk', 'yo']], 1, True,
    True],
   'p3, k2tog, k1, ssk, k1'],
  ['generated control 3',
   [[['k2tog', 'k', 'yo', 'k2tog', 'yo', 'yo', 'yo'], ['ssk', 'yo', 'p', 'yo', 'k', 'yo', 'k2tog'],
     ['k2tog', 'p', 'k2tog', 'ssk', 'k2tog', 'k2tog', 'p'], ['ssk', 'k', 'k2tog', 'k2tog', 'p', 'p', 'k'],
     ['yo', 'p', 'k', 'k2tog', 'p', 'yo', 'yo'], ['k2tog', 'p', 'k', 'ssk', 'p', 'p', 'yo']],
    6, False, False],
   'p2tog, k1, p1, ssp, k2, yo']],
 [['RS row', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'k', 'k']], 1, False, False],
   'k2tog, yo, p1, k2'],
  ['WS row swapped', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'ssk', 'k']], 2, False, False],
   'k2, p1, ssp, p1'],
  ['in the round', [[['k', 'p'], ['ssk', 'k']], 2, True, False], 'k1, ssk'],
  ['regression: WS decrease equivalents',
   [[['yo', 'yo', 'k2tog', 'k', 'p', 'ssk', 'k', 'yo'], ['p', 'ssk', 'p', 'k', 'ssk', 'p', 'k', 'k2tog'],
     ['p', 'ssk', 'ssk', 'k', 'k2tog', 'yo', 'yo', 'k2tog'],
     ['ssk', 'p', 'ssk', 'ssk', 'k2tog', 'ssk', 'k', 'yo']],
    2, False, False],
   'k1, ssp, k1, p1, ssp, k1, p1, p2tog'],
  ['repair check: WS decrease equivalents',
   [[['k', 'ssk', 'k2tog', 'ssk', 'yo', 'yo', 'yo'], ['p', 'k2tog', 'k', 'yo', 'p', 'k', 'ssk'],
     ['ssk', 'p', 'p', 'ssk', 'k2tog', 'k', 'yo'], ['p', 'ssk', 'k', 'k', 'yo', 'yo', 'k'],
     ['yo', 'p', 'p', 'p', 'k2tog', 'k2tog', 'k'], ['p', 'p', 'k2tog', 'yo', 'yo', 'p', 'k']],
    6, False, False],
   'k2, p2tog, yo x2, k1, p1'],
  ['generated control 1',
   [[['yo', 'yo', 'yo', 'k', 'k', 'p', 'yo', 'yo'], ['ssk', 'ssk', 'ssk', 'k2tog', 'k2tog', 'p', 'k', 'ssk'],
     ['ssk', 'k2tog', 'k', 'k', 'ssk', 'p', 'k', 'yo'],
     ['yo', 'k2tog', 'ssk', 'p', 'ssk', 'k2tog', 'k2tog', 'p']],
    4, True, True],
   'p1, k2tog x2, ssk, p1, ssk, k2tog, yo'],
  ['generated control 2',
   [[['p', 'p', 'ssk'], ['p', 'yo', 'k'], ['p', 'k2tog', 'p'], ['p', 'p', 'yo']], 2, False, False],
   'k1, yo, p1'],
  ['generated control 3',
   [[['ssk', 'yo', 'yo', 'k', 'ssk', 'k', 'k2tog', 'ssk'],
     ['k2tog', 'yo', 'ssk', 'k', 'ssk', 'k', 'yo', 'k2tog']],
    1, False, False],
   'ssk, k2tog, k1, ssk, k1, yo x2, ssk']]]
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
RS rowk2tog, yo, p1, k2k2tog, yo, p1, k2Passed
WS row swappedk2, p1, ssk, p1k2, p1, ssp, p1Failed
in the roundk1, sskk1, sskPassed
regression: WS decrease equivalentsssk x2, k2tog, p1, yo, k1, k2togssp x2, p2tog, p1, yo, k1, p2togFailed
repair check: WS decrease equivalentsssk x2, p1, yo, k1ssp x2, p1, yo, k1Failed
generated control 1ssk, yo x2, p1, k1ssk, yo x2, p1, k1Passed
generated control 2ssk, p1, yo, ssk x2, yo, k1ssk, p1, yo, ssk x2, yo, k1Passed
generated control 3ssk, k2tog, k1, yo x3ssk, k2tog, k1, yo x3Passed

SHA-256 / 639744aed0ffcc3692542fb0b3ba51ac261f5b1b167b5404e2565fbe97daecc2

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(chart, row, in_round, start_ws):
    SWAP = {'k': 'p', 'p': 'k', 'k2tog': 'ssp', 'ssk': 'p2tog', 'yo': 'yo'}
    if not 1 <= row <= len(chart):
        return 'error: no such row'
    cells = list(chart[row - 1])
    ws = (not in_round) and ((row % 2 == 0) != start_ws)
    if ws:
        seq = [SWAP.get(c, c) for c in cells]
    else:
        seq = cells[::-1]
    out = []
    for c in seq:
        if out and out[-1][0] == c:
            out[-1][1] += 1
        else:
            out.append([c, 1])
    return ', '.join(c + str(n) if c in ('k', 'p') else (c if n == 1 else '%s x%d' % (c, n)) for c, n in out)
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['RS row', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'k', 'k']], 1, False, False],
   'k2tog, yo, p1, k2'],
  ['WS row swapped', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'ssk', 'k']], 2, False, False],
   'k2, p1, ssp, p1'],
  ['in the round', [[['k', 'p'], ['ssk', 'k']], 2, True, False], 'k1, ssk'],
  ['regression: WS decrease equivalents',
   [[['ssk', 'k2tog', 'k', 'p', 'yo', 'yo', 'yo'], ['ssk', 'ssk', 'k2tog', 'k', 'yo', 'p', 'k2tog']], 2,
    False, False],
   'ssp x2, p2tog, p1, yo, k1, p2tog'],
  ['repair check: WS decrease equivalents',
   [[['ssk', 'k2tog', 'p', 'ssk', 'k2tog'], ['yo', 'k', 'k2tog', 'p', 'k2tog'], ['k', 'k', 'p', 'ssk', 'ssk'],
     ['ssk', 'ssk', 'k', 'yo', 'p'], ['ssk', 'ssk', 'yo', 'p', 'k'], ['p', 'p', 'k', 'p', 'ssk']],
    4, False, False],
   'ssp x2, p1, yo, k1'],
  ['generated control 1',
   [[['p', 'p', 'ssk', 'ssk', 'k'], ['k', 'p', 'yo', 'yo', 'ssk'], ['k', 'p', 'k', 'ssk', 'k2tog']], 2, True,
    False],
   'ssk, yo x2, p1, k1'],
  ['generated control 2',
   [[['ssk', 'yo', 'ssk', 'ssk', 'k', 'yo', 'yo'], ['k', 'yo', 'ssk', 'ssk', 'yo', 'p', 'ssk'],
     ['p', 'yo', 'k', 'yo', 'p', 'ssk', 'k2tog'], ['k', 'p', 'yo', 'yo', 'k', 'k2tog', 'yo'],
     ['ssk', 'k2tog', 'yo', 'ssk', 'ssk', 'k', 'p'], ['k2tog', 'ssk', 'yo', 'p', 'ssk', 'k', 'yo']],
    2, False, True],
   'ssk, p1, yo, ssk x2, yo, k1'],
  ['generated control 3',
   [[['yo', 'yo', 'yo', 'k', 'k2tog', 'ssk'], ['yo', 'yo', 'yo', 'k', 'k2tog', 'yo']], 1, False, False],
   'ssk, k2tog, k1, yo x3']],
 [['WS row swapped', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'ssk', 'k']], 2, False, False],
   'k2, p1, ssp, p1'],
  ['in the round', [[['k', 'p'], ['ssk', 'k']], 2, True, False], 'k1, ssk'],
  ['out of range', [[['k']], 3, False, False], 'error: no such row'],
  ['regression: WS decrease equivalents',
   [[['k2tog', 'yo', 'p', 'p'], ['ssk', 'k2tog', 'k', 'k2tog'], ['p', 'k2tog', 'k2tog', 'k'],
     ['k2tog', 'k', 'p', 'yo'], ['yo', 'k', 'k2tog', 'k']],
    4, False, False],
   'p2tog, p1, k1, yo'],
  ['repair check: WS decrease equivalents',
   [[['yo', 'p', 'p', 'yo', 'k', 'p', 'k2tog'], ['k2tog', 'k2tog', 'k2tog', 'yo', 'ssk', 'k', 'yo']], 1,
    False, True],
   'yo, k2, yo, p1, k1, p2tog'],
  ['generated control 1',
   [[['k2tog', 'k', 'ssk', 'k2tog', 'k', 'k2tog', 'ssk'], ['yo', 'p', 'ssk', 'ssk', 'k2tog', 'k', 'k'],
     ['k2tog', 'k', 'p', 'k2tog', 'p', 'k2tog', 'yo'], ['p', 'k2tog', 'yo', 'p', 'k', 'k2tog', 'k2tog'],
     ['k', 'yo', 'k2tog', 'p', 'p', 'p', 'p'], ['p', 'p', 'ssk', 'k', 'k', 'k2tog', 'yo']],
    1, False, False],
   'ssk, k2tog, k1, k2tog, ssk, k1, k2tog'],
  ['generated control 2',
   [[['k2tog', 'k', 'yo', 'ssk', 'yo', 'k2tog', 'p', 'k2tog'],
     ['k', 'k', 'yo', 'ssk', 'k', 'k2tog', 'yo', 'k'], ['p', 'ssk', 'ssk', 'p', 'ssk', 'p', 'p', 'yo'],
     ['ssk', 'k', 'p', 'p', 'yo', 'yo', 'p', 'k']],
    1, False, False],
   'k2tog, p1, k2tog, yo, ssk, yo, k1, k2tog'],
  ['generated control 3', [[['p', 'yo', 'k2tog'], ['p', 'ssk', 'k']], 1, True, False], 'k2tog, yo, p1']],
 [['in the round', [[['k', 'p'], ['ssk', 'k']], 2, True, False], 'k1, ssk'],
  ['out of range', [[['k']], 3, False, False], 'error: no such row'],
  ['RS row', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'k', 'k']], 1, False, False],
   'k2tog, yo, p1, k2'],
  ['regression: WS decrease equivalents',
   [[['ssk', 'k2tog', 'k2tog', 'k', 'p', 'p', 'yo'], ['k2tog', 'p', 'yo', 'k', 'p', 'yo', 'k'],
     ['k', 'ssk', 'k', 'k', 'k', 'ssk', 'k2tog']],
    1, False, True],
   'ssp, p2tog x2, p1, k2, yo'],
  ['repair check: WS decrease equivalents', [[['ssk', 'yo', 'ssk'], ['k2tog', 'p', 'p']], 2, False, False],
   'p2tog, k2'],
  ['generated control 1',
   [[['k2tog', 'k', 'yo', 'k2tog', 'k2tog'], ['yo', 'yo', 'k', 'k2tog', 'k'],
     ['p', 'k2tog', 'k2tog', 'k2tog', 'p']],
    2, False, True],
   'k1, k2tog, k1, yo x2'],
  ['generated control 2',
   [[['k2tog', 'p', 'ssk', 'ssk', 'yo', 'yo', 'yo'], ['yo', 'p', 'p', 'p', 'yo', 'k', 'p'],
     ['yo', 'ssk', 'k2tog', 'k', 'yo', 'k', 'k'], ['yo', 'ssk', 'k2tog', 'p', 'yo', 'yo', 'p']],
    1, False, False],
   'yo x3, ssk x2, p1, k2tog'],
  ['generated control 3',
   [[['k2tog', 'k2tog', 'yo', 'yo', 'k', 'p', 'yo'], ['k', 'yo', 'ssk', 'p', 'k', 'k', 'yo'],
     ['yo', 'yo', 'k2tog', 'k2tog', 'k2tog', 'k', 'yo'], ['k2tog', 'yo', 'ssk', 'p', 'yo', 'k2tog', 'k2tog'],
     ['ssk', 'p', 'k2tog', 'yo', 'yo', 'ssk', 'p'], ['ssk', 'k2tog', 'k', 'yo', 'k2tog', 'k', 'k2tog']],
    1, True, True],
   'yo, p1, k1, yo x2, k2tog x2']],
 [['out of range', [[['k']], 3, False, False], 'error: no such row'],
  ['RS row', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'k', 'k']], 1, False, False],
   'k2tog, yo, p1, k2'],
  ['WS row swapped', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'ssk', 'k']], 2, False, False],
   'k2, p1, ssp, p1'],
  ['regression: WS decrease equivalents',
   [[['k2tog', 'yo', 'yo', 'k', 'k2tog', 'p'], ['yo', 'ssk', 'k2tog', 'p', 'k2tog', 'k2tog']], 2, False,
    False],
   'yo, ssp, p2tog, k1, p2tog x2'],
  ['repair check: WS decrease equivalents',
   [[['p', 'yo', 'yo', 'k2tog', 'k2tog', 'ssk', 'yo', 'k2tog'],
     ['yo', 'k2tog', 'k2tog', 'ssk', 'yo', 'p', 'yo', 'k2tog'],
     ['k', 'yo', 'yo', 'yo', 'ssk', 'yo', 'p', 'ssk'],
     ['yo', 'k', 'k2tog', 'k2tog', 'yo', 'ssk', 'yo', 'k2tog'],
     ['p', 'ssk', 'k', 'k', 'ssk', 'k', 'k', 'k']],
    4, False, False],
   'yo, p1, p2tog x2, yo, ssp, yo, p2tog'],
  ['generated control 1', [[['yo', 'yo', 'p'], ['ssk', 'ssk', 'k2tog']], 1, False, True], 'yo x2, k1'],
  ['generated control 2',
   [[['k', 'ssk', 'k', 'k2tog', 'p', 'p', 'p'], ['yo', 'p', 'ssk', 'ssk', 'ssk', 'ssk', 'yo']], 1, True,
    True],
   'p3, k2tog, k1, ssk, k1'],
  ['generated control 3',
   [[['k2tog', 'k', 'yo', 'k2tog', 'yo', 'yo', 'yo'], ['ssk', 'yo', 'p', 'yo', 'k', 'yo', 'k2tog'],
     ['k2tog', 'p', 'k2tog', 'ssk', 'k2tog', 'k2tog', 'p'], ['ssk', 'k', 'k2tog', 'k2tog', 'p', 'p', 'k'],
     ['yo', 'p', 'k', 'k2tog', 'p', 'yo', 'yo'], ['k2tog', 'p', 'k', 'ssk', 'p', 'p', 'yo']],
    6, False, False],
   'p2tog, k1, p1, ssp, k2, yo']],
 [['RS row', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'k', 'k']], 1, False, False],
   'k2tog, yo, p1, k2'],
  ['WS row swapped', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'ssk', 'k']], 2, False, False],
   'k2, p1, ssp, p1'],
  ['in the round', [[['k', 'p'], ['ssk', 'k']], 2, True, False], 'k1, ssk'],
  ['regression: WS decrease equivalents',
   [[['yo', 'yo', 'k2tog', 'k', 'p', 'ssk', 'k', 'yo'], ['p', 'ssk', 'p', 'k', 'ssk', 'p', 'k', 'k2tog'],
     ['p', 'ssk', 'ssk', 'k', 'k2tog', 'yo', 'yo', 'k2tog'],
     ['ssk', 'p', 'ssk', 'ssk', 'k2tog', 'ssk', 'k', 'yo']],
    2, False, False],
   'k1, ssp, k1, p1, ssp, k1, p1, p2tog'],
  ['repair check: WS decrease equivalents',
   [[['k', 'ssk', 'k2tog', 'ssk', 'yo', 'yo', 'yo'], ['p', 'k2tog', 'k', 'yo', 'p', 'k', 'ssk'],
     ['ssk', 'p', 'p', 'ssk', 'k2tog', 'k', 'yo'], ['p', 'ssk', 'k', 'k', 'yo', 'yo', 'k'],
     ['yo', 'p', 'p', 'p', 'k2tog', 'k2tog', 'k'], ['p', 'p', 'k2tog', 'yo', 'yo', 'p', 'k']],
    6, False, False],
   'k2, p2tog, yo x2, k1, p1'],
  ['generated control 1',
   [[['yo', 'yo', 'yo', 'k', 'k', 'p', 'yo', 'yo'], ['ssk', 'ssk', 'ssk', 'k2tog', 'k2tog', 'p', 'k', 'ssk'],
     ['ssk', 'k2tog', 'k', 'k', 'ssk', 'p', 'k', 'yo'],
     ['yo', 'k2tog', 'ssk', 'p', 'ssk', 'k2tog', 'k2tog', 'p']],
    4, True, True],
   'p1, k2tog x2, ssk, p1, ssk, k2tog, yo'],
  ['generated control 2',
   [[['p', 'p', 'ssk'], ['p', 'yo', 'k'], ['p', 'k2tog', 'p'], ['p', 'p', 'yo']], 2, False, False],
   'k1, yo, p1'],
  ['generated control 3',
   [[['ssk', 'yo', 'yo', 'k', 'ssk', 'k', 'k2tog', 'ssk'],
     ['k2tog', 'yo', 'ssk', 'k', 'ssk', 'k', 'yo', 'k2tog']],
    1, False, False],
   'ssk, k2tog, k1, ssk, k1, yo x2, ssk']]]
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
RS rowk2tog, yo, p1, k2k2tog, yo, p1, k2Passed
WS row swappedk2, p1, p2tog, p1k2, p1, ssp, p1Failed
in the roundk1, sskk1, sskPassed
regression: WS decrease equivalentsp2tog x2, ssp, p1, yo, k1, sspssp x2, p2tog, p1, yo, k1, p2togFailed
repair check: WS decrease equivalentsp2tog x2, p1, yo, k1ssp x2, p1, yo, k1Failed
generated control 1ssk, yo x2, p1, k1ssk, yo x2, p1, k1Passed
generated control 2ssk, p1, yo, ssk x2, yo, k1ssk, p1, yo, ssk x2, yo, k1Passed
generated control 3ssk, k2tog, k1, yo x3ssk, k2tog, k1, yo x3Passed

SHA-256 / cca52197067b73ed67105d9cbf3c2b3679e2659b4bc00c9b01885b4b46318c2a

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(chart, row, in_round, start_ws):
    SWAP = {'k': 'p', 'p': 'k', 'k2tog': 'p2tog', 'ssk': 'ssp', 'yo': 'yo'}
    if not 1 <= row <= len(chart):
        return 'error: no such row'
    cells = list(chart[row - 1])
    ws = (not in_round) and ((row % 2 == 0) != start_ws)
    if ws:
        seq = [SWAP.get(c, c) for c in cells]
    else:
        seq = cells[::-1]
    out = []
    for c in seq:
        if out and out[-1][0] == c:
            out[-1][1] += 1
        else:
            out.append([c, 1])
    return ', '.join(c + str(n) if c in ('k', 'p') else (c if n == 1 else '%s x%d' % (c, n)) for c, n in out)
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['RS row', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'k', 'k']], 1, False, False],
   'k2tog, yo, p1, k2'],
  ['WS row swapped', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'ssk', 'k']], 2, False, False],
   'k2, p1, ssp, p1'],
  ['in the round', [[['k', 'p'], ['ssk', 'k']], 2, True, False], 'k1, ssk'],
  ['regression: WS decrease equivalents',
   [[['ssk', 'k2tog', 'k', 'p', 'yo', 'yo', 'yo'], ['ssk', 'ssk', 'k2tog', 'k', 'yo', 'p', 'k2tog']], 2,
    False, False],
   'ssp x2, p2tog, p1, yo, k1, p2tog'],
  ['repair check: WS decrease equivalents',
   [[['ssk', 'k2tog', 'p', 'ssk', 'k2tog'], ['yo', 'k', 'k2tog', 'p', 'k2tog'], ['k', 'k', 'p', 'ssk', 'ssk'],
     ['ssk', 'ssk', 'k', 'yo', 'p'], ['ssk', 'ssk', 'yo', 'p', 'k'], ['p', 'p', 'k', 'p', 'ssk']],
    4, False, False],
   'ssp x2, p1, yo, k1'],
  ['generated control 1',
   [[['p', 'p', 'ssk', 'ssk', 'k'], ['k', 'p', 'yo', 'yo', 'ssk'], ['k', 'p', 'k', 'ssk', 'k2tog']], 2, True,
    False],
   'ssk, yo x2, p1, k1'],
  ['generated control 2',
   [[['ssk', 'yo', 'ssk', 'ssk', 'k', 'yo', 'yo'], ['k', 'yo', 'ssk', 'ssk', 'yo', 'p', 'ssk'],
     ['p', 'yo', 'k', 'yo', 'p', 'ssk', 'k2tog'], ['k', 'p', 'yo', 'yo', 'k', 'k2tog', 'yo'],
     ['ssk', 'k2tog', 'yo', 'ssk', 'ssk', 'k', 'p'], ['k2tog', 'ssk', 'yo', 'p', 'ssk', 'k', 'yo']],
    2, False, True],
   'ssk, p1, yo, ssk x2, yo, k1'],
  ['generated control 3',
   [[['yo', 'yo', 'yo', 'k', 'k2tog', 'ssk'], ['yo', 'yo', 'yo', 'k', 'k2tog', 'yo']], 1, False, False],
   'ssk, k2tog, k1, yo x3']],
 [['WS row swapped', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'ssk', 'k']], 2, False, False],
   'k2, p1, ssp, p1'],
  ['in the round', [[['k', 'p'], ['ssk', 'k']], 2, True, False], 'k1, ssk'],
  ['out of range', [[['k']], 3, False, False], 'error: no such row'],
  ['regression: WS decrease equivalents',
   [[['k2tog', 'yo', 'p', 'p'], ['ssk', 'k2tog', 'k', 'k2tog'], ['p', 'k2tog', 'k2tog', 'k'],
     ['k2tog', 'k', 'p', 'yo'], ['yo', 'k', 'k2tog', 'k']],
    4, False, False],
   'p2tog, p1, k1, yo'],
  ['repair check: WS decrease equivalents',
   [[['yo', 'p', 'p', 'yo', 'k', 'p', 'k2tog'], ['k2tog', 'k2tog', 'k2tog', 'yo', 'ssk', 'k', 'yo']], 1,
    False, True],
   'yo, k2, yo, p1, k1, p2tog'],
  ['generated control 1',
   [[['k2tog', 'k', 'ssk', 'k2tog', 'k', 'k2tog', 'ssk'], ['yo', 'p', 'ssk', 'ssk', 'k2tog', 'k', 'k'],
     ['k2tog', 'k', 'p', 'k2tog', 'p', 'k2tog', 'yo'], ['p', 'k2tog', 'yo', 'p', 'k', 'k2tog', 'k2tog'],
     ['k', 'yo', 'k2tog', 'p', 'p', 'p', 'p'], ['p', 'p', 'ssk', 'k', 'k', 'k2tog', 'yo']],
    1, False, False],
   'ssk, k2tog, k1, k2tog, ssk, k1, k2tog'],
  ['generated control 2',
   [[['k2tog', 'k', 'yo', 'ssk', 'yo', 'k2tog', 'p', 'k2tog'],
     ['k', 'k', 'yo', 'ssk', 'k', 'k2tog', 'yo', 'k'], ['p', 'ssk', 'ssk', 'p', 'ssk', 'p', 'p', 'yo'],
     ['ssk', 'k', 'p', 'p', 'yo', 'yo', 'p', 'k']],
    1, False, False],
   'k2tog, p1, k2tog, yo, ssk, yo, k1, k2tog'],
  ['generated control 3', [[['p', 'yo', 'k2tog'], ['p', 'ssk', 'k']], 1, True, False], 'k2tog, yo, p1']],
 [['in the round', [[['k', 'p'], ['ssk', 'k']], 2, True, False], 'k1, ssk'],
  ['out of range', [[['k']], 3, False, False], 'error: no such row'],
  ['RS row', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'k', 'k']], 1, False, False],
   'k2tog, yo, p1, k2'],
  ['regression: WS decrease equivalents',
   [[['ssk', 'k2tog', 'k2tog', 'k', 'p', 'p', 'yo'], ['k2tog', 'p', 'yo', 'k', 'p', 'yo', 'k'],
     ['k', 'ssk', 'k', 'k', 'k', 'ssk', 'k2tog']],
    1, False, True],
   'ssp, p2tog x2, p1, k2, yo'],
  ['repair check: WS decrease equivalents', [[['ssk', 'yo', 'ssk'], ['k2tog', 'p', 'p']], 2, False, False],
   'p2tog, k2'],
  ['generated control 1',
   [[['k2tog', 'k', 'yo', 'k2tog', 'k2tog'], ['yo', 'yo', 'k', 'k2tog', 'k'],
     ['p', 'k2tog', 'k2tog', 'k2tog', 'p']],
    2, False, True],
   'k1, k2tog, k1, yo x2'],
  ['generated control 2',
   [[['k2tog', 'p', 'ssk', 'ssk', 'yo', 'yo', 'yo'], ['yo', 'p', 'p', 'p', 'yo', 'k', 'p'],
     ['yo', 'ssk', 'k2tog', 'k', 'yo', 'k', 'k'], ['yo', 'ssk', 'k2tog', 'p', 'yo', 'yo', 'p']],
    1, False, False],
   'yo x3, ssk x2, p1, k2tog'],
  ['generated control 3',
   [[['k2tog', 'k2tog', 'yo', 'yo', 'k', 'p', 'yo'], ['k', 'yo', 'ssk', 'p', 'k', 'k', 'yo'],
     ['yo', 'yo', 'k2tog', 'k2tog', 'k2tog', 'k', 'yo'], ['k2tog', 'yo', 'ssk', 'p', 'yo', 'k2tog', 'k2tog'],
     ['ssk', 'p', 'k2tog', 'yo', 'yo', 'ssk', 'p'], ['ssk', 'k2tog', 'k', 'yo', 'k2tog', 'k', 'k2tog']],
    1, True, True],
   'yo, p1, k1, yo x2, k2tog x2']],
 [['out of range', [[['k']], 3, False, False], 'error: no such row'],
  ['RS row', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'k', 'k']], 1, False, False],
   'k2tog, yo, p1, k2'],
  ['WS row swapped', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'ssk', 'k']], 2, False, False],
   'k2, p1, ssp, p1'],
  ['regression: WS decrease equivalents',
   [[['k2tog', 'yo', 'yo', 'k', 'k2tog', 'p'], ['yo', 'ssk', 'k2tog', 'p', 'k2tog', 'k2tog']], 2, False,
    False],
   'yo, ssp, p2tog, k1, p2tog x2'],
  ['repair check: WS decrease equivalents',
   [[['p', 'yo', 'yo', 'k2tog', 'k2tog', 'ssk', 'yo', 'k2tog'],
     ['yo', 'k2tog', 'k2tog', 'ssk', 'yo', 'p', 'yo', 'k2tog'],
     ['k', 'yo', 'yo', 'yo', 'ssk', 'yo', 'p', 'ssk'],
     ['yo', 'k', 'k2tog', 'k2tog', 'yo', 'ssk', 'yo', 'k2tog'],
     ['p', 'ssk', 'k', 'k', 'ssk', 'k', 'k', 'k']],
    4, False, False],
   'yo, p1, p2tog x2, yo, ssp, yo, p2tog'],
  ['generated control 1', [[['yo', 'yo', 'p'], ['ssk', 'ssk', 'k2tog']], 1, False, True], 'yo x2, k1'],
  ['generated control 2',
   [[['k', 'ssk', 'k', 'k2tog', 'p', 'p', 'p'], ['yo', 'p', 'ssk', 'ssk', 'ssk', 'ssk', 'yo']], 1, True,
    True],
   'p3, k2tog, k1, ssk, k1'],
  ['generated control 3',
   [[['k2tog', 'k', 'yo', 'k2tog', 'yo', 'yo', 'yo'], ['ssk', 'yo', 'p', 'yo', 'k', 'yo', 'k2tog'],
     ['k2tog', 'p', 'k2tog', 'ssk', 'k2tog', 'k2tog', 'p'], ['ssk', 'k', 'k2tog', 'k2tog', 'p', 'p', 'k'],
     ['yo', 'p', 'k', 'k2tog', 'p', 'yo', 'yo'], ['k2tog', 'p', 'k', 'ssk', 'p', 'p', 'yo']],
    6, False, False],
   'p2tog, k1, p1, ssp, k2, yo']],
 [['RS row', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'k', 'k']], 1, False, False],
   'k2tog, yo, p1, k2'],
  ['WS row swapped', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'ssk', 'k']], 2, False, False],
   'k2, p1, ssp, p1'],
  ['in the round', [[['k', 'p'], ['ssk', 'k']], 2, True, False], 'k1, ssk'],
  ['regression: WS decrease equivalents',
   [[['yo', 'yo', 'k2tog', 'k', 'p', 'ssk', 'k', 'yo'], ['p', 'ssk', 'p', 'k', 'ssk', 'p', 'k', 'k2tog'],
     ['p', 'ssk', 'ssk', 'k', 'k2tog', 'yo', 'yo', 'k2tog'],
     ['ssk', 'p', 'ssk', 'ssk', 'k2tog', 'ssk', 'k', 'yo']],
    2, False, False],
   'k1, ssp, k1, p1, ssp, k1, p1, p2tog'],
  ['repair check: WS decrease equivalents',
   [[['k', 'ssk', 'k2tog', 'ssk', 'yo', 'yo', 'yo'], ['p', 'k2tog', 'k', 'yo', 'p', 'k', 'ssk'],
     ['ssk', 'p', 'p', 'ssk', 'k2tog', 'k', 'yo'], ['p', 'ssk', 'k', 'k', 'yo', 'yo', 'k'],
     ['yo', 'p', 'p', 'p', 'k2tog', 'k2tog', 'k'], ['p', 'p', 'k2tog', 'yo', 'yo', 'p', 'k']],
    6, False, False],
   'k2, p2tog, yo x2, k1, p1'],
  ['generated control 1',
   [[['yo', 'yo', 'yo', 'k', 'k', 'p', 'yo', 'yo'], ['ssk', 'ssk', 'ssk', 'k2tog', 'k2tog', 'p', 'k', 'ssk'],
     ['ssk', 'k2tog', 'k', 'k', 'ssk', 'p', 'k', 'yo'],
     ['yo', 'k2tog', 'ssk', 'p', 'ssk', 'k2tog', 'k2tog', 'p']],
    4, True, True],
   'p1, k2tog x2, ssk, p1, ssk, k2tog, yo'],
  ['generated control 2',
   [[['p', 'p', 'ssk'], ['p', 'yo', 'k'], ['p', 'k2tog', 'p'], ['p', 'p', 'yo']], 2, False, False],
   'k1, yo, p1'],
  ['generated control 3',
   [[['ssk', 'yo', 'yo', 'k', 'ssk', 'k', 'k2tog', 'ssk'],
     ['k2tog', 'yo', 'ssk', 'k', 'ssk', 'k', 'yo', 'k2tog']],
    1, False, False],
   'ssk, k2tog, k1, ssk, k1, yo x2, ssk']]]
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
RS rowk2tog, yo, p1, k2k2tog, yo, p1, k2Passed
WS row swappedk2, p1, ssp, p1k2, p1, ssp, p1Passed
in the roundk1, sskk1, sskPassed
regression: WS decrease equivalentsssp x2, p2tog, p1, yo, k1, p2togssp x2, p2tog, p1, yo, k1, p2togPassed
repair check: WS decrease equivalentsssp x2, p1, yo, k1ssp x2, p1, yo, k1Passed
generated control 1ssk, yo x2, p1, k1ssk, yo x2, p1, k1Passed
generated control 2ssk, p1, yo, ssk x2, yo, k1ssk, p1, yo, ssk x2, yo, k1Passed
generated control 3ssk, k2tog, k1, yo x3ssk, k2tog, k1, yo x3Passed

SHA-256 / 3bf76fc15cc2f3f8a6de81efb4f878231971c56bbbccbedebfd378c8da17d2c7

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

Case digest / a02420891a500f20423f8aace1359e3f5ac9bc073801479ff5eeb82ba53674c6