Derives human-readable manual test cases from stateful behavior: identify states, events, transitions, and guard conditions, draw the state table including invalid (empty-cell) transitions, choose a coverage level (all states, valid transitions / 0-switch, transition pairs / 1-switch per Chow, all transitions including invalid ones), then derive one test case per coverage item as an event sequence with per-step expected states (ISTQB CTFL v4.0 section 4.2.4). A deep single-technique walkthrough rather than a broad multi-lens case matrix; the output is manual step/expected cases rather than parameterized test code, and it covers how cases are derived rather than how a case record is structured. Use for lifecycle entities (accounts, orders, subscriptions), workflows, and UI wizards where the response to an event depends on the current state.
78
93%
Does it follow best practices?
Impact
77%
0.81xAverage score across 10 eval scenarios
Passed
No findings from the security scan
Our helpdesk moves a ticket through five statuses. A ticket arrives new, an agent picks it up and it is open, the agent replies and it waits on the customer, the agent resolves it, and 72 hours later it closes itself unless the customer comes back. A customer who is not satisfied can reopen a resolved ticket from the portal, which puts it back with the agent.
We have two SLA clocks. The first-response clock runs from the moment a ticket lands with an agent until that agent's first reply. The auto-close clock runs from the moment a ticket is resolved.
Two incidents last month, both from reopened tickets. In the first, a customer reopened a ticket and it closed itself twenty minutes later - the auto-close deadline from the first resolution was still sitting on the record. In the second, a reopened ticket showed its first-response SLA as already breached the instant it reopened, because the clock had never been restarted, and it went to the top of the escalation report.
Our regression pack has one case per status change and every one of them passes. Both incidents happened anyway, because a ticket that is open because it was just reopened is not the same as a ticket that is open because it was just assigned, and nothing in the pack distinguishes those.
Produce docs/ticket-lifecycle-tests.md containing:
Keep the pack something a two-person QA team can actually run in a day. Email notification content, the escalation report layout, and the agent console's UI styling are out of scope. Do not write code.
Extract the following files before beginning.
=============== FILE: docs/ticket-workflow.md ===============
| Status | Meaning |
|---|---|
| New | Arrived, nobody owns it |
| Open | With an agent, agent's move |
| PendingCustomer | With the customer, waiting on their reply |
| Resolved | Agent believes it is done; auto-close clock running |
| Closed | Finished. Read-only for the customer. |
| Event | Trigger |
|---|---|
| assigned | Agent or round-robin rule takes/moves ownership |
| agent-replies | Agent posts a public reply |
| customer-replies | Customer posts from the portal or by email |
| agent-resolves | Agent marks resolved |
| customer-reopens | Customer clicks Reopen on a resolved ticket |
| auto-close-timer-expires | Scheduler, 72h after the ticket was resolved |
| agent-closes | Agent closes the ticket outright |