Repository navigation
fix(app-shell): pin a metadata list row's controls and say an unreadable activation state in words (#13091) - #13096
Merged
objectstack-fleet[bot] merged 4 commits intoOct 19, 2026
Conversation
…ble activation state in words (#13091) The declared sharing rules list put Clone off-screen and cut the Active switch at 1440 px, and showed `?` in the Active column for a principal the activation ledger read refuses. - The list table scrolls inside the shared HorizontalOverflowBox (objectui#12708). The Active and Clone cells are pinned to its right edge, Clone at a fixed width with Active just left of it, and the first pinned cell draws the seam shadow (objectui#12463). Source moves ahead of Active so the pinned pair is the row's trailing pair. - A refused or failed ledger read shows "Not visible to you", with the server's sentence (or the HTTP status) in the tooltip. - Pins in ResourceListPage.declaredSharingRules-12982.test.tsx. Claude-Session: https://claude.ai/code/session_016ixQuukBQtUAZdo8ih3w9Z Co-authored-by: Claude <noreply@anthropic.com>
…ive reach measurement at 1440 (#13091) Measured live at 1024 px: in a collapsed-border table Chrome let the Object column's text, scrolling beneath the pinned Active cell, show through that cell's right edge. The list table now draws separated borders with zero spacing, and the row dividers move from `divide-y` on the rows to a top border on the cells. Adds e2e/live/declared-sharing-rules-reach-13091.spec.ts: at 1440x1000, the first Clone button and Active switch lie inside the viewport and the table's scroll box with the table unscrolled. Local live lane only; it is not in the test:e2e:live:ci allowlist. Claude-Session: https://claude.ai/code/session_016ixQuukBQtUAZdo8ih3w9Z Co-authored-by: Claude <noreply@anthropic.com>
Contributor
Author
Seat review ·
|
Contributor
✅ Console Performance Budget
The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it. 📦 Bundle Size Report
Size Limits
|
Contributor
✅ Console Performance Budget
The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it. 📦 Bundle Size Report
Size Limits
|
objectstack-fleet
Bot
deleted the
claude/issue-13091-declared-rules-layout
branch
October 19, 2026 23:43
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.
Fixes #13091
Clause-②: no. This is a console layout and display fix.
What changed
Controls in reach. On Setup's metadata list (
ResourceListPage.tsx), the table now scrolls inside the sharedHorizontalOverflowBox(the objectui#12708 affordance) withseam="pinned". In the environment scope, the Active switch, and Clone on the declared sharing rules, are pinned to the right edge (sticky). The first pinned cell drawsPINNED_RIGHT_SEAM_SHADOW_CLASSES, the objectui#12463 right-edge shadow, while columns remain to the right.right-0with a fixedw-28 min-w-28. Its label truncates (max-w-[88px], full label intitle), so Active'sright-28offset holds in any locale.bg-backgroundwith the row's fill layered on top through--os-row-tint, the conventiondata-tablekeeps for its sticky cells. Invalid, warning and hover fills therefore reach them.border-separate border-spacing-0, and the row dividers moved fromdivide-yon the rows toborder-ton the cells. Measured live at 1024: in a collapsed-border table, Chrome let the Object column's text, scrolling beneath the pinned Active cell, show through that cell's right edge.Unreadable Active state. When the activation ledger read is refused or fails, the cell reads "Not visible to you" (new key
engine.catalog.active.notVisible, en and zh) instead of?. Itstitleis the existing "Activation state could not be read." followed by the server's own sentence, asactionErrorDetailreads it, orHTTPand the status when the server sent none. No switch is drawn.Measured (local live stack: objectstack at this repo's
.objectstack-shapin f4755a68,objectstack dev --freshshowcase, console dev server)Before / after, first row, table unscrolled:
opsprincipal (a user created holding theopsposition): the ledger read answers403 PERMISSION_DENIED, "You do not have permission to perform this action. Contact your administrator if you need access." The cell reads "Not visible to you", with that sentence in its tooltip.opshas no Clone, so Active alone is pinned atright-0with the seam.Tests
ResourceListPage.declaredSharingRules-12982.test.tsx: 6 new pins.?.HTTP 403.right-0.e2e/live/declared-sharing-rules-reach-13091.spec.ts: at 1440x1000, the first Clone and Active lie inside the viewport and inside the table's scroll box (found as the table's parent, so it reads the same element before and after), and the box reportsdata-overflow-right.test:e2e:live:ciallowlist.@object-ui/app-shellwhole suite: 1608 files passed, 1 skipped, 1 failed. The failure isbuildIdentity-12970.test.ts> "reads null under this test setup", which received the checkout's short sha. The diff does not touch it, and it passes 11/11 alone. The value is the git short shaapps/console/vite.config.tsbakes asVITE_APP_VERSION. Not re-run on base.turbo type-check --filter=@object-ui/app-shell: 30/30 tasks. ESLint on the changed files: 0 errors; the 21 warnings inResourceListPage.tsxequal base's count.Adds no product-specific widget, dialog, hook or string (see AGENTS.md › Product-neutral renderer)
Opened by the objectstack epic seat (
session_01Y5583bs2RDd53MH6kM1ca3) through the fleet relay, verbatim from dev sessionsession_016ixQuukBQtUAZdo8ih3w9Z, whose harness has no PR-create tool.🤖 Generated with Claude Code
https://claude.ai/code/session_016ixQuukBQtUAZdo8ih3w9Z