Status Report
Draft-first: parse what the user gave, fill the schema, run the script. Only interview if the user explicitly asks.
Why this skill exists
Status reports live or die by consistency. The value isn't in the single-week artifact — it's that every week has the same sections in the same order, the same RAG scale, and an explicit trend comparison vs the prior week. Unskilled baselines drift: they reorder sections, rename "Risks" to "Concerns," forget to compare RAG week-over-week, and silently convert the user's exact metrics into rounded percentages. This skill nails the format to the wall.
Hard rules
- Never invent. Accomplishments, upcoming work, risks, issues, metrics, asks, dependencies — if the user didn't say it, it's not in the report. No
[TBD] filler either; an empty section is correct if nothing happened.
- Never assign a RAG color. If the user did not say Green/Yellow/Red, the RAG cell is
[TBD — PM to assign]. Do not infer.
- Trend only with a prior baseline. Show
↑ improving, ↓ declining, → stable ONLY if the user provided previous_rag or prior-week context. Otherwise show — no prior baseline. Do not guess.
- Risks vs Issues are different sections. Per Project+: a risk is a potential future event; an issue is happening now. Don't collapse them. If the user says "X is slowing us down right now," that's an issue. If they say "X might slip later," that's a risk.
- Preserve exact user wording for metrics and counts. "6 of 40 confirmed" stays "6 of 40 confirmed" — do NOT compute "15%". "Ahead of schedule" stays as text, not a fabricated "+3 days."
- Reporting-line managers never appear. If the user says "Aisha reports to Raj," Raj is not in the report. Full stop.
- Section order is fixed. Header → Executive Summary → RAG + Trend → Metrics (if any) → Accomplishments → Upcoming → Risks → Issues → Asks → Dependencies → Appendix (Draft Gaps if any). Same order every week. Do not editorialize the ordering.
- Asks have an owner and a needed-by. If either is missing, mark that field TBD — but keep the ask in the report.
- Fidelity pass. For every sentence in accomplishments/upcoming/risks/issues/asks/metrics, cite a verbatim phrase in the user's message. If you can't, leave the slot empty.
Run
python3 scripts/create_status.py --output "<dir>/<ProjectName>_Status_<week>.docx" <<'JSON'
{ ...schema... }
JSON
Script produces a .docx with the fixed section order, a RAG badge, a trend arrow when possible, and an Appendix listing any TBD items. Emits open_questions.md when gaps ≥ 5.
JSON schema
{
"header": {
"project_name": "string",
"project_manager": "string or [TBD]",
"sponsor": "string or [TBD]",
"week_ending": "YYYY-MM-DD",
"version": "v1"
},
"rag": "Green | Yellow | Red | [TBD — reason]",
"previous_rag": "Green | Yellow | Red or null",
"executive_summary": "string (1-2 sentences) or [TBD]",
"metrics": [
{"name": "string", "value": "string — user's verbatim wording", "target": "string or empty"}
],
"accomplishments": ["string — user's words"],
"upcoming": ["string"],
"risks": [
{"risk": "string", "status": "Open | Mitigating | Closed", "mitigation": "string or [TBD]"}
],
"issues": [
{"issue": "string", "owner": "string or [TBD]", "impact": "string or [TBD]"}
],
"asks": [
{"ask": "string", "owner": "string or [TBD]", "needed_by": "string or [TBD]"}
],
"dependencies": ["string"]
}
Notes:
metrics[i].value is a STRING, not a number. "6 of 40 confirmed" goes in verbatim. Do not convert to percentage.
previous_rag is null if the user didn't reference last week. The script handles the trend rendering.
- Empty arrays are valid and preferred over fabricated filler.
Worked example
User: "Weekly status for ServiceNow migration. Ken PM, reporting Priya. RAG yellow — last week was green. Field mapping complete ahead of schedule. Jen started ETL. Taylor drafted deck. Salesforce integration still has no owner, escalated to Priya, no reply yet. Ask: need owner confirmation by Friday. Upcoming: Jen continues ETL, Taylor runs workshop 1, mock cutover dry-run Tuesday."
Correct JSON:
{
"rag": "Yellow",
"previous_rag": "Green",
"accomplishments": [
"Field mapping complete ahead of schedule",
"Jen started ETL",
"Taylor drafted the training deck"
],
"upcoming": ["Jen continues ETL", "Taylor runs workshop 1", "Mock cutover dry-run Tuesday"],
"risks": [],
"issues": [
{"issue": "Salesforce integration has no owner", "owner": "[TBD]", "impact": "Escalated to Priya, no reply yet"}
],
"asks": [
{"ask": "Confirm Salesforce integration owner", "owner": "Priya Patel", "needed_by": "Friday"}
]
}
Note: Salesforce-no-owner is an issue (happening now), not a risk. RAG went Green → Yellow = ↓ declining. Do NOT invent a percentage for "ahead of schedule." Do NOT add filler accomplishments.
Grounding (Project+)
Status reports are the primary communication artifact to stakeholders. Project+ distinguishes risks (potential events that may occur) from issues (events that have occurred and are impacting the project). RAG (Red/Amber/Green) is the standard health indicator. Trend reporting (whether health is improving/declining vs the last period) is what makes status useful over time — a single Yellow is context-free; a Green→Yellow transition is a signal. This skill enforces that discipline structurally so PMs don't have to re-invent the format each week.
1---2name: status-report3description: Generate a Project+ style weekly project status report as .docx — executive summary, RAG with trend vs prior week, accomplishments, upcoming, risks vs issues (distinguished), asks, metrics, and dependencies. Use whenever a user needs to produce a status report, weekly update, steering committee update, stakeholder update, or "where are we" document. Triggers include "status report", "weekly status", "exec update", "sponsor update", "RAG status", "this week's update". Enforces never-invent discipline and structural consistency across reporting weeks so stakeholders can scan the same sections in the same order every time.4---56# Status Report78Draft-first: parse what the user gave, fill the schema, run the script. Only interview if the user explicitly asks.910## Why this skill exists1112Status reports live or die by **consistency**. The value isn't in the single-week artifact — it's that every week has the same sections in the same order, the same RAG scale, and an explicit trend comparison vs the prior week. Unskilled baselines drift: they reorder sections, rename "Risks" to "Concerns," forget to compare RAG week-over-week, and silently convert the user's exact metrics into rounded percentages. This skill nails the format to the wall.1314## Hard rules15161. **Never invent.** Accomplishments, upcoming work, risks, issues, metrics, asks, dependencies — if the user didn't say it, it's not in the report. No `[TBD]` filler either; an empty section is correct if nothing happened.172. **Never assign a RAG color.** If the user did not say Green/Yellow/Red, the RAG cell is `[TBD — PM to assign]`. Do not infer.183. **Trend only with a prior baseline.** Show `↑ improving`, `↓ declining`, `→ stable` ONLY if the user provided `previous_rag` or prior-week context. Otherwise show `— no prior baseline`. Do not guess.194. **Risks vs Issues are different sections.** Per Project+: a **risk** is a potential future event; an **issue** is happening now. Don't collapse them. If the user says "X is slowing us down right now," that's an issue. If they say "X might slip later," that's a risk.205. **Preserve exact user wording** for metrics and counts. "6 of 40 confirmed" stays "6 of 40 confirmed" — do NOT compute "15%". "Ahead of schedule" stays as text, not a fabricated "+3 days."216. **Reporting-line managers never appear.** If the user says "Aisha reports to Raj," Raj is not in the report. Full stop.227. **Section order is fixed.** Header → Executive Summary → RAG + Trend → Metrics (if any) → Accomplishments → Upcoming → Risks → Issues → Asks → Dependencies → Appendix (Draft Gaps if any). Same order every week. Do not editorialize the ordering.238. **Asks have an owner and a needed-by.** If either is missing, mark that field TBD — but keep the ask in the report.249. **Fidelity pass.** For every sentence in accomplishments/upcoming/risks/issues/asks/metrics, cite a verbatim phrase in the user's message. If you can't, leave the slot empty.2526## Run2728```bash29python3 scripts/create_status.py --output "<dir>/<ProjectName>_Status_<week>.docx" <<'JSON'30{ ...schema... }31JSON32```3334Script produces a .docx with the fixed section order, a RAG badge, a trend arrow when possible, and an Appendix listing any TBD items. Emits `open_questions.md` when gaps ≥ 5.3536## JSON schema3738```json39{40 "header": {41 "project_name": "string",42 "project_manager": "string or [TBD]",43 "sponsor": "string or [TBD]",44 "week_ending": "YYYY-MM-DD",45 "version": "v1"46 },47 "rag": "Green | Yellow | Red | [TBD — reason]",48 "previous_rag": "Green | Yellow | Red or null",49 "executive_summary": "string (1-2 sentences) or [TBD]",50 "metrics": [51 {"name": "string", "value": "string — user's verbatim wording", "target": "string or empty"}52 ],53 "accomplishments": ["string — user's words"],54 "upcoming": ["string"],55 "risks": [56 {"risk": "string", "status": "Open | Mitigating | Closed", "mitigation": "string or [TBD]"}57 ],58 "issues": [59 {"issue": "string", "owner": "string or [TBD]", "impact": "string or [TBD]"}60 ],61 "asks": [62 {"ask": "string", "owner": "string or [TBD]", "needed_by": "string or [TBD]"}63 ],64 "dependencies": ["string"]65}66```6768Notes:69- `metrics[i].value` is a STRING, not a number. "6 of 40 confirmed" goes in verbatim. Do not convert to percentage.70- `previous_rag` is `null` if the user didn't reference last week. The script handles the trend rendering.71- Empty arrays are valid and preferred over fabricated filler.7273## Worked example7475User: *"Weekly status for ServiceNow migration. Ken PM, reporting Priya. RAG yellow — last week was green. Field mapping complete ahead of schedule. Jen started ETL. Taylor drafted deck. Salesforce integration still has no owner, escalated to Priya, no reply yet. Ask: need owner confirmation by Friday. Upcoming: Jen continues ETL, Taylor runs workshop 1, mock cutover dry-run Tuesday."*7677Correct JSON:78```json79{80 "rag": "Yellow",81 "previous_rag": "Green",82 "accomplishments": [83 "Field mapping complete ahead of schedule",84 "Jen started ETL",85 "Taylor drafted the training deck"86 ],87 "upcoming": ["Jen continues ETL", "Taylor runs workshop 1", "Mock cutover dry-run Tuesday"],88 "risks": [],89 "issues": [90 {"issue": "Salesforce integration has no owner", "owner": "[TBD]", "impact": "Escalated to Priya, no reply yet"}91 ],92 "asks": [93 {"ask": "Confirm Salesforce integration owner", "owner": "Priya Patel", "needed_by": "Friday"}94 ]95}96```9798Note: Salesforce-no-owner is an **issue** (happening now), not a risk. RAG went Green → Yellow = `↓ declining`. Do NOT invent a percentage for "ahead of schedule." Do NOT add filler accomplishments.99100## Grounding (Project+)101102Status reports are the primary communication artifact to stakeholders. Project+ distinguishes **risks** (potential events that may occur) from **issues** (events that have occurred and are impacting the project). RAG (Red/Amber/Green) is the standard health indicator. Trend reporting (whether health is improving/declining vs the last period) is what makes status useful over time — a single Yellow is context-free; a Green→Yellow transition is a signal. This skill enforces that discipline structurally so PMs don't have to re-invent the format each week.