---
title: "Quality gate (publishing)"
manual: "Accessibility Quality Gate"
version: "2.0"
permalink: "https://docs.typo3.org/permalink/priebera/typo3-a11y-quality-gate:configuration-quality-gate@2.0"
source: "Configuration/QualityGate.rst"
rendered: "2026-10-13T16:37:33+00:00"
---

# Quality gate (publishing) {#configuration-quality-gate}

The quality gate evaluates the open findings of a page when an editor publishes
or unhides it, that is, when a hidden page record is made visible. It is configured on the **Publishing rules** tab of the
Settings view and stored in the ruleset record `tx_a11y_ruleset`.

## Ruleset fields {#configuration-quality-gate-fields}

-   **publish_mode**

    -   *Type:* int
    -   *Default:* 0

    Behaviour of the gate when a page is published or unhidden.

    -   **`0`**

        Disabled. Nothing happens on publish.

    -   **`1`**

        Warn. The editor sees a warning listing the blocking findings and can
        continue after reviewing it. Available in all editions.

    -   **`2`**

        Block. The publish action is rejected while the thresholds are exceeded.
        Requires an active licence.

-   **threshold_critical**

    -   *Type:* int
    -   *Default:* 0

    Maximum number of open findings with severity *critical* that a page may
    have. `0` means no critical finding is tolerated.

-   **threshold_warning**

    -   *Type:* int
    -   *Default:* -1

    Maximum number of open findings with severity *warning*. `-1` disables the
    warning threshold, so warnings never trigger the gate.

-   **site_identifier**

    -   *Type:* string
    -   *Default:* (empty)

    Restricts the ruleset to one TYPO3 site. Must match the identifier of the
    site configuration. An empty value marks the global default ruleset.

## How the gate behaves {#configuration-quality-gate-behaviour}

-   The gate only evaluates findings that are open. Ignored findings do not
    count towards the thresholds.
-   An ignore with an expiry date is temporary. Once the date has passed, AQG
    sets the finding back to the open status, and it counts towards the
    thresholds again exactly like any other open finding. Expect a page that
    passed the gate to start failing it when an ignore expires. See
    [Ignoring findings](https://docs.typo3.org/permalink/priebera/typo3-a11y-quality-gate:usage-page-detail-ignore@2.0).
-   The gate uses the findings that are currently stored. A page that has never
    been scanned has no findings and therefore always passes. Schedule regular
    scans so that the gate works on current data; see [Automation](https://docs.typo3.org/permalink/priebera/typo3-a11y-quality-gate:automation@2.0).
-   In warn mode the editor is informed but keeps control over the publication.
    In block mode the DataHandler operation is rejected.
-   The gate runs when a hidden page is made visible: unhiding it in the page
    tree or list, or saving its page properties with the page set to visible.
    Saving a page that is already visible, for example after changing its title,
    does not run the gate again, so a routine edit never takes an online page
    offline. A translated page is judged in its own language when the
    translation is made visible. Changes to content elements never run the
    gate; they give the editor feedback on the changed element.
-   The gate applies to everyone who publishes or unhides a page, including
    backend users without access to the Accessibility module. It never grants
    access to the module.

> [!WARNING]
> The quality gate is an editorial safeguard, not a security control, and not
> a conformance statement. A page that passes the gate can still contain
> accessibility problems that automated rules cannot detect.

## Per-site rulesets {#configuration-quality-gate-sites}

With an active licence, additional rulesets can be created and bound to a site
identifier. The Settings view then offers a site selector, and each site can
have its own thresholds, publish mode, enabled rules and remote scan access
settings. Installations without a licence use the single global default ruleset.
