Compare commits
13 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1c0e7d14d5 | ||
|
|
55555eb39e | ||
|
|
6f3e450cd8 | ||
|
|
df3e4930cc | ||
|
|
f3d55cff84 | ||
|
|
c6051a0b8a | ||
|
|
04cb5f00d4 | ||
|
|
e924a73625 | ||
|
|
e642acaea4 | ||
|
|
f1ddf33ac4 | ||
|
|
f1063321c6 | ||
|
|
62f20c601c | ||
|
|
26645103a6 |
@@ -47,12 +47,40 @@ When working on spec-kit:
|
|||||||
|
|
||||||
## AI contributions in Spec Kit
|
## AI contributions in Spec Kit
|
||||||
|
|
||||||
|
> [!IMPORTANT]
|
||||||
|
>
|
||||||
|
> If you are using **any kind of AI assistance** to contribute to Spec Kit,
|
||||||
|
> it must be disclosed in the pull request or issue.
|
||||||
|
|
||||||
We welcome and encourage the use of AI tools to help improve Spec Kit! Many valuable contributions have been enhanced with AI assistance for code generation, issue detection, and feature definition.
|
We welcome and encourage the use of AI tools to help improve Spec Kit! Many valuable contributions have been enhanced with AI assistance for code generation, issue detection, and feature definition.
|
||||||
|
|
||||||
|
That being said, if you are using any kind of AI assistance (e.g., agents, ChatGPT) while contributing to Spec Kit,
|
||||||
|
**this must be disclosed in the pull request or issue**, along with the extent to which AI assistance was used (e.g., documentation comments vs. code generation).
|
||||||
|
|
||||||
|
If your PR responses or comments are being generated by an AI, disclose that as well.
|
||||||
|
|
||||||
|
As an exception, trivial spacing or typo fixes don't need to be disclosed, so long as the changes are limited to small parts of the code or short phrases.
|
||||||
|
|
||||||
|
An example disclosure:
|
||||||
|
|
||||||
|
> This PR was written primarily by GitHub Copilot.
|
||||||
|
|
||||||
|
Or a more detailed disclosure:
|
||||||
|
|
||||||
|
> I consulted ChatGPT to understand the codebase but the solution
|
||||||
|
> was fully authored manually by myself.
|
||||||
|
|
||||||
|
Failure to disclose this is first and foremost rude to the human operators on the other end of the pull request, but it also makes it difficult to
|
||||||
|
determine how much scrutiny to apply to the contribution.
|
||||||
|
|
||||||
|
In a perfect world, AI assistance would produce equal or higher quality work than any human. That isn't the world we live in today, and in most cases
|
||||||
|
where human supervision or expertise is not in the loop, it's generating code that cannot be reasonably maintained or evolved.
|
||||||
|
|
||||||
### What we're looking for
|
### What we're looking for
|
||||||
|
|
||||||
When submitting AI-assisted contributions, please ensure they include:
|
When submitting AI-assisted contributions, please ensure they include:
|
||||||
|
|
||||||
|
- **Clear disclosure of AI use** - You are transparent about AI use and degree to which you're using it for the contribution
|
||||||
- **Human understanding and testing** - You've personally tested the changes and understand what they do
|
- **Human understanding and testing** - You've personally tested the changes and understand what they do
|
||||||
- **Clear rationale** - You can explain why the change is needed and how it fits within Spec Kit's goals
|
- **Clear rationale** - You can explain why the change is needed and how it fits within Spec Kit's goals
|
||||||
- **Concrete evidence** - Include test cases, scenarios, or examples that demonstrate the improvement
|
- **Concrete evidence** - Include test cases, scenarios, or examples that demonstrate the improvement
|
||||||
@@ -72,6 +100,8 @@ The key is demonstrating that you understand and have validated your proposed ch
|
|||||||
|
|
||||||
Contributors who consistently submit low-effort AI-generated changes may be restricted from further contributions at the maintainers' discretion.
|
Contributors who consistently submit low-effort AI-generated changes may be restricted from further contributions at the maintainers' discretion.
|
||||||
|
|
||||||
|
Please be respectful to maintainers and disclose AI assistance.
|
||||||
|
|
||||||
## Resources
|
## Resources
|
||||||
|
|
||||||
- [Spec-Driven Development Methodology](./spec-driven.md)
|
- [Spec-Driven Development Methodology](./spec-driven.md)
|
||||||
|
|||||||
@@ -377,8 +377,7 @@ At this stage, your project folder contents should resemble the following:
|
|||||||
|
|
||||||
```text
|
```text
|
||||||
├── memory
|
├── memory
|
||||||
│ ├── constitution.md
|
│ └── constitution.md
|
||||||
│ └── constitution_update_checklist.md
|
|
||||||
├── scripts
|
├── scripts
|
||||||
│ ├── check-prerequisites.sh
|
│ ├── check-prerequisites.sh
|
||||||
│ ├── common.sh
|
│ ├── common.sh
|
||||||
@@ -438,8 +437,7 @@ The output of this step will include a number of implementation detail documents
|
|||||||
.
|
.
|
||||||
├── CLAUDE.md
|
├── CLAUDE.md
|
||||||
├── memory
|
├── memory
|
||||||
│ ├── constitution.md
|
│ └── constitution.md
|
||||||
│ └── constitution_update_checklist.md
|
|
||||||
├── scripts
|
├── scripts
|
||||||
│ ├── check-prerequisites.sh
|
│ ├── check-prerequisites.sh
|
||||||
│ ├── common.sh
|
│ ├── common.sh
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ fi
|
|||||||
FEATURE_DIR="$SPECS_DIR/$BRANCH_NAME"
|
FEATURE_DIR="$SPECS_DIR/$BRANCH_NAME"
|
||||||
mkdir -p "$FEATURE_DIR"
|
mkdir -p "$FEATURE_DIR"
|
||||||
|
|
||||||
TEMPLATE="$REPO_ROOT/templates/spec-template.md"
|
TEMPLATE="$REPO_ROOT/.specify/templates/spec-template.md"
|
||||||
SPEC_FILE="$FEATURE_DIR/spec.md"
|
SPEC_FILE="$FEATURE_DIR/spec.md"
|
||||||
if [ -f "$TEMPLATE" ]; then cp "$TEMPLATE" "$SPEC_FILE"; else touch "$SPEC_FILE"; fi
|
if [ -f "$TEMPLATE" ]; then cp "$TEMPLATE" "$SPEC_FILE"; else touch "$SPEC_FILE"; fi
|
||||||
|
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ if ($hasGit) {
|
|||||||
$featureDir = Join-Path $specsDir $branchName
|
$featureDir = Join-Path $specsDir $branchName
|
||||||
New-Item -ItemType Directory -Path $featureDir -Force | Out-Null
|
New-Item -ItemType Directory -Path $featureDir -Force | Out-Null
|
||||||
|
|
||||||
$template = Join-Path $repoRoot 'templates/spec-template.md'
|
$template = Join-Path $repoRoot '.specify/templates/spec-template.md'
|
||||||
$specFile = Join-Path $featureDir 'spec.md'
|
$specFile = Join-Path $featureDir 'spec.md'
|
||||||
if (Test-Path $template) {
|
if (Test-Path $template) {
|
||||||
Copy-Item $template $specFile -Force
|
Copy-Item $template $specFile -Force
|
||||||
|
|||||||
@@ -1058,18 +1058,27 @@ def init(
|
|||||||
step_num += 1
|
step_num += 1
|
||||||
|
|
||||||
steps_lines.append(f"{step_num}. Start using slash commands with your AI agent:")
|
steps_lines.append(f"{step_num}. Start using slash commands with your AI agent:")
|
||||||
|
|
||||||
steps_lines.append(" 2.1 [cyan]/constitution[/] - Establish project principles")
|
steps_lines.append(" 2.1 [cyan]/constitution[/] - Establish project principles")
|
||||||
steps_lines.append(" 2.2 [cyan]/specify[/] - Create specifications")
|
steps_lines.append(" 2.2 [cyan]/specify[/] - Create baseline specification")
|
||||||
steps_lines.append(" 2.3 [cyan]/clarify[/] - Clarify and de-risk specification (run before [cyan]/plan[/cyan])")
|
steps_lines.append(" 2.3 [cyan]/plan[/] - Create implementation plan")
|
||||||
steps_lines.append(" 2.4 [cyan]/plan[/] - Create implementation plans")
|
steps_lines.append(" 2.4 [cyan]/tasks[/] - Generate actionable tasks")
|
||||||
steps_lines.append(" 2.5 [cyan]/tasks[/] - Generate actionable tasks")
|
steps_lines.append(" 2.5 [cyan]/implement[/] - Execute implementation")
|
||||||
steps_lines.append(" 2.6 [cyan]/analyze[/] - Validate alignment & surface inconsistencies (read-only)")
|
|
||||||
steps_lines.append(" 2.7 [cyan]/implement[/] - Execute implementation")
|
|
||||||
|
|
||||||
steps_panel = Panel("\n".join(steps_lines), title="Next Steps", border_style="cyan", padding=(1,2))
|
steps_panel = Panel("\n".join(steps_lines), title="Next Steps", border_style="cyan", padding=(1,2))
|
||||||
console.print()
|
console.print()
|
||||||
console.print(steps_panel)
|
console.print(steps_panel)
|
||||||
|
|
||||||
|
enhancement_lines = [
|
||||||
|
"Optional commands that you can use for your specs (improve quality & confidence)[/bright_black]",
|
||||||
|
"",
|
||||||
|
f"○ [cyan]/clarify[/] [bright_black](optional)[/bright_black] - Ask structured questions to de-risk ambiguous areas before planning (run before [cyan]/plan[/] if used)",
|
||||||
|
f"○ [cyan]/analyze[/] [bright_black](optional)[/bright_black] - Cross-artifact consistency & alignment report (after [cyan]/tasks[/], before [cyan]/implement[/])"
|
||||||
|
]
|
||||||
|
enhancements_panel = Panel("\n".join(enhancement_lines), title="Enhancement Commands", border_style="cyan", padding=(1,2))
|
||||||
|
console.print()
|
||||||
|
console.print(enhancements_panel)
|
||||||
|
|
||||||
if selected_ai == "codex":
|
if selected_ai == "codex":
|
||||||
warning_text = """[bold yellow]Important Note:[/bold yellow]
|
warning_text = """[bold yellow]Important Note:[/bold yellow]
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ scripts:
|
|||||||
1. Load feature spec from Input path
|
1. Load feature spec from Input path
|
||||||
→ If not found: ERROR "No feature spec at {path}"
|
→ If not found: ERROR "No feature spec at {path}"
|
||||||
2. Fill Technical Context (scan for NEEDS CLARIFICATION)
|
2. Fill Technical Context (scan for NEEDS CLARIFICATION)
|
||||||
→ Detect Project Type from context (web=frontend+backend, mobile=app+api)
|
→ Detect Project Type from file system structure or context (web=frontend+backend, mobile=app+api)
|
||||||
→ Set Structure Decision based on project type
|
→ Set Structure Decision based on project type
|
||||||
3. Fill the Constitution Check section based on the content of the constitution document.
|
3. Fill the Constitution Check section based on the content of the constitution document.
|
||||||
4. Evaluate Constitution Check section below
|
4. Evaluate Constitution Check section below
|
||||||
@@ -69,8 +69,14 @@ specs/[###-feature]/
|
|||||||
```
|
```
|
||||||
|
|
||||||
### Source Code (repository root)
|
### Source Code (repository root)
|
||||||
|
<!--
|
||||||
|
ACTION REQUIRED: Replace the placeholder tree below with the concrete layout
|
||||||
|
for this feature. Delete unused options and expand the chosen structure with
|
||||||
|
real paths (e.g., apps/admin, packages/something). The delivered plan must
|
||||||
|
not include Option labels.
|
||||||
|
-->
|
||||||
```
|
```
|
||||||
# Option 1: Single project (DEFAULT)
|
# [REMOVE IF UNUSED] Option 1: Single project (DEFAULT)
|
||||||
src/
|
src/
|
||||||
├── models/
|
├── models/
|
||||||
├── services/
|
├── services/
|
||||||
@@ -82,7 +88,7 @@ tests/
|
|||||||
├── integration/
|
├── integration/
|
||||||
└── unit/
|
└── unit/
|
||||||
|
|
||||||
# Option 2: Web application (when "frontend" + "backend" detected)
|
# [REMOVE IF UNUSED] Option 2: Web application (when "frontend" + "backend" detected)
|
||||||
backend/
|
backend/
|
||||||
├── src/
|
├── src/
|
||||||
│ ├── models/
|
│ ├── models/
|
||||||
@@ -97,15 +103,16 @@ frontend/
|
|||||||
│ └── services/
|
│ └── services/
|
||||||
└── tests/
|
└── tests/
|
||||||
|
|
||||||
# Option 3: Mobile + API (when "iOS/Android" detected)
|
# [REMOVE IF UNUSED] Option 3: Mobile + API (when "iOS/Android" detected)
|
||||||
api/
|
api/
|
||||||
└── [same as backend above]
|
└── [same as backend above]
|
||||||
|
|
||||||
ios/ or android/
|
ios/ or android/
|
||||||
└── [platform-specific structure]
|
└── [platform-specific structure: feature modules, UI flows, platform tests]
|
||||||
```
|
```
|
||||||
|
|
||||||
**Structure Decision**: [DEFAULT to Option 1 unless Technical Context indicates web/mobile app]
|
**Structure Decision**: [Document the selected structure and reference the real
|
||||||
|
directories captured above]
|
||||||
|
|
||||||
## Phase 0: Outline & Research
|
## Phase 0: Outline & Research
|
||||||
1. **Extract unknowns from Technical Context** above:
|
1. **Extract unknowns from Technical Context** above:
|
||||||
|
|||||||
Reference in New Issue
Block a user