PhyberApex/kuroshiro

refactor(ui): tidy two small clone groups (plugins grid, screen card setup)

Open

#845 opened on Aug 22, 2026

 (0 comments) (0 reactions) (0 assignees)TypeScript (0 forks)auto 404
fallowgood first issueready-for-agent

Repository metrics

Stars
 (10 stars)
PR merge metrics
 (Avg merge 3d 2h) (92 merged PRs in 30d)

Description

Problem Statement

Two small duplicated blocks in the UI reported by fallow dupes:

  1. packages/ui/src/views/PluginsOverviewView.vue:79-93views/PluginsView.vue:72-86: the VRow/VCol grid that renders PluginCard per plugin (15 lines). Differences: the button label and the :device-id / event handlers passed to PluginCard.
  2. packages/ui/src/components/AddScreenCard.vue:14-20components/ScreenListCard.vue:15-20: identical setup (defineProps<{ deviceId }>, useScreensStore, useDeviceStore, device computed, useDeviceRenderTarget(device)).

Solution

  1. Extract a PluginCardGrid.vue component taking plugins, optional deviceId, and emitting assignments-changed / deleted; use it from both views.
  2. Extract a useDeviceRenderContext(deviceId) composable (in composeables/) returning { device, renderTarget, screensStore } and use it from both cards.

No behavior change; keep data-test-ids and run pnpm --filter ./packages/ui test:e2e.

Verification

  • pnpm lint && pnpm type-check && pnpm test pass
  • Run pnpm fallow:baseline in the same PR so the finding disappears from .fallow-baselines/, then confirm pnpm fallow:ci passes. Never add new findings to a baseline; see docs/agents/fallow.md.

Found by the initial fallow scan (pnpm fallow) on 2026-08-22 and baselined so CI stays green until this is fixed.

Contributor guide