Skip to content

fix(app): hide session archive icon after pointer leaves - #415

Merged
oxwen11 merged 1 commit into
mainfrom
pie/f46dbb60
Sep 30, 2026
Merged

oxwen11 merged 1 commit into
mainfrom
pie/f46dbb60

Conversation

@oxwen11

@oxwen11 oxwen11 commented Sep 30, 2026

Copy link
Copy Markdown
Owner

Summary

  • Fix Archive sticking on a Session List row after mouse selection, even after the pointer leaves. The shared showOnHover behavior also reveals actions for focus-within, and a mouse click leaves the row focused.
  • Scope the visibility fix to Session actions: show on hover or when the row contains :focus-visible, without blurring the selected row. Preserve keyboard access, touch visibility, and active-row colors.
  • Add a Chromium browser regression covering mouse selection, pointer exit, Tab/Shift+Tab navigation, and narrow-screen visibility.

React Doctor's hover-only-reveal detector does not recognize group-has-focus-visible. A documented, single-occurrence false-positive exception is covered by the browser regression; no global rule is disabled.

Verification

  • pnpm exec vitest run --config apps/app/vitest.browser.config.ts apps/app/src/features/projects/session-actions-menu.test.tsx apps/app/src/features/projects/use-project-sessions.test.tsx — 5 tests passed.
  • pnpm exec turbo run typecheck --filter=@getpie/app — passed.
  • Scoped oxlint and oxfmt — passed.
  • React Doctor changed-scope check — 100/100.
  • Isolated web runtime: reproduced the stuck icon before the fix; after the fix, session switching and pointer exit hide it without another click. Tab still reveals/focuses Archive, and hover-to-archive still removes the selected non-active row.

UI evidence

Before: mouse-selected row retains Archive after the pointer leaves.
Before: Archive remains visible

After: the same interaction hides Archive without blurring the row.
After: Archive hides when the pointer leaves

The attached recording captures the before/after interaction, keyboard focus, and hover archive verification.

archive-before

archive-after

recording-001.webm

@pkg-pr-new

pkg-pr-new Bot commented Sep 30, 2026 •

Copy link
Copy Markdown
npx https://pkg.pr.new/oxwen11/pie/@getpie/cli@415

commit: 431912c

@github-actions

github-actions Bot commented Sep 30, 2026 •

Copy link
Copy Markdown

React Doctor found no new issues. 🎉

Reviewed by React Doctor for commit 431912c.

@oxwen11

oxwen11 commented Sep 30, 2026

Copy link
Copy Markdown
Owner Author

auto-merge: yes

head fda093aebe8660b8b5a3a6cd1a2f21280675c86d — required CI green (Check, react-doctor, both Publish @getpie/cli preview), MERGEABLE (BEHIND).

