Professional bug report pack
Builds on Topic 8.
What you'll produce
A pack of three Jira-ready bug reports for real defects you found while executing your test-case suite (Deliverable 2) against the ShopSphere checkout build — each with a specific title, the shortest steps to reproduce, expected vs. actual, environment, attached evidence (screenshot + console error), and a severity/priority call, plus the correct bug-life-cycle status the ticket should sit in. This is the single artifact a developer reads more than any other thing you write, and it's where a tester is judged daily: a report a developer can reproduce in 30 seconds and fix without a single follow-up question is the difference between "QA who slows us down" and "QA we trust." It proves the Topic 6 + Topic 8 skills — reproducibility, blameless reporting, reducing steps, distinguishing severity from priority, and placing a bug at the right point in its life cycle in a real tracker.
Instructions
- Mine your executed suite for real defects. Re-run the failing cases from your Deliverable 2 suite against the current staging build. Pick three genuine defects that differ in nature — aim for one functional/data bug (wrong total, wrong code applied), one crash/blocker (page errors out, can't complete), and one cross-platform or UI bug (mobile/Safari/Apple Pay) — so the pack shows range, not three flavors of the same thing.
- Reproduce each one at least twice before you write it up, and reduce the steps to the shortest path that still triggers it. If a step doesn't change the outcome, delete it. Confirm it isn't a duplicate of one already in Jira.
- Write a specific title in the form what breaks + under what condition: "Promo code
SAVE20applies 20% discount twice when re-applied after editing cart" — never "promo broken" or "checkout bug #3." - Number the steps to reproduce starting from a known state (logged in or guest, cart contents, which page). A developer should be able to paste them and follow blindly.
- State Expected vs. Actual as two separate, factual lines. Expected = what the spec/Figma says should happen; Actual = exactly what you observed, with the concrete numbers ("Order total shown: $63.98; correct total: $71.98").
- Capture the environment: device, OS, browser + version, and the build number (e.g.,
staging build 2.4.0-rc3). Many ShopSphere bugs are platform-specific (Apple Pay, Safari), so this field decides whether the dev can reproduce at all. - Attach evidence: a screenshot (annotated if helpful) and, for web bugs, the console/network error from browser dev tools (F12 → Console / Network). Name the attachment so the ticket reads cleanly (
promo-double-discount.png,console-500-apply-promo.txt). - Set severity and priority separately, and justify each in one clause. Severity = impact on the product; Priority = how urgently it should be fixed given the release. Note when they diverge (a low-severity typo on the checkout button can still be high priority because it's on the money screen days before launch).
- Set the bug-life-cycle status the ticket should be in right now (New/Open when you file it; Reopened if a "fixed" bug still repros on re-test) and add a one-line note on what you'd expect next in the flow.
- Keep it blameless and one-bug-per-report. Describe behavior, not blame. If you found three issues in one flow, that's three tickets.
Worked example
(Scenario: ShopSphere checkout redesign, build 2.4.0-rc3 on https://staging.shopsphere.com, eight days before release. Three defects found executing the promo-code & checkout suite from Deliverable 2. Tickets shown as they'd appear in Jira, project key SHOP. Build, project key, and the SAVE20 code all come from the shared Capstone fixtures; the earlier 2.4.0-rc2 is referenced only by the Reopened bug below, which was marked fixed in rc2 and still fails in rc3.)
BUG 1 — SHOP-1487
Title: Promo code SAVE20 applies the 20% discount twice when re-applied after editing the cart
- Severity: High · Priority: High
- Status: Open (New) — filed, not yet assigned
- Component: Checkout / Promo code · Affects build:
2.4.0-rc3· Found by: QA (executing TC-PROMO-09, recalculation-after-quantity-change)
Environment
Desktop · macOS 14.5 · Chrome 125.0.6422.112 · staging 2.4.0-rc3 · guest checkout
Preconditions
Guest checkout. Cart contains 1× "Aurora Desk Lamp" at $89.90. Promo SAVE20 (20% off order, valid, single-use intent) is active.
Steps to reproduce
- Add the Aurora Desk Lamp ($89.90) to the cart and go to checkout as guest.
- In the promo field, enter
SAVE20and click Apply — discount of −$17.98 shows; subtotal becomes $71.92. Correct so far. - Click Edit cart, change quantity to 2, return to checkout.
- Observe the order summary without re-typing the code.
Expected result The 20% discount recalculates against the new subtotal once: subtotal $179.80, discount −$35.96, total $143.84.
Actual result
The discount is applied twice: discount line shows −$71.92 against a $179.80 subtotal, total $107.88 — a $35.96 overcharge-in-customer's-favor. The promo summary lists SAVE20 twice.
Evidence
promo-double-discount.png— order summary showing twoSAVE20lines and total $107.88.console-promo-recalc.txt— Console showsapplyPromo()fired twice on the cart-edit return navigation; no error thrown, so this is silent.
Severity/Priority justification Severity High: it directly produces a wrong, money-losing total and is fully reproducible. Priority High: it's on the revenue path and trivial for a customer to trigger by editing their cart — must fix before release.
Notes / next in life cycle Single-bug ticket. Once a dev picks it up → Assigned → In Progress/Fixed; QA re-tests TC-PROMO-09 (the recalculation case this bug failed) plus a regression on TC-PROMO-01 (the normal single-apply case must still produce −$4.80, not be over-corrected by the fix) before Closed.
BUG 2 — SHOP-1492
Title: Checkout page errors out (500) and order can't be placed when promo field is submitted empty via Enter key
- Severity: Critical · Priority: High
- Status: Open (New) — flagged to dev lead in #checkout-release
- Component: Checkout / Promo code · Affects build:
2.4.0-rc3· Found by: QA (executing TC-PROMO-06, empty-submission; reproduced via the Enter-key variant)
Environment
Desktop · Windows 11 · Edge 125.0.2535.51 · staging 2.4.0-rc3 · logged-in account qa.buyer+1@shopsphere.test
Preconditions Logged-in user, one item in cart, on the checkout page with the promo field empty and focused.
Steps to reproduce
- With the empty promo field focused, press Enter (do not type a code).
- Observe the page.
Expected result Empty submit is ignored or shows an inline "Enter a promo code" hint; the checkout page stays usable and the order can still be placed.
Actual result The page reloads into a generic error screen ("Something went wrong"). The Place order button is gone; the cart is intact but checkout cannot be completed without a full browser refresh. Reproduced 3/3 times.
Evidence
empty-promo-500.png— error screen replacing the checkout page.console-500-apply-promo.txt— Network tab:POST /api/v1/cart/cart_3b8e02/promoreturns 500, request body{ "code": "" }; Console:Uncaught (in promise) TypeError: cannot read 'discount' of undefined.
Severity/Priority justification Severity Critical: it blocks order completion — the core checkout function — and the empty-Enter path is something real users hit constantly. Priority High: blocker on the release-critical flow; nothing ships until this is fixed. (Note severity ≥ priority here; both top-tier.)
Notes / next in life cycle Root cause is server-side (empty code not validated), so the fix likely spans front-end guard + API. After Fixed, re-test the empty case (TC-PROMO-06, both click-Apply and Enter-key paths) and regression-test a valid code (TC-PROMO-01) and an invalid code (TC-PROMO-04) so the new guard didn't break normal apply or the existing "Invalid promo code" error.
BUG 3 — SHOP-1501
Title: Apple Pay button is unresponsive in guest checkout on iOS Safari — no sheet appears, no error
- Severity: High · Priority: Medium
- Status: Reopened — dev marked Fixed in
2.4.0-rc2; still reproduces onrc3 - Component: Checkout / Apple Pay · Affects build:
2.4.0-rc3· Found by: QA (executing TC-PAY-01 on the guest path; re-test of SHOP-1455)
Environment
Mobile · iPhone 13 · iOS 17.5.1 · Safari · staging 2.4.0-rc3 · guest checkout
Preconditions Guest checkout on iPhone Safari, cart with 1 item, on the payment step, a card provisioned in Apple Wallet, Apple Pay shown as a payment option.
Steps to reproduce
- As a guest, reach the payment step on iPhone 13 / iOS 17.5.1 Safari.
- Tap the Apple Pay button.
- Wait ~5 seconds.
Expected result The native Apple Pay sheet slides up to confirm payment with Face ID / passcode.
Actual result Nothing happens — no sheet, no spinner, no error toast. The button registers the tap (brief highlight) but no payment sheet appears. Works correctly for logged-in users on the same device/build, so it's specific to the guest path. Reproduced 4/4 times.
Evidence
applepay-guest-no-sheet.mp4— screen recording of the tap with no sheet.safari-console-applepay.txt— remote-debug Console:ApplePaySession: must be created from a user gesture handler— the session is initialized after an async cart call instead of synchronously inside the tap handler, which Safari rejects in the guest flow.
Severity/Priority justification Severity High: a headline new payment method is entirely broken for a whole segment (guests, who are a launch focus). Priority Medium (not High) only because a working fallback exists — guests can still pay by card — and it's iOS-Safari-specific; if no card fallback existed this would be Priority High. Flag to PM for the go/no-go call (feeds Deliverable 5).
Notes / next in life cycle
This was Reopened: it was marked Fixed in rc2 but re-test on rc3 shows it still fails, so the ticket goes back to the dev, not to Closed. When re-fixed, re-run TC-PAY-01 on the iOS Safari guest path and regression-check logged-in Apple Pay and the guest card path (TC-GUEST-01) so the gesture-handler change didn't regress the working paths. Note TC-PAY-01 is the plan's single Apple Pay smoke slice, so this one ticket carries the whole Apple Pay risk into the sign-off (Deliverable 5).
Why this pack is strong: three different kinds of defect (data error, blocker, platform-specific), each reduced to the minimum steps, each with concrete numbers and real console/network evidence, severity and priority set independently and justified, and one ticket correctly sitting in Reopened rather than New — showing command of the full bug life cycle, not just filing.
Rubric
The app's AI scores the learner's submission against these criteria and gives feedback. Levels: Needs work (1) / Solid (2) / Excellent (3). Passing = every criterion at Solid or above.
- Reproducibility (title + minimal steps) — 1: vague title or steps a dev can't follow/reproduce · 2: specific title and numbered steps from a known state that reproduce the bug · 3: title states what breaks under what condition, steps reduced to the shortest path, starting state fully pinned.
- Expected vs. actual with concrete evidence — 1: missing one side, or no evidence · 2: clear expected and actual plus a screenshot · 3: factual expected/actual with real numbers and a precise console/network error or recording that pinpoints the failure.
- Environment captured — 1: missing or generic · 2: device/OS/browser given · 3: device/OS/browser with version and build number, chosen to explain a condition-specific bug (e.g., iOS Safari guest, build rc3).
- Severity vs. priority (set and justified separately) — 1: conflated, missing, or unjustified · 2: both set with brief reasoning · 3: set independently with a one-clause justification each, including at least one case where they intentionally diverge.
- Correct bug-life-cycle status — 1: wrong/absent status · 2: a valid status (e.g., Open) for each ticket · 3: status fits the situation (incl. a correctly Reopened failed re-test) with a one-line note on the next expected transition.
- Professionalism & range — 1: blames people, crams multiple bugs per ticket, or three near-identical bugs · 2: blameless, one bug per report, Jira-ready format · 3: blameless and tracker-ready and the three bugs span distinct defect types (data, blocker, cross-platform), showing real testing range.