``` 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) 可以參考一下。