Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .Jules/palette.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,7 @@
## 2024-07-13 - CLI ์ถœ๋ ฅ์˜ ์˜๋ฌธ๋ฒ•์  ๋ณต์ˆ˜ํ˜• ๋ฐ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ํžŒํŠธ ๊ฐœ์„ 
**Learning:** CLI ์ถœ๋ ฅ์—์„œ `file(s)`, `issue(s)`, `rule(s) excluded`์™€ ๊ฐ™์ด ๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•œ ๋ณต์ˆ˜ํ˜• ํ‘œ๊ธฐ๋ฒ•์€ ๊ฐ€๋…์„ฑ์„ ๋–จ์–ด๋œจ๋ฆฌ๊ณ  ํˆฌ๋ฐ•ํ•œ(developer-centric) ๋А๋‚Œ์„ ์ค๋‹ˆ๋‹ค. ๋˜ํ•œ, ์—๋Ÿฌ ๋ฐœ์ƒ ์‹œ ๋‹จ์ˆœ ์˜ˆ์™ธ ๋‚ด์šฉ๋งŒ ์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์ฆ‰์‹œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํ•ด๊ฒฐ์ฑ…(Hint)์„ ํ•จ๊ป˜ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด CLI ์‚ฌ์šฉ์ž ๊ฒฝํ—˜(DX) ํ–ฅ์ƒ์— ๋งค์šฐ ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค.
**Action:** ์กฐ๊ฑด๋ถ€ f-string(์˜ˆ: `s_suffix = "s" if count != 1 else ""`)์„ ํ™œ์šฉํ•˜์—ฌ ๋™์ ์œผ๋กœ ์ •ํ™•ํ•œ ๋ณต์ˆ˜ํ˜• ๋‹จ์–ด(file/files)๋ฅผ ์ถœ๋ ฅํ•˜๋„๋ก ๊ฐœ์„ ํ•˜๊ณ , ์˜ˆ์™ธ ๋ฐœ์ƒ ๋กœ์ง์—๋Š” ํ•ญ์ƒ `๐Ÿ’ก Hint:`๋ฅผ ํฌํ•จํ•˜์—ฌ ํ›„์† ์•ก์…˜์„ ์•ˆ๋‚ดํ•˜๋„๋ก ํ‘œ์ค€ํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. (๋‹จ, Python 3.12 ํ™˜๊ฒฝ์˜ `black` ํฌ๋งคํ„ฐ ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด ๋ฐฑ์Šฌ๋ž˜์‹œ๊ฐ€ ํฌํ•จ๋œ ์ค‘์ฒฉ f-string ์‚ฌ์šฉ์„ ํ”ผํ•˜๊ณ  ๋ณ€์ˆ˜ ์ถ”์ถœ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.)

## 2026-07-19 - Dialog Accessibility Attributes
**Learning:** Native HTML <dialog> elements generated dynamically need explicit aria-labelledby targeting an ID injected on the fly, and their triggering table rows must use aria-haspopup='dialog'.
**Action:** Always link trigger roles and dialog labels explicitly using ARIA when rendering zero-build-step vanilla UI components.
8 changes: 4 additions & 4 deletions scanner/dashboard/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@
</header>
<main id="app"></main>

<dialog id="detail"></dialog>
<dialog id="detail" aria-labelledby="dlg-title"></dialog>

<script>
const SEV = {
Expand Down Expand Up @@ -154,7 +154,7 @@ <h1>No findings loaded</h1>
const rows = filtered.map(({f,i})=>{
const s = String(f.severity||'INFO').toUpperCase();
const block = isDeployBlocking(f);
return `<tr data-i="${i}" tabindex="0" role="button" aria-label="View details for finding">
return `<tr data-i="${i}" tabindex="0" role="button" aria-haspopup="dialog" aria-label="View details for finding">
<td><span class="chip" style="background:${SEV[s]?SEV[s].color:'var(--info)'}">${s}</span></td>
<td>${esc(f.message)}</td>
<td class="file">${esc(f.file)}:${esc(f.line)}</td>
Expand All @@ -180,7 +180,7 @@ <h1>Dashboard</h1>
</select>
</div>
<div class="panel"><table>
<thead><tr><th>Severity</th><th>Finding</th><th>File</th><th>Category</th><th>Status</th></tr></thead>
<thead><tr><th scope="col">Severity</th><th scope="col">Finding</th><th scope="col">File</th><th scope="col">Category</th><th scope="col">Status</th></tr></thead>
<tbody>${rows||'<tr><td colspan="5" style="color:var(--muted);padding:24px">No findings match the filter.</td></tr>'}</tbody>
</table></div>
</div>
Expand Down Expand Up @@ -221,7 +221,7 @@ <h1>Dashboard</h1>
d.innerHTML = `
<div class="dlg-head">
<span class="chip" style="background:${SEV[s]?SEV[s].color:'var(--info)'}">${s}</span>
<span class="t">${esc(f.rule_id)}</span>
<span class="t" id="dlg-title">${esc(f.rule_id)}</span>
<button aria-label="Close" onclick="document.getElementById('detail').close()">โœ•</button>
</div>
<div class="dlg-body">
Expand Down
Loading