```
The typical sequence is:
- /speckit.specify → creates spec.md
- /speckit.plan → creates plan.md
- /speckit.tasks → creates tasks.md
- /speckit.analyze → validates all three (you are here)
- /speckit.implement → executes tasks.md
- Commit & PR
```
```mermaid
flowchart TD
%% === 樣式定義 ===
classDef terminal fill:#333,stroke:#000,stroke-width:2px,color:#fff,rx:5,ry:5;
classDef agent fill:#e1f5fe,stroke:#0288d1,stroke-width:2px,rx:10,ry:10,color:#01579b,font-weight:bold;
classDef artifact fill:#fff9c4,stroke:#fbc02d,stroke-width:1px,rx:0,ry:0,color:#3e2723;
classDef git fill:#f3e5f5,stroke:#8e24aa,stroke-width:2px,rx:5,ry:5,color:#4a148c;
classDef validate fill:#ffebee,stroke:#c62828,stroke-width:2px,rx:5,ry:5,color:#b71c1c;
%% === 1. 初始化階段 ===
subgraph Setup ["🛠️ 初始化 (Setup)"]
direction TB
CMD1["$ specify init"]:::terminal
AGENT_CONST("/speckit.constitution"):::agent
DOC_CONST["產出: Constitution<br/>(確立開發原則)"]:::artifact
CMD1 --> AGENT_CONST
AGENT_CONST --- DOC_CONST
end
%% === 2. 開發循環 ===
subgraph Cycle ["🔄 開發循環 (Dev Loop)"]
direction TB
%% Step 1: Specify
AGENT_SPEC("1\. /speckit.specify"):::agent
DOC_SPEC["產出: Spec.md<br/>(規格文檔)"]:::artifact
AGENT_SPEC --- DOC_SPEC
%% Step 2: Plan
AGENT_PLAN("2\. /speckit.plan"):::agent
DOC_PLAN["產出: Plan.md<br/>(實作計畫)"]:::artifact
AGENT_PLAN --- DOC_PLAN
%% Step 3: Tasks
AGENT_TASK("3\. /speckit.tasks"):::agent
DOC_TASK["產出: Tasks.md<br/>(任務清單)"]:::artifact
AGENT_TASK --- DOC_TASK
%% Step 4: Analyze (新增的驗證步驟)
AGENT_ANAL("4\. /speckit.analyze"):::agent
DOC_ANAL["🔍 驗證與檢查<br/>(Validates Spec/Plan/Tasks)"]:::validate
AGENT_ANAL --- DOC_ANAL
%% Step 5: Implement
AGENT_IMPL("5\. /speckit.implement"):::agent
CODE["產出: Code & Tests<br/>(執行 Tasks.md)"]:::artifact
AGENT_IMPL --- CODE
%% Step 6: Git Ops
CMD_PR["6\. Commit & PR"]:::git
MERGE["合併至 Main 分支"]:::git
%% 連接流程
DOC_SPEC --> AGENT_PLAN
DOC_PLAN --> AGENT_TASK
DOC_TASK --> AGENT_ANAL
DOC_ANAL --> AGENT_IMPL
CODE --> CMD_PR
CMD_PR --> MERGE
%% 循環連接
MERGE -. "下一個功能" .-> AGENT_SPEC
end
%% 連接兩大區塊
DOC_CONST ===> AGENT_SPEC
```
首先要參考<a href="https://github.com/github/spec-kit">官方文件</a>去安裝 specify-cli 這步驟太通用了,所以這邊省略輸出。
```bash
$ uv tool install specify-cli --from git+https://github.com/github/spec-kit.git
```
然後就可以檢查環境
```bash
$ specify check
███████╗██████╗ ███████╗ ██████╗██╗███████╗██╗ ██╗
██╔════╝██╔══██╗██╔════╝██╔════╝██║██╔════╝╚██╗ ██╔╝
███████╗██████╔╝█████╗ ██║ ██║█████╗ ╚████╔╝
╚════██║██╔═══╝ ██╔══╝ ██║ ██║██╔══╝ ╚██╔╝
███████║██║ ███████╗╚██████╗██║██║ ██║
╚══════╝╚═╝ ╚══════╝ ╚═════╝╚═╝╚═╝ ╚═╝
GitHub Spec Kit - Spec-Driven Development Toolkit
Checking for installed tools...
Check Available Tools
├── ● Git version control (available)
├── ○ GitHub Copilot (IDE-based, no CLI check)
├── ● Claude Code (not found)
├── ● Gemini CLI (available)
├── ○ Cursor (IDE-based, no CLI check)
├── ● Qwen Code (not found)
├── ● opencode (available)
├── ● Codex CLI (not found)
├── ○ Windsurf (IDE-based, no CLI check)
├── ○ Kilo Code (IDE-based, no CLI check)
├── ● Auggie CLI (not found)
├── ● CodeBuddy (not found)
├── ● Qoder CLI (not found)
├── ○ Roo Code (IDE-based, no CLI check)
├── ● Amazon Q Developer CLI (not found)
├── ● Amp (not found)
├── ● SHAI (not found)
├── ○ IBM Bob (IDE-based, no CLI check)
├── ● Visual Studio Code (available)
└── ● Visual Studio Code Insiders (not found)
Specify CLI is ready to use!
```
然後在現有專案上面執行 `specify init` 初始化,這邊使用的是 copilot
```plain
$ specify init --here --ai copilot
███████╗██████╗ ███████╗ ██████╗██╗███████╗██╗ ██╗
██╔════╝██╔══██╗██╔════╝██╔════╝██║██╔════╝╚██╗ ██╔╝
███████╗██████╔╝█████╗ ██║ ██║█████╗ ╚████╔╝
╚════██║██╔═══╝ ██╔══╝ ██║ ██║██╔══╝ ╚██╔╝
███████║██║ ███████╗╚██████╗██║██║ ██║
╚══════╝╚═╝ ╚══════╝ ╚═════╝╚═╝╚═╝ ╚═╝
GitHub Spec Kit - Spec-Driven Development Toolkit
Warning: Current directory is not empty (17 items)
Template files will be merged with existing content and may overwrite existing files
Do you want to continue? [y/N]: y
╭──────────────────────────────────────────────────────────────────────────────────╮
│ │
│ Specify Project Setup │
│ │
│ Project concourse-ci-machine │
│ Working Path /home/sylee/work/concourse-ci-machine │
│ │
╰──────────────────────────────────────────────────────────────────────────────────╯
Selected AI assistant: copilot
Selected script type: sh
Initialize Specify Project
├── ● Check required tools (ok)
├── ● Select AI assistant (copilot)
├── ● Select script type (sh)
├── ● Fetch latest release (release v0.0.90 (59,640 bytes))
├── ● Download template (spec-kit-template-copilot-sh-v0.0.90.zip)
├── ● Extract template
├── ● Archive contents (39 entries)
├── ● Extraction summary (temp 3 items)
├── ● Ensure scripts executable (5 updated)
├── ● Cleanup
├── ● Initialize git repository (existing repo detected)
└── ● Finalize (project ready)
Project ready.
╭───────────────────────────── Agent Folder Security ──────────────────────────────╮
│ │
│ Some agents may store credentials, auth tokens, or other identifying and │
│ private artifacts in the agent folder within your project. │
│ Consider adding .github/ (or parts of it) to .gitignore to prevent accidental │
│ credential leakage. │
│ │
╰──────────────────────────────────────────────────────────────────────────────────╯
╭─────────────────────────────────── Next Steps ───────────────────────────────────╮
│ │
│ 1. You're already in the project directory! │
│ 2. Start using slash commands with your AI agent: │
│ 2.1 /speckit.constitution - Establish project principles │
│ 2.2 /speckit.specify - Create baseline specification │
│ 2.3 /speckit.plan - Create implementation plan │
│ 2.4 /speckit.tasks - Generate actionable tasks │
│ 2.5 /speckit.implement - Execute implementation │
│ │
╰──────────────────────────────────────────────────────────────────────────────────╯
╭────────────────────────────── Enhancement Commands ──────────────────────────────╮
│ │
│ Optional commands that you can use for your specs (improve quality & │
│ confidence) │
│ │
│ ○ /speckit.clarify (optional) - Ask structured questions to de-risk ambiguous │
│ areas before planning (run before /speckit.plan if used) │
│ ○ /speckit.analyze (optional) - Cross-artifact consistency & alignment report │
│ (after /speckit.tasks, before /speckit.implement) │
│ ○ /speckit.checklist (optional) - Generate quality checklists to validate │
│ requirements completeness, clarity, and consistency (after /speckit.plan) │
│ │
╰──────────────────────────────────────────────────────────────────────────────────╯
```
然後我就可以在 GitHub Copilot CLI 裡面的 /agent 裡找到 speckit.constitution 這個 agent 使用。
```bash
$ copilot
Welcome to GitHub Copilot CLI
Version 0.0.377 · Commit 4a0b36b
Copilot can write, test and debug code right from your terminal. Describe a task to get started or enter ? for help. Copilot uses AI, check for mistakes.
● Logged in as user: fourdollars
● Connected to GitHub MCP Server
Select Custom Agent
1. Default (current)
2. speckit.analyze
3. speckit.checklist
4. speckit.clarify
❯ 5. speckit.constitution
6. speckit.implement
7. speckit.plan
8. speckit.specify
9. speckit.tasks
10. speckit.taskstoissues
11. Cancel (Esc)
Confirm with number keys or ↑↓ keys and Enter, Cancel with Esc
```
選擇了 speckit.constitution 後,輸入 prompt
```bash
# copilot
Welcome to GitHub Copilot CLI
Version 0.0.377 · Commit 4a0b36b
Copilot can write, test and debug code right from your terminal. Describe a task to get started or enter ? for help. Copilot uses AI, check for mistakes.
● Logged in as user: fourdollars
● Connected to GitHub MCP Server
● Selected custom agent: speckit.constitution
~/work/concourse-ci-machine[⎇ main*] claude-sonnet-4.5 (1x) speckit.constitution
─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
> Create principles focused on code quality, testing standards, user experience consistency, and performance requirements
─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Ctrl+c Exit · Ctrl+r Expand recent
```
過程中它會一直產出 spec 文件要你確認,如果有不同的意見可以提出來給 AI 修改,就一直確認就好了,或是選擇自動確認也可以,最後出現類似這樣的訊息就是準備好了。
```
● Perfect! The constitution has been successfully created and all templates have
been updated. Let me provide a final summary to the user:
Constitution Update Complete ✅
I've successfully created the Concourse CI Machine Charm Constitution v1.0.0
with four core principles focused on your requirements:
📋 Established Principles
I. Code Quality Standards
- PEP 8 compliance, type hints, focused functions
- Juju secrets API for sensitive data (no hardcoding)
- Proper error handling and configuration validation
- Production-ready, maintainable code
II. Testing Discipline
- Integration tests for charm lifecycle events & relations
- Unit tests for configuration and state transitions
- Isolated test environments with clean setup/teardown
- Zero tolerance for ignored test failures
III. User Experience Consistency
- Clear, actionable status messages
- Dynamic configuration application
- Juju conventions & operator ergonomics
- Auto-detection over manual configuration
IV. Performance Requirements
- Installation: <10 minutes
- Config changes: <30 seconds
- Worker scaling: <5 minutes
- Key distribution: <60 seconds
- Status updates: <10 seconds
✅ Template Alignment
All dependent templates have been updated:
- plan-template.md: Constitution Check gates added
- spec-template.md: Success Criteria aligned with performance requirements
- tasks-template.md: Test structure references Testing Discipline
- checklist-template.md: Constitution compliance notes added
💾 Suggested Commit
docs: establish constitution v1.0.0 (code quality, testing, UX, performance)
The constitution is now ready for use in code reviews, planning, and governance!
~/work/concourse-ci-machine[⎇ main*] claude-sonnet-4.5 (1x) speckit.constitution
──────────────────────────────────────────────────────────────────────────────────
> Enter @ to mention files or / for commands
──────────────────────────────────────────────────────────────────────────────────
Ctrl+c Exit · Ctrl+r Expand recent Remaining requests: 0%
```
這個階段會產生一大坨檔案,隨便產生給 vscode 使用的設定檔。
```bash
# git status
On branch main
Your branch is up to date with 'origin/main'.
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: .github/agents/speckit.analyze.agent.md
new file: .github/agents/speckit.checklist.agent.md
new file: .github/agents/speckit.clarify.agent.md
new file: .github/agents/speckit.constitution.agent.md
new file: .github/agents/speckit.implement.agent.md
new file: .github/agents/speckit.plan.agent.md
new file: .github/agents/speckit.specify.agent.md
new file: .github/agents/speckit.tasks.agent.md
new file: .github/agents/speckit.taskstoissues.agent.md
new file: .github/prompts/speckit.analyze.prompt.md
new file: .github/prompts/speckit.checklist.prompt.md
new file: .github/prompts/speckit.clarify.prompt.md
new file: .github/prompts/speckit.constitution.prompt.md
new file: .github/prompts/speckit.implement.prompt.md
new file: .github/prompts/speckit.plan.prompt.md
new file: .github/prompts/speckit.specify.prompt.md
new file: .github/prompts/speckit.tasks.prompt.md
new file: .github/prompts/speckit.taskstoissues.prompt.md
new file: .specify/memory/constitution.md
new file: .specify/scripts/bash/check-prerequisites.sh
new file: .specify/scripts/bash/common.sh
new file: .specify/scripts/bash/create-new-feature.sh
new file: .specify/scripts/bash/setup-plan.sh
new file: .specify/scripts/bash/update-agent-context.sh
new file: .specify/templates/agent-file-template.md
new file: .specify/templates/checklist-template.md
new file: .specify/templates/plan-template.md
new file: .specify/templates/spec-template.md
new file: .specify/templates/tasks-template.md
new file: .vscode/settings.json
# cat .vscode/settings.json
{
"chat.promptFilesRecommendations": {
"speckit.constitution": true,
"speckit.specify": true,
"speckit.plan": true,
"speckit.tasks": true,
"speckit.implement": true
},
"chat.tools.terminal.autoApprove": {
".specify/scripts/bash/": true,
".specify/scripts/powershell/": true
}
}
```
之後還是可以使用 speckit.constitution 修改專案憲法,不過先跳過這步驟,開始使用 speckit.specify 定義一個 spec 要它實作。
```
● Selected custom agent: speckit.specify
> Reuse the same concourse-data storage for all Concourse CI units to reduce the
duplicated binary downloads and minimize disk space usage.
● I'll create a specification for this feature to reuse concourse-data storage
across Concourse CI units. Let me start by generating a short name and checking
for existing branches.
○ Fetch all remote branches
# cd /home/sylee/work/concourse-ci-machine && git fetch --all --prune
╭────────────────────────────────────────────────────────────────────────────────╮
│ Fetch all remote branches │
│ │
│ ╭────────────────────────────────────────────────────────────────────────────╮ │
│ │ cd /home/sylee/work/concourse-ci-machine && git fetch --all --prune │ │
│ ╰────────────────────────────────────────────────────────────────────────────╯ │
│ │
│ Do you want to run this command? │
│ │
│ ❯ 1. Yes │
│ 2. Yes, and approve `git fetch` for the rest of the running session │
│ 3. No, and tell Copilot what to do differently (Esc) │
│ │
│ Confirm with number keys or ↑↓ keys and Enter, Cancel with Esc │
╰────────────────────────────────────────────────────────────────────────────────╯
```
中間步驟跳過,最後會來到一個指令要產生了 git feature branch 準備用來實作。
```
○ Create new feature branch and spec
# cd /home/sylee/work/concourse-ci-machine && bash
.specify/scripts/bash/create-new-feature.sh --json --number 1 --short-name
"shared-storage" "Reuse the same concourse-data storage for all Concourse CI
units to reduce the duplicated binary downloads and minimize disk space usage."
╭────────────────────────────────────────────────────────────────────────────────╮
│ Create new feature branch and spec │
│ │
│ ╭────────────────────────────────────────────────────────────────────────────╮ │
│ │ cd /home/sylee/work/concourse-ci-machine && bash │ │
│ │ .specify/scripts/bash/create-new-feature.sh --json --number 1 --short-name │ │
│ │ "shared-storage" "Reuse the same concourse-data storage for all Concourse │ │
│ │ CI units to reduce the duplicated binary downloads and minimize disk │ │
│ │ space usage." │ │
│ ╰────────────────────────────────────────────────────────────────────────────╯ │
│ │
│ Do you want to run this command? │
│ │
│ ❯ 1. Yes │
│ 2. Yes, and approve `bash` for the rest of the running session │
│ 3. No, and tell Copilot what to do differently (Esc) │
│ │
│ Confirm with number keys or ↑↓ keys and Enter, Cancel with Esc │
╰────────────────────────────────────────────────────────────────────────────────╯
```
然後就讓它自己跑一下,中間會確認一下文件的產出,看看有沒有要請它改進的地方,最後會變成以下這樣。
```
● Perfect! Now let me create a summary:
✓ Display commit summary
$ cat << 'EOF'
╔══════════════════════════════════════════════════════════════════════════╗
║ GIT COMMIT SUCCESSFULLY CREATED ║
╚══════════════════════════════════════════════════════════════════════════╝...
└ 274 lines...
● Comprehensive Git Commit Created Successfully! ✅
I've created and committed the feature specification for shared storage across
Concourse CI units.
Commit Details
Hash: 37a039bb42fb4b8c8515b952a2c591bee85d506f
Branch: 001-shared-storage
Files: 2 files, 175 insertions
What Was Committed
- Feature Specification (specs/001-shared-storage/spec.md)
- 3 prioritized user stories with acceptance criteria
- 10 functional requirements covering storage sharing, optimization, and
concurrency
- 5 measurable success criteria
- 5 edge cases
- Clear assumptions and scope boundaries
- Quality Checklist (specs/001-shared-storage/checklists/requirements.md)
- All 16 validation items passed
- Ready for planning phase
Feature Benefits (Documented in Commit)
Disk Space: 60-65% reduction (1.15x vs 3x for multi-unit)
Bandwidth: (N-1)/N savings on downloads
Upgrade Speed: ~67% faster for 3+ unit clusters
Reliability: 99% concurrent operation success target
Next Steps
The specification is committed and ready for the planning phase!
Run: /speckit.plan to generate the implementation plan
~/work/concourse-ci-mach[⎇ claude-sonnet-4.5 ●Context 81%
ne 001-shared-storage] (1x) full
──────────────────────────────────────────────────────────────────────────────────
> Enter @ to mention files or / for commands
──────────────────────────────────────────────────────────────────────────────────
Ctrl+c Exit · Ctrl+r Expand recent Remaining requests: 0%
```
然後可以開始使用 speckit.plan 輸入 proceed 請它開始制定計畫
```
● Selected custom agent: speckit.plan
> proceed
● I'll proceed with generating the implementation plan for the shared storage
feature. Let me start by running the setup script.
○ Run setup-plan script
# cd /home/sylee/work/concourse-ci-machine && bash
.specify/scripts/bash/setup-plan.sh --json
╭────────────────────────────────────────────────────────────────────────────────╮
│ Run setup-plan script │
│ │
│ ╭────────────────────────────────────────────────────────────────────────────╮ │
│ │ cd /home/sylee/work/concourse-ci-machine && bash │ │
│ │ .specify/scripts/bash/setup-plan.sh --json │ │
│ ╰────────────────────────────────────────────────────────────────────────────╯ │
│ │
│ Do you want to run this command? │
│ │
│ ❯ 1. Yes │
│ 2. Yes, and approve `bash` for the rest of the running session │
│ 3. No, and tell Copilot what to do differently (Esc) │
│ │
│ Confirm with number keys or ↑↓ keys and Enter, Cancel with Esc │
╰────────────────────────────────────────────────────────────────────────────────╯
```
再讓它跑一陣子,中間需要不斷重複確認它的計畫,**這個步驟比較重要,要仔細審閱 plan 的內容細節是否完整,是否正確。**
等到一切就緒後就可以切到 speckit.tasks 來產生各項工作任務了。
```
Total Design Documentation: 3,111 lines across 6 files
🚀 Next Steps
- Generate Implementation Tasks: /speckit.tasks
This will create tasks.md with 76 tasks organized by user story.
- Review the Commit: git show HEAD
- Push to Remote (when ready): git push origin 001-shared-storage
- Begin Implementation:
- Start with foundational tasks (storage coordinator)
- Then User Story 1 (multi-unit deployment)
- Test locally with LXD before pushing to CI
📋 Commit Message Highlights
The commit message documents:
- ✅ All planning artifacts with line counts
- ✅ Key design decisions (fcntl locking, --attach-storage)
- ✅ Testing strategy for all deployment modes
- ✅ Performance targets with measurable improvements
- ✅ Constitution compliance verification
- ✅ Clear next steps for implementation
The planning phase is now complete and committed! 🎉
● Selected custom agent: speckit.tasks
~/work/concourse-ci-machi[⎇ claude-sonnet-4.5 speckit.tasks
e 001-shared-stora...] (1x)
──────────────────────────────────────────────────────────────────────────────────
> Proceed
──────────────────────────────────────────────────────────────────────────────────
Ctrl+c Exit · Ctrl+r Expand recent Remaining requests: 0%
```
等待了一會後,就會看到它準備好了。
```
● Perfect! Now let me create a comprehensive summary report:
-------------------------------------------------------------------------------
✅ Task Generation Complete!
Generated File:
/home/sylee/work/concourse-ci-machine/specs/001-shared-storage/tasks.md
📊 Task Statistics
┌───────────────────┬───────┬───────────────────────────────────┐
│ Metric │ Count │ Details │
├───────────────────┼───────┼───────────────────────────────────┤
│ Total Tasks │ 88 │ Across 7 phases │
├───────────────────┼───────┼───────────────────────────────────┤
│ Total Lines │ 343 │ Complete implementation guide │
├───────────────────┼───────┼───────────────────────────────────┤
│ Parallel Tasks │ 44 │ 50% can run concurrently │
├───────────────────┼───────┼───────────────────────────────────┤
│ US1 Tasks │ 18 │ MVP - Multi-unit deployment │
├───────────────────┼───────┼───────────────────────────────────┤
│ US2 Tasks │ 19 │ Coordinated upgrades │
├───────────────────┼───────┼───────────────────────────────────┤
│ US3 Tasks │ 13 │ Contention handling │
├───────────────────┼───────┼───────────────────────────────────┤
│ Format Compliance │ 100% │ All tasks follow checklist format │
└───────────────────┴───────┴───────────────────────────────────┘
📋 Phase Breakdown
┌─────────────────────────┬───────┬─────────────────────────────────────────────
──┬────────┐
│ Phase │ Tasks │ Purpose
│ Status │
├─────────────────────────┼───────┼─────────────────────────────────────────────
──┼────────┤
│ Phase 1: Setup │ 3 │ Project initialization
│ Ready │
├─────────────────────────┼───────┼─────────────────────────────────────────────
──┼────────┤
│ Phase 2: Foundational │ 13 │ Storage coordinator infrastructure
(BLOCKING) │ Ready │
├─────────────────────────┼───────┼─────────────────────────────────────────────
──┼────────┤
│ Phase 3: US1 │ 18 │ Multi-unit shared storage 🎯 MVP
│ Ready │
├─────────────────────────┼───────┼─────────────────────────────────────────────
──┼────────┤
│ Phase 4: US2 │ 19 │ Upgrade coordination
│ Ready │
├─────────────────────────┼───────┼─────────────────────────────────────────────
──┼────────┤
│ Phase 5: US3 │ 13 │ Contention & locking
│ Ready │
├─────────────────────────┼───────┼─────────────────────────────────────────────
──┼────────┤
│ Phase 6: Polish │ 10 │ Cross-cutting improvements
│ Ready │
├─────────────────────────┼───────┼─────────────────────────────────────────────
──┼────────┤
│ Phase 7: CI Integration │ 12 │ E2E tests for all modes
│ Ready │
└─────────────────────────┴───────┴─────────────────────────────────────────────
──┴────────┘
✅ Format Validation
All 88 tasks follow the required checklist format:
- [ ] [TaskID] [P?] [Story?] Description with file path
Validation Results:
- ✅ All tasks start with - [ ] checkbox
- ✅ All tasks have sequential IDs (T001-T088)
- ✅ All user story tasks have [US1], [US2], or [US3] labels
- ✅ All tasks include specific file paths
- ✅ 50% tasks marked [P] for parallel execution
- ✅ 0 format violations detected
🎯 MVP Scope
Recommended MVP: Phases 1-3 (34 tasks)
This delivers User Story 1 (P1):
- ✅ Multi-unit deployment with shared binaries
- ✅ Single download for N units (vs N downloads)
- ✅ ~62% disk space savings (3 units: 3GB → 1.15GB)
- ✅ Independently testable
MVP Validation: Deploy 3-unit Concourse in mode=auto with --attach-storage,
verify:
- All units mount same storage volume
- Binaries downloaded exactly once
- Total disk usage ≈1.15x (not 3x)
- All workers functional
🚀 Implementation Strategy
Option 1: MVP First (Recommended)
1. Complete T001-T016 (Setup + Foundational) ← BLOCKING
2. Complete T017-T034 (User Story 1) ← MVP
3. VALIDATE: Deploy 3-unit cluster, verify shared storage
4. Demo/Deploy MVP
5. Add US2 (T035-T053) for upgrades
6. Add US3 (T054-T066) for robustness
7. Add CI tests (T077-T088)
Option 2: Parallel Team (3+ developers)
Phase 1: All devs complete T001-T016 together
Phase 2: Once foundational done:
- Dev A: T017-T034 (US1 - shared storage)
- Dev B: T035-T053 (US2 - upgrades)
- Dev C: T054-T066 (US3 - contention)
Phase 3: Team integrates and adds CI (T077-T088)
📦 Deliverables
What You Can Do Now:
- Review Tasks: cat specs/001-shared-storage/tasks.md
- Start Implementation: # Begin with foundational work
# T004: Implement SharedStorage dataclass
# T005: Implement LockCoordinator
# etc.
- Commit Tasks: git add specs/001-shared-storage/tasks.md
git commit -m "feat(specs): Add 88 implementation tasks for shared storage"
- Track Progress:
- Check off tasks as completed: - [ ] → - [x]
- Use task IDs in commit messages: fix: T017 - detect existing binaries
- Reference in PRs: "Implements T017-T034 (US1)"
🎓 Key Features
Organization by User Story:
- Each user story is independently implementable
- Each story has clear test criteria
- Stories can be developed in parallel by different team members
Clear Dependencies:
- Phase 2 (Foundational) BLOCKS all user stories
- User stories are independent of each other
- Within stories: clear task ordering specified
Parallel Execution:
- 44 tasks marked [P] for concurrent work
- Parallel examples provided for each phase
- Team strategy documented for 3+ developers
CI Integration:
- 12 tasks for comprehensive E2E testing
- Coverage for all modes: auto, all, web+worker
- Validation of shared storage behavior
📚 Related Documentation
All design artifacts are complete:
- ✅ spec.md - Feature specification (187 lines)
- ✅ plan.md - Implementation plan (836 lines)
- ✅ research.md - Technical research (310 lines)
- ✅ data-model.md - Entity models (429 lines)
- ✅ quickstart.md - Deployment guide (651 lines)
- ✅ contracts/storage_coordinator.py - Storage interfaces (292 lines)
- ✅ contracts/upgrade_protocol.py - Upgrade protocol (406 lines)
- ✅ tasks.md - Implementation tasks (343 lines) ← NEW!
Total Documentation: 3,454 lines
-------------------------------------------------------------------------------
🎉 You're ready to begin implementation!
The task list is immediately executable - each task has specific file paths and
references to design documents. Start with the MVP (T001-T034) and validate
before proceeding to additional user stories.
```
再切成 speckit.analyze 請它檢查 `spec.md` & `plan.md` & `tasks.md`
```
● Selected custom agent: speckit.analyze
❯ Check all documents
● I'll perform a comprehensive cross-artifact consistency analysis of your specification documents. Let me start by checking prerequisites and loading the required files.
✓ Check prerequisites and get artifact paths
$ cd /home/sylee/projects/concourse-ci-machine && .specify/scripts/bash/check-prerequisites.sh --json --require-tasks --include-tasks
└ 2 lines...
✓ List directory specs/001-shared-storage
└ 11 files found
● Now let me load the core artifacts and the constitution:
✓ Read specs/001-shared-storage/spec.md
└ 112 lines read
✓ Read specs/001-shared-storage/plan.md
└ 1 line read
✓ Read specs/001-shared-storage/tasks.md
└ 345 lines read
✓ Read .specify/memory/constitution.md
└ 198 lines read
● Now let me view the plan.md in sections since it's large:
```
如果沒有問題,接下來就可以切成 speckit.implement 請它開始實作。
```
● Selected custom agent: speckit.implement
> Proceed
● I'll help you begin the implementation of the shared storage feature. Let me
start by checking prerequisites and analyzing the implementation context.
○ Check prerequisites and get feature context
$ cd /home/sylee/work/concourse-ci-machine &&
.specify/scripts/bash/check-prerequisites.sh --json --require-tasks
--include-tasks
╭────────────────────────────────────────────────────────────────────────────────╮
│ Check prerequisites and get feature context │
│ │
│ ╭────────────────────────────────────────────────────────────────────────────╮ │
│ │ cd /home/sylee/work/concourse-ci-machine && │ │
│ │ .specify/scripts/bash/check-prerequisites.sh --json --require-tasks │ │
│ │ --include-tasks │ │
│ ╰────────────────────────────────────────────────────────────────────────────╯ │
│ │
│ Do you want to run this command? │
│ │
│ ❯ 1. Yes │
│ 2. Yes, and approve `.specify/scripts/bash/check-prerequisites.sh` for the │
│ rest of the running session │
│ 3. No, and tell Copilot what to do differently (Esc) │
│ │
│ Confirm with number keys or ↑↓ keys and Enter, Cancel with Esc │
╰────────────────────────────────────────────────────────────────────────────────╯
```
實作的過程很冗長,中間不時需要確認一下,大致看一下有沒有走錯方向,或是選擇讓它自動跑完。
```
📈 Implementation Roadmap
Phase 1: Setup ███████████████████ 100% (3/3) ✓
Phase 2: Foundational ████░░░░░░░░░░░░░░░ 15% (2/13) ⏳
Phase 3: User Story 1 ░░░░░░░░░░░░░░░░░░░ 0% (0/18)
Phase 4: User Story 2 ░░░░░░░░░░░░░░░░░░░ 0% (0/19)
Phase 5: User Story 3 ░░░░░░░░░░░░░░░░░░░ 0% (0/13)
Phase 6: Polish ░░░░░░░░░░░░░░░░░░░ 0% (0/10)
Phase 7: CI Integration ░░░░░░░░░░░░░░░░░░░ 0% (0/12)
Overall Progress: ████░░░░░░░░░░░░░░░░░░░░░░░░░░ 5.7% (5/88)
MVP Progress: ███░░░░░░░░░░░░░░░░░░░░░░░░░░░ 14.7% (5/34)
📝 Quality Metrics
- ✅ All code includes type hints
- ✅ Comprehensive docstrings (Google style)
- ✅ Exception handling with specific errors
- ✅ Logging at appropriate levels
- ✅ Constitution compliance verified
🔄 Git Status
Branch: 001-shared-storage
Latest: 10d6efe "wip: Begin shared storage implementation"
Status: Clean (all changes committed)
Ready for: Continue or push to remote
-------------------------------------------------------------------------------
Would you like me to continue with the remaining Phase 2 tasks (T006-T016)? This
will complete the foundational infrastructure needed for all user stories.
```
最後產出的 [Pull Request](https://github.com/fourdollars/concourse-ci-machine/pull/5) 可以參考一下。