Trường Số QA/Bug report template
Trường Số · QA test suite · Phase 1 · 10/09/2026

Bug report template

The exact format used in Phase 2 for bugs/index.html and bugs.json. One bug per distinct root cause; link every bug to the test case that found it and to the PRD rule it violates. Severity is about impact on a center, not about how hard the fix is.

Key facts, origin and limits
Severities
S1 to S4
Fields
17
Store
bugs/index.html + bugs.json

Drafted by an AI assistant in a single session on 10/09/2026 as part of the Trường Số QA suite, under the request quoted verbatim on the dashboard. A proposal for team review, not a sign-off.

Sources

  • The Trường Số PRD set (Draft v1, 10/09/2026): user stories, screen tables, business rules and permission matrices, plus the Cloud theme reference.

Limits

  • Phase 1 (authoring) only. Cases are executed in Phase 2 against the local build; results are recorded in testcases.json and runs/run-1/, and every result field is still not_run.
  • Cases inherit any open question or inconsistency in the PRDs they trace to.

1Severity scale

LevelDefinitionGo/no-go
P0 S1 BlockerData loss, money wrong, security or tenancy breach, crash on a P0 path, or the daily loop cannot be completed. Stops the release.No-go while open
P1 S2 MajorA P0/P1 story fails or a workaround is needed; wrong totals on a report; permission leak that only hides UI; broken empty/error state on a main screen.No-go above 3 open on P0 stories
P2 S3 MinorFunctional deviation with easy workaround; copy not matching the glossary; validation message wrong; responsive issue at 1024; a11y issue that does not block.Fix before pilot
P3 S4 CosmeticAlignment, spacing, colour token off, tooltip text, non-blocking console warning.Backlog

2Fields

FieldRule
idBUG-<mod>-<nnn> (e.g. BUG-FIN-004)
severityS1 | S2 | S3 | S4
module01-admissions-crm | 02-students-sis | ...
titleOne line, imperative facts: what is wrong, where
environment{"build": "commit sha or HANDOFF build id", "url": "http://localhost:<port>/route", "role": "U-ACAD-A", "browser": "Chrome 140 (Playwright channel chrome)", "viewport": "1440x900 | 1024x768 | 390x844", "locale": "vi | en", "tenant": "BIG | EMPTY"}
test_caseTS-FIN-021
prd_ref05 FIN-04, §6 rule 3
preconditionsFixture state at start
steps["1.", "2.", "3."]
expectedExact text, count, state or URL expected (copied from the case)
actualWhat happened, with the exact text shown
evidence["screenshots/BUG-FIN-004-1.png", "curl output or HAR excerpt", "console error"]
reproducibilityalways | intermittent (n/10) | once
suggested_fixOptional pointer for the build agent (file/route/rule)
statusnew | confirmed | fixed | verified | wontfix | duplicate-of BUG-...
found_in_runrun-1
verified_in_runnull

3Filled example

{
  "id": "BUG-FIN-001",
  "severity": "S1",
  "module": "05-tuition-and-finance",
  "title": "Overpayment accepted: cash payment 800,000 on INV-2 with 700,000 remaining creates a paid invoice with negative remaining",
  "environment": {
    "build": "abc1234",
    "url": "http://localhost:3000/finance/tuition/INV-2/pay",
    "role": "U-ACC",
    "browser": "Chrome 140",
    "viewport": "1440x900",
    "locale": "vi",
    "tenant": "BIG"
  },
  "test_case": "TS-FIN-023",
  "prd_ref": "05 §6 rule 2 (overpayment refused)",
  "preconditions": "INV-2 partial, remaining 700,000",
  "steps": [
    "Open INV-2, click Thu tiền",
    "Enter 800,000, Tiền mặt, CD-A",
    "Confirm"
  ],
  "expected": "Inline error \"Vượt số còn lại (700.000 đ)\"; no payment created",
  "actual": "Payment PT-Q1-202609-0007 created; invoice shows Còn lại -100.000 đ",
  "evidence": [
    "screenshots/BUG-FIN-001-1.png",
    "POST /api/v3/teacher/school-finance/tuitions/INV-2/pay -> 200"
  ],
  "reproducibility": "always",
  "suggested_fix": "Validate amount <= remaining server-side in the pay handler and in the dialog",
  "status": "new",
  "found_in_run": "run-1",
  "verified_in_run": null
}

4Reporting rules

Trường Số (truongso.net) · FLYER internal