The reconciliation job failed and told nobody
Finance found out when the numbers did not match. By then the corruption had already propagated downstream and the recovery was twice the work it should have been.
What actually happens
A job that fails loudly is a nuisance. A job that fails quietly is a data quality incident wearing a disguise.
A reconciliation job runs as part of the nightly pipeline. It exits without completing its work and without raising anything that the operations team would see, because the orchestrator records it as finished and the failure lives in an exit code and a log line.
Downstream jobs do not wait, because from their perspective the upstream dependency completed. They run against incomplete data and produce output that is internally consistent and wrong.
That output feeds reporting. The reporting is used. Nobody questions it, because it looks exactly like the reporting that was correct yesterday, and the only signal that anything is off is a set of numbers that will not tie out at a point somewhat later in the process.
When finance raises it, the incident is no longer a failed job. It is a lineage problem: which datasets are affected, which reports drew from them, who has already seen the numbers, and what has to be reissued. That work is the expensive part and it is entirely caused by the delay.
The recovery is roughly twice the work it would have been at the time of failure, because reprocessing one job is straightforward and reprocessing a corrupted chain is not.
The job took seconds to fail. The corruption took hours to spread. Everything expensive about this incident happened in the gap between those two events.
The same night, two ways
The comparison here is not about repair speed. It is about how far the corruption travelled before anyone noticed.
Illustrative, not measured. The times below model a scenario built from the patterns we see in production estates. They are not timings recorded at a named customer. The point is the shape of the clock, not the totals: check it against your own last ten incidents.
Today, found in the numbers
- 02:10Reconciliation job exits incomplete. Orchestrator records it as finished. No alert.
- 02:10 ↓ 05:30WaitingDownstream jobs run against incomplete data. Reporting is built and published.
- 05:30 ↓ 11:15WaitingReports in use. Nothing looks wrong. No ticket exists.
- 11:15Finance raises a discrepancy. Investigation starts from the numbers, not the job.
- 11:15 ↓ 14:40WaitingLineage reconstructed by hand: affected datasets, dependent reports, recipients.
- 17:20Chain reprocessed. Corrected reports reissued. Recipients notified.
~15 hours · and a reissue nobody wanted to send
With Sentinel treating the exit as a signal
- 02:10Job exits incomplete. Sentinel treats the exit code as a signal rather than a log line.
- 02:11Job history, input record counts, dependency graph and the downstream schedule queried together.
- 02:14Cause identified: a source extract delivered a partial file, so the reconciliation had nothing to match against.
- 02:15Downstream jobs held automatically before they run. Affected dataset list attached. No corruption propagates.
- 02:16Action Ticket raised with the re-extract and replay MOP and the rollback path. Data platform owner notified.
- 02:34Approved. Source re-extracted, reconciliation replayed, downstream chain released. Sherlock verifies record counts.
~25 minutes · nothing downstream was ever wrong
The important number in this comparison is not the fifteen hours. It is the fact that in the second column no incorrect report was ever published, so there is no reissue, no recipient list and no conversation with finance about which numbers to trust.
Holding the downstream chain is the whole mechanism. It is a reversible action taken in the first five minutes, and it converts a data quality incident into a delayed job.
Sentinel treats job outcome as a first-class signal rather than as orchestration metadata. An exit code that indicates incomplete work is an event, and the dependency graph is already known, so the blast radius is computed before anything downstream is released.
This is the cheapest pattern on the site to verify against your own estate. Look at your last three data quality incidents and check what time the originating job actually failed. The gap between that timestamp and the first human question is the number this addresses.
Why the number is what it is
The important number in this comparison is not the fifteen hours. It is the fact that in the second column no incorrect report was ever published, so there is no reissue, no recipient list and no conversation with finance about which numbers to trust.
Holding the downstream chain is the whole mechanism. It is a reversible action taken in the first five minutes, and it converts a data quality incident into a delayed job.
Sentinel treats job outcome as a first-class signal rather than as orchestration metadata. An exit code that indicates incomplete work is an event, and the dependency graph is already known, so the blast radius is computed before anything downstream is released.
This is the cheapest pattern on the site to verify against your own estate. Look at your last three data quality incidents and check what time the originating job actually failed. The gap between that timestamp and the first human question is the number this addresses.
Sentinel treats job outcome as a first-class signal rather than as orchestration metadata.
Who decides to press go
Holding a downstream chain and replaying a reconciliation are different classes of action, and they are gated differently.
Holding the downstream schedule runs under policy. It is fully reversible, it corrupts nothing, and releasing the hold is a single step once the upstream is correct.
The re-extract and replay MOP is raised and held with the affected dataset list, the record count expectations and the rollback path attached. The data platform owner approves before anything is reprocessed.
The asymmetry is deliberate. Stopping something is safe and Sentinel does it immediately. Reprocessing something is not, and it waits for a name.
Reconciliation job exits incomplete. Orchestrator reports the job as finished. No operator notification fired. Downstream jobs scheduled to run.
Job history, input record counts, dependency graph and downstream schedule correlated. Source extract delivered a partial file, leaving nothing to reconcile against.
Downstream chain held before execution. Affected dataset list attached. Re-extract and replay MOP staged and held for the data platform owner.
Record count validation added at extract rather than at reconciliation. Job exit codes promoted to first-class signals across the pipeline. Partial-file signature added to the watch list.
This is a platform capability, not a published customer deployment. The mechanism, which is treating a job outcome as a signal and then executing a governed MOP with pre-check, post-check, rollback and approval gating, is running in production today; see governed day-2 operations across 2,000+ nodes. The finance pipeline scenario above applies that same mechanism to a data workload. The timings shown are modelled, not measured.
If the action carries no service impact
Holding the downstream schedule runs under policy. It is fully reversible, it corrupts nothing, and releasing the hold is a single step once the upstream is correct.
If it reprocesses or re-extracts data
The re-extract and replay MOP is raised and held with the affected dataset list, the record count expectations and the rollback path attached. The data platform owner approves before anything is reprocessed.
What Sentinel did, step by step
- ObserveReconciliation job exits incomplete. Orchestrator reports the job as finished. No operator notification fired. Downstream jobs scheduled to run.
- InvestigateJob history, input record counts, dependency graph and downstream schedule correlated. Source extract delivered a partial file, leaving nothing to reconcile against.
- ActDownstream chain held before execution. Affected dataset list attached. Re-extract and replay MOP staged and held for the data platform owner.
- OptimizeRecord count validation added at extract rather than at reconciliation. Job exit codes promoted to first-class signals across the pipeline. Partial-file signature added to the watch list.
Bring us your last data quality incident
We will find the timestamp where the job actually failed and show you the gap.