Hermes 284313f908
Some checks are pending
Bidi Control Character Guard / bidi-control-guard (push) Waiting to run
Circular Dependency Check / Check for new circular dependencies (push) Waiting to run
Citus Migration Smoke / Combined migrations on single-node Citus (push) Waiting to run
E2E Fresh Install Tests / fresh-install-e2e (push) Waiting to run
ext-v2 guardrails / Run ext-v2 guard and ESLint (push) Waiting to run
Integration Tests / Check for relevant changes (push) Waiting to run
Integration Tests / ${{ (github.event_name == 'schedule' || github.event.inputs.suite == 'full') && 'Full integration suite' || 'Tier-1 integration subset' }} (push) Blocked by required conditions
Mobile checks / Mobile lint + typecheck (push) Waiting to run
Mobile checks / Mobile unit tests (push) Waiting to run
Mobile checks / Mobile dependency audit (report) (push) Waiting to run
Mobile checks / Mobile reproducibility checks (push) Waiting to run
Secrets guard (env backups) / Ensure no tracked env backup files (push) Waiting to run
Temporal Readiness / fast-readiness (push) Waiting to run
Temporal Readiness / docker-parity (push) Waiting to run
TypeScript Type Check / Nx affected typecheck (push) Waiting to run
Unit Tests / Skipped-test budget (push) Waiting to run
Unit Tests / Nx affected unit tests (push) Waiting to run
Unit Tests / Server unit coverage (informational) (push) Waiting to run
Validate Tenant Management Schema / Check for relevant changes (push) Waiting to run
Validate Tenant Management Schema / Validate Tenant Management Schema (push) Blocked by required conditions
EE Workflows Build Guard / ee-workflows-build-guard (push) Waiting to run
Initial import of AlgaPSA codebase from PSA server
Excluded: .git, node_modules, secrets/, compose.env, assemblyscript tgz

Source: /opt/alga-psa on psa.joliet.tech
2026-06-22 16:12:17 -05:00

347 lines
8.6 KiB
JSON

