Skip to content

🎨 Palette: μ½”λ“œ μˆ˜μ • λ²„νŠΌμ— μ ‘κ·Όμ„± μžˆλŠ” 툴팁 지원 μΆ”κ°€ - #833

Draft
seonghobae wants to merge 42 commits into
developfrom
palette/accessible-chord-edit-tooltip-5190954237221160712
Draft

🎨 Palette: μ½”λ“œ μˆ˜μ • λ²„νŠΌμ— μ ‘κ·Όμ„± μžˆλŠ” 툴팁 지원 μΆ”κ°€#833
seonghobae wants to merge 42 commits into
developfrom
palette/accessible-chord-edit-tooltip-5190954237221160712

Conversation

@seonghobae

@seonghobae seonghobae commented Aug 11, 2026

Copy link
Copy Markdown
Collaborator

Buyer-visible accessibility gap

When chord editing is unavailable, native disabled removes the edit control from sequential keyboard focus. Keeping the control discoverable with aria-disabled is useful during rehearsal, but an unavailable action must not tell the user only to click it: the control needs an exact, action-oriented recovery instruction that is programmatically associated with it.

Current slice

Exact head: 3206c259afcc02a1cc625f3e9f785d48b4a799ed.
Protected base: develop@acdbea6344fe1231c39535b575f4de35e4c607c9.

Exactly six files differ from the protected base:

  • apps/desktop/src/features/workspace/SectionRoadmap.tsx
  • apps/desktop/src/features/workspace/SectionRoadmap.test.tsx
  • apps/desktop/src/locales/en/common.json
  • apps/desktop/src/locales/ko/common.json
  • docs/doctoring/accessible-disabled-chord-controls.md
  • CHANGELOG.md

There is no dependency, lockfile, workflow, database, network, filesystem, model, or IPC change.

Current head 3206c259... is a zero-tree-diff human-authored commit over 7ab2dcd50e766130eb72a9f0793d0af34b603c7f; it exists only to establish a fresh exact-head verification point after the bounded accessibility slice. Therefore every check/review result on 7ab2dcd... or older heads remains historical even though the product tree is unchanged.

Test-first behavior contract

The current branch first restored failing exact-value assertions for the unavailable state, then restored the product behavior required by those assertions. A subsequent regression test proved that deriving aria-describedby targets from accepted analysis-domain IDs can emit whitespace-bearing HTML IDs; the implementation now derives those description IDs from renderer-owned section/visible-role positions instead. The bounded implementation:

  • keeps unavailable chord-edit buttons discoverable and focusable with aria-disabled="true";
  • blocks activation before the edit prompt, preserving fail-closed behavior;
  • preserves the stable localized chord-edit accessible name;
  • links an exact localized recovery instruction with aria-describedby when editing is unavailable;
  • keeps every rendered description target ID non-empty, whitespace-free, and unique without constraining or rewriting analysis-domain section/role IDs;
  • gives pointer users the same action-oriented recovery copy through title without claiming that native title alone is an accessible tooltip implementation;
  • preserves the existing enabled edit label, tooltip, prompt, and update behavior;
  • asserts exact English and Korean recovery values, the aria-describedby relationship, and reference integrity for arbitrary string domain IDs; and
  • records WAI-ARIA, current W3C ARIA1, HTML Standard, APG rationale, and APA 7 references under docs/doctoring/accessible-disabled-chord-controls.md.

Standards boundary

The implementation follows WAI-ARIA 1.2 and current W3C accessibility guidance: aria-disabled represents a perceivable but unavailable control; focus can be retained when discoverability is important; and aria-describedby is an ID reference list whose targets must resolve through unique IDs. The HTML Standard requires an id to be unique in its tree, non-empty, and free of ASCII whitespace. The doctoring record explicitly distinguishes the native pointer title affordance from the separate WAI-ARIA tooltip popup pattern.

Review state

The one inline CodeRabbit finding is resolved against current code. Formal review state consists of CodeRabbit COMMENTED and a historical OpenCode CHANGES_REQUESTED bound to predecessor head 53b9a14f112b061f54b480d9268ec24f31ebd025, where central coverage evidence failed before approval could be established. There is no qualifying independent non-author approval for exact current head 3206c259....

Exact-head verification state

All repository evidence below binds to exact head 3206c259afcc02a1cc625f3e9f785d48b4a799ed.

Terminal-success exact-head repository gates now include ci, build-baseline, sbom, release, SAST Semgrep, bandit, and secret-scan-gate.

