{"abstract":"A flag deleted on the server keeps serving its last cached value.","category":"Feature flag rollout bucketing","checks":8,"contract":"Process events in order. [\"fetch\", t, payload] replaces the whole cache with payload, records t and clears kill switches; [\"kill\", t, flag] forces that flag to its default; [\"get\", t, flag, default] returns [default, killed] for killed flags, else [default, stale] if nothing was fetched or t - last fetch >= 30 seconds, else [default, missing] if the flag is not cached, else [value, cache]. Return the list of get results.","contract_signature":"events","evaluation_group":"w2-feature-flag-rollout-bucketing-cache-freshness","failed_approach":"Keeping the old cache when the payload is empty still resurrects deleted flags.","family":"w2-feature-flag-rollout-bucketing-cache-freshness-fetch-replaces-cache","id":"FA-74021","implementations":{"attempt":{"sha256":"317d43ee945e94f9bf3be83eabcfbfa95e946c9534c4763bcbf69bb91b55243a","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(events):\n    cache = {}\n    fetched_at = None\n    killed = set()\n    out = []\n    for ev in events:\n        kind, t = ev[0], ev[1]\n        if kind == 'fetch':\n            cache = dict(ev[2]) if ev[2] else cache\n            fetched_at = t\n            killed = set()\n        elif kind == 'kill':\n            killed.add(ev[2])\n        else:\n            flag, default = ev[2], ev[3]\n            if flag in killed:\n                out.append([default, 'killed'])\n            elif fetched_at is None or t - fetched_at >= 30:\n                out.append([default, 'stale'])\n            elif flag not in cache:\n                out.append([default, 'missing'])\n            else:\n                out.append([cache[flag], 'cache'])\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('value is stale at exactly the ttl',\n   [[['fetch', 0, {'a': True}], ['get', 30, 'a', False]]],\n   [[False, 'stale']]),\n  ('fractional age just under the ttl is fresh',\n   [[['fetch', 0, {'a': True}], ['get', 29.5, 'a', False]]],\n   [[True, 'cache']]),\n  ('refetch removes flags absent from payload',\n   [[['fetch', 0, {'a': True, 'b': 'x'}], ['fetch', 5, {'a': False}], ['get', 6, 'b', 'd']]],\n   [['d', 'missing']]),\n  ('empty payload clears the cache',\n   [[['fetch', 0, {'a': True}], ['fetch', 5, {}], ['get', 6, 'a', False]]],\n   [[False, 'missing']]),\n  ('refetch clears kill switches',\n   [[['fetch', 0, {'a': True}], ['kill', 1, 'a'], ['fetch', 2, {'a': True}], ['get', 3, 'a', False]]],\n   [[True, 'cache']]),\n  ('empty fetch refreshes the ttl clock',\n   [[['fetch', 0, {'a': 1}], ['fetch', 25, {}], ['get', 40, 'a', 0]]],\n   [[0, 'missing']]),\n  ('event stream sample 1',\n   [[['kill', 30, 'a'], ['fetch', 40, {'c': 3, 'b': False}], ['kill', 41, 'a']]],\n   []),\n  ('event stream sample 2',\n   [[['get', 0, 'a', False],\n     ['get', 30, 'b', 0],\n     ['get', 59.5, 'b', False],\n     ['fetch', 89.5, {}],\n     ['get', 99.5, 'a', 0],\n     ['get', 129.0, 'c', 'dflt'],\n     ['get', 129.0, 'c', 0]]],\n   [[False, 'stale'], [0, 'stale'], [False, 'stale'], [0, 'missing'], ['dflt', 'stale'], [0, 'stale']])],\n [('fractional age just under the ttl is fresh',\n   [[['fetch', 0, {'a': True}], ['get', 29.5, 'a', False]]],\n   [[True, 'cache']]),\n  ('refetch removes flags absent from payload',\n   [[['fetch', 0, {'a': True, 'b': 'x'}], ['fetch', 5, {'a': False}], ['get', 6, 'b', 'd']]],\n   [['d', 'missing']]),\n  ('empty payload clears the cache',\n   [[['fetch', 0, {'a': True}], ['fetch', 5, {}], ['get', 6, 'a', False]]],\n   [[False, 'missing']]),\n  ('refetch clears kill switches',\n   [[['fetch', 0, {'a': True}], ['kill', 1, 'a'], ['fetch', 2, {'a': True}], ['get', 3, 'a', False]]],\n   [[True, 'cache']]),\n  ('refetch clears a kill on an uncached flag',\n   [[['fetch', 0, {'a': True}], ['kill', 1, 'b'], ['fetch', 2, {'a': True}], ['get', 4, 'b', 0]]],\n   [[0, 'missing']]),\n  ('empty fetch refreshes the ttl clock',\n   [[['fetch', 0, {'a': 1}], ['fetch', 25, {}], ['get', 40, 'a', 0]]],\n   [[0, 'missing']]),\n  ('event stream sample 25',\n   [[['get', 29.5, 'a', 'dflt'],\n     ['fetch', 29.5, {'a': False, 'c': 'b'}],\n     ['fetch', 30.0, {'c': False, 'b': 'b'}],\n     ['fetch', 30.0, {}],\n     ['get', 30.5, 'b', 0]]],\n   [['dflt', 'stale'], [0, 'missing']]),\n  ('event stream sample 57',\n   [[['get', 1, 'a', 0],\n     ['get', 31, 'a', 'dflt'],\n     ['kill', 31.5, 'c'],\n     ['fetch', 32.5, {'c': False, 'b': True}],\n     ['get', 62.0, 'b', False],\n     ['fetch', 92.0, {}],\n     ['get', 97.0, 'c', 'dflt'],\n     ['get', 107.0, 'a', 0]]],\n   [[0, 'stale'], ['dflt', 'stale'], [True, 'cache'], ['dflt', 'missing'], [0, 'missing']])],\n [('refetch removes flags absent from payload',\n   [[['fetch', 0, {'a': True, 'b': 'x'}], ['fetch', 5, {'a': False}], ['get', 6, 'b', 'd']]],\n   [['d', 'missing']]),\n  ('empty payload clears the cache',\n   [[['fetch', 0, {'a': True}], ['fetch', 5, {}], ['get', 6, 'a', False]]],\n   [[False, 'missing']]),\n  ('refetch clears kill switches',\n   [[['fetch', 0, {'a': True}], ['kill', 1, 'a'], ['fetch', 2, {'a': True}], ['get', 3, 'a', False]]],\n   [[True, 'cache']]),\n  ('refetch clears a kill on an uncached flag',\n   [[['fetch', 0, {'a': True}], ['kill', 1, 'b'], ['fetch', 2, {'a': True}], ['get', 4, 'b', 0]]],\n   [[0, 'missing']]),\n  ('kill of a flag missing from the payload',\n   [[['fetch', 0, {'a': True}], ['kill', 1, 'b'], ['get', 2, 'b', 'd']]],\n   [['d', 'killed']]),\n  ('event stream sample 11',\n   [[['get', 10, 'a', 0], ['get', 11, 'c', 'dflt'], ['get', 11.5, 'c', False]]],\n   [[0, 'stale'], ['dflt', 'stale'], [False, 'stale']]),\n  ('event stream sample 20',\n   [[['fetch', 30, {'c': 'b', 'a': False}],\n     ['get', 40, 'b', 0],\n     ['fetch', 41, {'b': 'b', 'c': 'b'}],\n     ['get', 41, 'b', 'dflt'],\n     ['get', 41, 'c', 0],\n     ['kill', 42, 'c'],\n     ['get', 43, 'a', 0]]],\n   [[0, 'missing'], ['b', 'cache'], ['b', 'cache'], [0, 'missing']]),\n  ('event stream sample 58',\n   [[['fetch', 30, {'a': 3}],\n     ['kill', 30.5, 'b'],\n     ['get', 31.0, 'b', 0],\n     ['get', 32.0, 'c', 0],\n     ['fetch', 33.0, {}],\n     ['get', 38.0, 'a', 'dflt'],\n     ['kill', 68.0, 'c']]],\n   [[0, 'killed'], [0, 'missing'], ['dflt', 'missing']])],\n [('empty payload clears the cache',\n   [[['fetch', 0, {'a': True}], ['fetch', 5, {}], ['get', 6, 'a', False]]],\n   [[False, 'missing']]),\n  ('refetch clears kill switches',\n   [[['fetch', 0, {'a': True}], ['kill', 1, 'a'], ['fetch', 2, {'a': True}], ['get', 3, 'a', False]]],\n   [[True, 'cache']]),\n  ('refetch clears a kill on an uncached flag',\n   [[['fetch', 0, {'a': True}], ['kill', 1, 'b'], ['fetch', 2, {'a': True}], ['get', 4, 'b', 0]]],\n   [[0, 'missing']]),\n  ('kill of a flag missing from the payload',\n   [[['fetch', 0, {'a': True}], ['kill', 1, 'b'], ['get', 2, 'b', 'd']]],\n   [['d', 'killed']]),\n  ('killed flag beats staleness',\n   [[['fetch', 0, {'a': True}], ['kill', 1, 'a'], ['get', 40, 'a', False]]],\n   [[False, 'killed']]),\n  ('empty fetch refreshes the ttl clock',\n   [[['fetch', 0, {'a': 1}], ['fetch', 25, {}], ['get', 40, 'a', 0]]],\n   [[0, 'missing']]),\n  ('event stream sample 6',\n   [[['fetch', 5, {'a': 'b', 'c': 3}],\n     ['fetch', 6, {'c': True}],\n     ['get', 6.5, 'b', False],\n     ['get', 7.0, 'a', 'dflt'],\n     ['get', 17.0, 'a', False],\n     ['fetch', 27.0, {}],\n     ['get', 57.0, 'c', 'dflt'],\n     ['get', 87.0, 'b', False]]],\n   [[False, 'missing'], ['dflt', 'missing'], [False, 'missing'], ['dflt', 'stale'], [False, 'stale']]),\n  ('event stream sample 16',\n   [[['get', 10, 'b', 0],\n     ['get', 40, 'c', 'dflt'],\n     ['get', 69.5, 'a', 0],\n     ['fetch', 79.5, {'a': 'b'}],\n     ['fetch', 84.5, {'c': 'b'}],\n     ['kill', 85.0, 'b'],\n     ['fetch', 95.0, {'b': 3, 'c': False}]]],\n   [[0, 'stale'], ['dflt', 'stale'], [0, 'stale']])],\n [('empty payload clears the cache',\n   [[['fetch', 0, {'a': True}], ['fetch', 5, {}], ['get', 6, 'a', False]]],\n   [[False, 'missing']]),\n  ('refetch clears kill switches',\n   [[['fetch', 0, {'a': True}], ['kill', 1, 'a'], ['fetch', 2, {'a': True}], ['get', 3, 'a', False]]],\n   [[True, 'cache']]),\n  ('refetch clears a kill on an uncached flag',\n   [[['fetch', 0, {'a': True}], ['kill', 1, 'b'], ['fetch', 2, {'a': True}], ['get', 4, 'b', 0]]],\n   [[0, 'missing']]),\n  ('kill of a flag missing from the payload',\n   [[['fetch', 0, {'a': True}], ['kill', 1, 'b'], ['get', 2, 'b', 'd']]],\n   [['d', 'killed']]),\n  ('killed flag beats staleness',\n   [[['fetch', 0, {'a': True}], ['kill', 1, 'a'], ['get', 40, 'a', False]]],\n   [[False, 'killed']]),\n  ('second fetch refreshes the ttl clock',\n   [[['fetch', 0, {'a': 1}], ['fetch', 25, {'a': 2}], ['get', 40, 'a', 0]]],\n   [[2, 'cache']]),\n  ('event stream sample 21',\n   [[['get', 5, 'a', 0], ['fetch', 5, {'a': False, 'b': True}], ['get', 5, 'b', 0]]],\n   [[0, 'stale'], [True, 'cache']]),\n  ('event stream sample 57',\n   [[['get', 1, 'a', 0],\n     ['get', 31, 'a', 'dflt'],\n     ['kill', 31.5, 'c'],\n     ['fetch', 32.5, {'c': False, 'b': True}],\n     ['get', 62.0, 'b', False],\n     ['fetch', 92.0, {}],\n     ['get', 97.0, 'c', 'dflt'],\n     ['get', 107.0, 'a', 0]]],\n   [[0, 'stale'], ['dflt', 'stale'], [True, 'cache'], ['dflt', 'missing'], [0, 'missing']])]]\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":"63139d68db3be48e03ea72edf6f1699fecebc648888e73a5e0903ffd08aee203","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(events):\n    cache = {}\n    fetched_at = None\n    killed = set()\n    out = []\n    for ev in events:\n        kind, t = ev[0], ev[1]\n        if kind == 'fetch':\n            cache.update(ev[2])\n            fetched_at = t\n            killed = set()\n        elif kind == 'kill':\n            killed.add(ev[2])\n        else:\n            flag, default = ev[2], ev[3]\n            if flag in killed:\n                out.append([default, 'killed'])\n            elif fetched_at is None or t - fetched_at >= 30:\n                out.append([default, 'stale'])\n            elif flag not in cache:\n                out.append([default, 'missing'])\n            else:\n                out.append([cache[flag], 'cache'])\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('value is stale at exactly the ttl',\n   [[['fetch', 0, {'a': True}], ['get', 30, 'a', False]]],\n   [[False, 'stale']]),\n  ('fractional age just under the ttl is fresh',\n   [[['fetch', 0, {'a': True}], ['get', 29.5, 'a', False]]],\n   [[True, 'cache']]),\n  ('refetch removes flags absent from payload',\n   [[['fetch', 0, {'a': True, 'b': 'x'}], ['fetch', 5, {'a': False}], ['get', 6, 'b', 'd']]],\n   [['d', 'missing']]),\n  ('empty payload clears the cache',\n   [[['fetch', 0, {'a': True}], ['fetch', 5, {}], ['get', 6, 'a', False]]],\n   [[False, 'missing']]),\n  ('refetch clears kill switches',\n   [[['fetch', 0, {'a': True}], ['kill', 1, 'a'], ['fetch', 2, {'a': True}], ['get', 3, 'a', False]]],\n   [[True, 'cache']]),\n  ('empty fetch refreshes the ttl clock',\n   [[['fetch', 0, {'a': 1}], ['fetch', 25, {}], ['get', 40, 'a', 0]]],\n   [[0, 'missing']]),\n  ('event stream sample 1',\n   [[['kill', 30, 'a'], ['fetch', 40, {'c': 3, 'b': False}], ['kill', 41, 'a']]],\n   []),\n  ('event stream sample 2',\n   [[['get', 0, 'a', False],\n     ['get', 30, 'b', 0],\n     ['get', 59.5, 'b', False],\n     ['fetch', 89.5, {}],\n     ['get', 99.5, 'a', 0],\n     ['get', 129.0, 'c', 'dflt'],\n     ['get', 129.0, 'c', 0]]],\n   [[False, 'stale'], [0, 'stale'], [False, 'stale'], [0, 'missing'], ['dflt', 'stale'], [0, 'stale']])],\n [('fractional age just under the ttl is fresh',\n   [[['fetch', 0, {'a': True}], ['get', 29.5, 'a', False]]],\n   [[True, 'cache']]),\n  ('refetch removes flags absent from payload',\n   [[['fetch', 0, {'a': True, 'b': 'x'}], ['fetch', 5, {'a': False}], ['get', 6, 'b', 'd']]],\n   [['d', 'missing']]),\n  ('empty payload clears the cache',\n   [[['fetch', 0, {'a': True}], ['fetch', 5, {}], ['get', 6, 'a', False]]],\n   [[False, 'missing']]),\n  ('refetch clears kill switches',\n   [[['fetch', 0, {'a': True}], ['kill', 1, 'a'], ['fetch', 2, {'a': True}], ['get', 3, 'a', False]]],\n   [[True, 'cache']]),\n  ('refetch clears a kill on an uncached flag',\n   [[['fetch', 0, {'a': True}], ['kill', 1, 'b'], ['fetch', 2, {'a': True}], ['get', 4, 'b', 0]]],\n   [[0, 'missing']]),\n  ('empty fetch refreshes the ttl clock',\n   [[['fetch', 0, {'a': 1}], ['fetch', 25, {}], ['get', 40, 'a', 0]]],\n   [[0, 'missing']]),\n  ('event stream sample 25',\n   [[['get', 29.5, 'a', 'dflt'],\n     ['fetch', 29.5, {'a': False, 'c': 'b'}],\n     ['fetch', 30.0, {'c': False, 'b': 'b'}],\n     ['fetch', 30.0, {}],\n     ['get', 30.5, 'b', 0]]],\n   [['dflt', 'stale'], [0, 'missing']]),\n  ('event stream sample 57',\n   [[['get', 1, 'a', 0],\n     ['get', 31, 'a', 'dflt'],\n     ['kill', 31.5, 'c'],\n     ['fetch', 32.5, {'c': False, 'b': True}],\n     ['get', 62.0, 'b', False],\n     ['fetch', 92.0, {}],\n     ['get', 97.0, 'c', 'dflt'],\n     ['get', 107.0, 'a', 0]]],\n   [[0, 'stale'], ['dflt', 'stale'], [True, 'cache'], ['dflt', 'missing'], [0, 'missing']])],\n [('refetch removes flags absent from payload',\n   [[['fetch', 0, {'a': True, 'b': 'x'}], ['fetch', 5, {'a': False}], ['get', 6, 'b', 'd']]],\n   [['d', 'missing']]),\n  ('empty payload clears the cache',\n   [[['fetch', 0, {'a': True}], ['fetch', 5, {}], ['get', 6, 'a', False]]],\n   [[False, 'missing']]),\n  ('refetch clears kill switches',\n   [[['fetch', 0, {'a': True}], ['kill', 1, 'a'], ['fetch', 2, {'a': True}], ['get', 3, 'a', False]]],\n   [[True, 'cache']]),\n  ('refetch clears a kill on an uncached flag',\n   [[['fetch', 0, {'a': True}], ['kill', 1, 'b'], ['fetch', 2, {'a': True}], ['get', 4, 'b', 0]]],\n   [[0, 'missing']]),\n  ('kill of a flag missing from the payload',\n   [[['fetch', 0, {'a': True}], ['kill', 1, 'b'], ['get', 2, 'b', 'd']]],\n   [['d', 'killed']]),\n  ('event stream sample 11',\n   [[['get', 10, 'a', 0], ['get', 11, 'c', 'dflt'], ['get', 11.5, 'c', False]]],\n   [[0, 'stale'], ['dflt', 'stale'], [False, 'stale']]),\n  ('event stream sample 20',\n   [[['fetch', 30, {'c': 'b', 'a': False}],\n     ['get', 40, 'b', 0],\n     ['fetch', 41, {'b': 'b', 'c': 'b'}],\n     ['get', 41, 'b', 'dflt'],\n     ['get', 41, 'c', 0],\n     ['kill', 42, 'c'],\n     ['get', 43, 'a', 0]]],\n   [[0, 'missing'], ['b', 'cache'], ['b', 'cache'], [0, 'missing']]),\n  ('event stream sample 58',\n   [[['fetch', 30, {'a': 3}],\n     ['kill', 30.5, 'b'],\n     ['get', 31.0, 'b', 0],\n     ['get', 32.0, 'c', 0],\n     ['fetch', 33.0, {}],\n     ['get', 38.0, 'a', 'dflt'],\n     ['kill', 68.0, 'c']]],\n   [[0, 'killed'], [0, 'missing'], ['dflt', 'missing']])],\n [('empty payload clears the cache',\n   [[['fetch', 0, {'a': True}], ['fetch', 5, {}], ['get', 6, 'a', False]]],\n   [[False, 'missing']]),\n  ('refetch clears kill switches',\n   [[['fetch', 0, {'a': True}], ['kill', 1, 'a'], ['fetch', 2, {'a': True}], ['get', 3, 'a', False]]],\n   [[True, 'cache']]),\n  ('refetch clears a kill on an uncached flag',\n   [[['fetch', 0, {'a': True}], ['kill', 1, 'b'], ['fetch', 2, {'a': True}], ['get', 4, 'b', 0]]],\n   [[0, 'missing']]),\n  ('kill of a flag missing from the payload',\n   [[['fetch', 0, {'a': True}], ['kill', 1, 'b'], ['get', 2, 'b', 'd']]],\n   [['d', 'killed']]),\n  ('killed flag beats staleness',\n   [[['fetch', 0, {'a': True}], ['kill', 1, 'a'], ['get', 40, 'a', False]]],\n   [[False, 'killed']]),\n  ('empty fetch refreshes the ttl clock',\n   [[['fetch', 0, {'a': 1}], ['fetch', 25, {}], ['get', 40, 'a', 0]]],\n   [[0, 'missing']]),\n  ('event stream sample 6',\n   [[['fetch', 5, {'a': 'b', 'c': 3}],\n     ['fetch', 6, {'c': True}],\n     ['get', 6.5, 'b', False],\n     ['get', 7.0, 'a', 'dflt'],\n     ['get', 17.0, 'a', False],\n     ['fetch', 27.0, {}],\n     ['get', 57.0, 'c', 'dflt'],\n     ['get', 87.0, 'b', False]]],\n   [[False, 'missing'], ['dflt', 'missing'], [False, 'missing'], ['dflt', 'stale'], [False, 'stale']]),\n  ('event stream sample 16',\n   [[['get', 10, 'b', 0],\n     ['get', 40, 'c', 'dflt'],\n     ['get', 69.5, 'a', 0],\n     ['fetch', 79.5, {'a': 'b'}],\n     ['fetch', 84.5, {'c': 'b'}],\n     ['kill', 85.0, 'b'],\n     ['fetch', 95.0, {'b': 3, 'c': False}]]],\n   [[0, 'stale'], ['dflt', 'stale'], [0, 'stale']])],\n [('empty payload clears the cache',\n   [[['fetch', 0, {'a': True}], ['fetch', 5, {}], ['get', 6, 'a', False]]],\n   [[False, 'missing']]),\n  ('refetch clears kill switches',\n   [[['fetch', 0, {'a': True}], ['kill', 1, 'a'], ['fetch', 2, {'a': True}], ['get', 3, 'a', False]]],\n   [[True, 'cache']]),\n  ('refetch clears a kill on an uncached flag',\n   [[['fetch', 0, {'a': True}], ['kill', 1, 'b'], ['fetch', 2, {'a': True}], ['get', 4, 'b', 0]]],\n   [[0, 'missing']]),\n  ('kill of a flag missing from the payload',\n   [[['fetch', 0, {'a': True}], ['kill', 1, 'b'], ['get', 2, 'b', 'd']]],\n   [['d', 'killed']]),\n  ('killed flag beats staleness',\n   [[['fetch', 0, {'a': True}], ['kill', 1, 'a'], ['get', 40, 'a', False]]],\n   [[False, 'killed']]),\n  ('second fetch refreshes the ttl clock',\n   [[['fetch', 0, {'a': 1}], ['fetch', 25, {'a': 2}], ['get', 40, 'a', 0]]],\n   [[2, 'cache']]),\n  ('event stream sample 21',\n   [[['get', 5, 'a', 0], ['fetch', 5, {'a': False, 'b': True}], ['get', 5, 'b', 0]]],\n   [[0, 'stale'], [True, 'cache']]),\n  ('event stream sample 57',\n   [[['get', 1, 'a', 0],\n     ['get', 31, 'a', 'dflt'],\n     ['kill', 31.5, 'c'],\n     ['fetch', 32.5, {'c': False, 'b': True}],\n     ['get', 62.0, 'b', False],\n     ['fetch', 92.0, {}],\n     ['get', 97.0, 'c', 'dflt'],\n     ['get', 107.0, 'a', 0]]],\n   [[0, 'stale'], ['dflt', 'stale'], [True, 'cache'], ['dflt', 'missing'], [0, 'missing']])]]\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 flag-evaluation model with a stipulated contract; it does not reproduce any vendor SDK byte for byte. 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-feature-flag-rollout-bucketing-cache-freshness-fetch-replaces-cache","generated_at":"2026-09-29T14:48:52.867895+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Client SDKs serve cached flags offline; kill switches and staleness decide whether a bad flag keeps serving.","root_cause":"The fetch handler updates the existing dictionary instead of replacing it.","sha256":"653187b0ab9be82d1a5893fdd95d4db793b53a6820dbf6f5887796f8881da1d9","title":"Flag value cache freshness: Refetch merges into the old cache · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verified":true,"visibility":"public","verification":{"attempt":{"elapsed_ms":39.054,"exit_code":1,"observations":[{"actual":[[false,"stale"]],"check":"value is stale at exactly the ttl","expected":[[false,"stale"]],"passed":true},{"actual":[[true,"cache"]],"check":"fractional age just under the ttl is fresh","expected":[[true,"cache"]],"passed":true},{"actual":[["d","missing"]],"check":"refetch removes flags absent from payload","expected":[["d","missing"]],"passed":true},{"actual":[[true,"cache"]],"check":"empty payload clears the cache","expected":[[false,"missing"]],"passed":false},{"actual":[[true,"cache"]],"check":"refetch clears kill switches","expected":[[true,"cache"]],"passed":true},{"actual":[[1,"cache"]],"check":"empty fetch refreshes the ttl clock","expected":[[0,"missing"]],"passed":false},{"actual":[],"check":"event stream sample 1","expected":[],"passed":true},{"actual":[[false,"stale"],[0,"stale"],[false,"stale"],[0,"missing"],["dflt","stale"],[0,"stale"]],"check":"event stream sample 2","expected":[[false,"stale"],[0,"stale"],[false,"stale"],[0,"missing"],["dflt","stale"],[0,"stale"]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"value is stale at exactly the ttl\", \"actual\": [[false, \"stale\"]], \"expected\": [[false, \"stale\"]], \"passed\": true}, {\"check\": \"fractional age just under the ttl is fresh\", \"actual\": [[true, \"cache\"]], \"expected\": [[true, \"cache\"]], \"passed\": true}, {\"check\": \"refetch removes flags absent from payload\", \"actual\": [[\"d\", \"missing\"]], \"expected\": [[\"d\", \"missing\"]], \"passed\": true}, {\"check\": \"empty payload clears the cache\", \"actual\": [[true, \"cache\"]], \"expected\": [[false, \"missing\"]], \"passed\": false}, {\"check\": \"refetch clears kill switches\", \"actual\": [[true, \"cache\"]], \"expected\": [[true, \"cache\"]], \"passed\": true}, {\"check\": \"empty fetch refreshes the ttl clock\", \"actual\": [[1, \"cache\"]], \"expected\": [[0, \"missing\"]], \"passed\": false}, {\"check\": \"event stream sample 1\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"event stream sample 2\", \"actual\": [[false, \"stale\"], [0, \"stale\"], [false, \"stale\"], [0, \"missing\"], [\"dflt\", \"stale\"], [0, \"stale\"]], \"expected\": [[false, \"stale\"], [0, \"stale\"], [false, \"stale\"], [0, \"missing\"], [\"dflt\", \"stale\"], [0, \"stale\"]], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":38.227,"exit_code":1,"observations":[{"actual":[[false,"stale"]],"check":"value is stale at exactly the ttl","expected":[[false,"stale"]],"passed":true},{"actual":[[true,"cache"]],"check":"fractional age just under the ttl is fresh","expected":[[true,"cache"]],"passed":true},{"actual":[["x","cache"]],"check":"refetch removes flags absent from payload","expected":[["d","missing"]],"passed":false},{"actual":[[true,"cache"]],"check":"empty payload clears the cache","expected":[[false,"missing"]],"passed":false},{"actual":[[true,"cache"]],"check":"refetch clears kill switches","expected":[[true,"cache"]],"passed":true},{"actual":[[1,"cache"]],"check":"empty fetch refreshes the ttl clock","expected":[[0,"missing"]],"passed":false},{"actual":[],"check":"event stream sample 1","expected":[],"passed":true},{"actual":[[false,"stale"],[0,"stale"],[false,"stale"],[0,"missing"],["dflt","stale"],[0,"stale"]],"check":"event stream sample 2","expected":[[false,"stale"],[0,"stale"],[false,"stale"],[0,"missing"],["dflt","stale"],[0,"stale"]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"value is stale at exactly the ttl\", \"actual\": [[false, \"stale\"]], \"expected\": [[false, \"stale\"]], \"passed\": true}, {\"check\": \"fractional age just under the ttl is fresh\", \"actual\": [[true, \"cache\"]], \"expected\": [[true, \"cache\"]], \"passed\": true}, {\"check\": \"refetch removes flags absent from payload\", \"actual\": [[\"x\", \"cache\"]], \"expected\": [[\"d\", \"missing\"]], \"passed\": false}, {\"check\": \"empty payload clears the cache\", \"actual\": [[true, \"cache\"]], \"expected\": [[false, \"missing\"]], \"passed\": false}, {\"check\": \"refetch clears kill switches\", \"actual\": [[true, \"cache\"]], \"expected\": [[true, \"cache\"]], \"passed\": true}, {\"check\": \"empty fetch refreshes the ttl clock\", \"actual\": [[1, \"cache\"]], \"expected\": [[0, \"missing\"]], \"passed\": false}, {\"check\": \"event stream sample 1\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"event stream sample 2\", \"actual\": [[false, \"stale\"], [0, \"stale\"], [false, \"stale\"], [0, \"missing\"], [\"dflt\", \"stale\"], [0, \"stale\"]], \"expected\": [[false, \"stale\"], [0, \"stale\"], [false, \"stale\"], [0, \"missing\"], [\"dflt\", \"stale\"], [0, \"stale\"]], \"passed\": true}], \"passed\": false}\n"}},"member_only":{"stages":["fixed"],"fields":["implementations.fixed","verification.fixed","harness","repair"],"note":"The verified repair, its recorded checks, the repair description, and the scoring harness are available to members."}}