{ "name": "sidebar_survives_ri_scroll", "cols": 80, "rows": 24, "scripts": [ { "name": "riburst", "body": "#!/bin/sh\n# Emulates codex's startup sequence: DECSTBM the full child\n# viewport, CUP to the top of the scroll region, and burst 8 RIs\n# (ESC M). RI at the top of the scroll region scrolls the region\n# down. The host's scroll region spans every column, so without\n# the sidebar cache-invalidation fix the right-hand session tree\n# gets dragged downward and the cache hides the broken state.\nprintf '\\033[1;21r'\nprintf '\\033[1;1H'\nprintf '\\033M\\033M\\033M\\033M\\033M\\033M\\033M\\033M'\nprintf '\\033[1;1HRIBURST READY\\n'\nsleep 5\n" } ], "steps": [ { "type": "mcp_call", "method": "spawn_process", "params": { "kind": "command", "argv": ["riburst"], "name": "riburst" } }, { "type": "wait_text", "contains": "RIBURST READY", "timeout_ms": 5000 }, { "type": "wait_stable", "timeout_ms": 2000 }, { "type": "assert_contains", "contains": "Processes" }, { "type": "assert_contains", "contains": "Agent Tree" }, { "type": "assert_contains", "contains": "● riburst" }, { "type": "assert_contains", "contains": "Scratchpads" }, { "type": "assert_regex", "regex": "(?s)Processes[^\\n]*\\n[^─\\n]*─[─]+[^\\n]*\\n[^●\\n]*● riburst", "timeout_ms": 2000 } ] }