[Bug]: Non-Latin feature descriptions produce a nameless branch/directory (001-, 004-, ...)
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 48/100
Direzione di ricerca
Inizia da Get-BranchName in .specify/scripts/powershell/create-new-feature.ps1, quindi confronta le implementazioni corrispondenti in Bash e Python. Riproduci il suffisso vuoto con una descrizione composta esclusivamente da caratteri CJK, stabilisci quale dei comportamenti suggeriti sia accettabile e aggiungi una copertura di regressione che dimostri che il branch e la directory generati non sono più senza nome.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
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.
- Warn and point at the escape hatch.
-ShortNamealready works (005-mail-review-queueabove). 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. - 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. - 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, so001-客户邮件审核队列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(gitd848fb4), installed viauv tool install - Windows 11, PowerShell 5.1, Python 3.13.7, git 2.49.0.windows.1
--scriptauto-selectedpowershell
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"}
- Lingua principale
- Python
- Stelle
- 138k
- Fork
- 12.4k
- Merge medio
- 3g 6h
- PR unite (30g)
- 136
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di github/spec-kit
-
triage-can-wait
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
-
enhancement needs-triage triage-can-wait
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
-
bundle-submission needs-info triage-can-wait validation-failed
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
-
author-awaiting enhancement needs-triage preset-submission triage-can-wait validation-failed
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
-
author-awaiting enhancement extension-submission needs-triage triage-can-wait validation-failed
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
Tutte le issue di github/spec-kit
Issue simili
-
triage/confirmed
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
agentscope-ai/agentscope#2775 ·
-
comp/desktop P3 type/bug
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 92/100
NousResearch/hermes-agent#118866 ·
-
bug
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 90/100
apache/cloudstack#14222 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100