fix(board): comment count (not [object Object]), boot-once, tighter heading (v0.1.4)#17
Merged
Merged
Conversation
…eading (v0.1.4) Fixes two board bugs and polishes the heading. #16 — comments rendered as "[object Object]". `gh issue list --json comments` returns an ARRAY of comment objects (verified against real gh), not a count; the row stringified the array. Render `it.comments.length` instead, and swap the 💬 emoji for the inline Lucide message-square icon (currentColor-themed, host-free — no runtime dep or kit icon API). #15 — issue list still thrashed on mount despite #13's "boot once". The kit's `initPluginView` callback fires on the initial init AND every re-theme (+ the handshake re-send), so the single boot() still ran repeatedly — each run rebuilt the picker and re-triggered load(). Guard boot() with a `booted` flag so it runs exactly once, on both the board and the new-issue form (whose picker would otherwise clobber an in-progress selection on re-theme). Heading tightening — refresh glyph (↻) → Lucide refresh-cw icon, tighter bar padding/gap, and "Pull Requests" → "PRs" for the narrow right dock. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
👀 Quinn is reviewing — verdict (PASS / WARN / FAIL) + findings to follow. |
There was a problem hiding this comment.
QA Audit — PR #17 | fix(board): comment count (not [object Object]), boot-once, tighter heading (v0.1.4)
VERDICT: WARN (pending CI — test still in_progress)
CI Status
- test: ⏳ in_progress
Diff Review
view.py: comment-count fix correctly computes.lengthfrom the array (with numeric fallback), inline Lucide SVGs for comment + refresh icons,bootedidempotency guard on both pages — all sound.protoagent.plugin.yaml+pyproject.toml: v0.1.3 → v0.1.4 in lockstep.tests/test_board_view.py: three new string-assertion tests covering the idempotency guard, comment-count render, and icon/heading changes. Consistent with existing test style.
Observations
- LOW: clawpatch structural review returned 502 (checkout cache miss) — manual diff review substituted; no findings missed on a diff this size.
- No unresolved CodeRabbit threads. No security, data-loss, or regression risks identified.
Findings are all clean — this is a PASS once CI goes terminal-green.
— Quinn, QA Engineer
|
Submitted COMMENT review on |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Audit + fix of the two open board issues, plus a heading polish. All host-free;
ruff+pytestgreen (91 passed).#16 — comments show
[object Object]api.pyasksghfor thecommentsfield, which — verified against realgh— returns an array of comment objects, not a count. The row didesc(it.comments)→String([{…}])→[object Object].Array.isArray(it.comments) ? it.comments.length : (Number(it.comments)||0), shown only when > 0 with an"N comments"tooltip.message-squareicon — inline SVG (exact v0.468 geometry from the host's ownlucide-react),currentColor-themed, no runtime dep / kit icon API.Closes #16
#15 — issue list thrash on mount (the #13/#14 fix wasn't enough)
The kit's
initPluginViewcallback fires on the initialprotoagent:initand every re-theme, and the console re-sendsiniton the ready ping to close the handshake race — so the singlekit.initPluginView(boot)from #14 still firedboot2+ times on mount.bootwasn't idempotent: each run rebuilt the picker and re-triggeredload()(each flashing "Loading…"); theloadSeqtoken only dedups fetch results, not the visible resets.bootwith abootedflag so config-fetch + picker-build + firstload()run exactly once. Applied to both pages — the new-issue form had the same latent bug (a re-theme would clobber an in-progress repo selection).Closes #15
Heading tightening
↻glyph → Luciderefresh-cwicon (consistent with the comment icon).title=) for the narrow right dock.Tests
Added
test_pages_boot_is_idempotent,test_board_renders_comment_count_not_the_array,test_board_heading_uses_icon_actions. Version bumped to v0.1.4 (manifest + pyproject in lockstep).🤖 Generated with Claude Code