Skip to content

Vendor-pull slice 4d: restore Android tablet thread controls #144

Description

@gannonh

Status

Verified

Verified: 2026-08-29T22:02:15Z

Goal

Android tablets and unfolded foldables show the same useful thread controls as the phone home surface. New-thread controls remain visible above the keyboard.

Context

This is slice 4d of #124. It ports the Android tablet behavior from upstream PR pingdotgg/t3code#5385 after the thread navigation work in #142.

Phase 6 #147 owns the shared primary mobile Kata lockup. This slice reuses that established lockup in the tablet sidebar. It does not redesign shared branding.

Constraints and non-goals

  • Reuse the established compact Kata lockup. Do not introduce another brand implementation.
  • Keep brand text accessible and allow system font scaling.
  • Apply the split navigation behavior only at the existing Android tablet or unfolded-foldable breakpoint.
  • Preserve filtering, settings, new-thread actions, and enough list space to reach the final thread.
  • Hide the native detail header when no thread is selected.
  • Keep the new-thread action above the keyboard and system insets.
  • Do not change iOS navigation, phone navigation, sidebar collapse behavior, thread data, or server contracts.

Acceptance criteria

  • At the existing Android split-view breakpoint, the persistent sidebar shows the compact Kata lockup instead of a generic Threads title.
  • The tablet sidebar exposes thread filtering, Settings, and a new-thread action.
  • The final thread row remains reachable without being covered by the floating action button or system insets.
  • An empty detail pane does not render an extra native header.
  • Opening the keyboard does not cover the new-thread action.
  • Android phone navigation, iOS navigation, and the compact primary header remain unchanged.
  • Focused mobile tests and type checking pass, followed by an authorized Android tablet or unfolded-foldable walkthrough.

Architecture

  • Consume the compact brand component delivered by Phase 6: launch Kata Code Dev on iOS Simulator #147 in the existing tablet sidebar header.
  • Keep breakpoint selection, route options, sidebar actions, and floating-action-button placement within the existing Android navigation flow.
  • Do not add contracts, server state, or a second responsive-layout abstraction.

Delivery slice

One implementation flow owns the Android split-view sidebar, action placement, empty-detail header behavior, and keyboard-safe spacing. These behaviors share the same breakpoint and must be demonstrated together.

Demonstration

On an Android tablet or unfolded foldable:

  1. Open the home screen and show the persistent sidebar with the Kata lockup.
  2. Filter the thread list, open Settings, and return.
  3. Scroll to the final thread and show that it is unobscured.
  4. Start a new thread, focus the composer, and show the action remains above the keyboard.
  5. Return to an empty detail pane and show that no duplicate native header appears.
  6. Capture the equivalent phone layout to show that compact navigation is unchanged.

Verification

  • Add or update focused pure layout and route-option tests for the split breakpoint, empty detail state, and action insets.
  • Run vp run --filter @kata-sh/code-mobile typecheck.
  • Run the focused mobile tests touched by this slice.
  • After explicit computer-use authorization, use the project mobile verification flow on an Android tablet or unfolded-foldable emulator.
  • Record screenshots for the tablet sidebar, keyboard-open composer, empty detail pane, and unchanged phone layout.
  • Verify the reused brand component has the expected accessible label and allows font scaling.

Risks and mitigations

  • The compact header can consume too much sidebar width. Reuse the existing component and test at the supported split breakpoint.
  • Floating controls can obscure the last row or keyboard. Derive placement from existing safe-area and keyboard insets and verify both states.
  • Route options can leak into phone or iOS navigation. Keep the condition at the Android split-view boundary and cover the reverse states.

