FAILURE MAP
← Case archive

FA-23776 / Client state / Open access

Client route-state projection: Repeated values retention · case 01

Repeated values retention.

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

ROOT CAUSE

The repeated-values-retention client decision evaluates `list(dict(pairs).get('tag',''))` instead of `[v for k,v in pairs if k=='tag']`.

VERIFIED REPAIR

Apply the modeled repeated-values-retention rule: `[v for k,v in pairs if k=='tag']`.

Unsuccessful approach: The partial repair `[v for k,v in pairs if k=='tag'][:1]` still violates the explicit fixture contract.

Case contract

This route-state adapter models already-decoded query pairs. Repeated pairs and insertion order remain significant, first occurrence is used by single-value readers, explicit empty values override defaults, and fragment absence differs from empty. Operation repeated-values-retention has the six explicit input/output oracles below.

Why this case matters

An offline client lifecycle model that isolates a state-management defect without DOM rendering or network services.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(operation, s):
    pairs, defaults, route, fragment = s
    if operation == 'repeated-values-retention':
        return list(dict(pairs).get('tag',''))
    if operation == 'empty-query-value':
        return next((v for k,v in pairs if k=='q'),defaults.get('q'))
    if operation == 'query-default-merge':
        return {**defaults,**dict(pairs)}
    if operation == 'fragment-null-preservation':
        return fragment if fragment is not None else 'absent'
    if operation == 'state-cache-key':
        return (route,tuple(pairs))
    if operation == 'remove-one-query-name':
        return [(k,v) for k,v in pairs if k!='q']
    if operation == 'first-value-precedence':
        return next((v for k,v in pairs if k=='q'),None)
    if operation == 'debug-exclusion':
        return [(k,v) for k,v in pairs if k!='debug']
    if operation == 'explicit-query-key-set':
        return sorted({k for k,v in pairs})
    if operation == 'navigation-fragment-key':
        return (route,fragment)
    raise ValueError('unknown modeled operation')
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('repeated-values-retention scenario 1', solve('repeated-values-retention', ([('q','a'),('tag','x'),('tag','y')],{'q':'default'},'/a/'+str(N),'part')), ['x','y'])
check('repeated-values-retention scenario 2', solve('repeated-values-retention', ([('q','')],{'q':'default'},'/a','')), [])
check('repeated-values-retention scenario 3', solve('repeated-values-retention', ([] ,{'q':'default','page':'1'},'/a',None)), [])
check('repeated-values-retention scenario 4', solve('repeated-values-retention', ([('q','0'),('page','2'),('debug','1')],{'q':'default'},'/b','x')), [])
check('repeated-values-retention scenario 5', solve('repeated-values-retention', ([('page','0'),('tag','x')],{},'/a',None)), ['x'])
check('repeated-values-retention scenario 6', solve('repeated-values-retention', ([('q','a'),('q','b')],{},'/b','end')), [])
check('empty-query-value scenario 1', solve('empty-query-value', ([('q','a'),('tag','x'),('tag','y')],{'q':'default'},'/a/'+str(N),'part')), 'a')
check('empty-query-value scenario 2', solve('empty-query-value', ([('q','')],{'q':'default'},'/a','')), '')
check('empty-query-value scenario 3', solve('empty-query-value', ([] ,{'q':'default','page':'1'},'/a',None)), 'default')
check('empty-query-value scenario 4', solve('empty-query-value', ([('q','0'),('page','2'),('debug','1')],{'q':'default'},'/b','x')), '0')
check('empty-query-value scenario 5', solve('empty-query-value', ([('page','0'),('tag','x')],{},'/a',None)), None)
check('empty-query-value scenario 6', solve('empty-query-value', ([('q','a'),('q','b')],{},'/b','end')), 'a')
check('query-default-merge scenario 1', solve('query-default-merge', ([('q','a'),('tag','x'),('tag','y')],{'q':'default'},'/a/'+str(N),'part')), {'q':'a','tag':'y'})
check('query-default-merge scenario 2', solve('query-default-merge', ([('q','')],{'q':'default'},'/a','')), {'q':''})
check('query-default-merge scenario 3', solve('query-default-merge', ([] ,{'q':'default','page':'1'},'/a',None)), {'q':'default','page':'1'})
check('query-default-merge scenario 4', solve('query-default-merge', ([('q','0'),('page','2'),('debug','1')],{'q':'default'},'/b','x')), {'q':'0','page':'2','debug':'1'})
check('query-default-merge scenario 5', solve('query-default-merge', ([('page','0'),('tag','x')],{},'/a',None)), {'page':'0','tag':'x'})
check('query-default-merge scenario 6', solve('query-default-merge', ([('q','a'),('q','b')],{},'/b','end')), {'q':'b'})
check('fragment-null-preservation scenario 1', solve('fragment-null-preservation', ([('q','a'),('tag','x'),('tag','y')],{'q':'default'},'/a/'+str(N),'part')), 'part')
check('fragment-null-preservation scenario 2', solve('fragment-null-preservation', ([('q','')],{'q':'default'},'/a','')), '')
check('fragment-null-preservation scenario 3', solve('fragment-null-preservation', ([] ,{'q':'default','page':'1'},'/a',None)), 'absent')
check('fragment-null-preservation scenario 4', solve('fragment-null-preservation', ([('q','0'),('page','2'),('debug','1')],{'q':'default'},'/b','x')), 'x')
check('fragment-null-preservation scenario 5', solve('fragment-null-preservation', ([('page','0'),('tag','x')],{},'/a',None)), 'absent')
check('fragment-null-preservation scenario 6', solve('fragment-null-preservation', ([('q','a'),('q','b')],{},'/b','end')), 'end')
check('state-cache-key scenario 1', solve('state-cache-key', ([('q','a'),('tag','x'),('tag','y')],{'q':'default'},'/a/'+str(N),'part')), ('/a/'+str(N),(('q','a'),('tag','x'),('tag','y'))))
check('state-cache-key scenario 2', solve('state-cache-key', ([('q','')],{'q':'default'},'/a','')), ('/a',(('q',''),)))
check('state-cache-key scenario 3', solve('state-cache-key', ([] ,{'q':'default','page':'1'},'/a',None)), ('/a',()))
check('state-cache-key scenario 4', solve('state-cache-key', ([('q','0'),('page','2'),('debug','1')],{'q':'default'},'/b','x')), ('/b',(('q','0'),('page','2'),('debug','1'))))
check('state-cache-key scenario 5', solve('state-cache-key', ([('page','0'),('tag','x')],{},'/a',None)), ('/a',(('page','0'),('tag','x'))))
check('state-cache-key scenario 6', solve('state-cache-key', ([('q','a'),('q','b')],{},'/b','end')), ('/b',(('q','a'),('q','b'))))
check('remove-one-query-name scenario 1', solve('remove-one-query-name', ([('q','a'),('tag','x'),('tag','y')],{'q':'default'},'/a/'+str(N),'part')), [('tag','x'),('tag','y')])
check('remove-one-query-name scenario 2', solve('remove-one-query-name', ([('q','')],{'q':'default'},'/a','')), [])
check('remove-one-query-name scenario 3', solve('remove-one-query-name', ([] ,{'q':'default','page':'1'},'/a',None)), [])
check('remove-one-query-name scenario 4', solve('remove-one-query-name', ([('q','0'),('page','2'),('debug','1')],{'q':'default'},'/b','x')), [('page','2'),('debug','1')])
check('remove-one-query-name scenario 5', solve('remove-one-query-name', ([('page','0'),('tag','x')],{},'/a',None)), [('page','0'),('tag','x')])
check('remove-one-query-name scenario 6', solve('remove-one-query-name', ([('q','a'),('q','b')],{},'/b','end')), [])
check('first-value-precedence scenario 1', solve('first-value-precedence', ([('q','a'),('tag','x'),('tag','y')],{'q':'default'},'/a/'+str(N),'part')), 'a')
check('first-value-precedence scenario 2', solve('first-value-precedence', ([('q','')],{'q':'default'},'/a','')), '')
check('first-value-precedence scenario 3', solve('first-value-precedence', ([] ,{'q':'default','page':'1'},'/a',None)), None)
check('first-value-precedence scenario 4', solve('first-value-precedence', ([('q','0'),('page','2'),('debug','1')],{'q':'default'},'/b','x')), '0')
check('first-value-precedence scenario 5', solve('first-value-precedence', ([('page','0'),('tag','x')],{},'/a',None)), None)
check('first-value-precedence scenario 6', solve('first-value-precedence', ([('q','a'),('q','b')],{},'/b','end')), 'a')
check('debug-exclusion scenario 1', solve('debug-exclusion', ([('q','a'),('tag','x'),('tag','y')],{'q':'default'},'/a/'+str(N),'part')), [('q','a'),('tag','x'),('tag','y')])
check('debug-exclusion scenario 2', solve('debug-exclusion', ([('q','')],{'q':'default'},'/a','')), [('q','')])
check('debug-exclusion scenario 3', solve('debug-exclusion', ([] ,{'q':'default','page':'1'},'/a',None)), [])
check('debug-exclusion scenario 4', solve('debug-exclusion', ([('q','0'),('page','2'),('debug','1')],{'q':'default'},'/b','x')), [('q','0'),('page','2')])
check('debug-exclusion scenario 5', solve('debug-exclusion', ([('page','0'),('tag','x')],{},'/a',None)), [('page','0'),('tag','x')])
check('debug-exclusion scenario 6', solve('debug-exclusion', ([('q','a'),('q','b')],{},'/b','end')), [('q','a'),('q','b')])
check('explicit-query-key-set scenario 1', solve('explicit-query-key-set', ([('q','a'),('tag','x'),('tag','y')],{'q':'default'},'/a/'+str(N),'part')), ['q','tag'])
check('explicit-query-key-set scenario 2', solve('explicit-query-key-set', ([('q','')],{'q':'default'},'/a','')), ['q'])
check('explicit-query-key-set scenario 3', solve('explicit-query-key-set', ([] ,{'q':'default','page':'1'},'/a',None)), [])
check('explicit-query-key-set scenario 4', solve('explicit-query-key-set', ([('q','0'),('page','2'),('debug','1')],{'q':'default'},'/b','x')), ['debug','page','q'])
check('explicit-query-key-set scenario 5', solve('explicit-query-key-set', ([('page','0'),('tag','x')],{},'/a',None)), ['page','tag'])
check('explicit-query-key-set scenario 6', solve('explicit-query-key-set', ([('q','a'),('q','b')],{},'/b','end')), ['q'])
check('navigation-fragment-key scenario 1', solve('navigation-fragment-key', ([('q','a'),('tag','x'),('tag','y')],{'q':'default'},'/a/'+str(N),'part')), ('/a/'+str(N),'part'))
check('navigation-fragment-key scenario 2', solve('navigation-fragment-key', ([('q','')],{'q':'default'},'/a','')), ('/a',''))
check('navigation-fragment-key scenario 3', solve('navigation-fragment-key', ([] ,{'q':'default','page':'1'},'/a',None)), ('/a',None))
check('navigation-fragment-key scenario 4', solve('navigation-fragment-key', ([('q','0'),('page','2'),('debug','1')],{'q':'default'},'/b','x')), ('/b','x'))
check('navigation-fragment-key scenario 5', solve('navigation-fragment-key', ([('page','0'),('tag','x')],{},'/a',None)), ('/a',None))
check('navigation-fragment-key scenario 6', solve('navigation-fragment-key', ([('q','a'),('q','b')],{},'/b','end')), ('/b','end'))
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
repeated-values-retention scenario 1['y']['x', 'y']Failed
repeated-values-retention scenario 2[][]Passed
repeated-values-retention scenario 3[][]Passed
repeated-values-retention scenario 4[][]Passed
repeated-values-retention scenario 5['x']['x']Passed
repeated-values-retention scenario 6[][]Passed
empty-query-value scenario 1aaPassed
empty-query-value scenario 2Passed
empty-query-value scenario 3defaultdefaultPassed
empty-query-value scenario 400Passed
empty-query-value scenario 5NoneNonePassed
empty-query-value scenario 6aaPassed
query-default-merge scenario 1{'q': 'a', 'tag': 'y'}{'q': 'a', 'tag': 'y'}Passed
query-default-merge scenario 2{'q': ''}{'q': ''}Passed
query-default-merge scenario 3{'page': '1', 'q': 'default'}{'page': '1', 'q': 'default'}Passed
query-default-merge scenario 4{'debug': '1', 'page': '2', 'q': '0'}{'debug': '1', 'page': '2', 'q': '0'}Passed
query-default-merge scenario 5{'page': '0', 'tag': 'x'}{'page': '0', 'tag': 'x'}Passed
query-default-merge scenario 6{'q': 'b'}{'q': 'b'}Passed
fragment-null-preservation scenario 1partpartPassed
fragment-null-preservation scenario 2Passed
fragment-null-preservation scenario 3absentabsentPassed
fragment-null-preservation scenario 4xxPassed
fragment-null-preservation scenario 5absentabsentPassed
fragment-null-preservation scenario 6endendPassed
state-cache-key scenario 1['/a/1', [['q', 'a'], ['tag', 'x'], ['tag', 'y']]]['/a/1', [['q', 'a'], ['tag', 'x'], ['tag', 'y']]]Passed
state-cache-key scenario 2['/a', [['q', '']]]['/a', [['q', '']]]Passed
state-cache-key scenario 3['/a', []]['/a', []]Passed
state-cache-key scenario 4['/b', [['q', '0'], ['page', '2'], ['debug', '1']]]['/b', [['q', '0'], ['page', '2'], ['debug', '1']]]Passed
state-cache-key scenario 5['/a', [['page', '0'], ['tag', 'x']]]['/a', [['page', '0'], ['tag', 'x']]]Passed
state-cache-key scenario 6['/b', [['q', 'a'], ['q', 'b']]]['/b', [['q', 'a'], ['q', 'b']]]Passed
remove-one-query-name scenario 1[['tag', 'x'], ['tag', 'y']][['tag', 'x'], ['tag', 'y']]Passed
remove-one-query-name scenario 2[][]Passed
remove-one-query-name scenario 3[][]Passed
remove-one-query-name scenario 4[['page', '2'], ['debug', '1']][['page', '2'], ['debug', '1']]Passed
remove-one-query-name scenario 5[['page', '0'], ['tag', 'x']][['page', '0'], ['tag', 'x']]Passed
remove-one-query-name scenario 6[][]Passed
first-value-precedence scenario 1aaPassed
first-value-precedence scenario 2Passed
first-value-precedence scenario 3NoneNonePassed
first-value-precedence scenario 400Passed
first-value-precedence scenario 5NoneNonePassed
first-value-precedence scenario 6aaPassed
debug-exclusion scenario 1[['q', 'a'], ['tag', 'x'], ['tag', 'y']][['q', 'a'], ['tag', 'x'], ['tag', 'y']]Passed
debug-exclusion scenario 2[['q', '']][['q', '']]Passed
debug-exclusion scenario 3[][]Passed
debug-exclusion scenario 4[['q', '0'], ['page', '2']][['q', '0'], ['page', '2']]Passed
debug-exclusion scenario 5[['page', '0'], ['tag', 'x']][['page', '0'], ['tag', 'x']]Passed
debug-exclusion scenario 6[['q', 'a'], ['q', 'b']][['q', 'a'], ['q', 'b']]Passed
explicit-query-key-set scenario 1['q', 'tag']['q', 'tag']Passed
explicit-query-key-set scenario 2['q']['q']Passed
explicit-query-key-set scenario 3[][]Passed
explicit-query-key-set scenario 4['debug', 'page', 'q']['debug', 'page', 'q']Passed
explicit-query-key-set scenario 5['page', 'tag']['page', 'tag']Passed
explicit-query-key-set scenario 6['q']['q']Passed
navigation-fragment-key scenario 1['/a/1', 'part']['/a/1', 'part']Passed
navigation-fragment-key scenario 2['/a', '']['/a', '']Passed
navigation-fragment-key scenario 3['/a', None]['/a', None]Passed
navigation-fragment-key scenario 4['/b', 'x']['/b', 'x']Passed
navigation-fragment-key scenario 5['/a', None]['/a', None]Passed
navigation-fragment-key scenario 6['/b', 'end']['/b', 'end']Passed

