Status Update
You are the engineering-manager. Generate a comprehensive status update and refresh the dashboard.
Architecture: The dashboard uses a data-driven template system. The agent writes JSON data; a build script generates the HTML. This avoids manual SVG math and surgical HTML edits.
Files:
- •
docs/reports/dashboard-data.json— Agent-generated data file (all metrics) - •
docs/reports/dashboard-template.html— HTML template with placeholders - •
docs/reports/status-dashboard.html— Generated output (git-committed) - •
scripts/generate-dashboard.ts— Build script that reads JSON + template, computes SVG offsets, writes HTML
Step 1: Collect data (all in parallel)
# Commits
git log --oneline --since="<project-start-date>" -n 500
# PRs merged
gh pr list --state merged --limit 100 --json number --jq 'length'
# Open issues by priority
gh issue list --state open --label P0-mvp --limit 200 --json number --jq 'length'
gh issue list --state open --label P1-fast-follow --limit 200 --json number --jq 'length'
gh issue list --state open --label P2-future --limit 200 --json number --jq 'length'
# Closed issues by priority
gh issue list --state closed --label P0-mvp --limit 200 --json number --jq 'length'
gh issue list --state closed --label P1-fast-follow --limit 200 --json number --jq 'length'
# Work type distribution
gh issue list --state all --label type:build --limit 200 --json number,state --jq 'length'
gh issue list --state all --label type:keep --limit 200 --json number,state --jq 'length'
gh issue list --state all --label type:invest --limit 200 --json number,state --jq 'length'
# Launch readiness
gh issue list --state open --label launch-readiness --limit 200 --json number --jq 'length'
gh issue list --state closed --label launch-readiness --limit 200 --json number --jq 'length'
# Current sprint milestone
gh api repos/{owner}/{repo}/milestones --jq '.[] | select(.state=="open")'
# Latest commit
git log -n 1 --format="%H %s"
Also read:
- •
DOCS.md— feature completion status (Completed section) - •
.product/backlog.md— priority breakdown - •
.claude/sprint/current.md— sprint goal and plan - •
.product/rice-scores.md— RICE scores for context
Step 2: Compute metrics
Feature counts
- •Count completed features from DOCS.md "Completed" section
- •Total features from DOCS.md "Active/Planned" + "Completed"
- •Overall % = completed / total
Priority breakdown
- •P0: closed / (open + closed) for P0-mvp label
- •P1: closed / (open + closed) for P1-fast-follow label
- •P2: closed / (open + closed) for P2-future label
Sprint progress
- •From milestone: closed_issues / (open_issues + closed_issues)
- •Days remaining: milestone due date - today
Launch readiness
- •From launch-readiness label: closed / (open + closed)
Step 3: Compute RAG status
| Track | Green | Amber | Red |
|---|---|---|---|
| App Features | P0 > 90% | P0 70-90% | P0 < 70% |
| Core Functionality | All core items shipped, no regressions | Minor bugs open | Crash/regression |
| Launch Readiness | > 50% items done | 10-50% done | < 10% done |
| CI/CD Pipeline | PR gate + auto build live | Partially set up | Nothing exists |
| Operational Readiness | Alerting + rollback tested | Docs exist, untested | Nothing exists |
| Testing & QA | CI enforced, E2E current | Tests exist, not in CI | No test coverage |
Step 4: Generate executive narrative
Write 3-4 sentences covering:
- •Opening: Sprint number, days in, overall completion %
- •Progress: What shipped since last update, key milestones
- •Key concern: Single biggest risk or gap
- •Recommendation: One clear action item
Tone: Professional, concise, data-backed. As if briefing a technical CEO with 30 seconds to read.
Step 5: Write dashboard-data.json
Write the collected metrics to docs/reports/dashboard-data.json. The JSON schema:
{
"generatedAt": "ISO-8601 timestamp with timezone",
"sprint": {
"number": 3,
"status": "ACTIVE",
"issuesClosed": 0,
"issuesTotal": 11,
"dateRange": "Feb 13-19",
"mode": "Agent-Only",
"goal": "...",
"breakdown": "Agent: 11 (F=1-2) | Human: 0 | External: 0",
"riceTotal": 203.5,
"riceNote": "highest agent-only sprint throughput",
"items": [
{ "id": "{{SPEC_PREFIX}}-125", "name": "Feature name", "type": "keep" }
]
},
"velocity": {
"commits": 244,
"prsMerged": 61,
"linesAdded": 214428,
"linesDeleted": 4703,
"featuresShipped": 44
},
"priorities": {
"p0": { "closed": 44, "total": 49, "label": "MVP", "deadline": "TBD" },
"p1": { "closed": 20, "total": 43, "label": "Fast Follow", "deadline": "TBD" },
"p2": { "closed": 0, "total": 3, "label": "Future", "deadline": "TBD" }
},
"narrative": "Executive summary paragraph...",
"rag": [
{ "track": "App Features", "status": "green", "detail": "90% closed (44/49)" }
],
"workTypeDistribution": {
"build": { "count": 3, "percentage": 27, "items": [{ "id": "{{SPEC_PREFIX}}-119", "name": "Feature name" }] },
"invest": { "count": 3, "percentage": 27, "items": [{ "id": "{{SPEC_PREFIX}}-060", "name": "Feature name" }] },
"keep": { "count": 5, "percentage": 46, "items": [{ "id": "{{SPEC_PREFIX}}-125", "name": "Feature name" }] }
},
"launchReadiness": {
"completed": 25,
"total": 49,
"categories": [
{ "name": "App Store", "score": "0/4", "status": "red" },
{ "name": "CI/CD", "score": "5/6", "status": "green" }
]
},
"risks": [
{ "title": "Risk title", "detail": "Details...", "icon": "rocket|info" }
],
"actionItems": [
{ "priority": 1, "title": "Action title", "detail": "Details...", "severity": "high|medium|low" }
],
"countdowns": {
"launch": { "date": "YYYY-MM-DD", "label": "Launch", "displayDate": "Mon DD, YYYY" }
},
"roadmap": {
"todayLabel": "Today",
"phases": [
{ "id": "mvp", "name": "Phase 1 — MVP", "dates": "Start -> End", "flex": 4, "class": "mvp" }
],
"milestones": [
{ "title": "Launch", "date": "Mon DD", "major": true, "afterPhase": "mvp" }
]
}
}
RAG status values
- •
"green"— on track - •
"amber"— at risk - •
"red"— blocked/critical - •
"blue"— informational
Risk icon values
- •
"rocket"— external/launch risk (renders danger color) - •
"info"— informational risk (renders info color)
Action item severity values
- •
"high"— orange styling (urgent) - •
"medium"— blue styling (important) - •
"low"— neutral styling
Step 6: Generate dashboard HTML
Run the build script to generate the dashboard from the JSON data:
{{PKG_RUN}} scripts/generate-dashboard.ts
The script will:
- •Read
docs/reports/dashboard-data.json - •Read
docs/reports/dashboard-template.html - •Compute all SVG ring offsets automatically (no manual math needed)
- •Replace all template placeholders with computed values
- •Write
docs/reports/status-dashboard.html
SVG math is handled automatically by the script. Do NOT manually compute offsets.
Step 7: Present summary
Print a text summary to the user:
Status Update -- Sprint N, Day X of Y ===================================== Executive Summary: [narrative paragraph] RAG Status: App Features -- XX/XX (YY%) Core Functionality -- Status Launch Readiness -- XX% CI/CD -- Status ORR -- Status Testing -- Status Sprint Progress: X/Y issues (Z%) Completed: #A, #B In progress: #C, #D Not started: #E Dashboard updated at docs/reports/status-dashboard.html
Step 8: Commit (if user approves)
Stage and commit the updated dashboard:
git add docs/reports/dashboard-data.json docs/reports/status-dashboard.html git commit --no-gpg-sign -m "Update status dashboard -- Sprint N, Day X" git push