Reporting

KeyValue
StatusActive
OwnerQA Automation
Updated2026-03-26
ScopeSlack alerts, run summaries, periodic reports, and recovery communication

Reporting is where the system becomes readable. A good report answers three questions quickly:

  1. what happened
  2. how worried should we be
  3. what should happen next

That sounds simple, but it took a lot of iteration to get there.

Reporting Outputs

OutputAudienceTypical Use
failure alertsQA, on-call, engineersimmediate action
success summariesoperators and channel followersreassurance and trend awareness
visual notificationsteams watching the visual suitestructural UI signal
weekly reportsmanagers and maintainersbroad operational summary
monthly reportsstakeholderstrend and stability review
recovery repliesanyone following a failure threadclosure after a fix

Slack Failure Alerts

Failure alerts are now designed to be more human and less robotic.

Main Principles

PrincipleWhat It Looks Like
calm headlineheadline says what matters, not just “FAILED”
short first poststats and failed tests, not a forensic dump
verdict-first threadAssessment, Why, Next
clusteringrepeated failures with one cause are grouped
confidence languagePost-fix, watching, Likely flaky, Infra/CI suspicion, and similar labels

Why This Matters

Operators need to know whether to escalate, rerun, ignore, or watch. Generic classifier text does not help much when a run is noisy.

Success Summaries

Success messages are intentionally smaller. Their job is to confirm the run landed cleanly and leave useful links behind without taking over the channel.

Weekly And Monthly Reports

Periodic reports are the long-view counterpart to failure alerts.

Report TypeWhat It Tries To Show
weeklywhat changed this week, where the risk is, and whether the trend is improving
monthlyslower moving stability and quality patterns

Recent direction:

  • plain-language executive summary
  • root-cause rollups, not only symptom counts
  • week-over-week context instead of isolated numbers
  • better separation between recurring noise and material regressions

What A Weekly Report Contains

SectionWhat It Shows
overall pass ratepercentage across all suites for the past 7 days
failure breakdownper-site and per-suite failure counts
top failing teststests that failed most often during the week
top flaky teststests with mixed pass/fail outcomes
trend directionwhether pass rate improved, held steady, or declined versus the prior week
root-cause rollupfailures grouped by incident or category rather than listed one by one

What A Monthly Report Contains

SectionWhat It Shows
30-day pass rateoverall quality trend over the month
stability patternswhich sites and suites are most stable or most volatile
recurring failuresincidents that appeared repeatedly over the month
recovery ratehow quickly failures were resolved after they first appeared

Schedule

ReportWhenChannel
weeklyMonday morning (GitLab schedule)#qa-reports
monthly1st of each month (GitLab schedule)#qa-reports

Triggering Reports Manually

CommandWhat It Does
npm run report:weeklygenerates and posts a 7-day report
npm run report:monthlygenerates and posts a 30-day report
npm run data:weeklypulls weekly summary data without posting

PDF output is saved to test-results/reports/.

Reporting Data Flow

%%{init: {'theme':'base', 'themeVariables': {'primaryColor': '#4a90d9', 'primaryTextColor': '#fff', 'primaryBorderColor': '#2c6fad', 'lineColor': '#555', 'fontFamily': 'sans-serif'}}}%%
flowchart LR
    OS["OpenSearch\ncncqa_tests-*"] --> GEN["Report generator\nscripts/ci/generate-weekly-report.ts"]
    HIST["test-results/history/\nlocal run records"] --> GEN
    GEN --> PDF["PDF report\ntest-results/reports/"]
    GEN --> SLACK["Slack post\n#qa-reports"]

The generator pulls run records from OpenSearch when credentials are available, or falls back to local history files. It produces both a PDF artifact and a Slack post in the same run.

Slack Channel Setup

VariablePurpose
SLACK_REPORTS_CHANNELtarget channel for weekly and monthly reports (default: #qa-reports)
SLACK_BOT_TOKENenables PDF attachment upload and thread replies
SLACK_WEBHOOK_URLfallback delivery path if bot token is not set (message only, no PDF)

Recovery Replies

Recovery replies are one of the most useful newer reporting features because they stop failure threads from becoming dead ends.

Recovery Reply DoesWhy It Helps
confirms a failure has stopped repeatingreduces uncertainty
links back to the original threadkeeps context together
records the recovery in historyimproves future confidence

Visual Notifications

The visual suite needs separate reporting because its failure modes differ from text-first suites.

Important reporting rule:

  • a missing baseline is a configuration problem
  • a screenshot diff is a visual regression candidate
  • those should not be reported as the same thing

Report Consumers

ConsumerWhat They Usually Need
QA operatorwhat failed and what to do next
engineerenough evidence to reproduce or fix
team leadwhether the problem is broad or isolated
stakeholdertrend and operational stability, not every low-level detail

Good Reporting Style

  • lead with the verdict
  • prefer one clear action over five vague suggestions
  • separate symptom from cause when confidence is low
  • group shared incidents instead of repeating near-identical paragraphs
  • avoid flooding the first message with low-level selectors or stack details
  1. run completes
  2. notifier reads merged results
  3. history and incident services add context
  4. Slack gets a short main alert
  5. investigation thread carries the deeper reasoning
  6. if the failure stops repeating, the thread can receive a recovery reply later
NeedGo To
notifier commandsCLI Reference
root-cause and symptom labelsFailure Categories
Slack and service wiringIntegrations