[Bug]: `create-new-feature.sh` rejects the feature descriptions `-n`, `-e` and `-E`, which the Python script accepts
Maintainer thường phản hồi trong vòng 1 ngày
Đánh giá
- Độ khó
- 2/5
- Thời gian dự kiến
- 1-3 giờ
- Mức phù hợp với người mới
- 82/100
Hướng nghiên cứu
Đọc scripts/bash/create-new-feature.sh quanh dòng 93, nơi phần mô tả bị cắt ngắn, rồi so sánh với hành vi của Python trong scripts/python/create_new_feature.py. Trước tiên, hãy chạy bước tái hiện trong issue hoặc các bài kiểm tra tính tương đương trong tests/test_create_new_feature_python_parity.py. Công việc được xem là hoàn tất khi bash chấp nhận các mô tả như -n và -e và tạo ra cùng đầu ra như Python; hành vi với đối số rỗng cũng được ghi nhận là một sai khác tương đương có liên quan.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Bug Description
scripts/bash/create-new-feature.sh:93 trims the description with FEATURE_DESCRIPTION=$(echo "$FEATURE_DESCRIPTION" | sed -E ...). When the description is exactly an echo option word (-n, -e, -E, or a combination such as -neE), bash's builtin echo treats it as an option and prints nothing. The script then exits 1 with "Feature description cannot be empty or contain only whitespace". The Python twin, scripts/python/create_new_feature.py, accepts the same input and creates 001-n. The two variants therefore disagree.
Steps to Reproduce
From a fresh clone, after uv sync, save the script below and run uv run python -I repro.py from the repository root. It copies both script variants into a temporary project and runs them with --json --dry-run.
import shutil, subprocess, sys, tempfile
from pathlib import Path
repo = Path(tempfile.mkdtemp())
for sub, files in [("bash", ["common.sh", "create-new-feature.sh"]),
("python", ["common.py", "create_new_feature.py"])]:
d = repo / ".specify" / "scripts" / sub
d.mkdir(parents=True)
for f in files:
shutil.copy(Path("scripts") / sub / f, d / f)
for desc in ["-n", "-e", "-E", "-neE"]:
for name, cmd in [
("bash", ["bash", ".specify/scripts/bash/create-new-feature.sh"]),
("python", [sys.executable, ".specify/scripts/python/create_new_feature.py"]),
]:
r = subprocess.run(cmd + ["--json", "--dry-run", desc], cwd=repo,
capture_output=True, text=True)
out = (r.stdout or r.stderr).strip()
print(f"{desc:5} {name:6} rc={r.returncode} {out[:80]}")
Expected Behavior
Both variants should treat the description as text and produce the same branch name (for example 001-n). The bash script's own comment at scripts/bash/create-new-feature.sh:220-221 says it uses "printf instead of echo, so a name of "-n"/"-e"/"-E" is text, not options". tests/test_create_new_feature_python_parity.py asserts that the variants produce identical output (for example lines 444 and 752).
Actual Behavior
-n bash rc=1 Error: Feature description cannot be empty or contain only whitespace
-n python rc=0 {"BRANCH_NAME":"001-n","SPEC_FILE":"/tmp/tmpimfdrmab/specs/001-n/spec.md","FEATU
-e bash rc=1 Error: Feature description cannot be empty or contain only whitespace
-e python rc=0 {"BRANCH_NAME":"001-e","SPEC_FILE":"/tmp/tmpimfdrmab/specs/001-e/spec.md","FEATU
-E bash rc=1 Error: Feature description cannot be empty or contain only whitespace
-E python rc=0 {"BRANCH_NAME":"001-e","SPEC_FILE":"/tmp/tmpimfdrmab/specs/001-e/spec.md","FEATU
-neE bash rc=1 Error: Feature description cannot be empty or contain only whitespace
-neE python rc=0 {"BRANCH_NAME":"001-nee","SPEC_FILE":"/tmp/tmpimfdrmab/specs/001-nee/spec.md","F
Specify CLI Version
1.2.4.dev0 (main at 27d14e2)
AI Agent
Not applicable
Operating System
Linux 6.18 (Ubuntu container)
Python Version
Python 3.12.3
Error Logs
Error: Feature description cannot be empty or contain only whitespace
Additional Context
Using printf '%s\n' "$FEATURE_DESCRIPTION" on line 93 would match the approach the script already uses elsewhere.
A smaller related parity gap: for a single empty argument (create-new-feature.sh ""), bash prints the Usage line, while the Python script prints "Error: Feature description cannot be empty or contain only whitespace" (scripts/python/create_new_feature.py:150-156). Both exit 1.
Also reproduced on macOS (Darwin 25.6, arm64) with Python 3.14.4 and uv run python -I repro.py against 27d14e2; the output matches the above.
AI Disclosure
Found and reproduced with Claude Code (model: Claude Opus 4.8), run autonomously under human supervision. The human reporter re-ran every reproduction above before filing.
- Ngôn ngữ chính
- Python
- Star
- 144k
- Fork
- 12.9k
- Merge trung bình
- 1 ngày 4 giờ
- Pull request đã merge (30 ngày)
- 181
Chuẩn bị môi trường
Khởi chạy dev container của dự án ngay trên trình duyệt, bằng tài khoản GitHub của bạn.
- Không có Dockerfile hay tệp Docker Compose
- Có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của github/spec-kit
-
bundle catalog add rewrites Windows drive paths as POSIX pathsCó thể đã có người làm @chelsealong đã nhận 2 ngày trước. Đang mởtriage-must-have
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
Maintainer thường phản hồi trong vòng 1 ngày
-
The Python branch-creation port accepts an oversized `--number` and crashes at `int()` instead of rejecting itCó thể đã có người làm @github-actions đã nhận 3 ngày trước. Đang mởbug-assess bug-fix fix-proposed severity-low triage-can-wait
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 84/100
github/spec-kit#5194 · 3 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
[Bug]: Cline extension and preset commands have `speckit.*.md` file names rewritten to `speckit-*-md`Có thể đã có người làm @kevin9327 đã nhận 5 ngày trước. Đang mởtriage-can-wait
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
Maintainer thường phản hồi trong vòng 1 ngày
-
[Bug]: `bundle init <bundle>` initialises with the default integration instead of the bundle's, then aborts with a clashCó thể đã có người làm @chelsealong đã nhận 9 ngày trước. Đang mởtriage-must-have
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
Maintainer thường phản hồi trong vòng 1 ngày
-
[Bug]: `specify preset set-priority` does not update agent command files that are already writtenCó thể đã có người làm @mikamikasuki đã nhận 9 ngày trước. Đang mởtriage-must-have
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 77/100
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của github/spec-kit
Issue tương tự
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 62/100
earthtojake/text-to-cad#758 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
domain:upgrades enhancement needs-triage
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 66/100
gke-labs/kube-agents#4634 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 62/100
agardnerIT/opamp-server-py#116 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
Maintainer thường phản hồi trong vòng 1 ngày
-
enhancement good first issue
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
elviskahoro/sdk-python-attio#144 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày