Test Intelligence v1: systematické mapování coverage gaps napříč portfoliem webů

7. dubna 2026·v2.6.0·Test Intelligence
Shrnutí

Provedli jsme kompletní reconnaissance všech šesti webů — každého page type, každého dataLayer eventu, každé navigation path. Výsledkem je deterministický přehled o tom, kde naše test suites reálně nedosahují, nahrazující dosavadní anekdotickou evidenci.

Nové testy vstupují do CI přes quarantine fázi, během které nejsou blocking. Tímto mechanismem je zajištěno, že rozšíření coverage neohrozí stabilitu deploy-gating suites.

Metodický posun

Nejpodstatnější změnou v tomto cyklu není přírůstek testů, nýbrž způsob, jakým je rozhodováno co testovat. Dosavadní model byl inkrementální a reaktivní: mezera v pokrytí byla objevena ad hoc (typicky až při produkčním incidentu), následně byl napsán test a nasazen. Tento postup je funkční v malém měřítku, avšak v prostředí šesti webů s desítkami template families vede k systematické akumulaci nedetekovaných gaps. Mezera, o jejíž existenci nevíme, nemůže být prioritizována — a právě tato neviditelnost je hlavním rizikem, které v1 adresuje.

Přijatá metoda je strukturovaná. Před návrhem jakéhokoli nového testu je nejprve proveden exhaustivní reconnaissance pass napříč všemi šesti weby, jehož výstupem je inventář URL patterns, template families, analytických eventů a navigation paths. Tento inventář je následně porovnán (diffed) proti skutečnému pokrytí stávajících suites. Reziduální nepokrytá plocha představuje deterministický backlog, prioritizovaný podle business impact a historické incident frequency. Teprve na základě tohoto backlogu je rozhodnuto o implementaci konkrétních testů.

Dva nástroje, dvě oddělené role

Firecrawl je použit pro discovery fázi. Prochází každý web v širokém záběru, extrahuje strukturovaný obsah a spouští interaktivní browser sessions ve vlastním Playwright sandboxu, čímž během simulované navigace zachytává reálné dataLayer eventy. Jeho silnou stránkou je rychlost, šířka pokrytí a nízké provozní náklady — vlastnosti vhodné pro exploratory práci.

Firecrawl však není považován za source of truth. Každý nález je klasifikován jako hypotéza a musí být následně verifikován nástrojem MCP Playwright proti živému DOM: zda cílový selector skutečně existuje, zda se daný event opravdu fires během interakce. Pouze verifikované nálezy se stávají test assertions. Při konfliktu mezi Firecrawl a MCP Playwright má přednost Playwright. Toto oddělení rolí je záměrné a odráží empirickou zkušenost, že discovery tools spolehlivě produkují plausible-looking nálezy, které při konfrontaci s živou stránkou neobstojí — typicky kvůli dynamickému renderování, A/B variantám nebo consent-gated content, které statická analýza nezachytí.

Deliverables v1

  • Reconnaissance dokončen pro všech 6 webů (blesk, auto, e15, reflex, isport, opinio). 23 JSON artefaktů v data/reconnaissance/, 27 klasifikovaných template families. Jedná se o první strojově čitelný snapshot struktury celého portfolia.
  • Journey maps pro všech 6 webů v docs/site-journey-maps/. Tyto dokumenty se stávají authoritative reference pro popis uživatelských cest a nahrazují dosud roztříštěné popisy v jednotlivých test souborech.
  • Events catalog napříč weby v docs/events-catalog.md s explicitními contract decisions v tieringu P0/P1/P2. Tiering určuje, které eventy jsou kontraktuálně garantované a jejich regrese musí failnout deploy, a které jsou pouze informativní.
  • Gap analysis: identifikováno 42 gaps, z toho 12 s vysokou prioritou. Coverage model obsahuje 288 záznamů, kde každá kombinace (site × suite × template family) nese jeden z osmi stavů: discovered, classified, testable, covered, quarantine, intentionally-untested, blocked, deprecated. Tento state machine umožňuje kvantitativní reporting o progresu a explicitní trackování záměrných nepokrytí.
  • Events suite rozšířena o P0 (page_ready) a P1 (gallery_open) na úrovni jednotlivých page types pro blesk a e15 — celkem 9 testů tam, kde dříve existovala jediná generická specifikace pro galerie.
  • Content registry aktualizován o page types identifikované během reconnaissance: live scores, premium landing, Opinio author a podcast. Nový stav: 124 entries, 235 site slots.

Rules of engagement: kontrola scope creepu

