# pm-report > Generate product management reports from completed features. Use for release notes, changelog, or feature documentation. Triggers on: pm report, release notes, changelog, what shipped, completed features, generate report. - Author: corey-csg - Repository: corey-csg/newcastle - Version: 20260115160612 - Stars: 0 - Forks: 0 - Last Updated: 2026-02-06 - Source: https://github.com/corey-csg/newcastle - Web: https://mule.run/skillshub/@@corey-csg/newcastle~pm-report:20260115160612 --- --- name: pm-report description: "Generate product management reports from completed features. Use for release notes, changelog, or feature documentation. Triggers on: pm report, release notes, changelog, what shipped, completed features, generate report." --- # Product Management Reports Generate Markdown reports from archived PRDs for release notes, changelogs, and feature documentation. --- ## The Job 1. Parse the subcommand to determine report type 2. Read archived `prd.json` files from `archive/*/prd.json` 3. Filter data based on command parameters 4. Generate Markdown with only completed stories (passes: true) 5. Output to terminal --- ## Prerequisites Before running, verify: - `archive/` directory exists in project root - At least one archived PRD exists (`archive/*/prd.json`) --- ## Subcommands ### `/pm-report list` List all available archived versions. **Steps:** 1. Glob for `archive/*/prd.json` 2. For each, read the prd.json and extract: - Folder name (version identifier) - Date from folder prefix (YYYY-MM-DD) - Story count: total and passed 3. Output table **Output:** ```markdown # Available Versions | Version | Date | Stories (Passed/Total) | |---------|------|------------------------| | 2026-01-10-terminology | 2026-01-10 | 5/9 | ``` --- ### `/pm-report release ` Generate release notes comparing two versions. **Parameters:** - `from-version`: Baseline version (full or short name) - `to-version`: New version being released **Steps:** 1. Find `from-version` PRD in archive (match by folder name or suffix) 2. Find `to-version` PRD in archive 3. If either not found, show error with available versions 4. Extract story IDs from from-version 5. Extract completed stories from to-version (passes: true) 6. Filter to NEW stories (not in from-version) 7. Generate Markdown **Matching logic:** - Exact match: `2026-01-10-terminology` - Suffix match: `terminology` matches `2026-01-10-terminology` - If multiple matches, use most recent (latest date) **Output:** ```markdown # Release Notes: Released: YYYY-MM-DD (from folder name) Branch: ## New in this Release - **US-001:** <first sentence of description> - **US-002:** <title> <first sentence of description> --- Generated by pm-report skill ``` **If no new stories:** "No new completed stories between <from-version> and <to-version>" --- ### `/pm-report changes <start-date> <end-date>` List completed stories within a date range. **Parameters:** - `start-date`: Start date (YYYY-MM-DD) - `end-date`: End date (YYYY-MM-DD), inclusive **Steps:** 1. Validate date formats 2. Glob for `archive/*/prd.json` 3. Filter folders where date prefix is within range 4. Read each matching PRD 5. Collect all stories where passes: true 6. Group by feature (PRD) 7. Generate Markdown **Date extraction:** - Folder name: `2026-01-10-terminology` - Date: `2026-01-10` (first 10 characters) **Output:** ```markdown # Changes: YYYY-MM-DD to YYYY-MM-DD Features: N | Stories: M ## <Feature 1: description> Branch: <branchName> Archived: YYYY-MM-DD | ID | Title | |----|-------| | US-001 | <title> | | US-002 | <title> | ## <Feature 2: description> ... --- Generated by pm-report skill ``` **If no results:** "No completed features found between <start-date> and <end-date>" --- ### `/pm-report features [filter]` Generate complete feature list from all archived PRDs. **Parameters:** - `filter` (optional): Filter by feature name pattern **Steps:** 1. Glob for `archive/*/prd.json` 2. If filter provided, include only folders containing filter text 3. Read each PRD 4. Collect stories where passes: true 5. Generate comprehensive document **Output:** ```markdown # Completed Features Total: N features, M stories ## Summary | Feature | Date | Stories | |---------|------|---------| | <name> | YYYY-MM-DD | N | ## Details ### <Feature: description> Branch: <branchName> Archived: YYYY-MM-DD | ID | Title | Description | |----|-------|-------------| | US-001 | <title> | <first sentence> | --- Generated by pm-report skill ``` --- ## Reading PRD Files Each archived `prd.json` contains: ```json { "project": "Tauri Fusion", "branchName": "ralph/feature-name", "description": "Feature description", "userStories": [ { "id": "US-001", "title": "Story title", "description": "As a user, I want...", "acceptanceCriteria": ["..."], "priority": 1, "passes": true, "notes": "Commit hash or notes" } ] } ``` **Important:** Only include stories where `passes: true` --- ## Error Handling - **No archive folder:** "No archive/ directory found. No features have been archived yet." - **Empty archive:** "Archive is empty. Complete a Ralph run and use /finish-ralph to archive." - **Version not found:** "Version '<name>' not found. Available versions: <list>" - **Invalid date format:** "Invalid date format. Use YYYY-MM-DD (e.g., 2026-01-15)" - **No results in range:** "No completed features found between <start> and <end>. Available dates: <min> to <max>" - **No passed stories:** "Feature '<name>' has no completed stories (passes: true)" --- ## Notes - Current `prd.json` in project root is EXCLUDED (active feature, not archived) - Reports only include `passes: true` stories (verified complete) - Markdown output is suitable for docs, Slack, email, or wiki --- ## Checklist Before outputting report: - [ ] Verified archive/ directory exists - [ ] Found at least one matching PRD - [ ] Filtered to only passes: true stories - [ ] Excluded current prd.json (root level) - [ ] Output formatted as Markdown - [ ] Included summary statistics