# Reported issues for canicode

Pod holds 21 of 47 problems reported by people outside the maintainer team. Issues filed by the project's own owners, members and collaborators are excluded entirely — a maintainer's release checklist is not a warning to a prospective user.

Back to [canicode](/mcp/canicode).

## Most discussed

### test: 통합 테스트 및 누락된 테스트 추가

## 문제

현재 모든 테스트가 유닛 테스트이며, 다음 영역에 테스트가 없습니다:

### 1. 통합 테스트 부재
- fixture 파일 → CLI 전체 흐름 (analyze → report 생성) 테스트 없음
- MCP 서버의 tool handler 통합 테스트 없음
- end-to-end 흐름 검증 불가

### 2. 플러그인 코드 무테스트
- `app/figma-plugin/src/main.ts` (526줄) 테스트 없음
- Figma API를 직접 테스트할 수 없지만, **변환 로직은 순수 함수로 추출하여 테스트 가능**

### 3. 웹앱 비즈니스 로직 무테스트
- `app/web/src/index.html` 내 ~300줄 JavaScript 로직 테스트 없음

### 4. HTML 리포트 스냅샷 테스트 없음
- `report-html/` 출력 변경을 감지할 방법 없음

## 제안

### Phase 1: 통합 테스트
```typescript
// cli.integratio

[Read the thread](https://github.com/let-sunny/canicode/issues/50) · 2026-03-25 · closed · 5 comments

### feat: Figma MCP 에이전트 연동 — 디자인 리뷰 자동화

## 배경

Figma MCP가 에이전트 기반 디자인 읽기/쓰기를 지원:
- `use_figma`: Plugin API JavaScript 실행으로 디자인 직접 create/edit/delete (2026-03-24 런칭)
- `generate_figma_design`: 웹 UI 캡처 → flat Figma 레이어 변환
- `get_design_context` + `get_metadata`: 디자인 구조/스타일 읽기

이 파이프라인에 canicode를 끼워넣으면 **코드리뷰처럼 디자인 리뷰를 자동화**할 수 있음.

## 유스케이스 3가지

### 1. 바이브코딩 시 디자인 품질 게이트
에이전트가 Figma MCP로 디자인을 수정할 때, 수정 전후로 canicode를 자동 실행하여 품질 저하 방지.

```
에이전트가 Figma 디자인 수정 (use_figma)
    ↓
canicode analyze (자동 실행)
    ↓
점수 하락 시 → 에이전트에게 "이 수정으로 Struct

