feat(charselect): 메이커 저작 stock 이관 + 컨트롤러 이미지 주입 (Phase 2 파일럿) #72

Merged
gahusb merged 11 commits from feature/charselect-maker-pilot into main 2026-06-16 08:35:07 +09:00
Owner

요약

Phase 2 파일럿 — 캐릭터 선택을 생성기 소유 → 메이커 저작 stock으로 이관. 이미지는 컨트롤러가 런타임 경로 주입(ClassPortraits). 하이브리드 패턴 (b) 메이커 시각 편집 검증. base=feature/cb-modularization(#71 스택).

문서: docs/superpowers/specs|plans/2026-06-16-charselect-maker-pilot*.

변경

  • charselect 생성 중단 → stock: lib/ui-helpers.mjs GENERATED_UI_SECTIONS·UI_APPEND_ORDER에서 CharacterSelectHud 제거 + upsertUi emit·hud/charselect.mjs 제거. → 기존 charselect 엔티티는 stock으로 보존(메이커 시각 편집 가능·재생성에 안 덮임). ui 엔티티 경로집합 1442개 HEAD와 완전 동일(재배치만·손실 0).
  • 이미지 런타임 주입(= 패턴 b 내용주입): luaCharsTable()(data/characters.jsonself.ClassPortraits), cb/boot.mjs·cb/run.mjs 시드 + ClassPortraits prop, RenderCharacterSelect가 각 {key}Button/ArtImageRUID를 경로로 주입(classId Warrior→warrior/Mage→magician/Thief→bandit).
  • 선택 테두리·상태·버튼 바인딩(경로 구동) 무변경.
  • RULES.md §1 + 스펙에 엔티티 경로 계약(메이커 편집 시 경로 유지 필수).

검증

  • 생성기 무에러; countClassPortraits 시드·ImageRUID = self.ClassPortraits 3 확인; charselect 엔티티 ui 잔류 확인.
  • ui 엔티티 경로집합 HEAD와 완전 동일(추가·손실 0 — 재배치만).
  • 미러 테스트 sim-balance·rogue-map exit 0.
  • ⚠️ 최종 = 메이커 플레이테스트(사용자, reload 후): 로비→직업선택→3 이미지 컨트롤러 주입 표시→클릭 금색테두리·상태→시작 그 직업→메이커에서 카드 위치 옮기고 저장 후 node tools/deck/gen-slaydeck.mjs 재생성해도 charselect 유지(stock 비파괴) 확인.

참고

  • common.gamelogicEnergy:0.0은 기존 staleness(integer-ui-number-format#62; 생성기는 0) — 무관.
  • base=feature/cb-modularization. #70·#71 머지 후 main으로 리타겟.

🤖 Generated with Claude Code

## 요약 Phase 2 파일럿 — **캐릭터 선택을 생성기 소유 → 메이커 저작 stock으로 이관**. 이미지는 컨트롤러가 런타임 경로 주입(`ClassPortraits`). 하이브리드 패턴 **(b) 메이커 시각 편집** 검증. base=`feature/cb-modularization`(#71 스택). 문서: `docs/superpowers/specs|plans/2026-06-16-charselect-maker-pilot*`. ## 변경 - **charselect 생성 중단 → stock**: `lib/ui-helpers.mjs` `GENERATED_UI_SECTIONS`·`UI_APPEND_ORDER`에서 `CharacterSelectHud` 제거 + upsertUi emit·`hud/charselect.mjs` 제거. → 기존 charselect 엔티티는 stock으로 보존(메이커 시각 편집 가능·재생성에 안 덮임). **ui 엔티티 경로집합 1442개 HEAD와 완전 동일(재배치만·손실 0)**. - **이미지 런타임 주입(= 패턴 b 내용주입)**: `luaCharsTable()`(`data/characters.json`→`self.ClassPortraits`), `cb/boot.mjs`·`cb/run.mjs` 시드 + `ClassPortraits` prop, `RenderCharacterSelect`가 각 `{key}Button/Art`의 `ImageRUID`를 경로로 주입(classId Warrior→warrior/Mage→magician/Thief→bandit). - 선택 테두리·상태·버튼 바인딩(경로 구동) **무변경**. - `RULES.md` §1 + 스펙에 **엔티티 경로 계약**(메이커 편집 시 경로 유지 필수). ## 검증 - 생성기 무에러; `count`로 `ClassPortraits` 시드·`ImageRUID = self.ClassPortraits` 3 확인; charselect 엔티티 ui 잔류 확인. - **ui 엔티티 경로집합 HEAD와 완전 동일**(추가·손실 0 — 재배치만). - 미러 테스트 `sim-balance`·`rogue-map` exit 0. - ⚠️ **최종 = 메이커 플레이테스트**(사용자, reload 후): 로비→직업선택→**3 이미지 컨트롤러 주입 표시**→클릭 금색테두리·상태→시작 그 직업→**메이커에서 카드 위치 옮기고 저장 후 `node tools/deck/gen-slaydeck.mjs` 재생성해도 charselect 유지**(stock 비파괴) 확인. ## 참고 - `common.gamelogic`의 `Energy:0.0`은 기존 staleness(`integer-ui-number-format`#62; 생성기는 `0`) — 무관. - base=`feature/cb-modularization`. #70·#71 머지 후 main으로 리타겟. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
gahusb changed target branch from feature/cb-modularization to main 2026-06-16 08:34:58 +09:00
gahusb added 11 commits 2026-06-16 08:34:58 +09:00
writeCodeblocks의 메서드 161개를 연속구간별 cb/*.mjs 모듈로 분리(바이트 동일).
prop 103개는 오케스트레이터 유지. 헬퍼+공유상수는 lib/codeblock.mjs.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
writeCodeblocks의 메서드를 연속-런 17 모듈(boot/state/soul/charselect/run/
deckturn/deckview/hand/combat/jobs/runend/render/reward/items/tooltip/map/shop)로
분리, methods 배열은 spread-concat(원본 순서 보존). prop 103개는 오케스트레이터 유지.
산출물 무변경(diffcheck: SlayDeckController.codeblock IDENTICAL).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
charselect를 생성중단→stock화(메이커 편집), 이미지는 컨트롤러 런타임 주입
(ClassPortraits/luaCharsTable), 경로 구동 유지. 패턴 b 검증 파일럿.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
luaCharsTable() 신설(characters.json→self.ClassPortraits), boot/run 시드 +
prop, RenderCharacterSelect가 각 {key}Button/Art ImageRUID를 경로로 주입.
(메이커 저작 레이아웃이어도 컨트롤러가 이미지 채움 = 패턴 b 내용주입.)
산출물: SlayDeckController.codeblock 재생성 포함.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
GENERATED_UI_SECTIONS·UI_APPEND_ORDER에서 CharacterSelectHud 제거 + upsertUi emit·
hud/charselect.mjs 제거. 기존 charselect 엔티티는 stock으로 보존(메이커 편집 가능,
재생성에 안 덮임). ui 엔티티 경로집합 1442개 동일(재배치만, 손실 0). 컨트롤러는
경로+ClassPortraits 주입으로 구동 유지.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
gahusb merged commit 2bb7360a47 into main 2026-06-16 08:35:07 +09:00
gahusb deleted branch feature/charselect-maker-pilot 2026-06-16 08:35:11 +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#72