{"abstract":"A moved row emits changes without updating identity state.","category":"Data systems","checks":7,"contract":"Maintain an identity-indexed keyed table while applying [id,newkey,newvalue] upserts. A moved identity retracts its old key/value before adding the new row. Identical upserts emit no change. State and emitted changelog preserve identity distinctions.","evaluation_group":"s3-data-systems-key-changing-upsert","failed_approach":"Retaining the old payload makes later retractions stale.","family":"s3-data-systems-key-changing-upsert-state-update","id":"FA-44716","implementations":{"attempt":{"sha256":"0cb04a964372d3b13cf7bbe1b91c83afe0436aa5f01e2169d8b7507cd0c1dadf","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(d):\n    try:\n        initial,updates=d\n        state={ident:[key,value] for ident,key,value in initial}\n        out=[]\n        for ident,key,value in updates:\n            previous=state.get(ident)\n            if previous==[key,value]: continue\n            if previous is not None: out.append([ident,previous[0],previous[1],-1])\n            state[ident]=[key,previous[1] if previous is not None else value]\n            out.append([ident,key,value,1])\n        return [sorted([[i,k,v] for i,(k,v) in state.items()]),out]\n    except (IndexError, KeyError, ValueError, StopIteration) as exc:\n        return {\"representation_error\": type(exc).__name__}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nif N == 1:\n    check('move key', solve([[[10, 1, 1]], [[10, 2, 2]]]), [[[10, 2, 2]], [[10, 1, 1, -1], [10, 2, 2, 1]]])\n    check('same key changed value', solve([[[10, 1, 1]], [[10, 1, 2]]]), [[[10, 1, 2]], [[10, 1, 1, -1], [10, 1, 2, 1]]])\n    check('same value moved', solve([[[10, 1, 1]], [[10, 2, 1]]]), [[[10, 2, 1]], [[10, 1, 1, -1], [10, 2, 1, 1]]])\n    check('insert new identity', solve([[[10, 1, 1]], [[11, 1, 2]]]), [[[10, 1, 1], [11, 1, 2]], [[11, 1, 2, 1]]])\n    check('identical upsert', solve([[[10, 1, 1]], [[10, 1, 1]]]), [[[10, 1, 1]], []])\n    check('two updates', solve([[[10, 1, 1]], [[10, 2, 2], [10, 3, 3]]]), [[[10, 3, 3]], [[10, 1, 1, -1], [10, 2, 2, 1], [10, 2, 2, -1], [10, 3, 3, 1]]])\n    check('empty table', solve([[], []]), [[], []])\nelif N == 2:\n    check('move key', solve([[[10, 1, 2]], [[10, 2, 3]]]), [[[10, 2, 3]], [[10, 1, 2, -1], [10, 2, 3, 1]]])\n    check('same key changed value', solve([[[10, 1, 2]], [[10, 1, 3]]]), [[[10, 1, 3]], [[10, 1, 2, -1], [10, 1, 3, 1]]])\n    check('same value moved', solve([[[10, 1, 2]], [[10, 2, 2]]]), [[[10, 2, 2]], [[10, 1, 2, -1], [10, 2, 2, 1]]])\n    check('insert new identity', solve([[[10, 1, 2]], [[11, 1, 3]]]), [[[10, 1, 2], [11, 1, 3]], [[11, 1, 3, 1]]])\n    check('identical upsert', solve([[[10, 1, 2]], [[10, 1, 2]]]), [[[10, 1, 2]], []])\n    check('two updates', solve([[[10, 1, 2]], [[10, 2, 3], [10, 3, 4]]]), [[[10, 3, 4]], [[10, 1, 2, -1], [10, 2, 3, 1], [10, 2, 3, -1], [10, 3, 4, 1]]])\n    check('empty table', solve([[], []]), [[], []])\nelif N == 3:\n    check('move key', solve([[[10, 1, 3]], [[10, 2, 4]]]), [[[10, 2, 4]], [[10, 1, 3, -1], [10, 2, 4, 1]]])\n    check('same key changed value', solve([[[10, 1, 3]], [[10, 1, 4]]]), [[[10, 1, 4]], [[10, 1, 3, -1], [10, 1, 4, 1]]])\n    check('same value moved', solve([[[10, 1, 3]], [[10, 2, 3]]]), [[[10, 2, 3]], [[10, 1, 3, -1], [10, 2, 3, 1]]])\n    check('insert new identity', solve([[[10, 1, 3]], [[11, 1, 4]]]), [[[10, 1, 3], [11, 1, 4]], [[11, 1, 4, 1]]])\n    check('identical upsert', solve([[[10, 1, 3]], [[10, 1, 3]]]), [[[10, 1, 3]], []])\n    check('two updates', solve([[[10, 1, 3]], [[10, 2, 4], [10, 3, 5]]]), [[[10, 3, 5]], [[10, 1, 3, -1], [10, 2, 4, 1], [10, 2, 4, -1], [10, 3, 5, 1]]])\n    check('empty table', solve([[], []]), [[], []])\nelif N == 4:\n    check('move key', solve([[[10, 1, 4]], [[10, 2, 5]]]), [[[10, 2, 5]], [[10, 1, 4, -1], [10, 2, 5, 1]]])\n    check('same key changed value', solve([[[10, 1, 4]], [[10, 1, 5]]]), [[[10, 1, 5]], [[10, 1, 4, -1], [10, 1, 5, 1]]])\n    check('same value moved', solve([[[10, 1, 4]], [[10, 2, 4]]]), [[[10, 2, 4]], [[10, 1, 4, -1], [10, 2, 4, 1]]])\n    check('insert new identity', solve([[[10, 1, 4]], [[11, 1, 5]]]), [[[10, 1, 4], [11, 1, 5]], [[11, 1, 5, 1]]])\n    check('identical upsert', solve([[[10, 1, 4]], [[10, 1, 4]]]), [[[10, 1, 4]], []])\n    check('two updates', solve([[[10, 1, 4]], [[10, 2, 5], [10, 3, 6]]]), [[[10, 3, 6]], [[10, 1, 4, -1], [10, 2, 5, 1], [10, 2, 5, -1], [10, 3, 6, 1]]])\n    check('empty table', solve([[], []]), [[], []])\nelif N == 5:\n    check('move key', solve([[[10, 1, 5]], [[10, 2, 6]]]), [[[10, 2, 6]], [[10, 1, 5, -1], [10, 2, 6, 1]]])\n    check('same key changed value', solve([[[10, 1, 5]], [[10, 1, 6]]]), [[[10, 1, 6]], [[10, 1, 5, -1], [10, 1, 6, 1]]])\n    check('same value moved', solve([[[10, 1, 5]], [[10, 2, 5]]]), [[[10, 2, 5]], [[10, 1, 5, -1], [10, 2, 5, 1]]])\n    check('insert new identity', solve([[[10, 1, 5]], [[11, 1, 6]]]), [[[10, 1, 5], [11, 1, 6]], [[11, 1, 6, 1]]])\n    check('identical upsert', solve([[[10, 1, 5]], [[10, 1, 5]]]), [[[10, 1, 5]], []])\n    check('two updates', solve([[[10, 1, 5]], [[10, 2, 6], [10, 3, 7]]]), [[[10, 3, 7]], [[10, 1, 5, -1], [10, 2, 6, 1], [10, 2, 6, -1], [10, 3, 7, 1]]])\n    check('empty table', solve([[], []]), [[], []])\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"broken":{"sha256":"933bbf0785cae1816b667fce65bf8b507ec2b19649719af09870d234c7719a7b","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(d):\n    try:\n        initial,updates=d\n        state={ident:[key,value] for ident,key,value in initial}\n        out=[]\n        for ident,key,value in updates:\n            previous=state.get(ident)\n            if previous==[key,value]: continue\n            if previous is not None: out.append([ident,previous[0],previous[1],-1])\n            state.setdefault(ident,[key,value])\n            out.append([ident,key,value,1])\n        return [sorted([[i,k,v] for i,(k,v) in state.items()]),out]\n    except (IndexError, KeyError, ValueError, StopIteration) as exc:\n        return {\"representation_error\": type(exc).__name__}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nif N == 1:\n    check('move key', solve([[[10, 1, 1]], [[10, 2, 2]]]), [[[10, 2, 2]], [[10, 1, 1, -1], [10, 2, 2, 1]]])\n    check('same key changed value', solve([[[10, 1, 1]], [[10, 1, 2]]]), [[[10, 1, 2]], [[10, 1, 1, -1], [10, 1, 2, 1]]])\n    check('same value moved', solve([[[10, 1, 1]], [[10, 2, 1]]]), [[[10, 2, 1]], [[10, 1, 1, -1], [10, 2, 1, 1]]])\n    check('insert new identity', solve([[[10, 1, 1]], [[11, 1, 2]]]), [[[10, 1, 1], [11, 1, 2]], [[11, 1, 2, 1]]])\n    check('identical upsert', solve([[[10, 1, 1]], [[10, 1, 1]]]), [[[10, 1, 1]], []])\n    check('two updates', solve([[[10, 1, 1]], [[10, 2, 2], [10, 3, 3]]]), [[[10, 3, 3]], [[10, 1, 1, -1], [10, 2, 2, 1], [10, 2, 2, -1], [10, 3, 3, 1]]])\n    check('empty table', solve([[], []]), [[], []])\nelif N == 2:\n    check('move key', solve([[[10, 1, 2]], [[10, 2, 3]]]), [[[10, 2, 3]], [[10, 1, 2, -1], [10, 2, 3, 1]]])\n    check('same key changed value', solve([[[10, 1, 2]], [[10, 1, 3]]]), [[[10, 1, 3]], [[10, 1, 2, -1], [10, 1, 3, 1]]])\n    check('same value moved', solve([[[10, 1, 2]], [[10, 2, 2]]]), [[[10, 2, 2]], [[10, 1, 2, -1], [10, 2, 2, 1]]])\n    check('insert new identity', solve([[[10, 1, 2]], [[11, 1, 3]]]), [[[10, 1, 2], [11, 1, 3]], [[11, 1, 3, 1]]])\n    check('identical upsert', solve([[[10, 1, 2]], [[10, 1, 2]]]), [[[10, 1, 2]], []])\n    check('two updates', solve([[[10, 1, 2]], [[10, 2, 3], [10, 3, 4]]]), [[[10, 3, 4]], [[10, 1, 2, -1], [10, 2, 3, 1], [10, 2, 3, -1], [10, 3, 4, 1]]])\n    check('empty table', solve([[], []]), [[], []])\nelif N == 3:\n    check('move key', solve([[[10, 1, 3]], [[10, 2, 4]]]), [[[10, 2, 4]], [[10, 1, 3, -1], [10, 2, 4, 1]]])\n    check('same key changed value', solve([[[10, 1, 3]], [[10, 1, 4]]]), [[[10, 1, 4]], [[10, 1, 3, -1], [10, 1, 4, 1]]])\n    check('same value moved', solve([[[10, 1, 3]], [[10, 2, 3]]]), [[[10, 2, 3]], [[10, 1, 3, -1], [10, 2, 3, 1]]])\n    check('insert new identity', solve([[[10, 1, 3]], [[11, 1, 4]]]), [[[10, 1, 3], [11, 1, 4]], [[11, 1, 4, 1]]])\n    check('identical upsert', solve([[[10, 1, 3]], [[10, 1, 3]]]), [[[10, 1, 3]], []])\n    check('two updates', solve([[[10, 1, 3]], [[10, 2, 4], [10, 3, 5]]]), [[[10, 3, 5]], [[10, 1, 3, -1], [10, 2, 4, 1], [10, 2, 4, -1], [10, 3, 5, 1]]])\n    check('empty table', solve([[], []]), [[], []])\nelif N == 4:\n    check('move key', solve([[[10, 1, 4]], [[10, 2, 5]]]), [[[10, 2, 5]], [[10, 1, 4, -1], [10, 2, 5, 1]]])\n    check('same key changed value', solve([[[10, 1, 4]], [[10, 1, 5]]]), [[[10, 1, 5]], [[10, 1, 4, -1], [10, 1, 5, 1]]])\n    check('same value moved', solve([[[10, 1, 4]], [[10, 2, 4]]]), [[[10, 2, 4]], [[10, 1, 4, -1], [10, 2, 4, 1]]])\n    check('insert new identity', solve([[[10, 1, 4]], [[11, 1, 5]]]), [[[10, 1, 4], [11, 1, 5]], [[11, 1, 5, 1]]])\n    check('identical upsert', solve([[[10, 1, 4]], [[10, 1, 4]]]), [[[10, 1, 4]], []])\n    check('two updates', solve([[[10, 1, 4]], [[10, 2, 5], [10, 3, 6]]]), [[[10, 3, 6]], [[10, 1, 4, -1], [10, 2, 5, 1], [10, 2, 5, -1], [10, 3, 6, 1]]])\n    check('empty table', solve([[], []]), [[], []])\nelif N == 5:\n    check('move key', solve([[[10, 1, 5]], [[10, 2, 6]]]), [[[10, 2, 6]], [[10, 1, 5, -1], [10, 2, 6, 1]]])\n    check('same key changed value', solve([[[10, 1, 5]], [[10, 1, 6]]]), [[[10, 1, 6]], [[10, 1, 5, -1], [10, 1, 6, 1]]])\n    check('same value moved', solve([[[10, 1, 5]], [[10, 2, 5]]]), [[[10, 2, 5]], [[10, 1, 5, -1], [10, 2, 5, 1]]])\n    check('insert new identity', solve([[[10, 1, 5]], [[11, 1, 6]]]), [[[10, 1, 5], [11, 1, 6]], [[11, 1, 6, 1]]])\n    check('identical upsert', solve([[[10, 1, 5]], [[10, 1, 5]]]), [[[10, 1, 5]], []])\n    check('two updates', solve([[[10, 1, 5]], [[10, 2, 6], [10, 3, 7]]]), [[[10, 3, 7]], [[10, 1, 5, -1], [10, 2, 6, 1], [10, 2, 6, -1], [10, 3, 7, 1]]])\n    check('empty table', solve([[], []]), [[], []])\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"fixed":{"sha256":"6ec85e0927649c58478e8cc1402bee0b2bfec36ed10bf78311d0a77c2b1bfc2f","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(d):\n    try:\n        initial,updates=d\n        state={ident:[key,value] for ident,key,value in initial}\n        out=[]\n        for ident,key,value in updates:\n            previous=state.get(ident)\n            if previous==[key,value]: continue\n            if previous is not None: out.append([ident,previous[0],previous[1],-1])\n            state[ident]=[key,value]\n            out.append([ident,key,value,1])\n        return [sorted([[i,k,v] for i,(k,v) in state.items()]),out]\n    except (IndexError, KeyError, ValueError, StopIteration) as exc:\n        return {\"representation_error\": type(exc).__name__}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nif N == 1:\n    check('move key', solve([[[10, 1, 1]], [[10, 2, 2]]]), [[[10, 2, 2]], [[10, 1, 1, -1], [10, 2, 2, 1]]])\n    check('same key changed value', solve([[[10, 1, 1]], [[10, 1, 2]]]), [[[10, 1, 2]], [[10, 1, 1, -1], [10, 1, 2, 1]]])\n    check('same value moved', solve([[[10, 1, 1]], [[10, 2, 1]]]), [[[10, 2, 1]], [[10, 1, 1, -1], [10, 2, 1, 1]]])\n    check('insert new identity', solve([[[10, 1, 1]], [[11, 1, 2]]]), [[[10, 1, 1], [11, 1, 2]], [[11, 1, 2, 1]]])\n    check('identical upsert', solve([[[10, 1, 1]], [[10, 1, 1]]]), [[[10, 1, 1]], []])\n    check('two updates', solve([[[10, 1, 1]], [[10, 2, 2], [10, 3, 3]]]), [[[10, 3, 3]], [[10, 1, 1, -1], [10, 2, 2, 1], [10, 2, 2, -1], [10, 3, 3, 1]]])\n    check('empty table', solve([[], []]), [[], []])\nelif N == 2:\n    check('move key', solve([[[10, 1, 2]], [[10, 2, 3]]]), [[[10, 2, 3]], [[10, 1, 2, -1], [10, 2, 3, 1]]])\n    check('same key changed value', solve([[[10, 1, 2]], [[10, 1, 3]]]), [[[10, 1, 3]], [[10, 1, 2, -1], [10, 1, 3, 1]]])\n    check('same value moved', solve([[[10, 1, 2]], [[10, 2, 2]]]), [[[10, 2, 2]], [[10, 1, 2, -1], [10, 2, 2, 1]]])\n    check('insert new identity', solve([[[10, 1, 2]], [[11, 1, 3]]]), [[[10, 1, 2], [11, 1, 3]], [[11, 1, 3, 1]]])\n    check('identical upsert', solve([[[10, 1, 2]], [[10, 1, 2]]]), [[[10, 1, 2]], []])\n    check('two updates', solve([[[10, 1, 2]], [[10, 2, 3], [10, 3, 4]]]), [[[10, 3, 4]], [[10, 1, 2, -1], [10, 2, 3, 1], [10, 2, 3, -1], [10, 3, 4, 1]]])\n    check('empty table', solve([[], []]), [[], []])\nelif N == 3:\n    check('move key', solve([[[10, 1, 3]], [[10, 2, 4]]]), [[[10, 2, 4]], [[10, 1, 3, -1], [10, 2, 4, 1]]])\n    check('same key changed value', solve([[[10, 1, 3]], [[10, 1, 4]]]), [[[10, 1, 4]], [[10, 1, 3, -1], [10, 1, 4, 1]]])\n    check('same value moved', solve([[[10, 1, 3]], [[10, 2, 3]]]), [[[10, 2, 3]], [[10, 1, 3, -1], [10, 2, 3, 1]]])\n    check('insert new identity', solve([[[10, 1, 3]], [[11, 1, 4]]]), [[[10, 1, 3], [11, 1, 4]], [[11, 1, 4, 1]]])\n    check('identical upsert', solve([[[10, 1, 3]], [[10, 1, 3]]]), [[[10, 1, 3]], []])\n    check('two updates', solve([[[10, 1, 3]], [[10, 2, 4], [10, 3, 5]]]), [[[10, 3, 5]], [[10, 1, 3, -1], [10, 2, 4, 1], [10, 2, 4, -1], [10, 3, 5, 1]]])\n    check('empty table', solve([[], []]), [[], []])\nelif N == 4:\n    check('move key', solve([[[10, 1, 4]], [[10, 2, 5]]]), [[[10, 2, 5]], [[10, 1, 4, -1], [10, 2, 5, 1]]])\n    check('same key changed value', solve([[[10, 1, 4]], [[10, 1, 5]]]), [[[10, 1, 5]], [[10, 1, 4, -1], [10, 1, 5, 1]]])\n    check('same value moved', solve([[[10, 1, 4]], [[10, 2, 4]]]), [[[10, 2, 4]], [[10, 1, 4, -1], [10, 2, 4, 1]]])\n    check('insert new identity', solve([[[10, 1, 4]], [[11, 1, 5]]]), [[[10, 1, 4], [11, 1, 5]], [[11, 1, 5, 1]]])\n    check('identical upsert', solve([[[10, 1, 4]], [[10, 1, 4]]]), [[[10, 1, 4]], []])\n    check('two updates', solve([[[10, 1, 4]], [[10, 2, 5], [10, 3, 6]]]), [[[10, 3, 6]], [[10, 1, 4, -1], [10, 2, 5, 1], [10, 2, 5, -1], [10, 3, 6, 1]]])\n    check('empty table', solve([[], []]), [[], []])\nelif N == 5:\n    check('move key', solve([[[10, 1, 5]], [[10, 2, 6]]]), [[[10, 2, 6]], [[10, 1, 5, -1], [10, 2, 6, 1]]])\n    check('same key changed value', solve([[[10, 1, 5]], [[10, 1, 6]]]), [[[10, 1, 6]], [[10, 1, 5, -1], [10, 1, 6, 1]]])\n    check('same value moved', solve([[[10, 1, 5]], [[10, 2, 5]]]), [[[10, 2, 5]], [[10, 1, 5, -1], [10, 2, 5, 1]]])\n    check('insert new identity', solve([[[10, 1, 5]], [[11, 1, 6]]]), [[[10, 1, 5], [11, 1, 6]], [[11, 1, 6, 1]]])\n    check('identical upsert', solve([[[10, 1, 5]], [[10, 1, 5]]]), [[[10, 1, 5]], []])\n    check('two updates', solve([[[10, 1, 5]], [[10, 2, 6], [10, 3, 7]]]), [[[10, 3, 7]], [[10, 1, 5, -1], [10, 2, 6, 1], [10, 2, 6, -1], [10, 3, 7, 1]]])\n    check('empty table', solve([[], []]), [[], []])\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"}},"limitations":"Offline stipulated semantics over valid small inputs; no performance, concurrency, or production-engine conformance claim. 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.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"s3-data-systems-key-changing-upsert-state-update","generated_at":"2026-09-29T14:44:14.944747+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"A bounded deterministic data engine model makes representation and changelog faults reproducible.","repair":"Preserve the stated physical representation and operation order: Maintain an identity-indexed keyed table while applying [id,newkey,newvalue] upserts. A moved identity retracts its old key/value before adding the new row. Identical upserts emit no change. State and emitted changelog preserve identity distinctions.","root_cause":"key-changing-upsert: A moved row emits changes without updating identity state.","sha256":"a240c2e88167ef036064eda3c9697c77e694dd450336626cf34c8a8c936dbdfe","title":"A moved row emits changes without updating identity state · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":43.561,"exit_code":1,"observations":[{"actual":[[[10,2,1]],[[10,1,1,-1],[10,2,2,1]]],"check":"move key","expected":[[[10,2,2]],[[10,1,1,-1],[10,2,2,1]]],"passed":false},{"actual":[[[10,1,1]],[[10,1,1,-1],[10,1,2,1]]],"check":"same key changed value","expected":[[[10,1,2]],[[10,1,1,-1],[10,1,2,1]]],"passed":false},{"actual":[[[10,2,1]],[[10,1,1,-1],[10,2,1,1]]],"check":"same value moved","expected":[[[10,2,1]],[[10,1,1,-1],[10,2,1,1]]],"passed":true},{"actual":[[[10,1,1],[11,1,2]],[[11,1,2,1]]],"check":"insert new identity","expected":[[[10,1,1],[11,1,2]],[[11,1,2,1]]],"passed":true},{"actual":[[[10,1,1]],[]],"check":"identical upsert","expected":[[[10,1,1]],[]],"passed":true},{"actual":[[[10,3,1]],[[10,1,1,-1],[10,2,2,1],[10,2,1,-1],[10,3,3,1]]],"check":"two updates","expected":[[[10,3,3]],[[10,1,1,-1],[10,2,2,1],[10,2,2,-1],[10,3,3,1]]],"passed":false},{"actual":[[],[]],"check":"empty table","expected":[[],[]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"move key\", \"actual\": [[[10, 2, 1]], [[10, 1, 1, -1], [10, 2, 2, 1]]], \"expected\": [[[10, 2, 2]], [[10, 1, 1, -1], [10, 2, 2, 1]]], \"passed\": false}, {\"check\": \"same key changed value\", \"actual\": [[[10, 1, 1]], [[10, 1, 1, -1], [10, 1, 2, 1]]], \"expected\": [[[10, 1, 2]], [[10, 1, 1, -1], [10, 1, 2, 1]]], \"passed\": false}, {\"check\": \"same value moved\", \"actual\": [[[10, 2, 1]], [[10, 1, 1, -1], [10, 2, 1, 1]]], \"expected\": [[[10, 2, 1]], [[10, 1, 1, -1], [10, 2, 1, 1]]], \"passed\": true}, {\"check\": \"insert new identity\", \"actual\": [[[10, 1, 1], [11, 1, 2]], [[11, 1, 2, 1]]], \"expected\": [[[10, 1, 1], [11, 1, 2]], [[11, 1, 2, 1]]], \"passed\": true}, {\"check\": \"identical upsert\", \"actual\": [[[10, 1, 1]], []], \"expected\": [[[10, 1, 1]], []], \"passed\": true}, {\"check\": \"two updates\", \"actual\": [[[10, 3, 1]], [[10, 1, 1, -1], [10, 2, 2, 1], [10, 2, 1, -1], [10, 3, 3, 1]]], \"expected\": [[[10, 3, 3]], [[10, 1, 1, -1], [10, 2, 2, 1], [10, 2, 2, -1], [10, 3, 3, 1]]], \"passed\": false}, {\"check\": \"empty table\", \"actual\": [[], []], \"expected\": [[], []], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":51.254,"exit_code":1,"observations":[{"actual":[[[10,1,1]],[[10,1,1,-1],[10,2,2,1]]],"check":"move key","expected":[[[10,2,2]],[[10,1,1,-1],[10,2,2,1]]],"passed":false},{"actual":[[[10,1,1]],[[10,1,1,-1],[10,1,2,1]]],"check":"same key changed value","expected":[[[10,1,2]],[[10,1,1,-1],[10,1,2,1]]],"passed":false},{"actual":[[[10,1,1]],[[10,1,1,-1],[10,2,1,1]]],"check":"same value moved","expected":[[[10,2,1]],[[10,1,1,-1],[10,2,1,1]]],"passed":false},{"actual":[[[10,1,1],[11,1,2]],[[11,1,2,1]]],"check":"insert new identity","expected":[[[10,1,1],[11,1,2]],[[11,1,2,1]]],"passed":true},{"actual":[[[10,1,1]],[]],"check":"identical upsert","expected":[[[10,1,1]],[]],"passed":true},{"actual":[[[10,1,1]],[[10,1,1,-1],[10,2,2,1],[10,1,1,-1],[10,3,3,1]]],"check":"two updates","expected":[[[10,3,3]],[[10,1,1,-1],[10,2,2,1],[10,2,2,-1],[10,3,3,1]]],"passed":false},{"actual":[[],[]],"check":"empty table","expected":[[],[]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"move key\", \"actual\": [[[10, 1, 1]], [[10, 1, 1, -1], [10, 2, 2, 1]]], \"expected\": [[[10, 2, 2]], [[10, 1, 1, -1], [10, 2, 2, 1]]], \"passed\": false}, {\"check\": \"same key changed value\", \"actual\": [[[10, 1, 1]], [[10, 1, 1, -1], [10, 1, 2, 1]]], \"expected\": [[[10, 1, 2]], [[10, 1, 1, -1], [10, 1, 2, 1]]], \"passed\": false}, {\"check\": \"same value moved\", \"actual\": [[[10, 1, 1]], [[10, 1, 1, -1], [10, 2, 1, 1]]], \"expected\": [[[10, 2, 1]], [[10, 1, 1, -1], [10, 2, 1, 1]]], \"passed\": false}, {\"check\": \"insert new identity\", \"actual\": [[[10, 1, 1], [11, 1, 2]], [[11, 1, 2, 1]]], \"expected\": [[[10, 1, 1], [11, 1, 2]], [[11, 1, 2, 1]]], \"passed\": true}, {\"check\": \"identical upsert\", \"actual\": [[[10, 1, 1]], []], \"expected\": [[[10, 1, 1]], []], \"passed\": true}, {\"check\": \"two updates\", \"actual\": [[[10, 1, 1]], [[10, 1, 1, -1], [10, 2, 2, 1], [10, 1, 1, -1], [10, 3, 3, 1]]], \"expected\": [[[10, 3, 3]], [[10, 1, 1, -1], [10, 2, 2, 1], [10, 2, 2, -1], [10, 3, 3, 1]]], \"passed\": false}, {\"check\": \"empty table\", \"actual\": [[], []], \"expected\": [[], []], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":42.326,"exit_code":0,"observations":[{"actual":[[[10,2,2]],[[10,1,1,-1],[10,2,2,1]]],"check":"move key","expected":[[[10,2,2]],[[10,1,1,-1],[10,2,2,1]]],"passed":true},{"actual":[[[10,1,2]],[[10,1,1,-1],[10,1,2,1]]],"check":"same key changed value","expected":[[[10,1,2]],[[10,1,1,-1],[10,1,2,1]]],"passed":true},{"actual":[[[10,2,1]],[[10,1,1,-1],[10,2,1,1]]],"check":"same value moved","expected":[[[10,2,1]],[[10,1,1,-1],[10,2,1,1]]],"passed":true},{"actual":[[[10,1,1],[11,1,2]],[[11,1,2,1]]],"check":"insert new identity","expected":[[[10,1,1],[11,1,2]],[[11,1,2,1]]],"passed":true},{"actual":[[[10,1,1]],[]],"check":"identical upsert","expected":[[[10,1,1]],[]],"passed":true},{"actual":[[[10,3,3]],[[10,1,1,-1],[10,2,2,1],[10,2,2,-1],[10,3,3,1]]],"check":"two updates","expected":[[[10,3,3]],[[10,1,1,-1],[10,2,2,1],[10,2,2,-1],[10,3,3,1]]],"passed":true},{"actual":[[],[]],"check":"empty table","expected":[[],[]],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"move key\", \"actual\": [[[10, 2, 2]], [[10, 1, 1, -1], [10, 2, 2, 1]]], \"expected\": [[[10, 2, 2]], [[10, 1, 1, -1], [10, 2, 2, 1]]], \"passed\": true}, {\"check\": \"same key changed value\", \"actual\": [[[10, 1, 2]], [[10, 1, 1, -1], [10, 1, 2, 1]]], \"expected\": [[[10, 1, 2]], [[10, 1, 1, -1], [10, 1, 2, 1]]], \"passed\": true}, {\"check\": \"same value moved\", \"actual\": [[[10, 2, 1]], [[10, 1, 1, -1], [10, 2, 1, 1]]], \"expected\": [[[10, 2, 1]], [[10, 1, 1, -1], [10, 2, 1, 1]]], \"passed\": true}, {\"check\": \"insert new identity\", \"actual\": [[[10, 1, 1], [11, 1, 2]], [[11, 1, 2, 1]]], \"expected\": [[[10, 1, 1], [11, 1, 2]], [[11, 1, 2, 1]]], \"passed\": true}, {\"check\": \"identical upsert\", \"actual\": [[[10, 1, 1]], []], \"expected\": [[[10, 1, 1]], []], \"passed\": true}, {\"check\": \"two updates\", \"actual\": [[[10, 3, 3]], [[10, 1, 1, -1], [10, 2, 2, 1], [10, 2, 2, -1], [10, 3, 3, 1]]], \"expected\": [[[10, 3, 3]], [[10, 1, 1, -1], [10, 2, 2, 1], [10, 2, 2, -1], [10, 3, 3, 1]]], \"passed\": true}, {\"check\": \"empty table\", \"actual\": [[], []], \"expected\": [[], []], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}