Repository navigation
fix(queen): the kanban showed no card on a phone - #1221
Merged
Merged
Conversation
On a phone the board's kanban was six 160px slivers: the shell rule `repeat(6, minmax(160px, 1fr))` (0,2,0) beat the 78vw phone rule (0,1,0). A card was 126px wide and 204px tall in a 67px box, so not one card was readable, and the chrome around it took 470 of the frame's 693px. queen-phone.css, sections 7-11, phone portrait only: - one column per screen, the next one peeking 28px, with scroll snap; - a card is two lines of 12.8px title and a one-line footer (93px tall); - the "Direction" label row and the off-site/web-only identity notice (no control in either) are gone; - the top bar is 48px and the identity chip sits on the title line. Measured in the live app frame at 392x693: the cards' box went from 67px to 184px, document width stays 392, MENU and the rail tiles stay 44px. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
github-actions Bot
added a commit
that referenced
this pull request
Oct 1, 2026
fix(queen): the kanban showed no card on a phone (#1221) On a phone the board's kanban was six 160px slivers: the shell rule `repeat(6, minmax(160px, 1fr))` (0,2,0) beat the 78vw phone rule (0,1,0). A card was 126px wide and 204px tall in a 67px box, so not one card was readable, and the chrome around it took 470 of the frame's 693px. queen-phone.css, sections 7-11, phone portrait only: - one column per screen, the next one peeking 28px, with scroll snap; - a card is two lines of 12.8px title and a one-line footer (93px tall); - the "Direction" label row and the off-site/web-only identity notice (no control in either) are gone; - the top bar is 48px and the identity chip sits on the title line. Measured in the live app frame at 392x693: the cards' box went from 67px to 184px, document width stays 392, MENU and the rail tiles stay 44px. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
gHashTag
added a commit
that referenced
this pull request
Oct 2, 2026
…o cards it caught (#1236) The viewport contract only looked at the wars view, so the phone kanban bug of 2026-10-01 (a column box 14px tall, no card readable) shipped without a single red line. 390x844 alone would not have caught it either: the board framed by /game gets 560-640px of height. - qa/queen-viewport-contract.mjs: views are now wars and kanban; sizes gain 390x640 and 390x560; new probe 11 fails when a column with cards shows no whole card inside its box. - Queen.css: the card foot ("missing: ...") is one ellipsised line; at 1280x600 it wrapped to six lines and the card (204px) overflowed its box (194px). - Queen.tsx: the full list stays readable as the span's title. - queen-phone.css: below 600px of height the direction chips are one scrolling row; at 390x560 two rows left an 80px box for a 93px card. Mutation: with the pre-#1221 phone CSS the contract fails every kanban column at 390x640 (box 14px). With this change: 8 sizes x 2 views PASS. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
github-actions Bot
added a commit
that referenced
this pull request
Oct 2, 2026
fix(queen): guard the kanban in the viewport contract, and fix the two cards it caught (#1236) The viewport contract only looked at the wars view, so the phone kanban bug of 2026-10-01 (a column box 14px tall, no card readable) shipped without a single red line. 390x844 alone would not have caught it either: the board framed by /game gets 560-640px of height. - qa/queen-viewport-contract.mjs: views are now wars and kanban; sizes gain 390x640 and 390x560; new probe 11 fails when a column with cards shows no whole card inside its box. - Queen.css: the card foot ("missing: ...") is one ellipsised line; at 1280x600 it wrapped to six lines and the card (204px) overflowed its box (194px). - Queen.tsx: the full list stays readable as the span's title. - queen-phone.css: below 600px of height the direction chips are one scrolling row; at 390x560 two rows left an 80px box for a 93px card. Mutation: with the pre-#1221 phone CSS the contract fails every kanban column at 390x640 (box 14px). With this change: 8 sizes x 2 views PASS. Co-authored-by: Claude Opus 5.5 <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.
What the owner saw
app.t27.ai/game/kanban on a phone: the BLOCKED and RUNNING columns showed only their headers. No card could be read.
Why
.queen27-page.is-shell .queen27-kanban { grid-template-columns: repeat(6, minmax(160px, 1fr)) }(specificity 0,2,0) beat the phone rule'sminmax(78vw, 1fr)(0,1,0).Change
All of it is in
apps/website/src/pages/queen-phone.css, sections 7–11, phone portrait only:scroll-snapstops a swipe on a column. The chrome still does not scroll sideways; only the board does, and it did before.off-site/web-onlyidentity notice are hidden. Neither has a control.Measured
In the live app frame at 392x693, with the board's real data:
Shipping
The 999 app pins this page by
QUEEN_REFinapps/vibee-editor/Dockerfile. A follow-up 999 PR bumps it after this merges.{ "version": 1, "head_sha": "302e94cb851f805d0198cb1c3c874c363fe2684b", "summary": "On a phone the board's kanban now shows one readable column at a time with two cards in view, where the owner's screenshot showed column headers and no card at all.", "changes": [ "queen-phone.css section 7: in phone portrait each kanban column is the board's width less 28px, with scroll snap, so the next column peeks in and a swipe stops on a column.", "Sections 8-9: a card is a wrapped flex row with a two-line 12.8px title and a one-line footer; the column's meaning line is one line instead of a 50px block.", "Section 10: the Direction label row and the off-site or web-only identity notice, neither of which holds a control, are hidden on a phone.", "Section 11: the top bar is 48px using the same selector that pins it to 64px, and the tool row folds into the title line where the identity chip sits." ], "tests": [ { "command": "npx vite build in apps/website", "status": "passed", "result": "The website bundle builds with the new rules, exit code 0.", "evidence": "Run locally on macOS before the commit at this head" }, { "command": "CHROME_PATH=BrowserOS node qa/queen-viewport-contract.mjs --no-build", "status": "passed", "result": "Queen viewport contract PASS on 6 sizes including 390x844; it checks the wars view only, not the kanban.", "evidence": "Run locally against the dist built from this head, screenshots in /tmp/hud-shots" }, { "command": "Inject sections 7-11 as a style element into the live app.t27.ai/game/kanban frame at 392x750 and measure with getBoundingClientRect", "status": "passed", "result": "Cards box 67px to 184px, card 204px to 93px tall, two cards visible where none were, document width 392, MENU and rail tiles 44px, a 200px swipe snaps to the next column.", "evidence": "Live board data in the Claude browser pane, rules byte-identical to this head's media block" } ], "limitations": [ "The viewport contract does not cover the kanban view; the kanban numbers come from a live injection, not a CI gate.", "The app frame shows the off-site identity notice inside app.t27.ai itself, which may be a logic bug in QueenIdentity; this change only hides it on a phone.", "app.t27.ai serves this only after 999 bumps QUEEN_REF in apps/vibee-editor/Dockerfile to the merge commit." ], "tags": [ "Frontend", "Mobile", "UX" ], "blog": { "title": "The phone kanban that showed no card", "summary": "A 160px shell rule outranked the phone rule, so the board's kanban on a phone was six slivers with no readable card; one column per screen and lighter chrome bring two cards into view.", "outline": [ "What the owner's screenshot showed: column headers, counts of 82 and 5, and not a single card, under 470px of chrome.", "Why the phone rule never applied: a shell selector at specificity 0,2,0 beat the 78vw phone rule at 0,1,0, leaving 160px columns.", "The fix measured in the live frame: one column per screen with a visible peek and snap, compact cards, and rows without controls removed." ] } }🤖 Generated with Claude Code