Reconcile parallel agent sessions → main - #3
Open
aa-hh wants to merge 11 commits into
Open
Conversation
…log-sink field Settings was a flat scroll of hand-rolled rows with native <select>s and weak D-pad focus. Rebuilt on a reusable TV component vocabulary, single-scroll grouped cards (keeps the global sidebar), M3 blue tokens. - controls.js: createSettingsCard + info/picker/switch/action row factories - settingsScreen: grouped cards (Account, Plex Home, Watchlists, Playback, Network, Developer) + Sign out footer; modal pickers (3+ options) and switches (binary) replace native <select>; on-screen Back removed (remote-only) - Log sink URL: TV-safe inline edit-toggle field (Set/Save/Edit + Test). Traps the on-screen keyboard's delete/cursor keys so they don't move app focus; input shortened so the CTA stays D-pad-reachable; CTA neutral (inverts on focus, not permanently blue) - playback/network sub-renderers converted to the new rows - component-registry: resolved specs recorded Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…IN-pad CSS test The log-sink field was only reachable via Right from the row above — a short input with a right-aligned CTA sits off the vertical travel column, and the geometric nav (cross-axis penalty ×8) skipped it for the centred Sign-out below. - Read state is now a full-width focusable row (label + value), offset 0, so Down always lands on it. Selecting it reveals an inline editor (input + Save/Cancel/Test) and hides the read row; focus is contained between input and the buttons while the keyboard is up (LEFT/RIGHT cycle buttons, UP re-opens keyboard, Back/Esc cancels). - Test now pings the value currently in the editor. - Drop flex-wrap:wrap from .gt-settings-editor__actions: the PIN-pad test uses a whole-file greedy regex (/\.pin-pad-grid[\s\S]*flex-wrap:\s*wrap/) that any later flex-wrap:wrap trips. Buttons fit on one row anyway. - Registry updated to the full-width-row pattern. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
… from Figma
The Save/Cancel/Test buttons changed text colour on focus but not their fill: the
`.gt-settings-editor__actions .btn { background }` override (added so a filled
button reads on the elevated card) out-specified the shared `.btn:focus`, so the
focus inversion never applied to the background.
- Re-assert the light-pill inversion on `.gt-settings-editor__actions .btn:focus`
(background --focus-fill + colour --focus-on-fill), matching the TV Design Kit
(focused filled button = light pill + dark label, confirmed via Figma screenshot).
- flex:0 0 auto so the full .btn padding is never squeezed.
- Record a Button entry in the component registry from the kit (node 168:1226 +
ImageButton states): pill shape, padding, label/large type, focus inversion, and
the elevated-card gotcha + the broken .btn-outline:focus caveat.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Android TV button-container guideline requires "solid color containers for filled buttons". Our .btn rest bg was --gt-surface-2 (#1E1F20), identical to surface- container / settings cards, so buttons had no visible container on those surfaces (only the editor buttons had a subtle per-card bg hack). - Add --button-container: #303030 (TV Compose inverse-on-surface — the kit's default filled-button fill, node 168:1189) and point .btn at it globally. Reads on every surface (page, cards); focus still inverts to the light pill. - Drop the per-card bg override + focus re-assert on .gt-settings-editor__actions .btn (now redundant); keep flex:0 0 auto so padding is never squeezed. - Registry: record the container rules + solid fill; remove the elevated-card hack note. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Previous rounds fixed the button container colour/focus but never touched padding, which is what the feedback was actually about. The container had 12/28px padding but min-height:52px swallowed the vertical, so buttons read as tight pills with no internal breathing room. - .btn padding 12/28 → --space-5/--space-6 (20/24px). Scaled from the kit container proportion (py12/px16 vs a 14px label) to our 10-ft 22px label, so the solid container has real internal padding. Verified in a CSS harness: button height 52px → 71px, bg #303030, focus still inverts to the light pill. - Registry: record the resolved padding + height. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…to the solid .btn container Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…e rich source of truth Merges the recovered original (83b6a73: protocol + node-id index + ~13 components with statuses) with the settings redesign (Inline Edit-Toggle, Settings screen, updated Button), the Jellyfin backend (Provider picker / Login / User picker), and the Home rail motion spec. Normalizes statuses to the ✅/🚧/📝/📐 vocabulary and records open reconciliations (Button fill, .btn-outline:focus). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Combined uncommitted work from several concurrent agent sessions that ran in the main worktree: - Chrome 53 CSS guardrail (scripts/check-chrome53-css.cjs + test) + browserslist - Worktree reconciler (scripts/reconcile-worktrees.sh + docs/reconcile-runbook.md) - tvpush.sh: configurable TV target (.tvtarget) + simulator launch - detail screen: episode-panel Chrome 53 flex fix, ⋯ Options menu rework - nav-drawer/sidebar reconcile, jellyfin server picker, player chrome focus - perf/security/ui AGENTS.md docs Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
# Conflicts: # docs/design-system/component-registry.md # src/styles/app.css # src/ui/screens/settingsScreen.js
A self-referential node_modules symlink was committed on feat/settings-redesign and came in via the merge — it makes every package resolve as 'too many levels of symbolic links'. Untrack it and tighten .gitignore (node_modules/ → node_modules so a symlink-file can't be tracked either). package-lock refreshed by reinstall. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Integrates the work from several concurrent agent sessions into one branch.
What's included
scripts/check-chrome53-css.cjs+test/chrome53-css-guardrail.test.js(runs innpm test),browserslist: ["chrome 53"]. Bans Chrome 53-unsupported CSS unless a line carries/* chrome53-ok: reason */.scripts/reconcile-worktrees.sh+docs/reconcile-runbook.mdfor future multi-agent integration..tvtarget), simulator launch, full setup flow.feat/settings-redesign).Conflict resolution notes
settingsScreen.js: took the rebuild, re-applied main's multi-backend signout fix (clears provider/activeServer →provider-picker).app.css: took HEAD's newer provider-card/jellyfin-login/server-picker; added back settings-redesign's new settings vocabulary (.gt-inline-field,.gt-settings-*,.gt-switch); dropped its stale.provider-tileduplicates.component-registry.md: took HEAD (a newer superset; settings-redesign's reconcile was already superseded).Validation
hub-poster-prefetch(expectswidth=180, code emits210) — is pre-existing onmain, unrelated to this work, and needs the owner's call on the intended poster size.🤖 Generated with Claude Code