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
We run online certification exams. A candidate opens their attempt, works through it, can pause once for a comfort break, and submits when they are done. The exam window closes at a fixed time whatever the candidate is doing, including mid-break. A proctor watching the webcam feed can terminate an attempt for suspected cheating, which ends it on the spot with whatever answers are already saved.
Answers save as the candidate goes. The paused screen is a plain overlay with a Resume button and no question content, and the submit control is not on it - a candidate has to resume before they can submit. The client is a browser app and it posts every answer change to our API; the API is public, documented, and a candidate who opens devtools can post whatever they like whenever they like.
The QA lead keeps a coverage spreadsheet with one row per screen the attempt can show. All four rows are ticked and the report goes to the certification board every month saying attempt handling is fully covered. Nobody on the team can explain what "fully covered" is measuring, and last month a candidate's answers changed after their attempt had already ended and the board wants to know how that passed a full-coverage suite.
Produce docs/exam-attempt-coverage.md containing:
Webcam capture, question banks, and score calculation are out of scope. Do not write code.
Extract the following files before beginning.
=============== FILE: docs/exam-attempt.md ===============
| Situation | What the candidate sees |
|---|---|
| NotStarted | Landing page with the Start button and the window's closing time |
| InProgress | Questions, answer controls, timer, Pause button |
| Paused | Grey overlay, Resume button, no question content, no submit |
| Ended | Read-only summary and the submitted-at time |
| Event | Source |
|---|---|
| start-attempt | Candidate, Start button |
| answer-saved | Candidate's browser, POST /attempts/{id}/answers |
| pause-requested | Candidate, Pause button |
| resume-requested | Candidate, Resume button |
| finish-requested | Candidate, Submit button |
| exam-window-closes | Scheduler, at the published window end |
| proctor-terminates | Proctor console |
Seven events, and nothing else changes an attempt.
POST /attempts/{id}/answers is a documented public endpoint. It is called
by the browser app but nothing stops a candidate calling it directly.