Project Planning Structure Rules
Plan Location & Naming
Every VM type or cross-cutting concern gets a project plan in docs/projects/<date>-<seq>-<name>/project_plan.md. Plans are the contract between planning and implementation.
Without structure, milestones lack verify criteria, rollback procedures, and dependency tracking — leading to "it works on my machine" outcomes.
Milestone Structure Requirements
Every milestone MUST include three sections: tasks (checkbox items), verify (inline assertions to add to molecule), and rollback (how to undo the milestone).
Every milestone MUST declare its dependency status: self-contained (no external blockers) or blocked on (lists the blocking project/milestone).
Self-contained milestones come before blocked milestones in the ordering. Work that can ship now ships first.
Milestone 0 of any project that introduces new testing patterns MUST establish the test infrastructure before feature work begins.
Milestone Template Structure
- Each milestone follows this structure:
### Milestone N: <Feature>
_Self-contained._ or _Blocked on: <project/milestone>._
Description.
See: `<skill-name>` skill.
**Implementation pattern:**
- Task file: `roles/<type>_configure/tasks/<feature>.yml`
- site.yml plays: (1) configure on `<dynamic_group>`, tag `<feature>` (2) deploy_stamp on `<flavor_group>`, tag `<feature>`
- Molecule scenario: `molecule/<type>-<feature>/`
- [ ] Task items
**Verify:**
- [ ] Assertions
**Rollback (`--tags <feature>-rollback`):**
Steps to reverse the feature (including auth/credential state if changed).
Milestone Dependency Graph
- Every plan MUST include a Milestone Dependency Graph (ASCII tree) showing the ordering and blocking relationships at a glance.
## Milestone dependency graph
M0 (test infra)
├── M1 (security) ← self-contained
├── M2 (VLANs) ← self-contained
├── M3 (encrypted DNS) ← self-contained
├── M4 (mesh) ← self-contained
├── M5 (pihole DNS) ← blocked on Pi-hole LXC project
└── M8 (docs + integration)
Standard Work Cycle Per Milestone
Every milestone that changes images or configure roles MUST follow the
6-step standard work cycle:
- Step 1: Update
build-images.sh
- Step 2: Build images IN PARALLEL on test units (REQUIRED — 6 hosts available)
- Step 3: Write tests and playbook updates while images build
- Step 4: Run E2E
molecule test after images are ready
- Step 5: Code review while E2E runs (DRY, ARCH, KISS, OOP, test quality)
- Step 6: Manual playbook verification after E2E passes
No rollback strategy needed — old image versions are saved and we can
just rebuild. Straightforward clean management.
NEVER skip Step 2. NEVER add legacy fallback code in configure roles.
Milestone Sizing
- Each milestone should be completable in a single focused session (2-4 hours). If a milestone has more than 8-10 checkbox items, split it. If it has fewer than 3, merge it with an adjacent milestone.
Blocked Milestone Handling
Blocked milestones SHOULD still be fully specified — they're ready to implement the moment the blocker is resolved.
When implementing a project, blocked milestones SHOULD be moved to their downstream projects rather than kept as stubs. Stubs in site.yml, cleanup.yml, and task files create dead code that confuses future maintainers.
Previous bug: M5-M7 stubs (pihole_dns, syslog, monitoring) were implemented as task files + site.yml plays + cleanup.yml rollback plays, then had to be removed entirely because they belonged in their respective downstream projects.
Manual Testing Playbook Requirements
When a project includes manual testing (Standard Work Cycle Step 6),
load and follow the manual-testing-playbook-writing skill for HOW to
write the playbook. Key constraints enforced here in the plan structure:
- The playbook MUST be written into
docs/manual-testing-playbooks.md
DURING plan creation — not deferred to implementation.
- The project plan references the playbook by file path and section
number (e.g., "EXECUTE Playbook 13, sections 13.1–13.7"). NEVER
duplicates playbook content inline.
- The
webui-manual-testing skill MUST be updated to list the new
playbook immediately — not deferred to a later milestone.
See: manual-testing-playbook-writing skill for exhaustive feature
enumeration, section structure, prerequisites, and host-awareness rules.
1---2name: project-planning-structure3description: Project planning structure and milestone template patterns. Use when creating project plans, structuring milestones, or organizing project documentation.4---56# Project Planning Structure Rules78## Plan Location & Naming9101. Every VM type or cross-cutting concern gets a project plan in `docs/projects/<date>-<seq>-<name>/project_plan.md`. Plans are the contract between planning and implementation.11122. Without structure, milestones lack verify criteria, rollback procedures, and dependency tracking — leading to "it works on my machine" outcomes.1314## Milestone Structure Requirements15163. Every milestone MUST include three sections: **tasks** (checkbox items), **verify** (inline assertions to add to molecule), and **rollback** (how to undo the milestone).17184. Every milestone MUST declare its dependency status: **self-contained** (no external blockers) or **blocked on** (lists the blocking project/milestone).19205. Self-contained milestones come before blocked milestones in the ordering. Work that can ship now ships first.21226. Milestone 0 of any project that introduces new testing patterns MUST establish the test infrastructure before feature work begins.2324## Milestone Template Structure25267. Each milestone follows this structure:2728```markdown29### Milestone N: <Feature>30_Self-contained._ or _Blocked on: <project/milestone>._31Description.3233See: `<skill-name>` skill.3435**Implementation pattern:**36- Task file: `roles/<type>_configure/tasks/<feature>.yml`37- site.yml plays: (1) configure on `<dynamic_group>`, tag `<feature>` (2) deploy_stamp on `<flavor_group>`, tag `<feature>`38- Molecule scenario: `molecule/<type>-<feature>/`3940- [ ] Task items4142**Verify:**43- [ ] Assertions4445**Rollback (`--tags <feature>-rollback`):**46Steps to reverse the feature (including auth/credential state if changed).47```4849## Milestone Dependency Graph50518. Every plan MUST include a **Milestone Dependency Graph** (ASCII tree) showing the ordering and blocking relationships at a glance.5253```markdown54## Milestone dependency graph55M0 (test infra)56├── M1 (security) ← self-contained57├── M2 (VLANs) ← self-contained58├── M3 (encrypted DNS) ← self-contained59├── M4 (mesh) ← self-contained60├── M5 (pihole DNS) ← blocked on Pi-hole LXC project61└── M8 (docs + integration)62```6364## Standard Work Cycle Per Milestone65669. Every milestone that changes images or configure roles MUST follow the67 6-step standard work cycle:68 - Step 1: Update `build-images.sh`69 - Step 2: Build images IN PARALLEL on test units (REQUIRED — 6 hosts available)70 - Step 3: Write tests and playbook updates while images build71 - Step 4: Run E2E `molecule test` after images are ready72 - Step 5: Code review while E2E runs (DRY, ARCH, KISS, OOP, test quality)73 - Step 6: Manual playbook verification after E2E passes7475 No rollback strategy needed — old image versions are saved and we can76 just rebuild. Straightforward clean management.7778 NEVER skip Step 2. NEVER add legacy fallback code in configure roles.7980## Milestone Sizing818210. Each milestone should be completable in a single focused session (2-4 hours). If a milestone has more than 8-10 checkbox items, split it. If it has fewer than 3, merge it with an adjacent milestone.8384## Blocked Milestone Handling858610. Blocked milestones SHOULD still be fully specified — they're ready to implement the moment the blocker is resolved.878811. When implementing a project, blocked milestones SHOULD be moved to their downstream projects rather than kept as stubs. Stubs in `site.yml`, `cleanup.yml`, and task files create dead code that confuses future maintainers.899012. Previous bug: M5-M7 stubs (pihole_dns, syslog, monitoring) were implemented as task files + site.yml plays + cleanup.yml rollback plays, then had to be removed entirely because they belonged in their respective downstream projects.9192## Manual Testing Playbook Requirements939413. When a project includes manual testing (Standard Work Cycle Step 6),95 load and follow the `manual-testing-playbook-writing` skill for HOW to96 write the playbook. Key constraints enforced here in the plan structure:97 - The playbook MUST be written into `docs/manual-testing-playbooks.md`98 DURING plan creation — not deferred to implementation.99 - The project plan references the playbook by file path and section100 number (e.g., "EXECUTE Playbook 13, sections 13.1–13.7"). NEVER101 duplicates playbook content inline.102 - The `webui-manual-testing` skill MUST be updated to list the new103 playbook immediately — not deferred to a later milestone.104105 See: `manual-testing-playbook-writing` skill for exhaustive feature106 enumeration, section structure, prerequisites, and host-awareness rules.