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

179 lines
24 KiB
JSON

{
"description": "Complete list of notification-only fixtures that need business-relevant counterparts",
"total": 144,
"criteria": "Each fixture currently only calls notifications.send_in_app. Needs a counterpart that exercises real domain-modifying actions.",
"suggestedActions": {
"ticketDomain": ["tickets.create", "tickets.update", "tickets.assign", "tickets.add_comment", "tickets.update_fields"],
"projectDomain": ["projects.create_task", "projects.update_task", "projects.update"],
"timeDomain": ["time_entries.create", "time_entries.update"],
"emailDomain": ["email.send"],
"crmDomain": ["crm.create_activity_note", "interactions.create"],
"schedulingDomain": ["scheduling.assign_user", "appointments.create", "appointments.update"],
"documentsDomain": ["documents.attach", "documents.create"]
},
"fixturesByDomain": {
"ticket": [
{"current": "ticket-approval-granted-advance", "suggestedBiz": "ticket-approval-granted-advance-status", "action": "tickets.update_fields to change status to approved/in-progress"},
{"current": "ticket-approval-rejected-return", "suggestedBiz": "ticket-approval-rejected-reassign", "action": "tickets.assign to return to requester + tickets.add_comment"},
{"current": "ticket-approval-requested-notify", "suggestedBiz": "ticket-approval-requested-create-task", "action": "projects.create_task for approver review"},
{"current": "ticket-board-changed-notify-owners", "suggestedBiz": "ticket-board-changed-update-fields", "action": "tickets.update_fields based on new board rules"},
{"current": "ticket-closed-audit-crm-note", "suggestedBiz": "ticket-closed-create-crm-note", "action": "crm.create_activity_note for closure audit trail"},
{"current": "ticket-comment-added-customer-notify", "suggestedBiz": "ticket-comment-added-send-email", "action": "email.send to customer with comment content"},
{"current": "ticket-comment-added-internal-audit-time", "suggestedBiz": "ticket-comment-added-create-time-entry", "action": "time_entries.create for internal note time tracking"},
{"current": "ticket-created-additional-agent-notify", "suggestedBiz": "ticket-created-additional-agent-assign", "action": "tickets.assign additional agent"},
{"current": "ticket-created-assign-idempotent", "suggestedBiz": "ticket-created-assign-idempotent-real", "action": "tickets.assign with idempotency check"},
{"current": "ticket-created-attach-many", "suggestedBiz": "ticket-created-attach-documents", "action": "documents.attach multiple standard docs"},
{"current": "ticket-created-attach-standard-doc", "suggestedBiz": "ticket-created-attach-sla-doc", "action": "documents.attach SLA document based on priority"},
{"current": "ticket-created-attachment-missing-continue", "suggestedBiz": "ticket-created-attachment-fallback-comment", "action": "tickets.add_comment noting missing attachment"},
{"current": "ticket-created-attachment-reference", "suggestedBiz": "ticket-created-attachment-link", "action": "documents.attach referenced document"},
{"current": "ticket-created-call-notify-subworkflow", "suggestedBiz": "ticket-created-call-triage-subworkflow-real", "action": "callWorkflow that actually triages + assigns"},
{"current": "ticket-created-call-triage-subworkflow", "suggestedBiz": "ticket-created-call-assignment-subworkflow", "action": "callWorkflow that assigns based on skills"},
{"current": "ticket-created-callworkflow-onboarding", "suggestedBiz": "ticket-created-callworkflow-setup-tasks", "action": "callWorkflow that creates onboarding tasks"},
{"current": "ticket-created-capture-error-comment", "suggestedBiz": "ticket-created-error-creates-comment", "action": "tickets.add_comment on error with details"},
{"current": "ticket-created-chain-actions", "suggestedBiz": "ticket-created-chain-assign-comment-email", "action": "tickets.assign + tickets.add_comment + email.send"},
{"current": "ticket-created-cleanup-verification", "suggestedBiz": "ticket-created-verify-and-update", "action": "tickets.update_fields to mark verified"},
{"current": "ticket-created-client-missing-crm-note", "suggestedBiz": "ticket-created-client-missing-create-note", "action": "crm.create_activity_note for missing client"},
{"current": "ticket-created-client-search-comment", "suggestedBiz": "ticket-created-client-search-assign", "action": "tickets.assign based on client account owner"},
{"current": "ticket-created-compute-sla-due", "suggestedBiz": "ticket-created-set-sla-fields", "action": "tickets.update_fields with computed SLA due date"},
{"current": "ticket-created-contact-owner-notify", "suggestedBiz": "ticket-created-assign-contact-owner", "action": "tickets.assign to contact's account owner"},
{"current": "ticket-created-create-appointment-assign", "suggestedBiz": "ticket-created-create-appointment", "action": "appointments.create for on-site visit"},
{"current": "ticket-created-create-linked-sibling", "suggestedBiz": "ticket-created-create-sibling-ticket", "action": "tickets.create linked sibling ticket"},
{"current": "ticket-created-create-time-entry", "suggestedBiz": "ticket-created-log-initial-time", "action": "time_entries.create for triage time"},
{"current": "ticket-created-dotted-keys-update", "suggestedBiz": "ticket-created-update-nested-fields", "action": "tickets.update_fields with nested/dotted keys"},
{"current": "ticket-created-email-billing-contact", "suggestedBiz": "ticket-created-email-billing", "action": "email.send to billing contact"},
{"current": "ticket-created-email-failure-continue", "suggestedBiz": "ticket-created-email-with-fallback", "action": "email.send with fallback to tickets.add_comment"},
{"current": "ticket-created-email-retry", "suggestedBiz": "ticket-created-email-with-retry", "action": "email.send with retry logic"},
{"current": "ticket-created-failure-creates-task", "suggestedBiz": "ticket-created-failure-escalation-task", "action": "projects.create_task on workflow failure"},
{"current": "ticket-created-fanout-notify-cleanup", "suggestedBiz": "ticket-created-fanout-assign-team", "action": "tickets.assign to multiple team members"},
{"current": "ticket-created-first-match-routing", "suggestedBiz": "ticket-created-route-and-assign", "action": "tickets.assign based on first matching rule"},
{"current": "ticket-created-foreach-heavy", "suggestedBiz": "ticket-created-foreach-create-tasks", "action": "projects.create_task in foreach loop"},
{"current": "ticket-created-foreach-onitemerror-continue", "suggestedBiz": "ticket-created-foreach-assign-with-errors", "action": "tickets.assign in foreach with error handling"},
{"current": "ticket-created-hardware-replacement", "suggestedBiz": "ticket-created-hardware-create-order-task", "action": "projects.create_task for hardware order"},
{"current": "ticket-created-link-to-project", "suggestedBiz": "ticket-created-link-project-task", "action": "projects.create_task linked to ticket"},
{"current": "ticket-created-missing-fields-return", "suggestedBiz": "ticket-created-missing-fields-comment", "action": "tickets.add_comment listing missing fields"},
{"current": "ticket-created-mixed-mapping-values", "suggestedBiz": "ticket-created-mixed-update-fields", "action": "tickets.update_fields with mixed mappings"},
{"current": "ticket-created-multi-branch-routing", "suggestedBiz": "ticket-created-multi-branch-assign", "action": "tickets.assign based on multi-branch conditions"},
{"current": "ticket-created-nested-mapping", "suggestedBiz": "ticket-created-nested-update", "action": "tickets.update_fields with nested mapping"},
{"current": "ticket-created-notify-contacts-search", "suggestedBiz": "ticket-created-email-all-contacts", "action": "email.send to all searched contacts"},
{"current": "ticket-created-notify-foreach-concurrency", "suggestedBiz": "ticket-created-concurrent-assigns", "action": "tickets.assign with concurrent foreach"},
{"current": "ticket-created-notify-idempotent", "suggestedBiz": "ticket-created-idempotent-assign", "action": "tickets.assign with idempotency key"},
{"current": "ticket-created-notify-multiple", "suggestedBiz": "ticket-created-multiple-actions", "action": "tickets.assign + tickets.add_comment + email.send"},
{"current": "ticket-created-onerror-continue", "suggestedBiz": "ticket-created-assign-onerror-comment", "action": "tickets.assign with error fallback to comment"},
{"current": "ticket-created-password-reset-template", "suggestedBiz": "ticket-created-send-password-reset", "action": "email.send password reset instructions"},
{"current": "ticket-created-resolve-contact", "suggestedBiz": "ticket-created-update-contact-field", "action": "tickets.update_fields with resolved contact"},
{"current": "ticket-created-route-by-client-search", "suggestedBiz": "ticket-created-assign-by-client", "action": "tickets.assign based on client search"},
{"current": "ticket-created-rule-eval-foreach-firstmatch", "suggestedBiz": "ticket-created-firstmatch-assign", "action": "tickets.assign on first matching rule"},
{"current": "ticket-created-saveas-output-used", "suggestedBiz": "ticket-created-saveas-then-update", "action": "tickets.update_fields using saveAs output"},
{"current": "ticket-created-secretref-redaction", "suggestedBiz": "ticket-created-comment-with-redaction", "action": "tickets.add_comment with redacted secrets"},
{"current": "ticket-created-severity-route-by-time", "suggestedBiz": "ticket-created-time-based-assign", "action": "tickets.assign based on time-of-day routing"},
{"current": "ticket-created-state-vars-persist", "suggestedBiz": "ticket-created-persist-to-fields", "action": "tickets.update_fields from persisted vars"},
{"current": "ticket-created-two-subworkflows", "suggestedBiz": "ticket-created-two-action-workflows", "action": "callWorkflow x2 with real actions"},
{"current": "ticket-created-update-custom-fields", "suggestedBiz": "ticket-created-set-custom-fields", "action": "tickets.update_fields with custom field values"},
{"current": "ticket-created-vip-notify", "suggestedBiz": "ticket-created-vip-escalate", "action": "tickets.update_fields priority + tickets.assign to senior"},
{"current": "ticket-customer-replied-ack", "suggestedBiz": "ticket-customer-replied-update-status", "action": "tickets.update_fields status to awaiting-agent"},
{"current": "ticket-customer-replied-reopen", "suggestedBiz": "ticket-customer-replied-reopen-ticket", "action": "tickets.update_fields to reopen + tickets.add_comment"},
{"current": "ticket-merged-add-reference-comment", "suggestedBiz": "ticket-merged-add-comment", "action": "tickets.add_comment with merge reference"},
{"current": "ticket-message-added-auto-response", "suggestedBiz": "ticket-message-added-send-response", "action": "email.send auto-response to customer"},
{"current": "ticket-reopened-reassign-original", "suggestedBiz": "ticket-reopened-assign-original", "action": "tickets.assign to original assignee"},
{"current": "ticket-response-awaiting-reply-reminder", "suggestedBiz": "ticket-response-send-reminder-email", "action": "email.send reminder to customer"},
{"current": "ticket-sla-breached-escalation", "suggestedBiz": "ticket-sla-breached-escalate-assign", "action": "tickets.update_fields priority + tickets.assign manager"},
{"current": "ticket-sla-stage-entered-task", "suggestedBiz": "ticket-sla-stage-create-task", "action": "projects.create_task for SLA action"},
{"current": "ticket-split-create-and-link", "suggestedBiz": "ticket-split-create-child-ticket", "action": "tickets.create child ticket + link"},
{"current": "ticket-status-on-hold-return", "suggestedBiz": "ticket-status-on-hold-add-comment", "action": "tickets.add_comment with hold reason"},
{"current": "ticket-status-resolved-close", "suggestedBiz": "ticket-status-resolved-update-close", "action": "tickets.update_fields to closed + crm.create_activity_note"},
{"current": "ticket-time-entry-threshold-notify", "suggestedBiz": "ticket-time-entry-threshold-escalate", "action": "tickets.update_fields priority + projects.create_task"},
{"current": "ticket-updated-priority-high-notify", "suggestedBiz": "ticket-updated-priority-high-assign", "action": "tickets.assign to senior tech"},
{"current": "ticket-updated-status-filter", "suggestedBiz": "ticket-updated-status-add-comment", "action": "tickets.add_comment based on status filter"}
],
"project": [
{"current": "project-approval-granted-advance", "suggestedBiz": "project-approval-granted-update-status", "action": "projects.update status to active"},
{"current": "project-approval-rejected-followup", "suggestedBiz": "project-approval-rejected-create-task", "action": "projects.create_task for revision"},
{"current": "project-approval-requested", "suggestedBiz": "project-approval-requested-assign-task", "action": "projects.create_task for approver"},
{"current": "project-assigned-kickoff-time-entry", "suggestedBiz": "project-assigned-create-time-entry", "action": "time_entries.create for kickoff meeting"},
{"current": "project-budget-exceeded", "suggestedBiz": "project-budget-exceeded-create-task", "action": "projects.create_task for budget review"},
{"current": "project-closed-email-summary", "suggestedBiz": "project-closed-send-summary-email", "action": "email.send project summary to stakeholders"},
{"current": "project-closed-notify-stakeholders", "suggestedBiz": "project-closed-create-crm-note", "action": "crm.create_activity_note for project closure"},
{"current": "project-created-callworkflow-tasks", "suggestedBiz": "project-created-callworkflow-create-tasks", "action": "callWorkflow that creates standard task set"},
{"current": "project-created-cleanup-verification", "suggestedBiz": "project-created-verify-update-status", "action": "projects.update with verification status"},
{"current": "project-created-compute-due-dates", "suggestedBiz": "project-created-set-task-due-dates", "action": "projects.update_task with computed dates"},
{"current": "project-created-create-linked-ticket", "suggestedBiz": "project-created-create-ticket", "action": "tickets.create linked to project"},
{"current": "project-created-crm-note", "suggestedBiz": "project-created-create-crm-note", "action": "crm.create_activity_note for project start"},
{"current": "project-created-onboarding-email", "suggestedBiz": "project-created-send-onboarding-email", "action": "email.send onboarding info to customer"},
{"current": "project-created-tasks-idempotent", "suggestedBiz": "project-created-idempotent-tasks", "action": "projects.create_task with idempotency"},
{"current": "project-status-blocked-note", "suggestedBiz": "project-status-blocked-create-note", "action": "crm.create_activity_note for blocked status"},
{"current": "project-status-multi-branch", "suggestedBiz": "project-status-branch-update-tasks", "action": "projects.update_task based on status branch"},
{"current": "project-task-additional-agent-assigned", "suggestedBiz": "project-task-additional-agent-comment", "action": "tickets.add_comment on linked ticket"},
{"current": "project-task-assigned-missing-assignee", "suggestedBiz": "project-task-auto-assign", "action": "projects.update_task with default assignee"},
{"current": "project-task-assigned-ticket-comment", "suggestedBiz": "project-task-assigned-add-ticket-comment", "action": "tickets.add_comment on linked ticket"},
{"current": "project-task-completed-callworkflow", "suggestedBiz": "project-task-completed-callworkflow-next", "action": "callWorkflow to advance project phase"},
{"current": "project-task-completed-note-email", "suggestedBiz": "project-task-completed-send-email", "action": "email.send completion notification"},
{"current": "project-task-created-auto-assign", "suggestedBiz": "project-task-created-assign", "action": "projects.update_task with auto-assigned user"},
{"current": "project-task-created-state-summary", "suggestedBiz": "project-task-created-update-project", "action": "projects.update with task count"},
{"current": "project-task-dependency-blocked", "suggestedBiz": "project-task-dependency-add-comment", "action": "tickets.add_comment noting blocked dependency"},
{"current": "project-task-dependency-unblocked", "suggestedBiz": "project-task-dependency-update-status", "action": "projects.update_task status to ready"},
{"current": "project-task-status-email-trycatch", "suggestedBiz": "project-task-status-send-email", "action": "email.send status update"},
{"current": "project-task-status-qa-notify", "suggestedBiz": "project-task-status-qa-create-task", "action": "projects.create_task for QA review"},
{"current": "project-updated-email-trycatch", "suggestedBiz": "project-updated-send-email", "action": "email.send project update to stakeholders"}
],
"invoice": [
{"current": "invoice-due-date-changed-email", "suggestedBiz": "invoice-due-date-changed-update-tasks", "action": "projects.update_task with new due dates"},
{"current": "invoice-finalized-email", "suggestedBiz": "invoice-finalized-send-to-customer", "action": "email.send invoice to billing contact"},
{"current": "invoice-generated-anomaly-tasks", "suggestedBiz": "invoice-generated-anomaly-create-tasks", "action": "projects.create_task for anomaly review"},
{"current": "invoice-generated-cleanup-verification", "suggestedBiz": "invoice-generated-verify-update", "action": "invoices.update verification status"},
{"current": "invoice-overdue-attach-instructions", "suggestedBiz": "invoice-overdue-attach-payment-doc", "action": "documents.attach payment instructions"},
{"current": "invoice-overdue-reminder", "suggestedBiz": "invoice-overdue-send-reminder-email", "action": "email.send payment reminder"},
{"current": "invoice-sent-notify", "suggestedBiz": "invoice-sent-create-followup-task", "action": "projects.create_task for AR follow-up"},
{"current": "invoice-status-multi-branch", "suggestedBiz": "invoice-status-update-ticket", "action": "tickets.update_fields based on invoice status"},
{"current": "invoice-status-paid-close-ticket", "suggestedBiz": "invoice-status-paid-close-ticket-real", "action": "tickets.update_fields to close billing ticket"},
{"current": "invoice-written-off-note", "suggestedBiz": "invoice-written-off-create-audit", "action": "crm.create_activity_note + projects.create_task"}
],
"payment": [
{"current": "payment-applied-partial-followup", "suggestedBiz": "payment-applied-partial-create-task", "action": "projects.create_task for remaining balance"},
{"current": "payment-failed-email-trycatch", "suggestedBiz": "payment-failed-send-email", "action": "email.send payment failure notice"},
{"current": "payment-failed-notify", "suggestedBiz": "payment-failed-create-task", "action": "projects.create_task for payment retry"},
{"current": "payment-recorded-notify", "suggestedBiz": "payment-recorded-update-ticket", "action": "tickets.add_comment on billing ticket"}
],
"appointment": [
{"current": "appointment-assigned-notify-email", "suggestedBiz": "appointment-assigned-send-email", "action": "email.send appointment details to tech"},
{"current": "appointment-canceled-notify", "suggestedBiz": "appointment-canceled-update-ticket", "action": "tickets.add_comment + tickets.update_fields"},
{"current": "appointment-completed-time-entry", "suggestedBiz": "appointment-completed-create-time-entry", "action": "time_entries.create for appointment duration"},
{"current": "appointment-no-show", "suggestedBiz": "appointment-no-show-reschedule-task", "action": "projects.create_task for reschedule"},
{"current": "appointment-request-approved", "suggestedBiz": "appointment-request-approved-create", "action": "appointments.create from request"},
{"current": "appointment-request-cancelled", "suggestedBiz": "appointment-request-cancelled-comment", "action": "tickets.add_comment noting cancellation"},
{"current": "appointment-request-created", "suggestedBiz": "appointment-request-created-task", "action": "projects.create_task for approval"},
{"current": "appointment-request-declined", "suggestedBiz": "appointment-request-declined-email", "action": "email.send decline notice with alternatives"},
{"current": "appointment-rescheduled-email-note", "suggestedBiz": "appointment-rescheduled-send-email", "action": "email.send reschedule confirmation"}
],
"contract": [
{"current": "contract-renewal-create-ticket", "suggestedBiz": "contract-renewal-create-ticket-real", "action": "tickets.create for renewal review"},
{"current": "contract-renewal-upcoming", "suggestedBiz": "contract-renewal-upcoming-task", "action": "projects.create_task for renewal prep"},
{"current": "contract-status-suspended-followup", "suggestedBiz": "contract-status-suspended-create-task", "action": "projects.create_task for suspension review"},
{"current": "contract-updated-note", "suggestedBiz": "contract-updated-create-crm-note", "action": "crm.create_activity_note for contract change"}
],
"schedule": [
{"current": "schedule-block-deleted", "suggestedBiz": "schedule-block-deleted-update-tasks", "action": "projects.update_task to reassign"},
{"current": "schedule-entry-created-after-hours", "suggestedBiz": "schedule-entry-after-hours-create-task", "action": "projects.create_task for overtime approval"},
{"current": "schedule-entry-deleted-notify", "suggestedBiz": "schedule-entry-deleted-update-ticket", "action": "tickets.add_comment on related ticket"},
{"current": "schedule-entry-updated-email-note", "suggestedBiz": "schedule-entry-updated-send-email", "action": "email.send schedule update to attendees"}
],
"technician": [
{"current": "technician-arrived", "suggestedBiz": "technician-arrived-update-ticket", "action": "tickets.update_fields status + tickets.add_comment"},
{"current": "technician-checked-out", "suggestedBiz": "technician-checked-out-create-time-entry", "action": "time_entries.create for visit duration"},
{"current": "technician-dispatched", "suggestedBiz": "technician-dispatched-send-email", "action": "email.send dispatch notification to customer"},
{"current": "technician-en-route", "suggestedBiz": "technician-en-route-update-ticket", "action": "tickets.update_fields + email.send ETA"}
],
"other": [
{"current": "capacity-threshold-reached", "suggestedBiz": "capacity-threshold-create-task", "action": "projects.create_task for capacity planning"},
{"current": "company-created-onboarding-note", "suggestedBiz": "company-created-create-crm-note", "action": "crm.create_activity_note for new company"},
{"current": "company-updated-domain-change", "suggestedBiz": "company-updated-update-tickets", "action": "tickets.update_fields for domain change"},
{"current": "email-provider-connected-notify", "suggestedBiz": "email-provider-connected-create-task", "action": "projects.create_task for email setup verification"},
{"current": "integration-sync-failed-notify", "suggestedBiz": "integration-sync-failed-create-ticket", "action": "tickets.create for sync failure investigation"},
{"current": "integration-webhook-received-notify", "suggestedBiz": "integration-webhook-received-process", "action": "tickets.create or tickets.update based on webhook"},
{"current": "task-comment-added-blocked-notify", "suggestedBiz": "task-comment-added-update-status", "action": "projects.update_task status to blocked"},
{"current": "task-comment-updated-crm-note", "suggestedBiz": "task-comment-updated-create-note", "action": "crm.create_activity_note with comment content"},
{"current": "time-entry-approved-email", "suggestedBiz": "time-entry-approved-send-email", "action": "email.send approval confirmation"},
{"current": "time-entry-submitted-notify", "suggestedBiz": "time-entry-submitted-create-task", "action": "projects.create_task for manager review"}
]
}
}