[Read the thread](https://github.com/let-sunny/canicode/issues/92) · 2026-03-26 · closed · 4 comments

### User-flow test: `claude plugin add canicode` registers skills + MCP server (C)

## Why

#489 Phase 1 (#493) shipped \`.claude-plugin/plugin.json\` declaring three skill roots and the \`canicode-mcp\` MCP server. Published as part of v0.11.4 on npm. The hypothesis: a fresh Claude Code user can run **one command** (\`claude plugin add canicode\`) and have the three skills + MCP server registered — no \`canicode init\`, no manual MCP add, no copying files.

This issue is the user-flow test for that hypothesis. We hand the test plan below to **a fresh agent that knows nothing a

[Read the thread](https://github.com/let-sunny/canicode/issues/496) · 2026-04-25 · closed · 3 comments

### chore: 캘리브레이션 파이프라인 고도화

## 배경

6개 픽스처 전체 캘리브레이션을 돌린 결과, 파이프라인 자체는 설계 의도대로 작동하지만 효율성과 수렴성에 개선이 필요한 3가지 문제가 발견됨.

### 캘리브레이션 결과 요약

| Fixture | Grade | Similarity | Proposals | Applied | Rejected |
|---------|-------|-----------|-----------|---------|----------|
| figma-ui3-kit | B (75%) | 81% | 2 | 0 | 2 |
| material3-kit-1 | B (79%) | 93% | 5 | 0 | 5 |
| material3-kit-2 | B (77%) | 97% | 8 | 3 | 5 |
| simple-ds-card-grid | C+ (71%) | 95% | 9 | 1 | 7 |
| simple-ds-page-sections | B+ (80%) | 98% | 9 | 2 | 7 |
| simple-ds

[Read the thread](https://github.com/let-sunny/canicode/issues/14) · 2026-03-24 · closed · 3 comments

### [UX] Onboarding & tooling friction tracker (1st pass)

<!-- Paste into: https://github.com/let-sunny/canicode/issues/new?template=feature.yml -->
<!-- Or: gh issue create --title "..." --body-file .github/ISSUE-DRAFT-onboarding-ux-tracker.md  (after gh auth login) -->

# [UX] Onboarding & tooling friction tracker (1st pass)

**Labels:** `enhancement` (consider `documentation` for doc-only items)

**Summary:** Meta-issue tracking first-pass UX pain points around `canicode init`, Claude vs Cursor paths, MCP file locations, Figma reload, agent limits, 

[Read the thread](https://github.com/let-sunny/canicode/issues/461) · 2026-04-22 · closed · 2 comments

### MCP get_metadata no longer expands instance internals — design-tree quality degraded

## Problem

Figma MCP `get_metadata` no longer returns the internal structure of `instance` nodes. Instead of expanding the full subtree, it returns self-closing tags:

```xml
<!-- Expected (previously) -->
<instance id="562:10932" name="Header" x="0" y="0" width="375" height="84">
  <frame id="..." name="Block" ...>
    <frame id="..." name="Figma" ...>
      <vector id="..." name="Icon" ... />
    </frame>
  </frame>
  ...
</instance>

<!-- Actual (now) -->
<instance id="562:10932" name="Heade

[Read the thread](https://github.com/let-sunny/canicode/issues/120) · 2026-03-27 · closed · 2 comments

### feat: failedRules를 Sentry/PostHog에 전송

## 문제

#49에서 `AnalysisResult.failedRules`로 룰 실행 실패를 수집하게 되었지만, 이 데이터가 Sentry/PostHog으로 전송되지 않습니다. 프로덕션에서 어떤 룰이 얼마나 자주 실패하는지 추적할 수 없습니다.

## 설계 방향

**룰 엔진은 건드리지 않는다.** `rule-engine.ts`는 순수 분석 엔진으로 유지하고, 모니터링 의존성은 소비자 레이어(CLI, MCP)에만 둡니다.

`failedRules` 데이터가 이미 `AnalysisResult`에 반환되므로, 소비자가 후처리하면 됩니다:

```typescript
// cli/index.ts 또는 mcp/server.ts — 이미 monitoring import 있는 곳
const result = engine.analyze(file);

for (const f of result.failedRules) {
  captureError(new Error(f.error), { ruleId: f.

[Read the thread](https://github.com/let-sunny/canicode/issues/65) · 2026-03-25 · closed · 2 comments

### verify: end-to-end live run of canicode-roundtrip Code Connect close-out (#509 promotion gate)

Phase 1 ([#509](https://github.com/let-sunny/canicode/issues/509)) Workflow 1 promotion gate. The four sub-tasks are shipped but `docs/WORKFLOWS.md` Workflow 1 stays at 🚧 until a human runs the full Code Connect close-out flow on a real Figma file with a real Code Connect setup, and the observed behavior matches what the SKILL.md + docs claim.

## Setup the validator needs

- A **fresh empty directory** outside the canicode repo (so `.claude/skills/` is a clean install).
- A **Figma URL** pointi

[Read the thread](https://github.com/let-sunny/canicode/issues/525) · 2026-04-27 · closed · 1 comment

## Most recent

### Step 7d: send_code_connect_mappings errors as duplicate after add_code_connect_map already publishes

## Observed

During #527 Section A Pass B mapping registration (2026-04-28), the agent reported:

> Mapping confirmed live: 3384:3 → src/Button.tsx. The send_code_connect_mappings error was a no-op duplicate (the add_* call already persisted it).

So the contract is:
- \`add_code_connect_map\` already publishes the mapping (server-side persistence happens at this call).
- \`send_code_connect_mappings\` then errors because the mapping is already there.

Result is correct (\`Code Connect: ✅ mapped

[Read the thread](https://github.com/let-sunny/canicode/issues/534) · 2026-04-27 · closed · 0 comments

### doctor: pre-flight check for Figma component publish status before Step 7 mapping attempt

## Observed friction

During #527 Section A Pass B live verification (2026-04-28), Step 7 attempted \`add_code_connect_map\` + \`send_code_connect_mappings\` on a COMPONENT node and got \`Code Connect: ❌ failed — Published component not found. Please make sure component/component set is published before mapping.\`

The wrap-up's friendly remediation hint (\"publish the Figma library, then re-invoke\") is good, but **the user only learns about the prereq after a failed API attempt**. They have al

[Read the thread](https://github.com/let-sunny/canicode/issues/532) · 2026-04-27 · closed · 0 comments

### feat(rules): unmapped-component analyze rule (#509 sub-task 3)

Phase 1 (#509) sub-task 3 — add an analyze rule that flags Figma main components without a Code Connect mapping, so users notice unmapped components during normal `canicode analyze` runs and can fix them via `/canicode-roundtrip` (which now closes with mapping registration, #515 / #516).

## Why now (no base-rate gating)

Originally this was deferred behind a base-rate measurement ("how often does this fire on real designs?"). Decision: ship it without that gate. The closing-step roundtrip (#515

[Read the thread](https://github.com/let-sunny/canicode/issues/520) · 2026-04-27 · closed · 0 comments

### feat(skill): canicode-componentize — guide Claude through Figma Code Connect MCP tools (#509 sub-task 2)

Phase 1 (#509) sub-task 2 — the actual user-facing flow for **single component → Code Connect mapping**.

## Why this is a skill-only sub-task

The Figma MCP tools (`get_code_connect_suggestions`, `add_code_connect_map`, `send_code_connect_mappings`, `get_code_connect_map`) are called by the host (Claude Code) directly — canicode is not a Figma MCP client. The mapping registration + code-side wiring is owned by Figma's Code Connect tool itself. canicode's job here is **only to author the SKILL.m

[Read the thread](https://github.com/let-sunny/canicode/issues/514) · 2026-04-27 · closed · 1 comment

### feat(doctor): canicode doctor — Code Connect prerequisite check (#509 sub-task 1)

Phase 1 (#509) sub-task 1 — the prerequisite check that gates every other Code Connect step.

## Why this is sub-task 1

Code Connect requires the user's code repo to have `@figma/code-connect` installed and `figma.config.json` configured. Without these, every other Phase 1 step (MCP wrapper, invoke surface, match-confirmation UX) silently dead-ends with a confusing error from the Figma MCP tools. Surfacing the missing prerequisites with clear remediation is the cheapest, highest-leverage first 

[Read the thread](https://github.com/let-sunny/canicode/issues/512) · 2026-04-27 · closed · 0 comments

### feat(componentization): Phase 1 — single component → Code Connect mapping (Workflow 1 epic)

## Roadmap context

This is **Phase 1** of the canicode bootstrap roadmap (see `docs/WORKFLOWS.md`):

| Phase | Workflow | Status | Tracking |
|---|---|---|---|
| 1 | Component-to-code mapping | 🚧 Partial — this issue | **(this epic)** |
| 2 | Screen-to-code handoff | ✅ Largely shipped | (separate epic) |
| 3 | Bootstrap a design system from screens | 🗺️ Planned | #508 |

## User scenario

A designer/developer runs `canicode-roundtrip` on a Figma component → answers gotchas → annotations are wri

[Read the thread](https://github.com/let-sunny/canicode/issues/509) · 2026-04-27 · closed · 1 comment

### docs: "Other agents" install guide for non-Claude/Cursor hosts (manual skill copy)

## Why

Post-#496/#500 decision (see memory `project_init_vs_plugin.md`): canicode is **Claude-first**, no plugin/host abstractions. But we still ship 3 AgentSkills-compatible skills via npm — non-Claude users *can* use them by copying SKILL.md files into their host's scan path. We just need to document it instead of building flags for it.

## Scope

Add a short section to `docs/CUSTOMIZATION.md` (and a one-line README pointer) titled something like **"Other agents (manual install)"** covering:

[Read the thread](https://github.com/let-sunny/canicode/issues/501) · 2026-04-25 · closed · 0 comments

### Distribute canicode as a multi-host plugin (Claude Code bundle) instead of per-host `init` flags

> **Scope for `/develop` run (Phase 1 only — added 2026-04-25):**
> Land Phase 1 in this PR only: (1) `.claude-plugin/plugin.json` at repo root with id/version, three skill roots (`./skills/canicode`, `./skills/canicode-gotchas`, `./skills/canicode-roundtrip`), and `canicode-mcp` MCP server, plus (2) `.claude-plugin/` added to `package.json#files`. **Do NOT touch** SKILL.md frontmatter, README.md, or `docs/CUSTOMIZATION.md` — those overlap with the parallel #490 run. **Defer** Phase 2 (Cursor ma

[Read the thread](https://github.com/let-sunny/canicode/issues/489) · 2026-04-24 · closed · 1 comment

### feat: make codegen-ready grade threshold user-configurable

## Problem

The threshold that decides whether a design is "ready for code generation" — surfaced as \`isReadyForCodeGen\` in the gotcha-survey output — is **hardcoded** in \`src/core/engine/scoring.ts:153-155\`:

\`\`\`ts
export function isReadyForCodeGen(grade: Grade): boolean {
  return grade === "S" || grade === "A+" || grade === "A";
}
\`\`\`

So any design at A (≥85%) or above auto-passes the gotcha survey ("you can generate code, no questions needed"). Users cannot tighten or relax this c

[Read the thread](https://github.com/let-sunny/canicode/issues/480) · 2026-04-24 · closed · 1 comment

### docs: agent mistakes /canicode-roundtrip for an MCP tool during onboarding

## Problem

When a user asks an AI agent (Claude Code / Cursor) to "run canicode-roundtrip", the agent inspects the MCP tool list, doesn't find a `canicode-roundtrip` tool there (only `analyze`, `gotcha-survey`, `visual-compare`, `list-rules`, `docs`, `version`), and concludes the user must register it as an MCP tool — when in fact it's a **Skill** (slash command).

## Reproduction (from real session, 2026-04-24)

User: "라운드트립 돌려줘" (run the roundtrip)
Agent:
> 사용 가능한 툴 ✅ analyze, gotcha-survey, 

[Read the thread](https://github.com/let-sunny/canicode/issues/477) · 2026-04-24 · closed · 0 comments

### fix: server.json metadata stale (39 rules / v0.5.2)

## Problem

`server.json` (MCP registry manifest) has stale metadata. When an AI agent reads it during onboarding/roundtrip, it surfaces wrong info to the user.

Yesterday a user ran the roundtrip and the agent reported "39 rules" — actual rule count is **16**.

## Stale fields

- `server.json:4` — `"description": "...39 rules..."` → actual: 16 rules across 6 categories (see README.md:33)
- `server.json:9` — `"version": "0.5.2"` → current: 0.11.2 (package.json)
- `server.json:14` — package `"ver

[Read the thread](https://github.com/let-sunny/canicode/issues/476) · 2026-04-24 · closed · 0 comments

### docs: Cursor MCP + roundtrip debugging (CUSTOMIZATION + canicode-roundtrip Step 0)

## Background

Users and agents often report “MCP / roundtrip doesn’t work” without a clear channel (canicode vs Figma), host state (settings, reload), or Step 4 delivery (helpers prepend, payload limits). `docs/CUSTOMIZATION.md` already documents **where** to put `.cursor/mcp.json` and a short checklist; the **roundtrip** skill Step 0 covers **pre-flight** for `use_figma` but not a **structured debug** path when something still fails.

## What to add (not duplicate)

### A) `docs/CUSTOMIZATION.

[Read the thread](https://github.com/let-sunny/canicode/issues/464) · 2026-04-22 · closed · 1 comment

### investigate: Figma MCP tool identifier may have project prefix in Cursor

## Observation
Cursor session noted: the actual Figma MCP identifier inside Cursor may not literally be \`figma\` — it can carry a project prefix. Our skill prose references \`use_figma\` / 'figma' by assumption, which can cause 'connected but skill can't find it' failures.

## Ask
- Repro in Cursor: after \`init --cursor-skills\`, check the effective MCP identifier Cursor surfaces
- If prefix is applied, update SKILL.md references to use a variable or documented resolution rule, OR document the

[Read the thread](https://github.com/let-sunny/canicode/issues/437) · 2026-04-21 · closed · 0 comments

The remaining reports are on [the project's issue tracker](https://github.com/let-sunny/canicode/issues).
