Modern Quality Engineering Lab · reports Repository ↗ · ozgurcetintas.dev ↗

Published by CI · commit 5b80442 · 2026-09-16

The evidence, not the claim.

Every push to main runs the gates below and republishes this page. Each layer exists because it is the cheapest reliable place to prove a specific risk, not because the tool belongs in the stack; the test strategy and the decision records explain each placement.

Quality signals · run #16
SignalCurrent evidenceContext
CI✓ passingevery gate green in run #16
Mutation score96.4%133 of 138 injected faults caught · CI breaks under 80%
Coverage100% lines · 100% branchesthresholds enforced: 90% lines, 85% branches
E2E + accessibility7 passed · 0 failed0 flaky · Chromium · axe WCAG A/AA
Performancep95 2.22 ms · 0% errors1,000 requests · CI-local workload, indicative, not a production benchmark
AI evaluation3/3 passeddeterministic assertions · anthropic:messages:claude-opus-5
Core gates · the risk-to-layer decisions
  1. 01

    Unit and API tests

    Pure validation logic at every boundary, then in-process HTTP semantics: 400 versus 500, malformed JSON, a failing repository. No browser, milliseconds.

    CI job ↗
  2. 02

    Mutation testing

    Do those suites notice a bug, or merely execute the code? Stryker injects faults into src/; surviving mutants are highlighted in source and CI fails under 80%.

    Report ↗
  3. 03

    Contract tests

    Consumer and provider can change independently: the UI client's Pact is generated by the consumer test and replayed against the real Express app in the same job.

    CI job ↗
  4. 04

    Integration with PostgreSQL

    Real database semantics only where they matter: a disposable postgres:16 proves the CHECK and primary-key constraints and the full HTTP-to-database path.

    CI job ↗
  5. 05

    Browser E2E and accessibility

    Only the critical journey, verified through the API rather than by trusting the text, two failure paths mocked at the network layer, and axe-core WCAG scans before and after interaction.

    Report ↗
Supporting evidence · breadth, on their own cadence
  1. 06

    Performance

    k6 protocol test against the lab booted inside the runner, gated on p95 and error-rate thresholds. Weekly and on demand, never a per-commit gate.

    1,000 requests · p95 2.22 ms · 0% failed · thresholds met · run #2 on 2026-09-14 · CI-local workload, indicative, not a production benchmark

    Summary ↗
  2. 07

    Observability

    The instrumented server is started during publishing, three requests are sent, and the exported OpenTelemetry spans are kept as evidence.

    12 spans exported by Node auto-instrumentation for three requests (health, checkout, order lookup)

    Spans ↗
  3. 08

    AI evaluation

    Promptfoo checks a fictional support assistant for valid JSON, mandatory escalation and refusal of data requests. On demand with an Anthropic or OpenAI key; the assertions are provider-agnostic.

    3 assertions passed · 0 failed · anthropic:messages:claude-opus-5 · run #2 on 2026-09-15

    Runs ↗
Also in the repository

Test strategy · Decision records · CI runs · TestPlan Studio, which uses this lab as its demo target