refactor: SlayDeckController 관심사별 모듈 분리 + 코드 규칙 3종 #94

Merged
gahusb merged 3 commits from refactor/cb-concern-modules into main 2026-06-29 17:39:19 +09:00
Owner

배경

SlayDeckController(단일 codeblock)의 범위가 너무 커서, 화면 전환·NPC·포지션 관심사가 state.mjs·render.mjs·runend.mjs에 흩어져 있었다. MSW codeblock 컴포넌트는 self를 공유하지 않아 진짜 런타임 컴포넌트 분리는 고위험 → 소스 모듈 재정리로 응집도를 높였다(런타임은 단일 codeblock 유지).

변경 (커밋 3개)

① 관심사 모듈 분리 (이동·본문 무변경)

  • state.mjsscreens.mjs 개명 (화면 라우팅·버튼 바인딩)
  • npc.mjs 신규: OnLobbyNpcInteract
  • navigation.mjs 신규: GoLobbyMap·TeleportToActMap (월드 텔레포트)
  • layout.mjs 신규: PositionMonsterSlot (UI 슬롯 배치)
  • 기능별 Show*(Shop·Rest·Map·Job 등)는 각 기능 모듈 유지 — 코어 라우터 ShowState를 호출하는 계층 구조라 분리 시 응집도 저하

② 단일문자 지역변수 의미명 개명 (손댄 모듈만)

  • grp/n/genableGroup/name/group, ssoulPoints, e/fnentity/handler, lp/golocalPlayer/tryTeleport, m/tr/wp/emonster/transform/worldPos/slotEntity

③ RULES.md 규칙 3종

  • §1: codeblock 메서드를 관심사별 모듈로 (17→20종)
  • §4: PR 머지 후 머지된 feature/docs 브랜치 로컬·원격 삭제
  • §8 신규: cb Lua 지역변수 의미명 규칙

검증

  • 신규 tools/verify/cbset.mjs(순서 무관 집합 비교): 커밋 ① 후 189/189 무손실(본문/exec/params 변경 0), 커밋 ② 후 개명한 6개 메서드만 변경(추가/삭제 0)
  • cbgap GAP 0 (UI 경로 무손상)
  • node --test 93/93 통과
  • 메이커 플레이테스트로 최종 확인 예정

메서드 이동으로 codeblock 메서드 순서가 바뀌어 산출물 바이트는 main과 다르지만, cbset로 본문 무손실을 증명했다.

## 배경 SlayDeckController(단일 codeblock)의 범위가 너무 커서, 화면 전환·NPC·포지션 관심사가 `state.mjs`·`render.mjs`·`runend.mjs`에 흩어져 있었다. MSW codeblock 컴포넌트는 `self`를 공유하지 않아 진짜 런타임 컴포넌트 분리는 고위험 → **소스 모듈 재정리**로 응집도를 높였다(런타임은 단일 codeblock 유지). ## 변경 (커밋 3개) ### ① 관심사 모듈 분리 (이동·본문 무변경) - `state.mjs` → `screens.mjs` 개명 (화면 라우팅·버튼 바인딩) - `npc.mjs` 신규: `OnLobbyNpcInteract` - `navigation.mjs` 신규: `GoLobbyMap`·`TeleportToActMap` (월드 텔레포트) - `layout.mjs` 신규: `PositionMonsterSlot` (UI 슬롯 배치) - 기능별 `Show*`(Shop·Rest·Map·Job 등)는 각 기능 모듈 유지 — 코어 라우터 `ShowState`를 호출하는 계층 구조라 분리 시 응집도 저하 ### ② 단일문자 지역변수 의미명 개명 (손댄 모듈만) - `grp/n/g`→`enableGroup/name/group`, `s`→`soulPoints`, `e/fn`→`entity/handler`, `lp/go`→`localPlayer/tryTeleport`, `m/tr/wp/e`→`monster/transform/worldPos/slotEntity` ### ③ RULES.md 규칙 3종 - §1: codeblock 메서드를 관심사별 모듈로 (17→20종) - §4: PR 머지 후 머지된 feature/docs 브랜치 로컬·원격 삭제 - §8 신규: cb Lua 지역변수 의미명 규칙 ## 검증 - 신규 `tools/verify/cbset.mjs`(순서 무관 집합 비교): 커밋 ① 후 **189/189 무손실**(본문/exec/params 변경 0), 커밋 ② 후 개명한 **6개 메서드만** 변경(추가/삭제 0) - `cbgap` GAP 0 (UI 경로 무손상) - `node --test` 93/93 통과 - 메이커 플레이테스트로 최종 확인 예정 메서드 이동으로 codeblock 메서드 순서가 바뀌어 산출물 바이트는 main과 다르지만, cbset로 본문 무손실을 증명했다.
gahusb added 3 commits 2026-06-26 18:41:55 +09:00
화면 전환·NPC·포지션 관심사를 state.mjs/render.mjs/runend.mjs에서
전용 모듈로 분리. 런타임은 단일 SlayDeckController codeblock 유지.

- state.mjs → screens.mjs 개명 (화면 라우팅·버튼 바인딩)
- npc.mjs 신규: OnLobbyNpcInteract
- navigation.mjs 신규: GoLobbyMap·TeleportToActMap (월드 텔레포트)
- layout.mjs 신규: PositionMonsterSlot (UI 슬롯 배치)
- gen-slaydeck.mjs import·spread 갱신

검증: tools/verify/cbset.mjs (순서 무관 집합 비교) = 189/189 무손실,
본문/exec/params 변경 0. cbgap GAP 0, 테스트 93/93.
산출물 재생성(SlayDeckController.codeblock) 포함 — 메서드 순서만 바뀜.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
손댄 모듈(screens·navigation·layout)의 단일문자 Lua 지역변수를
의미가 드러나는 이름으로 변경(규칙 시연):
- ActivateUIGroups: grp/n/g → enableGroup/name/group
- RenderSoulLabel: s → soulPoints
- BindLobbyButtons: e/fn → entity/handler
- GoLobbyMap: lp/go → localPlayer/tryTeleport
- TeleportToActMap: lp → localPlayer
- PositionMonsterSlot: m/tr/wp/e → monster/transform/worldPos/slotEntity

검증: cbset = 위 6개 메서드만 본문 변경(추가/삭제 0), cbgap GAP 0, 테스트 93/93.
산출물 재생성(SlayDeckController.codeblock) 포함.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
RULES.md 규칙 3종:
- §1: codeblock 메서드를 관심사별 모듈로(화면전환=screens·NPC=npc·
  포지션=navigation/layout). 17→20종. 새 메서드는 알맞은 모듈에.
- §4: PR 머지 후 머지된 feature/docs 브랜치 로컬·원격 삭제
  (merge-base --is-ancestor로 확인, 미머지·codex/* 보존).
- §8 신규: cb Lua 지역변수는 의미명(e→entity 등), 반복 인덱스만 단일문자 허용.

설계 문서 docs/superpowers/specs/2026-06-26-cb-concern-modules-design.md 추가.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
gahusb merged commit 1e0b91294a into main 2026-06-29 17:39:19 +09:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: gahusb/maplecontest#94