Discovery-driven přístup má inherentní riziko neohraničené expanze scope — objevené možnosti mohou snadno převážit nad skutečnou hodnotou. Proto je každý test candidate podroben dvěma filtrům. Promotion gate vyžaduje, aby byl kandidát strukturálně odlišný od existujícího pokrytí, business-critical, analytics-relevant, nebo historicky incident-prone. Dropout rule naopak eliminuje kandidáty, kteří duplicitně pokrývají existující failure scenarios, kteří by asertovali editorial content (nedeterministický, řízený redakcí), nebo kteří závisí na ad server response (externí nedeterminismus). Kandidát, který neprojde některým z filtrů, zůstává zdokumentován v journey map, ale není implementován. Tento intentionally-untested stav je záměrně first-class output procesu — explicitní rozhodnutí netestovat má stejnou dokumentační hodnotu jako rozhodnutí testovat.

Nově implementované testy vstupují do CI v režimu quarantine. V této fázi jsou non-blocking: jejich failure negeneruje deploy gate ani incident notification. Povýšení na blocking nastává po splnění kvantitativního kritéria — minimálně 5 po sobě jdoucích successful runs napříč alespoň dvěma execution windows. Symetricky, degradovaný test (3+ failures během 14 dnů) je automaticky re-quarantined a vyžaduje root cause analysis. Tento rollout protocol je přímou reakcí na očekávaný objem nového pokrytí: bez quarantine buffer by hromadné zavedení desítek testů nevyhnutelně destabilizovalo deploy-gating suites a erodovalo důvěru v CI signál.

Roadmap v1.1 a dále

Scope verze v1 byl vědomě omezen na reconnaissance, gap analysis a proof-of-concept rozšíření events suite pro dva weby. Zbývající práce je vymezena a trackována jako samostatný backlog:

  • Events expansion — rozšíření P0/P1 pokrytí z blesk a e15 na zbývající čtyři weby (auto, isport, reflex, opinio). Metodika je již validována, práce je převážně mechanická.
  • E2E expansion po layout families — nové journey specs pro video, podcast, search, author a topic pages. Stávajících 71 E2E testů je koncentrováno na články, galerie a sharing; gap analysis identifikuje layout families zcela bez pokrytí.
  • User-flows pro zbývající authentication pairs. Páry blesk/isport a auto/e15 jsou již verified. Následují e15/reflex SSO a edge cases pro Opinio, který nesdílí CNC standard analytics pipeline.
  • Alignment Smoke, PDT a Shadow suites — cílené doplnění kritických page types, které v těchto suites aktuálně chybí. Jde o nejmenší, nejrychlejší suites, kde je každé přidání pečlivě váženo proti runtime budgetu.
  • Mobile deltas — testy pouze pro user flows, kde se mobile struktura materiálně liší od desktopu (odlišný DOM, odlišné eventy, odlišná navigation). Pouze responsive variace jsou explicitně vyloučeny, protože nepřinášejí nový signál.
  • Visual baselines pro nové layout families s reálným rendering risk. Plošné přidávání visual snapshots pro každou variantu není plánováno — visual regression je nákladná a má smysl pouze tam, kde strukturální regrese není zachytitelná jinými suites.

Dopad na stávající test suites

Efekty verze v1 se dělí na okamžité (již aktivní) a postupné (projevující se v následujících cyklech).

Okamžité. Events suite nyní verifikuje page_ready na úrovni page type pro blesk a e15. Analytics regrese na těchto webech, které byly dosud neviditelné (failing silently, bez impaktu na existující testy), jsou nyní detekovány. Content registry pokrývá page types, které dříve nebyly dokumentovány. Autor nového testu má k dispozici šest journey maps a coverage model jako authoritative reference, čímž je eliminována duplicitní exploratory práce.

Postupně. Každý nový test je filtrován přes promotion gate a dropout rule. Očekávaným výsledkem je, že implementováno bude méně testů, než sugeruje raw gap list — a toto je záměr. Gaps se uzavírají jednou ze tří cest: (1) implementovaná assertion, (2) explicitní intentionally-untested s rationale, nebo (3) blocked: missing-selector-contract eskalovaný jako instrumentation request směrem k product engineering. Třetí kategorie je signifikantní: selector instability způsobená absencí targeting hooks je product problem, nikoli QA problem, a je nyní trackována separátně — nebyla absorbována do generické test maintenance, jak tomu bylo dosud.

Během quarantine fáze nového pokrytí je očekáván dočasný, kontrolovaný nárůst non-blocking instability. Rollout rules jsou navrženy tak, aby tento nárůst absorbovaly bez dopadu na deploy-gating suites. Metriky quarantine populace jsou sledovány jako leading indicator zdraví procesu.

Odkazy

  • Specifikace: docs/superpowers/specs/2026-04-04-test-intelligence-gap-closure.md
  • Plán: docs/superpowers/plans/2026-04-04-test-intelligence-v1.md
  • Changelog: CHANGELOG.md — v2.6.0