From 80daaf7f1b55893918f074eff4f2cb924ef33ada Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 1 Jan 2026 06:32:53 +0000 Subject: [PATCH 01/16] Initial plan From b3eb0ff6cb9fdaca6975a2848391055c16ed55cd Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 1 Jan 2026 06:34:40 +0000 Subject: [PATCH 02/16] Add speckit make targets and docs Co-authored-by: kimchanhyung98 <60088641+kimchanhyung98@users.noreply.github.com> --- Makefile | 25 +++++++++++++++++++++++++ README.md | 48 +++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 Makefile diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..eebc69b --- /dev/null +++ b/Makefile @@ -0,0 +1,25 @@ +PYTHON ?= python3 +VENV ?= .venv +PIP := $(VENV)/bin/pip +SPECKIT_VERSION ?= +SPECKIT_BIN := $(VENV)/bin/speckit + +.PHONY: speckit-install speckit-init speckit-check speckit-clean + +$(VENV)/bin/python: + $(PYTHON) -m venv $(VENV) + $(PIP) install --upgrade pip setuptools wheel + +$(SPECKIT_BIN): $(VENV)/bin/python + $(PIP) install speckit$(if $(SPECKIT_VERSION),==$(SPECKIT_VERSION),) + +speckit-install: $(SPECKIT_BIN) + +speckit-init: $(SPECKIT_BIN) + $(SPECKIT_BIN) init + +speckit-check: $(SPECKIT_BIN) + $(SPECKIT_BIN) check + +speckit-clean: + rm -rf $(VENV) diff --git a/README.md b/README.md index 3c4984d..87c3e0e 100644 --- a/README.md +++ b/README.md @@ -1 +1,47 @@ -# base \ No newline at end of file +# base + +## Speckit 사용 방법 + +Speckit CLI를 프로젝트 내에서 동일하게 사용할 수 있도록 Makefile로 래핑했습니다. Python 3와 make만 있으면 됩니다. + +### 설치 + +로컬 가상환경(`.venv`)에 Speckit을 설치합니다. 필요 시 버전을 고정해 사용할 수 있습니다. + +```bash +# 최신 버전 +make speckit-install + +# 특정 버전 설치 +SPECKIT_VERSION=0.2.0 make speckit-install +``` + +### 초기화 및 검증 + +```bash +# 초기 설정 (예: 템플릿 생성) +make speckit-init + +# 규칙 검증 +make speckit-check +``` + +### 정리 + +```bash +make speckit-clean +``` + +### CI/워크플로우 예시 (옵션) + +CI에서 동일한 명령을 재사용할 수 있습니다. + +```yaml +steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: '3.x' + - run: make speckit-install + - run: make speckit-check +``` From a8a230c859a9e583ab3e81da6d7092420a8e4766 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 1 Jan 2026 06:35:27 +0000 Subject: [PATCH 03/16] Refine speckit Makefile and docs Co-authored-by: kimchanhyung98 <60088641+kimchanhyung98@users.noreply.github.com> --- Makefile | 9 +++++++-- README.md | 4 +++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index eebc69b..750d1ca 100644 --- a/Makefile +++ b/Makefile @@ -3,6 +3,11 @@ VENV ?= .venv PIP := $(VENV)/bin/pip SPECKIT_VERSION ?= SPECKIT_BIN := $(VENV)/bin/speckit +SPECKIT_SPEC := speckit + +ifneq ($(strip $(SPECKIT_VERSION)),) +SPECKIT_SPEC := speckit==$(SPECKIT_VERSION) +endif .PHONY: speckit-install speckit-init speckit-check speckit-clean @@ -11,7 +16,7 @@ $(VENV)/bin/python: $(PIP) install --upgrade pip setuptools wheel $(SPECKIT_BIN): $(VENV)/bin/python - $(PIP) install speckit$(if $(SPECKIT_VERSION),==$(SPECKIT_VERSION),) + $(PIP) install $(SPECKIT_SPEC) speckit-install: $(SPECKIT_BIN) @@ -22,4 +27,4 @@ speckit-check: $(SPECKIT_BIN) $(SPECKIT_BIN) check speckit-clean: - rm -rf $(VENV) + rm -rf $(VENV) || true diff --git a/README.md b/README.md index 87c3e0e..58d8d77 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,11 @@ # base -## Speckit 사용 방법 +## Speckit 사용 방법 / Quick Guide Speckit CLI를 프로젝트 내에서 동일하게 사용할 수 있도록 Makefile로 래핑했습니다. Python 3와 make만 있으면 됩니다. +Speckit commands are wrapped in the Makefile so you can install and run them consistently with only Python 3 and make. + ### 설치 로컬 가상환경(`.venv`)에 Speckit을 설치합니다. 필요 시 버전을 고정해 사용할 수 있습니다. From bc5166161826053256f129f07c83e765364b471d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 1 Jan 2026 06:36:23 +0000 Subject: [PATCH 04/16] Validate speckit version input and add version lookup note Co-authored-by: kimchanhyung98 <60088641+kimchanhyung98@users.noreply.github.com> --- Makefile | 5 ++++- README.md | 3 +++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 750d1ca..4145969 100644 --- a/Makefile +++ b/Makefile @@ -6,6 +6,9 @@ SPECKIT_BIN := $(VENV)/bin/speckit SPECKIT_SPEC := speckit ifneq ($(strip $(SPECKIT_VERSION)),) +ifneq ($(shell echo "$(SPECKIT_VERSION)" | grep -E '^[0-9A-Za-z_.+-]+$$' >/dev/null && echo valid),valid) +$(error SPECKIT_VERSION must match ^[0-9A-Za-z_.+-]+$$ (example: 0.2.0)) +endif SPECKIT_SPEC := speckit==$(SPECKIT_VERSION) endif @@ -27,4 +30,4 @@ speckit-check: $(SPECKIT_BIN) $(SPECKIT_BIN) check speckit-clean: - rm -rf $(VENV) || true + rm -rf $(VENV) diff --git a/README.md b/README.md index 58d8d77..d638e02 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,9 @@ make speckit-install # 특정 버전 설치 SPECKIT_VERSION=0.2.0 make speckit-install + +# 사용 가능한 버전 확인 (예시) +pip index versions speckit ``` ### 초기화 및 검증 From cafa5118924134bec3ad83fea03856f177e63fe3 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 1 Jan 2026 06:36:57 +0000 Subject: [PATCH 05/16] Tighten speckit version validation Co-authored-by: kimchanhyung98 <60088641+kimchanhyung98@users.noreply.github.com> --- Makefile | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 4145969..f446a79 100644 --- a/Makefile +++ b/Makefile @@ -6,8 +6,9 @@ SPECKIT_BIN := $(VENV)/bin/speckit SPECKIT_SPEC := speckit ifneq ($(strip $(SPECKIT_VERSION)),) -ifneq ($(shell echo "$(SPECKIT_VERSION)" | grep -E '^[0-9A-Za-z_.+-]+$$' >/dev/null && echo valid),valid) -$(error SPECKIT_VERSION must match ^[0-9A-Za-z_.+-]+$$ (example: 0.2.0)) +# Require a simple semver-like value (e.g., 1.2.3 or 1.2.3-rc.1) +ifneq ($(shell echo "$(SPECKIT_VERSION)" | grep -E '^[0-9]+\.[0-9]+\.[0-9]+([A-Za-z0-9\.-]*)$$' >/dev/null && echo valid),valid) +$(error SPECKIT_VERSION must look like 1.2.3 or 1.2.3-rc.1) endif SPECKIT_SPEC := speckit==$(SPECKIT_VERSION) endif From 0b4eb1e2bf6506ad21fffe40eb18d08cf9e86494 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 1 Jan 2026 06:37:30 +0000 Subject: [PATCH 06/16] Simplify speckit version regex Co-authored-by: kimchanhyung98 <60088641+kimchanhyung98@users.noreply.github.com> --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index f446a79..82364b5 100644 --- a/Makefile +++ b/Makefile @@ -7,8 +7,8 @@ SPECKIT_SPEC := speckit ifneq ($(strip $(SPECKIT_VERSION)),) # Require a simple semver-like value (e.g., 1.2.3 or 1.2.3-rc.1) -ifneq ($(shell echo "$(SPECKIT_VERSION)" | grep -E '^[0-9]+\.[0-9]+\.[0-9]+([A-Za-z0-9\.-]*)$$' >/dev/null && echo valid),valid) -$(error SPECKIT_VERSION must look like 1.2.3 or 1.2.3-rc.1) +ifneq ($(shell echo "$(SPECKIT_VERSION)" | grep -E '^[0-9]+\.[0-9]+\.[0-9]+([A-Za-z0-9\-]*)?$$' >/dev/null && echo valid),valid) +$(error SPECKIT_VERSION must look like 1.2.3 or 1.2.3-rc1) endif SPECKIT_SPEC := speckit==$(SPECKIT_VERSION) endif From 23952fbe21f15b7a75e1828831b65b9dc9b1f648 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 1 Jan 2026 06:38:06 +0000 Subject: [PATCH 07/16] Clarify speckit version validation message Co-authored-by: kimchanhyung98 <60088641+kimchanhyung98@users.noreply.github.com> --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 82364b5..f0621e6 100644 --- a/Makefile +++ b/Makefile @@ -7,8 +7,8 @@ SPECKIT_SPEC := speckit ifneq ($(strip $(SPECKIT_VERSION)),) # Require a simple semver-like value (e.g., 1.2.3 or 1.2.3-rc.1) -ifneq ($(shell echo "$(SPECKIT_VERSION)" | grep -E '^[0-9]+\.[0-9]+\.[0-9]+([A-Za-z0-9\-]*)?$$' >/dev/null && echo valid),valid) -$(error SPECKIT_VERSION must look like 1.2.3 or 1.2.3-rc1) +ifneq ($(shell echo "$(SPECKIT_VERSION)" | grep -E '^[0-9]+\.[0-9]+\.[0-9]+([A-Za-z0-9-]*)?$$' >/dev/null && echo valid),valid) +$(error SPECKIT_VERSION must look like 0.2.0 or 1.2.3-rc1) endif SPECKIT_SPEC := speckit==$(SPECKIT_VERSION) endif From 4150d305beeac91708ffaca4a919973abe0bc79f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 1 Jan 2026 06:39:03 +0000 Subject: [PATCH 08/16] Clarify speckit suffix validation Co-authored-by: kimchanhyung98 <60088641+kimchanhyung98@users.noreply.github.com> --- Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index f0621e6..a735e8a 100644 --- a/Makefile +++ b/Makefile @@ -6,9 +6,9 @@ SPECKIT_BIN := $(VENV)/bin/speckit SPECKIT_SPEC := speckit ifneq ($(strip $(SPECKIT_VERSION)),) -# Require a simple semver-like value (e.g., 1.2.3 or 1.2.3-rc.1) -ifneq ($(shell echo "$(SPECKIT_VERSION)" | grep -E '^[0-9]+\.[0-9]+\.[0-9]+([A-Za-z0-9-]*)?$$' >/dev/null && echo valid),valid) -$(error SPECKIT_VERSION must look like 0.2.0 or 1.2.3-rc1) +# Require a simple semver-like value (optional suffix uses letters/numbers/hyphens only) +ifneq ($(shell echo "$(SPECKIT_VERSION)" | grep -E '^[0-9]+\.[0-9]+\.[0-9]+(-[A-Za-z0-9-]+)?$$' >/dev/null && echo valid),valid) +$(error SPECKIT_VERSION must look like 0.2.0 or 1.2.3-rc1 (suffix without dots)) endif SPECKIT_SPEC := speckit==$(SPECKIT_VERSION) endif From 4117bce9541d4785cc9780be2baf295d28e15385 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 1 Jan 2026 06:39:38 +0000 Subject: [PATCH 09/16] Improve speckit version suffix validation Co-authored-by: kimchanhyung98 <60088641+kimchanhyung98@users.noreply.github.com> --- Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index a735e8a..9ca3a22 100644 --- a/Makefile +++ b/Makefile @@ -6,9 +6,9 @@ SPECKIT_BIN := $(VENV)/bin/speckit SPECKIT_SPEC := speckit ifneq ($(strip $(SPECKIT_VERSION)),) -# Require a simple semver-like value (optional suffix uses letters/numbers/hyphens only) -ifneq ($(shell echo "$(SPECKIT_VERSION)" | grep -E '^[0-9]+\.[0-9]+\.[0-9]+(-[A-Za-z0-9-]+)?$$' >/dev/null && echo valid),valid) -$(error SPECKIT_VERSION must look like 0.2.0 or 1.2.3-rc1 (suffix without dots)) +# Require a simple semver-like value (optional suffix segments separated by hyphens) +ifneq ($(shell echo "$(SPECKIT_VERSION)" | grep -E '^[0-9]+\.[0-9]+\.[0-9]+(-[A-Za-z0-9]+(-[A-Za-z0-9]+)*)?$$' >/dev/null && echo valid),valid) +$(error SPECKIT_VERSION must be semver-like (e.g., 0.2.0 or 1.2.3-rc-1; suffix letters/numbers/hyphens, no dots)) endif SPECKIT_SPEC := speckit==$(SPECKIT_VERSION) endif From b9eaae5c5af46174b0be147c75e2a8a6aa511a55 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 1 Jan 2026 06:40:13 +0000 Subject: [PATCH 10/16] Extract semver regex for SPECKIT_VERSION Co-authored-by: kimchanhyung98 <60088641+kimchanhyung98@users.noreply.github.com> --- Makefile | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 9ca3a22..f6d9076 100644 --- a/Makefile +++ b/Makefile @@ -4,11 +4,12 @@ PIP := $(VENV)/bin/pip SPECKIT_VERSION ?= SPECKIT_BIN := $(VENV)/bin/speckit SPECKIT_SPEC := speckit +SPECKIT_SEMVER_REGEX := ^[0-9]+\.[0-9]+\.[0-9]+(-[A-Za-z0-9]+(-[A-Za-z0-9]+)*)?$$ ifneq ($(strip $(SPECKIT_VERSION)),) -# Require a simple semver-like value (optional suffix segments separated by hyphens) -ifneq ($(shell echo "$(SPECKIT_VERSION)" | grep -E '^[0-9]+\.[0-9]+\.[0-9]+(-[A-Za-z0-9]+(-[A-Za-z0-9]+)*)?$$' >/dev/null && echo valid),valid) -$(error SPECKIT_VERSION must be semver-like (e.g., 0.2.0 or 1.2.3-rc-1; suffix letters/numbers/hyphens, no dots)) +# Require a semver-like value; optional suffix is hyphen-separated alphanumeric segments (no dots). +ifneq ($(shell echo "$(SPECKIT_VERSION)" | grep -E '$(SPECKIT_SEMVER_REGEX)' >/dev/null && echo valid),valid) +$(error SPECKIT_VERSION must be semver-like (e.g., 0.2.0 or 1.2.3-rc-1; suffix is hyphen-separated alphanumeric segments, no dots)) endif SPECKIT_SPEC := speckit==$(SPECKIT_VERSION) endif From 6fdfe60ae302b58cf874d1d800b5596307a872f7 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 1 Jan 2026 06:41:04 +0000 Subject: [PATCH 11/16] Align speckit semver validation with dot suffixes Co-authored-by: kimchanhyung98 <60088641+kimchanhyung98@users.noreply.github.com> --- Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index f6d9076..fce599a 100644 --- a/Makefile +++ b/Makefile @@ -4,12 +4,12 @@ PIP := $(VENV)/bin/pip SPECKIT_VERSION ?= SPECKIT_BIN := $(VENV)/bin/speckit SPECKIT_SPEC := speckit -SPECKIT_SEMVER_REGEX := ^[0-9]+\.[0-9]+\.[0-9]+(-[A-Za-z0-9]+(-[A-Za-z0-9]+)*)?$$ +SPECKIT_SEMVER_REGEX := ^[0-9]+\.[0-9]+\.[0-9]+(-[A-Za-z0-9]+(\.[A-Za-z0-9]+)*)?$$ ifneq ($(strip $(SPECKIT_VERSION)),) -# Require a semver-like value; optional suffix is hyphen-separated alphanumeric segments (no dots). +# Require a semver-like value; optional suffix is dot-separated alphanumeric identifiers. ifneq ($(shell echo "$(SPECKIT_VERSION)" | grep -E '$(SPECKIT_SEMVER_REGEX)' >/dev/null && echo valid),valid) -$(error SPECKIT_VERSION must be semver-like (e.g., 0.2.0 or 1.2.3-rc-1; suffix is hyphen-separated alphanumeric segments, no dots)) +$(error SPECKIT_VERSION must be semver-like (e.g., 0.2.0 or 1.2.3-rc.1; suffix is dot-separated alphanumeric identifiers)) endif SPECKIT_SPEC := speckit==$(SPECKIT_VERSION) endif From 363e3eeb334f30a52aacf46122af071c907b0fef Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 1 Jan 2026 06:41:45 +0000 Subject: [PATCH 12/16] Guard against consecutive dots in speckit version Co-authored-by: kimchanhyung98 <60088641+kimchanhyung98@users.noreply.github.com> --- Makefile | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Makefile b/Makefile index fce599a..f29d590 100644 --- a/Makefile +++ b/Makefile @@ -8,6 +8,9 @@ SPECKIT_SEMVER_REGEX := ^[0-9]+\.[0-9]+\.[0-9]+(-[A-Za-z0-9]+(\.[A-Za-z0-9]+)*)? ifneq ($(strip $(SPECKIT_VERSION)),) # Require a semver-like value; optional suffix is dot-separated alphanumeric identifiers. +ifneq ($(findstring ..,$(SPECKIT_VERSION)),) +$(error SPECKIT_VERSION cannot contain consecutive dots) +endif ifneq ($(shell echo "$(SPECKIT_VERSION)" | grep -E '$(SPECKIT_SEMVER_REGEX)' >/dev/null && echo valid),valid) $(error SPECKIT_VERSION must be semver-like (e.g., 0.2.0 or 1.2.3-rc.1; suffix is dot-separated alphanumeric identifiers)) endif From 8bc7db202861a111f1cf3c6ca6ec51c128ae5404 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 1 Jan 2026 06:42:23 +0000 Subject: [PATCH 13/16] Use cleaned version string for speckit validation Co-authored-by: kimchanhyung98 <60088641+kimchanhyung98@users.noreply.github.com> --- Makefile | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index f29d590..e977d6a 100644 --- a/Makefile +++ b/Makefile @@ -4,17 +4,19 @@ PIP := $(VENV)/bin/pip SPECKIT_VERSION ?= SPECKIT_BIN := $(VENV)/bin/speckit SPECKIT_SPEC := speckit +# Semver-like: major.minor.patch with optional dot-separated pre-release identifiers. SPECKIT_SEMVER_REGEX := ^[0-9]+\.[0-9]+\.[0-9]+(-[A-Za-z0-9]+(\.[A-Za-z0-9]+)*)?$$ +SPECKIT_VERSION_CLEAN := $(strip $(SPECKIT_VERSION)) -ifneq ($(strip $(SPECKIT_VERSION)),) +ifneq ($(SPECKIT_VERSION_CLEAN),) # Require a semver-like value; optional suffix is dot-separated alphanumeric identifiers. -ifneq ($(findstring ..,$(SPECKIT_VERSION)),) +ifneq ($(findstring ..,$(SPECKIT_VERSION_CLEAN)),) $(error SPECKIT_VERSION cannot contain consecutive dots) endif -ifneq ($(shell echo "$(SPECKIT_VERSION)" | grep -E '$(SPECKIT_SEMVER_REGEX)' >/dev/null && echo valid),valid) +ifneq ($(shell echo "$(SPECKIT_VERSION_CLEAN)" | grep -E '$(SPECKIT_SEMVER_REGEX)' >/dev/null && echo valid),valid) $(error SPECKIT_VERSION must be semver-like (e.g., 0.2.0 or 1.2.3-rc.1; suffix is dot-separated alphanumeric identifiers)) endif -SPECKIT_SPEC := speckit==$(SPECKIT_VERSION) +SPECKIT_SPEC := speckit==$(SPECKIT_VERSION_CLEAN) endif .PHONY: speckit-install speckit-init speckit-check speckit-clean From 7ff8fb3d24dfdbfa3f61b60e63bc7004e6b3aa64 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 1 Jan 2026 06:43:06 +0000 Subject: [PATCH 14/16] Cache speckit version validation result Co-authored-by: kimchanhyung98 <60088641+kimchanhyung98@users.noreply.github.com> --- Makefile | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index e977d6a..1ac2cd3 100644 --- a/Makefile +++ b/Makefile @@ -4,16 +4,17 @@ PIP := $(VENV)/bin/pip SPECKIT_VERSION ?= SPECKIT_BIN := $(VENV)/bin/speckit SPECKIT_SPEC := speckit -# Semver-like: major.minor.patch with optional dot-separated pre-release identifiers. +# Semver-like: major.minor.patch with optional dot-separated pre-release identifiers (numeric identifiers are allowed). SPECKIT_SEMVER_REGEX := ^[0-9]+\.[0-9]+\.[0-9]+(-[A-Za-z0-9]+(\.[A-Za-z0-9]+)*)?$$ SPECKIT_VERSION_CLEAN := $(strip $(SPECKIT_VERSION)) +SPECKIT_VERSION_VALID := $(if $(SPECKIT_VERSION_CLEAN),$(shell echo "$(SPECKIT_VERSION_CLEAN)" | grep -E '$(SPECKIT_SEMVER_REGEX)' >/dev/null && echo valid),valid) ifneq ($(SPECKIT_VERSION_CLEAN),) # Require a semver-like value; optional suffix is dot-separated alphanumeric identifiers. ifneq ($(findstring ..,$(SPECKIT_VERSION_CLEAN)),) $(error SPECKIT_VERSION cannot contain consecutive dots) endif -ifneq ($(shell echo "$(SPECKIT_VERSION_CLEAN)" | grep -E '$(SPECKIT_SEMVER_REGEX)' >/dev/null && echo valid),valid) +ifneq ($(SPECKIT_VERSION_VALID),valid) $(error SPECKIT_VERSION must be semver-like (e.g., 0.2.0 or 1.2.3-rc.1; suffix is dot-separated alphanumeric identifiers)) endif SPECKIT_SPEC := speckit==$(SPECKIT_VERSION_CLEAN) From 5e8ce0104d4ae62f5d7fb4f7dca1cc047e3d2876 Mon Sep 17 00:00:00 2001 From: kimchanhyung98 Date: Thu, 1 Jan 2026 19:06:48 +0900 Subject: [PATCH 15/16] refactor(build): modernize tooling automation with spec-kit and agent-os MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Replace Python venv-based speckit with specify CLI (spec-kit target) - Add agent-os installation with configurable agent selection - Add Docker-based project initialization workflow (init target) - Add interactive help system with color-coded command descriptions - Remove semver validation logic in favor of simplified installation BREAKING CHANGE: Removed speckit-install, speckit-init, speckit-check, speckit-clean targets. Use 'make spec-kit' instead. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 --- Makefile | 104 +++++++++++++++++++++++++++++++++---------------------- 1 file changed, 63 insertions(+), 41 deletions(-) diff --git a/Makefile b/Makefile index 1ac2cd3..a6f4a7b 100644 --- a/Makefile +++ b/Makefile @@ -1,41 +1,63 @@ -PYTHON ?= python3 -VENV ?= .venv -PIP := $(VENV)/bin/pip -SPECKIT_VERSION ?= -SPECKIT_BIN := $(VENV)/bin/speckit -SPECKIT_SPEC := speckit -# Semver-like: major.minor.patch with optional dot-separated pre-release identifiers (numeric identifiers are allowed). -SPECKIT_SEMVER_REGEX := ^[0-9]+\.[0-9]+\.[0-9]+(-[A-Za-z0-9]+(\.[A-Za-z0-9]+)*)?$$ -SPECKIT_VERSION_CLEAN := $(strip $(SPECKIT_VERSION)) -SPECKIT_VERSION_VALID := $(if $(SPECKIT_VERSION_CLEAN),$(shell echo "$(SPECKIT_VERSION_CLEAN)" | grep -E '$(SPECKIT_SEMVER_REGEX)' >/dev/null && echo valid),valid) - -ifneq ($(SPECKIT_VERSION_CLEAN),) -# Require a semver-like value; optional suffix is dot-separated alphanumeric identifiers. -ifneq ($(findstring ..,$(SPECKIT_VERSION_CLEAN)),) -$(error SPECKIT_VERSION cannot contain consecutive dots) -endif -ifneq ($(SPECKIT_VERSION_VALID),valid) -$(error SPECKIT_VERSION must be semver-like (e.g., 0.2.0 or 1.2.3-rc.1; suffix is dot-separated alphanumeric identifiers)) -endif -SPECKIT_SPEC := speckit==$(SPECKIT_VERSION_CLEAN) -endif - -.PHONY: speckit-install speckit-init speckit-check speckit-clean - -$(VENV)/bin/python: - $(PYTHON) -m venv $(VENV) - $(PIP) install --upgrade pip setuptools wheel - -$(SPECKIT_BIN): $(VENV)/bin/python - $(PIP) install $(SPECKIT_SPEC) - -speckit-install: $(SPECKIT_BIN) - -speckit-init: $(SPECKIT_BIN) - $(SPECKIT_BIN) init - -speckit-check: $(SPECKIT_BIN) - $(SPECKIT_BIN) check - -speckit-clean: - rm -rf $(VENV) +.PHONY: spec-kit agent-os help init + +.DEFAULT_GOAL := help + +help: ## Show available commands + @awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n make \033[36m\033[0m\n\nTargets:\n"} /^[a-zA-Z_-]+:.*?##/ { printf " \033[36m%-15s\033[0m %s\n", $$1, $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST) + +spec-kit: ## Install spec-kit (default: claude) + @agent=$(word 2,$(MAKECMDGOALS)); \ + if [ -z "$$agent" ]; then \ + agent="claude"; \ + echo "Using default agent: claude"; \ + fi; \ + if ! command -v specify >/dev/null 2>&1; then \ + echo "[spec-kit] 'specify' not found."; \ + echo "RUN: uv tool install specify-cli --from git+https://github.com/github/spec-kit.git"; \ + exit 1; \ + fi; \ + yes | specify init --here --ai $$agent --script sh + +agent-os: ## Install agent-os (default: claude) + @agent=$(word 2,$(MAKECMDGOALS)); \ + script="$$HOME/agent-os/scripts/project-install.sh"; \ + if [ -z "$$agent" ]; then \ + agent="claude"; \ + echo "Using default agent: claude"; \ + fi; \ + if [ ! -f "$$script" ]; then \ + echo "[agent-os] 'agent-os' not found."; \ + echo "RUN: curl -sSL https://raw.githubusercontent.com/buildermethods/agent-os/main/scripts/base-install.sh | bash"; \ + exit 1; \ + fi; \ + echo "Installing agent-os with agent: $$agent"; \ + if [ "$$agent" = "claude" ]; then \ + yes | bash "$$script"; \ + elif [ "$$agent" = "all" ]; then \ + yes | bash "$$script" --agent-os-commands true --standards-as-claude-code-skills true; \ + else \ + yes | bash "$$script" --claude-code-commands false --use-claude-code-subagents false --standards-as-claude-code-skills true --agent-os-commands true; \ + fi + +init: ## Setup Project environment (Docker required) + @if ! command -v docker >/dev/null 2>&1; then \ + echo "[init] 'docker' not found"; \ + exit 1; \ + fi; \ + if ! docker compose version >/dev/null 2>&1; then \ + echo "[init] 'docker compose' not found"; \ + exit 1; \ + fi; \ + if [ ! -f .env ]; then \ + echo "Copying .env.example to .env"; \ + cp .env.example .env; \ + fi; \ + echo "Starting Docker containers"; \ + docker compose up -d; \ + echo "Installing npm packages"; \ + docker run --rm -v $$(pwd):/app -w /app node:22-alpine npm install; \ + echo "Running database migrations and seeders"; \ + docker compose exec laravel.test php artisan migrate --seed + +%: + @: From 3c0b814eabbc59edb7e3b20ba05a30e259745652 Mon Sep 17 00:00:00 2001 From: kimchanhyung98 Date: Sat, 3 Jan 2026 00:55:48 +0900 Subject: [PATCH 16/16] docs: simplify README to only include project title Removed detailed usage instructions and examples from the README, leaving only the project title. This streamlines the README, possibly in preparation for new documentation or restructuring. --- README.md | 53 +---------------------------------------------------- 1 file changed, 1 insertion(+), 52 deletions(-) diff --git a/README.md b/README.md index d638e02..3c4984d 100644 --- a/README.md +++ b/README.md @@ -1,52 +1 @@ -# base - -## Speckit 사용 방법 / Quick Guide - -Speckit CLI를 프로젝트 내에서 동일하게 사용할 수 있도록 Makefile로 래핑했습니다. Python 3와 make만 있으면 됩니다. - -Speckit commands are wrapped in the Makefile so you can install and run them consistently with only Python 3 and make. - -### 설치 - -로컬 가상환경(`.venv`)에 Speckit을 설치합니다. 필요 시 버전을 고정해 사용할 수 있습니다. - -```bash -# 최신 버전 -make speckit-install - -# 특정 버전 설치 -SPECKIT_VERSION=0.2.0 make speckit-install - -# 사용 가능한 버전 확인 (예시) -pip index versions speckit -``` - -### 초기화 및 검증 - -```bash -# 초기 설정 (예: 템플릿 생성) -make speckit-init - -# 규칙 검증 -make speckit-check -``` - -### 정리 - -```bash -make speckit-clean -``` - -### CI/워크플로우 예시 (옵션) - -CI에서 동일한 명령을 재사용할 수 있습니다. - -```yaml -steps: - - uses: actions/checkout@v4 - - uses: actions/setup-python@v5 - with: - python-version: '3.x' - - run: make speckit-install - - run: make speckit-check -``` +# base \ No newline at end of file