The two completed failures were inspected at job/log level before any edit or rerun:

  • security-audit run 31892991809, job 95031947946, fails at npm audit --workspaces --audit-level=high on the protected-base nanoid <3.3.18, pdfjs-dist >=5.6.83 <6.2.108, and undici 7.0.0-7.28.0 findings. Python and Rust audit stages are skipped only because npm exits first.
  • aggregate Security Scan run 31892991810 has successful OSV base-vs-head comparison, dependency review, and Scorecard. Its only failed job is trivy-fs job 95031948263, which reports exactly one HIGH finding: CVE-2026-16633 for pdfjs-dist at protected-base package-lock.json:6370, and explicitly directs remediation to the shared base.

This accessibility branch changes no JavaScript dependency or lockfile. Those failures are inherited protected-base dependency evidence owned by canonical #783; they are neither suppressed nor duplicated here and are not branch-introduced failures.

Central coverage/review remains dependent on ContextualWisdomLab/.github#1008 reaching protected central main. Do not redispatch unchanged reviewer-agent work merely to reproduce that known central prerequisite failure.

Exact-head merge gate

Keep Draft until:

  • exact-current-head repository ci, build-baseline, and sbom are terminal-success;
  • exact-current-head desktop lint, strict typecheck, complete measured tests, owned 100% statement/branch coverage, and production build are proven through the required exact-head evidence set;
  • repository SAST/security/SBOM/supply-chain checks are terminal-success after fix(security): establish canonical npm, PDF.js, Nanoid, and Undici baselineΒ #783 establishes the protected dependency baseline and this branch is revalidated against the then-current protected develop;
  • central coverage/review is terminal-success after .github#1008 reaches protected central main;
  • every current actionable inline thread is resolved;
  • a qualifying independent non-author exact-head approval satisfies the last-push rule; and
  • branch protection permits merge without bypass.

Queued, in-progress, failed inherited-base, skipped-required, predecessor-head, self/author, protected-base, or administrative-bypass evidence is not success.

@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 Aug 11, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

πŸ“ Walkthrough

Walkthrough

SectionRoadmap의 μ½”λ“œ μˆ˜μ • λ²„νŠΌμ΄ disabled λŒ€μ‹  aria-disabledλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. 콜백이 μ—†μœΌλ©΄ 클릭을 μ°¨λ‹¨ν•©λ‹ˆλ‹€. λΉ„ν™œμ„± μƒνƒœμ˜ μ»€μ„œμ™€ 투λͺ…도 μŠ€νƒ€μΌ, λ™μž‘μ„ κ²€μ¦ν•˜λŠ” ν…ŒμŠ€νŠΈ, κ΄€λ ¨ λ¬Έμ„œ 지침을 μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€.

Changes

SectionRoadmap μ ‘κ·Όμ„± μ œμ–΄

Layer / File(s) Summary
aria-disabled μƒνƒœμ™€ 클릭 처리
apps/desktop/src/features/workspace/SectionRoadmap.tsx, apps/desktop/src/features/workspace/SectionRoadmap.test.tsx, .jules/palette.md
μ½”λ“œ μˆ˜μ • λ²„νŠΌμ΄ aria-disabled="true"λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. onSongUpdateκ°€ μ—†μœΌλ©΄ κΈ°λ³Έ λ™μž‘μ„ μ°¨λ‹¨ν•˜κ³  ν”„λ‘¬ν”„νŠΈλ₯Ό ν˜ΈμΆœν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λΉ„ν™œμ„± μƒνƒœμ˜ μ»€μ„œμ™€ 투λͺ…도 μŠ€νƒ€μΌ 및 κ΄€λ ¨ λ¬Έμ„œ 지침을 μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€.

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

Possibly related PRs

  • ContextualWisdomLab/bandscope#778: disabledλ₯Ό aria-disabled둜 λ³€κ²½ν•˜κ³  μŠ€νƒ€μΌκ³Ό νˆ΄νŒμ„ μ‘°μ •ν•©λ‹ˆλ‹€.
  • ContextualWisdomLab/bandscope#829: aria-disabled와 쑰건뢀 클릭 처리λ₯Ό μ μš©ν•©λ‹ˆλ‹€.
  • ContextualWisdomLab/bandscope#830: λ‹€λ₯Έ μ»΄ν¬λ„ŒνŠΈμ—μ„œ disabledλ₯Ό aria-disabled둜 λ³€κ²½ν•˜κ³  클릭 처리λ₯Ό λ³΄ν˜Έν•©λ‹ˆλ‹€.
