Team Roster
Generate a Project+ team roster .xlsx. Draft-first: parse what the user gave, fill schema with facts + TBDs, run the script. Only interview if the user explicitly asks.
Hard rules
- Never invent people, names, titles, availability, managers, or contact methods. Anything not in the user's message →
[TBD — <reason>]. Preserve exact user phrasing ("half time" stays "half time").
- Reporting-line managers are NOT team members. If the user says "Marcus reports to Alicia" or "6 engineers led by Raj", Alicia/Raj go in the
manager field of the people they manage — they do NOT get their own row. Exception: the sponsor. Before running the script, check every row: "Did the user describe this person as doing project work, or only as someone's boss?" If only boss → delete the row.
- Core vs. Extended: only Core if the user explicitly said so. Else
[TBD].
- "N engineers" with no names → N rows with
name: "[TBD — only count given]". Do not invent "Engineer 1".
Run it
Pipe JSON directly to the script (one call, no temp file):
python3 scripts/create_roster.py --output "<dir>/<ProjectName>_Team_Roster_v1.xlsx" <<'JSON'
{ ...schema... }
JSON
The script handles formatting, TBD highlighting, Draft Gaps sheet, and open_questions.md when TBDs ≥ 5.
JSON schema
{
"header": {
"project_name": "string",
"project_manager": "string or [TBD]",
"sponsor": "string or [TBD]",
"date": "YYYY-MM-DD",
"version": "v1"
},
"members": [
{
"name": "string or [TBD]",
"job_position": "string or [TBD]",
"core_or_extended": "Core | Extended | [TBD]",
"subteam": "string or [TBD]",
"responsibilities": "string or [TBD]",
"availability": "e.g. 100%, 2 days/wk, or [TBD]",
"manager": "string or [TBD]",
"organization": "string or [TBD]",
"contact_method": "string or [TBD]"
}
]
}
Keep responsibilities ≤ 2 sentences per member. Any field may be [TBD — reason].
1---2name: team-roster3description: Generate a Project+ style team roster as a .xlsx listing every known project team member with role, responsibilities, availability, manager, contact, and core/extended status. Use whenever a user needs to capture "who is on the project" in a structured artifact — triggers include "team roster", "project team", "staffing plan", "team structure", "who's on the project", "team list", "resource roster", or any context where a PM is standing up a team. Enforces Project+ conventions and prevents fabrication of people, titles, or details the user never stated.4---56# Team Roster78Generate a Project+ team roster .xlsx. Draft-first: parse what the user gave, fill schema with facts + TBDs, run the script. Only interview if the user explicitly asks.910## Hard rules11121. **Never invent people, names, titles, availability, managers, or contact methods.** Anything not in the user's message → `[TBD — <reason>]`. Preserve exact user phrasing ("half time" stays "half time").132. **Reporting-line managers are NOT team members.** If the user says *"Marcus reports to Alicia"* or *"6 engineers led by Raj"*, Alicia/Raj go in the `manager` field of the people they manage — they do **NOT** get their own row. Exception: the sponsor. Before running the script, check every row: *"Did the user describe this person as doing project work, or only as someone's boss?"* If only boss → delete the row.143. **Core vs. Extended:** only Core if the user explicitly said so. Else `[TBD]`.154. **"N engineers" with no names** → N rows with `name: "[TBD — only count given]"`. Do not invent "Engineer 1".1617## Run it1819Pipe JSON directly to the script (one call, no temp file):2021```bash22python3 scripts/create_roster.py --output "<dir>/<ProjectName>_Team_Roster_v1.xlsx" <<'JSON'23{ ...schema... }24JSON25```2627The script handles formatting, TBD highlighting, Draft Gaps sheet, and `open_questions.md` when TBDs ≥ 5.2829## JSON schema3031```json32{33 "header": {34 "project_name": "string",35 "project_manager": "string or [TBD]",36 "sponsor": "string or [TBD]",37 "date": "YYYY-MM-DD",38 "version": "v1"39 },40 "members": [41 {42 "name": "string or [TBD]",43 "job_position": "string or [TBD]",44 "core_or_extended": "Core | Extended | [TBD]",45 "subteam": "string or [TBD]",46 "responsibilities": "string or [TBD]",47 "availability": "e.g. 100%, 2 days/wk, or [TBD]",48 "manager": "string or [TBD]",49 "organization": "string or [TBD]",50 "contact_method": "string or [TBD]"51 }52 ]53}54```5556Keep responsibilities ≤ 2 sentences per member. Any field may be `[TBD — reason]`.