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

611 lines
15 KiB
JSON

[
{
"id": "F001",
"description": "Create DeletionValidationResult, DeletionDependency, DeletionAlternative types in packages/types/src/deletion.ts",
"implemented": true,
"prdRefs": [
"FR-1"
]
},
{
"id": "F002",
"description": "Create DeletionBlockCode union type with all block reason codes",
"implemented": true,
"prdRefs": [
"FR-1"
]
},
{
"id": "F003",
"description": "Create EntityDeletionConfig and EntityDependencyConfig types with tagEntityType field",
"implemented": true,
"prdRefs": [
"FR-1"
]
},
{
"id": "F004",
"description": "Export all deletion types from packages/types/src/index.ts",
"implemented": true,
"prdRefs": [
"FR-1"
]
},
{
"id": "F005",
"description": "Create validateDeletion function that counts dependencies within a transaction",
"implemented": true,
"prdRefs": [
"FR-2"
]
},
{
"id": "F006",
"description": "validateDeletion supports custom countQuery for polymorphic tables (document_associations)",
"implemented": true,
"prdRefs": [
"FR-2"
]
},
{
"id": "F007",
"description": "validateDeletion returns formatted dependency labels with correct pluralization",
"implemented": true,
"prdRefs": [
"FR-2"
]
},
{
"id": "F008",
"description": "validateDeletion builds human-readable block message listing all dependencies",
"implemented": true,
"prdRefs": [
"FR-2"
]
},
{
"id": "F009",
"description": "validateDeletion builds alternatives list based on supportsInactive/supportsArchive config flags",
"implemented": true,
"prdRefs": [
"FR-2"
]
},
{
"id": "F010",
"description": "validateDeletion populates viewUrl from viewUrlTemplate when configured",
"implemented": true,
"prdRefs": [
"FR-2"
]
},
{
"id": "F011",
"description": "Create client entity deletion config with 9 schema-verified dependencies",
"implemented": true,
"prdRefs": [
"FR-3"
]
},
{
"id": "F012",
"description": "Create contact entity deletion config with 4 schema-verified dependencies",
"implemented": true,
"prdRefs": [
"FR-3"
]
},
{
"id": "F013",
"description": "Create ticket entity deletion config (cascade, no blocking deps, tagEntityType='ticket')",
"implemented": true,
"prdRefs": [
"FR-3"
]
},
{
"id": "F014",
"description": "Create project entity deletion config (cascade, no blocking deps, tagEntityType='project')",
"implemented": true,
"prdRefs": [
"FR-3"
]
},
{
"id": "F015",
"description": "Create category entity deletion config with subcategory, ticket, and service deps",
"implemented": true,
"prdRefs": [
"FR-3"
]
},
{
"id": "F016",
"description": "Create status entity deletion config (dynamic deps handled specially in action)",
"implemented": true,
"prdRefs": [
"FR-3"
]
},
{
"id": "F017",
"description": "Create team entity deletion config with team_members and assigned ticket deps",
"implemented": true,
"prdRefs": [
"FR-3"
]
},
{
"id": "F018",
"description": "Create user entity deletion config with ticket, time_entry, schedule_assignee, team_member deps",
"implemented": true,
"prdRefs": [
"FR-3"
]
},
{
"id": "F019",
"description": "Create contract_line entity deletion config with service_config, usage, bucket_usage, time_entry deps",
"implemented": true,
"prdRefs": [
"FR-3"
]
},
{
"id": "F020",
"description": "Create service entity deletion config with time_entry, bucket_usage, contract_line_service deps",
"implemented": true,
"prdRefs": [
"FR-3"
]
},
{
"id": "F021",
"description": "Create tax_rate entity deletion config with client_tax_rates, time_entry, service_catalog deps",
"implemented": true,
"prdRefs": [
"FR-3"
]
},
{
"id": "F022",
"description": "Create asset entity deletion config with maintenance_schedule dep and tagEntityType",
"implemented": true,
"prdRefs": [
"FR-3"
]
},
{
"id": "F023",
"description": "Create document, invoice_template, workflow, schedule_entry, time_entry, priority, board, interaction_type, role deletion configs",
"implemented": true,
"prdRefs": [
"FR-3"
]
},
{
"id": "F024",
"description": "Create getDeletionConfig lookup function",
"implemented": true,
"prdRefs": [
"FR-3"
]
},
{
"id": "F025",
"description": "Create preCheckDeletion server action for read-only dependency preview",
"implemented": true,
"prdRefs": [
"FR-4"
]
},
{
"id": "F026",
"description": "preCheckDeletion checks getCurrentUser and returns PERMISSION_DENIED if not authenticated",
"implemented": true,
"prdRefs": [
"FR-4"
]
},
{
"id": "F027",
"description": "preCheckDeletion checks hasPermission with correct entity mapping (client->company)",
"implemented": true,
"prdRefs": [
"FR-4"
]
},
{
"id": "F028",
"description": "preCheckDeletion uses withTransaction for the read-only validation query",
"implemented": true,
"prdRefs": [
"FR-4"
]
},
{
"id": "F029",
"description": "Create deleteEntityWithValidation that validates + deletes in a single withTransaction call",
"implemented": true,
"prdRefs": [
"FR-4"
]
},
{
"id": "F030",
"description": "deleteEntityWithValidation automatically calls deleteEntityTags when tagEntityType is set",
"implemented": true,
"prdRefs": [
"FR-4"
]
},
{
"id": "F031",
"description": "deleteEntityWithValidation returns { ...validation, deleted: true } on success",
"implemented": true,
"prdRefs": [
"FR-4"
]
},
{
"id": "F032",
"description": "deleteEntityWithValidation returns validation result (canDelete: false) if deps found during atomic check",
"implemented": true,
"prdRefs": [
"FR-4"
]
},
{
"id": "F033",
"description": "Export preCheckDeletion, deleteEntityWithValidation, validateDeletion, getDeletionConfig from @alga-psa/core",
"implemented": true,
"prdRefs": [
"FR-4"
]
},
{
"id": "F034",
"description": "Create DeleteEntityDialog component in packages/ui/src/components/DeleteEntityDialog.tsx",
"implemented": true,
"prdRefs": [
"FR-5"
]
},
{
"id": "F035",
"description": "DeleteEntityDialog shows spinner with 'Checking for dependencies...' when isValidating=true",
"implemented": true,
"prdRefs": [
"FR-5"
]
},
{
"id": "F036",
"description": "DeleteEntityDialog shows delete confirmation when canDelete=true",
"implemented": true,
"prdRefs": [
"FR-5"
]
},
{
"id": "F037",
"description": "DeleteEntityDialog shows 'Cannot Delete' title, dependency list, and block message when canDelete=false",
"implemented": true,
"prdRefs": [
"FR-5"
]
},
{
"id": "F038",
"description": "DeleteEntityDialog renders View links for dependencies with viewUrl",
"implemented": true,
"prdRefs": [
"FR-5"
]
},
{
"id": "F039",
"description": "DeleteEntityDialog shows alternative action buttons when alternatives are available",
"implemented": true,
"prdRefs": [
"FR-5"
]
},
{
"id": "F040",
"description": "DeleteEntityDialog shows loading spinner on Delete/alternative buttons when isDeleting=true",
"implemented": true,
"prdRefs": [
"FR-5"
]
},
{
"id": "F041",
"description": "DeleteEntityDialog calls onAlternativeAction with action type string (deactivate/archive)",
"implemented": true,
"prdRefs": [
"FR-5"
]
},
{
"id": "F042",
"description": "Export DeleteEntityDialog from packages/ui/src/index.ts",
"implemented": true,
"prdRefs": [
"FR-5"
]
},
{
"id": "F043",
"description": "Create useDeletionValidation hook with validate, reset, validationResult, isValidating, error, canDelete",
"implemented": true,
"prdRefs": [
"FR-6"
]
},
{
"id": "F044",
"description": "Create validateBulkDeletion action that validates multiple entities in a single transaction",
"implemented": true,
"prdRefs": [
"FR-7"
]
},
{
"id": "F045",
"description": "validateBulkDeletion returns canDeleteAll, canDelete[], cannotDelete[] with reasons",
"implemented": true,
"prdRefs": [
"FR-7"
]
},
{
"id": "F046",
"description": "Refactor deleteClient to use deleteEntityWithValidation for atomic transaction",
"implemented": true,
"prdRefs": [
"FR-8"
]
},
{
"id": "F047",
"description": "deleteClient checks is_default before standard validation (entity-specific precondition)",
"implemented": true,
"prdRefs": [
"FR-8"
]
},
{
"id": "F048",
"description": "Remove manual deleteEntityTags call from deleteClient (automatic via tagEntityType config)",
"implemented": true,
"prdRefs": [
"FR-8"
]
},
{
"id": "F049",
"description": "Replace ConfirmationDialog with DeleteEntityDialog in ClientDetails.tsx",
"implemented": true,
"prdRefs": [
"FR-8"
]
},
{
"id": "F050",
"description": "ClientDetails.tsx calls validateClientDeletion on dialog open for dependency preview",
"implemented": true,
"prdRefs": [
"FR-8"
]
},
{
"id": "F051",
"description": "ClientDetails.tsx wires onAlternativeAction to markClientInactiveWithContacts",
"implemented": true,
"prdRefs": [
"FR-8"
]
},
{
"id": "F052",
"description": "Remove inline dependency rendering JSX from ClientDetails.tsx (handled by DeleteEntityDialog)",
"implemented": true,
"prdRefs": [
"FR-8"
]
},
{
"id": "F053",
"description": "Migrate @alga-psa/clients contact deletion to use deleteEntityWithValidation + DeleteEntityDialog",
"implemented": true,
"prdRefs": [
"FR-9"
]
},
{
"id": "F054",
"description": "Migrate @alga-psa/users user deletion to use deleteEntityWithValidation + DeleteEntityDialog",
"implemented": true,
"prdRefs": [
"FR-9"
]
},
{
"id": "F055",
"description": "Migrate @alga-psa/teams team deletion to use deleteEntityWithValidation + DeleteEntityDialog",
"implemented": true,
"prdRefs": [
"FR-9"
]
},
{
"id": "F056",
"description": "Migrate @alga-psa/billing contract line deletion to use deleteEntityWithValidation + DeleteEntityDialog",
"implemented": true,
"prdRefs": [
"FR-9"
]
},
{
"id": "F057",
"description": "Migrate @alga-psa/billing service deletion to use deleteEntityWithValidation + DeleteEntityDialog",
"implemented": true,
"prdRefs": [
"FR-9"
]
},
{
"id": "F058",
"description": "Migrate @alga-psa/billing tax rate deletion to use deleteEntityWithValidation + DeleteEntityDialog",
"implemented": true,
"prdRefs": [
"FR-9"
]
},
{
"id": "F059",
"description": "Migrate @alga-psa/billing invoice template deletion to use deleteEntityWithValidation + DeleteEntityDialog",
"implemented": true,
"prdRefs": [
"FR-9"
]
},
{
"id": "F060",
"description": "Migrate @alga-psa/tickets ticket deletion to use deleteEntityWithValidation + DeleteEntityDialog",
"implemented": true,
"prdRefs": [
"FR-9"
]
},
{
"id": "F061",
"description": "Remove manual deleteEntityTags call from ticketActions.ts (automatic via config)",
"implemented": true,
"prdRefs": [
"FR-9"
]
},
{
"id": "F062",
"description": "Migrate @alga-psa/projects project deletion to use deleteEntityWithValidation + DeleteEntityDialog",
"implemented": true,
"prdRefs": [
"FR-9"
]
},
{
"id": "F063",
"description": "Add bulk task tag cleanup (deleteEntitiesTags) to project deletion performDelete callback",
"implemented": true,
"prdRefs": [
"FR-9"
]
},
{
"id": "F064",
"description": "Remove manual deleteEntityTags from projectTask.ts (automatic via config)",
"implemented": true,
"prdRefs": [
"FR-9"
]
},
{
"id": "F065",
"description": "Migrate @alga-psa/reference-data category deletion to use deleteEntityWithValidation + DeleteEntityDialog",
"implemented": true,
"prdRefs": [
"FR-9"
]
},
{
"id": "F066",
"description": "Migrate @alga-psa/reference-data status deletion to use deleteEntityWithValidation + DeleteEntityDialog",
"implemented": true,
"prdRefs": [
"FR-9"
]
},
{
"id": "F067",
"description": "Migrate @alga-psa/reference-data priority deletion to use deleteEntityWithValidation + DeleteEntityDialog",
"implemented": true,
"prdRefs": [
"FR-9"
]
},
{
"id": "F068",
"description": "Migrate @alga-psa/reference-data board deletion to use deleteEntityWithValidation + DeleteEntityDialog",
"implemented": true,
"prdRefs": [
"FR-9"
]
},
{
"id": "F069",
"description": "Migrate @alga-psa/documents document deletion to use deleteEntityWithValidation + DeleteEntityDialog",
"implemented": true,
"prdRefs": [
"FR-9"
]
},
{
"id": "F070",
"description": "Migrate @alga-psa/assets asset deletion to use deleteEntityWithValidation + DeleteEntityDialog",
"implemented": true,
"prdRefs": [
"FR-9"
]
},
{
"id": "F071",
"description": "Migrate @alga-psa/scheduling schedule entry deletion to use deleteEntityWithValidation + DeleteEntityDialog",
"implemented": true,
"prdRefs": [
"FR-9"
]
},
{
"id": "F072",
"description": "Migrate @alga-psa/surveys survey template deletion to use deleteEntityWithValidation + DeleteEntityDialog",
"implemented": true,
"prdRefs": [
"FR-9"
]
},
{
"id": "F073",
"description": "Migrate @alga-psa/workflows workflow deletion to use deleteEntityWithValidation + DeleteEntityDialog",
"implemented": true,
"prdRefs": [
"FR-9"
]
},
{
"id": "F074",
"description": "Migrate @alga-psa/users role deletion to use deleteEntityWithValidation + DeleteEntityDialog",
"implemented": true,
"prdRefs": [
"FR-9"
]
},
{
"id": "F075",
"description": "Migrate @alga-psa/reference-data interaction type deletion to use deleteEntityWithValidation + DeleteEntityDialog",
"implemented": true,
"prdRefs": [
"FR-9"
]
},
{
"id": "F076",
"description": "Remove manual deleteEntityTags from contactActions.tsx (automatic via config)",
"implemented": true,
"prdRefs": [
"FR-9"
]
}
]