delivery-timeline
Delivery Timeline
Generates a delivery timeline from a completed milestones.yaml. Asks for delivery parameters (production deploy date, QA rounds, days per QA session), updates milestones with day estimates, and produces timeline.yaml with two sections: a relative-day timeline and a real-date workback schedule anchored to the production deploy date.
Prerequisites
- Completed
{base_directory}/implementation/milestones.yaml(output from/implementation-planner)
Usage
/delivery-timeline [base-directory]
If no directory is provided, auto-detect by looking for implementation/milestones.yaml in the current directory.
If not found, prompt the user: "Where are your planning artifacts located?"
Wait for the user to provide a path before proceeding. Store as base_directory.
Process
Step 1: Determine Base Directory and Load Milestones
If no directory parameter was provided, check if implementation/milestones.yaml exists in the current directory.
- If found, use current directory as
base_directory - If not found, prompt: "Where are your planning artifacts located?" and wait for user response
Once base_directory is determined:
Read {base_directory}/implementation/milestones.yaml and extract each milestone's id, name, dependencies, and estimated_duration.
Also read meta.ordering_strategy if present. Store as ordering_strategy. If absent, default to foundation-first.
The ordering_strategy value drives structural differences in Steps 6 and 7:
multi-pr: PR/review/merge cycles are inserted after each milestone in the development timeline; the fixed pre-QA PR block in Step 7 is omitted.- All other strategies (
single-feature-branch,value-first,risk-first,vertical-slice,foundation-first): standard single-PR post-development flow (no change to current behavior).
Step 2: Gather Delivery Parameters
Ask the user the following three questions. You may present them together in a single message:
- Production deploy date — "What is your desired production deploy date? (YYYY-MM-DD)"
- QA rounds — "How many rounds of QA are required?"
- QA days per round — "How many days should be allotted for each QA session?"
If the provided production deploy date falls on a Saturday or Sunday, warn the user:
"Note: [date] falls on a weekend. Would you like to use [previous Friday] or [next Monday] instead?"
Wait for the user to confirm or correct before proceeding. Store the confirmed values as:
production_deploy_date(ISO 8601 date string)qa_rounds(integer ≥ 1)qa_days_per_round(integer ≥ 1)
Step 3: Convert Durations to Days
Convert each milestone's estimated_duration string to a whole number of business days using this table:
| estimated_duration | estimated_days |
|---|---|
| 0.5 weeks | 3 |
| 1 week | 5 |
| 1.5 weeks | 8 |
| 2 weeks | 10 |
| 2.5 weeks | 13 |
| 3 weeks | 15 |
| 3.5 weeks | 18 |
| 4 weeks | 20 |
| N weeks | N × 5 (rounded up to nearest whole day) |
For durations expressed in days already (e.g., 5 days), use the number as-is.
Step 4: Update milestones.yaml
Add estimated_days to every milestone entry in {base_directory}/implementation/milestones.yaml. Do not modify any other fields.
Example — before:
- id: m0
name: Foundation & Project Setup
estimated_duration: 1 week
After:
- id: m0
name: Foundation & Project Setup
estimated_duration: 1 week
estimated_days: 5
Step 5: Determine Project Size
Calculate total_development_days by summing estimated_days across all milestones.
Large project if either condition is true:
total_development_days > 30- Number of milestones > 5
Large projects receive two rounds of QA feedback by default, but this is overridden by the user-provided qa_rounds value from Step 2. is_large_project is still recorded in the summary for informational purposes.
Step 6: Build the Development Timeline
Starting at Day 0, assign a completion_day to each milestone in dependency order. Each milestone's start_day is the business day after its last dependency completes (or 0 if no dependencies). Its completion_day is start_day + estimated_days.
Day calculation formula:
- No dependencies:
start_day = 0 - Has dependencies:
start_day = max(dependency.completion_day) + 1(next business day after dependencies complete) completion_day = start_day + estimated_days
For sequential milestone chains (each depends on the previous):
m0: start_day=0, completion_day=0+estimated_days(m0)=5
m1: start_day=5+1=6, completion_day=6+estimated_days(m1)=16
m2: start_day=16+1=17, completion_day=17+estimated_days(m2)=27
...
For parallel milestones (sharing same dependency), they all start the day after that dependency completes. They share the same start_day but their completion_day is calculated independently based on their individual estimated_days.
Standard strategies (all except multi-pr)
last_milestone_day = the highest completion_day among all milestones.
multi-pr strategy
After each milestone, insert four PR cycle phases before the next milestone may start. Use the milestone id as a prefix (e.g. for m0: m0-pr-creation, m0-pr-review, m0-review-feedback, m0-merge).
| id pattern | name pattern | estimated_days | notes |
|---|---|---|---|
| [milestone-id]-pr-creation | [Milestone Name] PR Creation | 0 | Opened on milestone completion_day |
| [milestone-id]-pr-review | [Milestone Name] PR Review | 2 | |
| [milestone-id]-review-feedback | [Milestone Name] Review Feedback Implementation | 2 | |
| [milestone-id]-merge | [Milestone Name] Merge | 0 | Same day as review-feedback completion |
The PR cycle adds 4 business days of overhead after each milestone. The next milestone's start_day = completion_day of its predecessor's merge phase + 1 (starts the day after merge completes).
For sequential milestones under multi-pr:
m0: start_day=0, completion_day=0+estimated_days(m0)=5
m0-pr-creation: start_day=5, completion_day=5 # 0 days, opens same day
m0-pr-review: start_day=5, completion_day=5+2=7
m0-review-feedback: start_day=7, completion_day=7+2=9
m0-merge: start_day=9, completion_day=9 # 0 days, merges same day
m1: start_day=9+1=10, completion_day=10+estimated_days(m1)=20
# ... repeat for each milestone
For parallel milestones under multi-pr, each branch gets its own PR cycle. A milestone depending on multiple parallel predecessors starts the day after the latest merge completion_day among them (max(merge.completion_day) + 1).
last_milestone_day = the highest completion_day of the final [milestone-id]-merge phase across all milestones.
Step 7: Append Post-Development Timeline
Add delivery phase items starting from last_milestone_day. Each item has a start_day (day the work begins) and completion_day (day the work is done). Items with estimated_days: 0 complete on the same day they start.
Use qa_rounds and qa_days_per_round from Step 2 to drive the QA section.
Fixed Pre-QA Phases
Standard strategies (all except multi-pr): Include the full PR/merge/deployment block below. This represents the single end-of-project PR.
| id | name | estimated_days | notes |
|---|---|---|---|
| post-pr-creation | PR Creation | 0 | Opened on last milestone day |
| post-pr-review | PR Review | 2 | |
| post-review-feedback | Review Feedback Implementation | 2 | |
| post-merge | Merge | 0 | Same day as feedback impl |
| post-deployment | Deployment | 1 |
multi-pr strategy: Omit post-pr-creation, post-pr-review, post-review-feedback, and post-merge — those cycles already occurred per-milestone in Step 6. Start directly with post-deployment.
| id | name | estimated_days | notes |
|---|---|---|---|
| post-deployment | Deployment | 1 | Final deployment after all milestones merged |
QA Phases (repeated for each round 1..qa_rounds)
For each round R from 1 to qa_rounds, generate the following phases using qa_days_per_round as the QA Deadline duration. Use round-specific ids (e.g. post-qa-r1-deadline, post-qa-r2-deadline). When qa_rounds == 1, ids may omit the round suffix (e.g. post-qa-deadline).
| id pattern | name pattern | estimated_days | notes |
|---|---|---|---|
| post-qa-rR-deadline | QA Deadline (Round R) | qa_days_per_round |
Time allotted for QA team testing |
| post-qa-rR-feedback-impl | QA Feedback Implementation (Round R) | 3 if (R == 1 and qa_rounds > 1) else 2 | |
| post-qa-rR-pr | QA PR (Round R) | 0 | |
| post-qa-rR-feedback | QA Feedback (Round R) | 2 if (R == 1 and qa_rounds > 1) else 1 | |
| post-qa-rR-merge | QA Merge (Round R) | 0 |
Fixed Post-QA Phase (all projects)
| id | name | estimated_days |
|---|---|---|
| post-signoff | Signoff | 1 |
Step 8: Build Workback Schedule
Map every timeline item (milestones + delivery phases) to a real calendar date by working backwards from production_deploy_date.
Anchor point: production_deploy_date = the real date for completion_day of post-signoff (the final day of the timeline, total_delivery_days).
Business day arithmetic: When counting backwards, skip Saturdays and Sundays. One business day back from a Monday is the previous Friday.
For each timeline item:
completion_date=production_deploy_dateminus (total_delivery_days−item.completion_day) business daysstart_date=production_deploy_dateminus (total_delivery_days−item.start_day) business days
project_start_date = production_deploy_date minus total_delivery_days business days (Day 0).
Include all items from timeline in the same order. Also append a final entry for production-deploy with date: production_deploy_date.
Step 9: Generate timeline.yaml
Write {base_directory}/delivery/timeline.yaml.
Create directory if it doesn't exist:
mkdir -p {base_directory}/delivery
Output Format
Updated milestones.yaml
The estimated_days field is added to each milestone entry. All other content is preserved exactly.
timeline.yaml Schema
The output document includes: version, project, generated, milestones_file, summary (total days, project size, QA rounds, delivery model), timeline (milestones + delivery phases with start_day/completion_day/estimated_days), and workback (production deploy date, project start date, real calendar schedule).
See references/output-spec.md for the complete document specification with all fields, phase types, and workback calculation rules.
See references/example.yaml for a full example.
Example Output
See references/example.yaml for a complete sample timeline.
Gap Analysis
After generating timeline.yaml, perform a gap analysis and report findings inline.
Checks
Coverage
- Every milestone in
milestones.yamlappears intimeline.yaml - All milestone dependencies are respected (no milestone completes before its dependencies)
-
estimated_dayswas added to every milestone inmilestones.yaml
Duration Reasonableness
- No single milestone has
estimated_days: 0(flag for review) - No milestone exceeds 30 days without a note explaining the scope
- Duration conversions match the table in Step 2
Project Size Classification
-
is_large_projectcorrectly reflectstotal_development_days > 30ORmilestone_count > 5 - QA rounds in
timeline.yamlmatch user-providedqa_rounds - QA Deadline phases each use
qa_days_per_rounddays
Delivery Model
-
ordering_strategywas read frommilestones.yaml(or defaulted tofoundation-first) -
delivery_modelintimeline.yamlsummary matches the resolved strategy - For
multi-pr: each milestone has a corresponding[milestone-id]-pr-creation / pr-review / review-feedback / mergeblock in the timeline;post-pr-creationthroughpost-mergeare absent from post-development phases - For all other strategies:
post-pr-creationthroughpost-mergeare present in post-development phases; no per-milestone PR blocks exist
Timeline Integrity
-
completion_dayvalues are strictly increasing for sequential milestones - Parallel milestones have correct independent
completion_dayvalues - Post-development phases follow immediately after
last_milestone_day -
total_delivery_days=completion_dayofpost-signoff
Workback Integrity
-
project_start_date=production_deploy_dateminustotal_delivery_daysbusiness days -
production-deployentry date matchesproduction_deploy_date - All
completion_datevalues are on weekdays (Mon–Fri) -
workback.schedulecontains all entries fromtimelinein the same order -
post-signoffcompletion_date =production_deploy_date
Gap Analysis Report
After generating files, output a brief inline report:
## Timeline Gap Analysis
**Project:** [name]
**Delivery Model:** [ordering_strategy]
**Total Development Days:** [n] ([n] weeks)
**Total Delivery Days:** [n] (including post-dev phases)
**Project Size:** [Small / Large] ([reason if large])
**QA Rounds:** [n] × [qa_days_per_round] days each
**Production Deploy:** [YYYY-MM-DD]
**Project Start:** [YYYY-MM-DD]
**Checks:**
✓ All [n] milestones included
✓ Dependency order respected
✓ Duration conversions applied
[✓ / ✗] estimated_days added to milestones.yaml
[✓ / ✗] QA rounds match user-specified value ([n] rounds)
[✓ / ✗] All workback dates land on weekdays
[✓ / ✗] post-signoff completion_date = production_deploy_date
**Issues:** [none / list issues]
**Recommendations:** [none / list recommendations]
If issues are found, ask:
"I found the following timeline issues:
- [Issue 1]
- [Issue 2]
Would you like to:
- Fix these issues now
- Proceed with the timeline as-is
- Manually adjust the estimates before generating"
More from validkeys/sherpy
technical-requirements-interview
Conducts structured interviews to derive technical requirements from business requirements. Requires completed business-requirements.yaml as input. Asks targeted technical questions about architecture, technology stack, data model, APIs, security, testing, and deployment. Generates technical-requirements.yaml output.
48business-requirements-interview
Conducts structured interviews to gather comprehensive business requirements. Asks one question at a time with multiple-choice options, tracks progress in JSONL format, and generates structured business-requirements.yaml output. Use when starting a new project or feature to ensure clear understanding of goals, scope, users, and success criteria.
46implementation-planner
Generates detailed implementation plans with milestones and tasks from business and technical requirements. Embeds best practices including task sizing (30m-2.5h), style anchors, TDD requirements, and quality constraints. Outputs milestones.yaml and milestone-m*.tasks.yaml files ready for development.
42implementation-plan-review
Reviews generated implementation plans against best practices including task sizing (30m-2.5h), style anchors, TDD requirements, drift prevention, and quality constraints. Validates milestones.yaml and task files for completeness, alignment, and development readiness.
39implementation-plan-best-practices
Educational guide on best practices for creating implementation plans that prevent drift. Covers style anchors, task sizing, TDD requirements, affirmative instructions, drift handling, and quality gates. Use when creating or improving implementation plans to ensure they follow proven patterns.
37sherpy-flow
Orchestrates the full Sherpy planning workflow from requirements to QA-ready delivery plan. Detects which artifacts already exist, shows a visual pipeline status, and guides through each skill in sequence — gap analysis, business interview, technical interview, implementation planning, plan review, definition of done, architecture decisions, delivery timeline, QA test plan, and summary generation. Automatically organizes all artifacts into a structured docs/ folder.
31