# 2026-05-19 Claude Prompt — Canonical Data View Cleanup Scope Fix

아래 내용을 Claude Code 에 일반 프롬프트로 붙여넣는다. `/goal` 명령은 쓰지 않는다.

---

## Prompt

너는 이 repo 에서 이미 진행된 `canonical data-view cleanup` 결과를 최종 수습하는 역할이다.

중요: 이번 작업은 새로운 대규모 기능 구현이 아니다. 현재 diff 중 `stats/table/container/chart/card-list/grouped-table` canonical 정리 범위는 보존하되, 범위 밖 변경을 제거하고 검증 가능한 상태로 만드는 것이 목표다.

작업 전제:

- Workspace: `/Users/gbpark/invyone`
- 원 설계 문서:
  - `notes/gbpark/2026-05-18-canonical-data-view-goal.md`
  - `notes/gbpark/2026-05-18-claude-goal-prompt-v2-strict.md`
- 현재 후속 보고서:
  - `notes/gbpark/2026-05-19-canonical-data-view-cleanup-followup.md`
- Codex 1차 검증 결과:
  - acceptance check 자체는 통과했다.
  - 하지만 Claude 가 canonical cleanup 범위를 넘어 `control/dash` 데모 기능을 추가했다.
  - 이 범위 밖 변경은 이번 cleanup 결과에 포함하면 안 된다.

절대 규칙:

1. `/goal` 을 사용하지 말고, 이 프롬프트 범위 안에서 한 번에 처리한다.
2. `input` canonical 작업의 결과를 되돌리거나 훼손하지 않는다.
3. `FieldConfig`, `DataPort`, `sourceProvider`, `dataReceiver`, `dbTable` 관련 계약을 깨지 않는다.
4. `v2-input`, `v2-select`, `V2InputRenderer`, `V2SelectRenderer`, `EntityPicker`, `EntitySearchModal` 을 재도입하지 않는다.
5. legacy/V2 삭제 또는 alias 정리는 “동작 경로가 canonical 으로 수렴하는 경우”에만 유지한다.
6. 범위 밖 변경은 새 feature 로 인정하지 않는다. 이번 cleanup diff 에서 제거하거나, 제거가 위험하면 정확한 이유를 보고하고 중단한다.
7. 사용자가 만든 것일 수 있는 unrelated backend/notes 변경은 임의로 되돌리지 않는다.

이번 작업에서 보존해야 하는 canonical cleanup 범위:

- canonical data-view 관련 registry/config/schema/type 정리
  - `frontend/lib/registry/DynamicComponentRenderer.tsx`
  - `frontend/lib/registry/components/index.ts`
  - `frontend/lib/utils/getComponentConfigPanel.tsx`
  - `frontend/lib/utils/responsiveDefaults.ts`
  - `frontend/lib/utils/templateMigrate.ts`
  - `frontend/lib/schemas/componentConfig.ts`
  - `frontend/types/v2-components.ts`
  - `frontend/lib/registry/hoc/withContainerQuery.css`
- input 작업 후속 data-transfer 타입 판정 정리
  - `frontend/components/screen/config-panels/button/DataTab.tsx`
  - `frontend/components/screen/config-panels/button-config/ActionTab.tsx`
  - `frontend/components/v2/config-panels/InvLegacyButtonConfigPanel.tsx`
- canonical data-view 신규/기존 연결
  - `frontend/lib/registry/components/stats/**`
  - `frontend/lib/registry/components/table/**`
  - `frontend/lib/registry/components/container/**`
  - `frontend/lib/registry/components/chart/**`
  - `frontend/lib/registry/components/card-list/**`
  - `frontend/lib/registry/components/grouped-table/**`
- 의도된 삭제 대상
  - `frontend/lib/registry/components/aggregation-widget/**`
  - `frontend/lib/registry/components/v2-aggregation-widget/**`
  - `frontend/lib/registry/components/v2-status-count/**`
  - `frontend/lib/registry/components/tabs/**`
  - `frontend/lib/registry/components/v2-tabs-widget/**`
  - `frontend/lib/registry/components/section-card/**`
  - `frontend/lib/registry/components/v2-section-card/**`
  - `frontend/lib/registry/components/section-paper/**`
  - `frontend/lib/registry/components/v2-section-paper/**`
  - `frontend/components/v2/config-panels/V2AggregationWidgetConfigPanel.tsx`
  - `frontend/components/v2/config-panels/V2StatusCountConfigPanel.tsx`

