{"abstract":"Experiments never conclude after the last planned analysis.","category":"Experiment statistics","checks":8,"contract":"Looks beyond len(boundaries) are ignored. At look i: stop for efficacy if |z| >= boundaries[i]; else before the final planned look stop for futility if z < futility[i]; at the final planned look without efficacy return null. If data ends earlier return [continue, last look index or -1]. Return [decision, look index].","evaluation_group":"w2-experiment-statistics-group-sequential","failed_approach":"Declaring null only for positive final statistics leaves negative ones running.","family":"w2-experiment-statistics-group-sequential-final-look-null","id":"FA-74471","implementations":{"attempt":{"sha256":"43fa4e716036d1254dc08abb5880433e65964cd17345ce64ebf61576c119134b","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(z_values, boundaries, futility):\n    planned = len(boundaries)\n    for i, z in enumerate(z_values[:planned]):\n        if abs(z) >= boundaries[i]:\n            return ['efficacy', i]\n        if i < planned - 1 and z < futility[i]:\n            return ['futility', i]\n        if i == planned - 1 and z > 0:\n            return ['null', i]\n    return ['continue', len(z_values[:planned]) - 1]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('efficacy exactly at the boundary',\n   [[1.0, 2.96], [4.33, 2.96, 2.36], [-1.0, -1.0, -1.0]],\n   ['efficacy', 1]),\n  ('negative effect crossing boundary stops', [[-4.5], [4.33, 2.96], [0.0, 0.0]], ['efficacy', 0]),\n  ('futility is not applied at the final look', [[0.5, -1.2], [2.8, 1.98], [0.0, 0.0]], ['null', 1]),\n  ('early look uses its own boundary', [[2.5], [4.33, 2.5], [-1.0, -1.0]], ['continue', 0]),\n  ('continuing reports last look', [[0.5, 0.7], [4.33, 2.96, 2.36], [0.0, 0.0, 0.0]], ['continue', 1]),\n  ('final look without efficacy is null',\n   [[0.1, 0.2, 1.9], [3.47, 2.45, 2.0], [-1.0, -1.0, -1.0]],\n   ['null', 2]),\n  ('interim look sample 1',\n   [[2.41, 2.41, 2.01, 1.98], [2.41, 2.41, 2.41], [0.0, -1.0, -1.0]],\n   ['efficacy', 0]),\n  ('interim look sample 2', [[4.5, -2.5, 0.0], [2.8, 1.98], [0.0, -1.0]], ['efficacy', 0])],\n [('negative effect crossing boundary stops', [[-4.5], [4.33, 2.96], [0.0, 0.0]], ['efficacy', 0]),\n  ('futility is not applied at the final look', [[0.5, -1.2], [2.8, 1.98], [0.0, 0.0]], ['null', 1]),\n  ('early look uses its own boundary', [[2.5], [4.33, 2.5], [-1.0, -1.0]], ['continue', 0]),\n  ('continuing reports last look', [[0.5, 0.7], [4.33, 2.96, 2.36], [0.0, 0.0, 0.0]], ['continue', 1]),\n  ('no looks yet', [[], [2.8, 1.98], [0.0, 0.0]], ['continue', -1]),\n  ('final look without efficacy is null',\n   [[0.1, 0.2, 1.9], [3.47, 2.45, 2.0], [-1.0, -1.0, -1.0]],\n   ['null', 2]),\n  ('interim look sample 6', [[0.5], [3.47, 2.45, 2.0], [-1.0, -1.0, 0.5]], ['continue', 0]),\n  ('interim look sample 32', [[2.41, 0.0, 0.5], [2.8, 1.98], [-1.0, -1.0]], ['null', 1])],\n [('futility is not applied at the final look', [[0.5, -1.2], [2.8, 1.98], [0.0, 0.0]], ['null', 1]),\n  ('early look uses its own boundary', [[2.5], [4.33, 2.5], [-1.0, -1.0]], ['continue', 0]),\n  ('continuing reports last look', [[0.5, 0.7], [4.33, 2.96, 2.36], [0.0, 0.0, 0.0]], ['continue', 1]),\n  ('no looks yet', [[], [2.8, 1.98], [0.0, 0.0]], ['continue', -1]),\n  ('extra looks are ignored', [[0.3, 0.2, 5.0], [2.8, 1.98], [-1.0, -1.0]], ['null', 1]),\n  ('interim look sample 11', [[0.5, 0.0], [2.8, 1.98], [0.0, -1.0]], ['null', 1]),\n  ('interim look sample 12', [[0.5, -0.5, -1.5], [3.47, 2.45, 2.0], [0.0, 0.5, 0.0]], ['futility', 1]),\n  ('interim look sample 13', [[1.98, 2.0, 2.36], [3.47, 2.45, 2.0], [0.5, 0.0, -1.0]], ['efficacy', 2])],\n [('futility is not applied at the final look', [[0.5, -1.2], [2.8, 1.98], [0.0, 0.0]], ['null', 1]),\n  ('early look uses its own boundary', [[2.5], [4.33, 2.5], [-1.0, -1.0]], ['continue', 0]),\n  ('continuing reports last look', [[0.5, 0.7], [4.33, 2.96, 2.36], [0.0, 0.0, 0.0]], ['continue', 1]),\n  ('no looks yet', [[], [2.8, 1.98], [0.0, 0.0]], ['continue', -1]),\n  ('extra looks are ignored', [[0.3, 0.2, 5.0], [2.8, 1.98], [-1.0, -1.0]], ['null', 1]),\n  ('futility at z exactly at bound continues',\n   [[0.0, 3.0], [2.8, 1.98, 1.5], [0.0, 0.0, 0.0]],\n   ['efficacy', 1]),\n  ('interim look sample 8', [[1.98, 2.41, -0.5], [3.47, 2.45, 2.0], [-1.0, -1.0, 0.5]], ['null', 2]),\n  ('interim look sample 16',\n   [[2.0, 2.36], [4.33, 2.96, 2.36, 2.01], [0.5, 0.5, -1.0, 0.0]],\n   ['continue', 1])],\n [('futility is not applied at the final look', [[0.5, -1.2], [2.8, 1.98], [0.0, 0.0]], ['null', 1]),\n  ('continuing reports last look', [[0.5, 0.7], [4.33, 2.96, 2.36], [0.0, 0.0, 0.0]], ['continue', 1]),\n  ('no looks yet', [[], [2.8, 1.98], [0.0, 0.0]], ['continue', -1]),\n  ('extra looks are ignored', [[0.3, 0.2, 5.0], [2.8, 1.98], [-1.0, -1.0]], ['null', 1]),\n  ('futility at z exactly at bound continues',\n   [[0.0, 3.0], [2.8, 1.98, 1.5], [0.0, 0.0, 0.0]],\n   ['efficacy', 1]),\n  ('final look without efficacy is null',\n   [[0.1, 0.2, 1.9], [3.47, 2.45, 2.0], [-1.0, -1.0, -1.0]],\n   ['null', 2]),\n  ('interim look sample 21', [[-1.5], [3.47, 2.45, 2.0], [-1.0, 0.5, 0.5]], ['futility', 0]),\n  ('interim look sample 22', [[-2.5, -0.5], [2.8, 1.98], [0.5, -1.0]], ['futility', 0])]]\nfor label, args, expected in fixtures[N - 1]:\n    check(label, solve(*args), expected)\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":"0561e089450563cd716fe55fb9ab34b4cee1c5b596ff0ae55ae6a6f6dc54a64a","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(z_values, boundaries, futility):\n    planned = len(boundaries)\n    for i, z in enumerate(z_values[:planned]):\n        if abs(z) >= boundaries[i]:\n            return ['efficacy', i]\n        if i < planned - 1 and z < futility[i]:\n            return ['futility', i]\n    return ['continue', len(z_values[:planned]) - 1]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('efficacy exactly at the boundary',\n   [[1.0, 2.96], [4.33, 2.96, 2.36], [-1.0, -1.0, -1.0]],\n   ['efficacy', 1]),\n  ('negative effect crossing boundary stops', [[-4.5], [4.33, 2.96], [0.0, 0.0]], ['efficacy', 0]),\n  ('futility is not applied at the final look', [[0.5, -1.2], [2.8, 1.98], [0.0, 0.0]], ['null', 1]),\n  ('early look uses its own boundary', [[2.5], [4.33, 2.5], [-1.0, -1.0]], ['continue', 0]),\n  ('continuing reports last look', [[0.5, 0.7], [4.33, 2.96, 2.36], [0.0, 0.0, 0.0]], ['continue', 1]),\n  ('final look without efficacy is null',\n   [[0.1, 0.2, 1.9], [3.47, 2.45, 2.0], [-1.0, -1.0, -1.0]],\n   ['null', 2]),\n  ('interim look sample 1',\n   [[2.41, 2.41, 2.01, 1.98], [2.41, 2.41, 2.41], [0.0, -1.0, -1.0]],\n   ['efficacy', 0]),\n  ('interim look sample 2', [[4.5, -2.5, 0.0], [2.8, 1.98], [0.0, -1.0]], ['efficacy', 0])],\n [('negative effect crossing boundary stops', [[-4.5], [4.33, 2.96], [0.0, 0.0]], ['efficacy', 0]),\n  ('futility is not applied at the final look', [[0.5, -1.2], [2.8, 1.98], [0.0, 0.0]], ['null', 1]),\n  ('early look uses its own boundary', [[2.5], [4.33, 2.5], [-1.0, -1.0]], ['continue', 0]),\n  ('continuing reports last look', [[0.5, 0.7], [4.33, 2.96, 2.36], [0.0, 0.0, 0.0]], ['continue', 1]),\n  ('no looks yet', [[], [2.8, 1.98], [0.0, 0.0]], ['continue', -1]),\n  ('final look without efficacy is null',\n   [[0.1, 0.2, 1.9], [3.47, 2.45, 2.0], [-1.0, -1.0, -1.0]],\n   ['null', 2]),\n  ('interim look sample 6', [[0.5], [3.47, 2.45, 2.0], [-1.0, -1.0, 0.5]], ['continue', 0]),\n  ('interim look sample 32', [[2.41, 0.0, 0.5], [2.8, 1.98], [-1.0, -1.0]], ['null', 1])],\n [('futility is not applied at the final look', [[0.5, -1.2], [2.8, 1.98], [0.0, 0.0]], ['null', 1]),\n  ('early look uses its own boundary', [[2.5], [4.33, 2.5], [-1.0, -1.0]], ['continue', 0]),\n  ('continuing reports last look', [[0.5, 0.7], [4.33, 2.96, 2.36], [0.0, 0.0, 0.0]], ['continue', 1]),\n  ('no looks yet', [[], [2.8, 1.98], [0.0, 0.0]], ['continue', -1]),\n  ('extra looks are ignored', [[0.3, 0.2, 5.0], [2.8, 1.98], [-1.0, -1.0]], ['null', 1]),\n  ('interim look sample 11', [[0.5, 0.0], [2.8, 1.98], [0.0, -1.0]], ['null', 1]),\n  ('interim look sample 12', [[0.5, -0.5, -1.5], [3.47, 2.45, 2.0], [0.0, 0.5, 0.0]], ['futility', 1]),\n  ('interim look sample 13', [[1.98, 2.0, 2.36], [3.47, 2.45, 2.0], [0.5, 0.0, -1.0]], ['efficacy', 2])],\n [('futility is not applied at the final look', [[0.5, -1.2], [2.8, 1.98], [0.0, 0.0]], ['null', 1]),\n  ('early look uses its own boundary', [[2.5], [4.33, 2.5], [-1.0, -1.0]], ['continue', 0]),\n  ('continuing reports last look', [[0.5, 0.7], [4.33, 2.96, 2.36], [0.0, 0.0, 0.0]], ['continue', 1]),\n  ('no looks yet', [[], [2.8, 1.98], [0.0, 0.0]], ['continue', -1]),\n  ('extra looks are ignored', [[0.3, 0.2, 5.0], [2.8, 1.98], [-1.0, -1.0]], ['null', 1]),\n  ('futility at z exactly at bound continues',\n   [[0.0, 3.0], [2.8, 1.98, 1.5], [0.0, 0.0, 0.0]],\n   ['efficacy', 1]),\n  ('interim look sample 8', [[1.98, 2.41, -0.5], [3.47, 2.45, 2.0], [-1.0, -1.0, 0.5]], ['null', 2]),\n  ('interim look sample 16',\n   [[2.0, 2.36], [4.33, 2.96, 2.36, 2.01], [0.5, 0.5, -1.0, 0.0]],\n   ['continue', 1])],\n [('futility is not applied at the final look', [[0.5, -1.2], [2.8, 1.98], [0.0, 0.0]], ['null', 1]),\n  ('continuing reports last look', [[0.5, 0.7], [4.33, 2.96, 2.36], [0.0, 0.0, 0.0]], ['continue', 1]),\n  ('no looks yet', [[], [2.8, 1.98], [0.0, 0.0]], ['continue', -1]),\n  ('extra looks are ignored', [[0.3, 0.2, 5.0], [2.8, 1.98], [-1.0, -1.0]], ['null', 1]),\n  ('futility at z exactly at bound continues',\n   [[0.0, 3.0], [2.8, 1.98, 1.5], [0.0, 0.0, 0.0]],\n   ['efficacy', 1]),\n  ('final look without efficacy is null',\n   [[0.1, 0.2, 1.9], [3.47, 2.45, 2.0], [-1.0, -1.0, -1.0]],\n   ['null', 2]),\n  ('interim look sample 21', [[-1.5], [3.47, 2.45, 2.0], [-1.0, 0.5, 0.5]], ['futility', 0]),\n  ('interim look sample 22', [[-2.5, -0.5], [2.8, 1.98], [0.5, -1.0]], ['futility', 0])]]\nfor label, args, expected in fixtures[N - 1]:\n    check(label, solve(*args), expected)\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":"b8b6d40704de3f2999ae832c6a105078d6d7a2af66d04e08178be000d0b7255b","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(z_values, boundaries, futility):\n    planned = len(boundaries)\n    for i, z in enumerate(z_values[:planned]):\n        if abs(z) >= boundaries[i]:\n            return ['efficacy', i]\n        if i < planned - 1 and z < futility[i]:\n            return ['futility', i]\n        if i == planned - 1:\n            return ['null', i]\n    return ['continue', len(z_values[:planned]) - 1]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('efficacy exactly at the boundary',\n   [[1.0, 2.96], [4.33, 2.96, 2.36], [-1.0, -1.0, -1.0]],\n   ['efficacy', 1]),\n  ('negative effect crossing boundary stops', [[-4.5], [4.33, 2.96], [0.0, 0.0]], ['efficacy', 0]),\n  ('futility is not applied at the final look', [[0.5, -1.2], [2.8, 1.98], [0.0, 0.0]], ['null', 1]),\n  ('early look uses its own boundary', [[2.5], [4.33, 2.5], [-1.0, -1.0]], ['continue', 0]),\n  ('continuing reports last look', [[0.5, 0.7], [4.33, 2.96, 2.36], [0.0, 0.0, 0.0]], ['continue', 1]),\n  ('final look without efficacy is null',\n   [[0.1, 0.2, 1.9], [3.47, 2.45, 2.0], [-1.0, -1.0, -1.0]],\n   ['null', 2]),\n  ('interim look sample 1',\n   [[2.41, 2.41, 2.01, 1.98], [2.41, 2.41, 2.41], [0.0, -1.0, -1.0]],\n   ['efficacy', 0]),\n  ('interim look sample 2', [[4.5, -2.5, 0.0], [2.8, 1.98], [0.0, -1.0]], ['efficacy', 0])],\n [('negative effect crossing boundary stops', [[-4.5], [4.33, 2.96], [0.0, 0.0]], ['efficacy', 0]),\n  ('futility is not applied at the final look', [[0.5, -1.2], [2.8, 1.98], [0.0, 0.0]], ['null', 1]),\n  ('early look uses its own boundary', [[2.5], [4.33, 2.5], [-1.0, -1.0]], ['continue', 0]),\n  ('continuing reports last look', [[0.5, 0.7], [4.33, 2.96, 2.36], [0.0, 0.0, 0.0]], ['continue', 1]),\n  ('no looks yet', [[], [2.8, 1.98], [0.0, 0.0]], ['continue', -1]),\n  ('final look without efficacy is null',\n   [[0.1, 0.2, 1.9], [3.47, 2.45, 2.0], [-1.0, -1.0, -1.0]],\n   ['null', 2]),\n  ('interim look sample 6', [[0.5], [3.47, 2.45, 2.0], [-1.0, -1.0, 0.5]], ['continue', 0]),\n  ('interim look sample 32', [[2.41, 0.0, 0.5], [2.8, 1.98], [-1.0, -1.0]], ['null', 1])],\n [('futility is not applied at the final look', [[0.5, -1.2], [2.8, 1.98], [0.0, 0.0]], ['null', 1]),\n  ('early look uses its own boundary', [[2.5], [4.33, 2.5], [-1.0, -1.0]], ['continue', 0]),\n  ('continuing reports last look', [[0.5, 0.7], [4.33, 2.96, 2.36], [0.0, 0.0, 0.0]], ['continue', 1]),\n  ('no looks yet', [[], [2.8, 1.98], [0.0, 0.0]], ['continue', -1]),\n  ('extra looks are ignored', [[0.3, 0.2, 5.0], [2.8, 1.98], [-1.0, -1.0]], ['null', 1]),\n  ('interim look sample 11', [[0.5, 0.0], [2.8, 1.98], [0.0, -1.0]], ['null', 1]),\n  ('interim look sample 12', [[0.5, -0.5, -1.5], [3.47, 2.45, 2.0], [0.0, 0.5, 0.0]], ['futility', 1]),\n  ('interim look sample 13', [[1.98, 2.0, 2.36], [3.47, 2.45, 2.0], [0.5, 0.0, -1.0]], ['efficacy', 2])],\n [('futility is not applied at the final look', [[0.5, -1.2], [2.8, 1.98], [0.0, 0.0]], ['null', 1]),\n  ('early look uses its own boundary', [[2.5], [4.33, 2.5], [-1.0, -1.0]], ['continue', 0]),\n  ('continuing reports last look', [[0.5, 0.7], [4.33, 2.96, 2.36], [0.0, 0.0, 0.0]], ['continue', 1]),\n  ('no looks yet', [[], [2.8, 1.98], [0.0, 0.0]], ['continue', -1]),\n  ('extra looks are ignored', [[0.3, 0.2, 5.0], [2.8, 1.98], [-1.0, -1.0]], ['null', 1]),\n  ('futility at z exactly at bound continues',\n   [[0.0, 3.0], [2.8, 1.98, 1.5], [0.0, 0.0, 0.0]],\n   ['efficacy', 1]),\n  ('interim look sample 8', [[1.98, 2.41, -0.5], [3.47, 2.45, 2.0], [-1.0, -1.0, 0.5]], ['null', 2]),\n  ('interim look sample 16',\n   [[2.0, 2.36], [4.33, 2.96, 2.36, 2.01], [0.5, 0.5, -1.0, 0.0]],\n   ['continue', 1])],\n [('futility is not applied at the final look', [[0.5, -1.2], [2.8, 1.98], [0.0, 0.0]], ['null', 1]),\n  ('continuing reports last look', [[0.5, 0.7], [4.33, 2.96, 2.36], [0.0, 0.0, 0.0]], ['continue', 1]),\n  ('no looks yet', [[], [2.8, 1.98], [0.0, 0.0]], ['continue', -1]),\n  ('extra looks are ignored', [[0.3, 0.2, 5.0], [2.8, 1.98], [-1.0, -1.0]], ['null', 1]),\n  ('futility at z exactly at bound continues',\n   [[0.0, 3.0], [2.8, 1.98, 1.5], [0.0, 0.0, 0.0]],\n   ['efficacy', 1]),\n  ('final look without efficacy is null',\n   [[0.1, 0.2, 1.9], [3.47, 2.45, 2.0], [-1.0, -1.0, -1.0]],\n   ['null', 2]),\n  ('interim look sample 21', [[-1.5], [3.47, 2.45, 2.0], [-1.0, 0.5, 0.5]], ['futility', 0]),\n  ('interim look sample 22', [[-2.5, -0.5], [2.8, 1.98], [0.5, -1.0]], ['futility', 0])]]\nfor label, args, expected in fixtures[N - 1]:\n    check(label, solve(*args), expected)\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":"A deterministic toy experiment-analysis model with a stipulated contract; results are rounded and are not a substitute for a validated statistics package. 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":"w2-experiment-statistics-group-sequential-final-look-null","generated_at":"2026-09-29T14:48:57.188938+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Interim analyses control false positives only if the stopping rule is executed exactly.","repair":"Return null at the final planned look when efficacy is not reached.","root_cause":"The null decision at the final planned look is missing.","sha256":"67cdce62045a6f14fa9081d1663d7491d9b2375aa43ebadfc9bff6c27b2a748f","title":"Group sequential stopping rule: The final look without efficacy keeps the trial running · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":37.532,"exit_code":1,"observations":[{"actual":["efficacy",1],"check":"efficacy exactly at the boundary","expected":["efficacy",1],"passed":true},{"actual":["efficacy",0],"check":"negative effect crossing boundary stops","expected":["efficacy",0],"passed":true},{"actual":["continue",1],"check":"futility is not applied at the final look","expected":["null",1],"passed":false},{"actual":["continue",0],"check":"early look uses its own boundary","expected":["continue",0],"passed":true},{"actual":["continue",1],"check":"continuing reports last look","expected":["continue",1],"passed":true},{"actual":["null",2],"check":"final look without efficacy is null","expected":["null",2],"passed":true},{"actual":["efficacy",0],"check":"interim look sample 1","expected":["efficacy",0],"passed":true},{"actual":["efficacy",0],"check":"interim look sample 2","expected":["efficacy",0],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"efficacy exactly at the boundary\", \"actual\": [\"efficacy\", 1], \"expected\": [\"efficacy\", 1], \"passed\": true}, {\"check\": \"negative effect crossing boundary stops\", \"actual\": [\"efficacy\", 0], \"expected\": [\"efficacy\", 0], \"passed\": true}, {\"check\": \"futility is not applied at the final look\", \"actual\": [\"continue\", 1], \"expected\": [\"null\", 1], \"passed\": false}, {\"check\": \"early look uses its own boundary\", \"actual\": [\"continue\", 0], \"expected\": [\"continue\", 0], \"passed\": true}, {\"check\": \"continuing reports last look\", \"actual\": [\"continue\", 1], \"expected\": [\"continue\", 1], \"passed\": true}, {\"check\": \"final look without efficacy is null\", \"actual\": [\"null\", 2], \"expected\": [\"null\", 2], \"passed\": true}, {\"check\": \"interim look sample 1\", \"actual\": [\"efficacy\", 0], \"expected\": [\"efficacy\", 0], \"passed\": true}, {\"check\": \"interim look sample 2\", \"actual\": [\"efficacy\", 0], \"expected\": [\"efficacy\", 0], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.261,"exit_code":1,"observations":[{"actual":["efficacy",1],"check":"efficacy exactly at the boundary","expected":["efficacy",1],"passed":true},{"actual":["efficacy",0],"check":"negative effect crossing boundary stops","expected":["efficacy",0],"passed":true},{"actual":["continue",1],"check":"futility is not applied at the final look","expected":["null",1],"passed":false},{"actual":["continue",0],"check":"early look uses its own boundary","expected":["continue",0],"passed":true},{"actual":["continue",1],"check":"continuing reports last look","expected":["continue",1],"passed":true},{"actual":["continue",2],"check":"final look without efficacy is null","expected":["null",2],"passed":false},{"actual":["efficacy",0],"check":"interim look sample 1","expected":["efficacy",0],"passed":true},{"actual":["efficacy",0],"check":"interim look sample 2","expected":["efficacy",0],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"efficacy exactly at the boundary\", \"actual\": [\"efficacy\", 1], \"expected\": [\"efficacy\", 1], \"passed\": true}, {\"check\": \"negative effect crossing boundary stops\", \"actual\": [\"efficacy\", 0], \"expected\": [\"efficacy\", 0], \"passed\": true}, {\"check\": \"futility is not applied at the final look\", \"actual\": [\"continue\", 1], \"expected\": [\"null\", 1], \"passed\": false}, {\"check\": \"early look uses its own boundary\", \"actual\": [\"continue\", 0], \"expected\": [\"continue\", 0], \"passed\": true}, {\"check\": \"continuing reports last look\", \"actual\": [\"continue\", 1], \"expected\": [\"continue\", 1], \"passed\": true}, {\"check\": \"final look without efficacy is null\", \"actual\": [\"continue\", 2], \"expected\": [\"null\", 2], \"passed\": false}, {\"check\": \"interim look sample 1\", \"actual\": [\"efficacy\", 0], \"expected\": [\"efficacy\", 0], \"passed\": true}, {\"check\": \"interim look sample 2\", \"actual\": [\"efficacy\", 0], \"expected\": [\"efficacy\", 0], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":46.011,"exit_code":0,"observations":[{"actual":["efficacy",1],"check":"efficacy exactly at the boundary","expected":["efficacy",1],"passed":true},{"actual":["efficacy",0],"check":"negative effect crossing boundary stops","expected":["efficacy",0],"passed":true},{"actual":["null",1],"check":"futility is not applied at the final look","expected":["null",1],"passed":true},{"actual":["continue",0],"check":"early look uses its own boundary","expected":["continue",0],"passed":true},{"actual":["continue",1],"check":"continuing reports last look","expected":["continue",1],"passed":true},{"actual":["null",2],"check":"final look without efficacy is null","expected":["null",2],"passed":true},{"actual":["efficacy",0],"check":"interim look sample 1","expected":["efficacy",0],"passed":true},{"actual":["efficacy",0],"check":"interim look sample 2","expected":["efficacy",0],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"efficacy exactly at the boundary\", \"actual\": [\"efficacy\", 1], \"expected\": [\"efficacy\", 1], \"passed\": true}, {\"check\": \"negative effect crossing boundary stops\", \"actual\": [\"efficacy\", 0], \"expected\": [\"efficacy\", 0], \"passed\": true}, {\"check\": \"futility is not applied at the final look\", \"actual\": [\"null\", 1], \"expected\": [\"null\", 1], \"passed\": true}, {\"check\": \"early look uses its own boundary\", \"actual\": [\"continue\", 0], \"expected\": [\"continue\", 0], \"passed\": true}, {\"check\": \"continuing reports last look\", \"actual\": [\"continue\", 1], \"expected\": [\"continue\", 1], \"passed\": true}, {\"check\": \"final look without efficacy is null\", \"actual\": [\"null\", 2], \"expected\": [\"null\", 2], \"passed\": true}, {\"check\": \"interim look sample 1\", \"actual\": [\"efficacy\", 0], \"expected\": [\"efficacy\", 0], \"passed\": true}, {\"check\": \"interim look sample 2\", \"actual\": [\"efficacy\", 0], \"expected\": [\"efficacy\", 0], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}