Skip to content

Console at phone width: Auth flow audit and fixes at 375 and 390 px #29080

Closed

Description

@objectstack-fleet

domain:ui#4 · zhuangjianguo · session_01QsR2jR7ZFkpqmm4U8S1f9y

Filing gate: ④ coordination node, a per-flow child of maintainer card #29040, split as its triage comment orders ("the ui lane splits it when it claims, one child card per flow, each with Part of #29040") · filed by domain:ui#4 · ⛔ Not a claim.

Part of #29040.

Business reason (from #29040). objectstack-ai/mobile 2.0 hosts the Console in a WebView (objectstack-ai/mobile#144), so phone users get the Console's responsive layout and nothing else. This child covers the Auth flow: sign-in, 2FA, and password reset.

Ask. Drive the flow in a real browser at 375×812 and 390×844 against the showcase and CRM examples. Record what breaks and fix it. Check each of these:

  • no horizontal page scroll;
  • touch targets of at least 44 px;
  • dialogs and drawers fit the viewport;
  • the virtual keyboard does not cover the focused field;
  • long lists stay responsive on a mid-range Android device profile (CPU throttling 4×).

Acceptance.

Reader. domain:ui#1 (the ui lane split #29040 per flow: domain:ui#4 takes Approvals, Record and Forms; domain:ui#1 takes Lists, Navigation, Notifications, Dashboards and Auth). Size M.

Dedupe. Searched 375 in:title (0), phone in:title is:open (3: #29040, #28911, #29057), mobile width in:title (1: #29040), Part of #29040 (1: #29040). No per-flow child existed.

Links back: #29040, objectstack-ai/mobile#144.


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Nov 2, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#1 · zhuangjianguo · session_01QsR2jUJ19MstFvFhjgiYTu

    Claim: PM loop round 18 · 2026-11-02T07:09Z
    Session: session_01QsR2jSjgRwjHh1CopZ7aDU (card thread, os-dev); dispatched by seat session session_01QsR2jUJ19MstFvFhjgiYTu
    Account: zhuangjianguo
    Branch: claude/project-thread-83qzxq (platform-assigned to the card thread; it can push only this branch)
    Worktree: objectstack-issue-29080
    Domain: domain:ui
    Seat: domain:ui#1
    File surface: Console files read only for the phone-width audit, plus a root .changeset. The fix surface is declared by a claim amendment after the audit, before any code (stop on breach; explain in the report)
    Container & model: M, mode:thread, model: default tier (dispatch-gates --tier: no path-derived mandate), effort: medium
    Clause-②: no
    Metadata-protocol: none
    Responsibility: the Auth flow of the #29040 phone-width audit (375 and 390 px) and its fixes
    Thread-read: none
    Premise: holds (at origin/main d1f3ac05: no PR or run record exists for the Auth flow; #29040 split comment 6571123115 names this child for domain:ui#1)
    Serial constraints cleared: the shared layout (ConsoleLayout, AppShell, UnifiedSidebar) is held by #29075; a fix that needs it is sequenced by the seat.

  2. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Nov 2, 2026
  3. objectstack-fleet commented on Nov 2, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#1 · zhuangjianguo · session_01QsR2jUJ19MstFvFhjgiYTu

    Claim amended · 2026-11-02T07:28Z · after the dev's audit (run record /mnt/project-files/issue-29080/run-record-before.md, origin/main 6b3ba82c, real showcase and CRM stacks, 375 and 390 px). This sets the fix surface and adds to the round 18 claim 6571286397 on this card. Branch, session and size are unchanged.

    • Measured: no page scrolls sideways, the locale menu fits, the reset page survives the keyboard, CPU is fine. FAIL at both widths: touch targets under 44 px on every auth page (inputs and primary buttons 40, show-password 28, text links 14 to 17 tall, dev-admin chip 28, locale trigger 32; the MFA overlay's inputs and buttons 40, Sign out 16, backup-codes summary 16); auth inputs at 14 px, so iOS zooms on focus; the MFA overlay's scan step puts the card top at −138 px with the keyboard up, and Verify falls under the keyboard.
    • File surface (set): ui/packages/auth/src/authStyles.tsx, ui/packages/auth/src/LoginForm.tsx, ui/packages/auth/src/ForgotPasswordForm.tsx, ui/apps/console/src/pages/auth/LoginPage.tsx, AuthFooter.tsx, AuthLayout.tsx, ResetPasswordPage.tsx (same folder), ui/packages/app-shell/src/console/RemediationOverlay.tsx, their tests and a root .changeset. Each fix is phone-only (min-h-[44px] sm:min-h-0, text-base sm:text-sm); desktop is unchanged. No shared layout file; LocaleSwitcher stays untouched.
    • Declarations: Clause-② no (no new export, prop or key), Metadata-protocol none, unchanged.
    • Out of scope: a TOTP-enrolled user's password sign-in gets twoFactorRedirect and the login page shows no code field or message at any width. The seat files it as its own card.
  4. objectstack-fleet commented on Nov 2, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#1 · zhuangjianguo · session_01QsR2jSjgRwjHh1CopZ7aDU
    os-dev-report

    {
      "issue": 29080,
      "status": "done",
      "branch": "claude/project-thread-83qzxq",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/29136",
      "session": "session_01QsR2jSjgRwjHh1CopZ7aDU",
      "premise_still_valid": true,
      "summary": "Audited the Auth flow (sign-in, forgot/reset password, MFA remediation overlay, 2FA sign-in) at 375x812 and 390x844 on real showcase and CRM stacks at 6b3ba82c; run record and before/after screenshots in /mnt/project-files/issue-29080/. Fixed every phone-width failure, phone-only below sm: 44 px touch targets on all auth controls, 16 px auth inputs (no iOS focus zoom), and the remediation overlay now scrolls so the MFA scan step keeps its heading and Verify reachable with the keyboard up. Desktop sizes measured unchanged at 1280 px. Within the amended surface (claim 6571286397, amendment 6571574347); no shared layout file, LocaleSwitcher untouched.",
      "tests": "New phoneTouchTargets-29080 (auth) and RemediationOverlay.phoneScroll-29080 (app-shell): 3 passed. Ablation after commit 1f2e4483: overlay back to flex items-center without overflow -> 1 failed; AUTH_INPUT_CLASS back to h-10 text-sm -> 2 failed; ablation-replace restored both to the HEAD blob, git diff HEAD empty (tests import src, no dist leg). vitest packages/auth/ plus the 42 console/app-shell test files naming the touched pages: 82 files, 572 tests passed. turbo type-check auth + app-shell + console: 73/73. After-fix audit: every check PASS at both widths on both examples.",
      "gates": "dispatch-gates --ran at 1f2e4483: 34 derived, 34 run, 0 NOT-MEASURED, all exit 0 (PR-body gates run with the final body as GITHUB_EVENT_PATH / PR_BODY). vitest run scripts/ 169 passed 2 skipped (first attempt SIGKILLed while my dev servers held memory; rerun after stopping them). check:new-line-citations 0 new. check:type-check-debt exit 0. PR check-runs at head: 17 in_progress, 3 skipped, 0 failed at report time.",
      "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
      "mcp_calls": "0",
      "api_writes": "2 — fleet-write pr_create (POST /repos/objectstack-ai/objectstack/pulls via relay run 41410618125); this os-dev-report comment via post-stamped",
      "open_questions": [],
      "out_of_scope_findings": [
        "class: a · reach: public door, Console /login: a TOTP-enrolled user's password sign-in answers {twoFactorRedirect: true} and the page stays on /login with no code field and no message, at 375, 390 and 1280 px · evidence: before-showcase-2fa-signin-*.png · dedupe: twoFactorRedirect, TOTP challenge sign-in, two-factor login console · filed by the seat as #29105",
        "carrier: seat · noted, not filed: the relay stored the PR body exactly as sent (8687/8687 bytes) and did not prepend the project attribution block; a dev cannot PATCH it, so it is left as is"
      ]
    }
  5. objectstack-fleet commented on Nov 2, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#1 · zhuangjianguo · session_01QsR2jUJ19MstFvFhjgiYTu

    Landed · 2026-11-02T09:47Z · PR #29136 merged through the merge queue as 49aba82b at 2026-11-02T09:46Z (GitHub's clock). ACCEPT 6572518152 at head 1f2e4483.

    probe before (49aba82b~1) now (origin/main)
    AUTH_TOUCH_TARGET_CLASS across ui/ 0 15
    phoneTouchTargets-29080.test.tsx and RemediationOverlay.phoneScroll-29080.test.tsx exist no yes

    Fixes #29080 closed this card. pm:dispatched comes off in the same stroke as this note. #29159 (seat 5) is serialized behind the LoginPage PRs; this one is in, and #29105 and #29174 remain.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:authdomain:uiDomain lane — seat card indexed by label:pm:seatenhancementNew feature or requestpriority:p2Medium: important, M3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions