# yaml-language-server: $schema=https://docs.mergify.com/mergify-configuration-schema.json extends: mergify merge_protections_settings: reporting_method: check-runs pull_request_rules: - name: Flag product T-ID format violation in PR title or commit messages description: > Product-repo convention: the PR title AND every commit's first line must match a `T:`, `NOS-:` or legacy `VD-:` task key followed by text (optional `scope: ` prefix). NOS is the renamed VD Jira project (2026-07). The title is always checked; the per-commit check is exempted when a maintainer applies the `legacy` label — an escape hatch for grandfathered PRs whose commit history cannot be rewritten (repos that squash-merge AND block force-push, e.g. vyos.vyos enforces `non_fast_forward` on ~ALL branches with zero bypass). New PRs are still nudged toward the convention; `legacy` is the deliberate, maintainer-controlled opt-out. Relocated from the central config (T8966) so the convention is opt-in per product repo. Name is intentionally distinct from any central rule name so this stays additive (not an `extends:` override). Legacy-label escape added 2026-06-08 (T8966). conditions: - '-closed' - '-merged' - '-author~=\[bot\]$' - 'author!=copilot-swe-agent' - 'author!=vyosbot' - or: - '-title~=^(([a-zA-Z0-9\-_.]+:[ ])?)(T[0-9]+|NOS-[0-9]+|VD-[0-9]+):[ ]+[^\s]+.*' - and: - 'label!=legacy' - 'commits[*].commit_message~=^(?!(([a-zA-Z0-9\-_.]+:[ ])?)(T[0-9]+|NOS-[0-9]+|VD-[0-9]+):[ ]+[^\s]+).*' actions: label: toggle: - invalid-task-id