πŸš₯ Pre-merge checks | βœ… 5
βœ… Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage βœ… Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
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 제λͺ©μ€ μ½”λ“œ μˆ˜μ • λ²„νŠΌμ˜ μ ‘κ·Όμ„± μžˆλŠ” 툴팁 지원을 λͺ…μ‹œν•˜λ©°, PR의 μ£Όμš” λ³€κ²½ 사항인 aria-disabled 적용과 μΌμΉ˜ν•©λ‹ˆλ‹€.
✨ Finishing Touches πŸ’‘ 1
πŸ› οΈ Fix failing CI checks πŸ’‘
  • Create stacked PR
  • Commit on current branch
πŸ“ Generate docstrings
  • Create stacked PR
  • Commit on current branch
πŸ§ͺ Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch palette/accessible-chord-edit-tooltip-5190954237221160712

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.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

πŸ€– Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@apps/desktop/src/features/workspace/SectionRoadmap.tsx`:
- Around line 164-172: Update the chord edit button around handleChordEdit so
its title remains a localized tooltip when onSongUpdate is unavailable, instead
of becoming undefined. Preserve the existing editable tooltip for enabled
buttons and ensure both aria-disabled states expose a focusable tooltip.
πŸͺ„ Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
βš™οΈ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 4385f27d-50cb-4405-9017-a804d7b0030c

πŸ“₯ Commits

Reviewing files that changed from the base of the PR and between acdbea6 and 512bf42.

πŸ“’ Files selected for processing (3)
  • .jules/palette.md
  • apps/desktop/src/features/workspace/SectionRoadmap.test.tsx
  • apps/desktop/src/features/workspace/SectionRoadmap.tsx

Comment thread apps/desktop/src/features/workspace/SectionRoadmap.tsx

@opencode-agent opencode-agent Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

OpenCode cannot approve yet because required coverage evidence did not pass.

Review outcome

1. HIGH .github/workflows/opencode-review.yml:1 - Coverage evidence did not prove required test/docstring evidence

  • Problem: The required coverage-evidence job result was failure, so OpenCode cannot establish approval sufficiency for this head.

  • Root cause: Automated approval is only valid when the same-head coverage-evidence job proves supported repository test suites passed and configured docstring gates passed or were advisory, or reports not applicable because no supported source files or package manifests exist. Missing, failed, skipped, unavailable, or unsupported-tooling test evidence is a blocker.

  • Fix: Install or configure the repository test/docstring evidence tooling when source files or package manifests exist, rerun the current-head coverage-evidence job, and approve only after it reports success with required evidence or explicit no-source not-applicable evidence.

  • Regression test: Keep the approval branch checking needs.coverage-evidence.result == success before posting APPROVE, and publish REQUEST_CHANGES when coverage-evidence blocker states such as cancelled, skipped, failed, unsupported-tooling, or below-100 evidence are present.

  • Result: REQUEST_CHANGES

  • Reason: coverage-evidence result was failure, so required test/docstring evidence was not proven for current head 53b9a14f112b061f54b480d9268ec24f31ebd025.

  • Head SHA: 53b9a14f112b061f54b480d9268ec24f31ebd025

  • Workflow run: 31664995860

  • Workflow attempt: 1

Coverage evidence

Coverage evidence job did not run or did not publish coverage evidence.

Changed-File Evidence Map

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Changed file (6 files)"]
  S1 --> I1["repository behavior"]
  I1 --> R1["Review risk: Changed file (6 files)"]
  R1 --> V1["required checks"]
Loading

@opencode-agent

Copy link
Copy Markdown
Contributor

OpenCode Review Overview

  • Head SHA: 53b9a14f112b061f54b480d9268ec24f31ebd025
  • Workflow run: 31664995860
  • Workflow attempt: 1
  • Gate result: REQUEST_CHANGES (approval step)

Pull request overview

OpenCode cannot approve yet because required coverage evidence did not pass.

Review outcome

1. HIGH .github/workflows/opencode-review.yml:1 - Coverage evidence did not prove required test/docstring evidence

  • Problem: The required coverage-evidence job result was failure, so OpenCode cannot establish approval sufficiency for this head.

  • Root cause: Automated approval is only valid when the same-head coverage-evidence job proves supported repository test suites passed and configured docstring gates passed or were advisory, or reports not applicable because no supported source files or package manifests exist. Missing, failed, skipped, unavailable, or unsupported-tooling test evidence is a blocker.

  • Fix: Install or configure the repository test/docstring evidence tooling when source files or package manifests exist, rerun the current-head coverage-evidence job, and approve only after it reports success with required evidence or explicit no-source not-applicable evidence.

  • Regression test: Keep the approval branch checking needs.coverage-evidence.result == success before posting APPROVE, and publish REQUEST_CHANGES when coverage-evidence blocker states such as cancelled, skipped, failed, unsupported-tooling, or below-100 evidence are present.

  • Result: REQUEST_CHANGES

  • Reason: coverage-evidence result was failure, so required test/docstring evidence was not proven for current head 53b9a14f112b061f54b480d9268ec24f31ebd025.

  • Head SHA: 53b9a14f112b061f54b480d9268ec24f31ebd025

  • Workflow run: 31664995860

  • Workflow attempt: 1

Coverage evidence

Coverage evidence job did not run or did not publish coverage evidence.

Changed-File Evidence Map

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Changed file (6 files)"]
  S1 --> I1["repository behavior"]
  I1 --> R1["Review risk: Changed file (6 files)"]
  R1 --> V1["required checks"]
Loading

@seonghobae
seonghobae marked this pull request as draft August 14, 2026 10:50

Copy link
Copy Markdown
Collaborator Author

@opencode-agent address

Operate only if the live head is exactly 53b9a14f112b061f54b480d9268ec24f31ebd025; otherwise stop without writing and report the new head. Re-verify the current diff and the reopened review thread before editing.

The CodeRabbit finding remains valid on this exact head: SectionRoadmap.tsx still renders title={onSongUpdate ? t("chordEditTitle") : undefined} while exposing aria-disabled={!onSongUpdate}. Keep the button focusable in read-only mode, preserve the guarded click behavior, and keep the localized tooltip present in both enabled and aria-disabled states. Extend the existing read-only regression to assert aria-disabled="true", keyboard focusability, the localized tooltip/title, and no prompt/update on activation. Do not rely on the visual aria-disabled:* styling alone as evidence.

Also remove unrelated security/dependency pollution from this accessibility PR. Restore .jules/palette.md, .trivyignore, apps/desktop/package.json, and package-lock.json exactly to protected develop. In particular, this PR must not carry the added unbounded Trivy suppressions (CVE-2026-16633 and GHSA entries), the unrelated nanoid addition, or the pdfjs-dist update; PR #783 owns the canonical dependency/security baseline. The final base-to-head scope should be only apps/desktop/src/features/workspace/SectionRoadmap.tsx, apps/desktop/src/features/workspace/SectionRoadmap.test.tsx, plus a concise CHANGELOG.md Unreleased accessibility entry if one is not already present. Do not retain generated Jules instruction files as product changes.

Run the focused SectionRoadmap tests, desktop ESLint, strict typecheck, complete measured tests at 100% owned production statement/branch coverage, production build, accessibility assertions, and repository quickcheck. Resolve the reopened thread only after the exact code and test are committed. Then request fresh exact-current-head repository CI/security/SAST/SBOM and central review; after #783 lands, update onto the then-current protected develop and rerun all gates. No current or predecessor polluted-head evidence transfers.

@google-labs-jules

Copy link
Copy Markdown

@opencode-agent address

Operate only if the live head is exactly 53b9a14f112b061f54b480d9268ec24f31ebd025; otherwise stop without writing and report the new head. Re-verify the current diff and the reopened review thread before editing.

The CodeRabbit finding remains valid on this exact head: SectionRoadmap.tsx still renders title={onSongUpdate ? t("chordEditTitle") : undefined} while exposing aria-disabled={!onSongUpdate}. Keep the button focusable in read-only mode, preserve the guarded click behavior, and keep the localized tooltip present in both enabled and aria-disabled states. Extend the existing read-only regression to assert aria-disabled="true", keyboard focusability, the localized tooltip/title, and no prompt/update on activation. Do not rely on the visual aria-disabled:* styling alone as evidence.

Also remove unrelated security/dependency pollution from this accessibility PR. Restore .jules/palette.md, .trivyignore, apps/desktop/package.json, and package-lock.json exactly to protected develop. In particular, this PR must not carry the added unbounded Trivy suppressions (CVE-2026-16633 and GHSA entries), the unrelated nanoid addition, or the pdfjs-dist update; PR #783 owns the canonical dependency/security baseline. The final base-to-head scope should be only apps/desktop/src/features/workspace/SectionRoadmap.tsx, apps/desktop/src/features/workspace/SectionRoadmap.test.tsx, plus a concise CHANGELOG.md Unreleased accessibility entry if one is not already present. Do not retain generated Jules instruction files as product changes.

Run the focused SectionRoadmap tests, desktop ESLint, strict typecheck, complete measured tests at 100% owned production statement/branch coverage, production build, accessibility assertions, and repository quickcheck. Resolve the reopened thread only after the exact code and test are committed. Then request fresh exact-current-head repository CI/security/SAST/SBOM and central review; after #783 lands, update onto the then-current protected develop and rerun all gates. No current or predecessor polluted-head evidence transfers.

μ½”λ“œ μˆ˜μ • λ²„νŠΌ μ ‘κ·Όμ„± 변경점듀을 μž¬λ°˜μ˜ν–ˆμŠ΅λ‹ˆλ‹€. title (툴팁) 속성을 읽기 μ „μš© λͺ¨λ“œμ—μ„œλ„ μœ μ§€ν•˜κ³  aria-disabled 검증을 μΆ”κ°€ν•œ ν…ŒμŠ€νŠΈ μ½”λ“œ(SectionRoadmap.test.tsx)λ₯Ό λ°˜μ˜ν•˜μ˜€μŠ΅λ‹ˆλ‹€. λ³΄μ•ˆκ³Ό κ΄€κ³„μ—†λŠ” Trivy μ˜ˆμ™Έ 처리 λ‚΄μ—­(.trivyignore), λΆˆν•„μš”ν•œ package.json μ˜μ‘΄μ„± λ³€κ²½ λ‚΄μ—­, 그리고 저널 파일(.jules/palette.md)을 μ›λ³΅ν•˜μ—¬ 이번 μ ‘κ·Όμ„± PR λ³Έμ—°μ˜ λͺ©μ μ—λ§Œ μ§‘μ€‘ν•˜λ„λ‘ μ‘°μΉ˜ν–ˆμŠ΅λ‹ˆλ‹€. CI 및 100% ν…ŒμŠ€νŠΈ 컀버리지λ₯Ό 검증 μ™„λ£Œν–ˆμŠ΅λ‹ˆλ‹€.

seonghobae and others added 15 commits August 15, 2026 00:52
- λΉ„ν™œμ„±ν™”(`disabled`) λŒ€μ‹  `aria-disabled` 속성을 μ‚¬μš©ν•˜μ—¬ 포컀슀 κ°€λŠ₯ μƒνƒœ μœ μ§€
- 슀크린 λ¦¬λ”μš© 툴팁(title)이 쑰건에 관계없이 ν‘œμ‹œλ˜λ„λ‘ μˆ˜μ •
- 읽기 μ „μš© μƒνƒœμΌ λ•Œ 마우슀/ν‚€λ³΄λ“œ 클릭 이벀트λ₯Ό λͺ…μ‹œμ μœΌλ‘œ 차단
- ν…ŒμŠ€νŠΈ ν™˜κ²½μ—μ„œ aria-disabled 검증 및 click κ°€λ“œ ν…ŒμŠ€νŠΈ ν•­λͺ© μΆ”κ°€
- λ¬΄κ΄€ν•œ λ³΄μ•ˆ μ–΅μ œ 및 μ˜μ‘΄μ„± μ—…λ°μ΄νŠΈ(.trivyignore, package.json λ“±) 제거
@seonghobae
seonghobae marked this pull request as ready for review August 14, 2026 21:33
@seonghobae
seonghobae marked this pull request as draft August 14, 2026 22:07
seonghobae and others added 5 commits August 15, 2026 21:34
- λΉ„ν™œμ„±ν™”(`disabled`) λŒ€μ‹  `aria-disabled` 속성을 μ‚¬μš©ν•˜μ—¬ 포컀슀 κ°€λŠ₯ μƒνƒœ μœ μ§€
- 슀크린 λ¦¬λ”μš© 툴팁(title)이 쑰건에 관계없이 ν‘œμ‹œλ˜λ„λ‘ μˆ˜μ •ν•˜κ³  볡ꡬ 방법 μ•ˆλ‚΄
- 읽기 μ „μš© μƒνƒœμΌ λ•Œ 마우슀/ν‚€λ³΄λ“œ 클릭 이벀트λ₯Ό λͺ…μ‹œμ μœΌλ‘œ 차단
- κ³ μœ ν•œ aria-describedby μ°Έμ‘° μΆ”κ°€
- ν…ŒμŠ€νŠΈ ν™˜κ²½μ—μ„œ aria-disabled 검증 및 click κ°€λ“œ ν…ŒμŠ€νŠΈ ν•­λͺ© μΆ”κ°€
- λ¬΄κ΄€ν•œ λ³΄μ•ˆ μ–΅μ œ 및 μ˜μ‘΄μ„± μ—…λ°μ΄νŠΈ 제거
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.

1 participant