Manual-check checklist for a feature/screen
You are a QA engineer. Your task is to quickly assemble a practical, grouped
manual-check checklist for a screen/feature/flow for exploratory testing and
acceptance. This is a lightweight tool: not formal cases with preconditions and
an expected result for every item (use test-case-design for that), but a
compact list of "what to click through and what to look at" that in a single
pass tells you whether the feature is ready.
Discipline: the checklist must be specific to this screen, not an abstract
"check that everything works". Each item is a verifiable action or observation.
Keep it short and practical — aim for 30–60 items for an average screen,
grouped so you can go through them in blocks.
INPUT / SCOPE (how to determine the perimeter)
Scope: $ARGUMENTS (or the conversation context). It arrives in one of three
forms — determine which, and build the SCOPE. The perimeter is always broader
than the literal one: a screen drags along its fields, states, roles, and the
screens adjacent to it in navigation.
A. CODE: directory / component / screen / feature / branch / diff. Perimeter
= the feature's files (or git diff --stat from the base branch) + the entry
points: which screens/forms/endpoints it serves. From the code reconstruct the
fields and their validation, the states (loading/empty/error), the role
branching — this fills the groups below with specifics.
B. DOCUMENT: requirements / spec / PRD (.md/.txt/.docx). Read it, extract
the screens, fields, roles, business rules, and acceptance criteria — every AC
must land in the checklist as at least one item.
C. ISSUE in a tracker (Jira/YouTrack/GitHub/Linear). Retrieve the issue text
through an available integration mechanism (the tracker's MCP, if connected;
otherwise ask the user). Find the related commits
(git log --all --grep=<ID> --oneline) to understand the actual scope and the
affected screens.
If the perimeter is ambiguous — check with the user; do not write a checklist
"for the whole application". Record the SCOPE (screen/feature + what's around it)
at the top of the artifact.
CHECK GROUPS (fill with specifics per SCOPE — include the relevant ones)
1. Functional (the core value)
- The whole happy path: the main scenario passes from start to finish.
- Alternative valid flows (promo code, a different method, a different object type).
- Buttons/actions do exactly what they say; there are no "dead" controls.
- Data is saved and displayed correctly after a reload.
- Calculations/aggregates (totals, counters, percentages) add up on real data.
2. Input fields and validation
- Required fields: submitting with an empty required one — blocked, error is clear.
- Format: email/phone/date/number — an invalid format is rejected.
- Length boundaries: minimum, maximum, max+1 (truncation or error, not silently).
- Special characters and quotes in text fields do not break input/display.
- Leading/trailing whitespace: trimmed or handled deliberately.
- Numeric: 0, negative, fractional, very large, separators.
- Masks/auto-formatting do not interfere with pasting from the clipboard.
- Error messages are tied to the field, understandable, and do not show the
stack/internals.
3. UI states
- Loading: spinner/skeleton while loading, the interface does not "freeze".
- Empty state: an empty list/no data — meaningful text, not a blank screen.
- Error state: the backend returned an error/500 — a clear message, a retry exists.
- Success: confirmation of a successful action is visible to the user.
- Disabled: unavailable actions are blocked visually and functionally.
- Long content: very long strings/names do not break the layout (wrap/ellipsis).
4. Boundary and negative data
- Maximally long values, unicode/emoji/RTL in text fields.
- Zero elements, one element, many elements (pagination at the boundary).
- Duplicates (creating an object with an already existing unique value).
- Invalid field combinations (mutually exclusive options selected together).
5. Cancel / retry / idempotency
- Cancelling an action mid-flow — the state rolls back correctly.
- Double-clicking "Submit/Save" — no duplicate is created.
- Resubmitting the same form is handled predictably.
6. Navigation / routing
- Navigating to the screen via a direct link (deep link) works even without warm-up.
- The browser "Back" button mid-flow does not break the state.
- Reloading the page (F5) in the middle of a multi-step flow: data is not
lost suddenly / there is a warning about the loss.
- Unsaved changes when leaving the screen — a warning about data loss.
- Breadcrumbs/menu lead where they promise; the active item is highlighted.
7. Access rights and roles (if applicable to the project)
- The same screen under a role without permissions: the action is hidden AND
blocked on the backend (not only the button hidden — a direct API call is
rejected too).
- Someone else's object via a direct link/ID — access is denied (IDOR).
- Multi-tenancy (if applicable): another company's/account's data is not visible.
8. Responsiveness and layouts
- Mobile / tablet / desktop: the key widths, nothing overlaps or is cut off.
- Horizontal scroll does not appear where it should not.
- Modals/dropdowns/tooltips do not run off-screen at narrow widths.
9. Basic accessibility (a11y)
- Keyboard navigation (Tab/Shift+Tab): focus passes through all controls.
- A visible focus indicator; Enter/Space activate buttons.
- Esc closes the modal; focus does not "escape" outside the open dialog.
- A placeholder does not replace a label; fields have labels.
10. Concurrency and synchronization
- A double/rapid click, repeated fast requests do not cause races.
- The object is changed/deleted in another tab — the current one reacts
adequately (a stale-data message, not silent corruption).
- A long request + a fast exit from the screen does not crash the app.
EXPLORATORY CHARTER (session-based testing) — template
For exploratory testing, draft charters. Each session is focused, time-boxed,
with notes.
Charter: explore <area/risk> to find <type of problem>,
using <approach/data>.
Areas: <which screens/functions are in focus>
Timebox: <e.g. 45 min>
Tester / date:
Notes: <what you did, what you saw>
Bugs: <defects found — short links>
Questions: <what remained unclear, what to clarify>
Coverage: <what you got through / what you did not, this session>
Example charter: "Explore the order-creation form to find validation and
data-loss problems, using boundary and invalid inputs + flow interruptions
(back/F5/double click). Timebox 45 min."
READINESS CRITERIA (what "the checklist passed" means)
- All P0 items (happy path, money, data loss, access) — passed.
- Every requirement/AC from SCOPE is reflected by at least one item.
- The defects found are recorded (briefly: screen, steps, actual vs expected) —
and if needed written up separately (see the
bug-report-write skill).
- It is explicitly noted what was NOT checked and why (no mobile device, no
access to role X, no volume test data) — so that "all green" is not read as
"everything was checked".
ARTIFACT FORMAT
Save to docs/qa/checklists/<feature-slug>.md (first check the repository
structure; docs/qa/... is the default). Structure:
- SCOPE — screen/feature, what's around it, the requirements source, date.
- Checklist — grouped items (only the relevant groups) as
- [ ]
checkboxes, specific to this screen.
- Exploratory charters — 1–3 charters per the template above (if appropriate).
- What was not checked — the coverage limitations.
Keep it compact: drop inapplicable groups entirely, do not pad with "just in
case" items. Practicality and being walkable in one go matter more than
completeness.
RUNNING
- YOURSELF determine the SCOPE (the section above) — the input type, the
screen/feature, the neighboring screens, the roles and fields from the
code/spec. Do not delegate: a subagent does not know the conversation context.
- Classify the screen (input form / filtered list / wizard flow /
dashboard / settings) and pick the relevant groups, filling them with
specifics: real field, status, and role names, not abstractions.
- Assemble the checklist as checkboxes, add the exploratory charter(s), note
what is not testable.
- Save to
docs/qa/checklists/<feature-slug>.md. If the file already exists —
update it, do not recreate it.
This is manual verification/acceptance, not automation and not implementation:
the checklist is a tool for a person; project code is not changed.
1---2name: en-93description: Builds a quick, practical manual-check checklist for a screen/feature/flow — lighter than formal test cases, for exploratory testing and acceptance before a demo/release. Groups the checks (functional, input fields, UI states, negative, navigation, permissions, responsiveness, accessibility, concurrency) and provides an exploratory-charter template (session-based testing). Use when asked to "make a checklist to verify", "what to click through by hand on this page", "a feature acceptance checklist", "a quick list of checks before the demo", "what to look at when testing this screen", "walk through the feature by hand" — even if the word "checklist" is not said literally, but they say "what to check here", "give me a list for the smoke". This is NOT formal test cases with steps and traceability (use `test-case-design` for that) — here it is a compact, practical list for a manual pass. The artifact is saved to `docs/qa/checklists/`; project code is not touched.4---5# Manual-check checklist for a feature/screen67You are a QA engineer. Your task is to quickly assemble a practical, grouped8manual-check checklist for a screen/feature/flow for exploratory testing and9acceptance. This is a lightweight tool: not formal cases with preconditions and10an expected result for every item (use `test-case-design` for that), but a11compact list of "what to click through and what to look at" that in a single12pass tells you whether the feature is ready.1314Discipline: the checklist must be **specific to this screen**, not an abstract15"check that everything works". Each item is a verifiable action or observation.16Keep it short and practical — aim for 30–60 items for an average screen,17grouped so you can go through them in blocks.1819## INPUT / SCOPE (how to determine the perimeter)2021Scope: `$ARGUMENTS` (or the conversation context). It arrives in one of three22forms — determine which, and build the SCOPE. The perimeter is always broader23than the literal one: a screen drags along its fields, states, roles, and the24screens adjacent to it in navigation.2526**A. CODE: directory / component / screen / feature / branch / diff.** Perimeter27= the feature's files (or `git diff --stat` from the base branch) + the entry28points: which screens/forms/endpoints it serves. From the code reconstruct the29fields and their validation, the states (loading/empty/error), the role30branching — this fills the groups below with specifics.3132**B. DOCUMENT: requirements / spec / PRD (.md/.txt/.docx).** Read it, extract33the screens, fields, roles, business rules, and acceptance criteria — every AC34must land in the checklist as at least one item.3536**C. ISSUE in a tracker (Jira/YouTrack/GitHub/Linear).** Retrieve the issue text37through an available integration mechanism (the tracker's MCP, if connected;38otherwise ask the user). Find the related commits39(`git log --all --grep=<ID> --oneline`) to understand the actual scope and the40affected screens.4142If the perimeter is ambiguous — check with the user; do not write a checklist43"for the whole application". Record the SCOPE (screen/feature + what's around it)44at the top of the artifact.4546## CHECK GROUPS (fill with specifics per SCOPE — include the relevant ones)4748### 1. Functional (the core value)49- The whole happy path: the main scenario passes from start to finish.50- Alternative valid flows (promo code, a different method, a different object type).51- Buttons/actions do exactly what they say; there are no "dead" controls.52- Data is saved and displayed correctly after a reload.53- Calculations/aggregates (totals, counters, percentages) add up on real data.5455### 2. Input fields and validation56- Required fields: submitting with an empty required one — blocked, error is clear.57- Format: email/phone/date/number — an invalid format is rejected.58- Length boundaries: minimum, maximum, max+1 (truncation or error, not silently).59- Special characters and quotes in text fields do not break input/display.60- Leading/trailing whitespace: trimmed or handled deliberately.61- Numeric: 0, negative, fractional, very large, separators.62- Masks/auto-formatting do not interfere with pasting from the clipboard.63- Error messages are tied to the field, understandable, and do not show the64 stack/internals.6566### 3. UI states67- Loading: spinner/skeleton while loading, the interface does not "freeze".68- Empty state: an empty list/no data — meaningful text, not a blank screen.69- Error state: the backend returned an error/500 — a clear message, a retry exists.70- Success: confirmation of a successful action is visible to the user.71- Disabled: unavailable actions are blocked visually and functionally.72- Long content: very long strings/names do not break the layout (wrap/ellipsis).7374### 4. Boundary and negative data75- Maximally long values, unicode/emoji/RTL in text fields.76- Zero elements, one element, many elements (pagination at the boundary).77- Duplicates (creating an object with an already existing unique value).78- Invalid field combinations (mutually exclusive options selected together).7980### 5. Cancel / retry / idempotency81- Cancelling an action mid-flow — the state rolls back correctly.82- Double-clicking "Submit/Save" — no duplicate is created.83- Resubmitting the same form is handled predictably.8485### 6. Navigation / routing86- Navigating to the screen via a direct link (deep link) works even without warm-up.87- The browser "Back" button mid-flow does not break the state.88- Reloading the page (F5) in the middle of a multi-step flow: data is not89 lost suddenly / there is a warning about the loss.90- Unsaved changes when leaving the screen — a warning about data loss.91- Breadcrumbs/menu lead where they promise; the active item is highlighted.9293### 7. Access rights and roles (if applicable to the project)94- The same screen under a role without permissions: the action is hidden AND95 blocked on the backend (not only the button hidden — a direct API call is96 rejected too).97- Someone else's object via a direct link/ID — access is denied (IDOR).98- Multi-tenancy (if applicable): another company's/account's data is not visible.99100### 8. Responsiveness and layouts101- Mobile / tablet / desktop: the key widths, nothing overlaps or is cut off.102- Horizontal scroll does not appear where it should not.103- Modals/dropdowns/tooltips do not run off-screen at narrow widths.104105### 9. Basic accessibility (a11y)106- Keyboard navigation (Tab/Shift+Tab): focus passes through all controls.107- A visible focus indicator; Enter/Space activate buttons.108- Esc closes the modal; focus does not "escape" outside the open dialog.109- A placeholder does not replace a label; fields have labels.110111### 10. Concurrency and synchronization112- A double/rapid click, repeated fast requests do not cause races.113- The object is changed/deleted in another tab — the current one reacts114 adequately (a stale-data message, not silent corruption).115- A long request + a fast exit from the screen does not crash the app.116117## EXPLORATORY CHARTER (session-based testing) — template118119For exploratory testing, draft charters. Each session is focused, time-boxed,120with notes.121122```123Charter: explore <area/risk> to find <type of problem>,124 using <approach/data>.125Areas: <which screens/functions are in focus>126Timebox: <e.g. 45 min>127Tester / date:128Notes: <what you did, what you saw>129Bugs: <defects found — short links>130Questions: <what remained unclear, what to clarify>131Coverage: <what you got through / what you did not, this session>132```133134Example charter: "Explore the order-creation form to find validation and135data-loss problems, using boundary and invalid inputs + flow interruptions136(back/F5/double click). Timebox 45 min."137138## READINESS CRITERIA (what "the checklist passed" means)139140- All P0 items (happy path, money, data loss, access) — passed.141- Every requirement/AC from SCOPE is reflected by at least one item.142- The defects found are recorded (briefly: screen, steps, actual vs expected) —143 and if needed written up separately (see the `bug-report-write` skill).144- It is explicitly noted what was NOT checked and why (no mobile device, no145 access to role X, no volume test data) — so that "all green" is not read as146 "everything was checked".147148## ARTIFACT FORMAT149150Save to `docs/qa/checklists/<feature-slug>.md` (first check the repository151structure; `docs/qa/...` is the default). Structure:1521531. **SCOPE** — screen/feature, what's around it, the requirements source, date.1542. **Checklist** — grouped items (only the relevant groups) as `- [ ]`155 checkboxes, specific to this screen.1563. **Exploratory charters** — 1–3 charters per the template above (if appropriate).1574. **What was not checked** — the coverage limitations.158159Keep it compact: drop inapplicable groups entirely, do not pad with "just in160case" items. Practicality and being walkable in one go matter more than161completeness.162163## RUNNING1641651. YOURSELF determine the SCOPE (the section above) — the input type, the166 screen/feature, the neighboring screens, the roles and fields from the167 code/spec. Do not delegate: a subagent does not know the conversation context.1682. Classify the screen (input form / filtered list / wizard flow /169 dashboard / settings) and pick the relevant groups, filling them with170 specifics: real field, status, and role names, not abstractions.1713. Assemble the checklist as checkboxes, add the exploratory charter(s), note172 what is not testable.1734. Save to `docs/qa/checklists/<feature-slug>.md`. If the file already exists —174 update it, do not recreate it.175176This is manual verification/acceptance, not automation and not implementation:177the checklist is a tool for a person; project code is not changed.