Normalize task manager and team identities to canonical dave and rj slugs
Problem
Rename team member files from davefowler.md/rj-andrews.md to dave.md/rj.md, update _team_identity_slug() to return nickname instead of file stem, and migrate all frontmatter references to canonical slugs.
Context
- Team member files are named
davefowler.mdandrj-andrews.mdbut canonical slugs aredaveandrj(thenicknamefield). _team_identity_slug()intasks/tools/task_cli.pyreturnspath.stem(e.g.davefowler), socompleted_byand other fields get non-canonical values.get_workstream_owner()defaults todavefowlerinstead ofdave.- Role files use
owner: davefowlerandfilled_by: rj-andrewsinstead of canonical slugs. - ~84 completed tasks have
completed_by: davefowler, 3 havecompleted_by: rj-andrews. - Runtime state in
.tasks/task_manager/has split keys (davevsdave-fowler). RJ_IDENTITIES/DAVE_IDENTITIESinscripts/task_manager_lib.pyenumerate aliases but the root cause is that non-canonical forms are produced in the first place.
Key files:
- tasks/team/davefowler.md → rename to tasks/team/dave.md
- tasks/team/rj-andrews.md → rename to tasks/team/rj.md
- tasks/tools/task_cli.py — _team_identity_slug(), get_workstream_owner()
- tasks/team/roles/*.md — owner and filled_by fields
- tasks/workstreams/*/tasks/*.md — completed_by frontmatter
- scripts/task_manager_lib.py — identity sets (keep as backward-compat aliases)
- tests/scripts/test_task_manager_scripts.py — test fixtures
Possible Solutions
A. Rename files + return nickname from _team_identity_slug() (Recommended)
Rename team files to dave.md / rj.md so the file stem matches the canonical slug. Update _team_identity_slug() to prefer nickname over path.stem. Migrate all existing frontmatter references.
- Pro: Single source of truth — the file name IS the canonical slug.
- Pro:
_team_identity_slug()returns the right value without special-casing. - Pro: Eliminates the root cause of non-canonical forms.
- Con: Bulk frontmatter update across ~90 task files.
B. Keep file names, only change _team_identity_slug() to return nickname
- Pro: Smaller diff — no file renames.
- Con: File stem and canonical slug diverge, causing confusion.
- Con: Doesn't clean up existing non-canonical references.
Plan
- Write a failing test that
_team_identity_slug("Dave Fowler")returnsdave(notdavefowler). - Rename
tasks/team/davefowler.md→tasks/team/dave.mdandtasks/team/rj-andrews.md→tasks/team/rj.md. - Update
_team_identity_slug()to returnnicknamewhen matched, falling back topath.stem. - Update
get_workstream_owner()default fromdavefowlertodave. - Update role files:
owner: davefowler→owner: dave,filled_by: rj-andrews→filled_by: rj. - Bulk-update task frontmatter:
completed_by: davefowler→completed_by: dave,completed_by: rj-andrews→completed_by: rj. - Update test fixtures that use
davefowler/rj-andrewsas person identities. - Run
just task validateandjust ci.
Implementation Progress
- Wrote failing test
test_team_identity_slug_returns_canonical_nicknameproving_team_identity_slugreturns file stem instead of nickname. - Fixed
_team_identity_slug()to returnnicknamefrom team file frontmatter when present, falling back topath.stem. - Renamed
tasks/team/davefowler.md→dave.mdandtasks/team/rj-andrews.md→rj.md. - Updated
get_workstream_owner()default fromdavefowlertodave. - Updated all 7 role files:
owner: davefowler→dave,filled_by: rj-andrews→rj. - Bulk-updated ~80 task files:
completed_by: davefowler→dave,completed_by: rj-andrews→rj. - Updated test fixtures in
test_task_cli.py,test_tasks_activity.py,test_task_manager_scripts.py. - All 100 focused tests pass.
- Review feedback: fixed 3 missed index files (
tasks/team/index.md,tasks/guidebook/index.md,tasks/concepts/index.md) — updatedowner: davefowler→daveand fixed broken member links inteam/index.md. - Updated stale context references in
make-task-manager-route-tasks-by-role-owner-mapping.md.
QA Exploration
N/A — pure backend/infra change with no UI surface.
- [x] QA exploration completed (or N/A for non-UI tasks)
Review Feedback
- [ ] Review cleared