SHA-256 / 1a78d7a80084f9a15b071a9eb9b33a3a4132ed2d8b86308dca475b552d21af0f

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(operation, s):
    pairs, defaults, route, fragment = s
    if operation == 'repeated-values-retention':
        return [v for k,v in pairs if k=='tag'][:1]
    if operation == 'empty-query-value':
        return next((v for k,v in pairs if k=='q'),defaults.get('q'))
    if operation == 'query-default-merge':
        return {**defaults,**dict(pairs)}
    if operation == 'fragment-null-preservation':
        return fragment if fragment is not None else 'absent'
    if operation == 'state-cache-key':
        return (route,tuple(pairs))
    if operation == 'remove-one-query-name':
        return [(k,v) for k,v in pairs if k!='q']
    if operation == 'first-value-precedence':
        return next((v for k,v in pairs if k=='q'),None)
    if operation == 'debug-exclusion':
        return [(k,v) for k,v in pairs if k!='debug']
    if operation == 'explicit-query-key-set':
        return sorted({k for k,v in pairs})
    if operation == 'navigation-fragment-key':
        return (route,fragment)
    raise ValueError('unknown modeled operation')
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('repeated-values-retention scenario 1', solve('repeated-values-retention', ([('q','a'),('tag','x'),('tag','y')],{'q':'default'},'/a/'+str(N),'part')), ['x','y'])
check('repeated-values-retention scenario 2', solve('repeated-values-retention', ([('q','')],{'q':'default'},'/a','')), [])
check('repeated-values-retention scenario 3', solve('repeated-values-retention', ([] ,{'q':'default','page':'1'},'/a',None)), [])
check('repeated-values-retention scenario 4', solve('repeated-values-retention', ([('q','0'),('page','2'),('debug','1')],{'q':'default'},'/b','x')), [])
check('repeated-values-retention scenario 5', solve('repeated-values-retention', ([('page','0'),('tag','x')],{},'/a',None)), ['x'])
check('repeated-values-retention scenario 6', solve('repeated-values-retention', ([('q','a'),('q','b')],{},'/b','end')), [])
check('empty-query-value scenario 1', solve('empty-query-value', ([('q','a'),('tag','x'),('tag','y')],{'q':'default'},'/a/'+str(N),'part')), 'a')
check('empty-query-value scenario 2', solve('empty-query-value', ([('q','')],{'q':'default'},'/a','')), '')
check('empty-query-value scenario 3', solve('empty-query-value', ([] ,{'q':'default','page':'1'},'/a',None)), 'default')
check('empty-query-value scenario 4', solve('empty-query-value', ([('q','0'),('page','2'),('debug','1')],{'q':'default'},'/b','x')), '0')
check('empty-query-value scenario 5', solve('empty-query-value', ([('page','0'),('tag','x')],{},'/a',None)), None)
check('empty-query-value scenario 6', solve('empty-query-value', ([('q','a'),('q','b')],{},'/b','end')), 'a')
check('query-default-merge scenario 1', solve('query-default-merge', ([('q','a'),('tag','x'),('tag','y')],{'q':'default'},'/a/'+str(N),'part')), {'q':'a','tag':'y'})
check('query-default-merge scenario 2', solve('query-default-merge', ([('q','')],{'q':'default'},'/a','')), {'q':''})
check('query-default-merge scenario 3', solve('query-default-merge', ([] ,{'q':'default','page':'1'},'/a',None)), {'q':'default','page':'1'})
check('query-default-merge scenario 4', solve('query-default-merge', ([('q','0'),('page','2'),('debug','1')],{'q':'default'},'/b','x')), {'q':'0','page':'2','debug':'1'})
check('query-default-merge scenario 5', solve('query-default-merge', ([('page','0'),('tag','x')],{},'/a',None)), {'page':'0','tag':'x'})
check('query-default-merge scenario 6', solve('query-default-merge', ([('q','a'),('q','b')],{},'/b','end')), {'q':'b'})
check('fragment-null-preservation scenario 1', solve('fragment-null-preservation', ([('q','a'),('tag','x'),('tag','y')],{'q':'default'},'/a/'+str(N),'part')), 'part')
check('fragment-null-preservation scenario 2', solve('fragment-null-preservation', ([('q','')],{'q':'default'},'/a','')), '')
check('fragment-null-preservation scenario 3', solve('fragment-null-preservation', ([] ,{'q':'default','page':'1'},'/a',None)), 'absent')
check('fragment-null-preservation scenario 4', solve('fragment-null-preservation', ([('q','0'),('page','2'),('debug','1')],{'q':'default'},'/b','x')), 'x')
check('fragment-null-preservation scenario 5', solve('fragment-null-preservation', ([('page','0'),('tag','x')],{},'/a',None)), 'absent')
check('fragment-null-preservation scenario 6', solve('fragment-null-preservation', ([('q','a'),('q','b')],{},'/b','end')), 'end')
check('state-cache-key scenario 1', solve('state-cache-key', ([('q','a'),('tag','x'),('tag','y')],{'q':'default'},'/a/'+str(N),'part')), ('/a/'+str(N),(('q','a'),('tag','x'),('tag','y'))))
check('state-cache-key scenario 2', solve('state-cache-key', ([('q','')],{'q':'default'},'/a','')), ('/a',(('q',''),)))
check('state-cache-key scenario 3', solve('state-cache-key', ([] ,{'q':'default','page':'1'},'/a',None)), ('/a',()))
check('state-cache-key scenario 4', solve('state-cache-key', ([('q','0'),('page','2'),('debug','1')],{'q':'default'},'/b','x')), ('/b',(('q','0'),('page','2'),('debug','1'))))
check('state-cache-key scenario 5', solve('state-cache-key', ([('page','0'),('tag','x')],{},'/a',None)), ('/a',(('page','0'),('tag','x'))))
check('state-cache-key scenario 6', solve('state-cache-key', ([('q','a'),('q','b')],{},'/b','end')), ('/b',(('q','a'),('q','b'))))
check('remove-one-query-name scenario 1', solve('remove-one-query-name', ([('q','a'),('tag','x'),('tag','y')],{'q':'default'},'/a/'+str(N),'part')), [('tag','x'),('tag','y')])
check('remove-one-query-name scenario 2', solve('remove-one-query-name', ([('q','')],{'q':'default'},'/a','')), [])
check('remove-one-query-name scenario 3', solve('remove-one-query-name', ([] ,{'q':'default','page':'1'},'/a',None)), [])
check('remove-one-query-name scenario 4', solve('remove-one-query-name', ([('q','0'),('page','2'),('debug','1')],{'q':'default'},'/b','x')), [('page','2'),('debug','1')])
check('remove-one-query-name scenario 5', solve('remove-one-query-name', ([('page','0'),('tag','x')],{},'/a',None)), [('page','0'),('tag','x')])
check('remove-one-query-name scenario 6', solve('remove-one-query-name', ([('q','a'),('q','b')],{},'/b','end')), [])
check('first-value-precedence scenario 1', solve('first-value-precedence', ([('q','a'),('tag','x'),('tag','y')],{'q':'default'},'/a/'+str(N),'part')), 'a')
check('first-value-precedence scenario 2', solve('first-value-precedence', ([('q','')],{'q':'default'},'/a','')), '')
check('first-value-precedence scenario 3', solve('first-value-precedence', ([] ,{'q':'default','page':'1'},'/a',None)), None)
check('first-value-precedence scenario 4', solve('first-value-precedence', ([('q','0'),('page','2'),('debug','1')],{'q':'default'},'/b','x')), '0')
check('first-value-precedence scenario 5', solve('first-value-precedence', ([('page','0'),('tag','x')],{},'/a',None)), None)
check('first-value-precedence scenario 6', solve('first-value-precedence', ([('q','a'),('q','b')],{},'/b','end')), 'a')
check('debug-exclusion scenario 1', solve('debug-exclusion', ([('q','a'),('tag','x'),('tag','y')],{'q':'default'},'/a/'+str(N),'part')), [('q','a'),('tag','x'),('tag','y')])
check('debug-exclusion scenario 2', solve('debug-exclusion', ([('q','')],{'q':'default'},'/a','')), [('q','')])
check('debug-exclusion scenario 3', solve('debug-exclusion', ([] ,{'q':'default','page':'1'},'/a',None)), [])
check('debug-exclusion scenario 4', solve('debug-exclusion', ([('q','0'),('page','2'),('debug','1')],{'q':'default'},'/b','x')), [('q','0'),('page','2')])
check('debug-exclusion scenario 5', solve('debug-exclusion', ([('page','0'),('tag','x')],{},'/a',None)), [('page','0'),('tag','x')])
check('debug-exclusion scenario 6', solve('debug-exclusion', ([('q','a'),('q','b')],{},'/b','end')), [('q','a'),('q','b')])
check('explicit-query-key-set scenario 1', solve('explicit-query-key-set', ([('q','a'),('tag','x'),('tag','y')],{'q':'default'},'/a/'+str(N),'part')), ['q','tag'])
check('explicit-query-key-set scenario 2', solve('explicit-query-key-set', ([('q','')],{'q':'default'},'/a','')), ['q'])
check('explicit-query-key-set scenario 3', solve('explicit-query-key-set', ([] ,{'q':'default','page':'1'},'/a',None)), [])
check('explicit-query-key-set scenario 4', solve('explicit-query-key-set', ([('q','0'),('page','2'),('debug','1')],{'q':'default'},'/b','x')), ['debug','page','q'])
check('explicit-query-key-set scenario 5', solve('explicit-query-key-set', ([('page','0'),('tag','x')],{},'/a',None)), ['page','tag'])
check('explicit-query-key-set scenario 6', solve('explicit-query-key-set', ([('q','a'),('q','b')],{},'/b','end')), ['q'])
check('navigation-fragment-key scenario 1', solve('navigation-fragment-key', ([('q','a'),('tag','x'),('tag','y')],{'q':'default'},'/a/'+str(N),'part')), ('/a/'+str(N),'part'))
check('navigation-fragment-key scenario 2', solve('navigation-fragment-key', ([('q','')],{'q':'default'},'/a','')), ('/a',''))
check('navigation-fragment-key scenario 3', solve('navigation-fragment-key', ([] ,{'q':'default','page':'1'},'/a',None)), ('/a',None))
check('navigation-fragment-key scenario 4', solve('navigation-fragment-key', ([('q','0'),('page','2'),('debug','1')],{'q':'default'},'/b','x')), ('/b','x'))
check('navigation-fragment-key scenario 5', solve('navigation-fragment-key', ([('page','0'),('tag','x')],{},'/a',None)), ('/a',None))
check('navigation-fragment-key scenario 6', solve('navigation-fragment-key', ([('q','a'),('q','b')],{},'/b','end')), ('/b','end'))
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
repeated-values-retention scenario 1['x']['x', 'y']Failed
repeated-values-retention scenario 2[][]Passed
repeated-values-retention scenario 3[][]Passed
repeated-values-retention scenario 4[][]Passed
repeated-values-retention scenario 5['x']['x']Passed
repeated-values-retention scenario 6[][]Passed
empty-query-value scenario 1aaPassed
empty-query-value scenario 2Passed
empty-query-value scenario 3defaultdefaultPassed
empty-query-value scenario 400Passed
empty-query-value scenario 5NoneNonePassed
empty-query-value scenario 6aaPassed
query-default-merge scenario 1{'q': 'a', 'tag': 'y'}{'q': 'a', 'tag': 'y'}Passed
query-default-merge scenario 2{'q': ''}{'q': ''}Passed
query-default-merge scenario 3{'page': '1', 'q': 'default'}{'page': '1', 'q': 'default'}Passed
query-default-merge scenario 4{'debug': '1', 'page': '2', 'q': '0'}{'debug': '1', 'page': '2', 'q': '0'}Passed
query-default-merge scenario 5{'page': '0', 'tag': 'x'}{'page': '0', 'tag': 'x'}Passed
query-default-merge scenario 6{'q': 'b'}{'q': 'b'}Passed
fragment-null-preservation scenario 1partpartPassed
fragment-null-preservation scenario 2Passed
fragment-null-preservation scenario 3absentabsentPassed
fragment-null-preservation scenario 4xxPassed
fragment-null-preservation scenario 5absentabsentPassed
fragment-null-preservation scenario 6endendPassed
state-cache-key scenario 1['/a/1', [['q', 'a'], ['tag', 'x'], ['tag', 'y']]]['/a/1', [['q', 'a'], ['tag', 'x'], ['tag', 'y']]]Passed
state-cache-key scenario 2['/a', [['q', '']]]['/a', [['q', '']]]Passed
state-cache-key scenario 3['/a', []]['/a', []]Passed
state-cache-key scenario 4['/b', [['q', '0'], ['page', '2'], ['debug', '1']]]['/b', [['q', '0'], ['page', '2'], ['debug', '1']]]Passed
state-cache-key scenario 5['/a', [['page', '0'], ['tag', 'x']]]['/a', [['page', '0'], ['tag', 'x']]]Passed
state-cache-key scenario 6['/b', [['q', 'a'], ['q', 'b']]]['/b', [['q', 'a'], ['q', 'b']]]Passed
remove-one-query-name scenario 1[['tag', 'x'], ['tag', 'y']][['tag', 'x'], ['tag', 'y']]Passed
remove-one-query-name scenario 2[][]Passed
remove-one-query-name scenario 3[][]Passed
remove-one-query-name scenario 4[['page', '2'], ['debug', '1']][['page', '2'], ['debug', '1']]Passed
remove-one-query-name scenario 5[['page', '0'], ['tag', 'x']][['page', '0'], ['tag', 'x']]Passed
remove-one-query-name scenario 6[][]Passed
first-value-precedence scenario 1aaPassed
first-value-precedence scenario 2Passed
first-value-precedence scenario 3NoneNonePassed
first-value-precedence scenario 400Passed
first-value-precedence scenario 5NoneNonePassed
first-value-precedence scenario 6aaPassed
debug-exclusion scenario 1[['q', 'a'], ['tag', 'x'], ['tag', 'y']][['q', 'a'], ['tag', 'x'], ['tag', 'y']]Passed
debug-exclusion scenario 2[['q', '']][['q', '']]Passed
debug-exclusion scenario 3[][]Passed
debug-exclusion scenario 4[['q', '0'], ['page', '2']][['q', '0'], ['page', '2']]Passed
debug-exclusion scenario 5[['page', '0'], ['tag', 'x']][['page', '0'], ['tag', 'x']]Passed
debug-exclusion scenario 6[['q', 'a'], ['q', 'b']][['q', 'a'], ['q', 'b']]Passed
explicit-query-key-set scenario 1['q', 'tag']['q', 'tag']Passed
explicit-query-key-set scenario 2['q']['q']Passed
explicit-query-key-set scenario 3[][]Passed
explicit-query-key-set scenario 4['debug', 'page', 'q']['debug', 'page', 'q']Passed
explicit-query-key-set scenario 5['page', 'tag']['page', 'tag']Passed
explicit-query-key-set scenario 6['q']['q']Passed
navigation-fragment-key scenario 1['/a/1', 'part']['/a/1', 'part']Passed
navigation-fragment-key scenario 2['/a', '']['/a', '']Passed
navigation-fragment-key scenario 3['/a', None]['/a', None]Passed
navigation-fragment-key scenario 4['/b', 'x']['/b', 'x']Passed
navigation-fragment-key scenario 5['/a', None]['/a', None]Passed
navigation-fragment-key scenario 6['/b', 'end']['/b', 'end']Passed

