feat(documentation): add planning document standards for migration plans and implementation guides
This commit is contained in:
parent
2531cb4705
commit
325c4b98a5
675
.github/instructions/style.plans.instructions.md
vendored
Normal file
675
.github/instructions/style.plans.instructions.md
vendored
Normal file
@ -0,0 +1,675 @@
|
||||
---
|
||||
description: "Planning Document Standards: Format and structure requirements for migration plans, implementation guides, and project roadmaps."
|
||||
applyTo: "documentation/plans/**/*.md"
|
||||
---
|
||||
|
||||
# Planning Document Standards
|
||||
|
||||
## Purpose
|
||||
|
||||
This document defines the structure, formatting, and content requirements for all planning documents stored in `documentation/plans/`. These standards ensure consistency, enable accurate time estimation, and provide clear execution pathways for infrastructure changes.
|
||||
|
||||
---
|
||||
|
||||
## Document Types
|
||||
|
||||
### Migration Plans
|
||||
Files prefixed with `plan-` that detail transitioning from one state to another.
|
||||
|
||||
**Examples:**
|
||||
- `plan-gitcryptMigration.md` — Implementing git-crypt for secret management
|
||||
- `plan-ansibleSetup.md` — Setting up Ansible control node
|
||||
- `plan-promptDistribution.md` — Centralizing prompt repository
|
||||
|
||||
### Implementation Guides
|
||||
Step-by-step instructions for deploying new technologies or systems.
|
||||
|
||||
### Roadmaps
|
||||
Long-term strategic plans spanning multiple phases or quarters.
|
||||
|
||||
---
|
||||
|
||||
## Required Document Structure
|
||||
|
||||
### 1. Header Section
|
||||
|
||||
Every plan must begin with:
|
||||
|
||||
```markdown
|
||||
# [Descriptive Title]: [Specific Goal]
|
||||
|
||||
## Overview
|
||||
|
||||
[2-3 sentence summary of what this plan accomplishes and why it matters]
|
||||
|
||||
**[Primary Metric]:** [Value/Target]
|
||||
**[Secondary Metric]:** [Value/Target] (optional)
|
||||
**End State:** [Concrete description of success]
|
||||
|
||||
**Estimated Time to Complete:** X-Y hours (first-time setup) | A-B hours (experienced operator)
|
||||
```
|
||||
|
||||
**Example:**
|
||||
```markdown
|
||||
# Ansible Control Node Setup: Path to Production Readiness
|
||||
|
||||
## Overview
|
||||
|
||||
Transform **Watchtower** (Raspberry Pi 5) into a production-ready Ansible control node capable of managing the entire homelab infrastructure.
|
||||
|
||||
**Control Node:** Watchtower (10.0.0.200) — Raspberry Pi 5, ARM Cortex-A76, 16GB RAM
|
||||
**Managed Nodes:** Heimdall (10.0.0.151), Waldorf (10.0.0.251), Watchtower (localhost)
|
||||
**End State:** Fully configured Ansible environment with validated connectivity, encrypted secrets, and role scaffolding.
|
||||
|
||||
**Estimated Time to Complete:** 2-3 hours (first-time setup) | 45-60 minutes (experienced operator)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 2. Time Breakdown Table
|
||||
|
||||
**Required immediately after Overview section:**
|
||||
|
||||
```markdown
|
||||
## Time Breakdown by Phase
|
||||
|
||||
| Phase | Description | Time Estimate |
|
||||
|-------|-------------|---------------|
|
||||
| **Phase 1** | [Phase Name] | XX-YY minutes |
|
||||
| **Phase 2** | [Phase Name] | XX-YY minutes |
|
||||
| **Phase 3** | [Phase Name] | XX-YY minutes |
|
||||
| **Phase N** | [Phase Name] | XX-YY minutes |
|
||||
| **Total** | End-to-End [Process Name] | **X-Y hours** |
|
||||
```
|
||||
|
||||
**Guidelines:**
|
||||
- Use **bold** for phase numbers and total row
|
||||
- Time estimates should be ranges (min-max) in minutes or hours
|
||||
- Total should sum to the overall estimate in the Overview
|
||||
- Include 3-6 phases typically (not too granular, not too broad)
|
||||
|
||||
**For plans with multiple options:**
|
||||
|
||||
```markdown
|
||||
## Time Breakdown by Implementation Option
|
||||
|
||||
| Option | Approach | Initial Setup Time | Ongoing Maintenance |
|
||||
|--------|----------|-------------------|---------------------|
|
||||
| **Option 1** | [Method] | X-Y hours | Z min/operation |
|
||||
| **Option 2** | [Method] | X-Y hours | Z min/operation |
|
||||
| **Option 3** | [Method] | X-Y hours | Z min/operation |
|
||||
|
||||
**Recommended:** Option [N] (detailed time breakdown below)
|
||||
|
||||
### Option [N]: Detailed Phase Breakdown
|
||||
|
||||
| Phase | Description | Time Estimate |
|
||||
|-------|-------------|---------------|
|
||||
[Standard phase table as above]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 3. Prerequisites Section
|
||||
|
||||
**Required before Phase 1:**
|
||||
|
||||
```markdown
|
||||
## Prerequisites
|
||||
|
||||
- [ ] [Requirement 1]
|
||||
- [ ] [Requirement 2]
|
||||
- [ ] [Requirement 3]
|
||||
- [ ] [Optional: Requirement 4 (optional, but recommended)]
|
||||
```
|
||||
|
||||
**Guidelines:**
|
||||
- Use checkboxes (`- [ ]`) for trackability
|
||||
- List in order of validation (check access before checking software versions)
|
||||
- Distinguish between required and optional prerequisites
|
||||
- Include both technical and knowledge prerequisites
|
||||
|
||||
---
|
||||
|
||||
### 4. Phase Sections
|
||||
|
||||
**Each phase must include:**
|
||||
|
||||
```markdown
|
||||
## Phase [N]: [Phase Name]
|
||||
**Estimated Time:** XX-YY minutes
|
||||
|
||||
[1-2 sentence phase description explaining the goal]
|
||||
|
||||
### Step [N]: [Step Name]
|
||||
**Time:** X-Y minutes
|
||||
|
||||
[Step instructions with code blocks, explanations, and verification steps]
|
||||
|
||||
**[Optional Section: Why/Security Note/Troubleshooting]:**
|
||||
[Additional context if needed]
|
||||
```
|
||||
|
||||
**Step-Level Requirements:**
|
||||
- Each step must have individual time estimate
|
||||
- Include verification commands where applicable
|
||||
- Add `# Expected: [output]` comments to commands
|
||||
- Use consistent heading levels (## for Phase, ### for Step)
|
||||
|
||||
**Example:**
|
||||
```markdown
|
||||
## Phase 1: Control Node Foundation (Watchtower Setup)
|
||||
**Estimated Time:** 20-30 minutes
|
||||
|
||||
### Step 1: Install Ansible Toolchain
|
||||
**Time:** 10-15 minutes (depends on network speed)
|
||||
|
||||
Connect to Watchtower via SSH and install the complete Ansible stack:
|
||||
|
||||
```bash
|
||||
# SSH to Watchtower
|
||||
ssh chester@10.0.0.200
|
||||
|
||||
# Update package index
|
||||
sudo apt update
|
||||
|
||||
# Verify Ansible installation
|
||||
ansible --version
|
||||
# Expected: ansible [core 2.x.x] or newer
|
||||
```
|
||||
|
||||
**Why these tools:**
|
||||
- `ansible`: Execution engine
|
||||
- `ansible-lint`: Code quality enforcement
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 5. Troubleshooting Section
|
||||
|
||||
**Required before final checklist:**
|
||||
|
||||
```markdown
|
||||
## Troubleshooting
|
||||
|
||||
### Issue: [Symptom Description]
|
||||
|
||||
**Cause:** [Root cause explanation]
|
||||
|
||||
**Fix:**
|
||||
```bash
|
||||
[Commands to resolve]
|
||||
```
|
||||
|
||||
[Optional: Additional context or prevention tips]
|
||||
```
|
||||
|
||||
**Guidelines:**
|
||||
- Anticipate 3-5 common failure modes
|
||||
- Use consistent format: Issue → Cause → Fix
|
||||
- Include verification steps in the fix
|
||||
- Order by likelihood (most common first)
|
||||
|
||||
---
|
||||
|
||||
### 6. Summary/Checklist Section
|
||||
|
||||
**Required at end of document:**
|
||||
|
||||
```markdown
|
||||
## Summary Checklist
|
||||
|
||||
- [ ] [Major milestone 1]
|
||||
- [ ] [Major milestone 2]
|
||||
- [ ] [Major milestone 3]
|
||||
- [ ] [Verification step]
|
||||
- [ ] [Documentation updated]
|
||||
- [ ] [Changes committed to Git]
|
||||
|
||||
**Environment Status:** 🟢 **PRODUCTION READY** | 🟡 **TESTING** | 🔴 **NOT READY**
|
||||
```
|
||||
|
||||
**Optional sections:**
|
||||
```markdown
|
||||
## Migration Checklist
|
||||
|
||||
**Pre-Migration:**
|
||||
- [ ] [Backup step]
|
||||
- [ ] [Verification step]
|
||||
|
||||
**Migration Steps:**
|
||||
- [ ] [Core steps from the plan]
|
||||
|
||||
**Post-Migration:**
|
||||
- [ ] [Validation]
|
||||
- [ ] [Documentation]
|
||||
- [ ] [Cleanup]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 7. Document Metadata (Footer)
|
||||
|
||||
**Required at very end:**
|
||||
|
||||
```markdown
|
||||
---
|
||||
|
||||
**Document Version:** X.Y
|
||||
**Last Updated:** [Month DD, YYYY]
|
||||
**Author:** [Author Name/Tool]
|
||||
**Review Cycle:** [Quarterly | Monthly | After infrastructure changes]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Formatting Standards
|
||||
|
||||
### Time Estimates
|
||||
|
||||
**Range Format:**
|
||||
- Use ranges for uncertainty: `10-15 minutes`, `2-3 hours`
|
||||
- Larger range for first-time: `2-3 hours (first-time)`
|
||||
- Smaller range for experienced: `45-60 minutes (experienced)`
|
||||
|
||||
**Never use:**
|
||||
- Exact times without ranges: ❌ `15 minutes`
|
||||
- Vague estimates: ❌ `about an hour`, `quickly`
|
||||
|
||||
### Code Blocks
|
||||
|
||||
**Always specify language:**
|
||||
```markdown
|
||||
```bash
|
||||
# Good: Language specified
|
||||
```
|
||||
|
||||
```markdown
|
||||
```
|
||||
# Bad: Generic code block
|
||||
```
|
||||
```
|
||||
|
||||
**Include expected outputs:**
|
||||
```bash
|
||||
ansible --version
|
||||
# Expected: ansible [core 2.x.x] or newer
|
||||
```
|
||||
|
||||
**Add comments explaining why:**
|
||||
```bash
|
||||
# Generate ED25519 key (modern, secure, fast)
|
||||
ssh-keygen -t ed25519 -C "ansible@watchtower"
|
||||
```
|
||||
|
||||
### Emphasis & Highlighting
|
||||
|
||||
**Use bold for:**
|
||||
- Phase names in tables
|
||||
- **Important:** warnings or critical notes
|
||||
- **Goal:** objective statements
|
||||
- Key metrics in overview
|
||||
|
||||
**Use inline code for:**
|
||||
- File paths: `ansible/ansible.cfg`
|
||||
- Commands: `git-crypt unlock`
|
||||
- Variables: `vault_password_file`
|
||||
- Package names: `ansible-lint`
|
||||
|
||||
**Use INFO blocks for decisions:**
|
||||
```markdown
|
||||
**Key Decisions:**
|
||||
- `host_key_checking = False`: Simplifies homelab automation (acceptable for trusted private network)
|
||||
- `forks = 3`: Limits parallel execution (prevents overwhelming Pi resources)
|
||||
```
|
||||
|
||||
### Lists & Tables
|
||||
|
||||
**Checkbox lists for trackable items:**
|
||||
```markdown
|
||||
- [ ] Ansible toolchain installed
|
||||
- [ ] SSH keys distributed
|
||||
- [ ] First playbook run successful
|
||||
```
|
||||
|
||||
**Markdown tables for comparisons:**
|
||||
```markdown
|
||||
| Option | Pros | Cons | Time |
|
||||
|--------|------|------|------|
|
||||
| A | Fast | Complex | 1h |
|
||||
| B | Simple | Slow | 3h |
|
||||
```
|
||||
|
||||
### Links & References
|
||||
|
||||
**Internal links use relative paths:**
|
||||
```markdown
|
||||
See [ansible/.ansible-lint](ansible/.ansible-lint) for configuration.
|
||||
```
|
||||
|
||||
**External links use full URLs:**
|
||||
```markdown
|
||||
Git-crypt Documentation: https://github.com/AGWA/git-crypt
|
||||
```
|
||||
|
||||
**Related documentation section:**
|
||||
```markdown
|
||||
## Related Documentation
|
||||
|
||||
- [SECURITY_AUDIT_REPORT.md](../documentation/SECURITY_AUDIT_REPORT.md) - Security findings
|
||||
- [SOP-001](../documentation/SOPs/SOP-001-Example.md) - Related procedure
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Optional Sections (Use When Applicable)
|
||||
|
||||
### Rollback Plan
|
||||
|
||||
For destructive or risky migrations:
|
||||
|
||||
```markdown
|
||||
## Rollback Plan
|
||||
|
||||
If [technology] causes issues:
|
||||
|
||||
```bash
|
||||
# 1. Stop service
|
||||
# 2. Restore backup
|
||||
# 3. Revert configuration
|
||||
```
|
||||
|
||||
**Recovery Time:** Estimated X-Y minutes
|
||||
```
|
||||
|
||||
### Migration Strategy (Multi-Week Plans)
|
||||
|
||||
For staged rollouts:
|
||||
|
||||
```markdown
|
||||
## Migration Strategy
|
||||
**Total Timeline:** [N] weeks (staged rollout) | [M] days (aggressive deployment)
|
||||
|
||||
### Week 1: [Phase Name]
|
||||
**Time:** X-Y hours
|
||||
|
||||
[Objectives]
|
||||
|
||||
### Week 2: [Phase Name]
|
||||
**Time:** X-Y hours
|
||||
|
||||
[Objectives]
|
||||
```
|
||||
|
||||
### Security Considerations
|
||||
|
||||
For security-sensitive plans:
|
||||
|
||||
```markdown
|
||||
## Security Considerations
|
||||
|
||||
### [Area of Concern]
|
||||
- [Risk description]
|
||||
- [Mitigation strategy]
|
||||
- [Verification method]
|
||||
```
|
||||
|
||||
### Maintenance & Next Steps
|
||||
|
||||
For ongoing operations:
|
||||
|
||||
```markdown
|
||||
## Maintenance & Next Steps
|
||||
|
||||
### Ongoing Operations
|
||||
|
||||
**[Operation Name]:**
|
||||
```bash
|
||||
[Command]
|
||||
```
|
||||
|
||||
### Future Enhancements
|
||||
|
||||
1. **[Enhancement Name]:**
|
||||
- [Description]
|
||||
- [Estimated effort]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Success Criteria Template
|
||||
|
||||
Each plan should define measurable success criteria:
|
||||
|
||||
```markdown
|
||||
## Success Criteria
|
||||
|
||||
- ✅ [Technical validation 1]
|
||||
- ✅ [Technical validation 2]
|
||||
- ✅ [Functional test passed]
|
||||
- ✅ [Documentation updated]
|
||||
- ✅ [Zero errors in logs]
|
||||
|
||||
**Estimated Migration Time:** [Same as in overview]
|
||||
**Maintenance:** [Ongoing time commitment]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## File Naming Convention
|
||||
|
||||
**Pattern:** `plan-[technology][Action].md`
|
||||
|
||||
**Examples:**
|
||||
- `plan-ansibleSetup.md` — Setup/installation guide
|
||||
- `plan-gitcryptMigration.md` — Migration from one state to another
|
||||
- `plan-promptDistribution.md` — Distribution/deployment plan
|
||||
|
||||
**Rules:**
|
||||
- Use camelCase for multi-word components
|
||||
- No spaces or special characters
|
||||
- Prefix always `plan-`
|
||||
- Suffix always `.md`
|
||||
|
||||
---
|
||||
|
||||
## Quality Checklist
|
||||
|
||||
Before committing a planning document, verify:
|
||||
|
||||
- [ ] Overview includes total time estimate
|
||||
- [ ] Time breakdown table present and accurate
|
||||
- [ ] Prerequisites listed with checkboxes
|
||||
- [ ] Each phase has time estimate
|
||||
- [ ] Each step has individual time estimate
|
||||
- [ ] Code blocks specify language
|
||||
- [ ] Expected outputs documented
|
||||
- [ ] Troubleshooting section included
|
||||
- [ ] Summary checklist present
|
||||
- [ ] Document metadata complete
|
||||
- [ ] All links are valid
|
||||
- [ ] Formatting consistent with examples
|
||||
- [ ] Success criteria defined
|
||||
- [ ] Related documentation referenced
|
||||
|
||||
---
|
||||
|
||||
## Anti-Patterns (Common Mistakes)
|
||||
|
||||
❌ **Missing time estimates:**
|
||||
```markdown
|
||||
## Phase 1: Setup
|
||||
### Step 1: Install tools
|
||||
```
|
||||
|
||||
✅ **Correct format:**
|
||||
```markdown
|
||||
## Phase 1: Setup
|
||||
**Estimated Time:** 20-30 minutes
|
||||
|
||||
### Step 1: Install tools
|
||||
**Time:** 10-15 minutes
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
❌ **Vague success criteria:**
|
||||
```markdown
|
||||
- Everything works
|
||||
- No errors
|
||||
```
|
||||
|
||||
✅ **Specific validation:**
|
||||
```markdown
|
||||
- ✅ All nodes respond to `ansible all -m ping`
|
||||
- ✅ Zero lint errors when running `ansible-lint playbooks/*.yml`
|
||||
- ✅ Validation playbook completes with exit code 0
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
❌ **Commands without context:**
|
||||
```bash
|
||||
git-crypt unlock
|
||||
cat nodes/waldorf/plex/.env.secrets
|
||||
```
|
||||
|
||||
✅ **Commands with verification:**
|
||||
```bash
|
||||
# Unlock with the key
|
||||
git-crypt unlock ~/homelab-secrets.key
|
||||
|
||||
# Verify decryption worked
|
||||
cat nodes/waldorf/plex/.env.secrets
|
||||
# Expected: plaintext secrets (not binary data)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
❌ **Flat structure (no phases):**
|
||||
```markdown
|
||||
# Setup Guide
|
||||
## Step 1
|
||||
## Step 2
|
||||
## Step 3
|
||||
[... 20 more steps ...]
|
||||
```
|
||||
|
||||
✅ **Hierarchical organization:**
|
||||
```markdown
|
||||
# Setup Guide
|
||||
|
||||
## Phase 1: Foundation (30-40 min)
|
||||
### Step 1 (10 min)
|
||||
### Step 2 (20 min)
|
||||
|
||||
## Phase 2: Configuration (20-30 min)
|
||||
### Step 3 (15 min)
|
||||
### Step 4 (10 min)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Example Template
|
||||
|
||||
Use this as a starting point for new planning documents:
|
||||
|
||||
```markdown
|
||||
# [Title]: [Goal]
|
||||
|
||||
## Overview
|
||||
|
||||
[Description]
|
||||
|
||||
**[Key Metric 1]:** [Value]
|
||||
**[Key Metric 2]:** [Value]
|
||||
**End State:** [Success description]
|
||||
|
||||
**Estimated Time to Complete:** X-Y hours (first-time) | A-B hours (experienced)
|
||||
|
||||
---
|
||||
|
||||
## Time Breakdown by Phase
|
||||
|
||||
| Phase | Description | Time Estimate |
|
||||
|-------|-------------|---------------|
|
||||
| **Phase 1** | [Name] | XX-YY minutes |
|
||||
| **Phase 2** | [Name] | XX-YY minutes |
|
||||
| **Total** | End-to-End | **X-Y hours** |
|
||||
|
||||
---
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- [ ] [Requirement 1]
|
||||
- [ ] [Requirement 2]
|
||||
|
||||
---
|
||||
|
||||
## Phase 1: [Name]
|
||||
**Estimated Time:** XX-YY minutes
|
||||
|
||||
### Step 1: [Action]
|
||||
**Time:** X-Y minutes
|
||||
|
||||
```bash
|
||||
# Commands
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Phase 2: [Name]
|
||||
**Estimated Time:** XX-YY minutes
|
||||
|
||||
### Step 2: [Action]
|
||||
**Time:** X-Y minutes
|
||||
|
||||
---
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Issue: [Problem]
|
||||
**Cause:** [Explanation]
|
||||
**Fix:**
|
||||
```bash
|
||||
# Solution
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Summary Checklist
|
||||
|
||||
- [ ] [Milestone 1]
|
||||
- [ ] [Milestone 2]
|
||||
|
||||
**Environment Status:** 🟢 **PRODUCTION READY**
|
||||
|
||||
---
|
||||
|
||||
**Document Version:** 1.0
|
||||
**Last Updated:** [Date]
|
||||
**Author:** [Name]
|
||||
**Review Cycle:** Quarterly
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Enforcement
|
||||
|
||||
This standard applies to:
|
||||
- All files in `documentation/plans/`
|
||||
- Migration guides
|
||||
- Implementation roadmaps
|
||||
- Multi-phase technical projects
|
||||
|
||||
**Exclusions:**
|
||||
- Quick reference guides (use KBA format instead)
|
||||
- Single-step procedures (use SOP format instead)
|
||||
- Architecture diagrams (standalone)
|
||||
|
||||
---
|
||||
|
||||
**Document Version:** 1.0
|
||||
**Last Updated:** April 12, 2026
|
||||
**Author:** FrankGPT (Ansible Architect Mode)
|
||||
**Review Cycle:** Quarterly or when planning format needs evolve
|
||||
Loading…
x
Reference in New Issue
Block a user