Skip to content

Commit 995b255

Browse files
committed
fix: address fourth round of PR review comments
- Validate extension_id against ^[a-z0-9-]+$ in _locate_bundled_extension to prevent path traversal (security fix) - Move defaults under config.defaults in extension.yml to match ConfigManager._get_extension_defaults() schema - Ship git-config.yml in extension directory so it's copied during install (provides.config template isn't materialized by ExtensionManager) - Condition handling in hook templates: intentionally matches existing pattern from specify/plan/tasks/implement templates (not a new issue)
1 parent 7fd87f9 commit 995b255

3 files changed

Lines changed: 70 additions & 3 deletions

File tree

extensions/git/extension.yml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,7 @@ tags:
134134
- "branching"
135135
- "workflow"
136136

137-
defaults:
138-
branch_numbering: sequential
139-
init_commit_message: "[Spec Kit] Initial commit"
137+
config:
138+
defaults:
139+
branch_numbering: sequential
140+
init_commit_message: "[Spec Kit] Initial commit"

extensions/git/git-config.yml

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
# Git Branching Workflow Extension Configuration
2+
# Copied to .specify/extensions/git/git-config.yml on install
3+
4+
# Branch numbering strategy: "sequential" (001, 002, ...) or "timestamp" (YYYYMMDD-HHMMSS)
5+
branch_numbering: sequential
6+
7+
# Commit message used by `git commit` during repository initialization
8+
init_commit_message: "[Spec Kit] Initial commit"
9+
10+
# Auto-commit before/after core commands.
11+
# Set "default" to enable for all commands, then override per-command.
12+
# Each key can be true/false. Message is customizable per-command.
13+
auto_commit:
14+
default: false
15+
before_clarify:
16+
enabled: false
17+
message: "[Spec Kit] Save progress before clarification"
18+
before_plan:
19+
enabled: false
20+
message: "[Spec Kit] Save progress before planning"
21+
before_tasks:
22+
enabled: false
23+
message: "[Spec Kit] Save progress before task generation"
24+
before_implement:
25+
enabled: false
26+
message: "[Spec Kit] Save progress before implementation"
27+
before_checklist:
28+
enabled: false
29+
message: "[Spec Kit] Save progress before checklist"
30+
before_analyze:
31+
enabled: false
32+
message: "[Spec Kit] Save progress before analysis"
33+
before_taskstoissues:
34+
enabled: false
35+
message: "[Spec Kit] Save progress before issue sync"
36+
after_constitution:
37+
enabled: false
38+
message: "[Spec Kit] Add project constitution"
39+
after_specify:
40+
enabled: false
41+
message: "[Spec Kit] Add specification"
42+
after_clarify:
43+
enabled: false
44+
message: "[Spec Kit] Clarify specification"
45+
after_plan:
46+
enabled: false
47+
message: "[Spec Kit] Add implementation plan"
48+
after_tasks:
49+
enabled: false
50+
message: "[Spec Kit] Add tasks"
51+
after_implement:
52+
enabled: false
53+
message: "[Spec Kit] Implementation progress"
54+
after_checklist:
55+
enabled: false
56+
message: "[Spec Kit] Add checklist"
57+
after_analyze:
58+
enabled: false
59+
message: "[Spec Kit] Add analysis report"
60+
after_taskstoissues:
61+
enabled: false
62+
message: "[Spec Kit] Sync tasks to issues"

src/specify_cli/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -610,6 +610,10 @@ def _locate_bundled_extension(extension_id: str) -> Path | None:
610610
Checks the wheel's core_pack first, then falls back to the
611611
source-checkout ``extensions/<id>/`` directory.
612612
"""
613+
import re as _re
614+
if not _re.match(r'^[a-z0-9-]+$', extension_id):
615+
return None
616+
613617
core = _locate_core_pack()
614618
if core is not None:
615619
candidate = core / "extensions" / extension_id

0 commit comments

Comments
 (0)