SHA-256 / 846852ffe56580a3a9deea738b2deabc89a1c6d017d353a12a623d4f36bd1658

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(operation, s):
    pairs, defaults, route, fragment = s
    if operation == 'repeated-values-retention':
        return [v for k,v in pairs if k=='tag']
    if operation == 'empty-query-value':
        return next((v for k,v in pairs if k=='q'),defaults.get('q'))
    if operation == 'query-default-merge':
        return {**defaults,**dict(pairs)}
    if operation == 'fragment-null-preservation':
        return fragment if fragment is not None else 'absent'
    if operation == 'state-cache-key':
        return (route,tuple(pairs))
    if operation == 'remove-one-query-name':
        return [(k,v) for k,v in pairs if k!='q']
    if operation == 'first-value-precedence':
        return next((v for k,v in pairs if k=='q'),None)
    if operation == 'debug-exclusion':
        return [(k,v) for k,v in pairs if k!='debug']
    if operation == 'explicit-query-key-set':
        return sorted({k for k,v in pairs})
    if operation == 'navigation-fragment-key':
        return (route,fragment)
    raise ValueError('unknown modeled operation')
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('repeated-values-retention scenario 1', solve('repeated-values-retention', ([('q','a'),('tag','x'),('tag','y')],{'q':'default'},'/a/'+str(N),'part')), ['x','y'])
check('repeated-values-retention scenario 2', solve('repeated-values-retention', ([('q','')],{'q':'default'},'/a','')), [])
check('repeated-values-retention scenario 3', solve('repeated-values-retention', ([] ,{'q':'default','page':'1'},'/a',None)), [])
check('repeated-values-retention scenario 4', solve('repeated-values-retention', ([('q','0'),('page','2'),('debug','1')],{'q':'default'},'/b','x')), [])
check('repeated-values-retention scenario 5', solve('repeated-values-retention', ([('page','0'),('tag','x')],{},'/a',None)), ['x'])
check('repeated-values-retention scenario 6', solve('repeated-values-retention', ([('q','a'),('q','b')],{},'/b','end')), [])
check('empty-query-value scenario 1', solve('empty-query-value', ([('q','a'),('tag','x'),('tag','y')],{'q':'default'},'/a/'+str(N),'part')), 'a')
check('empty-query-value scenario 2', solve('empty-query-value', ([('q','')],{'q':'default'},'/a','')), '')
check('empty-query-value scenario 3', solve('empty-query-value', ([] ,{'q':'default','page':'1'},'/a',None)), 'default')
check('empty-query-value scenario 4', solve('empty-query-value', ([('q','0'),('page','2'),('debug','1')],{'q':'default'},'/b','x')), '0')
check('empty-query-value scenario 5', solve('empty-query-value', ([('page','0'),('tag','x')],{},'/a',None)), None)
check('empty-query-value scenario 6', solve('empty-query-value', ([('q','a'),('q','b')],{},'/b','end')), 'a')
check('query-default-merge scenario 1', solve('query-default-merge', ([('q','a'),('tag','x'),('tag','y')],{'q':'default'},'/a/'+str(N),'part')), {'q':'a','tag':'y'})
check('query-default-merge scenario 2', solve('query-default-merge', ([('q','')],{'q':'default'},'/a','')), {'q':''})
check('query-default-merge scenario 3', solve('query-default-merge', ([] ,{'q':'default','page':'1'},'/a',None)), {'q':'default','page':'1'})
check('query-default-merge scenario 4', solve('query-default-merge', ([('q','0'),('page','2'),('debug','1')],{'q':'default'},'/b','x')), {'q':'0','page':'2','debug':'1'})
check('query-default-merge scenario 5', solve('query-default-merge', ([('page','0'),('tag','x')],{},'/a',None)), {'page':'0','tag':'x'})
check('query-default-merge scenario 6', solve('query-default-merge', ([('q','a'),('q','b')],{},'/b','end')), {'q':'b'})
check('fragment-null-preservation scenario 1', solve('fragment-null-preservation', ([('q','a'),('tag','x'),('tag','y')],{'q':'default'},'/a/'+str(N),'part')), 'part')
check('fragment-null-preservation scenario 2', solve('fragment-null-preservation', ([('q','')],{'q':'default'},'/a','')), '')
check('fragment-null-preservation scenario 3', solve('fragment-null-preservation', ([] ,{'q':'default','page':'1'},'/a',None)), 'absent')
check('fragment-null-preservation scenario 4', solve('fragment-null-preservation', ([('q','0'),('page','2'),('debug','1')],{'q':'default'},'/b','x')), 'x')
check('fragment-null-preservation scenario 5', solve('fragment-null-preservation', ([('page','0'),('tag','x')],{},'/a',None)), 'absent')
check('fragment-null-preservation scenario 6', solve('fragment-null-preservation', ([('q','a'),('q','b')],{},'/b','end')), 'end')
check('state-cache-key scenario 1', solve('state-cache-key', ([('q','a'),('tag','x'),('tag','y')],{'q':'default'},'/a/'+str(N),'part')), ('/a/'+str(N),(('q','a'),('tag','x'),('tag','y'))))
check('state-cache-key scenario 2', solve('state-cache-key', ([('q','')],{'q':'default'},'/a','')), ('/a',(('q',''),)))
check('state-cache-key scenario 3', solve('state-cache-key', ([] ,{'q':'default','page':'1'},'/a',None)), ('/a',()))
check('state-cache-key scenario 4', solve('state-cache-key', ([('q','0'),('page','2'),('debug','1')],{'q':'default'},'/b','x')), ('/b',(('q','0'),('page','2'),('debug','1'))))
check('state-cache-key scenario 5', solve('state-cache-key', ([('page','0'),('tag','x')],{},'/a',None)), ('/a',(('page','0'),('tag','x'))))
check('state-cache-key scenario 6', solve('state-cache-key', ([('q','a'),('q','b')],{},'/b','end')), ('/b',(('q','a'),('q','b'))))
check('remove-one-query-name scenario 1', solve('remove-one-query-name', ([('q','a'),('tag','x'),('tag','y')],{'q':'default'},'/a/'+str(N),'part')), [('tag','x'),('tag','y')])
check('remove-one-query-name scenario 2', solve('remove-one-query-name', ([('q','')],{'q':'default'},'/a','')), [])
check('remove-one-query-name scenario 3', solve('remove-one-query-name', ([] ,{'q':'default','page':'1'},'/a',None)), [])
check('remove-one-query-name scenario 4', solve('remove-one-query-name', ([('q','0'),('page','2'),('debug','1')],{'q':'default'},'/b','x')), [('page','2'),('debug','1')])
check('remove-one-query-name scenario 5', solve('remove-one-query-name', ([('page','0'),('tag','x')],{},'/a',None)), [('page','0'),('tag','x')])
check('remove-one-query-name scenario 6', solve('remove-one-query-name', ([('q','a'),('q','b')],{},'/b','end')), [])
check('first-value-precedence scenario 1', solve('first-value-precedence', ([('q','a'),('tag','x'),('tag','y')],{'q':'default'},'/a/'+str(N),'part')), 'a')
check('first-value-precedence scenario 2', solve('first-value-precedence', ([('q','')],{'q':'default'},'/a','')), '')
check('first-value-precedence scenario 3', solve('first-value-precedence', ([] ,{'q':'default','page':'1'},'/a',None)), None)
check('first-value-precedence scenario 4', solve('first-value-precedence', ([('q','0'),('page','2'),('debug','1')],{'q':'default'},'/b','x')), '0')
check('first-value-precedence scenario 5', solve('first-value-precedence', ([('page','0'),('tag','x')],{},'/a',None)), None)
check('first-value-precedence scenario 6', solve('first-value-precedence', ([('q','a'),('q','b')],{},'/b','end')), 'a')
check('debug-exclusion scenario 1', solve('debug-exclusion', ([('q','a'),('tag','x'),('tag','y')],{'q':'default'},'/a/'+str(N),'part')), [('q','a'),('tag','x'),('tag','y')])
check('debug-exclusion scenario 2', solve('debug-exclusion', ([('q','')],{'q':'default'},'/a','')), [('q','')])
check('debug-exclusion scenario 3', solve('debug-exclusion', ([] ,{'q':'default','page':'1'},'/a',None)), [])
check('debug-exclusion scenario 4', solve('debug-exclusion', ([('q','0'),('page','2'),('debug','1')],{'q':'default'},'/b','x')), [('q','0'),('page','2')])
check('debug-exclusion scenario 5', solve('debug-exclusion', ([('page','0'),('tag','x')],{},'/a',None)), [('page','0'),('tag','x')])
check('debug-exclusion scenario 6', solve('debug-exclusion', ([('q','a'),('q','b')],{},'/b','end')), [('q','a'),('q','b')])
check('explicit-query-key-set scenario 1', solve('explicit-query-key-set', ([('q','a'),('tag','x'),('tag','y')],{'q':'default'},'/a/'+str(N),'part')), ['q','tag'])
check('explicit-query-key-set scenario 2', solve('explicit-query-key-set', ([('q','')],{'q':'default'},'/a','')), ['q'])
check('explicit-query-key-set scenario 3', solve('explicit-query-key-set', ([] ,{'q':'default','page':'1'},'/a',None)), [])
check('explicit-query-key-set scenario 4', solve('explicit-query-key-set', ([('q','0'),('page','2'),('debug','1')],{'q':'default'},'/b','x')), ['debug','page','q'])
check('explicit-query-key-set scenario 5', solve('explicit-query-key-set', ([('page','0'),('tag','x')],{},'/a',None)), ['page','tag'])
check('explicit-query-key-set scenario 6', solve('explicit-query-key-set', ([('q','a'),('q','b')],{},'/b','end')), ['q'])
check('navigation-fragment-key scenario 1', solve('navigation-fragment-key', ([('q','a'),('tag','x'),('tag','y')],{'q':'default'},'/a/'+str(N),'part')), ('/a/'+str(N),'part'))
check('navigation-fragment-key scenario 2', solve('navigation-fragment-key', ([('q','')],{'q':'default'},'/a','')), ('/a',''))
check('navigation-fragment-key scenario 3', solve('navigation-fragment-key', ([] ,{'q':'default','page':'1'},'/a',None)), ('/a',None))
check('navigation-fragment-key scenario 4', solve('navigation-fragment-key', ([('q','0'),('page','2'),('debug','1')],{'q':'default'},'/b','x')), ('/b','x'))
check('navigation-fragment-key scenario 5', solve('navigation-fragment-key', ([('page','0'),('tag','x')],{},'/a',None)), ('/a',None))
check('navigation-fragment-key scenario 6', solve('navigation-fragment-key', ([('q','a'),('q','b')],{},'/b','end')), ('/b','end'))
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
repeated-values-retention scenario 1['x', 'y']['x', 'y']Passed
repeated-values-retention scenario 2[][]Passed
repeated-values-retention scenario 3[][]Passed
repeated-values-retention scenario 4[][]Passed
repeated-values-retention scenario 5['x']['x']Passed
repeated-values-retention scenario 6[][]Passed
empty-query-value scenario 1aaPassed
empty-query-value scenario 2Passed
empty-query-value scenario 3defaultdefaultPassed
empty-query-value scenario 400Passed
empty-query-value scenario 5NoneNonePassed
empty-query-value scenario 6aaPassed
query-default-merge scenario 1{'q': 'a', 'tag': 'y'}{'q': 'a', 'tag': 'y'}Passed
query-default-merge scenario 2{'q': ''}{'q': ''}Passed
query-default-merge scenario 3{'page': '1', 'q': 'default'}{'page': '1', 'q': 'default'}Passed
query-default-merge scenario 4{'debug': '1', 'page': '2', 'q': '0'}{'debug': '1', 'page': '2', 'q': '0'}Passed
query-default-merge scenario 5{'page': '0', 'tag': 'x'}{'page': '0', 'tag': 'x'}Passed
query-default-merge scenario 6{'q': 'b'}{'q': 'b'}Passed
fragment-null-preservation scenario 1partpartPassed
fragment-null-preservation scenario 2Passed
fragment-null-preservation scenario 3absentabsentPassed
fragment-null-preservation scenario 4xxPassed
fragment-null-preservation scenario 5absentabsentPassed
fragment-null-preservation scenario 6endendPassed
state-cache-key scenario 1['/a/1', [['q', 'a'], ['tag', 'x'], ['tag', 'y']]]['/a/1', [['q', 'a'], ['tag', 'x'], ['tag', 'y']]]Passed
state-cache-key scenario 2['/a', [['q', '']]]['/a', [['q', '']]]Passed
state-cache-key scenario 3['/a', []]['/a', []]Passed
state-cache-key scenario 4['/b', [['q', '0'], ['page', '2'], ['debug', '1']]]['/b', [['q', '0'], ['page', '2'], ['debug', '1']]]Passed
state-cache-key scenario 5['/a', [['page', '0'], ['tag', 'x']]]['/a', [['page', '0'], ['tag', 'x']]]Passed
state-cache-key scenario 6['/b', [['q', 'a'], ['q', 'b']]]['/b', [['q', 'a'], ['q', 'b']]]Passed
remove-one-query-name scenario 1[['tag', 'x'], ['tag', 'y']][['tag', 'x'], ['tag', 'y']]Passed
remove-one-query-name scenario 2[][]Passed
remove-one-query-name scenario 3[][]Passed
remove-one-query-name scenario 4[['page', '2'], ['debug', '1']][['page', '2'], ['debug', '1']]Passed
remove-one-query-name scenario 5[['page', '0'], ['tag', 'x']][['page', '0'], ['tag', 'x']]Passed
remove-one-query-name scenario 6[][]Passed
first-value-precedence scenario 1aaPassed
first-value-precedence scenario 2Passed
first-value-precedence scenario 3NoneNonePassed
first-value-precedence scenario 400Passed
first-value-precedence scenario 5NoneNonePassed
first-value-precedence scenario 6aaPassed
debug-exclusion scenario 1[['q', 'a'], ['tag', 'x'], ['tag', 'y']][['q', 'a'], ['tag', 'x'], ['tag', 'y']]Passed
debug-exclusion scenario 2[['q', '']][['q', '']]Passed
debug-exclusion scenario 3[][]Passed
debug-exclusion scenario 4[['q', '0'], ['page', '2']][['q', '0'], ['page', '2']]Passed
debug-exclusion scenario 5[['page', '0'], ['tag', 'x']][['page', '0'], ['tag', 'x']]Passed
debug-exclusion scenario 6[['q', 'a'], ['q', 'b']][['q', 'a'], ['q', 'b']]Passed
explicit-query-key-set scenario 1['q', 'tag']['q', 'tag']Passed
explicit-query-key-set scenario 2['q']['q']Passed
explicit-query-key-set scenario 3[][]Passed
explicit-query-key-set scenario 4['debug', 'page', 'q']['debug', 'page', 'q']Passed
explicit-query-key-set scenario 5['page', 'tag']['page', 'tag']Passed
explicit-query-key-set scenario 6['q']['q']Passed
navigation-fragment-key scenario 1['/a/1', 'part']['/a/1', 'part']Passed
navigation-fragment-key scenario 2['/a', '']['/a', '']Passed
navigation-fragment-key scenario 3['/a', None]['/a', None]Passed
navigation-fragment-key scenario 4['/b', 'x']['/b', 'x']Passed
navigation-fragment-key scenario 5['/a', None]['/a', None]Passed
navigation-fragment-key scenario 6['/b', 'end']['/b', 'end']Passed

SHA-256 / 47a6968de86aa78ac2d2aa35b1b66c6c8a2f197cdd519430c5b6570b56782b57

Verification & scope

Only the explicitly specified operations and finite deterministic records are modeled; no browser or framework conformance is claimed. 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:40:50.943428+00:00.

Case digest / a636e67088afa1c05d93f7eb95b250c4da001e8d938901b1632aaa405b1f29d6