[ { "id": "T001", "description": "Harness: fails with clear error when --test is missing", "implemented": true, "featureIds": ["F002"] }, { "id": "T002", "description": "Harness: fails with clear error when bundle.json is missing", "implemented": true, "featureIds": ["F003"] }, { "id": "T003", "description": "Harness: fails with clear error when test.cjs is missing", "implemented": true, "featureIds": ["F003"] }, { "id": "T004", "description": "Harness: imports bundle with --force and reports workflow id/key used", "implemented": true, "featureIds": ["F007", "F015"] }, { "id": "T005", "description": "Harness: runs test.cjs and surfaces thrown error as FAIL with stack trace in artifacts", "implemented": true, "featureIds": ["F004", "F012"] }, { "id": "T006", "description": "Harness: waitForRun times out and reports a helpful diagnostic (no run found)", "implemented": true, "featureIds": ["F009", "F012"] }, { "id": "T007", "description": "Harness: captures run + step status summary on success", "implemented": true, "featureIds": ["F010", "F011"] }, { "id": "T008", "description": "Harness: prints single-line PASS/FAIL summary and correct exit code", "implemented": true, "featureIds": ["F011"] }, { "id": "T009", "description": "Harness: supports --cookie-file and trims newlines", "implemented": true, "featureIds": ["F002", "F005"] }, { "id": "T010", "description": "Harness: supports --debug to print verbose logs", "implemented": true, "featureIds": ["F017"] }, { "id": "T011", "description": "Harness: runs registered cleanup hooks on PASS and on FAIL", "implemented": true, "featureIds": ["F021"] }, { "id": "T020", "description": "Fixture: ticket-created-hello imports, triggers ticket creation, run SUCCEEDED", "implemented": true, "featureIds": ["F014"], "fixture": "ticket-created-hello", "eventType": "TICKET_CREATED", "actions": ["tickets.create"], "controlFlow": [] }, { "id": "T100", "description": "Ticket created: enrich payload, set vars, and add internal triage comment", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-created-triage-comment", "eventType": "TICKET_CREATED", "actions": ["tickets.add_comment"], "controlFlow": ["transform.assign", "state.set"] }, { "id": "T101", "description": "Ticket created: auto-assign based on priority (if/else), then comment assignment result", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-created-auto-assign-by-priority", "eventType": "TICKET_CREATED", "actions": ["tickets.assign", "tickets.add_comment"], "controlFlow": ["control.if"] }, { "id": "T102", "description": "Ticket created: if client is VIP then send in-app notification to dispatch", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-created-vip-notify", "eventType": "TICKET_CREATED", "actions": ["notifications.send_in_app"], "controlFlow": ["control.if"] }, { "id": "T103", "description": "Ticket created: if subject matches outage keywords then escalate (update fields) and notify", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-created-outage-escalate", "eventType": "TICKET_CREATED", "actions": ["tickets.update_fields", "notifications.send_in_app"], "controlFlow": ["control.if"] }, { "id": "T104", "description": "Ticket created: create follow-up project task for onboarding request", "implemented": true, "featureIds": ["F030", "F031", "F040"], "fixture": "ticket-created-create-project-task", "eventType": "TICKET_CREATED", "actions": ["projects.create_task"], "controlFlow": [] }, { "id": "T105", "description": "Ticket created: try/catch around assign (bad user id), on catch notify admin and add comment", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-created-assign-trycatch", "eventType": "TICKET_CREATED", "actions": ["tickets.assign", "notifications.send_in_app", "tickets.add_comment"], "controlFlow": ["control.tryCatch"] }, { "id": "T106", "description": "Ticket created: forEach over recipient list to send in-app notifications", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-created-notify-multiple", "eventType": "TICKET_CREATED", "actions": ["notifications.send_in_app"], "controlFlow": ["control.forEach"] }, { "id": "T107", "description": "Ticket created: early return when ticket is created by system user (ignore automation)", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-created-ignore-system", "eventType": "TICKET_CREATED", "actions": [], "controlFlow": ["control.if", "control.return"] }, { "id": "T108", "description": "Ticket assigned: add public-facing comment acknowledging ownership and send email to requester", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-assigned-acknowledge", "eventType": "TICKET_ASSIGNED", "actions": ["tickets.add_comment", "email.send"], "controlFlow": [] }, { "id": "T109", "description": "Ticket unassigned: notify dispatch and set ticket back to triage status", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-unassigned-return-to-triage", "eventType": "TICKET_UNASSIGNED", "actions": ["notifications.send_in_app", "tickets.update_fields"], "controlFlow": [] }, { "id": "T110", "description": "Ticket status changed: if moved to Waiting on Customer then send reminder email after delay (time entry used as placeholder timestamp)", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-status-waiting-on-customer-reminder", "eventType": "TICKET_STATUS_CHANGED", "actions": ["email.send"], "controlFlow": ["control.if"] }, { "id": "T111", "description": "Ticket reopened: add internal note and notify assigned technician", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-reopened-notify-tech", "eventType": "TICKET_REOPENED", "actions": ["tickets.add_comment", "notifications.send_in_app"], "controlFlow": [] }, { "id": "T112", "description": "Ticket escalated: create CRM activity note on client account and notify manager", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-escalated-crm-note", "eventType": "TICKET_ESCALATED", "actions": ["crm.create_activity_note", "notifications.send_in_app"], "controlFlow": [] }, { "id": "T113", "description": "Ticket queue changed: if queue is after-hours then send email to on-call mailbox", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-queue-after-hours-email", "eventType": "TICKET_QUEUE_CHANGED", "actions": ["email.send"], "controlFlow": ["control.if"] }, { "id": "T114", "description": "Ticket tags changed: if tag includes 'billing' then assign to billing queue and notify", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-tags-billing-route", "eventType": "TICKET_TAGS_CHANGED", "actions": ["tickets.update_fields", "notifications.send_in_app"], "controlFlow": ["control.if"] }, { "id": "T115", "description": "Ticket SLA stage entered: create task for SLA checkpoint and notify technician", "implemented": true, "featureIds": ["F030", "F031", "F040"], "fixture": "ticket-sla-stage-entered-task", "eventType": "TICKET_SLA_STAGE_ENTERED", "actions": ["projects.create_task", "notifications.send_in_app"], "controlFlow": [] }, { "id": "T116", "description": "Ticket SLA stage breached: set priority to Critical and send escalation email", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-sla-breached-escalation", "eventType": "TICKET_SLA_STAGE_BREACHED", "actions": ["tickets.update_fields", "email.send"], "controlFlow": [] }, { "id": "T117", "description": "Ticket approval requested: notify approver group and add internal comment", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-approval-requested-notify", "eventType": "TICKET_APPROVAL_REQUESTED", "actions": ["notifications.send_in_app", "tickets.add_comment"], "controlFlow": [] }, { "id": "T118", "description": "Ticket approval granted: add internal comment and move ticket to Approved status", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-approval-granted-advance", "eventType": "TICKET_APPROVAL_GRANTED", "actions": ["tickets.add_comment", "tickets.update_fields"], "controlFlow": [] }, { "id": "T119", "description": "Ticket approval rejected: add internal comment and move ticket back to triage", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-approval-rejected-return", "eventType": "TICKET_APPROVAL_REJECTED", "actions": ["tickets.add_comment", "tickets.update_fields"], "controlFlow": [] }, { "id": "T120", "description": "Ticket comment added: if comment is from customer then notify assigned tech", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-comment-added-customer-notify", "eventType": "TICKET_COMMENT_ADDED", "actions": ["notifications.send_in_app"], "controlFlow": ["control.if"] }, { "id": "T121", "description": "Ticket comment added: if internal then create time entry (0 minutes) as audit marker", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-comment-added-internal-audit-time", "eventType": "TICKET_INTERNAL_NOTE_ADDED", "actions": ["time.create_entry"], "controlFlow": [] }, { "id": "T122", "description": "Ticket message added: add auto-response comment (simulated) and notify dispatcher", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-message-added-auto-response", "eventType": "TICKET_MESSAGE_ADDED", "actions": ["tickets.add_comment", "notifications.send_in_app"], "controlFlow": [] }, { "id": "T123", "description": "Ticket customer replied: send acknowledgement email and add internal note", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-customer-replied-ack", "eventType": "TICKET_CUSTOMER_REPLIED", "actions": ["email.send", "tickets.add_comment"], "controlFlow": [] }, { "id": "T124", "description": "Ticket time entry added: if time exceeds threshold then notify manager", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-time-entry-threshold-notify", "eventType": "TICKET_TIME_ENTRY_ADDED", "actions": ["notifications.send_in_app"], "controlFlow": ["control.if"] }, { "id": "T125", "description": "Ticket updated: when priority changed to High, notify on-call user", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-updated-priority-high-notify", "eventType": "TICKET_PRIORITY_CHANGED", "actions": ["notifications.send_in_app"], "controlFlow": [] }, { "id": "T126", "description": "Ticket status changed: when moved to Resolved, send closure email and close ticket", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-status-resolved-close", "eventType": "TICKET_STATUS_CHANGED", "actions": ["email.send", "tickets.close"], "controlFlow": ["control.if"] }, { "id": "T127", "description": "Ticket closed: add final internal audit comment and create CRM activity note", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-closed-audit-crm-note", "eventType": "TICKET_CLOSED", "actions": ["tickets.add_comment", "crm.create_activity_note"], "controlFlow": [] }, { "id": "T128", "description": "Ticket reopened: if reopened within 1 hour, auto-assign original technician (lookup via tickets.find)", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-reopened-reassign-original", "eventType": "TICKET_REOPENED", "actions": ["tickets.find", "tickets.assign"], "controlFlow": ["control.if"] }, { "id": "T129", "description": "Ticket merged: add comment to target ticket referencing merged ticket id", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-merged-add-reference-comment", "eventType": "TICKET_MERGED", "actions": ["tickets.add_comment"], "controlFlow": [] }, { "id": "T130", "description": "Ticket split: create follow-up ticket for split portion and link entities", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-split-create-and-link", "eventType": "TICKET_SPLIT", "actions": ["tickets.create", "tickets.link_entities"], "controlFlow": [] }, { "id": "T131", "description": "Ticket created: attach a standard troubleshooting PDF (document pre-seeded) to ticket", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-created-attach-standard-doc", "eventType": "TICKET_CREATED", "actions": ["tickets.add_attachment"], "controlFlow": [] }, { "id": "T132", "description": "Ticket created: update custom fields from payload mapping and add confirmation comment", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-created-update-custom-fields", "eventType": "TICKET_CREATED", "actions": ["tickets.update_fields", "tickets.add_comment"], "controlFlow": ["transform.assign"] }, { "id": "T133", "description": "Ticket updated: if board changed then notify board owner (forEach over owner recipients)", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-board-changed-notify-owners", "eventType": "TICKET_UPDATED", "actions": ["notifications.send_in_app"], "controlFlow": ["control.forEach", "control.if"] }, { "id": "T134", "description": "Ticket response state changed: if awaiting reply then send reminder email", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-response-awaiting-reply-reminder", "eventType": "TICKET_RESPONSE_STATE_CHANGED", "actions": ["email.send"], "controlFlow": ["control.if"] }, { "id": "T135", "description": "Ticket created: call sub-workflow to apply triage rules (control.callWorkflow) then continue", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-created-call-triage-subworkflow", "eventType": "TICKET_CREATED", "actions": [], "controlFlow": ["control.callWorkflow"] }, { "id": "T136", "description": "Ticket created: call sub-workflow to send notifications, capture output, and add summary comment", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-created-call-notify-subworkflow", "eventType": "TICKET_CREATED", "actions": ["tickets.add_comment"], "controlFlow": ["control.callWorkflow", "transform.assign"] }, { "id": "T137", "description": "Ticket created: try/catch around email.send; on catch notify in-app and continue (onError continue)", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-created-email-failure-continue", "eventType": "TICKET_CREATED", "actions": ["email.send", "notifications.send_in_app"], "controlFlow": ["control.tryCatch"] }, { "id": "T138", "description": "Ticket created: assign user action idempotency check (re-run should be noop) and comment indicates noop", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-created-assign-idempotent", "eventType": "TICKET_CREATED", "actions": ["tickets.assign", "tickets.add_comment"], "controlFlow": [] }, { "id": "T139", "description": "Ticket created: forEach with concurrency=2 over recipients for notifications", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-created-notify-foreach-concurrency", "eventType": "TICKET_CREATED", "actions": ["notifications.send_in_app"], "controlFlow": ["control.forEach"] }, { "id": "T140", "description": "Ticket created: chain multiple actions (update_fields -> assign -> add_comment) with state.set for intermediate values", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-created-chain-actions", "eventType": "TICKET_CREATED", "actions": ["tickets.update_fields", "tickets.assign", "tickets.add_comment"], "controlFlow": ["state.set"] }, { "id": "T141", "description": "Ticket created: compute derived severity (transform.assign) and route to after-hours email based on time of day", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-created-severity-route-by-time", "eventType": "TICKET_CREATED", "actions": ["email.send"], "controlFlow": ["transform.assign", "control.if"] }, { "id": "T142", "description": "Ticket created: if subject contains 'password reset' then add templated response comment and return", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-created-password-reset-template", "eventType": "TICKET_CREATED", "actions": ["tickets.add_comment"], "controlFlow": ["control.if", "control.return"] }, { "id": "T143", "description": "Ticket created: if client not found (clients.find) then create CRM activity note for sales follow-up", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-created-client-missing-crm-note", "eventType": "TICKET_CREATED", "actions": ["clients.find", "crm.create_activity_note"], "controlFlow": ["control.if"] }, { "id": "T144", "description": "Ticket created: if contact email matches known contact (contacts.find) then set ticket contact_id (update_fields)", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-created-resolve-contact", "eventType": "TICKET_CREATED", "actions": ["contacts.find", "tickets.update_fields"], "controlFlow": ["control.if"] }, { "id": "T145", "description": "Ticket created: contacts.search + forEach to notify all matching client contacts (internal notification)", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-created-notify-contacts-search", "eventType": "TICKET_CREATED", "actions": ["contacts.search", "notifications.send_in_app"], "controlFlow": ["control.forEach"] }, { "id": "T146", "description": "Ticket created: clients.search to route ticket to correct board/status based on client name match", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-created-route-by-client-search", "eventType": "TICKET_CREATED", "actions": ["clients.search", "tickets.update_fields"], "controlFlow": ["control.if"] }, { "id": "T147", "description": "Ticket created: create time entry for initial diagnostic placeholder (0 minutes) and comment contains entry id", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-created-create-time-entry", "eventType": "TICKET_CREATED", "actions": ["time.create_entry", "tickets.add_comment"], "controlFlow": [] }, { "id": "T148", "description": "Ticket created: control.tryCatch captures error into var and adds comment with sanitized error message", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-created-capture-error-comment", "eventType": "TICKET_CREATED", "actions": ["tickets.add_comment"], "controlFlow": ["control.tryCatch"] }, { "id": "T149", "description": "Ticket created: onError=continue on a failing action.call (email.send) then still assigns ticket", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-created-onerror-continue", "eventType": "TICKET_CREATED", "actions": ["email.send", "tickets.assign"], "controlFlow": [] }, { "id": "T150", "description": "Ticket created: retry policy on transient email.send failure then succeed (simulated)", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-created-email-retry", "eventType": "TICKET_CREATED", "actions": ["email.send"], "controlFlow": [] }, { "id": "T151", "description": "Ticket created: long payload mapping with nested fields (transform.assign) and comment shows derived field", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-created-nested-mapping", "eventType": "TICKET_CREATED", "actions": ["tickets.add_comment"], "controlFlow": ["transform.assign"] }, { "id": "T152", "description": "Ticket created: if multiple conditions match, ensure first-match routing uses return to prevent double actions", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-created-first-match-routing", "eventType": "TICKET_CREATED", "actions": ["tickets.update_fields"], "controlFlow": ["control.if", "control.return"] }, { "id": "T153", "description": "Ticket created: forEach over attachments list to attach documents (pre-seeded), then add completion comment", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-created-attach-many", "eventType": "TICKET_CREATED", "actions": ["tickets.add_attachment", "tickets.add_comment"], "controlFlow": ["control.forEach"] }, { "id": "T154", "description": "Ticket created: link ticket to a project/task (tickets.link_entities) based on payload reference", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-created-link-to-project", "eventType": "TICKET_CREATED", "actions": ["tickets.link_entities"], "controlFlow": [] }, { "id": "T155", "description": "Ticket created: create ticket for another queue and link them (tickets.create + tickets.link_entities)", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-created-create-linked-sibling", "eventType": "TICKET_CREATED", "actions": ["tickets.create", "tickets.link_entities"], "controlFlow": [] }, { "id": "T156", "description": "Ticket created: assign additional agent (via update_fields) and notify both agents", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-created-additional-agent-notify", "eventType": "TICKET_ADDITIONAL_AGENT_ASSIGNED", "actions": ["tickets.update_fields", "notifications.send_in_app"], "controlFlow": ["control.forEach"] }, { "id": "T157", "description": "Ticket status changed: if moved to On Hold then add comment and stop further processing (return)", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-status-on-hold-return", "eventType": "TICKET_STATUS_CHANGED", "actions": ["tickets.add_comment"], "controlFlow": ["control.if", "control.return"] }, { "id": "T158", "description": "Ticket created: ensure payload redaction works by storing secretRef in mapping and checking no secret leaked in run logs (DB)", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-created-secretref-redaction", "eventType": "TICKET_CREATED", "actions": ["email.send"], "controlFlow": [] }, { "id": "T159", "description": "Ticket created: create ticket, then callWorkflow to create onboarding tasks, then add summary comment", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-created-callworkflow-onboarding", "eventType": "TICKET_CREATED", "actions": ["tickets.add_comment"], "controlFlow": ["control.callWorkflow"] }, { "id": "T160", "description": "Ticket created: multi-branch if/else if/else routing to different action.call sequences", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-created-multi-branch-routing", "eventType": "TICKET_CREATED", "actions": ["tickets.update_fields", "tickets.assign", "tickets.add_comment"], "controlFlow": ["control.if"] }, { "id": "T161", "description": "Ticket created: forEach with onItemError=continue; one recipient invalid, rest succeed", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-created-foreach-onitemerror-continue", "eventType": "TICKET_CREATED", "actions": ["notifications.send_in_app"], "controlFlow": ["control.forEach", "control.tryCatch"] }, { "id": "T162", "description": "Ticket created: try/catch captures error and creates human follow-up project task", "implemented": true, "featureIds": ["F030", "F031", "F040"], "fixture": "ticket-created-failure-creates-task", "eventType": "TICKET_CREATED", "actions": ["projects.create_task"], "controlFlow": ["control.tryCatch"] }, { "id": "T163", "description": "Ticket created: action.call saveAs output used in later transform.assign and comment includes output field", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-created-saveas-output-used", "eventType": "TICKET_CREATED", "actions": ["tickets.create", "tickets.add_comment"], "controlFlow": ["transform.assign"] }, { "id": "T164", "description": "Ticket created: validate action inputMapping typing for tickets.update_fields by setting nested dotted keys", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-created-dotted-keys-update", "eventType": "TICKET_CREATED", "actions": ["tickets.update_fields"], "controlFlow": [] }, { "id": "T165", "description": "Ticket created: assign user via scheduling.assign_user for immediate appointment (linked) and notify", "implemented": true, "featureIds": ["F030", "F034", "F040"], "fixture": "ticket-created-create-appointment-assign", "eventType": "TICKET_CREATED", "actions": ["scheduling.assign_user", "notifications.send_in_app"], "controlFlow": [] }, { "id": "T166", "description": "Ticket created: ensure engineProvided idempotency prevents duplicate notifications when retried", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-created-notify-idempotent", "eventType": "TICKET_CREATED", "actions": ["notifications.send_in_app"], "controlFlow": [] }, { "id": "T167", "description": "Ticket updated: change status twice; ensure workflow only runs for specific target status (if condition)", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-updated-status-filter", "eventType": "TICKET_STATUS_CHANGED", "actions": ["tickets.add_comment"], "controlFlow": ["control.if"] }, { "id": "T168", "description": "Ticket created: use clients.search to find billing contact and send email with templated subject/body", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-created-email-billing-contact", "eventType": "TICKET_CREATED", "actions": ["clients.search", "email.send"], "controlFlow": ["control.if"] }, { "id": "T169", "description": "Ticket created: build assignment rules list and evaluate with forEach, first match returns", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-created-rule-eval-foreach-firstmatch", "eventType": "TICKET_CREATED", "actions": ["tickets.assign"], "controlFlow": ["control.forEach", "control.if", "control.return"] }, { "id": "T170", "description": "Ticket created: add comment with computed SLA due time (transform.assign) and store in state for later steps", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-created-compute-sla-due", "eventType": "TICKET_CREATED", "actions": ["tickets.add_comment"], "controlFlow": ["transform.assign", "state.set"] }, { "id": "T171", "description": "Ticket created: create linked ticket for hardware replacement, then assign to field tech", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-created-hardware-replacement", "eventType": "TICKET_CREATED", "actions": ["tickets.create", "tickets.assign", "tickets.link_entities"], "controlFlow": [] }, { "id": "T172", "description": "Ticket created: if missing required fields in payload, add internal comment and return", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-created-missing-fields-return", "eventType": "TICKET_CREATED", "actions": ["tickets.add_comment"], "controlFlow": ["control.if", "control.return"] }, { "id": "T173", "description": "Ticket created: add attachment, then update ticket fields to reference attachment id in custom field", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-created-attachment-reference", "eventType": "TICKET_CREATED", "actions": ["tickets.add_attachment", "tickets.update_fields"], "controlFlow": [] }, { "id": "T174", "description": "Ticket created: try/catch around tickets.add_attachment; on catch continue and add comment about missing doc", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-created-attachment-missing-continue", "eventType": "TICKET_CREATED", "actions": ["tickets.add_attachment", "tickets.add_comment"], "controlFlow": ["control.tryCatch"] }, { "id": "T175", "description": "Ticket created: set multiple state vars and ensure they persist across branches", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-created-state-vars-persist", "eventType": "TICKET_CREATED", "actions": ["tickets.add_comment"], "controlFlow": ["state.set", "control.if"] }, { "id": "T176", "description": "Ticket updated: if customer replied then reopen ticket (update_fields) and notify tech", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-customer-replied-reopen", "eventType": "TICKET_CUSTOMER_REPLIED", "actions": ["tickets.update_fields", "notifications.send_in_app"], "controlFlow": ["control.if"] }, { "id": "T177", "description": "Ticket created: update fields using a mixture of literal, expr, and secretRef mapping values", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-created-mixed-mapping-values", "eventType": "TICKET_CREATED", "actions": ["tickets.update_fields"], "controlFlow": ["transform.assign"] }, { "id": "T178", "description": "Ticket created: two sequential callWorkflow steps (triage then notify), ensure both outputs captured", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-created-two-subworkflows", "eventType": "TICKET_CREATED", "actions": [], "controlFlow": ["control.callWorkflow"] }, { "id": "T179", "description": "Ticket created: heavy forEach (10 items) with concurrency and deterministic ordering assertions", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-created-foreach-heavy", "eventType": "TICKET_CREATED", "actions": ["notifications.send_in_app"], "controlFlow": ["control.forEach"] }, { "id": "T180", "description": "Project created: create standard kickoff task set (forEach) and notify PM", "implemented": true, "featureIds": ["F031", "F040"], "fixture": "project-created-kickoff-tasks", "eventType": "PROJECT_CREATED", "actions": ["projects.create_task", "notifications.send_in_app"], "controlFlow": ["control.forEach"] }, { "id": "T181", "description": "Project created: if project type is onboarding then create onboarding tasks and email client contact", "implemented": true, "featureIds": ["F031", "F040"], "fixture": "project-created-onboarding-email", "eventType": "PROJECT_CREATED", "actions": ["projects.create_task", "email.send"], "controlFlow": ["control.if"] }, { "id": "T182", "description": "Project updated: if status becomes Blocked then create CRM activity note and notify manager", "implemented": true, "featureIds": ["F031", "F040"], "fixture": "project-status-blocked-note", "eventType": "PROJECT_STATUS_CHANGED", "actions": ["crm.create_activity_note", "notifications.send_in_app"], "controlFlow": ["control.if"] }, { "id": "T183", "description": "Project closed: send completion email to client and create internal summary note", "implemented": true, "featureIds": ["F031", "F040"], "fixture": "project-closed-email-summary", "eventType": "PROJECT_CLOSED", "actions": ["email.send", "crm.create_activity_note"], "controlFlow": [] }, { "id": "T184", "description": "Project task created: auto-assign task based on tags via if/else and notify assignee", "implemented": true, "featureIds": ["F031", "F040"], "fixture": "project-task-created-auto-assign", "eventType": "PROJECT_TASK_CREATED", "actions": ["notifications.send_in_app"], "controlFlow": ["control.if"] }, { "id": "T185", "description": "Project task assigned: add ticket comment to linked ticket and notify assigned technician", "implemented": true, "featureIds": ["F031", "F040"], "fixture": "project-task-assigned-ticket-comment", "eventType": "PROJECT_TASK_ASSIGNED", "actions": ["tickets.add_comment", "notifications.send_in_app"], "controlFlow": [] }, { "id": "T186", "description": "Project approval requested: notify approvers and create follow-up task in PM project", "implemented": true, "featureIds": ["F031", "F040"], "fixture": "project-approval-requested", "eventType": "PROJECT_APPROVAL_REQUESTED", "actions": ["notifications.send_in_app", "projects.create_task"], "controlFlow": [] }, { "id": "T187", "description": "Project approval granted: update project status (via placeholder update_fields on linked ticket) and notify", "implemented": true, "featureIds": ["F031", "F040"], "fixture": "project-approval-granted-advance", "eventType": "PROJECT_APPROVAL_GRANTED", "actions": ["notifications.send_in_app"], "controlFlow": [] }, { "id": "T188", "description": "Project task completed: create CRM activity note and send completion email", "implemented": true, "featureIds": ["F031", "F040"], "fixture": "project-task-completed-note-email", "eventType": "PROJECT_TASK_COMPLETED", "actions": ["crm.create_activity_note", "email.send"], "controlFlow": [] }, { "id": "T189", "description": "Project task dependency blocked: notify PM and add internal ticket comment on related ticket", "implemented": true, "featureIds": ["F031", "F040"], "fixture": "project-task-dependency-blocked", "eventType": "PROJECT_TASK_DEPENDENCY_BLOCKED", "actions": ["notifications.send_in_app", "tickets.add_comment"], "controlFlow": [] }, { "id": "T190", "description": "Project task dependency unblocked: notify PM and reopen task follow-up (create task)", "implemented": true, "featureIds": ["F031", "F040"], "fixture": "project-task-dependency-unblocked", "eventType": "PROJECT_TASK_DEPENDENCY_UNBLOCKED", "actions": ["notifications.send_in_app", "projects.create_task"], "controlFlow": [] }, { "id": "T191", "description": "Project created: callWorkflow to generate tasks, then return early if no tasks created", "implemented": true, "featureIds": ["F031", "F040"], "fixture": "project-created-callworkflow-tasks", "eventType": "PROJECT_CREATED", "actions": [], "controlFlow": ["control.callWorkflow", "control.if", "control.return"] }, { "id": "T192", "description": "Project updated: try/catch around email.send, on catch send in-app notification to PM", "implemented": true, "featureIds": ["F031", "F040"], "fixture": "project-updated-email-trycatch", "eventType": "PROJECT_UPDATED", "actions": ["email.send", "notifications.send_in_app"], "controlFlow": ["control.tryCatch"] }, { "id": "T193", "description": "Project assigned: notify assignee and create time entry placeholder for kickoff meeting", "implemented": true, "featureIds": ["F031", "F040"], "fixture": "project-assigned-kickoff-time-entry", "eventType": "PROJECT_ASSIGNED", "actions": ["notifications.send_in_app", "time.create_entry"], "controlFlow": [] }, { "id": "T194", "description": "Project status changed: multi-branch routing for statuses (In Progress, Blocked, Completed)", "implemented": true, "featureIds": ["F031", "F040"], "fixture": "project-status-multi-branch", "eventType": "PROJECT_STATUS_CHANGED", "actions": ["notifications.send_in_app", "email.send", "crm.create_activity_note"], "controlFlow": ["control.if"] }, { "id": "T195", "description": "Project task status changed: if moved to QA then notify QA group (forEach)", "implemented": true, "featureIds": ["F031", "F040"], "fixture": "project-task-status-qa-notify", "eventType": "PROJECT_TASK_STATUS_CHANGED", "actions": ["notifications.send_in_app"], "controlFlow": ["control.forEach", "control.if"] }, { "id": "T196", "description": "Project created: derive task due dates using transform.assign and create tasks with computed dates", "implemented": true, "featureIds": ["F031", "F040"], "fixture": "project-created-compute-due-dates", "eventType": "PROJECT_CREATED", "actions": ["projects.create_task"], "controlFlow": ["transform.assign", "control.forEach"] }, { "id": "T197", "description": "Project task assigned: if assignee is missing then create task for PM to assign (return)", "implemented": true, "featureIds": ["F031", "F040"], "fixture": "project-task-assigned-missing-assignee", "eventType": "PROJECT_TASK_ASSIGNED", "actions": ["projects.create_task"], "controlFlow": ["control.if", "control.return"] }, { "id": "T198", "description": "Project task created: set state vars for task metadata, then notify PM with summary", "implemented": true, "featureIds": ["F031", "F040"], "fixture": "project-task-created-state-summary", "eventType": "PROJECT_TASK_CREATED", "actions": ["notifications.send_in_app"], "controlFlow": ["state.set"] }, { "id": "T199", "description": "Project created: create CRM activity note describing scope from payload fields", "implemented": true, "featureIds": ["F031", "F040"], "fixture": "project-created-crm-note", "eventType": "PROJECT_CREATED", "actions": ["crm.create_activity_note"], "controlFlow": ["transform.assign"] }, { "id": "T200", "description": "Project created: create related ticket and link (tickets.create + tickets.link_entities) for support tracking", "implemented": true, "featureIds": ["F031", "F040"], "fixture": "project-created-create-linked-ticket", "eventType": "PROJECT_CREATED", "actions": ["tickets.create", "tickets.link_entities"], "controlFlow": [] }, { "id": "T201", "description": "Project updated: if budget exceeded then notify finance and create CRM note", "implemented": true, "featureIds": ["F031", "F040"], "fixture": "project-budget-exceeded", "eventType": "PROJECT_UPDATED", "actions": ["notifications.send_in_app", "crm.create_activity_note"], "controlFlow": ["control.if"] }, { "id": "T202", "description": "Project closed: forEach over stakeholders to send in-app notifications", "implemented": true, "featureIds": ["F031", "F040"], "fixture": "project-closed-notify-stakeholders", "eventType": "PROJECT_CLOSED", "actions": ["notifications.send_in_app"], "controlFlow": ["control.forEach"] }, { "id": "T203", "description": "Project task completed: callWorkflow to run post-completion checklist", "implemented": true, "featureIds": ["F031", "F040"], "fixture": "project-task-completed-callworkflow", "eventType": "PROJECT_TASK_COMPLETED", "actions": [], "controlFlow": ["control.callWorkflow"] }, { "id": "T204", "description": "Project task status changed: try/catch around email.send; on catch notify PM", "implemented": true, "featureIds": ["F031", "F040"], "fixture": "project-task-status-email-trycatch", "eventType": "PROJECT_TASK_STATUS_CHANGED", "actions": ["email.send", "notifications.send_in_app"], "controlFlow": ["control.tryCatch"] }, { "id": "T205", "description": "Project created: ensure idempotent task creation on retry (projects.create_task actionProvided idempotency)", "implemented": true, "featureIds": ["F031", "F040"], "fixture": "project-created-tasks-idempotent", "eventType": "PROJECT_CREATED", "actions": ["projects.create_task"], "controlFlow": [] }, { "id": "T206", "description": "Project approval rejected: create follow-up task and notify PM", "implemented": true, "featureIds": ["F031", "F040"], "fixture": "project-approval-rejected-followup", "eventType": "PROJECT_APPROVAL_REJECTED", "actions": ["projects.create_task", "notifications.send_in_app"], "controlFlow": [] }, { "id": "T207", "description": "Task comment added: if comment mentions 'blocked' then update task metadata and notify PM", "implemented": true, "featureIds": ["F031", "F040"], "fixture": "task-comment-added-blocked-notify", "eventType": "TASK_COMMENT_ADDED", "actions": ["notifications.send_in_app"], "controlFlow": ["control.if"] }, { "id": "T208", "description": "Task comment updated: add CRM activity note with updated context", "implemented": true, "featureIds": ["F031", "F040"], "fixture": "task-comment-updated-crm-note", "eventType": "TASK_COMMENT_UPDATED", "actions": ["crm.create_activity_note"], "controlFlow": [] }, { "id": "T209", "description": "Project task additional agent assigned: notify additional agent and add ticket comment on linked ticket", "implemented": true, "featureIds": ["F031", "F040"], "fixture": "project-task-additional-agent-assigned", "eventType": "PROJECT_TASK_ADDITIONAL_AGENT_ASSIGNED", "actions": ["notifications.send_in_app", "tickets.add_comment"], "controlFlow": [] }, { "id": "T210", "description": "Appointment created: assign technician and notify both technician and requester", "implemented": true, "featureIds": ["F034", "F040"], "fixture": "appointment-created-assign-notify", "eventType": "APPOINTMENT_CREATED", "actions": ["scheduling.assign_user", "notifications.send_in_app"], "controlFlow": ["control.forEach"] }, { "id": "T211", "description": "Appointment rescheduled: send email confirmation and create CRM activity note", "implemented": true, "featureIds": ["F034", "F040"], "fixture": "appointment-rescheduled-email-note", "eventType": "APPOINTMENT_RESCHEDULED", "actions": ["email.send", "crm.create_activity_note"], "controlFlow": [] }, { "id": "T212", "description": "Appointment canceled: notify technician and create follow-up ticket comment", "implemented": true, "featureIds": ["F034", "F040"], "fixture": "appointment-canceled-notify", "eventType": "APPOINTMENT_CANCELED", "actions": ["notifications.send_in_app", "tickets.add_comment"], "controlFlow": [] }, { "id": "T213", "description": "Appointment completed: create time entry for actual duration and add ticket comment", "implemented": true, "featureIds": ["F034", "F040"], "fixture": "appointment-completed-time-entry", "eventType": "APPOINTMENT_COMPLETED", "actions": ["time.create_entry", "tickets.add_comment"], "controlFlow": [] }, { "id": "T214", "description": "Appointment no-show: notify dispatch and create CRM note", "implemented": true, "featureIds": ["F034", "F040"], "fixture": "appointment-no-show", "eventType": "APPOINTMENT_NO_SHOW", "actions": ["notifications.send_in_app", "crm.create_activity_note"], "controlFlow": [] }, { "id": "T215", "description": "Appointment assigned: send in-app notification and email confirmation", "implemented": true, "featureIds": ["F034", "F040"], "fixture": "appointment-assigned-notify-email", "eventType": "APPOINTMENT_ASSIGNED", "actions": ["notifications.send_in_app", "email.send"], "controlFlow": [] }, { "id": "T216", "description": "Schedule entry created: if outside business hours then notify on-call and add ticket comment", "implemented": true, "featureIds": ["F034", "F040"], "fixture": "schedule-entry-created-after-hours", "eventType": "SCHEDULE_ENTRY_CREATED", "actions": ["notifications.send_in_app", "tickets.add_comment"], "controlFlow": ["control.if"] }, { "id": "T217", "description": "Schedule entry updated: send email update to requester and create CRM note", "implemented": true, "featureIds": ["F034", "F040"], "fixture": "schedule-entry-updated-email-note", "eventType": "SCHEDULE_ENTRY_UPDATED", "actions": ["email.send", "crm.create_activity_note"], "controlFlow": [] }, { "id": "T218", "description": "Schedule entry deleted: notify technician and add internal ticket comment", "implemented": true, "featureIds": ["F034", "F040"], "fixture": "schedule-entry-deleted-notify", "eventType": "SCHEDULE_ENTRY_DELETED", "actions": ["notifications.send_in_app", "tickets.add_comment"], "controlFlow": [] }, { "id": "T219", "description": "Schedule block created: notify dispatch and create task to re-balance schedule", "implemented": true, "featureIds": ["F034", "F040"], "fixture": "schedule-block-created", "eventType": "SCHEDULE_BLOCK_CREATED", "actions": ["notifications.send_in_app", "projects.create_task"], "controlFlow": [] }, { "id": "T220", "description": "Schedule block deleted: notify dispatch and add internal CRM note", "implemented": true, "featureIds": ["F034", "F040"], "fixture": "schedule-block-deleted", "eventType": "SCHEDULE_BLOCK_DELETED", "actions": ["notifications.send_in_app", "crm.create_activity_note"], "controlFlow": [] }, { "id": "T221", "description": "Capacity threshold reached: notify dispatch team (forEach) and send email summary", "implemented": true, "featureIds": ["F034", "F040"], "fixture": "capacity-threshold-reached", "eventType": "CAPACITY_THRESHOLD_REACHED", "actions": ["notifications.send_in_app", "email.send"], "controlFlow": ["control.forEach"] }, { "id": "T222", "description": "Technician dispatched: add ticket comment and notify client contact", "implemented": true, "featureIds": ["F034", "F040"], "fixture": "technician-dispatched", "eventType": "TECHNICIAN_DISPATCHED", "actions": ["tickets.add_comment", "email.send"], "controlFlow": [] }, { "id": "T223", "description": "Technician en route: notify client contact and add internal note", "implemented": true, "featureIds": ["F034", "F040"], "fixture": "technician-en-route", "eventType": "TECHNICIAN_EN_ROUTE", "actions": ["email.send", "tickets.add_comment"], "controlFlow": [] }, { "id": "T224", "description": "Technician arrived: add ticket comment and create time entry start marker", "implemented": true, "featureIds": ["F034", "F040"], "fixture": "technician-arrived", "eventType": "TECHNICIAN_ARRIVED", "actions": ["tickets.add_comment", "time.create_entry"], "controlFlow": [] }, { "id": "T225", "description": "Technician checked out: add closure comment and notify dispatch", "implemented": true, "featureIds": ["F034", "F040"], "fixture": "technician-checked-out", "eventType": "TECHNICIAN_CHECKED_OUT", "actions": ["tickets.add_comment", "notifications.send_in_app"], "controlFlow": [] }, { "id": "T226", "description": "Appointment request created: notify approvers and create task for triage", "implemented": true, "featureIds": ["F034", "F040"], "fixture": "appointment-request-created", "eventType": "APPOINTMENT_REQUEST_CREATED", "actions": ["notifications.send_in_app", "projects.create_task"], "controlFlow": [] }, { "id": "T227", "description": "Appointment request approved: create schedule entry assignment and notify requester", "implemented": true, "featureIds": ["F034", "F040"], "fixture": "appointment-request-approved", "eventType": "APPOINTMENT_REQUEST_APPROVED", "actions": ["scheduling.assign_user", "email.send"], "controlFlow": [] }, { "id": "T228", "description": "Appointment request declined: notify requester and create CRM note", "implemented": true, "featureIds": ["F034", "F040"], "fixture": "appointment-request-declined", "eventType": "APPOINTMENT_REQUEST_DECLINED", "actions": ["email.send", "crm.create_activity_note"], "controlFlow": [] }, { "id": "T229", "description": "Appointment request cancelled: notify technician and add internal ticket comment", "implemented": true, "featureIds": ["F034", "F040"], "fixture": "appointment-request-cancelled", "eventType": "APPOINTMENT_REQUEST_CANCELLED", "actions": ["notifications.send_in_app", "tickets.add_comment"], "controlFlow": [] }, { "id": "T230", "description": "Invoice generated: create internal billing review task and notify billing team", "implemented": true, "featureIds": ["F032", "F040"], "fixture": "invoice-generated-review-task", "eventType": "INVOICE_GENERATED", "actions": ["projects.create_task", "notifications.send_in_app"], "controlFlow": [] }, { "id": "T231", "description": "Invoice finalized: send invoice-ready email to billing contact and add CRM note", "implemented": true, "featureIds": ["F032", "F040"], "fixture": "invoice-finalized-email", "eventType": "INVOICE_FINALIZED", "actions": ["email.send", "crm.create_activity_note"], "controlFlow": [] }, { "id": "T232", "description": "Invoice sent: notify account manager and add ticket comment to any linked billing ticket", "implemented": true, "featureIds": ["F032", "F040"], "fixture": "invoice-sent-notify", "eventType": "INVOICE_SENT", "actions": ["notifications.send_in_app", "tickets.add_comment"], "controlFlow": [] }, { "id": "T233", "description": "Invoice status changed: if status is Paid then close related billing ticket (if linked)", "implemented": true, "featureIds": ["F032", "F040"], "fixture": "invoice-status-paid-close-ticket", "eventType": "INVOICE_STATUS_CHANGED", "actions": ["tickets.close"], "controlFlow": ["control.if"] }, { "id": "T234", "description": "Invoice due date changed: send email to billing contact with new due date", "implemented": true, "featureIds": ["F032", "F040"], "fixture": "invoice-due-date-changed-email", "eventType": "INVOICE_DUE_DATE_CHANGED", "actions": ["email.send"], "controlFlow": [] }, { "id": "T235", "description": "Invoice overdue: send overdue reminder email and notify account manager", "implemented": true, "featureIds": ["F032", "F040"], "fixture": "invoice-overdue-reminder", "eventType": "INVOICE_OVERDUE", "actions": ["email.send", "notifications.send_in_app"], "controlFlow": [] }, { "id": "T236", "description": "Invoice written off: create CRM activity note and notify finance", "implemented": true, "featureIds": ["F032", "F040"], "fixture": "invoice-written-off-note", "eventType": "INVOICE_WRITTEN_OFF", "actions": ["crm.create_activity_note", "notifications.send_in_app"], "controlFlow": [] }, { "id": "T237", "description": "Payment recorded: notify billing team and add comment to related ticket (if any)", "implemented": true, "featureIds": ["F032", "F040"], "fixture": "payment-recorded-notify", "eventType": "PAYMENT_RECORDED", "actions": ["notifications.send_in_app", "tickets.add_comment"], "controlFlow": [] }, { "id": "T238", "description": "Payment applied: if partial then create follow-up task, else add CRM note", "implemented": true, "featureIds": ["F032", "F040"], "fixture": "payment-applied-partial-followup", "eventType": "PAYMENT_APPLIED", "actions": ["projects.create_task", "crm.create_activity_note"], "controlFlow": ["control.if"] }, { "id": "T239", "description": "Payment failed: send email to billing contact and notify account manager", "implemented": true, "featureIds": ["F032", "F040"], "fixture": "payment-failed-notify", "eventType": "PAYMENT_FAILED", "actions": ["email.send", "notifications.send_in_app"], "controlFlow": [] }, { "id": "T240", "description": "Contract created: create onboarding billing task and notify account manager", "implemented": true, "featureIds": ["F032", "F040"], "fixture": "contract-created-onboarding-task", "eventType": "CONTRACT_CREATED", "actions": ["projects.create_task", "notifications.send_in_app"], "controlFlow": [] }, { "id": "T241", "description": "Contract updated: add CRM activity note summarizing changes and notify finance", "implemented": true, "featureIds": ["F032", "F040"], "fixture": "contract-updated-note", "eventType": "CONTRACT_UPDATED", "actions": ["crm.create_activity_note", "notifications.send_in_app"], "controlFlow": [] }, { "id": "T242", "description": "Contract status changed: if suspended then notify billing and create task to follow up", "implemented": true, "featureIds": ["F032", "F040"], "fixture": "contract-status-suspended-followup", "eventType": "CONTRACT_STATUS_CHANGED", "actions": ["notifications.send_in_app", "projects.create_task"], "controlFlow": ["control.if"] }, { "id": "T243", "description": "Contract renewal upcoming: send renewal reminder email and create CRM note", "implemented": true, "featureIds": ["F032", "F040"], "fixture": "contract-renewal-upcoming", "eventType": "CONTRACT_RENEWAL_UPCOMING", "actions": ["email.send", "crm.create_activity_note"], "controlFlow": [] }, { "id": "T244", "description": "Invoice overdue: callWorkflow for dunning sequence (email + notify) and capture output", "implemented": true, "featureIds": ["F032", "F040"], "fixture": "invoice-overdue-callworkflow-dunning", "eventType": "INVOICE_OVERDUE", "actions": [], "controlFlow": ["control.callWorkflow"] }, { "id": "T245", "description": "Invoice status changed: multi-branch routing for Draft/Sent/Paid/Overdue with different actions", "implemented": true, "featureIds": ["F032", "F040"], "fixture": "invoice-status-multi-branch", "eventType": "INVOICE_STATUS_CHANGED", "actions": ["email.send", "notifications.send_in_app", "projects.create_task"], "controlFlow": ["control.if"] }, { "id": "T246", "description": "Invoice generated: forEach over invoice line anomalies to create tasks (one per anomaly)", "implemented": true, "featureIds": ["F032", "F040"], "fixture": "invoice-generated-anomaly-tasks", "eventType": "INVOICE_GENERATED", "actions": ["projects.create_task"], "controlFlow": ["control.forEach"] }, { "id": "T247", "description": "Payment failed: try/catch around email.send; on catch notify in-app and continue", "implemented": true, "featureIds": ["F032", "F040"], "fixture": "payment-failed-email-trycatch", "eventType": "PAYMENT_FAILED", "actions": ["email.send", "notifications.send_in_app"], "controlFlow": ["control.tryCatch"] }, { "id": "T248", "description": "Contract renewal upcoming: create follow-up ticket and assign to account manager", "implemented": true, "featureIds": ["F032", "F040"], "fixture": "contract-renewal-create-ticket", "eventType": "CONTRACT_RENEWAL_UPCOMING", "actions": ["tickets.create", "tickets.assign"], "controlFlow": [] }, { "id": "T249", "description": "Invoice overdue: add internal ticket comment and attach standard payment instructions PDF", "implemented": true, "featureIds": ["F032", "F040"], "fixture": "invoice-overdue-attach-instructions", "eventType": "INVOICE_OVERDUE", "actions": ["tickets.add_comment", "tickets.add_attachment"], "controlFlow": [] }, { "id": "T250", "description": "Company created: create CRM activity note and notify onboarding team", "implemented": true, "featureIds": ["F040"], "fixture": "company-created-onboarding-note", "eventType": "COMPANY_CREATED", "actions": ["crm.create_activity_note", "notifications.send_in_app"], "controlFlow": [] }, { "id": "T251", "description": "Company updated: if domain changed then notify IT and add CRM note", "implemented": true, "featureIds": ["F040"], "fixture": "company-updated-domain-change", "eventType": "COMPANY_UPDATED", "actions": ["notifications.send_in_app", "crm.create_activity_note"], "controlFlow": ["control.if"] }, { "id": "T252", "description": "Contact lookup: on ticket created, contacts.find then notify the contact owner", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-created-contact-owner-notify", "eventType": "TICKET_CREATED", "actions": ["contacts.find", "notifications.send_in_app"], "controlFlow": ["control.if"] }, { "id": "T253", "description": "Client search: on ticket created, clients.search then add comment with matched client name", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-created-client-search-comment", "eventType": "TICKET_CREATED", "actions": ["clients.search", "tickets.add_comment"], "controlFlow": ["transform.assign"] }, { "id": "T254", "description": "Time entry submitted: notify manager and create CRM note", "implemented": true, "featureIds": ["F040"], "fixture": "time-entry-submitted-notify", "eventType": "TIME_ENTRY_SUBMITTED", "actions": ["notifications.send_in_app", "crm.create_activity_note"], "controlFlow": [] }, { "id": "T255", "description": "Time entry approved: send email confirmation to technician and add CRM note", "implemented": true, "featureIds": ["F040"], "fixture": "time-entry-approved-email", "eventType": "TIME_ENTRY_APPROVED", "actions": ["email.send", "crm.create_activity_note"], "controlFlow": [] }, { "id": "T256", "description": "Ticket created: validate large notification fanout with forEach and deterministic cleanup", "implemented": true, "featureIds": ["F030", "F040"], "fixture": "ticket-created-fanout-notify-cleanup", "eventType": "TICKET_CREATED", "actions": ["notifications.send_in_app"], "controlFlow": ["control.forEach"] }, { "id": "T257", "description": "Ticket created: ensure cleanup removes created ticket/comments/notifications", "implemented": true, "featureIds": ["F021"], "fixture": "ticket-created-cleanup-verification", "eventType": "TICKET_CREATED", "actions": ["tickets.create", "tickets.add_comment", "notifications.send_in_app"], "controlFlow": [] }, { "id": "T258", "description": "Project created: ensure cleanup removes created tasks/notes", "implemented": true, "featureIds": ["F021"], "fixture": "project-created-cleanup-verification", "eventType": "PROJECT_CREATED", "actions": ["projects.create_task", "crm.create_activity_note"], "controlFlow": [] }, { "id": "T259", "description": "Invoice generated: ensure cleanup removes created tasks/notifications", "implemented": true, "featureIds": ["F021"], "fixture": "invoice-generated-cleanup-verification", "eventType": "INVOICE_GENERATED", "actions": ["projects.create_task", "notifications.send_in_app"], "controlFlow": [] } ]