[Bug]: Non-Latin feature descriptions produce a nameless branch/directory (001-, 004-, ...)

オープン
#4,574 コメント 2 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

評価

難易度
4/5
見積もり時間
3〜5日
初心者へのやさしさ
48/100
issue の種類
バグ
明瞭さ
おおむね明確
活発さ
活発
技術スタック
bash, git, powershell, python
領域
cli, tooling

調査の方向性

.specify/scripts/powershell/create-new-feature.ps1 の Get-BranchName から始め、対応する Bash と Python の実装を比較します。CJK 文字のみの説明で空のサフィックスを再現し、提案された動作のどれが許容可能かを判断し、生成されたブランチとディレクトリがもはや名前なしにならないことを示すリグレッションカバレッジを追加します。

索引モデルが issue の本文から書いたものです。

説明

bug-assess bug-fix severity-low triage-nice-to-have
What happened

A feature description written entirely in a non-Latin script produces a branch and directory with no name at all — just the number and a trailing dash. Every such feature looks identical apart from its number.

specify init demo --integration claude

./.specify/scripts/powershell/create-new-feature.ps1 -Json "给倒推引擎加正推能力"
# {"BRANCH_NAME":"001-", ... "specs\\001-\\spec.md"}

./.specify/scripts/powershell/create-new-feature.ps1 -Json "客户邮件审核队列"
# {"BRANCH_NAME":"004-", ... "specs\\004-\\spec.md"}

Resulting tree — two unrelated features, indistinguishable:

specs/
├── 001-/
├── 004-/
└── 005-mail-review-queue/   # same description, but with -ShortName

For comparison, on the same install:

Description BRANCH_NAME
给倒推引擎加正推能力 001-
add forward scheduling engine 002-forward-scheduling-engine
forward 正推 engine 003-forward-engine (Latin words kept, rest dropped)
Why this is not the already-known crash

Get-BranchName in create-new-feature.ps1 already carries a comment describing this path — a previous fix stopped it throwing ArgumentNullException and made it return an empty suffix instead, matching the bash and Python twins. That fix is correct as far as it goes: the script no longer dies.

But the outcome it settles on is a directory name that carries no information. The empty suffix is a reasonable internal result; it just isn't a usable name. For a team working in Chinese, Japanese, Korean, Arabic, Hebrew, Thai, Greek, or Cyrillic, this is the default path, not an edge case — every feature they create lands in NNN-.

The root cause is the character class, in two places:

# line 89
$Name.ToLower() -replace '[^a-z0-9]', '-' ...
# line 136
$Description.ToLower() -replace '[^a-z0-9\s]', ' '

Both drop every non-ASCII character, so a CJK description reduces to the empty string before stop-word filtering ever runs.

Suggested directions

Listed roughly by cost; any one of them removes the nameless directory.

  1. Warn and point at the escape hatch. -ShortName already works (005-mail-review-queue above). When the computed suffix is empty, print a line saying the description produced no usable branch name and that -ShortName <name> sets one. Cheapest fix, and it turns a silent surprise into a choice.
  2. Fall back to something stable instead of nothing. A short hash or timestamp of the description — 001-f3a9c2, 001-20260914 — is still opaque, but at least distinct per feature.
  3. Widen the character class. Keep Unicode letters and digits (\p{L}\p{N}) and percent-encode or transliterate what git cannot take. Git branch names do accept UTF-8, so 001-客户邮件审核队列 is a legal ref; whether it is desirable is a separate call, and tooling downstream may not all agree.

(1) alone would have saved the confusion here. (3) is the real fix but needs a decision about non-ASCII refs that is yours to make, not mine.

Environment
  • specify-cli 1.0.7.dev0 (git d848fb4), installed via uv tool install
  • Windows 11, PowerShell 5.1, Python 3.13.7, git 2.49.0.windows.1
  • --script auto-selected powershell

Not PowerShell-specific — reproduced on both script backends:

specify init demo-sh --integration claude --script sh
bash .specify/scripts/bash/create-new-feature.sh --json "给倒推引擎加正推能力"
# {"BRANCH_NAME":"001-", ... "specs/001-/spec.md"}
主要言語
Python
スター
138k
フォーク
12.4k
平均マージ
3日 6時間
マージ済み PR(30日)
136

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

github/spec-kit のほかの issue

github/spec-kit の issue をすべて見る

似ている issue

Python の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。