# R2b — the Desk row, Reveal all, the theme toggle: every falsifier the # contract claims (docs/contracts/r2b_desk_reveal_theme.contract.md), and the # change each forbids. Merge 1 is D2 + D2b (the blur half); merge 2 adds D1 + D3. unit = "reveal all, the booth blur toggle (merge 1)" [[mutation]] label = "D2 reveal all does not lift the tile's blur" file = "booth/templates/base.html" test = "tests/test_flow_browser.py::test_reveal_all_reveals_every_blurred_surface_and_survives_the_next_page" old = ''' .reveal-all .item.blurred img,.reveal-all .item.blurred video,''' new = ''' .reveal-all-OFF .item.blurred img,.reveal-all .item.blurred video,''' [[mutation]] label = "D2 no pre-paint re-application: the next page of the reel is blurred again" file = "booth/templates/base.html" test = "tests/test_flow_browser.py::test_reveal_all_reveals_every_blurred_surface_and_survives_the_next_page" old = ''' if (b !== null && sessionStorage.getItem('booth.reveal:' + b) === '1') d.classList.add('reveal-all');''' new = ''' if (false) d.classList.add('reveal-all');''' [[mutation]] label = "D2 the reveal is not scoped to the booth (any reveal in the tab reveals every booth)" file = "booth/templates/base.html" test = "tests/test_flow_browser.py::test_reveal_all_on_booth_a_does_not_reveal_booth_b_or_the_desk" old = ''' if (b !== null && sessionStorage.getItem('booth.reveal:' + b) === '1') d.classList.add('reveal-all');''' new = ''' if (b !== null && sessionStorage.length > 0) d.classList.add('reveal-all');''' [[mutation]] label = "D2 per-tile reveal buttons do not stand down under reveal all" file = "booth/templates/base.html" test = "tests/test_flow_browser.py::test_reveal_all_survives_an_in_place_save" old = ''' .reveal-all .item.blurred .reveal,.reveal-all #vreveal{display:none}''' new = ''' .reveal-all-OFF .item.blurred .reveal,.reveal-all #vreveal{display:none}''' [[mutation]] label = "D2 blur again wipes each item's own reveal" file = "booth/templates/base.html" test = "tests/test_flow_browser.py::test_blur_again_restores_each_items_own_reveal" old = ''' var on = d.classList.toggle('reveal-all'); try {''' new = ''' var on = d.classList.toggle('reveal-all'); document.querySelectorAll('.item.revealed').forEach(function (i) { i.classList.remove('revealed'); }); try {''' [[mutation]] label = "D2 a storage write that throws swallows the click" file = "booth/templates/base.html" test = "tests/test_flow_browser.py::test_reveal_all_never_shows_without_js_and_a_storage_failure_still_applies_the_click" old = ''' var on = d.classList.toggle('reveal-all'); try {''' new = ''' sessionStorage.setItem(key, '1'); var on = d.classList.toggle('reveal-all'); try {''' [[mutation]] label = "D2 the control shows without JS (server markup not hidden)" file = "booth/templates/booth.html" test = "tests/test_flow_browser.py::test_reveal_all_never_shows_without_js_and_a_storage_failure_still_applies_the_click" old = ''' {% if all_items | selectattr('blurred') | list %}