Skip to content

The visual-regression suite never executes in CI — gate-26 asks for baselines that would never run #198

Closed

Description

@rubenvdlinde

Measured

CI selects the e2e config via playwright-test-path: tests/e2e, which resolves to tests/e2e/playwright.config.ts. Listing what each config actually executes:

tests/e2e/playwright.config.ts   (the one CI uses)
  Total: 56 tests in 14 files
  projects: [chromium]

playwright.config.ts             (repo root, local use)
  Total: 57 tests in 15 files
  projects: [chromium, visual]

The difference is exactly one file: tests/e2e/visual/doriath.visual.spec.ts.

Two things combine:

  1. The CI config's chromium project carries testIgnore: [..., '**/visual/**'].
  2. The CI config declares no visual project at all — the root config does, the CI one does not.

So the visual spec is ignored by the only project that exists, and the project that would run it is not in the config CI loads. tests/e2e/visual/doriath.visual.spec.ts has never executed in CI.

Why this matters beyond one file

gate-26 visual-coverage currently reports 10 findings, each of the form:

src/views/<X>.vue — new page component missing visual-regression baseline
(tests/e2e/visual/**) / e2e test / @visual exclude

The first of those three remedies is a directory CI never runs. Adding ten baselines under tests/e2e/visual/** would turn gate-26 green without a single one of them ever executing — a check that cannot fail, which is the exact failure mode this programme exists to remove.

The second remedy — an ordinary e2e test under tests/e2e/workflows/ — is executed, and is the honest route.

Not the other two failure modes

For the record, the other two ways an e2e suite silently never runs were checked and are clean here:

  • enable-playwright: true is set explicitly in .github/workflows/code-quality.yml (not left to default false).
  • playwright-test-path: tests/e2e scopes nothing out — all 15 spec files live under tests/e2e.

And the @e2e anchors are honest: of 170 raw @e2e mentions in openspec/specs/, 157 are @e2e exclude tags and 13 are real @e2e <path> anchors — and all three distinct target files exist on disk. No anchor points at a missing file.

Suggested fix

Either:

  • give the CI config a visual project (with CI-runner-generated baselines and a sane maxDiffPixels/threshold, since the current comment's objection is that committed PNGs "cannot byte-match a CI runner"), or
  • delete tests/e2e/visual/ and the root config's visual project, and let gate-26 be satisfied only by real e2e tests.

What must not happen is baselines being added to the ignored directory to clear gate-26.

Measured with hydra-gates package 365fa31d09a26f980e6dc76cb0800575ef005a4e against development at 7579916.

Activity

  1. rubenvdlinde commented on Oct 2, 2026

    @rubenvdlinde
    ContributorAuthor

    Checked on 2 Oct: no keepiq page depends on the visual suite for its gate-26 credit. Of the 12 page components, the 10 with a baseline under tests/e2e/visual/** are also driven by e2e tests that CI does run (tests/e2e/workflows/page-surfaces.spec.ts, vault-unlock.spec.ts, spec-coverage/lock-screen.spec.ts), and the other 2 carry a reasoned @visual exclude. The remaining hole is in the shared gate: it credits tests/e2e/visual/** even when the app's CI Playwright config ignores that folder. That fix belongs in ConductionNL/.github and is waiting on a decision, so this issue stays open until then.

  2. rubenvdlinde commented on Oct 2, 2026

    @rubenvdlinde
    ContributorAuthor

    Fixed in the shared gate by ConductionNL/.github#810 (merged): gate-26 now credits a baseline under tests/e2e/visual only when the app's CI Playwright config has a project that runs it; otherwise only executed e2e tests and a reasoned @visual exclude count. keepiq's 12 pages still pass, because each is also driven by an executed e2e test or carries a reasoned exclude.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions