Skip to content

Console sidebar at 1280 px: the first frame draws the full 256 px sidebar over the content, then animates to the 48 px rail #28077

Closed

Description

@objectstack-fleet

domain:ui#4 · os-bill · session_01Utp6CbDAucNyQ4UtzCJKyh

Filing gate: ③ ruling-directed. Ruling B on #26676 (6520722066, maintainer 「你可以自主验收合并,有问题会开新卡」) fixes a new card under #26676 as the remedy for a finding after a landing. Found by the post-merge proxy preview review of PR #27893 (#27593): comment 6521834471, on main 18318361, examples/app-crm, evidence branch claude/issue-27593-proxy-evidence @ e1844a1f (evidence/27593-proxy/). The v4 boards do not draw the narrow-window sidebar, so "expected" comes from #27593's Acceptance and the seat's request 6514234395. ⛔ Not a claim.

Business reason

Who: every console reader on a laptop-width window (below 1416 px). What happens: each load can flash a wide sidebar over the page before it folds, so the content jumps and the first click can land on the sidebar.

Observed

Wanted

The rail-or-full decision is made before the first paint, from the window width and the kept preference, so the sidebar never shows an expanded first frame and then collapses.

Acceptance

  • At 1280 px, in all three cases above, every frame from the first one shows the 48 px rail. Pinned by a test that reads the first rendered state.
  • At 1440 px, nothing changes.

Parent: #26676 · Refs #27593 · PR #27893


Generated by Claude Code

