From 704e8cd809beaa5118808419286997b1fb726c09 Mon Sep 17 00:00:00 2001 From: Vuong Hoang Date: Wed, 23 Sep 2026 11:27:34 -0700 Subject: [PATCH] fix(desk): the heid bug-hunt panel on the row controls (round "Slate", 4/4) - Touch: on a coarse pointer every row control is at least 28px square again (32px), and wipe stands clear of the zip link. The move onto the facts line had dropped the deliberate 28px floor to ~21px, 4-6px from zip; with scripts off no confirm fires, so a mis-tap on wipe is the delete. The zip link no longer breaks between its glyph and its word, and each separator is glued to the item after it. - The wipe dialog shows the name as it should be read: control and bidi formatting characters in an agent-made name show as U+FFFD, so U+202E or a newline cannot rewrite what the operator approves. An unknown data-confirm word now prompts generically instead of submitting unguarded (fail closed). - No page scrolls sideways: `code` wraps anywhere, so a long unbreakable install path in the footer or the empty Desk no longer widens every page. The overflow test now sweeps 390/720/850/1000/1400 with the heaviest row the Desk draws, and compares scrollWidth with the page's own clientWidth. Its first fixture used a hyphenated path, which wrapped by itself; the test passed with the bug present until the path became one unbreakable run. r2_flow.toml: 27/27 proved. 749 passed. --- booth/templates/base.html | 15 +++- booth/templates/index.html | 24 +++-- docs/contracts/r2_flow.contract.md | 12 +++ tests/mutations/r2_flow.toml | 58 +++++++++++- tests/test_flow_browser.py | 137 +++++++++++++++++++++++++---- 5 files changed, 222 insertions(+), 24 deletions(-) diff --git a/booth/templates/base.html b/booth/templates/base.html index 45b4f5c..bd2f110 100644 --- a/booth/templates/base.html +++ b/booth/templates/base.html @@ -51,8 +51,11 @@ :focus-visible{outline:2px solid var(--border-focus);outline-offset:2px} a{color:var(--text-link);text-decoration:none} a:hover{color:var(--text-link-hover);text-decoration:underline} + /* overflow-wrap: a path is one unbreakable run to the line breaker, and the + footer and the empty Desk print the install path — a long one scrolled + every page sideways. Inside
 nothing wraps anyway (white-space). */
   code{font-family:var(--font-mono);font-size:.9em;background:var(--surface-sunken);color:var(--text-body);
-    padding:1px 6px;border-radius:var(--radius-sm);border:1px solid var(--border-subtle)}
+    padding:1px 6px;border-radius:var(--radius-sm);border:1px solid var(--border-subtle);overflow-wrap:anywhere}
 
   /* ---- base controls ----------------------------------------------------
      A bare