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

231 lines
7.8 KiB
JSON

[
{
"id": "T001",
"description": "Migration: creates the per-client visibility groups table with tenant and client ownership fields.",
"implemented": true,
"featureIds": ["F001"]
},
{
"id": "T002",
"description": "Migration: creates the group-to-board membership table with tenant-scoped references.",
"implemented": true,
"featureIds": ["F002"]
},
{
"id": "T003",
"description": "Migration: adds the single-group contact assignment field or equivalent structure with `NULL` representing unrestricted access.",
"implemented": true,
"featureIds": ["F003"]
},
{
"id": "T004",
"description": "Migration/backward compatibility: existing contacts and portal users remain unrestricted when no group assignment exists.",
"implemented": true,
"featureIds": ["F004", "F008"]
},
{
"id": "T005",
"description": "Integration: effective board resolver returns unrestricted access when a contact has no assigned group.",
"implemented": true,
"featureIds": ["F005", "F008"]
},
{
"id": "T006",
"description": "Integration: effective board resolver returns exactly the assigned group's allowed board IDs for a restricted contact.",
"implemented": true,
"featureIds": ["F005"]
},
{
"id": "T007",
"description": "Guard: effective board resolver rejects or ignores groups that belong to a different client or tenant.",
"implemented": true,
"featureIds": ["F006"]
},
{
"id": "T008",
"description": "Integration: client portal ticket list only returns tickets from boards in the assigned visibility group.",
"implemented": true,
"featureIds": ["F007"]
},
{
"id": "T009",
"description": "Regression: client portal ticket list still returns all client tickets for an unassigned contact.",
"implemented": true,
"featureIds": ["F008"]
},
{
"id": "T010",
"description": "Integration: client portal ticket detail succeeds for a ticket on a visible board.",
"implemented": true,
"featureIds": ["F009"]
},
{
"id": "T011",
"description": "Guard: client portal ticket detail rejects direct access to a ticket on a hidden board.",
"implemented": true,
"featureIds": ["F009"]
},
{
"id": "T012",
"description": "Guard: client portal ticket documents or comments cannot be loaded for a ticket on a hidden board.",
"implemented": true,
"featureIds": ["F010"]
},
{
"id": "T013",
"description": "Integration: client portal ticket creation form only lists allowed boards for a restricted contact.",
"implemented": true,
"featureIds": ["F011"]
},
{
"id": "T014",
"description": "Integration: client portal ticket creation default board selection stays within the allowed board set.",
"implemented": true,
"featureIds": ["F011"]
},
{
"id": "T015",
"description": "Guard: client portal ticket creation rejects a disallowed board even if the board ID is submitted manually.",
"implemented": true,
"featureIds": ["F012"]
},
{
"id": "T016",
"description": "Regression: unassigned contacts can still create tickets using the current unrestricted behavior.",
"implemented": true,
"featureIds": ["F004", "F012"]
},
{
"id": "T017",
"description": "Integration: ticket-backed dashboard counts or summaries only include boards visible to the current restricted contact.",
"implemented": true,
"featureIds": ["F013"]
},
{
"id": "T018",
"description": "UI/action: client portal admin can list visibility groups for their own client.",
"implemented": true,
"featureIds": ["F014"]
},
{
"id": "T019",
"description": "Guard: non-admin client portal users are denied access to visibility group listing actions and UI.",
"implemented": true,
"featureIds": ["F018"]
},
{
"id": "T020",
"description": "Guard: client portal admins cannot list or fetch visibility groups for a different client.",
"implemented": true,
"featureIds": ["F014", "F018"]
},
{
"id": "T021",
"description": "UI/action: client portal admin can create a visibility group with selected board membership.",
"implemented": true,
"featureIds": ["F015"]
},
{
"id": "T022",
"description": "UI/action: client portal admin can edit a group's name and board membership.",
"implemented": true,
"featureIds": ["F015"]
},
{
"id": "T023",
"description": "Guard: client portal admin cannot add boards from another client or tenant to a visibility group.",
"implemented": true,
"featureIds": ["F015", "F006"]
},
{
"id": "T024",
"description": "UI/action: client portal admin can assign a visibility group to a contact in the same client.",
"implemented": true,
"featureIds": ["F016"]
},
{
"id": "T025",
"description": "UI/action: client portal admin can clear a contact's assignment back to unrestricted full access.",
"implemented": true,
"featureIds": ["F016"]
},
{
"id": "T026",
"description": "Guard: client portal admin cannot assign a group from one client to a contact in another client.",
"implemented": true,
"featureIds": ["F016", "F006"]
},
{
"id": "T027",
"description": "Lifecycle: a contact without a portal user can receive a visibility group assignment before invitation or account creation.",
"implemented": true,
"featureIds": ["F017"]
},
{
"id": "T028",
"description": "Lifecycle: a preconfigured contact assignment is still effective after the portal user account is created and linked to that contact.",
"implemented": true,
"featureIds": ["F017"]
},
{
"id": "T029",
"description": "UI/action: MSP staff can view and replace the effective visibility group from the PSA contact portal tab.",
"implemented": true,
"featureIds": ["F019"]
},
{
"id": "T030",
"description": "UI/action: MSP staff can create and edit per-client visibility groups from the PSA-side management flow.",
"implemented": true,
"featureIds": ["F020"]
},
{
"id": "T031",
"description": "Integration: when MSP staff replace a contact assignment, the new group is immediately reflected in client portal ticket visibility.",
"implemented": true,
"featureIds": ["F021", "F019"]
},
{
"id": "T032",
"description": "Integration: when a client portal admin changes the same contact assignment later, the latest assignment wins without lock semantics.",
"implemented": true,
"featureIds": ["F021", "F016"]
},
{
"id": "T033",
"description": "Guard: deleting a group that is currently assigned to one or more contacts is blocked with a clear error response.",
"implemented": true,
"featureIds": ["F022"]
},
{
"id": "T034",
"description": "Happy path: deleting an unassigned visibility group succeeds.",
"implemented": true,
"featureIds": ["F023"]
},
{
"id": "T035",
"description": "Localization: English client portal locale contains every new board-visibility group key used by the client portal admin UI.",
"implemented": true,
"featureIds": ["F024"]
},
{
"id": "T036",
"description": "Localization parity: `de`, `es`, `fr`, `it`, `nl`, `pl`, `xx`, and `yy` client portal locale files contain the same new board-visibility keys as `en`.",
"implemented": true,
"featureIds": ["F024"]
},
{
"id": "T037",
"description": "UI: an assigned group with zero boards yields a localized empty state and hides or disables ticket creation for the restricted portal user.",
"implemented": true,
"featureIds": ["F011", "F024"]
},
{
"id": "T038",
"description": "Regression: existing portal invitation and client portal onboarding flows still work when no board visibility group is assigned.",
"implemented": true,
"featureIds": ["F004", "F017"]
}
]