Activity

  1. added
    bugSomething isn't working
    area:recordsBusiness objects, records, the views that show data, usable forms, search
    and removed on Oct 30, 2026
  2. objectstack-fleet commented on Oct 30, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#4 · os-bill · session_01Utp6CbDAucNyQ4UtzCJKyh

    Claim: PM loop round 1
    Session: session_01Utp6CbDAucNyQ4UtzCJKyh
    Account: os-bill
    Branch: claude/project-thread-yssobx (the card thread's designated push branch, the recorded platform exception to claude/issue-<n>-<slug>)
    Worktree: objectstack-issue-28077
    Domain: domain:ui
    Seat: domain:ui#4
    File surface: ui/packages/app-shell/src/hooks/useResponsiveSidebar.ts, ui/packages/app-shell/src/layout/ConsoleLayout.tsx, ui/packages/app-shell/src/layout/UnifiedSidebar.tsx, ui/packages/app-shell/src/layout/consoleSidebarRail.ts, ui/packages/components/src/hooks/use-viewport-below.tsx, their tests, .changeset/*.md (stop on breach; explain in the report)
    Container & model: M, mode:thread, model: TIER_DEFAULT (dispatch-gates --tier on fec60e00: no path-derived mandate), effort: high
    Clause-②: no
    Metadata-protocol: none
    Responsibility: at a narrow width every frame from the first is the 48 px rail: rail or full decided before first paint (one PR with #28078 #28079)
    Thread-read: none
    Premise: holds
    Serial constraints cleared: #27893 merged 11:04Z; open PR #28076 edits layout/AppHeader.tsx, outside this surface; #28077/#28078/#28079 land in one PR

    Dispatched 2026-10-30T12:02Z to a card thread of the seat's project; the order lives in the project. ⛔ The thread posts no claim and writes no assignee.


    Generated by Claude Code

  3. objectstack-fleet commented on Oct 30, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#4 · os-bill · session_01Utp6CZr8r7CoQCcbJ15irL
    os-dev-report

    {
     "issue": [
      28077,
      28078,
      28079
     ],
     "status": "done",
     "branch": "claude/project-thread-yssobx",
     "pr": "https://github.com/objectstack-ai/objectstack/pull/28141",
     "head": "55d0fb34",
     "session": "session_01Utp6CZr8r7CoQCcbJ15irL",
     "premise_still_valid": true,
     "files_changed": [
      "ui/packages/app-shell/src/layout/consoleSidebarRail.ts",
      "ui/packages/app-shell/src/hooks/useResponsiveSidebar.ts",
      "ui/packages/app-shell/src/layout/ConsoleLayout.tsx",
      "ui/packages/app-shell/src/layout/__tests__/ConsoleLayout.sidebarFirstFrame-28077.test.tsx",
      "ui/packages/app-shell/src/layout/__tests__/UnifiedSidebar.railOverlay-27593.test.tsx",
      "ui/packages/app-shell/src/hooks/__tests__/useResponsiveSidebar.test.tsx",
      "ui/packages/app-shell/src/chrome/KeyboardShortcutsDialog.wiredOnly-11674.test.tsx"
     ],
     "line_budget": "7 files, +383 / -49 (source +140 / -40, tests +243 / -9); no published package, no changeset (app-shell private)",
     "gates": {
      "local": [
       "node scripts/check-closing-keyword-parity.mjs :: exit 0",
       "node scripts/check-closing-keyword-parity.mjs --self-test :: exit 0",
       "node scripts/check-comment-mask-corpus.mjs :: exit 0",
       "node scripts/check-sdui-manifest.mjs :: exit 0",
       "node scripts/check-sdui-manifest.mjs --self-test :: exit 0",
       "pnpm --dir ui exec vitest run scripts/ :: exit 0",
       "pnpm --filter @objectstack/spec run check:duration-unit-keys :: exit 0",
       "pnpm check:cross-package-test-inputs :: exit 0",
       "pnpm check:dispatcher-error-vocabulary :: exit 0",
       "pnpm check:driver-memory-census :: exit 0",
       "pnpm check:engine-double-contract :: exit 0",
       "pnpm check:error-status-conformance :: exit 0",
       "pnpm check:gitlink-declared :: exit 0",
       "pnpm check:nul-bytes :: exit 0",
       "pnpm check:published-files :: exit 0",
       "pnpm check:query-options-erasure :: exit 0",
       "pnpm check:refd-timer-probe :: exit 0",
       "pnpm check:skill-identifier-liveness :: exit 0",
       "pnpm check:test-source-alias :: exit 0",
       "pnpm check:tier-file-adoption :: exit 0",
       "pnpm check:type-check-coverage :: exit 0",
       "pnpm check:type-check-debt :: exit 0",
       "pnpm check:undeclared-dep-imports :: exit 0",
       "pnpm check:watch-hint-literal :: exit 0",
       "pnpm check:where-matcher :: exit 0"
      ],
      "reconcile": "dispatch-gates --ran: 25 derived, 25 run, 0 NOT-MEASURED, 0 UNRUN (exit 0)",
      "package": [
       "vitest run, 103 app-shell test files referencing ConsoleLayout/UnifiedSidebar/useResponsiveSidebar/consoleSidebarRail/SidebarProvider/sidebar_state :: exit 0 (Test Files 103 passed, Tests 1009 passed; VERDICT command-exit 0)",
       "pnpm --filter @object-ui/app-shell lint :: exit 0 (0 errors)"
      ],
      "ablations": [
       "drop primeConsoleSidebarOpen call: 3 red (1280 first-frame), restored blob == HEAD",
       "hidden-tooltip check answers false: 3 red (one-Esc), restored blob == HEAD",
       "narrow keep-open writes wide choice: 1 red (#28079 expanded), restored blob == HEAD",
       "fold writes (not seeds) wide choice: 2 red (#28079 both), restored blob == HEAD"
      ],
      "ci": "in_progress at report time"
     },
     "deviations": [
      "file surface: chrome/KeyboardShortcutsDialog.wiredOnly-11674.test.tsx (outside the five files' own tests; it mounts the real ConsoleLayout) gains one cleanup line clearing os:console-sidebar:wide-open between mounts; its Ctrl run otherwise started from the wide choice the Cmd run kept",
      "narrowed, declared to CI: full pnpm --filter @object-ui/app-shell test (1967 files) stopped at 60 min on the shared box :: exit 143; type-check :: exit 2 locally, every error TS2307 for unbuilt @object-ui/* dist, declared to CI Type Check",
      "harness after-PR assignee/review step skipped per dispatch order",
      "harness commit trailer named a model; commits carry a model-free Co-Authored-By per os-dev"
     ],
     "api_writes": "2 — POST repository_dispatch (fleet-write pr_create -> #28141), this report comment",
     "mcp_calls": "0 GitHub MCP; 1 claude-code-remote subscribe_pr_activity #28141"
    }

    Generated by Claude Code

  4. objectstack-fleet commented on Oct 30, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#4 · os-bill · session_01Utp6CbDAucNyQ4UtzCJKyh

    ACCEPT → PR #28141 comment 6525398151 · 2026-10-30T14:38Z


    Generated by Claude Code

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

Metadata

Metadata

Assignees

Labels

area:recordsBusiness objects, records, the views that show data, usable forms, searchbugSomething isn't workingdomain:uipm:dispatchedpriority:p2Medium: important, M3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions