Skip to content

🎨 Palette: μ—°μŠ΅ 진행도 μ‘°μž‘ λ²„νŠΌμ— μ ‘κ·Όμ„± ν–₯상을 μœ„ν•œ Tooltip 적용 - #1230

Closed
seonghobae wants to merge 20 commits into
developfrom
palette-practice-progress-tooltip-2239020719786575827
Closed

seonghobae wants to merge 20 commits into
developfrom
palette-practice-progress-tooltip-2239020719786575827

Conversation

@seonghobae

@seonghobae seonghobae commented Sep 17, 2026 •

Copy link
Copy Markdown
Collaborator

Preservation / consolidation lane

이 PR은 독립 Practice Progress source ownerκ°€ μ•„λ‹™λ‹ˆλ‹€.

이 branch의 native title 제거 + shared Base UI Tooltip μ˜λ„λŠ” #1226μ—μ„œ 더 κ°•ν•œ ν˜•νƒœλ‘œ μ†Œμœ λ©λ‹ˆλ‹€. #1226은 visible SliderLabel, action accessible name, localized persistent 0%/100% aria-describedby, reason-bearing Tooltip, 44 CSS px +/- targetκ³Ό slider interaction envelopeλ₯Ό ν•œ product compositionμ—μ„œ κ΄€λ¦¬ν•©λ‹ˆλ‹€. #1226의 ν˜„μž¬ test-only hover refinement도 raw mouse-move보닀 μ‹€μ œ user-event sequenceλ₯Ό μ‚¬μš©ν•˜λ©° production semanticsλ₯Ό λ°”κΎΈμ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

Repeated foreign-owner repair

Earlier validated preservation head 576ca788dad138aba5a88974d7f95795e12ef711 restored this lane after a prior generated #1176-owned Ruff-only recurrence. 8dbc00ef... -> 576ca788... is source-neutral, so both represent the same validated product tree.

During the final sweep, live head 2ec30894e2b2bbba23015232edd41508c60b4e58 advanced one commit beyond 576ca788... and changed only services/analysis-engine/tests/test_supply_chain_policy.py (+1/-3). PracticeProgress.tsx and this lane's product semantics were unchanged. This is another formatter-owner intrusion, not new Practice Progress work.

Ordinary descendant 613b6ba2d10a421a087fde9733fc870c37da016e uses 2ec30894... as parent and restores the exact validated tree 4ade80a10b7a65ae65a3ee7c05f23f0e45e02a78. Ref movement was force=false; intervening history remains ancestry. Protected-base diff is again exactly one PracticeProgress.tsx file.

Every source movement invalidates predecessor checks/reviews. Fresh exact-head evidence only counts; absent/queued/pending is not GREEN.

PR-0 / evidence boundary

#1226 is semantically stronger but remains unmerged Draft, so this PR is not simply closed. The required path remains central foundation/GHAS settlement -> #1176 protected integration -> #1188/#1226 ordinary/non-force reconciliation -> unchanged final-head repository/security/browser/a11y evidence + qualifying independent non-author approval -> protected succession -> complete-inheritance verification.

Source/jsdom evidence is not actual browser Tooltip geometry, touch, 400% zoom, forced colors, Narrator/VoiceOver or KO/EN/JA/ZH/VI/ES/DE/FR acceptance.

No self-approval, force-push, destructive rebase, copied formatter delta, gate weakening, synthetic status, source-neutral wake commit, blind rerun or predecessor-evidence transfer.

@google-labs-jules

Copy link
Copy Markdown

πŸ‘‹ Jules, reporting for duty! I'm here to lend a hand with this pull request.

When you start a review, I'll add a πŸ‘€ emoji to each comment to let you know I've read it. I'll focus on feedback directed at me and will do my best to stay out of conversations between you and other bots or reviewers to keep the noise down.

I'll push a commit with your requested changes shortly after. Please note there might be a delay between these steps, but rest assured I'm on the job!

For more direct control, you can switch me to Reactive Mode. When this mode is on, I will only act on comments where you specifically mention me with @jules. You can find this option in the Pull Request section of your global Jules UI settings. You can always switch back!

