<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/playwright-tags-and-annotations-organize-large-ci-suites-s0yxpg2ir" -->

---
title: Playwright Tags and Annotations: Organize Large CI Suites
description: Playwright test tags, used naively across thousands of tests, drift into duplicate spellings and broken CI selection. The fix: use tags only for things CI...
canonical: https://daily.dev/posts/playwright-tags-and-annotations-organize-large-ci-suites-s0yxpg2ir
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Playwright Tags and Annotations: Organize Large CI Suites | daily.dev
og:description: Playwright test tags, used naively across thousands of tests, drift into duplicate spellings and broken CI selection. The fix: use tags only for things CI...
og:url: https://daily.dev/posts/playwright-tags-and-annotations-organize-large-ci-suites-s0yxpg2ir
og:image: https://api.daily.dev/og/posts/S0YxPg2Ir.png
og:image:alt: Playwright Tags and Annotations: Organize Large CI Suites
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Playwright Tags and Annotations: Organize Large CI Suites

**[Currents](https://daily.dev/sources/currents)** · 15 min read · 0 upvotes · 0 comments

## Summary

Playwright test tags, used naively across thousands of tests, drift into duplicate spellings and broken CI selection. The fix: use tags only for things CI selects on (tier, team, quarantine) and annotations for descriptive facts like ownership and issue links. Enforce a small tag taxonomy with a lint reporter in the nightly run, since PR runs never see excluded tests. Quarantine flaky tests with an '@quarantine' tag instead of 'test.fixme', so they keep running and reporting instead of disappearing. Keep grep selection in playwright.config.ts projects, not copy-pasted regex in workflow YAML, and report pass rate, flaky count and duration per tag from merged shard files.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://currents.dev/posts/playwright-tags-and-annotations-organize-large-ci-suites>

## Questions this post answers

### What is the difference between tags and annotations in Playwright tests?

Tags are for anything CI selects on, such as test tier, owning team, or quarantine status, and must start with '@'. Annotations are for descriptive facts you want in reports but don't use for selection, such as who owns a test or which issue tracks it. An annotation has a type and description exposed through the reporter API.

_Developers structuring large Playwright suites can compare these conventions and others on daily.dev._

### Why does grep @tier1 in Playwright also match tests tagged @tier10?

Playwright's grep tests the regular expression against one combined string made of the project name, test file name, describe block name, test name, and tags, all separated by spaces. Because '@tier1' is a substring of '@tier10', an unanchored grep pattern matches both, so tag regexes need anchoring to avoid this collision.

_Engineers debugging CI test selection quirks can dig into details like this on daily.dev._

### Should I use test.fixme or a quarantine tag for a flaky Playwright test?

Use a quarantine tag rather than test.fixme. Playwright never runs a fixme test, so nobody sees it start passing again or notices if the feature it covers breaks; fixme and skipped tests also aren't counted when balancing shards. Tagging it '@quarantine' with an issue annotation and running it in a dedicated nightly project keeps it executing and visible, with its owner and issue link, instead of hidden.

_Teams deciding how to handle flaky tests without losing visibility can find approaches like this on daily.dev._

## Similar posts on daily.dev

- [Playwright Flaky Tests: Detect Them in CI with Retries](https://daily.dev/posts/playwright-flaky-tests-detect-them-in-ci-with-retries-vamwlvpg0) · Currents · 1 upvotes · 1 comments
- [How to speed up tests for AI coding agents](https://daily.dev/posts/how-to-speed-up-tests-for-ai-coding-agents-oxj0juc2z) · Flavio Copes · 1 upvotes · 0 comments
- [How QA Wolf AI investigates a failing suite before the run finishes](https://daily.dev/posts/how-qa-wolf-ai-investigates-a-failing-suite-before-the-run-finishes-c1izynrfr) · QA Wolf · 0 upvotes · 0 comments
- [Playwright Trace Viewer: Debug CI Failures Step by Step](https://daily.dev/posts/playwright-trace-viewer-debug-ci-failures-step-by-step-8b1r8sxxe) · Currents · 3 upvotes · 0 comments

---

Tags: [#testing](https://daily.dev/tags/testing), [#typescript](https://daily.dev/tags/typescript), [#cicd](https://daily.dev/tags/cicd)

[View this post on daily.dev](https://daily.dev/posts/playwright-tags-and-annotations-organize-large-ci-suites-s0yxpg2ir)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Playwright Tags and Annotations: Organize Large CI Suites","url":"https://daily.dev/posts/playwright-tags-and-annotations-organize-large-ci-suites-s0yxpg2ir","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/playwright-tags-and-annotations-organize-large-ci-suites-s0yxpg2ir"},"datePublished":"2026-10-27T16:04:27.071Z","dateModified":"2026-10-27T16:42:17.777Z","description":"Playwright test tags, used naively across thousands of tests, drift into duplicate spellings and broken CI selection. The fix: use tags only for things CI...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/796d547b76adc1459c884da22afbd643?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/796d547b76adc1459c884da22afbd643?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Currents","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Currents","logo":"https://media.daily.dev/image/upload/s--RxsiMZ1S--/f_auto,q_auto/v1788684994/logos/currents?_a=BAMAMicg0","url":"https://daily.dev/sources/currents"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/playwright-tags-and-annotations-organize-large-ci-suites-s0yxpg2ir","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"testing,typescript,cicd","timeRequired":"PT15M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Currents","item":"https://daily.dev/sources/currents"},{"@type":"ListItem","position":3,"name":"Playwright Tags and Annotations: Organize Large CI Suites"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/playwright-tags-and-annotations-organize-large-ci-suites-s0yxpg2ir#faq","mainEntity":[{"@type":"Question","name":"What is the difference between tags and annotations in Playwright tests?","acceptedAnswer":{"@type":"Answer","text":"Tags are for anything CI selects on, such as test tier, owning team, or quarantine status, and must start with '@'. Annotations are for descriptive facts you want in reports but don't use for selection, such as who owns a test or which issue tracks it. An annotation has a type and description exposed through the reporter API. Developers structuring large Playwright suites can compare these conventions and others on daily.dev."}},{"@type":"Question","name":"Why does grep @tier1 in Playwright also match tests tagged @tier10?","acceptedAnswer":{"@type":"Answer","text":"Playwright's grep tests the regular expression against one combined string made of the project name, test file name, describe block name, test name, and tags, all separated by spaces. Because '@tier1' is a substring of '@tier10', an unanchored grep pattern matches both, so tag regexes need anchoring to avoid this collision. Engineers debugging CI test selection quirks can dig into details like this on daily.dev."}},{"@type":"Question","name":"Should I use test.fixme or a quarantine tag for a flaky Playwright test?","acceptedAnswer":{"@type":"Answer","text":"Use a quarantine tag rather than test.fixme. Playwright never runs a fixme test, so nobody sees it start passing again or notices if the feature it covers breaks; fixme and skipped tests also aren't counted when balancing shards. Tagging it '@quarantine' with an issue annotation and running it in a dedicated nightly project keeps it executing and visible, with its owner and issue link, instead of hidden. Teams deciding how to handle flaky tests without losing visibility can find approaches like this on daily.dev."}}]}
```

