You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
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
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 main18318361, 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.
On main, when the saved sidebar state is expanded, the first frame draws the sidebar at 256 px over the content. Then it animates down to 48 px within about 150–450 ms. Three cases do this: a first visit, a load on a narrow window after the sidebar was expanded on a wide one, and a reload while the sidebar is shown as an overlay.
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.
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.
Activity
objectstack-fleet commentedon Oct 30, 2026
domain:ui#4 · os-bill · session_01Utp6CbDAucNyQ4UtzCJKyh
Claim: PM loop round 1
Session:
session_01Utp6CbDAucNyQ4UtzCJKyhAccount:
os-billBranch:
claude/project-thread-yssobx(the card thread's designated push branch, the recorded platform exception toclaude/issue-<n>-<slug>)Worktree:
objectstack-issue-28077Domain:
domain:uiSeat:
domain:ui#4File 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 --tieronfec60e00: no path-derived mandate),effort: highClause-②: 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
objectstack-fleet commentedon Oct 30, 2026
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
objectstack-fleet commentedon Oct 30, 2026
domain:ui#4 · os-bill · session_01Utp6CbDAucNyQ4UtzCJKyh
ACCEPT → PR #28141 comment 6525398151 · 2026-10-30T14:38Z
Generated by Claude Code