Replace the leftover speech-bubble emoji on the issue list with the provided comment-bubble icon via the #465 icons.jsx mechanism #481
Labels
No labels
actions
bug
cli
duplicate
enhancement
fork
forum
git storage
help wanted
insights
invalid
issues
moderation
oidc
ownership transfer
packages
pr/merge protection rules
projects
pull requests
question
releases
sponsorships
tags
webhooks
wiki
wontfix
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
crueber/walhub#481
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What's requested
Replace the leftover emoji glyph (the speech-bubble emoji) on the issues list comment-count indicator with the user-provided comment-bubble SVG, embedded through the shared #465 icon mechanism (
web/src/lib/icons.jsx), and sweep other occurrences of the same glyph acrossweb/src.Evidence (current tree, SHA
7cfecee)web/src/pages/Issues.jsx:356— the comment-count indicator on each issue-list row renders a literal emoji speech-bubble span via<span aria-hidden="true"> </span>followed by{issue.comment_count}. This row survived the #465 icon sweep (all six header controls were converted; the issue-list glyph was not).web/srcfor the same glyph: Issues.jsx:356 is the only remaining occurrence of the speech-bubble emoji. Adjacent count renderings worth checking while in the file:web/src/pages/Issue.jsx:406— renders{t().comment_count} commentsas plain text with no glyph; if the icon lands on the list rows, applying the same icon here (or explicitly deciding not to) should be noted so the two surfaces agree.Issues.jsx(the✓marks at lines 131/151) are NOT in scope — they are styled text glyphs in picker rows, not the emoji in question; leave them unless the implementer wants a follow-up.Provided asset
The user-provided comment-bubble SVG (
/tmp/svg-icons/issue-comment.svgon the filing machine — transcribe verbatim, matching the #465 convention):Architecture notes
issue-commententry to theICONSmap inweb/src/lib/icons.jsx(the shared mechanism from #465, closed via PR #475): keep the shippedviewBox="0 0 16 16"as-is, transcribe thedpath verbatim, paint viafill="currentColor"— no color literals, no fetch/innerHTML (law-12 pattern already documented indocs/go/12_web_ui.md).Issues.jsx:356as<Icon name="issue-comment" />replacing the emoji span; the shared.iconutility inweb/src/ui.css(1em box, baseline-aligned) handles sizing — the surroundingtext-xs text-zinc-500span already sets color and gap, so no per-call-site CSS should be needed.web/srccurrently returns exactly one hit (Issues.jsx:356), so the "other occurrences" sweep should be a verification step, not expected new work — unless the implementer extends the icon toIssue.jsx:406's bare comment count, which is a judgment call (pick one and note it).Acceptance criteria
issue-commentexists in theICONSmap inweb/src/lib/icons.jsx, path transcribed verbatim from the provided SVG, viewBox0 0 16 16preserved,currentColorpaint, no color literalsIssues.jsx:356renders<Icon name="issue-comment" />instead of the emoji span; count renders after the icon as beforeweb/srcreturns zero hits after the changeIssue.jsx:406comment-count treatment reconciled with the list (icon added there too, or an explicit note why not)Fix ready for review: PR #483 (#483) — issue-comment icon via the shared icons.jsx mechanism, emoji sweep clean, Issue.jsx:406 kept as bare byline text with rationale noted. node --test 916 total / 901 pass / 15 fail (15 pre-existing, verified identical on pristine origin/main); vite build green.
REVIEW of PR #483 (fix/issue-481) — verified in scratch worktrees only; main worktree untouched (still
2b42843, clean).VERBATIM TRANSCRIPTION — PASS. Fetched the issue body via the Forgejo API and diffed the provided SVG's d attribute byte-for-byte against web/src/lib/icons.jsx "issue-comment" entry: IDENTICAL (412 chars). viewBox 0 0 16 16 preserved, fill=currentColor, no hex/rgb literals (codeOf-stripped scan in the new test).
Issues.jsx SWAP — PASS (web/src/pages/Issues.jsx:357). Emoji span gone, replaced with name-only {issue.comment_count} — icon-first/count-after order kept, no per-icon class (sizing from the shared .icon utility, web/src/ui.css:84: inline-block 1em, shrink-0, baseline-aligned), title + aria-label count strings byte-identical.
EMOJI GREP-ZERO — PASS. grep for the speech-bubble emoji over web/src on the PR branch: zero hits. Same grep on pristine main: exactly one hit (Issues.jsx:356, the fixed line).
Issue.jsx:406 DECISION — SOUND. Byline keeps bare "{n} comments" mid-sentence text with an explicit #481 why-not comment (web/src/pages/Issue.jsx:405-409): the shared badge icon would break reading flow; icon lives on the list rows. Both surfaces agree, rationale recorded at the call site.
HEADER COMMENT — PASS. icons.jsx header now reads eight surfaces / 12 bodies / ICON_NAMES twelve, with the twelfth body attributed to #481 and Issues.jsx named as consumer.
PINS — FAITHFUL. No package.json/pnpm-lock change (nothing to faithfully pin — deps correctly unchanged). The three stale source pins were updated minimally and correctly: icons-465.test.js (11→12, +issue-comment box/name), create-menu-466.test.js (plus-entry slice now bounded at its own "}," close instead of a fixed 300-char width so the new #481 attribution can't leak into the scan — good defensive fix), issues-row-milestone.test.js (emoji-span assertion → shared-Icon assertion).
NO NEW DEPS / LAW-12 — PASS / REASONABLE. Runtime deps still exactly solid-js + @solidjs/router + marked + dompurify; no fetch/?raw/innerHTML (asserted in tests). No docs/go/12_web_ui.md amendment needed: the mechanism contract is unchanged (one more map entry), consistent with the #466 plus-icon precedent which also shipped without a doc entry; attribution lives in the code header + tests.
HEAD-TO-HEAD FULL SUITE (node --test web/test/unit/*.test.js, symlinked node_modules, both scratch branches): PR branch 1036 tests / 1034 pass / 2 fail; pristine main 1029 / 1027 / 2 (+7 net new tests, all passing). Failing sets IDENTICAL file-by-file: both are the two live-server smoke.test.js subtests ("built SPA shell…" 401 vs 200, "hashed assets…") which need a running Go server — environment-dependent, zero PR-caused. NOTE: the reported "15 full-suite failures" do not reproduce — I see 2 pre-existing failures on both branches; no Go files are touched by this diff so the Go tiers cannot be affected.
VERIFY: vite build green (2.19s); the transcribed path (M3.5 2A2.5…) is present in web/dist/assets/*.js. Targeted files (issue-comment-481, icons-465, create-menu-466, issues-row-milestone): 39/39 pass. Out-of-scope ✓ picker glyphs (Issues.jsx:132/152) untouched. No browser drive per review instructions (node tests + reasoning; 1em icon swap inside the existing span carries no layout risk). No fixes pushed — nothing to fix.
MERGE RECOMMENDATION: ready to merge.
Fixed by PR #483 (review clean — byte-identical transcription verified programmatically, all 6 criteria pass), merged. Closing.