github / github/spec-kit

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

未关闭
#4,574 1 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
bug-assess severity-low triage-nice-to-have
主要语言
Python
星标
137k
派生
12.3k
平均合并
2 天 12 小时
30 天内合并 PR
159

描述

### 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:

```powershell
# 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 ` 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"}
```

贡献指南

打开贡献指南

调研方向

Start with Get-BranchName in .specify/scripts/powershell/create-new-feature.ps1, then compare the corresponding Bash and Python implementations. Reproduce the empty suffix with a CJK-only description, decide which suggested behavior is acceptable, and add regression coverage showing that the generated branch and directory are no longer nameless.

由索引模型根据 Issue 内容生成。

评估

技术栈
bash, git, powershell, python
领域
cli, tooling
Issue 类型
缺陷
难度
4/5
预计耗时
3-5 天
活跃度
活跃
描述清晰度
基本清楚
新手友好度
48/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。