{ "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"} ] } }