A CI/CD pipeline is only as reliable as the behavioral assumptions underlying its tests.
This is not a controversial claim in the abstract. Engineering teams generally understand that tests are only meaningful if they reflect reality. What gets missed in practice is that dependency mocks – the substitutes that replace real upstream services in pipeline test execution – carry behavioral assumptions that were accurate at some specific point in time and drift from that point forward as the real services keep changing.
The pipeline does not know when this drift has occurred. It runs the tests against the mocks. The mocks return what they were configured to return. The tests pass or fail based on that. Whether the mocks still accurately represent what the real upstream services return is a question the pipeline cannot answer, because the pipeline has no connection to the real upstream services during test execution.
What Pipeline Reliability Actually Means
Most engineering teams measure pipeline reliability through a narrow lens – does the pipeline complete, does it complete in a reasonable time, what is the flake rate. These are legitimate measures of pipeline operational health. They are not measures of pipeline informational reliability.
Informational reliability is a different property. A pipeline that completes successfully every time is operationally reliable. A pipeline that completes successfully and accurately predicts whether a deployment will behave correctly in production is informationally reliable. The distinction matters because a pipeline can be operationally perfect while being informationally misleading – consistently passing tests against behavioral assumptions that no longer match production reality.
Dependency mocking is where this gap most commonly develops. Every mock in the test suite represents a specific version of an upstream service’s behavior. The upstream service keeps deploying. Each deployment is a potential accuracy event – a moment when the mock’s behavioral assumptions may have become less accurate. The pipeline keeps running. The operational reliability metrics look unchanged. The informational reliability has quietly degraded.
The Deployment Frequency Multiplier
In architectures with multiple upstream services on independent deployment schedules, the rate at which informational reliability degrades is not linear. It scales with the combined deployment frequency of every upstream service whose behavior is represented by a mock in the pipeline.
A single upstream service that deploys weekly creates roughly four potential accuracy events per month. An architecture with ten independently deploying upstream services creates forty or more. Each accuracy event that changes upstream behavior without triggering a mock update widens the gap between what the pipeline validates and what production will encounter.
Teams that measure pipeline reliability only through operational metrics – completion rate, flake rate, execution time – will not see this degradation. The pipeline keeps completing. The flake rate stays stable. The execution time is unchanged. The informational value of each green result has decreased, but none of the standard metrics capture this.
Why Green Stops Meaning What It Should
The specific failure mode that dependency mock drift creates in CI/CD pipelines is not the failure that causes investigation. It is the non-failure that prevents investigation.
A red pipeline result triggers action. Engineers look at what broke, find the cause, fix it. A green pipeline result triggers deployment approval. When the green result came from tests that passed against stale mock behavioral assumptions, the deployment proceeds with false confidence. The real upstream service behavior that the mocks no longer accurately represent surfaces in production rather than in the pipeline.
This is the informational reliability failure that mock drift creates: not pipeline failures that are investigated, but pipeline successes that are trusted when they should not be. The operational reliability of the pipeline – its ability to complete and produce results – has not changed. The informational reliability – the degree to which those results predict production behavior – has.
What Accurate Dependency Mocking Requires From the Pipeline
Keeping dependency mocks accurate over time requires connecting the mock refresh process to the events that create accuracy risk – upstream service deployments.
The pipeline architecture that addresses this treats upstream deployment events as inputs to the mock maintenance process rather than as external events the pipeline is unaware of. When the payment service deploys a new version to staging, that event triggers a mock validation and refresh cycle for every downstream pipeline that has tests depending on payment service behavioral assumptions.
Without this connection, mock refresh happens reactively – triggered by production failures or manually initiated when someone remembers to check. With it, mock refresh is proactive – triggered by the same upstream deployment events that create the accuracy risk.
The practical implementation varies by CI/CD tooling. Repository dispatch events in GitHub Actions, pipeline triggers in Jenkins, event bus subscriptions in more complex pipeline architectures – the specific mechanism is less important than the principle: upstream deployments should trigger downstream mock validation, not just downstream deployment queues.
Where Observation-Based Mock Generation Changes the Equation
The maintenance model for dependency mocks determines how much engineering attention is required per accuracy event. Specification-based mocks – where a developer authors what the upstream service returns – require a developer to read the upstream change, identify which mocks are affected, and make the correct updates. The attention required per accuracy event stays roughly constant regardless of how many accuracy events occur.
Observation-based mock generation changes this. Rather than authoring what the upstream service returns, a recording session captures what it actually returned after its most recent deployment. The comparison between previous and current observations surfaces what changed without requiring prior knowledge of the change. The developer reviews a diff rather than interpreting a changelog.
Keploy implements this through eBPF-based traffic capture at the kernel level, which records real HTTP exchanges between services during sessions against staging environments after upstream deployments. The generated mock configurations reflect post-deployment observed behavior. When the payment service changes its response structure, the diff between the previous recording and the new one surfaces exactly which fields changed – without the downstream team needing to track the payment service’s release notes. For pipelines covering many upstream services on independent deployment schedules, this changes the per-accuracy-event maintenance cost from a manual interpretation task to a diff review, which scales significantly better as service count and deployment frequency increase.
The Metric That Surfaces Informational Reliability
Engineering teams that want to measure pipeline informational reliability need a metric that captures the gap between what the pipeline validated and what production encountered.
Production failures that occurred despite pipeline tests claiming to cover the affected integration are the signal. Not every production failure – only the ones where tests existed, tests passed, and production behavior diverged from what the tests validated. These are the failures that reveal mock accuracy gaps rather than code defects or coverage gaps.
Tracking this metric separately from standard pipeline reliability metrics gives a clearer picture of where dependency mocking investments are producing reliable pipeline signals and where they are producing false confidence. A pipeline with low flake rate and high deployment frequency but recurring production failures from covered integrations has an informational reliability problem that operational metrics will never surface on their own.