이번 작업에서 제거해야 하는 범위 밖 변경:

- `frontend/components/control/ControlMode.tsx`
- `frontend/components/control/ControlPalette.tsx`
- `frontend/components/control/FlowViewer.tsx`
- `frontend/components/control/PortHandle.tsx`
- `frontend/components/control/RuleBuilder.tsx`
- `frontend/components/control/controlDemo.ts`
- `frontend/components/dash/DashboardCanvas.tsx`
- `frontend/components/dash/DashboardLayout.tsx`
- `frontend/styles/control-mode.css`

위 파일들은 canonical data-view cleanup 과 무관한 제어모드 데모/대시보드 변경이다. 이번 작업에서는 포함하지 않는다. tracked 파일은 현재 branch 의 HEAD 상태로 되돌리고, untracked `controlDemo.ts` 는 삭제한다. 단, 되돌리기 전에 `git diff -- <path>` 로 확인했을 때 canonical data-view cleanup 과 직접 관련된 변경이 섞여 있으면 되돌리지 말고 보고한다.

진행 순서:

1. 현재 상태를 먼저 확인한다.

   ```bash
   git status --short
   git diff --name-status
   git diff --stat
   ```

2. 범위 밖 변경을 확인한다.

   ```bash
   git diff -- frontend/components/control frontend/components/dash frontend/styles/control-mode.css
   git status --short -- frontend/components/control frontend/components/dash frontend/styles/control-mode.css
   ```

   확인 기준:
   - `controlDemo.ts`, demo table/meta, `createDemoRuleGraph`, `CONTROL_DEMO_TABLES`, `onLoadDemo`, flow-active styling 같은 변경은 범위 밖이다.
   - 해당 변경은 이번 cleanup 에 포함하지 않는다.

3. 범위 밖 변경만 제거한다.

   안전 조건:
   - 제거 대상은 위 “이번 작업에서 제거해야 하는 범위 밖 변경” 목록으로 제한한다.
   - 다른 파일은 revert 하지 않는다.
   - repo 전체 reset, checkout, clean 금지.

   예시:

   ```bash
   git restore -- frontend/components/control/ControlMode.tsx \
     frontend/components/control/ControlPalette.tsx \
     frontend/components/control/FlowViewer.tsx \
     frontend/components/control/PortHandle.tsx \
     frontend/components/control/RuleBuilder.tsx \
     frontend/components/dash/DashboardCanvas.tsx \
     frontend/components/dash/DashboardLayout.tsx \
     frontend/styles/control-mode.css
   rm frontend/components/control/controlDemo.ts
   ```

   `rm` 은 위 untracked 파일 하나에만 사용한다.

4. report 를 정정한다.

   `notes/gbpark/2026-05-19-canonical-data-view-cleanup-followup.md` 를 업데이트한다.

   반드시 반영할 내용:
   - summary 의 “7개 폴더” vs 실제 “9개 폴더” 불일치를 고친다.
   - Codex 검증에서 범위 밖 `control/dash` 변경이 발견되어 제거했다는 사실을 기록한다.
   - 제거한 범위 밖 파일 목록을 기록한다.
   - acceptance command 와 결과를 최신 상태로 다시 기록한다.
   - 잔여 매칭은 hard blocker/domain 으로만 남아야 하며, 각 보존 사유를 명시한다.

