From 084d111d687201a5558464e975b0a2437149a612 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Den=20Delimarsky=20=F0=9F=8C=BA?= <53200638+localden@users.noreply.github.com> Date: Mon, 25 Aug 2025 11:26:20 -0700 Subject: [PATCH 01/13] Add John Lam as contributor and release badge - Add John Lam (@jflam) to maintainers section - Include GitHub Actions release workflow badge in header - Update README formatting for better visibility --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index fa48a86de..a37c06e0b 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,8 @@

🌱 Spec Kit

Build high-quality software faster.

+ + [![Release](https://github.com/github/spec-kit/actions/workflows/release.yml/badge.svg)](https://github.com/github/spec-kit/actions/workflows/release.yml)

@@ -361,6 +363,7 @@ rm gcm-linux_amd64.2.6.1.deb ## Maintainers - Den Delimarsky ([@localden](https://github.com/localden)) +- John Lam ([@jflam](https://github.com/jflam)) ## Support From f755bcfb430b7bf24d61fe0b6e67d920fe2427a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Den=20Delimarsky=20=F0=9F=8C=BA?= <53200638+localden@users.noreply.github.com> Date: Mon, 25 Aug 2025 14:07:00 -0700 Subject: [PATCH 02/13] Fix release workflow to work with repository rules - Remove problematic direct push to main branch - Keep version updates only for release artifacts - Add pull-requests permission for future flexibility - Releases/tags created via API don't require branch pushes --- .github/workflows/release.yml | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f922992d3..fd7f5c739 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -11,12 +11,14 @@ jobs: permissions: contents: write + pull-requests: write steps: - name: Checkout repository uses: actions/checkout@v4 with: fetch-depth: 0 + token: ${{ secrets.GITHUB_TOKEN }} - name: Get latest tag id: get_tag @@ -204,7 +206,7 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - name: Update version in pyproject.toml + - name: Update version in pyproject.toml (for release artifacts only) if: steps.check_release.outputs.exists == 'false' run: | # Update version in pyproject.toml (remove 'v' prefix for Python versioning) @@ -213,19 +215,8 @@ jobs: if [ -f "pyproject.toml" ]; then sed -i "s/version = \".*\"/version = \"$PYTHON_VERSION\"/" pyproject.toml - echo "Updated pyproject.toml version to $PYTHON_VERSION" + echo "Updated pyproject.toml version to $PYTHON_VERSION (for release artifacts only)" fi - - name: Commit version update - if: steps.check_release.outputs.exists == 'false' - run: | - git config --local user.email "action@github.com" - git config --local user.name "GitHub Action" - - if git diff --quiet; then - echo "No changes to commit" - else - git add pyproject.toml - git commit -m "chore: bump version to ${{ steps.get_tag.outputs.new_version }}" - git push - fi + # Note: No longer committing version changes back to main branch + # The version is only updated in the release artifacts From 704e272a00cbedefcf81533a2a73eebc7c26b55d Mon Sep 17 00:00:00 2001 From: Den Delimarsky <53200638+localden@users.noreply.github.com> Date: Mon, 25 Aug 2025 14:09:09 -0700 Subject: [PATCH 03/13] Update .github/workflows/release.yml Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .github/workflows/release.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index fd7f5c739..a4a282a2c 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -18,7 +18,6 @@ jobs: uses: actions/checkout@v4 with: fetch-depth: 0 - token: ${{ secrets.GITHUB_TOKEN }} - name: Get latest tag id: get_tag From c3ff114c5f582f8943ab8b40ef8428a27b8136df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Den=20Delimarsky=20=F0=9F=8C=BA?= <53200638+localden@users.noreply.github.com> Date: Mon, 25 Aug 2025 14:09:38 -0700 Subject: [PATCH 04/13] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index a37c06e0b..a2bc464cd 100644 --- a/README.md +++ b/README.md @@ -2,14 +2,14 @@

🌱 Spec Kit

Build high-quality software faster.

- - [![Release](https://github.com/github/spec-kit/actions/workflows/release.yml/badge.svg)](https://github.com/github/spec-kit/actions/workflows/release.yml)

An effort to allow organizations to focus on product scenarios rather than writing undifferentiated code with the help of Spec-Driven Development.

+[![Release](https://github.com/github/spec-kit/actions/workflows/release.yml/badge.svg)](https://github.com/github/spec-kit/actions/workflows/release.yml) + --- ## Table of Contents From 81fea96e42429b072f7bdde8167ee2047a819dd3 Mon Sep 17 00:00:00 2001 From: Lucas Modrich Date: Wed, 3 Sep 2025 10:58:10 +1000 Subject: [PATCH 05/13] doco(spec-driven): Fix small typo in document --- spec-driven.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-driven.md b/spec-driven.md index 0a79a35b4..48764d2d5 100644 --- a/spec-driven.md +++ b/spec-driven.md @@ -2,7 +2,7 @@ ## The Power Inversion -For decades, code has been king. Specifications served code—they were the scaffolding we built and then discarded once the "real work" of coding began. We wrote PRDs to guide development, created design docs to inform implementation, drew diagrams to visualize architecture. But these were always subordinate to the code itself. Code was truth. Everything else was, at best, good intentions. Code was the source of truth, as it mvoed forward, and spec's rarely kept pace. As the asset (code) and the implementation are one, it's not easy to have a parallel implementation without trying to build from the code. +For decades, code has been king. Specifications served code—they were the scaffolding we built and then discarded once the "real work" of coding began. We wrote PRDs to guide development, created design docs to inform implementation, drew diagrams to visualize architecture. But these were always subordinate to the code itself. Code was truth. Everything else was, at best, good intentions. Code was the source of truth, as it moved forward, and spec's rarely kept pace. As the asset (code) and the implementation are one, it's not easy to have a parallel implementation without trying to build from the code. Spec-Driven Development (SDD) inverts this power structure. Specifications don't serve code—code serves specifications. The (Product Requirements Document-Specification) PRD isn't a guide for implementation; it's the source that generates implementation. Technical plans aren't documents that inform coding; they're precise definitions that produce code. This isn't an incremental improvement to how we build software. It's a fundamental rethinking of what drives development. From f3fb55d183b743b1a142af5d6f33a6800ad30b62 Mon Sep 17 00:00:00 2001 From: PATRICK CHANEZON Date: Tue, 2 Sep 2025 21:20:42 -0700 Subject: [PATCH 06/13] adding executable permission to the scripts so they execute when the coding agent launches them --- scripts/check-task-prerequisites.sh | 0 scripts/common.sh | 0 scripts/create-new-feature.sh | 0 scripts/get-feature-paths.sh | 0 scripts/setup-plan.sh | 0 scripts/update-agent-context.sh | 0 6 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 scripts/check-task-prerequisites.sh mode change 100644 => 100755 scripts/common.sh mode change 100644 => 100755 scripts/create-new-feature.sh mode change 100644 => 100755 scripts/get-feature-paths.sh mode change 100644 => 100755 scripts/setup-plan.sh mode change 100644 => 100755 scripts/update-agent-context.sh diff --git a/scripts/check-task-prerequisites.sh b/scripts/check-task-prerequisites.sh old mode 100644 new mode 100755 diff --git a/scripts/common.sh b/scripts/common.sh old mode 100644 new mode 100755 diff --git a/scripts/create-new-feature.sh b/scripts/create-new-feature.sh old mode 100644 new mode 100755 diff --git a/scripts/get-feature-paths.sh b/scripts/get-feature-paths.sh old mode 100644 new mode 100755 diff --git a/scripts/setup-plan.sh b/scripts/setup-plan.sh old mode 100644 new mode 100755 diff --git a/scripts/update-agent-context.sh b/scripts/update-agent-context.sh old mode 100644 new mode 100755 From 2fc7ebeebe8413f58d7eb265927f8fdb54dcb99c Mon Sep 17 00:00:00 2001 From: Insik Han Date: Wed, 3 Sep 2025 19:24:27 +0900 Subject: [PATCH 07/13] Update CLI commands from '/spec' to '/specify' --- src/specify_cli/__init__.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/specify_cli/__init__.py b/src/specify_cli/__init__.py index 07103626a..75cd28f39 100644 --- a/src/specify_cli/__init__.py +++ b/src/specify_cli/__init__.py @@ -813,12 +813,12 @@ def init( if selected_ai == "claude": steps_lines.append(f"{step_num}. Open in Visual Studio Code and start using / commands with Claude Code") steps_lines.append(" - Type / in any file to see available commands") - steps_lines.append(" - Use /spec to create specifications") + steps_lines.append(" - Use /specify to create specifications") steps_lines.append(" - Use /plan to create implementation plans") steps_lines.append(" - Use /tasks to generate tasks") elif selected_ai == "gemini": steps_lines.append(f"{step_num}. Use / commands with Gemini CLI") - steps_lines.append(" - Run gemini /spec to create specifications") + steps_lines.append(" - Run gemini /specify to create specifications") steps_lines.append(" - Run gemini /plan to create implementation plans") steps_lines.append(" - See GEMINI.md for all available commands") elif selected_ai == "copilot": @@ -868,4 +868,4 @@ def main(): if __name__ == "__main__": - main() \ No newline at end of file + main() From fd517699a40822e82cf5ada95140d74b6c894546 Mon Sep 17 00:00:00 2001 From: Kazuki YAMAMOTO Date: Thu, 4 Sep 2025 10:59:07 +0900 Subject: [PATCH 08/13] Fix template path in plan command documentation --- templates/commands/plan.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/commands/plan.md b/templates/commands/plan.md index 94e1cb63a..c0e4a9ed1 100644 --- a/templates/commands/plan.md +++ b/templates/commands/plan.md @@ -19,7 +19,7 @@ Given the implementation details provided as an argument, do this: 3. Read the constitution at `/memory/constitution.md` to understand constitutional requirements. 4. Execute the implementation plan template: - - Load `/templates/implementation-plan-template.md` (already copied to IMPL_PLAN path) + - Load `/templates/plan-template.md` (already copied to IMPL_PLAN path) - Set Input path to FEATURE_SPEC - Run the Execution Flow (main) function steps 1-10 - The template is self-contained and executable From f88f6c8c0586bb69d1f0fbb6b4f594f5309b38b9 Mon Sep 17 00:00:00 2001 From: "adam.paterson" Date: Thu, 4 Sep 2025 13:42:39 +0100 Subject: [PATCH 09/13] fix: incorrect tree structure in examples --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index a2bc464cd..4f7a7a26e 100644 --- a/README.md +++ b/README.md @@ -207,7 +207,7 @@ At this stage, your project folder contents should resemble the following: │ ├── setup-plan.sh │ └── update-claude-md.sh ├── specs -│ └── 002-create-taskify +│ └── 001-create-taskify │ └── spec.md └── templates ├── CLAUDE-template.md @@ -260,7 +260,7 @@ The output of this step will include a number of implementation detail documents │ ├── setup-plan.sh │ └── update-claude-md.sh ├── specs -│ └── 002-create-taskify +│ └── 001-create-taskify │ ├── contracts │ │ ├── api-spec.json │ │ └── signalr-spec.md From f077e90a247b611e5c08b9af92c99cd5e93bd718 Mon Sep 17 00:00:00 2001 From: Govind Kamtamneni Date: Thu, 4 Sep 2025 13:46:36 +0000 Subject: [PATCH 10/13] fix minor typo in Article I --- spec-driven.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-driven.md b/spec-driven.md index 48764d2d5..b4ba40a55 100644 --- a/spec-driven.md +++ b/spec-driven.md @@ -256,7 +256,7 @@ The constitution defines nine articles that shape every aspect of the developmen #### Article I: Library-First Principle Every feature must begin as a standalone library—no exceptions. This forces modular design from the start: ``` -Every feature in Specify2 MUST begin its existence as a standalone library. +Every feature in Specify MUST begin its existence as a standalone library. No feature shall be implemented directly within application code without first being abstracted into a reusable library component. ``` From 74ccf9351262b9bb62738f8cc76e52949b73fe9f Mon Sep 17 00:00:00 2001 From: np-yoe <145414662+np-yoe@users.noreply.github.com> Date: Fri, 5 Sep 2025 02:17:29 +0900 Subject: [PATCH 11/13] Fix formatting in usage instructions --- src/specify_cli/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/specify_cli/__init__.py b/src/specify_cli/__init__.py index 75cd28f39..aa3cf3c83 100644 --- a/src/specify_cli/__init__.py +++ b/src/specify_cli/__init__.py @@ -15,7 +15,7 @@ Specify CLI - Setup tool for Specify projects Usage: uvx specify-cli.py init uvx specify-cli.py init --here - + Or install globally: uv tool install --from specify-cli.py specify-cli specify init From 6cade6736088f1a5110623f97ba40580e184e7e6 Mon Sep 17 00:00:00 2001 From: Riya Amemiya Date: Fri, 5 Sep 2025 12:04:22 +0900 Subject: [PATCH 12/13] fix: correct typos in spec-driven.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Fixed spelling: substraction → subtraction - Fixed spelling: eviolve → evolve - Fixed grammar: re-implement of change → re-implement or change --- spec-driven.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/spec-driven.md b/spec-driven.md index b4ba40a55..d9b8d9932 100644 --- a/spec-driven.md +++ b/spec-driven.md @@ -34,13 +34,13 @@ The feedback loop extends beyond initial development. Production metrics and inc Three trends make SDD not just possible but necessary: -First, AI capabilities have reached a threshold where natural language specifications can reliably generate working code. This isn't about replacing developers—it's about amplifying their effectiveness by automating the mechanical translation from specification to implementation. It can amplify exploration and creativity, it can support "start-over" easily, it supports addition substraction and critical thinking. +First, AI capabilities have reached a threshold where natural language specifications can reliably generate working code. This isn't about replacing developers—it's about amplifying their effectiveness by automating the mechanical translation from specification to implementation. It can amplify exploration and creativity, it can support "start-over" easily, it supports addition subtraction and critical thinking. -Second, software complexity continues to grow exponentially. Modern systems integrate dozens of services, frameworks, and dependencies. Keeping all these pieces aligned with original intent through manual processes becomes increasingly difficult. SDD provides systematic alignment through specification-driven generation. Frameworks may eviolve to provide AI-first support, not human-first support, or architect around reusable components. +Second, software complexity continues to grow exponentially. Modern systems integrate dozens of services, frameworks, and dependencies. Keeping all these pieces aligned with original intent through manual processes becomes increasingly difficult. SDD provides systematic alignment through specification-driven generation. Frameworks may evolve to provide AI-first support, not human-first support, or architect around reusable components. Third, the pace of change accelerates. Requirements change far more rapidly today than ever before. Pivoting is no longer exceptional—it's expected. Modern product development demands rapid iteration based on user feedback, market conditions, and competitive pressures. Traditional development treats these changes as disruptions. Each pivot requires manually propagating changes through documentation, design, and code. The result is either slow, careful updates that limit velocity, or fast, reckless changes that accumulate technical debt. -SDD can support what-if/simulation experiments, "If we need to re-implement of change the application to promote a business need to sell more T-shirts, how would we implement and experiment for that?". +SDD can support what-if/simulation experiments, "If we need to re-implement or change the application to promote a business need to sell more T-shirts, how would we implement and experiment for that?". SDD transforms requirement changes from obstacles into normal workflow. When specifications drive implementation, pivots become systematic regenerations rather than manual rewrites. Change a core requirement in the PRD, and affected implementation plans update automatically. Modify a user story, and corresponding API endpoints regenerate. This isn't just about initial development—it's about maintaining engineering velocity through inevitable changes. From 29eb082e2a19f99701397f33f1bc9859959b1ae4 Mon Sep 17 00:00:00 2001 From: Yuji Yaginuma Date: Sun, 7 Sep 2025 15:18:08 +0900 Subject: [PATCH 13/13] Use `/usr/bin/env bash` instead of `/bin/bash` for shebang Some systems like NixOS don't have `/bin/bash`. Ref: https://discourse.nixos.org/t/add-bin-bash-to-avoid-unnecessary-pain/5673 This changes allow to run scripts in those systems. Fixes #43. --- README.md | 2 +- scripts/check-task-prerequisites.sh | 2 +- scripts/common.sh | 2 +- scripts/create-new-feature.sh | 2 +- scripts/get-feature-paths.sh | 2 +- scripts/setup-plan.sh | 2 +- scripts/update-agent-context.sh | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 4f7a7a26e..40f3cee7d 100644 --- a/README.md +++ b/README.md @@ -348,7 +348,7 @@ Once the implementation step is done, ask Claude Code to try to run the applicat If you're having issues with Git authentication on Linux, you can install Git Credential Manager: ```bash -#!/bin/bash +#!/usr/bin/env bash set -e echo "Downloading Git Credential Manager v2.6.1..." wget https://github.com/git-ecosystem/git-credential-manager/releases/download/v2.6.1/gcm-linux_amd64.2.6.1.deb diff --git a/scripts/check-task-prerequisites.sh b/scripts/check-task-prerequisites.sh index 87fca37d0..b692fcde7 100755 --- a/scripts/check-task-prerequisites.sh +++ b/scripts/check-task-prerequisites.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Check that implementation plan exists and find optional design documents # Usage: ./check-task-prerequisites.sh [--json] diff --git a/scripts/common.sh b/scripts/common.sh index d63649159..310ce4e1a 100755 --- a/scripts/common.sh +++ b/scripts/common.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Common functions and variables for all scripts # Get repository root diff --git a/scripts/create-new-feature.sh b/scripts/create-new-feature.sh index 69ea3c40d..3cd43b9f1 100755 --- a/scripts/create-new-feature.sh +++ b/scripts/create-new-feature.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Create a new feature with branch, directory structure, and template # Usage: ./create-new-feature.sh "feature description" # ./create-new-feature.sh --json "feature description" diff --git a/scripts/get-feature-paths.sh b/scripts/get-feature-paths.sh index bfe508763..b1e1fbceb 100755 --- a/scripts/get-feature-paths.sh +++ b/scripts/get-feature-paths.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Get paths for current feature branch without creating anything # Used by commands that need to find existing feature files diff --git a/scripts/setup-plan.sh b/scripts/setup-plan.sh index 28bd056bb..ea0e02377 100755 --- a/scripts/setup-plan.sh +++ b/scripts/setup-plan.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Setup implementation plan structure for current branch # Returns paths needed for implementation plan generation # Usage: ./setup-plan.sh [--json] diff --git a/scripts/update-agent-context.sh b/scripts/update-agent-context.sh index 51fa640b6..21b77aaa0 100755 --- a/scripts/update-agent-context.sh +++ b/scripts/update-agent-context.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Incrementally update agent context files based on new feature plan # Supports: CLAUDE.md, GEMINI.md, and .github/copilot-instructions.md # O(1) operation - only reads current context file and new plan.md