스토리 분기 엔진 데이터화 (전면 표준화 Phase 4) - #117
Hidden character warning
Conversation
Walkthrough스테이지 2~5의 전이 규칙과 종료 경로를 Changes스토리 전이 규칙 데이터화
Estimated code review effort: 3 (Moderate) | ~20 minutes Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Warning There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure. 🔧 ESLint
src/game/storyFlow.jsESLint skipped: missing config or dependency (missing-dependency). The ESLint configuration references a package that is not available in the sandbox. Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
🚀 CI 빌드 성공!📦 빌드 정보
📁 생성된 파일✅ 모든 검사 통과
자동 생성된 댓글입니다. |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@src/data/stageRules.json`:
- Around line 28-32: 종료 경로가 선택지 발생 씬을 기준으로 결정되도록 수정하세요. src/data/stageRules.json
28-32의 stageExit를 완료 씬 인덱스별 규칙으로 재구성하고, src/game/storyFlow.js 67-71의
resolveStageExit가 씬 인덱스를 받아 해당 씬의 byChoice만 조회하도록 호출부와 회귀 테스트를 갱신하세요. 구현이 씬별 규칙을
보장한 뒤 docs/GAME-FLOW.md 121의 “JSON만 고치면 된다” 설명을 유지하세요.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro Plus
Run ID: 38f4ab7b-aab3-4e41-a4ca-72cccee6702a
📒 Files selected for processing (4)
claude.mddocs/GAME-FLOW.mdsrc/data/stageRules.jsonsrc/game/storyFlow.js
| "stageExit": { | ||
| "_comment": "카페에서 '돈을 줍는다'(첫 선택지)를 고르면 우산 경로가 열린다", | ||
| "byChoice": { "0": "/main4" }, | ||
| "default": "/main3" | ||
| } |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy lift
종료 경로 규칙이 선택지 발생 씬을 식별하지 못합니다. 현재 선택지마다 종료 경로를 계산하지만 규칙과 API 모두 씬 인덱스를 사용하지 않습니다. 마지막 선택지가 우연히 값을 덮어쓰는 현재 구조는 씬 추가 또는 순서 변경 후 잘못된 최종 경로를 만들 수 있습니다.
src/data/stageRules.json#L28-L32:stageExit를 완료 씬 인덱스별 규칙으로 변경하세요.src/game/storyFlow.js#L67-L71:resolveStageExit가 씬 인덱스를 받고, 해당 씬의byChoice만 조회하도록 변경하세요. 호출부와 회귀 테스트도 함께 변경하세요.docs/GAME-FLOW.md#L121-L121: 구현이 씬별 종료 규칙을 보장한 후에만 “JSON만 고치면 된다”는 설명을 유지하세요.
📍 Affects 3 files
src/data/stageRules.json#L28-L32(this comment)src/game/storyFlow.js#L67-L71docs/GAME-FLOW.md#L121-L121
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/data/stageRules.json` around lines 28 - 32, 종료 경로가 선택지 발생 씬을 기준으로 결정되도록
수정하세요. src/data/stageRules.json 28-32의 stageExit를 완료 씬 인덱스별 규칙으로 재구성하고,
src/game/storyFlow.js 67-71의 resolveStageExit가 씬 인덱스를 받아 해당 씬의 byChoice만 조회하도록
호출부와 회귀 테스트를 갱신하세요. 구현이 씬별 규칙을 보장한 뒤 docs/GAME-FLOW.md 121의 “JSON만 고치면 된다” 설명을
유지하세요.
관련 이슈
개요
Phase 4 — 스토리 분기 엔진 데이터화입니다.
스펙 1.2절에서 "가장 심각한 구조적 모순"으로 진단했던 문제를 해소했습니다. 씬을 하나 추가하려면 데이터가 아니라 컴포넌트를 고쳐야 하는 상태였습니다.
3단계로 안전하게
이 작업은 잘못하면 게임이 엉뚱한 엔딩으로 가는데 아무도 모르는 상태를 만듭니다. 그래서 순서를 나눴습니다.
2단계 없이 3단계를 하면 회귀를 잡을 방법이 없습니다.
무엇이 바뀌었나
규칙이 데이터가 됐습니다
src/data/stageRules.json:배열을 위에서부터 평가해 첫 번째로 조건을 만족하는 대상으로 이동합니다.
when이 없는 규칙이 기본값입니다.storyFlow.js는 이제 평가만 합니다. 씬을 추가하거나 임계치를 바꾸려면 JSON만 고치면 되고 코드는 손대지 않습니다.값은 하나도 바꾸지 않았습니다
데이터의
love: 60선언과 실제 임계치 70의 불일치처럼 이상해 보이는 것도 현재 배포되어 동작 중인 규칙이므로 그대로 옮기고 JSON 주석으로 명시했습니다.검증
회귀 테스트 — 이 작업의 핵심
데이터화 전에 작성한 25개 테스트가 데이터화 후에도 그대로 통과합니다. 이것이 동작 동일성의 증거입니다.
storyFlow.test.jsformat:checklinttest:cibuild브라우저 실제 게임 진행
카페(스테이지 2)에서 "카페 라떼"(0점) 선택 → 대사 진행 → 씬 2로 분기되어 화면에 정확히 그 씬("이수정: 아, 차라리 카페 가지 말 걸 그랬나…?")이 표시됐습니다.
JSON 규칙
{ "when": { "scoreMax": 15 }, "to": 2 }와 일치합니다. 콘솔 에러 없음.이제 가능해진 것
Summary by CodeRabbit
새로운 기능
버그 수정
문서