mirror of
https://github.com/github/spec-kit.git
synced 2026-01-30 04:32:02 +00:00
feat(ci): add markdownlint-cli2 for consistent markdown formatting
Add automated markdown linting to ensure consistent formatting across all markdown files in the repository. Changes: - Add .markdownlint-cli2.jsonc configuration - Create .github/workflows/lint.yml for CI/CD integration - Fix all 908 existing markdown errors across 27 files - Enforce ATX-style headings and asterisk emphasis - Set consistent 2-space list indentation This prevents markdown errors after project initialization and maintains high documentation quality standards.
This commit is contained in:
18
.github/workflows/lint.yml
vendored
Normal file
18
.github/workflows/lint.yml
vendored
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
name: Lint
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: ["main"]
|
||||||
|
pull_request:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
markdownlint:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Run markdownlint-cli2
|
||||||
|
uses: DavidAnson/markdownlint-cli2-action@v19
|
||||||
|
with:
|
||||||
|
globs: '**/*.md'
|
||||||
24
.markdownlint-cli2.jsonc
Normal file
24
.markdownlint-cli2.jsonc
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
{
|
||||||
|
// https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md
|
||||||
|
"config": {
|
||||||
|
"default": true,
|
||||||
|
"MD003": {
|
||||||
|
"style": "atx"
|
||||||
|
},
|
||||||
|
"MD007": {
|
||||||
|
"indent": 2
|
||||||
|
},
|
||||||
|
"MD013": false,
|
||||||
|
"MD024": {
|
||||||
|
"siblings_only": true
|
||||||
|
},
|
||||||
|
"MD033": false,
|
||||||
|
"MD041": false,
|
||||||
|
"MD049": {
|
||||||
|
"style": "asterisk"
|
||||||
|
},
|
||||||
|
"MD050": {
|
||||||
|
"style": "asterisk"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
27
AGENTS.md
27
AGENTS.md
@@ -68,12 +68,14 @@ AGENT_CONFIG = {
|
|||||||
```
|
```
|
||||||
|
|
||||||
**Key Design Principle**: The dictionary key should match the actual executable name that users install. For example:
|
**Key Design Principle**: The dictionary key should match the actual executable name that users install. For example:
|
||||||
|
|
||||||
- ✅ Use `"cursor-agent"` because the CLI tool is literally called `cursor-agent`
|
- ✅ Use `"cursor-agent"` because the CLI tool is literally called `cursor-agent`
|
||||||
- ❌ Don't use `"cursor"` as a shortcut if the tool is `cursor-agent`
|
- ❌ Don't use `"cursor"` as a shortcut if the tool is `cursor-agent`
|
||||||
|
|
||||||
This eliminates the need for special-case mappings throughout the codebase.
|
This eliminates the need for special-case mappings throughout the codebase.
|
||||||
|
|
||||||
**Field Explanations**:
|
**Field Explanations**:
|
||||||
|
|
||||||
- `name`: Human-readable display name shown to users
|
- `name`: Human-readable display name shown to users
|
||||||
- `folder`: Directory where agent-specific files are stored (relative to project root)
|
- `folder`: Directory where agent-specific files are stored (relative to project root)
|
||||||
- `install_url`: Installation documentation URL (set to `None` for IDE-based agents)
|
- `install_url`: Installation documentation URL (set to `None` for IDE-based agents)
|
||||||
@@ -102,12 +104,14 @@ Update the **Supported AI Agents** section in `README.md` to include the new age
|
|||||||
|
|
||||||
Modify `.github/workflows/scripts/create-release-packages.sh`:
|
Modify `.github/workflows/scripts/create-release-packages.sh`:
|
||||||
|
|
||||||
##### Add to ALL_AGENTS array:
|
##### Add to ALL_AGENTS array
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ALL_AGENTS=(claude gemini copilot cursor-agent qwen opencode windsurf q)
|
ALL_AGENTS=(claude gemini copilot cursor-agent qwen opencode windsurf q)
|
||||||
```
|
```
|
||||||
|
|
||||||
##### Add case statement for directory structure:
|
##### Add case statement for directory structure
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
case $agent in
|
case $agent in
|
||||||
# ... existing cases ...
|
# ... existing cases ...
|
||||||
@@ -131,14 +135,16 @@ gh release create "$VERSION" \
|
|||||||
|
|
||||||
#### 5. Update Agent Context Scripts
|
#### 5. Update Agent Context Scripts
|
||||||
|
|
||||||
##### Bash script (`scripts/bash/update-agent-context.sh`):
|
##### Bash script (`scripts/bash/update-agent-context.sh`)
|
||||||
|
|
||||||
Add file variable:
|
Add file variable:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
WINDSURF_FILE="$REPO_ROOT/.windsurf/rules/specify-rules.md"
|
WINDSURF_FILE="$REPO_ROOT/.windsurf/rules/specify-rules.md"
|
||||||
```
|
```
|
||||||
|
|
||||||
Add to case statement:
|
Add to case statement:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
case "$AGENT_TYPE" in
|
case "$AGENT_TYPE" in
|
||||||
# ... existing cases ...
|
# ... existing cases ...
|
||||||
@@ -151,14 +157,16 @@ case "$AGENT_TYPE" in
|
|||||||
esac
|
esac
|
||||||
```
|
```
|
||||||
|
|
||||||
##### PowerShell script (`scripts/powershell/update-agent-context.ps1`):
|
##### PowerShell script (`scripts/powershell/update-agent-context.ps1`)
|
||||||
|
|
||||||
Add file variable:
|
Add file variable:
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
$windsurfFile = Join-Path $repoRoot '.windsurf/rules/specify-rules.md'
|
$windsurfFile = Join-Path $repoRoot '.windsurf/rules/specify-rules.md'
|
||||||
```
|
```
|
||||||
|
|
||||||
Add to switch statement:
|
Add to switch statement:
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
switch ($AgentType) {
|
switch ($AgentType) {
|
||||||
# ... existing cases ...
|
# ... existing cases ...
|
||||||
@@ -200,6 +208,7 @@ elif selected_ai == "windsurf":
|
|||||||
**CRITICAL**: When adding a new agent to AGENT_CONFIG, always use the **actual executable name** as the dictionary key, not a shortened or convenient version.
|
**CRITICAL**: When adding a new agent to AGENT_CONFIG, always use the **actual executable name** as the dictionary key, not a shortened or convenient version.
|
||||||
|
|
||||||
**Why this matters:**
|
**Why this matters:**
|
||||||
|
|
||||||
- The `check_tool()` function uses `shutil.which(tool)` to find executables in the system PATH
|
- The `check_tool()` function uses `shutil.which(tool)` to find executables in the system PATH
|
||||||
- If the key doesn't match the actual CLI tool name, you'll need special-case mappings throughout the codebase
|
- If the key doesn't match the actual CLI tool name, you'll need special-case mappings throughout the codebase
|
||||||
- This creates unnecessary complexity and maintenance burden
|
- This creates unnecessary complexity and maintenance burden
|
||||||
@@ -207,6 +216,7 @@ elif selected_ai == "windsurf":
|
|||||||
**Example - The Cursor Lesson:**
|
**Example - The Cursor Lesson:**
|
||||||
|
|
||||||
❌ **Wrong approach** (requires special-case mapping):
|
❌ **Wrong approach** (requires special-case mapping):
|
||||||
|
|
||||||
```python
|
```python
|
||||||
AGENT_CONFIG = {
|
AGENT_CONFIG = {
|
||||||
"cursor": { # Shorthand that doesn't match the actual tool
|
"cursor": { # Shorthand that doesn't match the actual tool
|
||||||
@@ -222,6 +232,7 @@ if agent_key == "cursor":
|
|||||||
```
|
```
|
||||||
|
|
||||||
✅ **Correct approach** (no mapping needed):
|
✅ **Correct approach** (no mapping needed):
|
||||||
|
|
||||||
```python
|
```python
|
||||||
AGENT_CONFIG = {
|
AGENT_CONFIG = {
|
||||||
"cursor-agent": { # Matches the actual executable name
|
"cursor-agent": { # Matches the actual executable name
|
||||||
@@ -234,6 +245,7 @@ AGENT_CONFIG = {
|
|||||||
```
|
```
|
||||||
|
|
||||||
**Benefits of this approach:**
|
**Benefits of this approach:**
|
||||||
|
|
||||||
- Eliminates special-case logic scattered throughout the codebase
|
- Eliminates special-case logic scattered throughout the codebase
|
||||||
- Makes the code more maintainable and easier to understand
|
- Makes the code more maintainable and easier to understand
|
||||||
- Reduces the chance of bugs when adding new agents
|
- Reduces the chance of bugs when adding new agents
|
||||||
@@ -289,6 +301,7 @@ echo "✅ Done"
|
|||||||
### CLI-Based Agents
|
### CLI-Based Agents
|
||||||
|
|
||||||
Require a command-line tool to be installed:
|
Require a command-line tool to be installed:
|
||||||
|
|
||||||
- **Claude Code**: `claude` CLI
|
- **Claude Code**: `claude` CLI
|
||||||
- **Gemini CLI**: `gemini` CLI
|
- **Gemini CLI**: `gemini` CLI
|
||||||
- **Cursor**: `cursor-agent` CLI
|
- **Cursor**: `cursor-agent` CLI
|
||||||
@@ -298,13 +311,16 @@ Require a command-line tool to be installed:
|
|||||||
- **CodeBuddy CLI**: `codebuddy` CLI
|
- **CodeBuddy CLI**: `codebuddy` CLI
|
||||||
|
|
||||||
### IDE-Based Agents
|
### IDE-Based Agents
|
||||||
|
|
||||||
Work within integrated development environments:
|
Work within integrated development environments:
|
||||||
|
|
||||||
- **GitHub Copilot**: Built into VS Code/compatible editors
|
- **GitHub Copilot**: Built into VS Code/compatible editors
|
||||||
- **Windsurf**: Built into Windsurf IDE
|
- **Windsurf**: Built into Windsurf IDE
|
||||||
|
|
||||||
## Command File Formats
|
## Command File Formats
|
||||||
|
|
||||||
### Markdown Format
|
### Markdown Format
|
||||||
|
|
||||||
Used by: Claude, Cursor, opencode, Windsurf, Amazon Q Developer
|
Used by: Claude, Cursor, opencode, Windsurf, Amazon Q Developer
|
||||||
|
|
||||||
```markdown
|
```markdown
|
||||||
@@ -316,6 +332,7 @@ Command content with {SCRIPT} and $ARGUMENTS placeholders.
|
|||||||
```
|
```
|
||||||
|
|
||||||
### TOML Format
|
### TOML Format
|
||||||
|
|
||||||
Used by: Gemini, Qwen
|
Used by: Gemini, Qwen
|
||||||
|
|
||||||
```toml
|
```toml
|
||||||
@@ -337,6 +354,7 @@ Command content with {SCRIPT} and {{args}} placeholders.
|
|||||||
## Argument Patterns
|
## Argument Patterns
|
||||||
|
|
||||||
Different agents use different argument placeholders:
|
Different agents use different argument placeholders:
|
||||||
|
|
||||||
- **Markdown/prompt-based**: `$ARGUMENTS`
|
- **Markdown/prompt-based**: `$ARGUMENTS`
|
||||||
- **TOML-based**: `{{args}}`
|
- **TOML-based**: `{{args}}`
|
||||||
- **Script placeholders**: `{SCRIPT}` (replaced with actual script path)
|
- **Script placeholders**: `{SCRIPT}` (replaced with actual script path)
|
||||||
@@ -372,4 +390,3 @@ When adding new agents:
|
|||||||
---
|
---
|
||||||
|
|
||||||
*This documentation should be updated whenever new agents are added to maintain accuracy and completeness.*
|
*This documentation should be updated whenever new agents are added to maintain accuracy and completeness.*
|
||||||
|
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
|
|
||||||
- New `/clarify` command template to surface up to 5 targeted clarification questions for an existing spec and persist answers into a Clarifications section in the spec.
|
- New `/clarify` command template to surface up to 5 targeted clarification questions for an existing spec and persist answers into a Clarifications section in the spec.
|
||||||
- New `/analyze` command template providing a non-destructive cross-artifact discrepancy and alignment report (spec, clarifications, plan, tasks, constitution) inserted after `/tasks` and before `/implement`.
|
- New `/analyze` command template providing a non-destructive cross-artifact discrepancy and alignment report (spec, clarifications, plan, tasks, constitution) inserted after `/tasks` and before `/implement`.
|
||||||
- Note: Constitution rules are explicitly treated as non-negotiable; any conflict is a CRITICAL finding requiring artifact remediation, not weakening of principles.
|
- Note: Constitution rules are explicitly treated as non-negotiable; any conflict is a CRITICAL finding requiring artifact remediation, not weakening of principles.
|
||||||
|
|
||||||
## [0.0.16] - 2025-09-22
|
## [0.0.16] - 2025-09-22
|
||||||
|
|
||||||
@@ -140,7 +140,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
- Updated command instructions in the CLI.
|
- Updated command instructions in the CLI.
|
||||||
- Cleaned up the code to not render agent-specific information when it's generic.
|
- Cleaned up the code to not render agent-specific information when it's generic.
|
||||||
|
|
||||||
|
|
||||||
## [0.0.6] - 2025-09-17
|
## [0.0.6] - 2025-09-17
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
@@ -166,4 +165,3 @@ N/A
|
|||||||
### Changed
|
### Changed
|
||||||
|
|
||||||
N/A
|
N/A
|
||||||
|
|
||||||
|
|||||||
@@ -14,21 +14,21 @@ orientation.
|
|||||||
Examples of behavior that contributes to creating a positive environment
|
Examples of behavior that contributes to creating a positive environment
|
||||||
include:
|
include:
|
||||||
|
|
||||||
* Using welcoming and inclusive language
|
- Using welcoming and inclusive language
|
||||||
* Being respectful of differing viewpoints and experiences
|
- Being respectful of differing viewpoints and experiences
|
||||||
* Gracefully accepting constructive criticism
|
- Gracefully accepting constructive criticism
|
||||||
* Focusing on what is best for the community
|
- Focusing on what is best for the community
|
||||||
* Showing empathy towards other community members
|
- Showing empathy towards other community members
|
||||||
|
|
||||||
Examples of unacceptable behavior by participants include:
|
Examples of unacceptable behavior by participants include:
|
||||||
|
|
||||||
* The use of sexualized language or imagery and unwelcome sexual attention or
|
- The use of sexualized language or imagery and unwelcome sexual attention or
|
||||||
advances
|
advances
|
||||||
* Trolling, insulting/derogatory comments, and personal or political attacks
|
- Trolling, insulting/derogatory comments, and personal or political attacks
|
||||||
* Public or private harassment
|
- Public or private harassment
|
||||||
* Publishing others' private information, such as a physical or electronic
|
- Publishing others' private information, such as a physical or electronic
|
||||||
address, without explicit permission
|
address, without explicit permission
|
||||||
* Other conduct which could reasonably be considered inappropriate in a
|
- Other conduct which could reasonably be considered inappropriate in a
|
||||||
professional setting
|
professional setting
|
||||||
|
|
||||||
## Our Responsibilities
|
## Our Responsibilities
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
## Contributing to Spec Kit
|
# Contributing to Spec Kit
|
||||||
|
|
||||||
Hi there! We're thrilled that you'd like to contribute to Spec Kit. Contributions to this project are [released](https://help.github.com/articles/github-terms-of-service/#6-contributions-under-repository-license) to the public under the [project's open source license](LICENSE).
|
Hi there! We're thrilled that you'd like to contribute to Spec Kit. Contributions to this project are [released](https://help.github.com/articles/github-terms-of-service/#6-contributions-under-repository-license) to the public under the [project's open source license](LICENSE).
|
||||||
|
|
||||||
@@ -125,4 +125,3 @@ Please be respectful to maintainers and disclose AI assistance.
|
|||||||
- [How to Contribute to Open Source](https://opensource.guide/how-to-contribute/)
|
- [How to Contribute to Open Source](https://opensource.guide/how-to-contribute/)
|
||||||
- [Using Pull Requests](https://help.github.com/articles/about-pull-requests/)
|
- [Using Pull Requests](https://help.github.com/articles/about-pull-requests/)
|
||||||
- [GitHub Help](https://help.github.com)
|
- [GitHub Help](https://help.github.com)
|
||||||
|
|
||||||
|
|||||||
55
README.md
55
README.md
@@ -1,5 +1,5 @@
|
|||||||
<div align="center">
|
<div align="center">
|
||||||
<img src="./media/logo_small.webp"/>
|
<img src="./media/logo_small.webp" alt="Spec Kit Logo"/>
|
||||||
<h1>🌱 Spec Kit</h1>
|
<h1>🌱 Spec Kit</h1>
|
||||||
<h3><em>Build high-quality software faster.</em></h3>
|
<h3><em>Build high-quality software faster.</em></h3>
|
||||||
</div>
|
</div>
|
||||||
@@ -253,7 +253,7 @@ Additional commands for enhanced quality and validation:
|
|||||||
|
|
||||||
Spec-Driven Development is a structured process that emphasizes:
|
Spec-Driven Development is a structured process that emphasizes:
|
||||||
|
|
||||||
- **Intent-driven development** where specifications define the "_what_" before the "_how_"
|
- **Intent-driven development** where specifications define the "*what*" before the "*how*"
|
||||||
- **Rich specification creation** using guardrails and organizational principles
|
- **Rich specification creation** using guardrails and organizational principles
|
||||||
- **Multi-step refinement** rather than one-shot code generation from prompts
|
- **Multi-step refinement** rather than one-shot code generation from prompts
|
||||||
- **Heavy reliance** on advanced AI model capabilities for specification interpretation
|
- **Heavy reliance** on advanced AI model capabilities for specification interpretation
|
||||||
@@ -383,7 +383,7 @@ This step creates or updates the `.specify/memory/constitution.md` file with you
|
|||||||
With your project principles established, you can now create the functional specifications. Use the `/speckit.specify` command and then provide the concrete requirements for the project you want to develop.
|
With your project principles established, you can now create the functional specifications. Use the `/speckit.specify` command and then provide the concrete requirements for the project you want to develop.
|
||||||
|
|
||||||
>[!IMPORTANT]
|
>[!IMPORTANT]
|
||||||
>Be as explicit as possible about _what_ you are trying to build and _why_. **Do not focus on the tech stack at this point**.
|
>Be as explicit as possible about *what* you are trying to build and *why*. **Do not focus on the tech stack at this point**.
|
||||||
|
|
||||||
An example prompt:
|
An example prompt:
|
||||||
|
|
||||||
@@ -417,16 +417,16 @@ At this stage, your project folder contents should resemble the following:
|
|||||||
```text
|
```text
|
||||||
└── .specify
|
└── .specify
|
||||||
├── memory
|
├── memory
|
||||||
│ └── constitution.md
|
│ └── constitution.md
|
||||||
├── scripts
|
├── scripts
|
||||||
│ ├── check-prerequisites.sh
|
│ ├── check-prerequisites.sh
|
||||||
│ ├── common.sh
|
│ ├── common.sh
|
||||||
│ ├── create-new-feature.sh
|
│ ├── create-new-feature.sh
|
||||||
│ ├── setup-plan.sh
|
│ ├── setup-plan.sh
|
||||||
│ └── update-claude-md.sh
|
│ └── update-claude-md.sh
|
||||||
├── specs
|
├── specs
|
||||||
│ └── 001-create-taskify
|
│ └── 001-create-taskify
|
||||||
│ └── spec.md
|
│ └── spec.md
|
||||||
└── templates
|
└── templates
|
||||||
├── plan-template.md
|
├── plan-template.md
|
||||||
├── spec-template.md
|
├── spec-template.md
|
||||||
@@ -440,6 +440,7 @@ With the baseline specification created, you can go ahead and clarify any of the
|
|||||||
You should run the structured clarification workflow **before** creating a technical plan to reduce rework downstream.
|
You should run the structured clarification workflow **before** creating a technical plan to reduce rework downstream.
|
||||||
|
|
||||||
Preferred order:
|
Preferred order:
|
||||||
|
|
||||||
1. Use `/speckit.clarify` (structured) – sequential, coverage-based questioning that records answers in a Clarifications section.
|
1. Use `/speckit.clarify` (structured) – sequential, coverage-based questioning that records answers in a Clarifications section.
|
||||||
2. Optionally follow up with ad-hoc free-form refinement if something still feels vague.
|
2. Optionally follow up with ad-hoc free-form refinement if something still feels vague.
|
||||||
|
|
||||||
@@ -477,23 +478,23 @@ The output of this step will include a number of implementation detail documents
|
|||||||
.
|
.
|
||||||
├── CLAUDE.md
|
├── CLAUDE.md
|
||||||
├── memory
|
├── memory
|
||||||
│ └── constitution.md
|
│ └── constitution.md
|
||||||
├── scripts
|
├── scripts
|
||||||
│ ├── check-prerequisites.sh
|
│ ├── check-prerequisites.sh
|
||||||
│ ├── common.sh
|
│ ├── common.sh
|
||||||
│ ├── create-new-feature.sh
|
│ ├── create-new-feature.sh
|
||||||
│ ├── setup-plan.sh
|
│ ├── setup-plan.sh
|
||||||
│ └── update-claude-md.sh
|
│ └── update-claude-md.sh
|
||||||
├── specs
|
├── specs
|
||||||
│ └── 001-create-taskify
|
│ └── 001-create-taskify
|
||||||
│ ├── contracts
|
│ ├── contracts
|
||||||
│ │ ├── api-spec.json
|
│ │ ├── api-spec.json
|
||||||
│ │ └── signalr-spec.md
|
│ │ └── signalr-spec.md
|
||||||
│ ├── data-model.md
|
│ ├── data-model.md
|
||||||
│ ├── plan.md
|
│ ├── plan.md
|
||||||
│ ├── quickstart.md
|
│ ├── quickstart.md
|
||||||
│ ├── research.md
|
│ ├── research.md
|
||||||
│ └── spec.md
|
│ └── spec.md
|
||||||
└── templates
|
└── templates
|
||||||
├── CLAUDE-template.md
|
├── CLAUDE-template.md
|
||||||
├── plan-template.md
|
├── plan-template.md
|
||||||
@@ -575,6 +576,7 @@ Once ready, use the `/speckit.implement` command to execute your implementation
|
|||||||
```
|
```
|
||||||
|
|
||||||
The `/speckit.implement` command will:
|
The `/speckit.implement` command will:
|
||||||
|
|
||||||
- Validate that all prerequisites are in place (constitution, spec, plan, and tasks)
|
- Validate that all prerequisites are in place (constitution, spec, plan, and tasks)
|
||||||
- Parse the task breakdown from `tasks.md`
|
- Parse the task breakdown from `tasks.md`
|
||||||
- Execute tasks in the correct order, respecting dependencies and parallel execution markers
|
- Execute tasks in the correct order, respecting dependencies and parallel execution markers
|
||||||
@@ -625,4 +627,3 @@ This project is heavily influenced by and based on the work and research of [Joh
|
|||||||
## 📄 License
|
## 📄 License
|
||||||
|
|
||||||
This project is licensed under the terms of the MIT open source license. Please refer to the [LICENSE](./LICENSE) file for the full terms.
|
This project is licensed under the terms of the MIT open source license. Please refer to the [LICENSE](./LICENSE) file for the full terms.
|
||||||
|
|
||||||
|
|||||||
20
SECURITY.md
20
SECURITY.md
@@ -1,10 +1,10 @@
|
|||||||
Thanks for helping make GitHub safe for everyone.
|
# Security Policy
|
||||||
|
|
||||||
# Security
|
Thanks for helping make GitHub safe for everyone.
|
||||||
|
|
||||||
GitHub takes the security of our software products and services seriously, including all of the open source code repositories managed through our GitHub organizations, such as [GitHub](https://github.com/GitHub).
|
GitHub takes the security of our software products and services seriously, including all of the open source code repositories managed through our GitHub organizations, such as [GitHub](https://github.com/GitHub).
|
||||||
|
|
||||||
Even though [open source repositories are outside of the scope of our bug bounty program](https://bounty.github.com/index.html#scope) and therefore not eligible for bounty rewards, we will ensure that your finding gets passed along to the appropriate maintainers for remediation.
|
Even though [open source repositories are outside of the scope of our bug bounty program](https://bounty.github.com/index.html#scope) and therefore not eligible for bounty rewards, we will ensure that your finding gets passed along to the appropriate maintainers for remediation.
|
||||||
|
|
||||||
## Reporting Security Issues
|
## Reporting Security Issues
|
||||||
|
|
||||||
@@ -16,13 +16,13 @@ Instead, please send an email to opensource-security[@]github.com.
|
|||||||
|
|
||||||
Please include as much of the information listed below as you can to help us better understand and resolve the issue:
|
Please include as much of the information listed below as you can to help us better understand and resolve the issue:
|
||||||
|
|
||||||
* The type of issue (e.g., buffer overflow, SQL injection, or cross-site scripting)
|
- The type of issue (e.g., buffer overflow, SQL injection, or cross-site scripting)
|
||||||
* Full paths of source file(s) related to the manifestation of the issue
|
- Full paths of source file(s) related to the manifestation of the issue
|
||||||
* The location of the affected source code (tag/branch/commit or direct URL)
|
- The location of the affected source code (tag/branch/commit or direct URL)
|
||||||
* Any special configuration required to reproduce the issue
|
- Any special configuration required to reproduce the issue
|
||||||
* Step-by-step instructions to reproduce the issue
|
- Step-by-step instructions to reproduce the issue
|
||||||
* Proof-of-concept or exploit code (if possible)
|
- Proof-of-concept or exploit code (if possible)
|
||||||
* Impact of the issue, including how an attacker might exploit the issue
|
- Impact of the issue, including how an attacker might exploit the issue
|
||||||
|
|
||||||
This information will help us triage your report more quickly.
|
This information will help us triage your report more quickly.
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Support
|
# Support
|
||||||
|
|
||||||
## How to file issues and get help
|
## How to file issues and get help
|
||||||
|
|
||||||
@@ -17,4 +17,3 @@ For help or questions about using this project, please:
|
|||||||
## GitHub Support Policy
|
## GitHub Support Policy
|
||||||
|
|
||||||
Support for this project is limited to the resources listed above.
|
Support for this project is limited to the resources listed above.
|
||||||
|
|
||||||
|
|||||||
@@ -7,11 +7,13 @@ This folder contains the documentation source files for Spec Kit, built using [D
|
|||||||
To build the documentation locally:
|
To build the documentation locally:
|
||||||
|
|
||||||
1. Install DocFX:
|
1. Install DocFX:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
dotnet tool install -g docfx
|
dotnet tool install -g docfx
|
||||||
```
|
```
|
||||||
|
|
||||||
2. Build the documentation:
|
2. Build the documentation:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd docs
|
cd docs
|
||||||
docfx docfx.json --serve
|
docfx docfx.json --serve
|
||||||
@@ -31,4 +33,3 @@ To build the documentation locally:
|
|||||||
## Deployment
|
## Deployment
|
||||||
|
|
||||||
Documentation is automatically built and deployed to GitHub Pages when changes are pushed to the `main` branch. The workflow is defined in `.github/workflows/docs.yml`.
|
Documentation is automatically built and deployed to GitHub Pages when changes are pushed to the `main` branch. The workflow is defined in `.github/workflows/docs.yml`.
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ Spec-Driven Development **flips the script** on traditional software development
|
|||||||
|
|
||||||
Spec-Driven Development is a structured process that emphasizes:
|
Spec-Driven Development is a structured process that emphasizes:
|
||||||
|
|
||||||
- **Intent-driven development** where specifications define the "_what_" before the "_how_"
|
- **Intent-driven development** where specifications define the "*what*" before the "*how*"
|
||||||
- **Rich specification creation** using guardrails and organizational principles
|
- **Rich specification creation** using guardrails and organizational principles
|
||||||
- **Multi-step refinement** rather than one-shot code generation from prompts
|
- **Multi-step refinement** rather than one-shot code generation from prompts
|
||||||
- **Heavy reliance** on advanced AI model capabilities for specification interpretation
|
- **Heavy reliance** on advanced AI model capabilities for specification interpretation
|
||||||
@@ -36,19 +36,23 @@ Spec-Driven Development is a structured process that emphasizes:
|
|||||||
Our research and experimentation focus on:
|
Our research and experimentation focus on:
|
||||||
|
|
||||||
### Technology Independence
|
### Technology Independence
|
||||||
|
|
||||||
- Create applications using diverse technology stacks
|
- Create applications using diverse technology stacks
|
||||||
- Validate the hypothesis that Spec-Driven Development is a process not tied to specific technologies, programming languages, or frameworks
|
- Validate the hypothesis that Spec-Driven Development is a process not tied to specific technologies, programming languages, or frameworks
|
||||||
|
|
||||||
### Enterprise Constraints
|
### Enterprise Constraints
|
||||||
|
|
||||||
- Demonstrate mission-critical application development
|
- Demonstrate mission-critical application development
|
||||||
- Incorporate organizational constraints (cloud providers, tech stacks, engineering practices)
|
- Incorporate organizational constraints (cloud providers, tech stacks, engineering practices)
|
||||||
- Support enterprise design systems and compliance requirements
|
- Support enterprise design systems and compliance requirements
|
||||||
|
|
||||||
### User-Centric Development
|
### User-Centric Development
|
||||||
|
|
||||||
- Build applications for different user cohorts and preferences
|
- Build applications for different user cohorts and preferences
|
||||||
- Support various development approaches (from vibe-coding to AI-native development)
|
- Support various development approaches (from vibe-coding to AI-native development)
|
||||||
|
|
||||||
### Creative & Iterative Processes
|
### Creative & Iterative Processes
|
||||||
|
|
||||||
- Validate the concept of parallel implementation exploration
|
- Validate the concept of parallel implementation exploration
|
||||||
- Provide robust iterative feature development workflows
|
- Provide robust iterative feature development workflows
|
||||||
- Extend processes to handle upgrades and modernization tasks
|
- Extend processes to handle upgrades and modernization tasks
|
||||||
@@ -60,4 +64,3 @@ Please see our [Contributing Guide](https://github.com/github/spec-kit/blob/main
|
|||||||
## Support
|
## Support
|
||||||
|
|
||||||
For support, please check our [Support Guide](https://github.com/github/spec-kit/blob/main/SUPPORT.md) or open an issue on GitHub.
|
For support, please check our [Support Guide](https://github.com/github/spec-kit/blob/main/SUPPORT.md) or open an issue on GitHub.
|
||||||
|
|
||||||
|
|||||||
@@ -42,11 +42,13 @@ uvx --from git+https://github.com/github/spec-kit.git specify init <project_name
|
|||||||
All automation scripts now have both Bash (`.sh`) and PowerShell (`.ps1`) variants.
|
All automation scripts now have both Bash (`.sh`) and PowerShell (`.ps1`) variants.
|
||||||
|
|
||||||
Auto behavior:
|
Auto behavior:
|
||||||
|
|
||||||
- Windows default: `ps`
|
- Windows default: `ps`
|
||||||
- Other OS default: `sh`
|
- Other OS default: `sh`
|
||||||
- Interactive mode: you'll be prompted unless you pass `--script`
|
- Interactive mode: you'll be prompted unless you pass `--script`
|
||||||
|
|
||||||
Force a specific script type:
|
Force a specific script type:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
uvx --from git+https://github.com/github/spec-kit.git specify init <project_name> --script sh
|
uvx --from git+https://github.com/github/spec-kit.git specify init <project_name> --script sh
|
||||||
uvx --from git+https://github.com/github/spec-kit.git specify init <project_name> --script ps
|
uvx --from git+https://github.com/github/spec-kit.git specify init <project_name> --script ps
|
||||||
@@ -63,6 +65,7 @@ uvx --from git+https://github.com/github/spec-kit.git specify init <project_name
|
|||||||
## Verification
|
## Verification
|
||||||
|
|
||||||
After initialization, you should see the following commands available in your AI agent:
|
After initialization, you should see the following commands available in your AI agent:
|
||||||
|
|
||||||
- `/speckit.specify` - Create specifications
|
- `/speckit.specify` - Create specifications
|
||||||
- `/speckit.plan` - Generate implementation plans
|
- `/speckit.plan` - Generate implementation plans
|
||||||
- `/speckit.tasks` - Break down into actionable tasks
|
- `/speckit.tasks` - Break down into actionable tasks
|
||||||
@@ -87,4 +90,3 @@ git config --global credential.helper manager
|
|||||||
echo "Cleaning up..."
|
echo "Cleaning up..."
|
||||||
rm gcm-linux_amd64.2.6.1.deb
|
rm gcm-linux_amd64.2.6.1.deb
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -73,12 +73,14 @@ uvx --from /mnt/c/GitHub/spec-kit specify init demo-anywhere --ai copilot --igno
|
|||||||
```
|
```
|
||||||
|
|
||||||
Set an environment variable for convenience:
|
Set an environment variable for convenience:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
export SPEC_KIT_SRC=/mnt/c/GitHub/spec-kit
|
export SPEC_KIT_SRC=/mnt/c/GitHub/spec-kit
|
||||||
uvx --from "$SPEC_KIT_SRC" specify init demo-env --ai copilot --ignore-agent-tools --script ps
|
uvx --from "$SPEC_KIT_SRC" specify init demo-env --ai copilot --ignore-agent-tools --script ps
|
||||||
```
|
```
|
||||||
|
|
||||||
(Optional) Define a shell function:
|
(Optional) Define a shell function:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
specify-dev() { uvx --from /mnt/c/GitHub/spec-kit specify "$@"; }
|
specify-dev() { uvx --from /mnt/c/GitHub/spec-kit specify "$@"; }
|
||||||
# Then
|
# Then
|
||||||
@@ -93,11 +95,13 @@ After running an `init`, check that shell scripts are executable on POSIX system
|
|||||||
ls -l scripts | grep .sh
|
ls -l scripts | grep .sh
|
||||||
# Expect owner execute bit (e.g. -rwxr-xr-x)
|
# Expect owner execute bit (e.g. -rwxr-xr-x)
|
||||||
```
|
```
|
||||||
|
|
||||||
On Windows you will instead use the `.ps1` scripts (no chmod needed).
|
On Windows you will instead use the `.ps1` scripts (no chmod needed).
|
||||||
|
|
||||||
## 6. Run Lint / Basic Checks (Add Your Own)
|
## 6. Run Lint / Basic Checks (Add Your Own)
|
||||||
|
|
||||||
Currently no enforced lint config is bundled, but you can quickly sanity check importability:
|
Currently no enforced lint config is bundled, but you can quickly sanity check importability:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
python -c "import specify_cli; print('Import OK')"
|
python -c "import specify_cli; print('Import OK')"
|
||||||
```
|
```
|
||||||
@@ -110,6 +114,7 @@ Validate packaging before publishing:
|
|||||||
uv build
|
uv build
|
||||||
ls dist/
|
ls dist/
|
||||||
```
|
```
|
||||||
|
|
||||||
Install the built artifact into a fresh throwaway environment if needed.
|
Install the built artifact into a fresh throwaway environment if needed.
|
||||||
|
|
||||||
## 8. Using a Temporary Workspace
|
## 8. Using a Temporary Workspace
|
||||||
@@ -120,6 +125,7 @@ When testing `init --here` in a dirty directory, create a temp workspace:
|
|||||||
mkdir /tmp/spec-test && cd /tmp/spec-test
|
mkdir /tmp/spec-test && cd /tmp/spec-test
|
||||||
python -m src.specify_cli init --here --ai claude --ignore-agent-tools --script sh # if repo copied here
|
python -m src.specify_cli init --here --ai claude --ignore-agent-tools --script sh # if repo copied here
|
||||||
```
|
```
|
||||||
|
|
||||||
Or copy only the modified CLI portion if you want a lighter sandbox.
|
Or copy only the modified CLI portion if you want a lighter sandbox.
|
||||||
|
|
||||||
## 9. Debug Network / TLS Skips
|
## 9. Debug Network / TLS Skips
|
||||||
@@ -130,6 +136,7 @@ If you need to bypass TLS validation while experimenting:
|
|||||||
specify check --skip-tls
|
specify check --skip-tls
|
||||||
specify init demo --skip-tls --ai gemini --ignore-agent-tools --script ps
|
specify init demo --skip-tls --ai gemini --ignore-agent-tools --script ps
|
||||||
```
|
```
|
||||||
|
|
||||||
(Use only for local experimentation.)
|
(Use only for local experimentation.)
|
||||||
|
|
||||||
## 10. Rapid Edit Loop Summary
|
## 10. Rapid Edit Loop Summary
|
||||||
@@ -146,6 +153,7 @@ specify init demo --skip-tls --ai gemini --ignore-agent-tools --script ps
|
|||||||
## 11. Cleaning Up
|
## 11. Cleaning Up
|
||||||
|
|
||||||
Remove build artifacts / virtual env quickly:
|
Remove build artifacts / virtual env quickly:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
rm -rf .venv dist build *.egg-info
|
rm -rf .venv dist build *.egg-info
|
||||||
```
|
```
|
||||||
@@ -165,5 +173,3 @@ rm -rf .venv dist build *.egg-info
|
|||||||
- Update docs and run through Quick Start using your modified CLI
|
- Update docs and run through Quick Start using your modified CLI
|
||||||
- Open a PR when satisfied
|
- Open a PR when satisfied
|
||||||
- (Optional) Tag a release once changes land in `main`
|
- (Optional) Tag a release once changes land in `main`
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ uvx --from git+https://github.com/github/spec-kit.git specify init <PROJECT_NAME
|
|||||||
```
|
```
|
||||||
|
|
||||||
Pick script type explicitly (optional):
|
Pick script type explicitly (optional):
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
uvx --from git+https://github.com/github/spec-kit.git specify init <PROJECT_NAME> --script ps # Force PowerShell
|
uvx --from git+https://github.com/github/spec-kit.git specify init <PROJECT_NAME> --script ps # Force PowerShell
|
||||||
uvx --from git+https://github.com/github/spec-kit.git specify init <PROJECT_NAME> --script sh # Force POSIX shell
|
uvx --from git+https://github.com/github/spec-kit.git specify init <PROJECT_NAME> --script sh # Force POSIX shell
|
||||||
@@ -120,4 +121,3 @@ implement specs/002-create-taskify/plan.md
|
|||||||
- Read the complete methodology for in-depth guidance
|
- Read the complete methodology for in-depth guidance
|
||||||
- Check out more examples in the repository
|
- Check out more examples in the repository
|
||||||
- Explore the source code on GitHub
|
- Explore the source code on GitHub
|
||||||
|
|
||||||
|
|||||||
@@ -401,4 +401,3 @@ By embedding these principles into the specification and planning process, SDD e
|
|||||||
This isn't about replacing developers or automating creativity. It's about amplifying human capability by automating mechanical translation. It's about creating a tight feedback loop where specifications, research, and code evolve together, each iteration bringing deeper understanding and better alignment between intent and implementation.
|
This isn't about replacing developers or automating creativity. It's about amplifying human capability by automating mechanical translation. It's about creating a tight feedback loop where specifications, research, and code evolve together, each iteration bringing deeper understanding and better alignment between intent and implementation.
|
||||||
|
|
||||||
Software development needs better tools for maintaining alignment between intent and implementation. SDD provides the methodology for achieving this alignment through executable specifications that generate code rather than merely guiding it.
|
Software development needs better tools for maintaining alignment between intent and implementation. SDD provides the methodology for achieving this alignment through executable specifications that generate code rather than merely guiding it.
|
||||||
|
|
||||||
|
|||||||
@@ -3,20 +3,25 @@
|
|||||||
Auto-generated from all feature plans. Last updated: [DATE]
|
Auto-generated from all feature plans. Last updated: [DATE]
|
||||||
|
|
||||||
## Active Technologies
|
## Active Technologies
|
||||||
|
|
||||||
[EXTRACTED FROM ALL PLAN.MD FILES]
|
[EXTRACTED FROM ALL PLAN.MD FILES]
|
||||||
|
|
||||||
## Project Structure
|
## Project Structure
|
||||||
```
|
|
||||||
|
```text
|
||||||
[ACTUAL STRUCTURE FROM PLANS]
|
[ACTUAL STRUCTURE FROM PLANS]
|
||||||
```
|
```
|
||||||
|
|
||||||
## Commands
|
## Commands
|
||||||
|
|
||||||
[ONLY COMMANDS FOR ACTIVE TECHNOLOGIES]
|
[ONLY COMMANDS FOR ACTIVE TECHNOLOGIES]
|
||||||
|
|
||||||
## Code Style
|
## Code Style
|
||||||
|
|
||||||
[LANGUAGE-SPECIFIC, ONLY FOR LANGUAGES IN USE]
|
[LANGUAGE-SPECIFIC, ONLY FOR LANGUAGES IN USE]
|
||||||
|
|
||||||
## Recent Changes
|
## Recent Changes
|
||||||
|
|
||||||
[LAST 3 FEATURES AND WHAT THEY ADDED]
|
[LAST 3 FEATURES AND WHAT THEY ADDED]
|
||||||
|
|
||||||
<!-- MANUAL ADDITIONS START -->
|
<!-- MANUAL ADDITIONS START -->
|
||||||
|
|||||||
@@ -38,4 +38,3 @@
|
|||||||
- Add comments or findings inline
|
- Add comments or findings inline
|
||||||
- Link to relevant resources or documentation
|
- Link to relevant resources or documentation
|
||||||
- Items are numbered sequentially for easy reference
|
- Items are numbered sequentially for easy reference
|
||||||
|
|
||||||
|
|||||||
@@ -185,4 +185,3 @@ Ask the user: "Would you like me to suggest concrete remediation edits for the t
|
|||||||
## Context
|
## Context
|
||||||
|
|
||||||
{ARGS}
|
{ARGS}
|
||||||
|
|
||||||
|
|||||||
@@ -10,12 +10,14 @@ scripts:
|
|||||||
**CRITICAL CONCEPT**: Checklists are **UNIT TESTS FOR REQUIREMENTS WRITING** - they validate the quality, clarity, and completeness of requirements in a given domain.
|
**CRITICAL CONCEPT**: Checklists are **UNIT TESTS FOR REQUIREMENTS WRITING** - they validate the quality, clarity, and completeness of requirements in a given domain.
|
||||||
|
|
||||||
**NOT for verification/testing**:
|
**NOT for verification/testing**:
|
||||||
|
|
||||||
- ❌ NOT "Verify the button clicks correctly"
|
- ❌ NOT "Verify the button clicks correctly"
|
||||||
- ❌ NOT "Test error handling works"
|
- ❌ NOT "Test error handling works"
|
||||||
- ❌ NOT "Confirm the API returns 200"
|
- ❌ NOT "Confirm the API returns 200"
|
||||||
- ❌ NOT checking if code/implementation matches the spec
|
- ❌ NOT checking if code/implementation matches the spec
|
||||||
|
|
||||||
**FOR requirements quality validation**:
|
**FOR requirements quality validation**:
|
||||||
|
|
||||||
- ✅ "Are visual hierarchy requirements defined for all card types?" (completeness)
|
- ✅ "Are visual hierarchy requirements defined for all card types?" (completeness)
|
||||||
- ✅ "Is 'prominent display' quantified with specific sizing/positioning?" (clarity)
|
- ✅ "Is 'prominent display' quantified with specific sizing/positioning?" (clarity)
|
||||||
- ✅ "Are hover state requirements consistent across all interactive elements?" (consistency)
|
- ✅ "Are hover state requirements consistent across all interactive elements?" (consistency)
|
||||||
@@ -80,7 +82,7 @@ You **MUST** consider the user input before proceeding (if not empty).
|
|||||||
- spec.md: Feature requirements and scope
|
- spec.md: Feature requirements and scope
|
||||||
- plan.md (if exists): Technical details, dependencies
|
- plan.md (if exists): Technical details, dependencies
|
||||||
- tasks.md (if exists): Implementation tasks
|
- tasks.md (if exists): Implementation tasks
|
||||||
|
|
||||||
**Context Loading Strategy**:
|
**Context Loading Strategy**:
|
||||||
- Load only necessary portions relevant to active focus areas (avoid full-file dumping)
|
- Load only necessary portions relevant to active focus areas (avoid full-file dumping)
|
||||||
- Prefer summarizing long sections into concise scenario/requirement bullets
|
- Prefer summarizing long sections into concise scenario/requirement bullets
|
||||||
@@ -91,7 +93,7 @@ You **MUST** consider the user input before proceeding (if not empty).
|
|||||||
- Create `FEATURE_DIR/checklists/` directory if it doesn't exist
|
- Create `FEATURE_DIR/checklists/` directory if it doesn't exist
|
||||||
- Generate unique checklist filename:
|
- Generate unique checklist filename:
|
||||||
- Use short, descriptive name based on domain (e.g., `ux.md`, `api.md`, `security.md`)
|
- Use short, descriptive name based on domain (e.g., `ux.md`, `api.md`, `security.md`)
|
||||||
- Format: `[domain].md`
|
- Format: `[domain].md`
|
||||||
- If file exists, append to existing file
|
- If file exists, append to existing file
|
||||||
- Number items sequentially starting from CHK001
|
- Number items sequentially starting from CHK001
|
||||||
- Each `/speckit.checklist` run creates a NEW file (never overwrites existing checklists)
|
- Each `/speckit.checklist` run creates a NEW file (never overwrites existing checklists)
|
||||||
@@ -103,7 +105,7 @@ You **MUST** consider the user input before proceeding (if not empty).
|
|||||||
- **Consistency**: Do requirements align with each other?
|
- **Consistency**: Do requirements align with each other?
|
||||||
- **Measurability**: Can requirements be objectively verified?
|
- **Measurability**: Can requirements be objectively verified?
|
||||||
- **Coverage**: Are all scenarios/edge cases addressed?
|
- **Coverage**: Are all scenarios/edge cases addressed?
|
||||||
|
|
||||||
**Category Structure** - Group items by requirement quality dimensions:
|
**Category Structure** - Group items by requirement quality dimensions:
|
||||||
- **Requirement Completeness** (Are all necessary requirements documented?)
|
- **Requirement Completeness** (Are all necessary requirements documented?)
|
||||||
- **Requirement Clarity** (Are requirements specific and unambiguous?)
|
- **Requirement Clarity** (Are requirements specific and unambiguous?)
|
||||||
@@ -114,14 +116,14 @@ You **MUST** consider the user input before proceeding (if not empty).
|
|||||||
- **Non-Functional Requirements** (Performance, Security, Accessibility, etc. - are they specified?)
|
- **Non-Functional Requirements** (Performance, Security, Accessibility, etc. - are they specified?)
|
||||||
- **Dependencies & Assumptions** (Are they documented and validated?)
|
- **Dependencies & Assumptions** (Are they documented and validated?)
|
||||||
- **Ambiguities & Conflicts** (What needs clarification?)
|
- **Ambiguities & Conflicts** (What needs clarification?)
|
||||||
|
|
||||||
**HOW TO WRITE CHECKLIST ITEMS - "Unit Tests for English"**:
|
**HOW TO WRITE CHECKLIST ITEMS - "Unit Tests for English"**:
|
||||||
|
|
||||||
❌ **WRONG** (Testing implementation):
|
❌ **WRONG** (Testing implementation):
|
||||||
- "Verify landing page displays 3 episode cards"
|
- "Verify landing page displays 3 episode cards"
|
||||||
- "Test hover states work on desktop"
|
- "Test hover states work on desktop"
|
||||||
- "Confirm logo click navigates home"
|
- "Confirm logo click navigates home"
|
||||||
|
|
||||||
✅ **CORRECT** (Testing requirements quality):
|
✅ **CORRECT** (Testing requirements quality):
|
||||||
- "Are the exact number and layout of featured episodes specified?" [Completeness]
|
- "Are the exact number and layout of featured episodes specified?" [Completeness]
|
||||||
- "Is 'prominent display' quantified with specific sizing/positioning?" [Clarity]
|
- "Is 'prominent display' quantified with specific sizing/positioning?" [Clarity]
|
||||||
@@ -130,7 +132,7 @@ You **MUST** consider the user input before proceeding (if not empty).
|
|||||||
- "Is the fallback behavior specified when logo image fails to load?" [Edge Cases]
|
- "Is the fallback behavior specified when logo image fails to load?" [Edge Cases]
|
||||||
- "Are loading states defined for asynchronous episode data?" [Completeness]
|
- "Are loading states defined for asynchronous episode data?" [Completeness]
|
||||||
- "Does the spec define visual hierarchy for competing UI elements?" [Clarity]
|
- "Does the spec define visual hierarchy for competing UI elements?" [Clarity]
|
||||||
|
|
||||||
**ITEM STRUCTURE**:
|
**ITEM STRUCTURE**:
|
||||||
Each item should follow this pattern:
|
Each item should follow this pattern:
|
||||||
- Question format asking about requirement quality
|
- Question format asking about requirement quality
|
||||||
@@ -138,28 +140,28 @@ You **MUST** consider the user input before proceeding (if not empty).
|
|||||||
- Include quality dimension in brackets [Completeness/Clarity/Consistency/etc.]
|
- Include quality dimension in brackets [Completeness/Clarity/Consistency/etc.]
|
||||||
- Reference spec section `[Spec §X.Y]` when checking existing requirements
|
- Reference spec section `[Spec §X.Y]` when checking existing requirements
|
||||||
- Use `[Gap]` marker when checking for missing requirements
|
- Use `[Gap]` marker when checking for missing requirements
|
||||||
|
|
||||||
**EXAMPLES BY QUALITY DIMENSION**:
|
**EXAMPLES BY QUALITY DIMENSION**:
|
||||||
|
|
||||||
Completeness:
|
Completeness:
|
||||||
- "Are error handling requirements defined for all API failure modes? [Gap]"
|
- "Are error handling requirements defined for all API failure modes? [Gap]"
|
||||||
- "Are accessibility requirements specified for all interactive elements? [Completeness]"
|
- "Are accessibility requirements specified for all interactive elements? [Completeness]"
|
||||||
- "Are mobile breakpoint requirements defined for responsive layouts? [Gap]"
|
- "Are mobile breakpoint requirements defined for responsive layouts? [Gap]"
|
||||||
|
|
||||||
Clarity:
|
Clarity:
|
||||||
- "Is 'fast loading' quantified with specific timing thresholds? [Clarity, Spec §NFR-2]"
|
- "Is 'fast loading' quantified with specific timing thresholds? [Clarity, Spec §NFR-2]"
|
||||||
- "Are 'related episodes' selection criteria explicitly defined? [Clarity, Spec §FR-5]"
|
- "Are 'related episodes' selection criteria explicitly defined? [Clarity, Spec §FR-5]"
|
||||||
- "Is 'prominent' defined with measurable visual properties? [Ambiguity, Spec §FR-4]"
|
- "Is 'prominent' defined with measurable visual properties? [Ambiguity, Spec §FR-4]"
|
||||||
|
|
||||||
Consistency:
|
Consistency:
|
||||||
- "Do navigation requirements align across all pages? [Consistency, Spec §FR-10]"
|
- "Do navigation requirements align across all pages? [Consistency, Spec §FR-10]"
|
||||||
- "Are card component requirements consistent between landing and detail pages? [Consistency]"
|
- "Are card component requirements consistent between landing and detail pages? [Consistency]"
|
||||||
|
|
||||||
Coverage:
|
Coverage:
|
||||||
- "Are requirements defined for zero-state scenarios (no episodes)? [Coverage, Edge Case]"
|
- "Are requirements defined for zero-state scenarios (no episodes)? [Coverage, Edge Case]"
|
||||||
- "Are concurrent user interaction scenarios addressed? [Coverage, Gap]"
|
- "Are concurrent user interaction scenarios addressed? [Coverage, Gap]"
|
||||||
- "Are requirements specified for partial data loading failures? [Coverage, Exception Flow]"
|
- "Are requirements specified for partial data loading failures? [Coverage, Exception Flow]"
|
||||||
|
|
||||||
Measurability:
|
Measurability:
|
||||||
- "Are visual hierarchy requirements measurable/testable? [Acceptance Criteria, Spec §FR-1]"
|
- "Are visual hierarchy requirements measurable/testable? [Acceptance Criteria, Spec §FR-1]"
|
||||||
- "Can 'balanced visual weight' be objectively verified? [Measurability, Spec §FR-2]"
|
- "Can 'balanced visual weight' be objectively verified? [Measurability, Spec §FR-2]"
|
||||||
@@ -195,7 +197,7 @@ You **MUST** consider the user input before proceeding (if not empty).
|
|||||||
- ❌ "Click", "navigate", "render", "load", "execute"
|
- ❌ "Click", "navigate", "render", "load", "execute"
|
||||||
- ❌ Test cases, test plans, QA procedures
|
- ❌ Test cases, test plans, QA procedures
|
||||||
- ❌ Implementation details (frameworks, APIs, algorithms)
|
- ❌ Implementation details (frameworks, APIs, algorithms)
|
||||||
|
|
||||||
**✅ REQUIRED PATTERNS** - These test requirements quality:
|
**✅ REQUIRED PATTERNS** - These test requirements quality:
|
||||||
- ✅ "Are [requirement type] defined/specified/documented for [scenario]?"
|
- ✅ "Are [requirement type] defined/specified/documented for [scenario]?"
|
||||||
- ✅ "Is [vague term] quantified/clarified with specific criteria?"
|
- ✅ "Is [vague term] quantified/clarified with specific criteria?"
|
||||||
@@ -225,6 +227,7 @@ To avoid clutter, use descriptive types and clean up obsolete checklists when do
|
|||||||
**UX Requirements Quality:** `ux.md`
|
**UX Requirements Quality:** `ux.md`
|
||||||
|
|
||||||
Sample items (testing the requirements, NOT the implementation):
|
Sample items (testing the requirements, NOT the implementation):
|
||||||
|
|
||||||
- "Are visual hierarchy requirements defined with measurable criteria? [Clarity, Spec §FR-1]"
|
- "Are visual hierarchy requirements defined with measurable criteria? [Clarity, Spec §FR-1]"
|
||||||
- "Is the number and positioning of UI elements explicitly specified? [Completeness, Spec §FR-1]"
|
- "Is the number and positioning of UI elements explicitly specified? [Completeness, Spec §FR-1]"
|
||||||
- "Are interaction state requirements (hover, focus, active) consistently defined? [Consistency]"
|
- "Are interaction state requirements (hover, focus, active) consistently defined? [Consistency]"
|
||||||
@@ -235,6 +238,7 @@ Sample items (testing the requirements, NOT the implementation):
|
|||||||
**API Requirements Quality:** `api.md`
|
**API Requirements Quality:** `api.md`
|
||||||
|
|
||||||
Sample items:
|
Sample items:
|
||||||
|
|
||||||
- "Are error response formats specified for all failure scenarios? [Completeness]"
|
- "Are error response formats specified for all failure scenarios? [Completeness]"
|
||||||
- "Are rate limiting requirements quantified with specific thresholds? [Clarity]"
|
- "Are rate limiting requirements quantified with specific thresholds? [Clarity]"
|
||||||
- "Are authentication requirements consistent across all endpoints? [Consistency]"
|
- "Are authentication requirements consistent across all endpoints? [Consistency]"
|
||||||
@@ -244,6 +248,7 @@ Sample items:
|
|||||||
**Performance Requirements Quality:** `performance.md`
|
**Performance Requirements Quality:** `performance.md`
|
||||||
|
|
||||||
Sample items:
|
Sample items:
|
||||||
|
|
||||||
- "Are performance requirements quantified with specific metrics? [Clarity]"
|
- "Are performance requirements quantified with specific metrics? [Clarity]"
|
||||||
- "Are performance targets defined for all critical user journeys? [Coverage]"
|
- "Are performance targets defined for all critical user journeys? [Coverage]"
|
||||||
- "Are performance requirements under different load conditions specified? [Completeness]"
|
- "Are performance requirements under different load conditions specified? [Completeness]"
|
||||||
@@ -253,6 +258,7 @@ Sample items:
|
|||||||
**Security Requirements Quality:** `security.md`
|
**Security Requirements Quality:** `security.md`
|
||||||
|
|
||||||
Sample items:
|
Sample items:
|
||||||
|
|
||||||
- "Are authentication requirements specified for all protected resources? [Coverage]"
|
- "Are authentication requirements specified for all protected resources? [Coverage]"
|
||||||
- "Are data protection requirements defined for sensitive information? [Completeness]"
|
- "Are data protection requirements defined for sensitive information? [Completeness]"
|
||||||
- "Is the threat model documented and requirements aligned to it? [Traceability]"
|
- "Is the threat model documented and requirements aligned to it? [Traceability]"
|
||||||
@@ -282,10 +288,10 @@ Sample items:
|
|||||||
```
|
```
|
||||||
|
|
||||||
**Key Differences:**
|
**Key Differences:**
|
||||||
|
|
||||||
- Wrong: Tests if the system works correctly
|
- Wrong: Tests if the system works correctly
|
||||||
- Correct: Tests if the requirements are written correctly
|
- Correct: Tests if the requirements are written correctly
|
||||||
- Wrong: Verification of behavior
|
- Wrong: Verification of behavior
|
||||||
- Correct: Validation of requirement quality
|
- Correct: Validation of requirement quality
|
||||||
- Wrong: "Does it do X?"
|
- Wrong: "Does it do X?"
|
||||||
- Correct: "Is X clearly specified?"
|
- Correct: "Is X clearly specified?"
|
||||||
|
|
||||||
|
|||||||
@@ -87,63 +87,63 @@ Execution steps:
|
|||||||
3. Generate (internally) a prioritized queue of candidate clarification questions (maximum 5). Do NOT output them all at once. Apply these constraints:
|
3. Generate (internally) a prioritized queue of candidate clarification questions (maximum 5). Do NOT output them all at once. Apply these constraints:
|
||||||
- Maximum of 10 total questions across the whole session.
|
- Maximum of 10 total questions across the whole session.
|
||||||
- Each question must be answerable with EITHER:
|
- Each question must be answerable with EITHER:
|
||||||
* A short multiple‑choice selection (2–5 distinct, mutually exclusive options), OR
|
- A short multiple‑choice selection (2–5 distinct, mutually exclusive options), OR
|
||||||
* A one-word / short‑phrase answer (explicitly constrain: "Answer in <=5 words").
|
- A one-word / short‑phrase answer (explicitly constrain: "Answer in <=5 words").
|
||||||
- Only include questions whose answers materially impact architecture, data modeling, task decomposition, test design, UX behavior, operational readiness, or compliance validation.
|
- Only include questions whose answers materially impact architecture, data modeling, task decomposition, test design, UX behavior, operational readiness, or compliance validation.
|
||||||
- Ensure category coverage balance: attempt to cover the highest impact unresolved categories first; avoid asking two low-impact questions when a single high-impact area (e.g., security posture) is unresolved.
|
- Ensure category coverage balance: attempt to cover the highest impact unresolved categories first; avoid asking two low-impact questions when a single high-impact area (e.g., security posture) is unresolved.
|
||||||
- Exclude questions already answered, trivial stylistic preferences, or plan-level execution details (unless blocking correctness).
|
- Exclude questions already answered, trivial stylistic preferences, or plan-level execution details (unless blocking correctness).
|
||||||
- Favor clarifications that reduce downstream rework risk or prevent misaligned acceptance tests.
|
- Favor clarifications that reduce downstream rework risk or prevent misaligned acceptance tests.
|
||||||
- If more than 5 categories remain unresolved, select the top 5 by (Impact * Uncertainty) heuristic.
|
- If more than 5 categories remain unresolved, select the top 5 by (Impact * Uncertainty) heuristic.
|
||||||
|
|
||||||
4. Sequential questioning loop (interactive):
|
4. Sequential questioning loop (interactive):
|
||||||
- Present EXACTLY ONE question at a time.
|
- Present EXACTLY ONE question at a time.
|
||||||
- For multiple‑choice questions:
|
- For multiple‑choice questions:
|
||||||
* **Analyze all options** and determine the **most suitable option** based on:
|
- **Analyze all options** and determine the **most suitable option** based on:
|
||||||
- Best practices for the project type
|
- Best practices for the project type
|
||||||
- Common patterns in similar implementations
|
- Common patterns in similar implementations
|
||||||
- Risk reduction (security, performance, maintainability)
|
- Risk reduction (security, performance, maintainability)
|
||||||
- Alignment with any explicit project goals or constraints visible in the spec
|
- Alignment with any explicit project goals or constraints visible in the spec
|
||||||
* Present your **recommended option prominently** at the top with clear reasoning (1-2 sentences explaining why this is the best choice).
|
- Present your **recommended option prominently** at the top with clear reasoning (1-2 sentences explaining why this is the best choice).
|
||||||
* Format as: `**Recommended:** Option [X] - <reasoning>`
|
- Format as: `**Recommended:** Option [X] - <reasoning>`
|
||||||
* Then render all options as a Markdown table:
|
- Then render all options as a Markdown table:
|
||||||
|
|
||||||
| Option | Description |
|
| Option | Description |
|
||||||
|--------|-------------|
|
|--------|-------------|
|
||||||
| A | <Option A description> |
|
| A | <Option A description> |
|
||||||
| B | <Option B description> |
|
| B | <Option B description> |
|
||||||
| C | <Option C description> | (add D/E as needed up to 5)
|
| C | <Option C description> (add D/E as needed up to 5) |
|
||||||
| Short | Provide a different short answer (<=5 words) | (Include only if free-form alternative is appropriate)
|
| Short | Provide a different short answer (<=5 words) (Include only if free-form alternative is appropriate) |
|
||||||
|
|
||||||
* After the table, add: `You can reply with the option letter (e.g., "A"), accept the recommendation by saying "yes" or "recommended", or provide your own short answer.`
|
- After the table, add: `You can reply with the option letter (e.g., "A"), accept the recommendation by saying "yes" or "recommended", or provide your own short answer.`
|
||||||
- For short‑answer style (no meaningful discrete options):
|
- For short‑answer style (no meaningful discrete options):
|
||||||
* Provide your **suggested answer** based on best practices and context.
|
- Provide your **suggested answer** based on best practices and context.
|
||||||
* Format as: `**Suggested:** <your proposed answer> - <brief reasoning>`
|
- Format as: `**Suggested:** <your proposed answer> - <brief reasoning>`
|
||||||
* Then output: `Format: Short answer (<=5 words). You can accept the suggestion by saying "yes" or "suggested", or provide your own answer.`
|
- Then output: `Format: Short answer (<=5 words). You can accept the suggestion by saying "yes" or "suggested", or provide your own answer.`
|
||||||
- After the user answers:
|
- After the user answers:
|
||||||
* If the user replies with "yes", "recommended", or "suggested", use your previously stated recommendation/suggestion as the answer.
|
- If the user replies with "yes", "recommended", or "suggested", use your previously stated recommendation/suggestion as the answer.
|
||||||
* Otherwise, validate the answer maps to one option or fits the <=5 word constraint.
|
- Otherwise, validate the answer maps to one option or fits the <=5 word constraint.
|
||||||
* If ambiguous, ask for a quick disambiguation (count still belongs to same question; do not advance).
|
- If ambiguous, ask for a quick disambiguation (count still belongs to same question; do not advance).
|
||||||
* Once satisfactory, record it in working memory (do not yet write to disk) and move to the next queued question.
|
- Once satisfactory, record it in working memory (do not yet write to disk) and move to the next queued question.
|
||||||
- Stop asking further questions when:
|
- Stop asking further questions when:
|
||||||
* All critical ambiguities resolved early (remaining queued items become unnecessary), OR
|
- All critical ambiguities resolved early (remaining queued items become unnecessary), OR
|
||||||
* User signals completion ("done", "good", "no more"), OR
|
- User signals completion ("done", "good", "no more"), OR
|
||||||
* You reach 5 asked questions.
|
- You reach 5 asked questions.
|
||||||
- Never reveal future queued questions in advance.
|
- Never reveal future queued questions in advance.
|
||||||
- If no valid questions exist at start, immediately report no critical ambiguities.
|
- If no valid questions exist at start, immediately report no critical ambiguities.
|
||||||
|
|
||||||
5. Integration after EACH accepted answer (incremental update approach):
|
5. Integration after EACH accepted answer (incremental update approach):
|
||||||
- Maintain in-memory representation of the spec (loaded once at start) plus the raw file contents.
|
- Maintain in-memory representation of the spec (loaded once at start) plus the raw file contents.
|
||||||
- For the first integrated answer in this session:
|
- For the first integrated answer in this session:
|
||||||
* Ensure a `## Clarifications` section exists (create it just after the highest-level contextual/overview section per the spec template if missing).
|
- Ensure a `## Clarifications` section exists (create it just after the highest-level contextual/overview section per the spec template if missing).
|
||||||
* Under it, create (if not present) a `### Session YYYY-MM-DD` subheading for today.
|
- Under it, create (if not present) a `### Session YYYY-MM-DD` subheading for today.
|
||||||
- Append a bullet line immediately after acceptance: `- Q: <question> → A: <final answer>`.
|
- Append a bullet line immediately after acceptance: `- Q: <question> → A: <final answer>`.
|
||||||
- Then immediately apply the clarification to the most appropriate section(s):
|
- Then immediately apply the clarification to the most appropriate section(s):
|
||||||
* Functional ambiguity → Update or add a bullet in Functional Requirements.
|
- Functional ambiguity → Update or add a bullet in Functional Requirements.
|
||||||
* User interaction / actor distinction → Update User Stories or Actors subsection (if present) with clarified role, constraint, or scenario.
|
- User interaction / actor distinction → Update User Stories or Actors subsection (if present) with clarified role, constraint, or scenario.
|
||||||
* Data shape / entities → Update Data Model (add fields, types, relationships) preserving ordering; note added constraints succinctly.
|
- Data shape / entities → Update Data Model (add fields, types, relationships) preserving ordering; note added constraints succinctly.
|
||||||
* Non-functional constraint → Add/modify measurable criteria in Non-Functional / Quality Attributes section (convert vague adjective to metric or explicit target).
|
- Non-functional constraint → Add/modify measurable criteria in Non-Functional / Quality Attributes section (convert vague adjective to metric or explicit target).
|
||||||
* Edge case / negative flow → Add a new bullet under Edge Cases / Error Handling (or create such subsection if template provides placeholder for it).
|
- Edge case / negative flow → Add a new bullet under Edge Cases / Error Handling (or create such subsection if template provides placeholder for it).
|
||||||
* Terminology conflict → Normalize term across spec; retain original only if necessary by adding `(formerly referred to as "X")` once.
|
- Terminology conflict → Normalize term across spec; retain original only if necessary by adding `(formerly referred to as "X")` once.
|
||||||
- If the clarification invalidates an earlier ambiguous statement, replace that statement instead of duplicating; leave no obsolete contradictory text.
|
- If the clarification invalidates an earlier ambiguous statement, replace that statement instead of duplicating; leave no obsolete contradictory text.
|
||||||
- Save the spec file AFTER each integration to minimize risk of context loss (atomic overwrite).
|
- Save the spec file AFTER each integration to minimize risk of context loss (atomic overwrite).
|
||||||
- Preserve formatting: do not reorder unrelated sections; keep heading hierarchy intact.
|
- Preserve formatting: do not reorder unrelated sections; keep heading hierarchy intact.
|
||||||
@@ -168,13 +168,13 @@ Execution steps:
|
|||||||
- Suggested next command.
|
- Suggested next command.
|
||||||
|
|
||||||
Behavior rules:
|
Behavior rules:
|
||||||
|
|
||||||
- If no meaningful ambiguities found (or all potential questions would be low-impact), respond: "No critical ambiguities detected worth formal clarification." and suggest proceeding.
|
- If no meaningful ambiguities found (or all potential questions would be low-impact), respond: "No critical ambiguities detected worth formal clarification." and suggest proceeding.
|
||||||
- If spec file missing, instruct user to run `/speckit.specify` first (do not create a new spec here).
|
- If spec file missing, instruct user to run `/speckit.specify` first (do not create a new spec here).
|
||||||
- Never exceed 5 total asked questions (clarification retries for a single question do not count as new questions).
|
- Never exceed 5 total asked questions (clarification retries for a single question do not count as new questions).
|
||||||
- Avoid speculative tech stack questions unless the absence blocks functional clarity.
|
- Avoid speculative tech stack questions unless the absence blocks functional clarity.
|
||||||
- Respect user early termination signals ("stop", "done", "proceed").
|
- Respect user early termination signals ("stop", "done", "proceed").
|
||||||
- If no questions asked due to full coverage, output a compact coverage summary (all categories Clear) then suggest advancing.
|
- If no questions asked due to full coverage, output a compact coverage summary (all categories Clear) then suggest advancing.
|
||||||
- If quota reached with unresolved high-impact categories remaining, explicitly flag them under Deferred with rationale.
|
- If quota reached with unresolved high-impact categories remaining, explicitly flag them under Deferred with rationale.
|
||||||
|
|
||||||
Context for prioritization: {ARGS}
|
Context for prioritization: {ARGS}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
description: Create or update the project constitution from interactive or provided principle inputs, ensuring all dependent templates stay in sync.
|
description: Create or update the project constitution from interactive or provided principle inputs, ensuring all dependent templates stay in sync
|
||||||
---
|
---
|
||||||
|
|
||||||
## User Input
|
## User Input
|
||||||
@@ -25,9 +25,9 @@ Follow this execution flow:
|
|||||||
- Otherwise infer from existing repo context (README, docs, prior constitution versions if embedded).
|
- Otherwise infer from existing repo context (README, docs, prior constitution versions if embedded).
|
||||||
- For governance dates: `RATIFICATION_DATE` is the original adoption date (if unknown ask or mark TODO), `LAST_AMENDED_DATE` is today if changes are made, otherwise keep previous.
|
- For governance dates: `RATIFICATION_DATE` is the original adoption date (if unknown ask or mark TODO), `LAST_AMENDED_DATE` is today if changes are made, otherwise keep previous.
|
||||||
- `CONSTITUTION_VERSION` must increment according to semantic versioning rules:
|
- `CONSTITUTION_VERSION` must increment according to semantic versioning rules:
|
||||||
* MAJOR: Backward incompatible governance/principle removals or redefinitions.
|
- MAJOR: Backward incompatible governance/principle removals or redefinitions.
|
||||||
* MINOR: New principle/section added or materially expanded guidance.
|
- MINOR: New principle/section added or materially expanded guidance.
|
||||||
* PATCH: Clarifications, wording, typo fixes, non-semantic refinements.
|
- PATCH: Clarifications, wording, typo fixes, non-semantic refinements.
|
||||||
- If version bump type ambiguous, propose reasoning before finalizing.
|
- If version bump type ambiguous, propose reasoning before finalizing.
|
||||||
|
|
||||||
3. Draft the updated constitution content:
|
3. Draft the updated constitution content:
|
||||||
@@ -65,6 +65,7 @@ Follow this execution flow:
|
|||||||
- Suggested commit message (e.g., `docs: amend constitution to vX.Y.Z (principle additions + governance update)`).
|
- Suggested commit message (e.g., `docs: amend constitution to vX.Y.Z (principle additions + governance update)`).
|
||||||
|
|
||||||
Formatting & Style Requirements:
|
Formatting & Style Requirements:
|
||||||
|
|
||||||
- Use Markdown headings exactly as in the template (do not demote/promote levels).
|
- Use Markdown headings exactly as in the template (do not demote/promote levels).
|
||||||
- Wrap long rationale lines to keep readability (<100 chars ideally) but do not hard enforce with awkward breaks.
|
- Wrap long rationale lines to keep readability (<100 chars ideally) but do not hard enforce with awkward breaks.
|
||||||
- Keep a single blank line between sections.
|
- Keep a single blank line between sections.
|
||||||
@@ -75,4 +76,3 @@ If the user supplies partial updates (e.g., only one principle revision), still
|
|||||||
If critical info missing (e.g., ratification date truly unknown), insert `TODO(<FIELD_NAME>): explanation` and include in the Sync Impact Report under deferred items.
|
If critical info missing (e.g., ratification date truly unknown), insert `TODO(<FIELD_NAME>): explanation` and include in the Sync Impact Report under deferred items.
|
||||||
|
|
||||||
Do not create a new template; always operate on the existing `/memory/constitution.md` file.
|
Do not create a new template; always operate on the existing `/memory/constitution.md` file.
|
||||||
|
|
||||||
|
|||||||
@@ -20,31 +20,33 @@ You **MUST** consider the user input before proceeding (if not empty).
|
|||||||
2. **Check checklists status** (if FEATURE_DIR/checklists/ exists):
|
2. **Check checklists status** (if FEATURE_DIR/checklists/ exists):
|
||||||
- Scan all checklist files in the checklists/ directory
|
- Scan all checklist files in the checklists/ directory
|
||||||
- For each checklist, count:
|
- For each checklist, count:
|
||||||
* Total items: All lines matching `- [ ]` or `- [X]` or `- [x]`
|
- Total items: All lines matching `- [ ]` or `- [X]` or `- [x]`
|
||||||
* Completed items: Lines matching `- [X]` or `- [x]`
|
- Completed items: Lines matching `- [X]` or `- [x]`
|
||||||
* Incomplete items: Lines matching `- [ ]`
|
- Incomplete items: Lines matching `- [ ]`
|
||||||
- Create a status table:
|
- Create a status table:
|
||||||
```
|
|
||||||
|
```text
|
||||||
| Checklist | Total | Completed | Incomplete | Status |
|
| Checklist | Total | Completed | Incomplete | Status |
|
||||||
|-----------|-------|-----------|------------|--------|
|
|-----------|-------|-----------|------------|--------|
|
||||||
| ux.md | 12 | 12 | 0 | ✓ PASS |
|
| ux.md | 12 | 12 | 0 | ✓ PASS |
|
||||||
| test.md | 8 | 5 | 3 | ✗ FAIL |
|
| test.md | 8 | 5 | 3 | ✗ FAIL |
|
||||||
| security.md | 6 | 6 | 0 | ✓ PASS |
|
| security.md | 6 | 6 | 0 | ✓ PASS |
|
||||||
```
|
```
|
||||||
|
|
||||||
- Calculate overall status:
|
- Calculate overall status:
|
||||||
* **PASS**: All checklists have 0 incomplete items
|
- **PASS**: All checklists have 0 incomplete items
|
||||||
* **FAIL**: One or more checklists have incomplete items
|
- **FAIL**: One or more checklists have incomplete items
|
||||||
|
|
||||||
- **If any checklist is incomplete**:
|
- **If any checklist is incomplete**:
|
||||||
* Display the table with incomplete item counts
|
- Display the table with incomplete item counts
|
||||||
* **STOP** and ask: "Some checklists are incomplete. Do you want to proceed with implementation anyway? (yes/no)"
|
- **STOP** and ask: "Some checklists are incomplete. Do you want to proceed with implementation anyway? (yes/no)"
|
||||||
* Wait for user response before continuing
|
- Wait for user response before continuing
|
||||||
* If user says "no" or "wait" or "stop", halt execution
|
- If user says "no" or "wait" or "stop", halt execution
|
||||||
* If user says "yes" or "proceed" or "continue", proceed to step 3
|
- If user says "yes" or "proceed" or "continue", proceed to step 3
|
||||||
|
|
||||||
- **If all checklists are complete**:
|
- **If all checklists are complete**:
|
||||||
* Display the table showing all checklists passed
|
- Display the table showing all checklists passed
|
||||||
* Automatically proceed to step 3
|
- Automatically proceed to step 3
|
||||||
|
|
||||||
3. Load and analyze the implementation context:
|
3. Load and analyze the implementation context:
|
||||||
- **REQUIRED**: Read tasks.md for the complete task list and execution plan
|
- **REQUIRED**: Read tasks.md for the complete task list and execution plan
|
||||||
@@ -56,23 +58,24 @@ You **MUST** consider the user input before proceeding (if not empty).
|
|||||||
|
|
||||||
4. **Project Setup Verification**:
|
4. **Project Setup Verification**:
|
||||||
- **REQUIRED**: Create/verify ignore files based on actual project setup:
|
- **REQUIRED**: Create/verify ignore files based on actual project setup:
|
||||||
|
|
||||||
**Detection & Creation Logic**:
|
**Detection & Creation Logic**:
|
||||||
- Check if the following command succeeds to determine if the repository is a git repo (create/verify .gitignore if so):
|
- Check if the following command succeeds to determine if the repository is a git repo (create/verify .gitignore if so):
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
git rev-parse --git-dir 2>/dev/null
|
git rev-parse --git-dir 2>/dev/null
|
||||||
```
|
```
|
||||||
|
|
||||||
- Check if Dockerfile* exists or Docker in plan.md → create/verify .dockerignore
|
- Check if Dockerfile* exists or Docker in plan.md → create/verify .dockerignore
|
||||||
- Check if .eslintrc* or eslint.config.* exists → create/verify .eslintignore
|
- Check if .eslintrc*or eslint.config.* exists → create/verify .eslintignore
|
||||||
- Check if .prettierrc* exists → create/verify .prettierignore
|
- Check if .prettierrc* exists → create/verify .prettierignore
|
||||||
- Check if .npmrc or package.json exists → create/verify .npmignore (if publishing)
|
- Check if .npmrc or package.json exists → create/verify .npmignore (if publishing)
|
||||||
- Check if terraform files (*.tf) exist → create/verify .terraformignore
|
- Check if terraform files (*.tf) exist → create/verify .terraformignore
|
||||||
- Check if .helmignore needed (helm charts present) → create/verify .helmignore
|
- Check if .helmignore needed (helm charts present) → create/verify .helmignore
|
||||||
|
|
||||||
**If ignore file already exists**: Verify it contains essential patterns, append missing critical patterns only
|
**If ignore file already exists**: Verify it contains essential patterns, append missing critical patterns only
|
||||||
**If ignore file missing**: Create with full pattern set for detected technology
|
**If ignore file missing**: Create with full pattern set for detected technology
|
||||||
|
|
||||||
**Common Patterns by Technology** (from plan.md tech stack):
|
**Common Patterns by Technology** (from plan.md tech stack):
|
||||||
- **Node.js/JavaScript**: `node_modules/`, `dist/`, `build/`, `*.log`, `.env*`
|
- **Node.js/JavaScript**: `node_modules/`, `dist/`, `build/`, `*.log`, `.env*`
|
||||||
- **Python**: `__pycache__/`, `*.pyc`, `.venv/`, `venv/`, `dist/`, `*.egg-info/`
|
- **Python**: `__pycache__/`, `*.pyc`, `.venv/`, `venv/`, `dist/`, `*.egg-info/`
|
||||||
@@ -86,7 +89,7 @@ You **MUST** consider the user input before proceeding (if not empty).
|
|||||||
- **C++**: `build/`, `bin/`, `obj/`, `out/`, `*.o`, `*.so`, `*.a`, `*.exe`, `*.dll`, `.idea/`, `*.log`, `.env*`
|
- **C++**: `build/`, `bin/`, `obj/`, `out/`, `*.o`, `*.so`, `*.a`, `*.exe`, `*.dll`, `.idea/`, `*.log`, `.env*`
|
||||||
- **C**: `build/`, `bin/`, `obj/`, `out/`, `*.o`, `*.a`, `*.so`, `*.exe`, `Makefile`, `config.log`, `.idea/`, `*.log`, `.env*`
|
- **C**: `build/`, `bin/`, `obj/`, `out/`, `*.o`, `*.a`, `*.so`, `*.exe`, `Makefile`, `config.log`, `.idea/`, `*.log`, `.env*`
|
||||||
- **Universal**: `.DS_Store`, `Thumbs.db`, `*.tmp`, `*.swp`, `.vscode/`, `.idea/`
|
- **Universal**: `.DS_Store`, `Thumbs.db`, `*.tmp`, `*.swp`, `.vscode/`, `.idea/`
|
||||||
|
|
||||||
**Tool-Specific Patterns**:
|
**Tool-Specific Patterns**:
|
||||||
- **Docker**: `node_modules/`, `.git/`, `Dockerfile*`, `.dockerignore`, `*.log*`, `.env*`, `coverage/`
|
- **Docker**: `node_modules/`, `.git/`, `Dockerfile*`, `.dockerignore`, `*.log*`, `.env*`, `coverage/`
|
||||||
- **ESLint**: `node_modules/`, `dist/`, `build/`, `coverage/`, `*.min.js`
|
- **ESLint**: `node_modules/`, `dist/`, `build/`, `coverage/`, `*.min.js`
|
||||||
@@ -129,4 +132,3 @@ You **MUST** consider the user input before proceeding (if not empty).
|
|||||||
- Report final status with summary of completed work
|
- Report final status with summary of completed work
|
||||||
|
|
||||||
Note: This command assumes a complete task breakdown exists in tasks.md. If tasks are incomplete or missing, suggest running `/tasks` first to regenerate the task list.
|
Note: This command assumes a complete task breakdown exists in tasks.md. If tasks are incomplete or missing, suggest running `/tasks` first to regenerate the task list.
|
||||||
|
|
||||||
|
|||||||
@@ -43,7 +43,8 @@ You **MUST** consider the user input before proceeding (if not empty).
|
|||||||
- For each integration → patterns task
|
- For each integration → patterns task
|
||||||
|
|
||||||
2. **Generate and dispatch research agents**:
|
2. **Generate and dispatch research agents**:
|
||||||
```
|
|
||||||
|
```text
|
||||||
For each unknown in Technical Context:
|
For each unknown in Technical Context:
|
||||||
Task: "Research {unknown} for {feature context}"
|
Task: "Research {unknown} for {feature context}"
|
||||||
For each technology choice:
|
For each technology choice:
|
||||||
@@ -84,4 +85,3 @@ You **MUST** consider the user input before proceeding (if not empty).
|
|||||||
|
|
||||||
- Use absolute paths
|
- Use absolute paths
|
||||||
- ERROR on gate failures or unresolved clarifications
|
- ERROR on gate failures or unresolved clarifications
|
||||||
|
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ Given that feature description, do this:
|
|||||||
6. **Specification Quality Validation**: After writing the initial spec, validate it against quality criteria:
|
6. **Specification Quality Validation**: After writing the initial spec, validate it against quality criteria:
|
||||||
|
|
||||||
a. **Create Spec Quality Checklist**: Generate a checklist file at `FEATURE_DIR/checklists/requirements.md` using the checklist template structure with these validation items:
|
a. **Create Spec Quality Checklist**: Generate a checklist file at `FEATURE_DIR/checklists/requirements.md` using the checklist template structure with these validation items:
|
||||||
|
|
||||||
```markdown
|
```markdown
|
||||||
# Specification Quality Checklist: [FEATURE NAME]
|
# Specification Quality Checklist: [FEATURE NAME]
|
||||||
|
|
||||||
@@ -112,26 +112,26 @@ Given that feature description, do this:
|
|||||||
|
|
||||||
- Items marked incomplete require spec updates before `/speckit.clarify` or `/speckit.plan`
|
- Items marked incomplete require spec updates before `/speckit.clarify` or `/speckit.plan`
|
||||||
```
|
```
|
||||||
|
|
||||||
b. **Run Validation Check**: Review the spec against each checklist item:
|
b. **Run Validation Check**: Review the spec against each checklist item:
|
||||||
- For each item, determine if it passes or fails
|
- For each item, determine if it passes or fails
|
||||||
- Document specific issues found (quote relevant spec sections)
|
- Document specific issues found (quote relevant spec sections)
|
||||||
|
|
||||||
c. **Handle Validation Results**:
|
c. **Handle Validation Results**:
|
||||||
|
|
||||||
- **If all items pass**: Mark checklist complete and proceed to step 6
|
- **If all items pass**: Mark checklist complete and proceed to step 6
|
||||||
|
|
||||||
- **If items fail (excluding [NEEDS CLARIFICATION])**:
|
- **If items fail (excluding [NEEDS CLARIFICATION])**:
|
||||||
1. List the failing items and specific issues
|
1. List the failing items and specific issues
|
||||||
2. Update the spec to address each issue
|
2. Update the spec to address each issue
|
||||||
3. Re-run validation until all items pass (max 3 iterations)
|
3. Re-run validation until all items pass (max 3 iterations)
|
||||||
4. If still failing after 3 iterations, document remaining issues in checklist notes and warn user
|
4. If still failing after 3 iterations, document remaining issues in checklist notes and warn user
|
||||||
|
|
||||||
- **If [NEEDS CLARIFICATION] markers remain**:
|
- **If [NEEDS CLARIFICATION] markers remain**:
|
||||||
1. Extract all [NEEDS CLARIFICATION: ...] markers from the spec
|
1. Extract all [NEEDS CLARIFICATION: ...] markers from the spec
|
||||||
2. **LIMIT CHECK**: If more than 3 markers exist, keep only the 3 most critical (by scope/security/UX impact) and make informed guesses for the rest
|
2. **LIMIT CHECK**: If more than 3 markers exist, keep only the 3 most critical (by scope/security/UX impact) and make informed guesses for the rest
|
||||||
3. For each clarification needed (max 3), present options to user in this format:
|
3. For each clarification needed (max 3), present options to user in this format:
|
||||||
|
|
||||||
```markdown
|
```markdown
|
||||||
## Question [N]: [Topic]
|
## Question [N]: [Topic]
|
||||||
|
|
||||||
@@ -150,7 +150,7 @@ Given that feature description, do this:
|
|||||||
|
|
||||||
**Your choice**: _[Wait for user response]_
|
**Your choice**: _[Wait for user response]_
|
||||||
```
|
```
|
||||||
|
|
||||||
4. **CRITICAL - Table Formatting**: Ensure markdown tables are properly formatted:
|
4. **CRITICAL - Table Formatting**: Ensure markdown tables are properly formatted:
|
||||||
- Use consistent spacing with pipes aligned
|
- Use consistent spacing with pipes aligned
|
||||||
- Each cell should have spaces around content: `| Content |` not `|Content|`
|
- Each cell should have spaces around content: `| Content |` not `|Content|`
|
||||||
@@ -161,7 +161,7 @@ Given that feature description, do this:
|
|||||||
7. Wait for user to respond with their choices for all questions (e.g., "Q1: A, Q2: Custom - [details], Q3: B")
|
7. Wait for user to respond with their choices for all questions (e.g., "Q1: A, Q2: Custom - [details], Q3: B")
|
||||||
8. Update the spec by replacing each [NEEDS CLARIFICATION] marker with the user's selected or provided answer
|
8. Update the spec by replacing each [NEEDS CLARIFICATION] marker with the user's selected or provided answer
|
||||||
9. Re-run validation after all clarifications are resolved
|
9. Re-run validation after all clarifications are resolved
|
||||||
|
|
||||||
d. **Update Checklist**: After each validation iteration, update the checklist file with current pass/fail status
|
d. **Update Checklist**: After each validation iteration, update the checklist file with current pass/fail status
|
||||||
|
|
||||||
7. Report completion with branch name, spec file path, checklist results, and readiness for the next phase (`/speckit.clarify` or `/speckit.plan`).
|
7. Report completion with branch name, spec file path, checklist results, and readiness for the next phase (`/speckit.clarify` or `/speckit.plan`).
|
||||||
@@ -199,7 +199,7 @@ When creating this spec from a user prompt:
|
|||||||
- Feature scope and boundaries (include/exclude specific use cases)
|
- Feature scope and boundaries (include/exclude specific use cases)
|
||||||
- User types and permissions (if multiple conflicting interpretations possible)
|
- User types and permissions (if multiple conflicting interpretations possible)
|
||||||
- Security/compliance requirements (when legally/financially significant)
|
- Security/compliance requirements (when legally/financially significant)
|
||||||
|
|
||||||
**Examples of reasonable defaults** (don't ask about these):
|
**Examples of reasonable defaults** (don't ask about these):
|
||||||
|
|
||||||
- Data retention: Industry-standard practices for the domain
|
- Data retention: Industry-standard practices for the domain
|
||||||
@@ -230,4 +230,3 @@ Success criteria must be:
|
|||||||
- "Database can handle 1000 TPS" (implementation detail, use user-facing metric)
|
- "Database can handle 1000 TPS" (implementation detail, use user-facing metric)
|
||||||
- "React components render efficiently" (framework-specific)
|
- "React components render efficiently" (framework-specific)
|
||||||
- "Redis cache hit rate above 80%" (technology-specific)
|
- "Redis cache hit rate above 80%" (technology-specific)
|
||||||
|
|
||||||
|
|||||||
@@ -106,16 +106,16 @@ Every task MUST strictly follow this format:
|
|||||||
- Endpoints/UI needed for that story
|
- Endpoints/UI needed for that story
|
||||||
- If tests requested: Tests specific to that story
|
- If tests requested: Tests specific to that story
|
||||||
- Mark story dependencies (most stories should be independent)
|
- Mark story dependencies (most stories should be independent)
|
||||||
|
|
||||||
2. **From Contracts**:
|
2. **From Contracts**:
|
||||||
- Map each contract/endpoint → to the user story it serves
|
- Map each contract/endpoint → to the user story it serves
|
||||||
- If tests requested: Each contract → contract test task [P] before implementation in that story's phase
|
- If tests requested: Each contract → contract test task [P] before implementation in that story's phase
|
||||||
|
|
||||||
3. **From Data Model**:
|
3. **From Data Model**:
|
||||||
- Map each entity to the user story(ies) that need it
|
- Map each entity to the user story(ies) that need it
|
||||||
- If entity serves multiple stories: Put in earliest story or Setup phase
|
- If entity serves multiple stories: Put in earliest story or Setup phase
|
||||||
- Relationships → service layer tasks in appropriate story phase
|
- Relationships → service layer tasks in appropriate story phase
|
||||||
|
|
||||||
4. **From Setup/Infrastructure**:
|
4. **From Setup/Infrastructure**:
|
||||||
- Shared infrastructure → Setup phase (Phase 1)
|
- Shared infrastructure → Setup phase (Phase 1)
|
||||||
- Foundational/blocking tasks → Foundational phase (Phase 2)
|
- Foundational/blocking tasks → Foundational phase (Phase 2)
|
||||||
@@ -129,5 +129,3 @@ Every task MUST strictly follow this format:
|
|||||||
- Within each story: Tests (if requested) → Models → Services → Endpoints → Integration
|
- Within each story: Tests (if requested) → Models → Services → Endpoints → Integration
|
||||||
- Each phase should be a complete, independently testable increment
|
- Each phase should be a complete, independently testable increment
|
||||||
- **Final Phase**: Polish & Cross-Cutting Concerns
|
- **Final Phase**: Polish & Cross-Cutting Concerns
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -37,7 +37,7 @@
|
|||||||
|
|
||||||
### Documentation (this feature)
|
### Documentation (this feature)
|
||||||
|
|
||||||
```
|
```text
|
||||||
specs/[###-feature]/
|
specs/[###-feature]/
|
||||||
├── plan.md # This file (/speckit.plan command output)
|
├── plan.md # This file (/speckit.plan command output)
|
||||||
├── research.md # Phase 0 output (/speckit.plan command)
|
├── research.md # Phase 0 output (/speckit.plan command)
|
||||||
@@ -55,7 +55,7 @@ specs/[###-feature]/
|
|||||||
not include Option labels.
|
not include Option labels.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
```
|
```text
|
||||||
# [REMOVE IF UNUSED] Option 1: Single project (DEFAULT)
|
# [REMOVE IF UNUSED] Option 1: Single project (DEFAULT)
|
||||||
src/
|
src/
|
||||||
├── models/
|
├── models/
|
||||||
@@ -96,10 +96,9 @@ directories captured above]
|
|||||||
|
|
||||||
## Complexity Tracking
|
## Complexity Tracking
|
||||||
|
|
||||||
*Fill ONLY if Constitution Check has violations that must be justified*
|
> **Fill ONLY if Constitution Check has violations that must be justified**
|
||||||
|
|
||||||
| Violation | Why Needed | Simpler Alternative Rejected Because |
|
| Violation | Why Needed | Simpler Alternative Rejected Because |
|
||||||
|-----------|------------|-------------------------------------|
|
|-----------|------------|-------------------------------------|
|
||||||
| [e.g., 4th project] | [current need] | [why 3 projects insufficient] |
|
| [e.g., 4th project] | [current need] | [why 3 projects insufficient] |
|
||||||
| [e.g., Repository pattern] | [specific problem] | [why direct DB access insufficient] |
|
| [e.g., Repository pattern] | [specific problem] | [why direct DB access insufficient] |
|
||||||
|
|
||||||
|
|||||||
@@ -113,4 +113,3 @@
|
|||||||
- **SC-002**: [Measurable metric, e.g., "System handles 1000 concurrent users without degradation"]
|
- **SC-002**: [Measurable metric, e.g., "System handles 1000 concurrent users without degradation"]
|
||||||
- **SC-003**: [User satisfaction metric, e.g., "90% of users successfully complete primary task on first attempt"]
|
- **SC-003**: [User satisfaction metric, e.g., "90% of users successfully complete primary task on first attempt"]
|
||||||
- **SC-004**: [Business metric, e.g., "Reduce support tickets related to [X] by 50%"]
|
- **SC-004**: [Business metric, e.g., "Reduce support tickets related to [X] by 50%"]
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
---
|
---
|
||||||
|
|
||||||
description: "Task list template for feature implementation"
|
description: "Task list template for feature implementation"
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -12,11 +13,13 @@ description: "Task list template for feature implementation"
|
|||||||
**Organization**: Tasks are grouped by user story to enable independent implementation and testing of each story.
|
**Organization**: Tasks are grouped by user story to enable independent implementation and testing of each story.
|
||||||
|
|
||||||
## Format: `[ID] [P?] [Story] Description`
|
## Format: `[ID] [P?] [Story] Description`
|
||||||
|
|
||||||
- **[P]**: Can run in parallel (different files, no dependencies)
|
- **[P]**: Can run in parallel (different files, no dependencies)
|
||||||
- **[Story]**: Which user story this task belongs to (e.g., US1, US2, US3)
|
- **[Story]**: Which user story this task belongs to (e.g., US1, US2, US3)
|
||||||
- Include exact file paths in descriptions
|
- Include exact file paths in descriptions
|
||||||
|
|
||||||
## Path Conventions
|
## Path Conventions
|
||||||
|
|
||||||
- **Single project**: `src/`, `tests/` at repository root
|
- **Single project**: `src/`, `tests/` at repository root
|
||||||
- **Web app**: `backend/src/`, `frontend/src/`
|
- **Web app**: `backend/src/`, `frontend/src/`
|
||||||
- **Mobile**: `api/src/`, `ios/src/` or `android/src/`
|
- **Mobile**: `api/src/`, `ios/src/` or `android/src/`
|
||||||
@@ -78,7 +81,7 @@ Examples of foundational tasks (adjust based on your project):
|
|||||||
|
|
||||||
### Tests for User Story 1 (OPTIONAL - only if tests requested) ⚠️
|
### Tests for User Story 1 (OPTIONAL - only if tests requested) ⚠️
|
||||||
|
|
||||||
**NOTE: Write these tests FIRST, ensure they FAIL before implementation**
|
> **NOTE: Write these tests FIRST, ensure they FAIL before implementation**
|
||||||
|
|
||||||
- [ ] T010 [P] [US1] Contract test for [endpoint] in tests/contract/test_[name].py
|
- [ ] T010 [P] [US1] Contract test for [endpoint] in tests/contract/test_[name].py
|
||||||
- [ ] T011 [P] [US1] Integration test for [user journey] in tests/integration/test_[name].py
|
- [ ] T011 [P] [US1] Integration test for [user journey] in tests/integration/test_[name].py
|
||||||
@@ -246,6 +249,3 @@ With multiple developers:
|
|||||||
- Commit after each task or logical group
|
- Commit after each task or logical group
|
||||||
- Stop at any checkpoint to validate story independently
|
- Stop at any checkpoint to validate story independently
|
||||||
- Avoid: vague tasks, same file conflicts, cross-story dependencies that break independence
|
- Avoid: vague tasks, same file conflicts, cross-story dependencies that break independence
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user