fits .agents/rules/auto-merge/ui-presentation.md (from #345 head 261780ad):

  • paths only under apps/app/src/features/projects/ (session-actions-menu.tsx + new browser test); no packages/ui/src/**
  • presentation-only: replace showOnHover/focus-within with class/style opacity tokens (md:opacity-0 + group-hover / group-has-focus-visible) so Archive chrome hides after mouse leave while keyboard :focus-visible still reveals it
  • no new DOM structure, state, handlers, control flow, RPC, or user-facing copy; onClick archive mutate unchanged
  • additive vitest-browser coverage for hover/leave/focus-visible/touch widths; does not change product control flow

Din review-first: comment/decide only — not merging.

@oxwen11

oxwen11 commented Sep 30, 2026

Copy link
Copy Markdown
Owner Author

auto-merge: yes

head 84a6d3df98aa98b45bcf1908635cc57f5d97b4a0 — required CI green (Check, react-doctor, both Publish @getpie/cli preview), MERGEABLE (BEHIND). Prior yes was on fda093aebe8660b8b5a3a6cd1a2f21280675c86d (pre update-branch); re-reviewed this rebased head.

fits .agents/rules/auto-merge/ui-presentation.md (from #345 head 261780ad):

  • paths only under apps/app/src/features/projects/ (session-actions-menu.tsx + additive browser test); no packages/ui/src/**
  • presentation-only: drop showOnHover, use class/style opacity tokens (md:opacity-0 + group-hover / group-has-focus-visible) so Archive chrome hides after pointer leaves while remaining keyboard-focusable — no new DOM, state, handlers, or product control flow
  • additive vitest-browser coverage for hover-leave opacity + focus-visible reveal

will update-branch once (BEHIND) so CI re-runs; not merging (Din review-first).

@oxwen11

oxwen11 commented Sep 30, 2026

Copy link
Copy Markdown
Owner Author

auto-merge: yes

head cd466a8dd6576f0ed7378a80045e30bd6b2f5061 — required CI green (Check, react-doctor, both Publish @getpie/cli preview), MERGEABLE (BEHIND). Prior yes only covered fda093aebe8660b8b5a3a6cd1a2f21280675c86d and 84a6d3df98aa98b45bcf1908635cc57f5d97b4a0; re-reviewed this rebased head.

fits .agents/rules/auto-merge/ui-presentation.md:

  • paths only under apps/app/src/features/projects/ (session-actions-menu.tsx + additive browser test); no packages/ui/src/**
  • presentation-only: drop showOnHover, use class/style opacity tokens (md:opacity-0 + group-hover / group-has-focus-visible / peer active text) so Archive chrome hides after pointer leaves while keyboard :focus-visible still reveals it
  • no new DOM structure, state, handlers, or product control flow; existing onClick archive mutate unchanged
  • additive vitest-browser coverage for hover-leave opacity + focus-visible / touch widths

will update-branch once (BEHIND) so CI re-runs; not merging (Din review-first).

@oxwen11

oxwen11 commented Sep 30, 2026

Copy link
Copy Markdown
Owner Author

Current-base gate — not merged

  • Context: fix(app): hide session archive icon after pointer leaves. Same-repository oxwen11 PR, open, non-draft, targeting main.
  • Head: 69e070615fc13d3f7b563798a3b1e1b80ceabab7.
  • Current base and trusted rules commit: c7c4138afdafaf951349be57cb8acc990a07e0aa. The rule/protection files are unchanged from the previously trusted d7f4b7a95588e5de2aeefbe790e65111e89195f6; the intervening merge is documentation only.
  • Head is behind current main by 1 commit(s). GitHub state: MERGEABLE / BEHIND.

Required CI observed at this head

Review context and acceptance

The full two-file diff was statically reviewed while the base was d7f4b7a95588e5de2aeefbe790e65111e89195f6: the local opacity change targets hover/keyboard :focus-visible without changing archive/restore handlers or SessionRef targets. Its Chromium regression is included by the browser configuration and covers mouse focus retention, pointer exit, Tab/Shift+Tab and narrow widths. No blocking implementation/security defect was established by that static review. Independent acceptance was not completed; there is no final approval. Author UI attachments do not replace reviewer proof on Web and Desktop.

Stopped at the current-base gate; not merged. No further code review or independent verification is run against a behind candidate. No branch update, conflict resolution, fix-and-merge or protection bypass was performed. Revisit only after the author supplies a current-base-containing, conflict-free candidate with all required checks present, executed and successful; then restart at CI, review and independent acceptance. Unchanged blockers need no duplicate processing.

@oxwen11

oxwen11 commented Sep 30, 2026

Copy link
Copy Markdown
Owner Author

auto-merge: yes

head 69e070615fc13d3f7b563798a3b1e1b80ceabab7 — required CI green (Check, react-doctor, both Publish @getpie/cli preview), MERGEABLE (BEHIND). Prior yes covered through cd466a8dd6576f0ed7378a80045e30bd6b2f5061 (then update-branch); re-reviewed this rebased head.

fits .agents/rules/auto-merge/ui-presentation.md (from #345 head 261780ad):

  • paths only under apps/app/src/features/projects/ (session-actions-menu.tsx + new browser test); no packages/ui/src/**
  • presentation-only: replace showOnHover with class/style opacity + group-has-focus-visible so Archive chrome hides after pointer leaves while staying keyboard-reachable; archive/restore handler and SessionRef targets unchanged
  • additive isolated browser test (hover/pointer-exit/Tab/narrow) — no product control-flow change

Updating branch onto current main. No squash-merge (Din review-first).

@oxwen11

oxwen11 commented Sep 30, 2026

Copy link
Copy Markdown
Owner Author

auto-merge: yes

head bde741e221b90f90ab7e0d099acbe69d4b9ef588 — required CI green (Check, react-doctor, both Publish @getpie/cli preview, Continuous Releases, React Doctor), MERGEABLE (BEHIND). Prior yes covered through 69e070615fc13d3f7b563798a3b1e1b80ceabab7 (then update-branch); re-reviewed this rebased head.

fits .agents/rules/auto-merge/ui-presentation.md (from #345 head 261780ad):

  • paths only under apps/app/src/features/projects/ (session-actions-menu.tsx + additive browser test); no packages/ui/src/**
  • presentation-only: drop showOnHover, use class/style opacity tokens (md:opacity-0 + group-hover / group-has-focus-visible) so Archive chrome hides after pointer leaves while keyboard :focus-visible still reveals it
  • no new DOM structure, hooks, state, handlers, control flow, RPC/schema/wire, or user-facing copy
  • additive browser test asserts hover/leave opacity + keyboard focus-visible — does not change product control flow

exclusions.md: no feature, non-presentational fix, runtime dep upgrade, or test+product coupling.

will update-branch against latest main (no squash-merge; Din review-first).

@oxwen11

oxwen11 commented Sep 30, 2026

Copy link
Copy Markdown
Owner Author

新版本门禁:发布检查失败,未合并

  • 当前 head:04ec098f87ea5eb983e72ae2d9ed185c756b706c
  • 当前 main / 可信规则 commit:8f7546548ca95b7167c2261ebe87f4425806cf65
  • GitHub:MERGEABLE / BEHIND。

Check、react-doctor 与另一项 preview 成功,但必需 Publish @getpie/cli preview 失败,失败步骤为 Publish preview to pkg.pr.new。这个 head 也尚未包含当前 main。

此记录针对已变化的新版本,不复用历史 head 的审查/许可。按当前可信 base 的 pull-requests.md 停在门禁:本轮未更新分支、重跑 CI、代码审查、独立 UI 验收或合并。PR #345 的未合并规则不作为授权依据。

需处理发布失败并提供包含当前 main、全部 required checks 实际成功的候选,再从 CI → 审查 → 独立 Web/Desktop 验收重新开始。

@oxwen11

oxwen11 commented Sep 30, 2026

Copy link
Copy Markdown
Owner Author

无新决策分支同步

旧 head 04ec098f87ea5eb983e72ae2d9ed185c756b706c 已通过 GitHub 原生 rebase 更新为 431912c078904f0f26e412cbe073c92997446e8b;compare 确认包含当前 main/可信规则 8f7546548ca95b7167c2261ebe87f4425806cf65,behind_by=0,无人工冲突取舍。

此前唯一失败来自 pkg.pr.new 发布服务;随后实际发布已恢复(#402 的发布步骤及 #416 的一次受控重试均成功)。本次同步是为消除 base lag,新版本触发完整 CI,不是反复重跑同一失败候选。待新 CI 全成功再审查与独立 UI 验收;尚未批准或合并。

@oxwen11

oxwen11 commented Sep 30, 2026

Copy link
Copy Markdown
Owner Author

Independent review and acceptance — passed

  • Reviewed/tested head: 431912c078904f0f26e412cbe073c92997446e8b.
  • Base and trusted rules: 8f7546548ca95b7167c2261ebe87f4425806cf65.
  • Full two-file diff and production caller/shared Sidebar action reviewed. No blocking correctness, security, compatibility or accessibility finding. The change is scoped to Session actions; archive targets, mutation/error handling and navigation remain unchanged. The single React Doctor exception is backed by keyboard-focus browser coverage, not a global disable.

Checks actually run

  • Frozen dependency installation succeeded in a clean, head-pinned reviewer worktree.
  • pnpm exec vitest run --config apps/app/vitest.browser.config.ts apps/app/src/features/projects/session-actions-menu.test.tsx apps/app/src/features/projects/use-project-sessions.test.tsx: 2 files / 5 tests passed.
  • Turbo build for Server and Core: 3 tasks succeeded. Server rebuilt in the pinned worktree; unchanged Core/native artifacts restored through their matching Turbo cache keys. Both UI instances loaded this worktree's candidate source; no tracked changes were made.
  • All required GitHub checks are successful: Check, react-doctor, preview, preview.

Independent live Web + Desktop proof

Both real surfaces were launched and driven sequentially using their Verify recipes, separate temporary application/agent data, sample Projects and owned browser/Electron profiles. Doctor passed; Desktop verified anonymous ticket denial and authenticated success and drove the pinned Electron renderer, not a browser substitute.

On both surfaces:

  1. Created two sample Sessions through the composer UI.
  2. Clicked a row, moved the pointer outside it: row retained mouse focus, :focus-visible was false, and Archive opacity became 0.
  3. Tab reached Archive with :focus-visible and opacity 1; Shift+Tab returned to the row and kept Archive visible.
  4. Switched Sessions and moved away: neither row retained its Archive icon.
  5. Hover-archived the inactive Session: it disappeared without navigating away from the active Session.
  6. Archived the active Session: row disappeared and navigation returned to the draft.

Web additionally verified a 414px sidebar: Archive remained visible without hover; both sample Session records persisted archived: true. Both owned runs were cleaned up; screenshots and recordings were retained.

The attached before/after screenshots show before and after pointer exit on the candidate, not an edited or simulated baseline. Videos and screenshots are cropped to the relevant sidebar to exclude unrelated diagnostic paths/identifiers. The narrow-screen screenshot is separate from the wide-screen interaction captures.

Scope: isolated agent directories intentionally contained no model credentials; the real app therefore showed the expected model-request error after creating each Session. No model/tool execution is claimed or needed for this presentation-only change. No mocked RPC or hand-edited Session state was used.

No outstanding review threads or required approvals were found. Final head/base/readiness/CI recheck remains mandatory immediately before the authorized squash merge; any version change invalidates this acceptance.

web-row-hover-before

web-pointer-exit-after

web-keyboard-archive

web-narrow-visible

web-sidebar-drive.webm

desktop-row-hover-before

desktop-pointer-exit-after

desktop-keyboard-archive

desktop-sidebar-drive.webm

@oxwen11
oxwen11 merged commit 8c11d47 into main Sep 30, 2026
6 checks passed
@oxwen11
oxwen11 deleted the pie/f46dbb60 branch September 30, 2026 18:09
@oxwen11

oxwen11 commented Sep 30, 2026

Copy link
Copy Markdown
Owner Author

GitHub confirmed the authorized squash merge of reviewed head 431912c078904f0f26e412cbe073c92997446e8b as 8c11d477ac4a8b5453c401d3983430b2028df204. Final exact-head/base, strict up-to-date protection, readiness and all required CI checks passed immediately before merge. Independent review and Web/Desktop evidence: #415 (comment)

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants