[ { "id": "T001", "description": "Migration: `reports_to` column exists on `users` table and is nullable UUID", "implemented": true, "featureIds": [ "F001" ] }, { "id": "T002", "description": "Migration: `reports_to` FK references `users(user_id)` — inserting invalid UUID fails", "implemented": true, "featureIds": [ "F001" ] }, { "id": "T003", "description": "Migration seed: users who are team members get `reports_to` set to their team's `manager_id`", "implemented": true, "featureIds": [ "F002" ] }, { "id": "T004", "description": "Migration seed: team managers do not get `reports_to` set to themselves", "implemented": true, "featureIds": [ "F002" ] }, { "id": "T005", "description": "Migration seed: users in multiple teams (same manager) get correct `reports_to` value", "implemented": true, "featureIds": [ "F002" ] }, { "id": "T006", "description": "Migration seed: users not in any team have `reports_to = NULL`", "implemented": true, "featureIds": [ "F002" ] }, { "id": "T007", "description": "Cycle prevention: setting A.reports_to = B where B.reports_to = A is rejected", "implemented": true, "featureIds": [ "F003" ] }, { "id": "T008", "description": "Cycle prevention: setting A.reports_to = A (self-reference) is rejected", "implemented": true, "featureIds": [ "F003" ] }, { "id": "T009", "description": "Cycle prevention: deep chain cycle (A→B→C→D→A) is detected and rejected", "implemented": true, "featureIds": [ "F003" ] }, { "id": "T010", "description": "Cycle prevention: valid chain (A→B→C, setting D→C) is accepted", "implemented": true, "featureIds": [ "F003" ] }, { "id": "T011", "description": "`IUser` interface includes optional `reports_to` field", "implemented": true, "featureIds": [ "F004" ] }, { "id": "T012", "description": "User edit form: 'Reports To' dropdown is visible when `teams-v2` flag is on", "implemented": true, "featureIds": [ "F005" ] }, { "id": "T013", "description": "User edit form: 'Reports To' dropdown is hidden when `teams-v2` flag is off", "implemented": true, "featureIds": [ "F007" ] }, { "id": "T014", "description": "User edit form: 'Reports To' dropdown lists all users in the tenant except the current user", "implemented": true, "featureIds": [ "F005" ] }, { "id": "T015", "description": "User edit form: saving a valid `reports_to` value persists to database", "implemented": true, "featureIds": [ "F006" ] }, { "id": "T016", "description": "User edit form: saving a `reports_to` value that creates a cycle shows error", "implemented": true, "featureIds": [ "F006" ] }, { "id": "T017", "description": "User edit form: clearing `reports_to` (set to NULL) persists correctly", "implemented": true, "featureIds": [ "F006" ] }, { "id": "T018", "description": "Org chart: displays tree with correct parent-child relationships based on `reports_to`", "implemented": true, "featureIds": [ "F008" ] }, { "id": "T019", "description": "Org chart: users with `reports_to = NULL` appear as top-level root nodes", "implemented": true, "featureIds": [ "F009" ] }, { "id": "T020", "description": "Org chart: hidden when `teams-v2` flag is off", "implemented": true, "featureIds": [ "F010" ] }, { "id": "T021", "description": "`isInReportsToChain(B, A)` returns true when A.reports_to = B (direct report)", "implemented": true, "featureIds": [ "F011" ] }, { "id": "T022", "description": "`isInReportsToChain(C, A)` returns true when A→B→C (transitive — two levels)", "implemented": true, "featureIds": [ "F011" ] }, { "id": "T023", "description": "`isInReportsToChain(D, A)` returns true for deep chain A→B→C→D (three+ levels)", "implemented": true, "featureIds": [ "F011" ] }, { "id": "T024", "description": "`isInReportsToChain(X, A)` returns false when X is not in A's reporting chain", "implemented": true, "featureIds": [ "F011" ] }, { "id": "T025", "description": "`isInReportsToChain` handles arbitrarily deep chains without stack overflow", "implemented": true, "featureIds": [ "F011" ] }, { "id": "T026", "description": "Timesheet approval: manager can approve direct report's timesheet via `reports_to` chain when flag is on", "implemented": true, "featureIds": [ "F012", "F014" ] }, { "id": "T027", "description": "Timesheet approval: manager-of-manager can approve indirect report's timesheet via `reports_to` chain when flag is on", "implemented": true, "featureIds": [ "F012", "F014" ] }, { "id": "T028", "description": "Timesheet approval: existing team-manager approval still works regardless of flag state", "implemented": true, "featureIds": [ "F013" ] }, { "id": "T029", "description": "Timesheet approval: `reports_to` chain check is NOT active when flag is off", "implemented": true, "featureIds": [ "F012" ] }, { "id": "T030", "description": "Timesheet approval: user with `timesheet:read_all` can still approve anyone (unchanged)", "implemented": true, "featureIds": [ "F013" ] }, { "id": "T031", "description": "`fetchTimeSheetsForApproval` returns timesheets from `reports_to` subordinates when flag is on", "implemented": true, "featureIds": [ "F014" ] }, { "id": "T032", "description": "AvailabilitySettings: shows `reports_to` subordinates in user list when flag is on", "implemented": true, "featureIds": [ "F015" ] }, { "id": "T033", "description": "SchedulePage: includes `reports_to` subordinates in managed users scope when flag is on", "implemented": true, "featureIds": [ "F016" ] }, { "id": "T034", "description": "Migration: `role` column exists on `team_members` with default value 'member'", "implemented": true, "featureIds": [ "F017" ] }, { "id": "T035", "description": "Migration: existing team members matching `teams.manager_id` have `role = 'lead'`", "implemented": true, "featureIds": [ "F018" ] }, { "id": "T036", "description": "Migration: `assigned_team_id` column exists on `tickets` table and is nullable", "implemented": true, "featureIds": [ "F020" ] }, { "id": "T037", "description": "Migration: `assigned_team_id` column exists on `project_tasks` table and is nullable", "implemented": true, "featureIds": [ "F021" ] }, { "id": "T038", "description": "`ITicket` interface includes optional `assigned_team_id`", "implemented": true, "featureIds": [ "F022" ] }, { "id": "T039", "description": "`IProjectTask` interface includes optional `assigned_team_id`", "implemented": true, "featureIds": [ "F023" ] }, { "id": "T040", "description": "Team assignment to ticket (no primary): sets `assigned_team_id`, sets lead as `assigned_to`, adds other members as `ticket_resources`", "implemented": true, "featureIds": [ "F024" ] }, { "id": "T041", "description": "Team assignment to ticket (no primary): lead is NOT added as `ticket_resources` (would violate DB constraint)", "implemented": true, "featureIds": [ "F026" ] }, { "id": "T042", "description": "Team assignment to ticket (existing primary): `assigned_to` stays unchanged, all team members added as resources except current `assigned_to`", "implemented": true, "featureIds": [ "F025" ] }, { "id": "T043", "description": "Team assignment to ticket (existing primary is the lead): lead not double-assigned, other members added as resources", "implemented": true, "featureIds": [ "F025", "F026" ] }, { "id": "T044", "description": "Team assignment: resources added via team have `role = 'team_member'` in `ticket_resources`", "implemented": true, "featureIds": [ "F024" ] }, { "id": "T045", "description": "Team assignment: members already present as individual `ticket_resources` are not duplicated", "implemented": true, "featureIds": [ "F024" ] }, { "id": "T046", "description": "Team assignment to project task: same logic works for `project_tasks`", "implemented": true, "featureIds": [ "F027" ] }, { "id": "T047", "description": "`UserAndTeamPicker`: renders users section and teams section with visible separator", "implemented": true, "featureIds": [ "F028" ] }, { "id": "T048", "description": "`UserAndTeamPicker`: typing in search filters both users and teams", "implemented": true, "featureIds": [ "F029" ] }, { "id": "T049", "description": "`UserAndTeamPicker`: teams display member count and lead name", "implemented": true, "featureIds": [ "F030" ] }, { "id": "T050", "description": "`UserAndTeamPicker`: teams use generic team icon, users use avatar", "implemented": true, "featureIds": [ "F031" ] }, { "id": "T051", "description": "`UserAndTeamPicker`: selecting a team triggers team assignment action", "implemented": true, "featureIds": [ "F032" ] }, { "id": "T052", "description": "`UserAndTeamPicker`: selecting a user works identically to existing `UserPicker`", "implemented": true, "featureIds": [ "F033" ] }, { "id": "T053", "description": "Feature flag swap: `UserAndTeamPicker` renders on ticket detail when `teams-v2` is on", "implemented": true, "featureIds": [ "F034" ] }, { "id": "T054", "description": "Feature flag swap: `UserAndTeamPicker` renders on task detail when `teams-v2` is on", "implemented": true, "featureIds": [ "F035" ] }, { "id": "T055", "description": "Feature flag swap: `UserPicker` renders unchanged when `teams-v2` is off", "implemented": true, "featureIds": [ "F036" ] }, { "id": "T056", "description": "Team badge: chip appears on 'Agent team' card when `assigned_team_id` is set and flag is on", "implemented": true, "featureIds": [ "F037" ] }, { "id": "T057", "description": "Team badge: chip shows generic team icon + team name + x button", "implemented": true, "featureIds": [ "F037" ] }, { "id": "T058", "description": "Team badge: chip follows same styling as Additional Agents chips", "implemented": true, "featureIds": [ "F037" ] }, { "id": "T059", "description": "Team badge: hidden when `teams-v2` flag is off even if `assigned_team_id` has a value", "implemented": true, "featureIds": [ "F038" ] }, { "id": "T060", "description": "Team removal: clicking x on team badge opens confirmation dialog", "implemented": true, "featureIds": [ "F039" ] }, { "id": "T061", "description": "Team removal: 'Remove all' removes `ticket_resources` with `role = 'team_member'` and clears `assigned_team_id`", "implemented": true, "featureIds": [ "F040" ] }, { "id": "T062", "description": "Team removal: 'Keep all' clears `assigned_team_id` only, all resources stay", "implemented": true, "featureIds": [ "F041" ] }, { "id": "T063", "description": "Team removal: individual checkboxes allow selective member removal", "implemented": true, "featureIds": [ "F042" ] }, { "id": "T064", "description": "Team removal: primary `assigned_to` is never automatically removed", "implemented": true, "featureIds": [ "F043" ] }, { "id": "T065", "description": "Team removal: manually-added agents (not `role = 'team_member'`) are not affected by 'Remove all'", "implemented": true, "featureIds": [ "F040" ] }, { "id": "T066", "description": "Independence: adding a new individual agent does not affect team badge or `assigned_team_id`", "implemented": true, "featureIds": [ "F044" ] }, { "id": "T067", "description": "Independence: removing an individual agent does not affect team badge or `assigned_team_id`", "implemented": true, "featureIds": [ "F044" ] }, { "id": "T068", "description": "Independence: SLA escalation adding an agent does not trigger team removal", "implemented": true, "featureIds": [ "F044" ] }, { "id": "T069", "description": "Snapshot: changing team roster after assignment does not update existing ticket resources", "implemented": true, "featureIds": [ "F045" ] }, { "id": "T070", "description": "'Assigned To' filter: shows teams in dropdown alongside users when flag is on", "implemented": true, "featureIds": [ "F046" ] }, { "id": "T071", "description": "'Assigned To' filter: selecting a team filters tickets by `assigned_team_id`", "implemented": true, "featureIds": [ "F047" ] }, { "id": "T072", "description": "'Assigned To' filter: selecting a user still filters by `assigned_to` (existing behavior preserved)", "implemented": true, "featureIds": [ "F047" ] }, { "id": "T073", "description": "'Assigned To' filter: shows only users (no teams) when flag is off", "implemented": true, "featureIds": [ "F048" ] }, { "id": "T074", "description": "Workflow: `tickets.create` with `assignee: { type: 'team', id: teamId }` assigns team correctly", "implemented": true, "featureIds": [ "F049" ] }, { "id": "T075", "description": "Workflow: `tickets.create` with `assignee: { type: 'user', id: userId }` still works (existing behavior)", "implemented": true, "featureIds": [ "F049" ] }, { "id": "T076", "description": "Tenant export includes `reports_to` column from users", "implemented": true, "featureIds": [ "F050" ] }, { "id": "T077", "description": "Tenant export includes `assigned_team_id` from tickets and project_tasks", "implemented": true, "featureIds": [ "F050" ] }, { "id": "T078", "description": "Tenant export includes `role` from team_members", "implemented": true, "featureIds": [ "F050" ] }, { "id": "T079", "description": "Multi-tenant: `reports_to` queries are tenant-scoped", "implemented": true, "featureIds": [ "F001", "F011" ] }, { "id": "T080", "description": "Multi-tenant: team assignment queries are tenant-scoped", "implemented": true, "featureIds": [ "F024" ] }, { "id": "T081", "description": "Multi-tenant: `assigned_team_id` filter queries are tenant-scoped", "implemented": true, "featureIds": [ "F047" ] } ]