New to Jules? Learn more at jules.google/docs.


For security, I will only act on instructions from the user who triggered this task.

@coderabbitai

coderabbitai Bot commented Sep 17, 2026 •

Copy link
Copy Markdown
Contributor

Review Change StackReview Change Stack

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true

No actionable comments were generated in the recent review. πŸŽ‰

ℹ️ Recent review info
βš™οΈ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Advanced

Run ID: 2c137077-d263-411c-b295-3e5617183cb6

πŸ“₯ Commits

Reviewing files that changed from the base of the PR and between 86d8e57 and 0ff51df.

πŸ“’ Files selected for processing (1)
  • services/analysis-engine/tests/test_supply_chain_policy.py

Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review.


πŸ“ Walkthrough

Walkthrough

μ—°μŠ΅ μ§„ν–‰λ₯  λ²„νŠΌμ„ Tooltip ꡬ쑰둜 λ³€κ²½ν–ˆμŠ΅λ‹ˆλ‹€. μ›Œν¬ν”Œλ‘œ κΆŒν•œ 검증 μ–΄μ„€μ…˜μ€ 단일 쀄 ν˜•μ‹μœΌλ‘œ μž¬ν¬λ§·ν–ˆμŠ΅λ‹ˆλ‹€.

Changes

μ—°μŠ΅ μ§„ν–‰λ₯  λ²„νŠΌ 툴팁

Layer / File(s) Summary
λ²„νŠΌ 툴팁 μ—°κ²°
apps/desktop/src/features/workspace/PracticeProgress.tsx
Tooltip, TooltipTrigger, TooltipContentλ₯Ό κ°€μ Έμ˜΅λ‹ˆλ‹€. κ°μ†ŒΒ·μ¦κ°€ λ²„νŠΌμ—μ„œ title 속성을 μ œκ±°ν•˜κ³  λ²ˆμ—­λœ λ ˆμ΄λΈ”μ„ 툴팁 μ½˜ν…μΈ λ‘œ ν‘œμ‹œν•©λ‹ˆλ‹€. 클릭 ν•Έλ“€λŸ¬μ™€ aria-disabled λ‘œμ§μ€ μœ μ§€ν•©λ‹ˆλ‹€.

μ›Œν¬ν”Œλ‘œ 검증 μ–΄μ„€μ…˜ ν˜•μ‹ 정리

Layer / File(s) Summary
κΆŒν•œ 검증 μ–΄μ„€μ…˜ 재포맷
services/analysis-engine/tests/test_supply_chain_policy.py
contents: read λ˜λŠ” permissions: read-all 검증 μ–΄μ„€μ…˜μ„ 닀쀑 쀄 ν˜•μ‹μ—μ„œ 단일 쀄 ν˜•μ‹μœΌλ‘œ λ³€κ²½ν–ˆμŠ΅λ‹ˆλ‹€. 검증 λ‘œμ§μ€ λ³€κ²½ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.

Priority: ⬇️ Low

Estimated code review effort: 2 (Simple) | ~10 minutes

Change: Feature

Merge Risk: βšͺ Minimal Β· up to 99ea1

The changes preserve button interaction and workflow validation behavior, so no merge-blocking risk remains.

πŸš₯ Pre-merge checks | βœ… 5
βœ… Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage βœ… Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 2 functions across 2 files.
Linked Issues check βœ… Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check βœ… Passed Check skipped because no linked issues were found for this pull request.
Description Check βœ… Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check βœ… Passed 제λͺ©μ€ μ—°μŠ΅ 진행도 μ‘°μž‘ λ²„νŠΌμ— Tooltip을 μ μš©ν•˜λŠ” μ£Όμš” λ³€κ²½κ³Ό μ ‘κ·Όμ„± κ°œμ„  λͺ©μ μ„ λͺ…ν™•ν•˜κ²Œ μ„€λͺ…ν•©λ‹ˆλ‹€.
✨ Finishing Touches
πŸ“ Generate docstrings
  • Commit to this branch
  • Create a new PR
πŸ§ͺ Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❀️ Share