[
{
"id": "F051",
"description": "Migration: Update `document_associations` entity_type CHECK constraint to include 'team' (Citus-compliant, NOT VALID, transaction: false)",
"implemented": true,
"prdRefs": [
"FR-3A.1",
"NFR-3.2"
]
},
{
"id": "F052",
"description": "Add 'team' to EntityType union in `packages/media/src/lib/avatarUtils.ts`",
"implemented": true,
"prdRefs": [
"FR-3A.2"
]
},
{
"id": "F053",
"description": "Add 'team' to EntityType union in `packages/users/src/lib/avatarUtils.ts`",
"implemented": true,
"prdRefs": [
"FR-3A.2"
]
},
{
"id": "F054",
"description": "Add 'team' to EntityType union in `packages/formatting/src/avatarUtils.ts`",
"implemented": true,
"prdRefs": [
"FR-3A.2"
]
},
{
"id": "F055",
"description": "Add 'team' to EntityType union in `packages/ui/src/components/EntityImageUpload.tsx`",
"implemented": true,
"prdRefs": [
"FR-3A.2"
]
},
{
"id": "F056",
"description": "Add `getTeamAvatarUrl()` helper function in `packages/media/src/lib/avatarUtils.ts`",
"implemented": true,
"prdRefs": [
"FR-3A.3"
]
},
{
"id": "F057",
"description": "Create `TeamAvatar` component in `packages/ui/src/components/TeamAvatar.tsx` (thin wrapper around EntityAvatar, following UserAvatar pattern)",
"implemented": true,
"prdRefs": [
"FR-3A.4"
]
},
{
"id": "F058",
"description": "Create `uploadTeamAvatar` server action in `packages/teams/src/actions/team-actions/avatarActions.ts` using `uploadEntityImage('team', ...)`",
"implemented": true,
"prdRefs": [
"FR-3A.5",
"FR-3A.11"
]
},
{
"id": "F059",
"description": "Create `deleteTeamAvatar` server action in `packages/teams/src/actions/team-actions/avatarActions.ts` using `deleteEntityImage('team', ...)`",
"implemented": true,
"prdRefs": [
"FR-3A.6",
"FR-3A.11"
]
},
{
"id": "F060",
"description": "Create `getTeamAvatarUrlAction` server action in teams package",
"implemented": true,
"prdRefs": [
"FR-3A.7"
]
},
{
"id": "F061",
"description": "Create `getTeamAvatarUrlsBatchAction` server action in teams package for batch avatar URL fetching",
"implemented": true,
"prdRefs": [
"FR-3A.8"
]
},
{
"id": "F062",
"description": "Export avatar actions from `packages/teams/src/actions/team-actions/index.ts`",
"implemented": true,
"prdRefs": [
"FR-3A.5",
"FR-3A.6",
"FR-3A.7",
"FR-3A.8"
]
},
{
"id": "F063",
"description": "Add `@alga-psa/media`, `@alga-psa/auth`, `swr` dependencies to `packages/teams/package.json`",
"implemented": true,
"prdRefs": [
"NFR-3.3"
]
},
{
"id": "F064",
"description": "Create `useTeamAvatar` SWR hook in `packages/teams/src/hooks/useTeamAvatar.ts` (following useUserAvatar pattern)",
"implemented": true,
"prdRefs": [
"FR-3A.9"
]
},
{
"id": "F065",
"description": "Export `useTeamAvatar` from `packages/teams/src/hooks/index.ts`",
"implemented": true,
"prdRefs": [
"FR-3A.9"
]
},
{
"id": "F066",
"description": "Add team avatar upload UI to `TeamDetails.tsx` using EntityImageUpload (above team name field)",
"implemented": true,
"prdRefs": [
"FR-3A.10"
]
},
{
"id": "F067",
"description": "Team avatar upload refreshes avatar display after successful upload",
"implemented": true,
"prdRefs": [
"FR-3A.10"
]
},
{
"id": "F068",
"description": "Create `OrgChartNode` custom ReactFlow node component (card with UserAvatar, name, role, inactive badge)",
"implemented": true,
"prdRefs": [
"FR-3B.1"
]
},
{
"id": "F069",
"description": "Create `OrgChart` container component with ReactFlow canvas and ReactFlowProvider",
"implemented": true,
"prdRefs": [
"FR-3B.2",
"NFR-3.5"
]
},
{
"id": "F070",
"description": "OrgChart: build tree from `reports_to` relationships and compute top-down hierarchical node positions",
"implemented": true,
"prdRefs": [
"FR-3B.3"
]
},
{
"id": "F071",
"description": "OrgChart: create smoothstep edges between parent and child nodes",
"implemented": true,
"prdRefs": [
"FR-3B.3"
]
},
{
"id": "F072",
"description": "OrgChart: `fitView` on initial render with zoom/pan enabled, nodes not draggable",
"implemented": true,
"prdRefs": [
"FR-3B.4"
]
},
{
"id": "F073",
"description": "OrgChart: clicking a node opens UserDetails drawer via `useDrawer`",
"implemented": true,
"prdRefs": [
"FR-3B.5"
]
},
{
"id": "F074",
"description": "OrgChart: batch-fetch user avatar URLs for all displayed nodes",
"implemented": true,
"prdRefs": [
"FR-3B.6"
]
},
{
"id": "F075",
"description": "OrgChart: ReactFlow imported dynamically with `{ ssr: false }` to prevent SSR errors",
"implemented": true,
"prdRefs": [
"NFR-3.5"
]
},
{
"id": "F076",
"description": "UserManagement: merge portal-type and list/structure ViewSwitchers into one row in CardHeader",
"implemented": true,
"prdRefs": [
"FR-3B.7"
]
},
{
"id": "F077",
"description": "UserManagement: remove duplicate list/org ViewSwitcher from list view toolbar (lines 668-673)",
"implemented": true,
"prdRefs": [
"FR-3B.8"
]
},
{
"id": "F078",
"description": "UserManagement: remove duplicate list/org ViewSwitcher from org view header (lines 696-706)",
"implemented": true,
"prdRefs": [
"FR-3B.8"
]
},
{
"id": "F079",
"description": "UserManagement: rename 'Org Chart' label to 'Structure' in userViewOptions",
"implemented": true,
"prdRefs": [
"FR-3B.9"
]
},
{
"id": "F080",
"description": "UserManagement: replace inline nested-list org chart rendering with new OrgChart component",
"implemented": true,
"prdRefs": [
"FR-3B.10"
]
},
{
"id": "F081",
"description": "UserManagement: remove old `buildOrgTree` and `renderOrgNode` functions (logic moved to OrgChart)",
"implemented": true,
"prdRefs": [
"FR-3B.10"
]
},
{
"id": "F082",
"description": "OrgChart and Structure toggle hidden when `teams-v2` flag is off",
"implemented": true,
"prdRefs": [
"FR-3B.11",
"NFR-3.1"
]
},
{
"id": "F083",
"description": "`UserAndTeamPicker`: replace hardcoded gray circle + TeamIcon with `TeamAvatar` component",
"implemented": true,
"prdRefs": [
"FR-3C.1"
]
},
{
"id": "F084",
"description": "`UserAndTeamPicker`: add optional `getTeamAvatarUrlsBatch` prop",
"implemented": true,
"prdRefs": [
"FR-3C.2"
]
},
{
"id": "F085",
"description": "`UserAndTeamPicker`: batch-fetch team avatar URLs when dropdown opens or teams change",
"implemented": true,
"prdRefs": [
"FR-3C.3"
]
},
{
"id": "F086",
"description": "Create `MultiUserAndTeamPicker` component in `packages/ui/src/components/MultiUserAndTeamPicker.tsx` (copy of MultiUserPicker with team logic + TeamAvatar)",
"implemented": true,
"prdRefs": [
"FR-3D.1"
]
},
{
"id": "F087",
"description": "`MultiUserAndTeamPicker`: replace all hardcoded TeamIcon instances with `TeamAvatar` component",
"implemented": true,
"prdRefs": [
"FR-3D.2"
]
},
{
"id": "F088",
"description": "`MultiUserAndTeamPicker`: add `getTeamAvatarUrlsBatch` prop and batch-fetch team avatar URLs",
"implemented": true,
"prdRefs": [
"FR-3D.3"
]
},
{
"id": "F089",
"description": "Remove team props and team logic from original `MultiUserPicker` (teams, teamFilterFn, team rendering, stale team cleanup)",
"implemented": true,
"prdRefs": [
"FR-3D.4"
]
},
{
"id": "F090",
"description": "Call sites swap `MultiUserPicker` \u2192 `MultiUserAndTeamPicker` when `teams-v2` flag is enabled",
"implemented": true,
"prdRefs": [
"FR-3D.5"
]
},
{
"id": "F091",
"description": "Thread `getTeamAvatarUrlsBatchAction` through `MultiUserAndTeamPicker` call sites (ticket detail, task detail, ticket filter)",
"implemented": true,
"prdRefs": [
"FR-3D.6"
]
},
{
"id": "F092",
"description": "Pickers show colored initials (EntityAvatar fallback) when no team avatar URL is available \u2014 no more generic gray circles",
"implemented": true,
"prdRefs": [
"FR-3D.7"
]
}
]