Build handoff

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementRequested improvement or new capability.kind:sub-specChild spec produced by decomposing an epic.status:verifiedAcceptance evidence accepted.

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

      , 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
       blocks
      (function() {
      function addCopyButtons() {
      document.querySelectorAll('pre code').forEach(function(codeBlock) {
      if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
      codeBlock.parentElement.setAttribute('data-copy-added', 'true');
      var btn = document.createElement('button');
      btn.textContent = 'Copy';
      btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
      btn.onmouseover = function() { this.style.opacity = '1'; };
      btn.onmouseout = function() { this.style.opacity = '0.7'; };
      btn.onclick = function() {
      navigator.clipboard.writeText(codeBlock.textContent).then(function() {
      btn.textContent = 'Copied!';
      setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
      });
      };
      codeBlock.parentElement.style.position = 'relative';
      codeBlock.parentElement.appendChild(btn);
      });
      }
      addCopyButtons();
      // Re-run on dynamic content
      var observer = new MutationObserver(addCopyButtons);
      observer.observe(document.body, { childList: true, subtree: true });
      })();
      }
      } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
      })();
      (function(){
      try {
      var __m = "github.com";
      var __re = new RegExp('^' + "github\\.com" + '
      Vendor-pull slice 4d: restore Android tablet thread controls · Issue #144 · gannonh/kata-code · GitHub
      Skip to content

      Vendor-pull slice 4d: restore Android tablet thread controls #144

      Description

      @gannonh

      Status

      Verified

      Verified: 2026-08-29T22:02:15Z

      Goal

      Android tablets and unfolded foldables show the same useful thread controls as the phone home surface. New-thread controls remain visible above the keyboard.

      Context

      This is slice 4d of #124. It ports the Android tablet behavior from upstream PR pingdotgg/t3code#5385 after the thread navigation work in #142.

      Phase 6 #147 owns the shared primary mobile Kata lockup. This slice reuses that established lockup in the tablet sidebar. It does not redesign shared branding.

      Constraints and non-goals

      • Reuse the established compact Kata lockup. Do not introduce another brand implementation.
      • Keep brand text accessible and allow system font scaling.
      • Apply the split navigation behavior only at the existing Android tablet or unfolded-foldable breakpoint.
      • Preserve filtering, settings, new-thread actions, and enough list space to reach the final thread.
      • Hide the native detail header when no thread is selected.
      • Keep the new-thread action above the keyboard and system insets.
      • Do not change iOS navigation, phone navigation, sidebar collapse behavior, thread data, or server contracts.

      Acceptance criteria

      • At the existing Android split-view breakpoint, the persistent sidebar shows the compact Kata lockup instead of a generic Threads title.
      • The tablet sidebar exposes thread filtering, Settings, and a new-thread action.
      • The final thread row remains reachable without being covered by the floating action button or system insets.
      • An empty detail pane does not render an extra native header.
      • Opening the keyboard does not cover the new-thread action.
      • Android phone navigation, iOS navigation, and the compact primary header remain unchanged.
      • Focused mobile tests and type checking pass, followed by an authorized Android tablet or unfolded-foldable walkthrough.

      Architecture

      • Consume the compact brand component delivered by Phase 6: launch Kata Code Dev on iOS Simulator #147 in the existing tablet sidebar header.
      • Keep breakpoint selection, route options, sidebar actions, and floating-action-button placement within the existing Android navigation flow.
      • Do not add contracts, server state, or a second responsive-layout abstraction.

      Delivery slice

      One implementation flow owns the Android split-view sidebar, action placement, empty-detail header behavior, and keyboard-safe spacing. These behaviors share the same breakpoint and must be demonstrated together.

      Demonstration

      On an Android tablet or unfolded foldable:

      1. Open the home screen and show the persistent sidebar with the Kata lockup.
      2. Filter the thread list, open Settings, and return.
      3. Scroll to the final thread and show that it is unobscured.
      4. Start a new thread, focus the composer, and show the action remains above the keyboard.
      5. Return to an empty detail pane and show that no duplicate native header appears.
      6. Capture the equivalent phone layout to show that compact navigation is unchanged.

      Verification

      • Add or update focused pure layout and route-option tests for the split breakpoint, empty detail state, and action insets.
      • Run vp run --filter @kata-sh/code-mobile typecheck.
      • Run the focused mobile tests touched by this slice.
      • After explicit computer-use authorization, use the project mobile verification flow on an Android tablet or unfolded-foldable emulator.
      • Record screenshots for the tablet sidebar, keyboard-open composer, empty detail pane, and unchanged phone layout.
      • Verify the reused brand component has the expected accessible label and allows font scaling.

      Risks and mitigations

      • The compact header can consume too much sidebar width. Reuse the existing component and test at the supported split breakpoint.
      • Floating controls can obscure the last row or keyboard. Derive placement from existing safe-area and keyboard insets and verify both states.
      • Route options can leak into phone or iOS navigation. Keep the condition at the Android split-view boundary and cover the reverse states.

      Build handoff

      Metadata

      Metadata

      Assignees

      No one assigned

        Labels

        enhancementRequested improvement or new capability.kind:sub-specChild spec produced by decomposing an epic.status:verifiedAcceptance evidence accepted.

        Projects

        No projects

          Milestone

          No milestone

          Relationships

          None yet

          Development

          No branches or pull requests

          Issue actions

          , 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Vendor-pull slice 4d: restore Android tablet thread controls · Issue #144 · gannonh/kata-code · GitHub
          Skip to content

          Vendor-pull slice 4d: restore Android tablet thread controls #144

          Description

          @gannonh

          Status

          Verified

          Verified: 2026-08-29T22:02:15Z

          Goal

          Android tablets and unfolded foldables show the same useful thread controls as the phone home surface. New-thread controls remain visible above the keyboard.

          Context

          This is slice 4d of #124. It ports the Android tablet behavior from upstream PR pingdotgg/t3code#5385 after the thread navigation work in #142.

          Phase 6 #147 owns the shared primary mobile Kata lockup. This slice reuses that established lockup in the tablet sidebar. It does not redesign shared branding.

          Constraints and non-goals

          • Reuse the established compact Kata lockup. Do not introduce another brand implementation.
          • Keep brand text accessible and allow system font scaling.
          • Apply the split navigation behavior only at the existing Android tablet or unfolded-foldable breakpoint.
          • Preserve filtering, settings, new-thread actions, and enough list space to reach the final thread.
          • Hide the native detail header when no thread is selected.
          • Keep the new-thread action above the keyboard and system insets.
          • Do not change iOS navigation, phone navigation, sidebar collapse behavior, thread data, or server contracts.

          Acceptance criteria

          • At the existing Android split-view breakpoint, the persistent sidebar shows the compact Kata lockup instead of a generic Threads title.
          • The tablet sidebar exposes thread filtering, Settings, and a new-thread action.
          • The final thread row remains reachable without being covered by the floating action button or system insets.
          • An empty detail pane does not render an extra native header.
          • Opening the keyboard does not cover the new-thread action.
          • Android phone navigation, iOS navigation, and the compact primary header remain unchanged.
          • Focused mobile tests and type checking pass, followed by an authorized Android tablet or unfolded-foldable walkthrough.

          Architecture

          • Consume the compact brand component delivered by Phase 6: launch Kata Code Dev on iOS Simulator #147 in the existing tablet sidebar header.
          • Keep breakpoint selection, route options, sidebar actions, and floating-action-button placement within the existing Android navigation flow.
          • Do not add contracts, server state, or a second responsive-layout abstraction.

          Delivery slice

          One implementation flow owns the Android split-view sidebar, action placement, empty-detail header behavior, and keyboard-safe spacing. These behaviors share the same breakpoint and must be demonstrated together.

          Demonstration

          On an Android tablet or unfolded foldable:

          1. Open the home screen and show the persistent sidebar with the Kata lockup.
          2. Filter the thread list, open Settings, and return.
          3. Scroll to the final thread and show that it is unobscured.
          4. Start a new thread, focus the composer, and show the action remains above the keyboard.
          5. Return to an empty detail pane and show that no duplicate native header appears.
          6. Capture the equivalent phone layout to show that compact navigation is unchanged.

          Verification

          • Add or update focused pure layout and route-option tests for the split breakpoint, empty detail state, and action insets.
          • Run vp run --filter @kata-sh/code-mobile typecheck.
          • Run the focused mobile tests touched by this slice.
          • After explicit computer-use authorization, use the project mobile verification flow on an Android tablet or unfolded-foldable emulator.
          • Record screenshots for the tablet sidebar, keyboard-open composer, empty detail pane, and unchanged phone layout.
          • Verify the reused brand component has the expected accessible label and allows font scaling.

          Risks and mitigations

          • The compact header can consume too much sidebar width. Reuse the existing component and test at the supported split breakpoint.
          • Floating controls can obscure the last row or keyboard. Derive placement from existing safe-area and keyboard insets and verify both states.
          • Route options can leak into phone or iOS navigation. Keep the condition at the Android split-view boundary and cover the reverse states.

          Build handoff

          Metadata

          Metadata

          Assignees

          No one assigned

            Labels

            enhancementRequested improvement or new capability.kind:sub-specChild spec produced by decomposing an epic.status:verifiedAcceptance evidence accepted.

            Projects

            No projects

              Milestone

              No milestone

              Relationships

              None yet

              Development

              No branches or pull requests

              Issue actions

              , 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Vendor-pull slice 4d: restore Android tablet thread controls · Issue #144 · gannonh/kata-code · GitHub
              Skip to content

              Vendor-pull slice 4d: restore Android tablet thread controls #144

              Description

              @gannonh

              Status

              Verified

              Verified: 2026-08-29T22:02:15Z

              Goal

              Android tablets and unfolded foldables show the same useful thread controls as the phone home surface. New-thread controls remain visible above the keyboard.

              Context

              This is slice 4d of #124. It ports the Android tablet behavior from upstream PR pingdotgg/t3code#5385 after the thread navigation work in #142.

              Phase 6 #147 owns the shared primary mobile Kata lockup. This slice reuses that established lockup in the tablet sidebar. It does not redesign shared branding.

              Constraints and non-goals

              • Reuse the established compact Kata lockup. Do not introduce another brand implementation.
              • Keep brand text accessible and allow system font scaling.
              • Apply the split navigation behavior only at the existing Android tablet or unfolded-foldable breakpoint.
              • Preserve filtering, settings, new-thread actions, and enough list space to reach the final thread.
              • Hide the native detail header when no thread is selected.
              • Keep the new-thread action above the keyboard and system insets.
              • Do not change iOS navigation, phone navigation, sidebar collapse behavior, thread data, or server contracts.

              Acceptance criteria

              • At the existing Android split-view breakpoint, the persistent sidebar shows the compact Kata lockup instead of a generic Threads title.
              • The tablet sidebar exposes thread filtering, Settings, and a new-thread action.
              • The final thread row remains reachable without being covered by the floating action button or system insets.
              • An empty detail pane does not render an extra native header.
              • Opening the keyboard does not cover the new-thread action.
              • Android phone navigation, iOS navigation, and the compact primary header remain unchanged.
              • Focused mobile tests and type checking pass, followed by an authorized Android tablet or unfolded-foldable walkthrough.

              Architecture

              • Consume the compact brand component delivered by Phase 6: launch Kata Code Dev on iOS Simulator #147 in the existing tablet sidebar header.
              • Keep breakpoint selection, route options, sidebar actions, and floating-action-button placement within the existing Android navigation flow.
              • Do not add contracts, server state, or a second responsive-layout abstraction.

              Delivery slice

              One implementation flow owns the Android split-view sidebar, action placement, empty-detail header behavior, and keyboard-safe spacing. These behaviors share the same breakpoint and must be demonstrated together.

              Demonstration

              On an Android tablet or unfolded foldable:

              1. Open the home screen and show the persistent sidebar with the Kata lockup.
              2. Filter the thread list, open Settings, and return.
              3. Scroll to the final thread and show that it is unobscured.
              4. Start a new thread, focus the composer, and show the action remains above the keyboard.
              5. Return to an empty detail pane and show that no duplicate native header appears.
              6. Capture the equivalent phone layout to show that compact navigation is unchanged.

              Verification

              • Add or update focused pure layout and route-option tests for the split breakpoint, empty detail state, and action insets.
              • Run vp run --filter @kata-sh/code-mobile typecheck.
              • Run the focused mobile tests touched by this slice.
              • After explicit computer-use authorization, use the project mobile verification flow on an Android tablet or unfolded-foldable emulator.
              • Record screenshots for the tablet sidebar, keyboard-open composer, empty detail pane, and unchanged phone layout.
              • Verify the reused brand component has the expected accessible label and allows font scaling.

              Risks and mitigations

              • The compact header can consume too much sidebar width. Reuse the existing component and test at the supported split breakpoint.
              • Floating controls can obscure the last row or keyboard. Derive placement from existing safe-area and keyboard insets and verify both states.
              • Route options can leak into phone or iOS navigation. Keep the condition at the Android split-view boundary and cover the reverse states.

              Build handoff

              Metadata

              Metadata

              Assignees

              No one assigned

                Labels

                enhancementRequested improvement or new capability.kind:sub-specChild spec produced by decomposing an epic.status:verifiedAcceptance evidence accepted.

                Projects

                No projects

                  Milestone

                  No milestone

                  Relationships

                  None yet

                  Development

                  No branches or pull requests

                  Issue actions

                  , 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' Vendor-pull slice 4d: restore Android tablet thread controls · Issue #144 · gannonh/kata-code · GitHub
                  Skip to content

                  Vendor-pull slice 4d: restore Android tablet thread controls #144

                  Description

                  @gannonh

                  Status

                  Verified

                  Verified: 2026-08-29T22:02:15Z

                  Goal

                  Android tablets and unfolded foldables show the same useful thread controls as the phone home surface. New-thread controls remain visible above the keyboard.

                  Context

                  This is slice 4d of #124. It ports the Android tablet behavior from upstream PR pingdotgg/t3code#5385 after the thread navigation work in #142.

                  Phase 6 #147 owns the shared primary mobile Kata lockup. This slice reuses that established lockup in the tablet sidebar. It does not redesign shared branding.

                  Constraints and non-goals

                  • Reuse the established compact Kata lockup. Do not introduce another brand implementation.
                  • Keep brand text accessible and allow system font scaling.
                  • Apply the split navigation behavior only at the existing Android tablet or unfolded-foldable breakpoint.
                  • Preserve filtering, settings, new-thread actions, and enough list space to reach the final thread.
                  • Hide the native detail header when no thread is selected.
                  • Keep the new-thread action above the keyboard and system insets.
                  • Do not change iOS navigation, phone navigation, sidebar collapse behavior, thread data, or server contracts.

                  Acceptance criteria

                  • At the existing Android split-view breakpoint, the persistent sidebar shows the compact Kata lockup instead of a generic Threads title.
                  • The tablet sidebar exposes thread filtering, Settings, and a new-thread action.
                  • The final thread row remains reachable without being covered by the floating action button or system insets.
                  • An empty detail pane does not render an extra native header.
                  • Opening the keyboard does not cover the new-thread action.
                  • Android phone navigation, iOS navigation, and the compact primary header remain unchanged.
                  • Focused mobile tests and type checking pass, followed by an authorized Android tablet or unfolded-foldable walkthrough.

                  Architecture

                  • Consume the compact brand component delivered by Phase 6: launch Kata Code Dev on iOS Simulator #147 in the existing tablet sidebar header.
                  • Keep breakpoint selection, route options, sidebar actions, and floating-action-button placement within the existing Android navigation flow.
                  • Do not add contracts, server state, or a second responsive-layout abstraction.

                  Delivery slice

                  One implementation flow owns the Android split-view sidebar, action placement, empty-detail header behavior, and keyboard-safe spacing. These behaviors share the same breakpoint and must be demonstrated together.

                  Demonstration

                  On an Android tablet or unfolded foldable:

                  1. Open the home screen and show the persistent sidebar with the Kata lockup.
                  2. Filter the thread list, open Settings, and return.
                  3. Scroll to the final thread and show that it is unobscured.
                  4. Start a new thread, focus the composer, and show the action remains above the keyboard.
                  5. Return to an empty detail pane and show that no duplicate native header appears.
                  6. Capture the equivalent phone layout to show that compact navigation is unchanged.

                  Verification

                  • Add or update focused pure layout and route-option tests for the split breakpoint, empty detail state, and action insets.
                  • Run vp run --filter @kata-sh/code-mobile typecheck.
                  • Run the focused mobile tests touched by this slice.
                  • After explicit computer-use authorization, use the project mobile verification flow on an Android tablet or unfolded-foldable emulator.
                  • Record screenshots for the tablet sidebar, keyboard-open composer, empty detail pane, and unchanged phone layout.
                  • Verify the reused brand component has the expected accessible label and allows font scaling.

                  Risks and mitigations

                  • The compact header can consume too much sidebar width. Reuse the existing component and test at the supported split breakpoint.
                  • Floating controls can obscure the last row or keyboard. Derive placement from existing safe-area and keyboard insets and verify both states.
                  • Route options can leak into phone or iOS navigation. Keep the condition at the Android split-view boundary and cover the reverse states.

                  Build handoff

                  Metadata

                  Metadata

                  Assignees

                  No one assigned

                    Labels

                    enhancementRequested improvement or new capability.kind:sub-specChild spec produced by decomposing an epic.status:verifiedAcceptance evidence accepted.

                    Projects

                    No projects

                      Milestone

                      No milestone

                      Relationships

                      None yet

                      Development

                      No branches or pull requests

                      Issue actions

                      , 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Vendor-pull slice 4d: restore Android tablet thread controls · Issue #144 · gannonh/kata-code · GitHub
                      Skip to content

                      Vendor-pull slice 4d: restore Android tablet thread controls #144

                      Description

                      @gannonh

                      Status

                      Verified

                      Verified: 2026-08-29T22:02:15Z

                      Goal

                      Android tablets and unfolded foldables show the same useful thread controls as the phone home surface. New-thread controls remain visible above the keyboard.

                      Context

                      This is slice 4d of #124. It ports the Android tablet behavior from upstream PR pingdotgg/t3code#5385 after the thread navigation work in #142.

                      Phase 6 #147 owns the shared primary mobile Kata lockup. This slice reuses that established lockup in the tablet sidebar. It does not redesign shared branding.

                      Constraints and non-goals

                      • Reuse the established compact Kata lockup. Do not introduce another brand implementation.
                      • Keep brand text accessible and allow system font scaling.
                      • Apply the split navigation behavior only at the existing Android tablet or unfolded-foldable breakpoint.
                      • Preserve filtering, settings, new-thread actions, and enough list space to reach the final thread.
                      • Hide the native detail header when no thread is selected.
                      • Keep the new-thread action above the keyboard and system insets.
                      • Do not change iOS navigation, phone navigation, sidebar collapse behavior, thread data, or server contracts.

                      Acceptance criteria

                      • At the existing Android split-view breakpoint, the persistent sidebar shows the compact Kata lockup instead of a generic Threads title.
                      • The tablet sidebar exposes thread filtering, Settings, and a new-thread action.
                      • The final thread row remains reachable without being covered by the floating action button or system insets.
                      • An empty detail pane does not render an extra native header.
                      • Opening the keyboard does not cover the new-thread action.
                      • Android phone navigation, iOS navigation, and the compact primary header remain unchanged.
                      • Focused mobile tests and type checking pass, followed by an authorized Android tablet or unfolded-foldable walkthrough.

                      Architecture

                      • Consume the compact brand component delivered by Phase 6: launch Kata Code Dev on iOS Simulator #147 in the existing tablet sidebar header.
                      • Keep breakpoint selection, route options, sidebar actions, and floating-action-button placement within the existing Android navigation flow.
                      • Do not add contracts, server state, or a second responsive-layout abstraction.

                      Delivery slice

                      One implementation flow owns the Android split-view sidebar, action placement, empty-detail header behavior, and keyboard-safe spacing. These behaviors share the same breakpoint and must be demonstrated together.

                      Demonstration

                      On an Android tablet or unfolded foldable:

                      1. Open the home screen and show the persistent sidebar with the Kata lockup.
                      2. Filter the thread list, open Settings, and return.
                      3. Scroll to the final thread and show that it is unobscured.
                      4. Start a new thread, focus the composer, and show the action remains above the keyboard.
                      5. Return to an empty detail pane and show that no duplicate native header appears.
                      6. Capture the equivalent phone layout to show that compact navigation is unchanged.

                      Verification

                      • Add or update focused pure layout and route-option tests for the split breakpoint, empty detail state, and action insets.
                      • Run vp run --filter @kata-sh/code-mobile typecheck.
                      • Run the focused mobile tests touched by this slice.
                      • After explicit computer-use authorization, use the project mobile verification flow on an Android tablet or unfolded-foldable emulator.
                      • Record screenshots for the tablet sidebar, keyboard-open composer, empty detail pane, and unchanged phone layout.
                      • Verify the reused brand component has the expected accessible label and allows font scaling.

                      Risks and mitigations

                      • The compact header can consume too much sidebar width. Reuse the existing component and test at the supported split breakpoint.
                      • Floating controls can obscure the last row or keyboard. Derive placement from existing safe-area and keyboard insets and verify both states.
                      • Route options can leak into phone or iOS navigation. Keep the condition at the Android split-view boundary and cover the reverse states.

                      Build handoff

                      Metadata

                      Metadata

                      Assignees

                      No one assigned

                        Labels

                        enhancementRequested improvement or new capability.kind:sub-specChild spec produced by decomposing an epic.status:verifiedAcceptance evidence accepted.

                        Projects

                        No projects

                          Milestone

                          No milestone

                          Relationships

                          None yet

                          Development

                          No branches or pull requests

                          Issue actions

                          , 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Vendor-pull slice 4d: restore Android tablet thread controls · Issue #144 · gannonh/kata-code · GitHub
                          Skip to content

                          Vendor-pull slice 4d: restore Android tablet thread controls #144

                          Description

                          @gannonh

                          Status

                          Verified

                          Verified: 2026-08-29T22:02:15Z

                          Goal

                          Android tablets and unfolded foldables show the same useful thread controls as the phone home surface. New-thread controls remain visible above the keyboard.

                          Context

                          This is slice 4d of #124. It ports the Android tablet behavior from upstream PR pingdotgg/t3code#5385 after the thread navigation work in #142.

                          Phase 6 #147 owns the shared primary mobile Kata lockup. This slice reuses that established lockup in the tablet sidebar. It does not redesign shared branding.

                          Constraints and non-goals

                          • Reuse the established compact Kata lockup. Do not introduce another brand implementation.
                          • Keep brand text accessible and allow system font scaling.
                          • Apply the split navigation behavior only at the existing Android tablet or unfolded-foldable breakpoint.
                          • Preserve filtering, settings, new-thread actions, and enough list space to reach the final thread.
                          • Hide the native detail header when no thread is selected.
                          • Keep the new-thread action above the keyboard and system insets.
                          • Do not change iOS navigation, phone navigation, sidebar collapse behavior, thread data, or server contracts.

                          Acceptance criteria

                          • At the existing Android split-view breakpoint, the persistent sidebar shows the compact Kata lockup instead of a generic Threads title.
                          • The tablet sidebar exposes thread filtering, Settings, and a new-thread action.
                          • The final thread row remains reachable without being covered by the floating action button or system insets.
                          • An empty detail pane does not render an extra native header.
                          • Opening the keyboard does not cover the new-thread action.
                          • Android phone navigation, iOS navigation, and the compact primary header remain unchanged.
                          • Focused mobile tests and type checking pass, followed by an authorized Android tablet or unfolded-foldable walkthrough.

                          Architecture

                          • Consume the compact brand component delivered by Phase 6: launch Kata Code Dev on iOS Simulator #147 in the existing tablet sidebar header.
                          • Keep breakpoint selection, route options, sidebar actions, and floating-action-button placement within the existing Android navigation flow.
                          • Do not add contracts, server state, or a second responsive-layout abstraction.

                          Delivery slice

                          One implementation flow owns the Android split-view sidebar, action placement, empty-detail header behavior, and keyboard-safe spacing. These behaviors share the same breakpoint and must be demonstrated together.

                          Demonstration

                          On an Android tablet or unfolded foldable:

                          1. Open the home screen and show the persistent sidebar with the Kata lockup.
                          2. Filter the thread list, open Settings, and return.
                          3. Scroll to the final thread and show that it is unobscured.
                          4. Start a new thread, focus the composer, and show the action remains above the keyboard.
                          5. Return to an empty detail pane and show that no duplicate native header appears.
                          6. Capture the equivalent phone layout to show that compact navigation is unchanged.

                          Verification

                          • Add or update focused pure layout and route-option tests for the split breakpoint, empty detail state, and action insets.
                          • Run vp run --filter @kata-sh/code-mobile typecheck.
                          • Run the focused mobile tests touched by this slice.
                          • After explicit computer-use authorization, use the project mobile verification flow on an Android tablet or unfolded-foldable emulator.
                          • Record screenshots for the tablet sidebar, keyboard-open composer, empty detail pane, and unchanged phone layout.
                          • Verify the reused brand component has the expected accessible label and allows font scaling.

                          Risks and mitigations

                          • The compact header can consume too much sidebar width. Reuse the existing component and test at the supported split breakpoint.
                          • Floating controls can obscure the last row or keyboard. Derive placement from existing safe-area and keyboard insets and verify both states.
                          • Route options can leak into phone or iOS navigation. Keep the condition at the Android split-view boundary and cover the reverse states.

                          Build handoff

                          Metadata

                          Metadata

                          Assignees

                          No one assigned

                            Labels

                            enhancementRequested improvement or new capability.kind:sub-specChild spec produced by decomposing an epic.status:verifiedAcceptance evidence accepted.

                            Projects

                            No projects

                              Milestone

                              No milestone

                              Relationships

                              None yet

                              Development

                              No branches or pull requests

                              Issue actions

                              , 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); Vendor-pull slice 4d: restore Android tablet thread controls · Issue #144 · gannonh/kata-code · GitHub
                              Skip to content

                              Vendor-pull slice 4d: restore Android tablet thread controls #144

                              Description

                              @gannonh

                              Status

                              Verified

                              Verified: 2026-08-29T22:02:15Z

                              Goal

                              Android tablets and unfolded foldables show the same useful thread controls as the phone home surface. New-thread controls remain visible above the keyboard.

                              Context

                              This is slice 4d of #124. It ports the Android tablet behavior from upstream PR pingdotgg/t3code#5385 after the thread navigation work in #142.

                              Phase 6 #147 owns the shared primary mobile Kata lockup. This slice reuses that established lockup in the tablet sidebar. It does not redesign shared branding.

                              Constraints and non-goals

                              • Reuse the established compact Kata lockup. Do not introduce another brand implementation.
                              • Keep brand text accessible and allow system font scaling.
                              • Apply the split navigation behavior only at the existing Android tablet or unfolded-foldable breakpoint.
                              • Preserve filtering, settings, new-thread actions, and enough list space to reach the final thread.
                              • Hide the native detail header when no thread is selected.
                              • Keep the new-thread action above the keyboard and system insets.
                              • Do not change iOS navigation, phone navigation, sidebar collapse behavior, thread data, or server contracts.

                              Acceptance criteria

                              • At the existing Android split-view breakpoint, the persistent sidebar shows the compact Kata lockup instead of a generic Threads title.
                              • The tablet sidebar exposes thread filtering, Settings, and a new-thread action.
                              • The final thread row remains reachable without being covered by the floating action button or system insets.
                              • An empty detail pane does not render an extra native header.
                              • Opening the keyboard does not cover the new-thread action.
                              • Android phone navigation, iOS navigation, and the compact primary header remain unchanged.
                              • Focused mobile tests and type checking pass, followed by an authorized Android tablet or unfolded-foldable walkthrough.

                              Architecture

                              • Consume the compact brand component delivered by Phase 6: launch Kata Code Dev on iOS Simulator #147 in the existing tablet sidebar header.
                              • Keep breakpoint selection, route options, sidebar actions, and floating-action-button placement within the existing Android navigation flow.
                              • Do not add contracts, server state, or a second responsive-layout abstraction.

                              Delivery slice

                              One implementation flow owns the Android split-view sidebar, action placement, empty-detail header behavior, and keyboard-safe spacing. These behaviors share the same breakpoint and must be demonstrated together.

                              Demonstration

                              On an Android tablet or unfolded foldable:

                              1. Open the home screen and show the persistent sidebar with the Kata lockup.
                              2. Filter the thread list, open Settings, and return.
                              3. Scroll to the final thread and show that it is unobscured.
                              4. Start a new thread, focus the composer, and show the action remains above the keyboard.
                              5. Return to an empty detail pane and show that no duplicate native header appears.
                              6. Capture the equivalent phone layout to show that compact navigation is unchanged.

                              Verification

                              • Add or update focused pure layout and route-option tests for the split breakpoint, empty detail state, and action insets.
                              • Run vp run --filter @kata-sh/code-mobile typecheck.
                              • Run the focused mobile tests touched by this slice.
                              • After explicit computer-use authorization, use the project mobile verification flow on an Android tablet or unfolded-foldable emulator.
                              • Record screenshots for the tablet sidebar, keyboard-open composer, empty detail pane, and unchanged phone layout.
                              • Verify the reused brand component has the expected accessible label and allows font scaling.

                              Risks and mitigations

                              • The compact header can consume too much sidebar width. Reuse the existing component and test at the supported split breakpoint.
                              • Floating controls can obscure the last row or keyboard. Derive placement from existing safe-area and keyboard insets and verify both states.
                              • Route options can leak into phone or iOS navigation. Keep the condition at the Android split-view boundary and cover the reverse states.

                              Build handoff

                              Metadata

                              Metadata

                              Assignees

                              No one assigned

                                Labels

                                enhancementRequested improvement or new capability.kind:sub-specChild spec produced by decomposing an epic.status:verifiedAcceptance evidence accepted.

                                Projects

                                No projects

                                  Milestone

                                  No milestone

                                  Relationships

                                  None yet

                                  Development

                                  No branches or pull requests

                                  Issue actions