From 2ae4f4fa98e09ecc8d4b27705ad9fca05ffd211e Mon Sep 17 00:00:00 2001 From: dzlab Date: Sat, 4 Oct 2025 19:15:41 -0700 Subject: [PATCH 1/5] Building with Spec Kit --- _posts/2025-10-04-spec-kit.md | 133 ++++++++++++++++++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 _posts/2025-10-04-spec-kit.md diff --git a/_posts/2025-10-04-spec-kit.md b/_posts/2025-10-04-spec-kit.md new file mode 100644 index 0000000..7450b2a --- /dev/null +++ b/_posts/2025-10-04-spec-kit.md @@ -0,0 +1,133 @@ +--- +layout: post +comments: true +title: "Building with GitHub's Spec Kit" +excerpt: "A step-by-step guide to using Spec Kit for spec-driven development, demonstrated by building a complete podcast website with an AI assistant." +categories: [AI, Software Development, GitHub] +tags: [Spec Kit, Spec-Driven Development, LLM, Copilot, Next.js] +toc: true +img_excerpt: +mermaid: true +--- + +[Spec-driven development](https://github.blog/ai-and-ml/generative-ai/spec-driven-development-using-markdown-as-a-programming-language-when-building-with-ai/) is a methodology that emphasizes on defining a detailed specification for an application or feature before writing any code. This approach involves providing a Large Language Model (LLM) with a comprehensive set of instructions, constraints, and goals. Then, the LLM uses this "spec" to generate the application code, ensuring the final product aligns with the initial vision. +The core idea is that you spend upfront some amount of time to go and define that and then have the LLM build exactly what you wanted per specification. + +[Spec Kit](`github.com/github/spec-kit`) is an open-source tool developed at Microsoft and designed to facilitate the Spec-driven development process. It provides a set of templates and a command-line interface (CLI) called `specify` to structure and streamline the creation of these specifications. + +The rest of this article walks through how to leverage **Spec Kit** with VS Code to build a simple web application. + +### Core Components of the Spec Kit Approach + +The Spec Kit methodology is built around four key prompting documents, each serving a distinct purpose in guiding the AI. + +* **Constitution.md:** This document establishes the "non-negotiable principles" and constraints for your project. It's where you define the foundational rules that the AI must follow in every task. +* **Spec.md:** This is the feature specification, analogous to a Product Requirements Document (PRD). It focuses on the **what** and the **why** of the feature you are building, not the technical implementation. It is generated and maintained by the `/specify` command. +* **Plan.md:** The plan translates the "what" and "why" from the spec into the **how**. It outlines the technical approach for building the feature, taking into account the rules defined in the constitution. It is generated and maintained by the `/plan` command. +* **Tasks.md:** This final document breaks down the high-level plan into a series of small, concrete, and actionable tasks for the AI to execute. This granular breakdown is crucial for guiding the AI effectively.It is generated and maintained by the `/tasks` command. + + +### Spec Kit Workflow Diagram + +The diagram below illustrates the different stages of the Spec Kit workflow, from initial idea to a functional application. Each stage builds upon the previous one, and as such creating a clear and structured path for the AI to follow. + +1. **Initialization**: The process begins with a project idea. You run `specify init`, which bootstraps a project by creating the foundational documents from a set of templaces. Most importantly, it generates `constitution.md`, the document that will contain the core principles and constraints for the AI, along with configuration files in the `.specify/` and `.github/prompts/` directories. + +2. **Specification (The What)**: Next, you define the feature's requirements using the `/specify` command. You provide a high-level prompt describing what you want to build (e.g., "I want a podcast site..."). This generates `spec.md`, which details the user stories, functional requirements, and acceptance criteria. This document is a living blueprint that you can refine until it accurately captures the feature's purpose. + +3. **Planning (The How)**: The next step is to create a technical plan. Using the `/plan` command, you provide technical direction (e.g., "Use Next.js, mock data..."). The AI assistant then generates `plan.md`, a technical document that outlines the architecture, dependencies, and file structure. Crucially, this plan must adhere to the rules established in the `constitution.md`. + +4. **Task Breakdown**: With the "what" and "how" defined, the `/tasks` command is used to break down the technical plan into a series of small, actionable steps. This generates `tasks.md`, which serves as a granular checklist for the AI. This file lists concrete actions like "Set up linting" or "Create UI components," providing a clear, step-by-step path for implementation. + +5. **Execution**: Finally, you instruct the AI assistant to `implement the tasks` and it will follow the checklist in `tasks.md` to write code. This stage is iterative; you review the generated code, provide feedback, and repeat until the application is complete and meets all the requirements outlined in the `spec.md`. + +```mermaid +graph TD + subgraph "1. Initialization" + A[Start: Project Idea] --> B(specify init); + B -- "Generates" --> C[constitution.md
.specify/
.github/prompts/]; + end + + subgraph "2. Specification (The What)" + C --> D{/specify}; + D -- "User Prompt" --> E["I want a podcast site..."]; + E -- "Generates" --> F[spec.md]; + F -- "Contains" --> G["User Stories
Requirements
Acceptance Criteria"]; + G --> H(Refine Spec); + end + + subgraph "3. Planning (The How)" + H --> I{/plan}; + I -- "User Prompt" --> J["Use Next.js, mock data..."]; + J -- "Generates" --> K[plan.md]; + K -- "Respects" --> C; + K -- "Contains" --> L["Architecture
Dependencies
File Structure"]; + end + + subgraph "4. Task Breakdown" + L --> M{/tasks}; + M -- "Generates" --> N[tasks.md]; + N -- "Contains" --> O["Granular checklist
e.g., Setup linting, Create components"]; + end + + subgraph "5. Execution" + O --> P{implement the tasks}; + P --> Q[AI Writes Code]; + Q --> R(Review & Iterate); + R --> S[Finish: Functional App]; + end +``` + + +This structured workflow ensures that the final application is a direct translation of the initial specification, guided by a consistent set of principles and a well-defined technical plan. + +### A Practical Example + +This section walks through a practical example of using Spec Kit and an AI assistant (like GitHub Copilot) to build a web application (a podcast landing page) from scratch, integrating the concepts with concrete commands and prompts. + +1. **Installation and Initialization:** + * The process begins in the terminal by installing and initializing the `specify` CLI. + * **Example Command:** `uvx specify init "pod site"`. This command starts an interactive setup, prompting you to select an AI assistant (e.g., Copilot) and helper script language (e.g., PowerShell or Bash). It then scaffolds the necessary template files, including the `.specify` and `.github/prompts` directories. + +2. **Define Your Constitution:** + * The `constitution.md` file establishes the project's non-negotiable principles. Instead of writing it manually, you can leverage the AI. + * **Example Prompt:** `Let's update this constitution for a web application set of constraints.` + * The AI assistant takes this prompt and populates the constitution with foundational rules suitable for a web project, such as "User-Centric & Accessibility First" and "Secure by Design." These principles will guide all subsequent AI-generated code. + +3. **Specify Your Feature:** + * The `/specify` command is used to create a feature specification, focusing on the *what* and *why*, not the *how*. + * **Example Prompt:** `/specify I am building a podcast landing page for VS Code Insider. Make it modern, dark theme, use featured speackers on the main page for featured conversations. Allow discovery of related episodes once I go to the Episodes page. Every episode page has detailed transcript (mock that data) and there should be at least 20 mock episodes.` + * The tool creates a new `specs/` folder and generates a `spec.md` file within it. This document includes sections for user stories, functional requirements, and acceptance criteria. Initially, it may contain `[NEEDS CLARIFICATION]` markers for ambiguities. + * **Refining the Spec:** You can then ask the AI to resolve these ambiguities. + * **Example Prompt:** `Fill in the clarification items as best as you think`. The AI updates the spec, making reasonable assumptions to create a more robust document. Further review can add crucial sections like "Out of Scope," "Success Metrics," and "Risks" to make the spec even clearer, which can be achieved by asking the AI to `Review the acceptance checklist` and then `Update it in the spec`. + +4. **Create a Technical Plan:** + * Once the spec is finalized, the `/plan` command translates it into a technical blueprint. This is where you define the *how*. + * **Example Prompt:** `/plan use Next.js, all data is mocked - no database or auth`. + * This command generates `plan.md` and `research.md`, which detail the technical architecture, project structure, dependencies (like Next.js, TypeScript), and testing strategies, all while respecting the rules laid out in the constitution. + +5. **Break Down the Plan into Tasks:** + * With a solid plan in place, the `/tasks` command breaks it down into a granular, actionable checklist for the AI. + * **Example Prompt:** `/tasks break down the plan into tasks`. + * The AI analyzes `plan.md` and generates a `tasks.md` file containing a series of small, concrete steps, often ordered with dependencies in mind (e.g., "Set up linting," "Create failing test stubs for components," "Implement core data structures," "Build UI components"). + +6. **Execute and Review:** + * Finally, you instruct the AI to start working on the implementation. + * **Example Prompt:** `implement the tasks`. + * The AI follows the `tasks.md` checklist, writing code, creating files, and building the application step-by-step. In the example, it scaffolded a complete Next.js application, including components, pages, tests, and mock data, turning the detailed specification into a functional podcast website. The process is iterative; you can review the AI's work, provide feedback, and guide it until the final product meets the requirements defined in the spec. + + +### Benefits of the Spec Kit Approach + +* **Consistency and Standardization:** By defining a constitution, you can enforce standards across hundreds of apps in an organization, enabling engineers to move between projects without having to "relearn brand new tech stacks." +* **Flexibility and Reusability:** The separation of the spec (what) from the plan (how) is powerful. If your team decides to move from React to ASP.NET Core, "you're not rewriting your spec your spec is the same... what changes is the how." You can reuse the same spec to generate a completely different implementation. +* **Improved Collaboration:** The spec becomes a "living breathing document that you can use and your team can then refer to" as the single source of truth for a feature's purpose and functionality. +* **Efficient Development:** While it requires upfront planning, this structured approach avoids the pitfalls of "yolo spec driven development." The granular tasks help "steer it in the right direction" from the start, minimizing time spent fixing incorrect assumptions made by the AI. + +### Conclusion + +The Spec Kit methodology provides a powerful framework for leveraging AI in software development. By separating concerns into a constitution, spec, plan, and tasks, it creates a structured, repeatable, and scalable process. As demonstrated, this approach allows you to guide an AI assistant to build a complete, well-architected application that aligns precisely with your vision, turning a high-level idea into functional code with remarkable efficiency. + +--- + +_I hope you enjoyed this article, feel free to leave a comment or reach out on twitter [@bachiirc](https://twitter.com/bachiirc)._ From bea742485fa4786dab66acfcf471f2b48bbb2fa3 Mon Sep 17 00:00:00 2001 From: dzlab Date: Sun, 5 Oct 2025 12:57:15 -0700 Subject: [PATCH 2/5] added sections for practical example --- _posts/2025-10-04-spec-kit.md | 54 +++++++++++++++++++++------- assets/2025/10/20251004-specify.png | Bin 0 -> 89941 bytes 2 files changed, 42 insertions(+), 12 deletions(-) create mode 100644 assets/2025/10/20251004-specify.png diff --git a/_posts/2025-10-04-spec-kit.md b/_posts/2025-10-04-spec-kit.md index 7450b2a..00a8747 100644 --- a/_posts/2025-10-04-spec-kit.md +++ b/_posts/2025-10-04-spec-kit.md @@ -1,7 +1,7 @@ --- layout: post comments: true -title: "Building with GitHub's Spec Kit" +title: "Building with Spec Kit" excerpt: "A step-by-step guide to using Spec Kit for spec-driven development, demonstrated by building a complete podcast website with an AI assistant." categories: [AI, Software Development, GitHub] tags: [Spec Kit, Spec-Driven Development, LLM, Copilot, Next.js] @@ -83,23 +83,53 @@ This structured workflow ensures that the final application is a direct translat ### A Practical Example -This section walks through a practical example of using Spec Kit and an AI assistant (like GitHub Copilot) to build a web application (a podcast landing page) from scratch, integrating the concepts with concrete commands and prompts. +This section walks through a practical example of using Spec Kit with an AI assistant (like GitHub Copilot) to build a web application (a podcast landing page) from scratch. 1. **Installation and Initialization:** - * The process begins in the terminal by installing and initializing the `specify` CLI. - * **Example Command:** `uvx specify init "pod site"`. This command starts an interactive setup, prompting you to select an AI assistant (e.g., Copilot) and helper script language (e.g., PowerShell or Bash). It then scaffolds the necessary template files, including the `.specify` and `.github/prompts` directories. + +First, install the `specify` CLI and initialize a project with `uvx specify init "pod site"`. This will start an interactive setup, prompting the selection of an AI assistant of choice (e.g., Copilot) and helper script language (e.g., PowerShell or Bash). +It will then scaffolds the necessary template files in the new project, including the `.specify` and `.github/prompts` directories. + +![Installing and initializing the specify CLI]({{ "/assets/2025/10/20251004-specify.png" | absolute_url }}){: .center-image } + 2. **Define Your Constitution:** - * The `constitution.md` file establishes the project's non-negotiable principles. Instead of writing it manually, you can leverage the AI. - * **Example Prompt:** `Let's update this constitution for a web application set of constraints.` - * The AI assistant takes this prompt and populates the constitution with foundational rules suitable for a web project, such as "User-Centric & Accessibility First" and "Secure by Design." These principles will guide all subsequent AI-generated code. +One of the important files generated by the setup is the `constitution.md`, under the `.specify/memory` folder which, establishes the project's non-negotiable principles. These principles will guide the AI assistant with subsequent code generation and thus must be updated to match the project purpose. + +But instead of editing it manually, you can leverage the AI assistant to edit it by prompting it with something like + +``` +Let's update this constitution for a web application set of constraints. +``` + +The AI assistant takes this prompt and updates the constitution with rules that are more suitable for a web application, e.g. "User-Centric & Accessibility First" and "Secure by Design." + + 3. **Specify Your Feature:** - * The `/specify` command is used to create a feature specification, focusing on the *what* and *why*, not the *how*. - * **Example Prompt:** `/specify I am building a podcast landing page for VS Code Insider. Make it modern, dark theme, use featured speackers on the main page for featured conversations. Allow discovery of related episodes once I go to the Episodes page. Every episode page has detailed transcript (mock that data) and there should be at least 20 mock episodes.` - * The tool creates a new `specs/` folder and generates a `spec.md` file within it. This document includes sections for user stories, functional requirements, and acceptance criteria. Initially, it may contain `[NEEDS CLARIFICATION]` markers for ambiguities. - * **Refining the Spec:** You can then ask the AI to resolve these ambiguities. - * **Example Prompt:** `Fill in the clarification items as best as you think`. The AI updates the spec, making reasonable assumptions to create a more robust document. Further review can add crucial sections like "Out of Scope," "Success Metrics," and "Risks" to make the spec even clearer, which can be achieved by asking the AI to `Review the acceptance checklist` and then `Update it in the spec`. + +Next, use the `/specify` command to create a feature specification, focusing on the *what* and *why*, not the *how*. For example: + +``` +/specify I am building a podcast landing page for VS Code Insider. Make it modern, dark theme, use featured speackers on the main page for featured conversations. Allow discovery of related episodes once I go to the Episodes page. Every episode page has detailed transcript (mock that data) and there should be at least 20 mock episodes. +``` + +This will make the AI assistant create a new `specs/` folder with a subfolder named after the feature (e.g. `001-i-am-building`) and generates a `spec.md` file within it. This document includes sections for user stories, functional requirements, and acceptance criteria. + +Note that the generated file may contain `[NEEDS CLARIFICATION]` markers for ambiguities. Before going any further, such ambiguities need to be addressed. You can ask the AI assistant to refining the `spec.md` and resolve these ambiguities. For example, by prompting: + +``` +Fill in the clarification items as best as you think +``` + +or + +``` +Review the acceptance checklist and then update it in the spec +``` + +The AI assistant will then update the spec, making reasonable assumptions to create a more robust document. Such further review can add crucial sections like "Out of Scope," "Success Metrics," and "Risks", making the spec even clearer. + 4. **Create a Technical Plan:** * Once the spec is finalized, the `/plan` command translates it into a technical blueprint. This is where you define the *how*. diff --git a/assets/2025/10/20251004-specify.png b/assets/2025/10/20251004-specify.png new file mode 100644 index 0000000000000000000000000000000000000000..f7977d06d82fd6eb76a18f0af47b8615b42558a0 GIT binary patch literal 89941 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

UNP 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 MfL{>2*(dJ8KbZHM82|tP literal 0 HcmV?d00001 From bc3817c9e2644983837c421bfc5fc94ea7f4cdfe Mon Sep 17 00:00:00 2001 From: dzlab Date: Sun, 5 Oct 2025 13:39:45 -0700 Subject: [PATCH 3/5] wrap up the example section --- _posts/2025-10-04-spec-kit.md | 50 ++++++++++++++++++++++++----------- 1 file changed, 35 insertions(+), 15 deletions(-) diff --git a/_posts/2025-10-04-spec-kit.md b/_posts/2025-10-04-spec-kit.md index 00a8747..7245ee9 100644 --- a/_posts/2025-10-04-spec-kit.md +++ b/_posts/2025-10-04-spec-kit.md @@ -85,7 +85,7 @@ This structured workflow ensures that the final application is a direct translat This section walks through a practical example of using Spec Kit with an AI assistant (like GitHub Copilot) to build a web application (a podcast landing page) from scratch. -1. **Installation and Initialization:** +#### 1. Installation and Initialization First, install the `specify` CLI and initialize a project with `uvx specify init "pod site"`. This will start an interactive setup, prompting the selection of an AI assistant of choice (e.g., Copilot) and helper script language (e.g., PowerShell or Bash). It will then scaffolds the necessary template files in the new project, including the `.specify` and `.github/prompts` directories. @@ -93,7 +93,7 @@ It will then scaffolds the necessary template files in the new project, includin ![Installing and initializing the specify CLI]({{ "/assets/2025/10/20251004-specify.png" | absolute_url }}){: .center-image } -2. **Define Your Constitution:** +#### 2. Define Your Constitution One of the important files generated by the setup is the `constitution.md`, under the `.specify/memory` folder which, establishes the project's non-negotiable principles. These principles will guide the AI assistant with subsequent code generation and thus must be updated to match the project purpose. But instead of editing it manually, you can leverage the AI assistant to edit it by prompting it with something like @@ -106,7 +106,7 @@ The AI assistant takes this prompt and updates the constitution with rules that -3. **Specify Your Feature:** +#### 3. Specify Your Feature Next, use the `/specify` command to create a feature specification, focusing on the *what* and *why*, not the *how*. For example: @@ -131,20 +131,40 @@ Review the acceptance checklist and then update it in the spec The AI assistant will then update the spec, making reasonable assumptions to create a more robust document. Such further review can add crucial sections like "Out of Scope," "Success Metrics," and "Risks", making the spec even clearer. -4. **Create a Technical Plan:** - * Once the spec is finalized, the `/plan` command translates it into a technical blueprint. This is where you define the *how*. - * **Example Prompt:** `/plan use Next.js, all data is mocked - no database or auth`. - * This command generates `plan.md` and `research.md`, which detail the technical architecture, project structure, dependencies (like Next.js, TypeScript), and testing strategies, all while respecting the rules laid out in the constitution. +#### 4. Create a Technical Plan -5. **Break Down the Plan into Tasks:** - * With a solid plan in place, the `/tasks` command breaks it down into a granular, actionable checklist for the AI. - * **Example Prompt:** `/tasks break down the plan into tasks`. - * The AI analyzes `plan.md` and generates a `tasks.md` file containing a series of small, concrete steps, often ordered with dependencies in mind (e.g., "Set up linting," "Create failing test stubs for components," "Implement core data structures," "Build UI components"). +Once the specs are finalized, use the `/plan` command to translate them into a technical blueprint. This is where you define the *how*. For example, use the prompt: -6. **Execute and Review:** - * Finally, you instruct the AI to start working on the implementation. - * **Example Prompt:** `implement the tasks`. - * The AI follows the `tasks.md` checklist, writing code, creating files, and building the application step-by-step. In the example, it scaffolded a complete Next.js application, including components, pages, tests, and mock data, turning the detailed specification into a functional podcast website. The process is iterative; you can review the AI's work, provide feedback, and guide it until the final product meets the requirements defined in the spec. +``` +/plan use Next.js, all data is mocked - no database or auth +``` + +The assistant will then generate a `plan.md` and `research.md` files, which detail the technical architecture, project structure, dependencies (e.g. Next.js, TypeScript), and testing strategies, all while respecting the rules laid out in the constitution. + + + +#### 5. Break Down the Plan into Tasks + +Next, use the `/tasks` command to break down the previous plan into a granular, actionable checklist for the AI assistant to implement. Example prompt: + +``` +/tasks break down the plan into tasks +``` + +The assistant will analyze the `plan.md` and generate a `tasks.md` file containing a series of small, concrete steps, and ordered with dependencies in mind, e.g., "Set up linting," "Create failing test stubs for components," "Implement core data structures," "Build UI components". + + +#### 6. Execute and Review + +Finally, instruct the AI assistant to start working on the implementation by prompting it with: + +``` +implement the tasks +``` + +The assistant will follow the `tasks.md` checklist, writing code, creating files, and building the application step-by-step. In our example application, it will scaffold a complete Next.js application, including components, pages, tests, and mock data, turning the detailed specification into a functional podcast website. + +Note: the process is iterative; you can review the AI's work, provide feedback, and guide it until the final product meets the requirements defined in the spec. ### Benefits of the Spec Kit Approach From 04b0711f0c60e3a8efae749438879a573bb3bc84 Mon Sep 17 00:00:00 2001 From: dzlab Date: Sun, 5 Oct 2025 13:52:00 -0700 Subject: [PATCH 4/5] wrap up benefits and conclusion sections --- _posts/2025-10-04-spec-kit.md | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/_posts/2025-10-04-spec-kit.md b/_posts/2025-10-04-spec-kit.md index 7245ee9..418a001 100644 --- a/_posts/2025-10-04-spec-kit.md +++ b/_posts/2025-10-04-spec-kit.md @@ -169,14 +169,17 @@ Note: the process is iterative; you can review the AI's work, provide feedback, ### Benefits of the Spec Kit Approach -* **Consistency and Standardization:** By defining a constitution, you can enforce standards across hundreds of apps in an organization, enabling engineers to move between projects without having to "relearn brand new tech stacks." -* **Flexibility and Reusability:** The separation of the spec (what) from the plan (how) is powerful. If your team decides to move from React to ASP.NET Core, "you're not rewriting your spec your spec is the same... what changes is the how." You can reuse the same spec to generate a completely different implementation. -* **Improved Collaboration:** The spec becomes a "living breathing document that you can use and your team can then refer to" as the single source of truth for a feature's purpose and functionality. -* **Efficient Development:** While it requires upfront planning, this structured approach avoids the pitfalls of "yolo spec driven development." The granular tasks help "steer it in the right direction" from the start, minimizing time spent fixing incorrect assumptions made by the AI. +The Spec Kit approach offers several significant benefits, promoting a more structured and efficient development workflow. One of the core advantages is the enforcement of **consistency and standardization**. By defining a constitution, organizations can maintain uniform standards across hundreds of applications. This allows engineers to move between projects seamlessly without the need to relearn different technology stacks and coding conventions. + +Another powerful aspect is the **flexibility and reusability** that comes from separating the *what* (the spec) from the *how* (the plan). This distinction means that a feature's specification can remain constant even if the underlying technology changes. For instance, if a team decides to migrate from React to ASP.NET Core, they can reuse the existing spec to generate a new implementation without starting from scratch. + +This methodology also fosters **improved collaboration**. The spec serves as a "living, breathing document" that acts as the single source of truth for a feature's requirements and functionality. This ensures that everyone on the team has a shared understanding of the goals and can refer back to a consistent reference point. + +Finally, the Spec Kit approach drives **efficient development**. While it requires an upfront investment in planning, this structured process avoids the pitfalls of directionless coding. The granular tasks created from the plan help steer the AI in the right direction from the outset, minimizing the time spent correcting incorrect assumptions and ensuring the final product aligns with the initial vision. ### Conclusion -The Spec Kit methodology provides a powerful framework for leveraging AI in software development. By separating concerns into a constitution, spec, plan, and tasks, it creates a structured, repeatable, and scalable process. As demonstrated, this approach allows you to guide an AI assistant to build a complete, well-architected application that aligns precisely with your vision, turning a high-level idea into functional code with remarkable efficiency. +The Spec Kit methodology provides a powerful framework for leveraging AI assistants in software development. By separating concerns into a constitution, spec, plan, and tasks, it creates a structured, repeatable, and scalable process. As demonstrated here, this approach allows you to guide effectively an AI assistant to build a complete, well-architected application that aligns precisely with your vision. --- From a79b2aa618196d4fbddbcb3d44a5b80d9797de25 Mon Sep 17 00:00:00 2001 From: dzlab Date: Sun, 5 Oct 2025 13:55:41 -0700 Subject: [PATCH 5/5] Add Example generated tasks.md --- _posts/2025-10-04-spec-kit.md | 127 ++++++++++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) diff --git a/_posts/2025-10-04-spec-kit.md b/_posts/2025-10-04-spec-kit.md index 418a001..6dda6f3 100644 --- a/_posts/2025-10-04-spec-kit.md +++ b/_posts/2025-10-04-spec-kit.md @@ -153,6 +153,133 @@ Next, use the `/tasks` command to break down the previous plan into a granular, The assistant will analyze the `plan.md` and generate a `tasks.md` file containing a series of small, concrete steps, and ordered with dependencies in mind, e.g., "Set up linting," "Create failing test stubs for components," "Implement core data structures," "Build UI components". +

+Example generated tasks.md + +
+ + # Tasks: VS Code Insider Podcast Landing (Mock Next.js) + + **Input**: Design documents from `/specs/001-i-am-building/` (plan.md) + **Prerequisites**: plan.md (available). No data-model.md, contracts/, or research.md present. All endpoints are static pages (no API contracts). All data mocked. + + ## Execution Flow (main) + ``` + 1. Load plan.md (done) + 2. No optional docs → skip contract/entity extraction (entities inferred from plan Episode model) + 3. Generate tasks: Setup → Tests (failing first) → Core Components → Pages → Integration (a11y/perf) → Polish + 4. Apply rules: Different files → [P]; same file sequence unmarked + 5. Number tasks (T001..) + 6. Provide dependency graph + parallel batches + 7. Validate completeness (entities, user journeys covered by integration tests) + 8. Return SUCCESS + ``` + + ## Format: `[ID] [P?] Description` + [P] indicates can run in parallel (distinct files / no dependency). + + ## Phase 1: Setup + - [ ] T001 Initialize Next.js + TypeScript project structure (already scaffolded) – verify `package.json`, `tsconfig.json`, `next.config.mjs` match plan. + - [ ] T002 Add lint & type scripts enforcement (ESLint config extension if needed) in `.eslintrc.json` and ensure `npm run lint` passes. + - [ ] T003 [P] Add basic Vitest + RTL test setup in `tests/setup.ts` (jest-dom, axe optional comment) & update `package.json` test script. + - [ ] T004 [P] Add `tests/README.md` documenting test layers (unit, component, a11y) referencing plan section 12. + + ## Phase 2: Tests First (TDD) – MUST FAIL INITIALLY + Integration stories (derived from Acceptance Scenarios & FRs) before implementing missing logic. + - [ ] T005 Create integration test: landing shows 3–6 featured unique primary speakers in `tests/integration/landing.featured.test.tsx` (assert uniqueness rule & count range). (FR-002/023) + - [ ] T006 [P] Integration test: episodes listing shows ≥20 items & default sort newest in `tests/integration/episodes.list.test.tsx` (FR-005/017) + - [ ] T007 [P] Integration test: filter by single Tag reduces set & resets on clearing in `tests/integration/episodes.filter.tag.test.tsx` (FR-017) + - [ ] T008 [P] Integration test: filter by Speaker works similarly in `tests/integration/episodes.filter.speaker.test.tsx` (FR-017) + - [ ] T009 [P] Integration test: episode detail shows transcript + expansion control only when > threshold in `tests/integration/episode.transcript.test.tsx` (FR-008/019/021) + - [ ] T010 [P] Integration test: related episodes shows 3 or fallback message in `tests/integration/episode.related.test.tsx` (FR-009/010/022) + - [ ] T011 [P] Integration test: navigation continuity (back stack) from related episode to previous detail in `tests/integration/navigation.explore-continuity.test.tsx` (FR-015) + - [ ] T012 [P] Accessibility smoke: landmark roles + skip link focus + contrast token presence in `tests/a11y/landing.a11y.test.tsx` (FR-024/025) + - [ ] T013 [P] Performance marks presence test (mock) verifying `performance.mark` names exist in `tests/integration/perf.marks.test.ts` (Metrics / FR-001) + + ## Phase 3: Core Data & Utilities (after failing tests exist) + - [ ] T014 Implement catalog utilities & indexing in `lib/catalog.ts` (overlap scoring, related fallback) – ensure tests start passing for related logic. + - [ ] T015 [P] Implement filter helpers in `lib/filters.ts` including sort logic (newest/oldest) & tag/speaker single-select. + - [ ] T016 [P] Implement transcript helper in `lib/transcript.ts` (isCollapsible) enforcing thresholds. + - [ ] T017 Validate dataset rules via a script `scripts/validate-episodes.mjs` (counts, featured uniqueness, threshold flags) and add `npm run validate:data`. + + ## Phase 4: Components (UI Building Blocks) + - [ ] T018 Create `app/_components/EpisodeCard.tsx` (card metadata layout) – test reuse via integration tests. + - [ ] T019 [P] Create `app/_components/FeaturedConversations.tsx` (filters featured & uniqueness) per FR-002/023. + - [ ] T020 [P] Create `app/_components/FiltersBar.tsx` (tag, speaker, sort controls) per FR-017. + - [ ] T021 [P] Create `app/_components/Transcript.tsx` (collapse/expand, focus restore) per FR-008/019/021. + - [ ] T022 [P] Create `app/_components/RelatedEpisodes.tsx` (3 or fallback) per FR-009/010. + - [ ] T023 [P] Create skeleton components (EpisodeCardSkeleton, TranscriptSkeleton, FeaturedSkeleton) in `app/_components/skeletons/` per FR-016. + + ## Phase 5: Pages & Layout + - [ ] T024 Assemble landing `app/page.tsx` (hero, FeaturedConversations, recent episodes slice) per FR-001/002/005. + - [ ] T025 [P] Assemble episodes listing `app/episodes/page.tsx` using FiltersBar + EpisodeCard grid per FR-005/017. + - [ ] T026 Assemble episode detail `app/episodes/[slug]/page.tsx` (metadata, transcript, related) per FR-007/008/009/010/019. + - [ ] T027 Add breadcrumbs / navigation continuity enhancements (if not already present) in layout or detail page per FR-012/015. + + ## Phase 6: Integration / Accessibility / Performance + - [ ] T028 Add performance marks (`landing-skeleton`, `landing-first-content`, `detail-transcript-mounted`) in relevant components. + - [ ] T029 [P] Accessibility refinements: ensure ARIA labels, roles, and focus visible outlines; update any missing alt text. + - [ ] T030 [P] Add validation script output documentation `VALIDATION.md` capturing success metrics results. + + ## Phase 7: Polish + - [ ] T031 Add unit tests for catalog, filters, transcript (word threshold) in `tests/unit/` (FR-009/017/019). + - [ ] T032 [P] Add component tests for Transcript expand/collapse & Related fallback with jest-axe checks in `tests/component/`. + - [ ] T033 [P] Add README updates (metrics section + how to run validation) in root `README.md`. + - [ ] T034 [P] Light refactor pass removing duplication (shared tag rendering) & ensure strict TypeScript passes. + - [ ] T035 Final accessibility manual checklist & record in `VALIDATION.md`. + - [ ] T036 Prepare release notes summary in `specs/001-i-am-building/VALIDATION.md` linking back to tasks. + + ## Dependencies + - T001 → T002/T003/T004 + - Tests (T005–T013) must exist & fail before implementing T014–T026 + - T014 precedes T022 (shared related logic) & T024–T026 + - T015 precedes T020 & T025 + - T016 precedes T021 & T026 + - Components (T018–T022) precede pages T024–T026 + - Skeletons (T023) precede perf marks T028 if marks rely on skeleton mount + - T028 depends on pages assembled (T024–T026) + - Polish tasks (T031–T036) depend on prior phases + + ## Parallel Execution Examples + ``` + # Batch 1 (after T001): + Task: T002 (lint setup) + Task: T003 (test harness) [P] + Task: T004 (tests README) [P] + + # Batch 2 (tests phase – all parallel) after T004: + Tasks: T005 T006 T007 T008 T009 T010 T011 T012 T013 (all [P]) + + # Batch 3 (core utilities) after failing tests present: + Tasks: T015 T016 (parallel) while T014 starts first (sequential due to catalog central role) + + # Batch 4 (components parallel) after T014–T016: + Tasks: T019 T020 T021 T022 T023 (parallel) while T018 done first (EpisodeCard dependency) + + # Batch 5 (pages) after component batch: + Tasks: T024 T025 (parallel) then T026 (needs transcript + related + card) then T027 + + # Batch 6 (integration/perf/a11y) after pages: + Tasks: T028 T029 T030 (parallel) + + # Batch 7 (polish) after integration: + Tasks: T031 T032 T033 T034 T035 (parallel where file isolation) then T036 last summarizing + ``` + + ## Validation Checklist + - [ ] All integration tests (T005–T013) authored before implementation files modified + - [ ] Episode entity covered by catalog + transcript + related logic tasks + - [ ] No [P] tasks mutate same file concurrently + - [ ] Success metrics captured in VALIDATION.md (T030, T036) + - [ ] Accessibility criteria verified (T029, T035) + + ## Notes + - No API contracts; tasks emphasize UI & data logic. + - Data model implicit; single `Episode` entity plus derived relationships. + - Adjust if additional docs (data-model.md, contracts/) are added later. +
+ +
#### 6. Execute and Review