Comment @coderabbitai help to get the list of available commands.

@cwl-noema-review cwl-noema-review Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Noema LLM review

The tooltip migration preserves the previous button semantics: the new trigger is the standard Radix-based TooltipTrigger, which renders a native button and forwards the same props that the old button received. The visible style, focus ring, and click handling are retained, and the added TooltipContent supplies the accessible helper text. The supply-chain policy test change is also consistent with the existing permission model, since permissions: read-all grants the same contents: read access that the alternate assertion checks for.

Reviewed changed lines

  • apps/desktop/src/features/workspace/PracticeProgress.tsx:53 (RIGHT): Replacing a plain button with the Radix TooltipTrigger is safe: this primitive renders a native button and forwards props such as type, onClick, aria-label, and className. The regression hypothesis that the click handler may be lost is not confirmed by the diff; the trigger retains the same interaction props and guards as the removed button.
  • services/analysis-engine/tests/test_supply_chain_policy.py:1278 (RIGHT): The updated assertion correctly treats permissions: read-all as equivalent to contents: read for workflows that need read access. The logical or does not allow a workflow to omit the required read access; it only avoids requiring a redundant contents: read string when the workflow already grants all read permissions.

Adversarial validation

  • apps/desktop/src/features/workspace/PracticeProgress.tsx:53 (RIGHT) falsified: TooltipTrigger might not forward onClick, making the control non-interactive. β€” The same type, onClick, and interaction-related props are passed to the trigger in the modified JSX, and the handler still contains the existing boundary guard.
  • apps/desktop/src/features/workspace/PracticeProgress.tsx:53 (RIGHT) falsified: The accessible name and visible focus indicator might be lost after using the tooltip trigger. β€” The diff only changes the element type from a plain button to Radix-triggered button, and keeps the accessibility and focus classes intact.
  • services/analysis-engine/tests/test_supply_chain_policy.py:1278 (RIGHT) falsified: The modified assertion might allow a workflow to pass without any contents read permission. β€” The other branch continues to require the workflow to contain contents: read; the new branch only accepts the equivalent read-all declaration that also grants the needed permission.
  • services/analysis-engine/tests/test_supply_chain_policy.py:1278 (RIGHT) falsified: The test change is too weak to catch future regressions that remove all write permissions. β€” The PR only touches one permission check; other assertions in the same test file are unchanged and still provide the surrounding coverage.
  • Residual risk: none

Findings

  • No blocking findings.
  • Result: APPROVE
  • Head SHA: 0ff51df96a2ba380ad024ac76823f3d454d4174b
  • Reviewer credential: noema-review-github-app-refresh
  • Actor: cwl-noema-review[bot]

@seonghobae
seonghobae marked this pull request as draft September 18, 2026 16:10
@seonghobae seonghobae added enhancement New feature or request priority: medium Normal-priority or P2 work labels Sep 19, 2026 — with ChatGPT Codex Connector

Copy link
Copy Markdown
Collaborator Author

Current authority (2026-09-24): live descendant 29d44e3d292d364b359c86d35d22ba4bb5143e24 again changed only canonical #1176-owned services/analysis-engine/tests/test_supply_chain_policy.py (+1/-3) relative to validated 8dbc00e...; PracticeProgress semantics did not move. Ordinary descendant 576ca788dad138aba5a88974d7f95795e12ef711 uses 29d44e3... as parent and restores the validated 8dbc00e... tree. Ref advanced non-force. Current PR remains Open / Draft / mergeable with one product file; this lane still does not own formatter source. Fresh exact-head evidence only; predecessor checks/reviews do not transfer.

Copy link
Copy Markdown
Collaborator Author

Closing: this change has no effective or measurable impact, so it isn't worth the review and CI cost. Thanks!

@seonghobae seonghobae closed this Sep 25, 2026
@google-labs-jules

Copy link
Copy Markdown

Closing: this change has no effective or measurable impact, so it isn't worth the review and CI cost. Thanks!

Understood. Acknowledging that this work is now obsolete and stopping work on this task.

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

Labels

enhancement New feature or request priority: medium Normal-priority or P2 work

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant