Overview
Czech News Center QA

PW-Tests

Playwright tests for CNC websites. 13 suites, 6 sites, everything wired into OpenSearch and Grafana.

95%
Pass Rate
246
Total Tests
6
Sites
184
Commits (30d)
227
Files Changed
13
Test Suites
Suite Health at a Glance
Click any row to navigate to the suite detail view.
Site Health
Overall health per site, aggregated across all suites.

Test Suites

13 suites, each checking something different. Click a card to dig into per-site results and test steps.

All
Passing
Partial
13 suites

Monitored Sites

The six CNC websites we test. Click a site for its health breakdown.

Consent Providers
Two consent providers across all sites. The handler picks the right one automatically.
SiteURLProviderHandler
Blesk.czwww.blesk.czCPEXhandleCpexConsent()
Auto.czwww.auto.czCPEXhandleCpexConsent()
E15.czwww.e15.czDidomihandleDidomiConsent()
Reflex.czwww.reflex.czDidomihandleDidomiConsent()
iSport.czisport.blesk.czCPEXhandleCpexConsent()
Opinio.czopinio.czCPEXhandleCpexConsent()

Monthly Development Report

Last 30 days vs the 30 before. Numbers from git log and the changelog.

Period Comparison
Feb 28 - Mar 28 vs. Jan 28 - Feb 28
MetricPreviousCurrentChange
Commits93184+97.8%
Files changed149276+85.2%
Lines added19,70073,285+271.7%
Lines removed8,14227,244+234.5%
Net lines11,55846,041+298.4%
Active days17/3120/28+17.6%
Commit Types
Conventional commit prefix breakdown (last 30 days)
Daily Commit Activity
Commits per day over the last 30 days
Release Highlights
Key changes across recent versions

Architecture

How the project is organized and how data gets from a test run to a Slack alert.

Playwright TypeScript Node.js OpenSearch Grafana Prometheus Next.js Slack Confluence Claude AI
Data Flow
Click a node. Tests feed three parallel paths that all end at Slack.
Project Structure
Core Components

Methodology

Selector priorities, failure categories, and the auto-healing loop. Click through each one.

Selector Strategy

Pick the most stable selector you can. Click each level to see why.

Self-Healing Workflow

Test breaks? The system tries to fix it before anyone has to look.

Failure Classification

Every failure gets a category. Some we fix automatically, others need a human.

Auto-Fixable
Requires Investigation
Test Writing Template
import { test, expect } from '@playwright/test'; import { CncSite } from '../src/core'; test.describe('Feature @smoke @blesk', () => { let site: CncSite; test.beforeEach(async ({ page }) => { site = new CncSite(test, page, 'blesk'); await site.load('/', 'Homepage'); await site.consent(true); }); test('should load homepage', async () => { await expect(site.page).toHaveTitle(/Blesk/); await site.assertElementVisible('[data-testid="header"]'); }); });

CI Runner Schedule

7 projects on 2 runners. Here's when everything runs and where they collide.

24-Hour Schedule Overview
Run windows from cron schedules and average durations
Runner Utilization
Schedule Details
ProjectScheduleCronAvg DurationStatus

Observability Stack

OpenSearch stores it, Grafana shows it, Prometheus measures it, Slack yells about it. Click any node for details.

Stack Overview
OpenSearch Indices
Index PatternPurposeRetentionUpdated By
cncqa_tests-*Test results for Grafana dashboards90 daysReporter
cncqa_events-*Detailed events for AI/machine analysis30 daysEventLogger
*-YYYY-MM-imgFailure screenshots (base64)30 days (ISM)Reporter
*-YYYY-MM-crStep records (pw:api traces)30 days (ISM)Reporter

Development Report & Timeline

What the team delivered, told in words. Release changelog below.

March 2026 March 1 – 31, 2026
Failure Intelligence Pipeline

We moved from simple substring matching to a multi-layered classification engine. Failures are now matched against a structured incident store using weighted fingerprinting across seven dimensions. A historical confidence layer tracks how often each test has failed for each root cause, blending past patterns with current evidence to produce verdicts that get smarter over time.

  • Incident store with six root cause domains and seventeen hierarchical tags
  • Weighted incident matcher scoring fingerprint, site, error category, selector overlap, date window, URL pattern, and message content
  • Historical prior service computing confidence bands from confirmed recovery events
  • Cause assessor blending both layers into a final verdict with human-readable explanation
Slack Alert Transformation

Nightly failure notifications were completely rewritten to communicate in human terms instead of dumping raw failure counts. Each failure now gets a verdict label — confirmed regression, post-fix watching, likely flaky, infra suspicion, or needs confirmation. Failures are clustered by site, and an investigation thread is posted automatically with per-failure breakdowns and next-step recommendations.

  • Recovery detection posts confirmation to original failure thread when a test passes consecutively
  • Thread state machine manages open, resolved, superseded, and stale failure threads
  • Weekly report redesigned with executive summary, trend comparison, and root cause breakdown
  • Escalation contact suggestion appended to alerts based on failure classification
Operations & Escalation System

A brand-new escalation system answers the question that classification alone could not: the test failed, QA confirmed it is real — now who do I contact? Three normalized JSON databases map contacts, sites, and routing rules across twelve escalation categories. A resolver module implements strict precedence matching and the portal page presents it all as an interactive workflow and lookup tool.

  • Seventy-eight CNC sites and twenty-seven contacts seeded from the ownership spreadsheet
  • Twelve escalation categories from content issues to video player failures
  • Five-step visual workflow on the portal: Test Fails → QA Triages → Classify → Escalate → Recovery
  • Build-time validation with eight error checks and five warning checks
Project Portal

The documentation portal launched with thirty-one pages, CNC brand design, content registry sidebar, and dark mode support. A second version is in progress with a modular build pipeline — separate collectors for git, OpenSearch, CI config, and test results feed into interactive templates that can show live data alongside static documentation.

  • New pages: escalation matrix, content registry, per-suite operational runbooks
  • Portal v2 architecture: collectors, derived data, template engine, cache layer
Grafana 2.0 Dashboard Overhaul

All three Grafana dashboards were redesigned. Status got a sites-by-suites matrix with per-cell drill-down links. Investigate replaced its table with a Dynamic Text panel showing formatted errors and stack traces. Trends got proper multi-select variables and fixed data links. The reporter was enhanced with ANSI stripping, normalization, and over five hundred step wrappers across twenty-seven test files.

  • Resolved the UUID hyphen parsing bug that caused "No data" across Investigate queries
  • Debunked the .keyword field mismatch — all indices have proper sub-fields
  • Production ISM policies and index templates deployed for retention management
Observability & Infrastructure

Several infrastructure issues were found and fixed. OpenSearch indices that had been accumulating indefinitely now rotate monthly with automatic thirty-day cleanup. A twelve-check verification script validates observability health. A Playwright-based Grafana monitor catches dashboard rendering failures that API queries cannot detect.

  • Fixed disk-full incident caused by static index names without retention
  • Unified telemetry: three loggers replaced by single EventLogger, removing twelve hundred lines of dead code
  • Visual regression tests rewritten from fifty-four failing tests to eighteen passing in under thirty seconds
Documentation Expansion

Wiki grew from fourteen to sixteen pages. Confluence standalone pages expanded from four to fifteen with per-suite operational runbooks. Eight mermaid diagrams were added or restored. A Slack message formatting guide documents verdict labels, clustered thread style, and wording rules.

Release Changelog

Per-version details. Expand any version for the full list.

Select a page from the sidebar to read its content

CNC Content Registry

content types · site slots · seedURLs
Coverage
Existence
Interaction
Overview
Registry
Test Results
Heatmap
Trends
Gaps
EntrySiteDepthSelectorSeedURLLast StateNotes