Skip to content

ゲーム内で git add が実質使えない(git add . が常に失敗 / 全角スペースで具材が乗らない) #36

Description

@yozure420

概要

ゲーム中の git add が「注文どおりのトッピング名を半角スペースで完全一致入力」した場合しか正常動作しない。特に以下の2つが重なり、プレイヤーからは「git add が使えない」ように見える。

  1. git add .(全マシ全のせ)が常に失敗する
  2. 全角スペース入力だと「成功したように見えて具材が乗らず」配達で失敗する

再現手順

  1. ゲームを開始し git pull で注文を受ける(例: 注文が「ナルト」)
  2. 以下を入力する
入力 実際の挙動 期待する挙動
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)より先に実行される。

実際の注文は全て createLaneAwarePullOrderPayloadfrontend/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 が更新されないため、配達時の evaluateDeliveryfrontend/src/game/gameEngine.ts L229)で味判定失敗になる。

成功メッセージが出るのに失敗するため、プレイヤーには原因が分からない。同じ構造の問題は git commit -m "..." の全角クォート入力でも発生する(空振りプッシュ判定になる)。

修正案

  1. add ステップの判定で item === '.' の場合は完全一致チェックをスキップする(または add ステップの expectedInputs に常に git add . を含める)
  2. L180 の addMatchcmd ではなく normalizedCmd に対して行い、全角スペース入力でも add 分岐(stagedItems 更新あり)へ入るようにする。git commit の正規表現も同様に normalizedCmd ベース + 全角クォート許容にする

影響範囲

  • frontend/src/game/handleGameCommand.ts(主)
  • 必要に応じて frontend/src/game/commandLogic.ts(expectedInputs 生成)

修正は fix/add-and-branchName ブランチで対応予定。

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions