# 概要 ブランチ(レーン)名をプレイヤーが**自由に設定できる**ようにしたい。ただし**空白を含む名前は拒否**する。 # 背景 現状はブランチ名を自由に決められない: - ブランチ作成が成功するのは来客イベント注文(`git branch akamaru-42` のようにゲームが生成した名前を要求される)のときだけで、プレイヤーが任意の名前で `git branch <name>` / `git checkout -b <name>` を打っても厳密一致チェックで拒否される(根本原因は #37 / コミット `c592e67`) - 名前の候補もゲーム内部の `LANE_NAME_OPTIONS`(akamaru / kiwami / sapporo / iekei + 数字)に固定されている(`frontend/src/game/commandLogic.ts`) また、名前のバリデーションが存在しない: - `git branch (.+)$` / `git checkout -b (.+)$` の正規表現は空白ごとキャプチャするため、自由作成が解禁されると `git branch my cool lane` が「my cool lane」という1ブランチとして通ってしまう - 実際の git ではブランチ名に空白は使えない(`git branch my cool lane` は too many arguments エラー)ので、学習ゲームとして空白入り名を受け付けるのは実 git との乖離になる # 仕様 1. **自由なブランチ名で作成できる** - 注文ステップと無関係に `git branch <name>` / `git checkout -b <name>` で任意名のレーンを作成できる(#37 の「ステップ外の自由コマンド」化が前提) - 従来どおりの制約は維持する: 最大3レーン、既存名と重複する場合は拒否 - 来客イベント注文は従来どおり、指定された名前を入力したときにステップ完了扱いとする 2. **空白を含む名前は拒否する** - 半角スペース・全角スペースを含む名前(例: `git branch my lane`、`git branch ラー メン`)はレーンを作成せず、エラーメッセージを表示する - メッセージ例: `❌ ブランチ名に空白は使えません` - 実 git でも空白入りブランチ名は作成できないため、拒否することで整合性が取れる - `git switch -c <name>` を対応させる場合(#37 の修正案参照)も同じバリデーションを適用する # 受け入れ条件 - [ ] 注文がない状態でも `git branch mybranch` でレーンが増える(切替はしない=実 git と同じ) - [ ] `git checkout -b mybranch` でレーンが増え、そのレーンに切り替わる - [ ] `git branch my lane`(半角空白)・`git branch ラー メン`(全角空白)が拒否され、エラーメッセージが表示される - [ ] 既存名・最大レーン数超過は従来どおり拒否される - [ ] 来客イベント注文で指定名を入力するとステップが完了する # 検討事項 - `lane1`〜`lane3` はレーン切替のエイリアス(`getBranchLane` の laneN 解決)として予約されているため、`git branch lane2` のような名前を許可するとエイリアスと衝突する。予約語として拒否するかどうかは実装時に判断 - 空白拒否時にミス(`recordMiss`)として記録するかは #36 / #37 の方針に合わせる # 関連 - #36(git add の厳密一致問題) - #37(branch/switch/checkout の乖離。本 issue の前提となる「ステップ外実行の解禁」を含む) - 対応ブランチ: `fix/add-and-branchName`
概要
ブランチ(レーン)名をプレイヤーが自由に設定できるようにしたい。ただし空白を含む名前は拒否する。
背景
現状はブランチ名を自由に決められない:
git branch akamaru-42のようにゲームが生成した名前を要求される)のときだけで、プレイヤーが任意の名前でgit branch <name>/git checkout -b <name>を打っても厳密一致チェックで拒否される(根本原因は branch/switch/checkout が実gitと乖離:切替系が常に失敗し lane2/3 宛の注文が配達不可能 #37 / コミットc592e67)LANE_NAME_OPTIONS(akamaru / kiwami / sapporo / iekei + 数字)に固定されている(frontend/src/game/commandLogic.ts)また、名前のバリデーションが存在しない:
git branch (.+)$/git checkout -b (.+)$の正規表現は空白ごとキャプチャするため、自由作成が解禁されるとgit branch my cool laneが「my cool lane」という1ブランチとして通ってしまうgit branch my cool laneは too many arguments エラー)ので、学習ゲームとして空白入り名を受け付けるのは実 git との乖離になる仕様
git branch <name>/git checkout -b <name>で任意名のレーンを作成できる(branch/switch/checkout が実gitと乖離:切替系が常に失敗し lane2/3 宛の注文が配達不可能 #37 の「ステップ外の自由コマンド」化が前提)git branch my lane、git branch ラー メン)はレーンを作成せず、エラーメッセージを表示する❌ ブランチ名に空白は使えませんgit switch -c <name>を対応させる場合(branch/switch/checkout が実gitと乖離:切替系が常に失敗し lane2/3 宛の注文が配達不可能 #37 の修正案参照)も同じバリデーションを適用する受け入れ条件
git branch mybranchでレーンが増える(切替はしない=実 git と同じ)git checkout -b mybranchでレーンが増え、そのレーンに切り替わるgit branch my lane(半角空白)・git branch ラー メン(全角空白)が拒否され、エラーメッセージが表示される検討事項
lane1〜lane3はレーン切替のエイリアス(getBranchLaneの laneN 解決)として予約されているため、git branch lane2のような名前を許可するとエイリアスと衝突する。予約語として拒否するかどうかは実装時に判断recordMiss)として記録するかは ゲーム内で git add が実質使えない(git add . が常に失敗 / 全角スペースで具材が乗らない) #36 / branch/switch/checkout が実gitと乖離:切替系が常に失敗し lane2/3 宛の注文が配達不可能 #37 の方針に合わせる関連
fix/add-and-branchName