概要
ゲーム中の git add が「注文どおりのトッピング名を半角スペースで完全一致入力」した場合しか正常動作しない。特に以下の2つが重なり、プレイヤーからは「git add が使えない」ように見える。
git add .(全マシ全のせ)が常に失敗する
- 全角スペース入力だと「成功したように見えて具材が乗らず」配達で失敗する
再現手順
- ゲームを開始し
git pull で注文を受ける(例: 注文が「ナルト」)
- 以下を入力する
| 入力 |
実際の挙動 |
期待する挙動 |
git add ナルト(半角スペース) |
✅ 成功 |
成功 |
git add ナルト(全角スペース) |
「✅ 完了!」と表示されステップは進むが stagedItems が空のまま → 配達時に「🤢 まずい…ナルトが入ってない!」で失敗 |
成功(具材が乗る) |
git add . |
「❌ 今必要なのは「git add ナルト」です」+ ミス記録 |
全マシ全のせで成功 |
git add ネギ(注文と違う実在具材) |
「❌ 今必要なのは〜」 |
(現状どおり拒否でよいが)本来の「❌ ○○という具材はありません」等の分岐が死んでいる |
※ 実ロジック(executeGameCommand / createLaneAwarePullOrderPayload)を直接呼ぶ再現スクリプトで確認済み。
原因
1. git add . が通らない
frontend/src/game/handleGameCommand.ts の add 処理で、expectedInputs との完全一致チェック(L194)が item === '.' の全マシ全のせ分岐(L201)より先に実行される。
実際の注文は全て createLaneAwarePullOrderPayload(frontend/src/game/commandLogic.ts L376 付近)で生成され、add ステップの expectedInputs は ["git add ナルト"] のような1要素のみ。そのため git add . は全マシ分岐に到達する前に必ず弾かれる。
- ゲーム内ヘルプ(
backend/seed.py L33)では「git add . = 全マシ全のせ」と案内しており、仕様と実装が矛盾している
- 副作用として L208〜225 の「⚠️ 既に追加されています」「❌ ○○という具材はありません」も到達不能(デッドコード化)
- 混入コミット:
c592e67(GmStartの仕様を変更)
2. 全角スペースで具材が乗らない
add 分岐の入口の正規表現(L180)が 生入力 cmd に対して半角スペース前提でマッチしている:
const addMatch = cmd.match(/^git add (.+)$/i)
全角スペース入力(トッピングが日本語なので IME オンのまま打つと起きやすい)だとここにマッチせず、末尾の汎用フォールバック(L594、normalizeCommand が全角→半角変換するためマッチする)でステップだけ進む。stagedItems が更新されないため、配達時の evaluateDelivery(frontend/src/game/gameEngine.ts L229)で味判定失敗になる。
成功メッセージが出るのに失敗するため、プレイヤーには原因が分からない。同じ構造の問題は git commit -m "..." の全角クォート入力でも発生する(空振りプッシュ判定になる)。
修正案
- add ステップの判定で
item === '.' の場合は完全一致チェックをスキップする(または add ステップの expectedInputs に常に git add . を含める)
- L180 の
addMatch を cmd ではなく normalizedCmd に対して行い、全角スペース入力でも add 分岐(stagedItems 更新あり)へ入るようにする。git commit の正規表現も同様に normalizedCmd ベース + 全角クォート許容にする
影響範囲
frontend/src/game/handleGameCommand.ts(主)
- 必要に応じて
frontend/src/game/commandLogic.ts(expectedInputs 生成)
修正は fix/add-and-branchName ブランチで対応予定。
概要
ゲーム中の
git addが「注文どおりのトッピング名を半角スペースで完全一致入力」した場合しか正常動作しない。特に以下の2つが重なり、プレイヤーからは「git add が使えない」ように見える。git add .(全マシ全のせ)が常に失敗する再現手順
git pullで注文を受ける(例: 注文が「ナルト」)git add ナルト(半角スペース)git add ナルト(全角スペース)stagedItemsが空のまま → 配達時に「🤢 まずい…ナルトが入ってない!」で失敗git add .git add ネギ(注文と違う実在具材)※ 実ロジック(
executeGameCommand/createLaneAwarePullOrderPayload)を直接呼ぶ再現スクリプトで確認済み。原因
1.
git add .が通らないfrontend/src/game/handleGameCommand.tsの add 処理で、expectedInputsとの完全一致チェック(L194)がitem === '.'の全マシ全のせ分岐(L201)より先に実行される。実際の注文は全て
createLaneAwarePullOrderPayload(frontend/src/game/commandLogic.tsL376 付近)で生成され、add ステップのexpectedInputsは["git add ナルト"]のような1要素のみ。そのためgit add .は全マシ分岐に到達する前に必ず弾かれる。backend/seed.pyL33)では「git add .= 全マシ全のせ」と案内しており、仕様と実装が矛盾しているc592e67(GmStartの仕様を変更)2. 全角スペースで具材が乗らない
add 分岐の入口の正規表現(L180)が 生入力
cmdに対して半角スペース前提でマッチしている:全角スペース入力(トッピングが日本語なので IME オンのまま打つと起きやすい)だとここにマッチせず、末尾の汎用フォールバック(L594、
normalizeCommandが全角→半角変換するためマッチする)でステップだけ進む。stagedItemsが更新されないため、配達時のevaluateDelivery(frontend/src/game/gameEngine.tsL229)で味判定失敗になる。成功メッセージが出るのに失敗するため、プレイヤーには原因が分からない。同じ構造の問題は
git commit -m "..."の全角クォート入力でも発生する(空振りプッシュ判定になる)。修正案
item === '.'の場合は完全一致チェックをスキップする(または add ステップのexpectedInputsに常にgit add .を含める)addMatchをcmdではなくnormalizedCmdに対して行い、全角スペース入力でも add 分岐(stagedItems更新あり)へ入るようにする。git commitの正規表現も同様にnormalizedCmdベース + 全角クォート許容にする影響範囲
frontend/src/game/handleGameCommand.ts(主)frontend/src/game/commandLogic.ts(expectedInputs 生成)修正は
fix/add-and-branchNameブランチで対応予定。