Skip to content

QA run · platform-core.shell-nav-personalization (1/1) · fb82f9b1 · 2026-10-16 · 0 PASS / 0 PARTIAL / 1 FAIL / 0 BLOCKED / 0 NOT-RUN #23998

Closed

Description

@objectstack-fleet

Run record for the re-run #23950 asks for, after its six stale clauses were re-pointed. Runner: an os-dev subagent dispatched by the domain:devx seat 2 PM (session session_016PVjjuVPte5XEJvaQx1E4t). Protocol: .claude/skills/checklist-test/SKILL.md + docs/qa/platform-checklist/RUNNER.md. Executed sequentially (no subagent tool in this runner).

Environment fingerprint

  • framework: fb82f9b180bcc6af04ce8d36153fd52d2eb6845c, the tip of branch claude/issue-23950-checklist-stale-clauses at run time. Its product tree is origin/main 022c6e799; the branch adds docs/qa/platform-checklist/areas/*.json only. Built with pnpm install --frozen-lockfile && pnpm build (75/75 tasks green).
  • .objectui-sha: daeb77fc84dd824e74c95b87cdede85afdb248e7. /_console was served from packages/console/dist, built with vite build from an objectui checkout at exactly that commit. os dev mounted it, so its stamp matched the pin. main has since moved the pin to f8267df9 (chore(objectui): move the console pin to f8267df93aba, past the spec deletion of checkPageComponentViewData #23973); see the clause 5 and clause 0 notes for what that changes.
  • boot: OS_PORT=47314 objectstack dev --ui --seed-admin -p 47314 -d file:(run dir)/nav/data.db from examples/app-showcase.
  • browser: playwright-core 1.63 on /opt/pw-browsers/chromium, a fresh context per script restored from the state saved after a form sign-in, desktop viewport 1400x900, phone 390x844.
  • persona: the seeded admin (admin@objectos.ai).
  • timestamps: 2026-10-16, 16:40Z to 16:47Z.

Scope

Selector platform-core.shell-nav-personalization resolves to 1 runnable item: platform-core.shell-nav-personalization at revision 3, P2, surface browser. The item text was read at branch head c4bf2ba4e. No pin is declared, so every clause was driven by hand.

Per-clause verdicts

item # clause (short) verdict evidence
platform-core.shell-nav-personalization 0 icon mode still navigates; collapse persists fail collapse works: wrapper data-state collapsed, cookie sidebar_state=false, still collapsed after reload. In icon mode only two icons show. Capability Map's icon routes. The Page Authoring icon does NOT: the invisible Workspace group label covers its lower half. A ref-targeted click is refused by Playwright, which names the intercepting element (the data-sidebar="group-label" button, opacity 0). A click at the icon's centre lands on that button and leaves the URL unchanged. Reproduced on two fresh loads (rule below)
platform-core.shell-nav-personalization 1 pin/unpin persists pass the row menu's Add to favorites on Projects, Tasks and Accounts gives a Favorites section of [Projects, Tasks, Accounts], identical after reload; Remove from favorites on Accounts, then reload, gives [Tasks, Projects]
platform-core.shell-nav-personalization 2 pinned order: drag, keyboard, Escape, reload pass 0 grips or sortable elements at rest. Pointer drag of Accounts above Projects (12 intermediate moves; drop indicator seen) gives [Accounts, Projects, Tasks]. Keyboard on Tasks (Space, ArrowUp, Space) gives [Accounts, Tasks, Projects]. Space, ArrowUp, Escape on Projects leaves it unchanged. After reload the order equals the pre-reload order. Control: each pinned link carries cursor-grab and aria-describedby="nav-pinned"
platform-core.shell-nav-personalization 3 favorite star/unstar persists pass a showcase_account record's More actions, Add to favorites: Favorites shows Fabrikam, still there after reload; Remove from favorites, then reload: gone
platform-core.shell-nav-personalization 4 Recents rail survives reload pass after visiting Contacts, Invoices, the Delivery Operations dashboard and Accounts, then reloading, the opened Recent section lists Accounts, Delivery Operations, Invoices, Contacts, Fabrikam (top 5)
platform-core.shell-nav-personalization 5 header crumbs follow the route (re-pointed by #23950) pass after the app pill (Showcase) and its PREVIEW chip, at 1400px. Report …/report/showcase_hours_by_status: one crumb, Hours by Status (Summary), which is the report's metadata label and its page heading; no Reports type crumb. …/system/settings: System, Settings. A showcase_account record (Fabrikam): no separator and no crumb, while the page heading reads Fabrikam. 0 links after the chip on all three. Each reload reads identically
platform-core.shell-nav-personalization 6 authored menu not user-reorderable pass desktop with all groups expanded: 0 aria-roledescription="sortable"; of 49 menu links outside Favorites, 0 carry aria-describedby="nav-pinned" and 0 carry cursor-grab (control: the pinned links carry both); every level's order equals the app's authored order (by order, ties in array order); with objectui-nav-order-showcase_app planted with every level reversed and the page reloaded, the order is unchanged; phone 390px: 0 sortable, 0 describedby, 0 grab, and no Favorites section

Reproduction rule: clause 0 fail

  1. Boot the stock showcase (any port), sign in at /_console/login as the seeded admin with a desktop viewport (1400x900), and open /_console/apps/com.example.showcase/page/showcase_capability_map.
  2. Collapse the sidebar with the header's Toggle sidebar button. The sidebar wrapper reads data-state="collapsed" and data-collapsible="icon".
  3. Read the two visible icons with the sidebar's link selector. The Page Authoring link (a[href$="/page/showcase_start_here"]) spans y 108 to 140. The Workspace group label (button[data-sidebar="group-label"], opacity 0, pointer-events auto) spans y 124 to 156: icon mode gives it a negative top margin, so it sits over the preceding item.
  4. document.elementFromPoint at the Page Authoring link's centre returns the Workspace label button. Down the icon's vertical axis, 2 of 5 sampled points hit the link and 3 hit the label.
  5. Click the Page Authoring icon at its centre. Expected: the route changes to …/page/showcase_start_here. Actual: the URL stays on …/page/showcase_capability_map. A ref-targeted Playwright click() on the link is refused, because the group-label button intercepts pointer events.
  6. Control: the Capability Map icon, which no label covers, routes on a centre click.

Mechanism: objectui packages/components/src/ui/sidebar.tsx SidebarGroupLabel takes group-data-[state=collapsed]:group-data-[collapsible=icon]:-mt-8 and …:opacity-0, with no pointer-events-none. The navigation renders a collapsible group's label as a button through asChild, so the transparent label stays clickable over the last item above it. The same class string is at the run's pin daeb77fc, at the new pin f8267df9, and at objectui main 9d857c998.

Automation self-check (RUNNER rule 2), against the item's traps:

  • hydration-race: two fresh loads gave identical rectangles after a settle.
  • shared-browser-tab: own port, DB and browser context.
  • stale-console-bundle: the console was built at the pin, and the class is unchanged at the new pin and at objectui main.
  • automation-input: the ref-targeted click was refused by the actionability check, which names the interceptor, and elementFromPoint agrees.

Derived item verdict

platform-core.shell-nav-personalization r3: fail (6 pass, 1 fail of 7 clauses). The fail is clause 0, a product defect in the console. It is not one of the six clauses #23950 re-points; clause 5, the one #23950 re-points, passes. The extraction (RUNNER extraction obligation) is handed to the dispatching seat. This runner files no card.

Clause 5 against the moved pin: objectui AppHeader.tsx at f8267df9 adds the product mark and a rule before the app pill (objectui#12605). It draws the same crumbs after the PREVIEW chip (extraSegments for report and system/*, none for an object route, plain text). Revision 3 cites both pins.

Harness note, not scored: these scripts restore a saved browser state per script. A context restored with a stale objectui-favorites localStorage cache wrote favorites back, and Accounts reappeared among the pins after clause 1 had unpinned it. That is this harness replaying an old cache. Clause 1 was scored in the sequence that did not replay one.

Timing: about 7 minutes of legs. The console bundle was already built; a cold vite build at the pin measured 1m44s.

Checklist-accuracy findings, if any, close out on the wave anchor #23878.

Activity

  1. objectstack-fleet commented on Oct 17, 2026

    @objectstack-fleet
    ContributorAuthor

    Close-out (domain:devx seat 2): the one FAIL is clause 0, a product defect (the icon-mode sidebar label takes the icon's click), extracted below. The clause #23950 re-pointed (clause 5) PASSes and landed with #24000 (e18b23fac5).

    Extracted: objectstack-ai/objectui#12744 · platform-core.shell-nav-personalization · clause 0


    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

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions