skills/tester-cookbook/SKILL.md
Use when preparing a concise QA report for an internal tester from a JIRA task and its linked pull requests — focused on what the tester should report back to the dev team — and posting it as a JIRA comment.
npx skillsauth add pekral/cursor-rules tester-cookbookInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
@rules/php/core-standards.mdc@rules/git/general.mdc@rules/jira/general.mdc — JIRA comments must be in Wiki Markup, never Markdown@rules/reports/general.mdc — the cookbook JIRA comment must be written in the language of the JIRA task description (e.g. ECOMAIL-* tasks → Czech). Do not mix languages within a single comment; UI-visible labels stay verbatim as they appear in the admin screen.@rules/jira/general.mdc, status transitions are handled by humans only.queue, lambda, SQS, ENV, .env, config, feature flag (use switch in Administration), job, dispatch, retry, polling, telemetry, log, Bugsnag, Slack (unless the Slack notification is what the tester reads), AWS, payload, endpoint, API v2 (unless that exact wording appears in the UI).enum, class, namespace, repository, action, table, column, DB column name, migration, route, status code, event name, listener.CampaignLogEvent::SMS_ACCEPTED), translate it to the exact label the tester sees in the UI ("status Waiting for delivery in the campaign report").qa-cz-1 — ask devs for access if you don't have it"), never quote a password or API key.+420604240203".#), any fenced code block (```), or any Markdown table (|).JIRA_KEY — required. The JIRA task that owns the assignment (e.g. ECOMAIL-1234).PR_NUMBER — optional. A specific linked pull request to focus on; when omitted, use every PR linked from the JIRA task.skills/code-review-jira/scripts/load-issue.sh <KEY|URL> — never call acli directly. If the loader is unavailable (missing tool, exit code 2/3), fall back to the JIRA MCP server.summary, descriptionText, every entry in comments[], and the linked-PR list off the resulting JSON document.PR_NUMBER), call skills/code-review-github/scripts/load-issue.sh <NUMBER|URL> — never call gh pr view directly.For each impact identified in step 2, look up the corresponding visible label inside the application:
gosms_sms_version).Every comment opens with two metadata lines (in JIRA Wiki Markup), then the body sections. The body skips the first section when it does not add value (for example when the change is verifiable purely from the dev-team report — a notification text change, a label rename in the report).
Metadata lines (always at the top of the comment, in this order):
@handle, otherwise the git Name <email> form. Comma-separated in commit order, deduped. Resolved exactly as @skills/pr-summary/SKILL.md resolves authors (git log --pretty='%an <%ae>' base..HEAD, plus PR author.login and commits[].author.login). Never list the agent / publishing identity. When authorship cannot be determined, write Authors: unknown — git history did not yield a recognisable identity.Body sections:
+420604240203 → open Recipient activity on the campaign detail."h2., h3. (never #).*. Numbered lists: #.*bold*. Italic: _italic_.{{...}} — {{...}} reads as code and disrupts a non-technical reader.{{...}} only for literal strings the tester types verbatim, e.g. the test phone number {{+420604240203}}.```), no Markdown headings, no Markdown tables. The full conversion cheatsheet lives in @rules/jira/general.mdc.Before sending the comment, scan the body for every forbidden token listed in Constraints. When a forbidden token is found, either:
Repeat until the body is clean. Do not publish a comment that still contains forbidden vocabulary.
acli (primary): acli jira comment <KEY> --noedit --comment="$(cat <report-file>)".acli is unavailable.@skills/pr-summary/SKILL.md — short, two-section business summary for PR / JIRA. Different audience (project managers, not QA testers).@skills/test-like-human/SKILL.md — the agent runs the tests itself. This skill only writes a tester-facing report.Wrong (technical, leaks code identifiers):
After sending the campaign, the
campaign_logtable receives a record with eventsms_accepted, which theProcessSmsCampaignBatchAsyncResponsesJobjob flips tosms_sent.
Right (tester-facing, dev-team-report focused):
Report back to the dev team if you see: the SMS arrived on the phone but the campaign report shows Not delivered after refreshing; credits charged for a contact whose status ends up as Invalid number; the Recipient activity tab is empty even though the campaign was sent.
development
Use when autonomously resolving the oldest open GitHub issue end-to-end. Picks the oldest open issue (optionally filtered by label, default `Resolve_by_AI`), delegates resolution to `resolve-issue`, then runs `code-review-github`, `process-code-review`, and `merge-github-pr` on the resulting pull request. Stops and reports any blocker (merge conflict, failing CI, unresolved Critical/Moderate findings) instead of force-merging.
testing
Use when performing a focused security review for Laravel/PHP projects. Prioritize real exploitability, business logic flaws, and high-risk vulnerabilities.
testing
Use when resolving an issue from any supported tracker (GitHub, JIRA, Bugsnag). Detects the source automatically from the provided link or ID, implements a safe fix or feature, validates with tests, and creates a pull request.
development
Use when refactoring controller, job, command, listener, or Livewire entry-point logic into a dedicated Action class while preserving behavior and response contracts.