5. 필수 acceptance check 를 다시 실행한다.

   ```bash
   git diff --check
   rg "v2-input|v2-select|V2InputRenderer|V2SelectRenderer" frontend/lib frontend/components frontend/app frontend/types frontend/styles --glob '!**/node_modules/**'
   rg "EntityPicker|entity-picker|EntitySearchModal" frontend/lib/registry/components/input frontend/components/v2/config-panels/InvFieldConfigPanel.tsx --glob '!**/node_modules/**'
   rg -n "from .*components/(aggregation-widget|v2-aggregation-widget|v2-status-count|tabs|v2-tabs-widget|section-card|v2-section-card|section-paper|v2-section-paper)|import\\(.*components/(aggregation-widget|v2-aggregation-widget|v2-status-count|tabs|v2-tabs-widget|section-card|v2-section-card|section-paper|v2-section-paper)" frontend --glob '!**/node_modules/**'
   test ! -e frontend/lib/registry/components/aggregation-widget
   test ! -e frontend/lib/registry/components/v2-aggregation-widget
   test ! -e frontend/lib/registry/components/v2-status-count
   test ! -e frontend/lib/registry/components/tabs
   test ! -e frontend/lib/registry/components/v2-tabs-widget
   test ! -e frontend/lib/registry/components/section-card
   test ! -e frontend/lib/registry/components/v2-section-card
   test ! -e frontend/lib/registry/components/section-paper
   test ! -e frontend/lib/registry/components/v2-section-paper
   git diff --quiet -- frontend/components/control frontend/components/dash frontend/styles/control-mode.css
   git status --short -- frontend/components/control/controlDemo.ts
   ```

   backend compile:

   ```bash
   cd backend-spring
   ./gradlew compileJava
   ```

   잔여 카운트도 다시 계산한다.

   ```bash
   rg -n "stats|aggregation-widget|v2-status-count" frontend/lib frontend/components frontend/app frontend/types --glob '!**/node_modules/**' | wc -l
   rg -n "table-list|v2-table-list" frontend/lib frontend/components frontend/app frontend/types --glob '!**/node_modules/**' | wc -l
   rg -n "tabs-widget|v2-tabs-widget|section-card|section-paper|accordion-basic|conditional-container|repeat-container|v2-repeat-container|split-panel-layout" frontend/lib frontend/components frontend/app frontend/types --glob '!**/node_modules/**' | wc -l
   ```

   주의:
   - `rg` 가 0건이어야 하는 check 는 exit code 1 이 정상일 수 있다. 출력이 0건이면 pass 로 기록한다.
   - 전체 `npm run lint` 는 기존 repo-wide lint 부채 때문에 이번 acceptance 조건이 아니다. 실행하지 않아도 된다. 실행했다면 기존 오류와 이번 변경 오류를 구분해서 보고한다.

6. 마지막으로 다음을 보고한다.

   - canonical cleanup diff 는 유지됐는가
   - 범위 밖 `control/dash` 변경은 제거됐는가
   - deleted legacy folder/import 는 실제로 사라졌는가
   - input forbidden / EntityPicker forbidden 은 0건인가
   - backend compile 결과
   - 잔여 `stats/table/container` 매칭 수와 보존 사유
   - 수정한 파일 목록

완료 기준:

- `git diff --check` pass
- input forbidden rg 출력 0건
- EntityPicker forbidden rg 출력 0건
- 삭제된 legacy component folder 가 실제로 존재하지 않음
- 삭제된 legacy component folder 로 import 하는 active code 0건
- `./gradlew compileJava` BUILD SUCCESSFUL
- `git diff --quiet -- frontend/components/control frontend/components/dash frontend/styles/control-mode.css` pass
- `frontend/components/control/controlDemo.ts` 가 untracked/존재 상태로 남아 있지 않음
- follow-up report 의 folder deletion count 불일치가 수정됨
- 남은 legacy/V2 매칭은 구현 canonical, 삭제 path, concrete hard blocker, domain preserved 중 하나로 분류됨

금지:

- repo 전체 `git reset`, `git checkout .`, `git clean -fd` 금지
- unrelated backend 파일 revert 금지
- `input`/`EntityPicker` 관련 옛 경로 재도입 금지
- `control/dash` 데모 기능을 별도 feature 라고 주장하며 남겨두기 금지
- acceptance 실패를 “분류 가능”만으로 통과 처리 금지

최종 답변은 짧게, 실행한 command 결과 중심으로 작성한다.
