A workflow run history can tell you what the platform recorded, but it cannot prove that every expected event started a run—or that a successful-looking run completed the intended operation. To find those gaps, track each expected event outside the workflow, capture action receipts and send outcomes, then reconcile them one event at a time.
What run history can—and cannot—prove
Run history is a record of runs that the platform created. If a trigger stops firing, an event is deduplicated before run creation, or a quota boundary prevents a run from being created, there is no missing-run row to inspect. The history alone cannot show that the event was expected in the first place.
As an Amazon Associate I earn from qualifying purchases.
It also may not prove that the intended operation succeeded. An endpoint can return 200 OK while its response body contains an application-level error. A platform that checks only transport status may label the step successful even though the requested work failed. Distinguishing those cases requires an explicit response assertion or another signal that represents the operation’s actual outcome.
The Tool Desk
Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →As Hao puts it, “A log cannot record a run that was never created.” The practical implication is to measure the event outside the system whose history you are trying to verify.
#1 Best Overall
Build an independent record for every expected event
Use a controller and a receipt destination that you operate. The controller records an event before sending it to the workflow platform; workflow actions send receipts to your destination. Keep a separate send outcome so a missing receipt can be interpreted correctly.
1. Record the expected event before sending
Give every event a unique identifier, such as run_id, and retain it unchanged throughout the workflow. Hao’s specification states: “run_id must be unique per event and preserved unchanged to the destination.” A controller-side event record can include:
run_id: unique identity for this event.wf: workload or workflow being measured.platform: platform handling the event.seq: sequence number, if useful for ordering.fired_at: time the event was recorded before sending.
2. Record whether the platform accepted the send
For each send attempt, record whether the platform accepted the event. If it refused the send, preserve the reason—for example, a timeout, connection reset, or non-2xx response. This distinction matters: no receipt after a refused send is not evidence that an accepted event disappeared.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Rank #2
- Book - powershell for sysadmins: workflow automation made easy
- Language: english
- Binding: paperback
3. Make workflow actions send receipts
Each action expected to produce an output posts a receipt to a destination you control. The receipt should echo the event identity and identify the step that produced it. The destination records received_at. If the workflow has multiple expected outputs, define that expected count per event so the receipts can be checked against it.
4. Reconcile records per event
For every expected event, count receipts carrying its run_id and compare that count with the expected output count. Aggregate totals are not enough: the same total can conceal one missing event and one duplicate event.
The time from fired_at to received_at is a useful end-to-end receipt latency. It includes workflow processing and both network legs between controller, platform, and receipt destination; it is not the platform’s internal execution time.
Rank #3
Classify each event before calculating a failure rate
Classify outcomes against the expected output count and the recorded send outcome. The seven categories below keep successful filtering, send refusal, missing work, and excess output distinct.
Do these 3 things before closing this tab:
1Fix the driver behind crashes, sound loss and screen glitches2Clear out junk files and repair common Windows errors3Scan for outdated or missing drivers - takes under a minute| Receipt observation and expectation | Classification |
|---|---|
| Receipts equal the expected output count | Success |
| No receipts; event was accepted and output was expected | Missed |
| Some receipts, but fewer than expected | Partial |
| More receipts than expected | Duplicate |
| No receipts; send was refused | Rejected at send |
| No receipts; expected output count was zero | Filtered (correct) |
| One or more receipts; expected output count was zero | Filter leak |
Hao defines the Silent Failure Rate as:
(missed + partial) / accepted runs expected to produce output
Refused sends are excluded from both the numerator and denominator and reported separately. Report all seven outcome counts alongside the rate so readers can see what it includes and whether filtering, duplicates, or send refusals affect interpretation.
Report the denominator and uncertainty, not just a percentage
A zero observed failure count does not establish that the underlying failure rate is truly zero. The sample size determines how informative that observation is. Hao’s article illustrates the difference with zero failures in 40 runs, whose upper bound is near 7%, versus zero in 4,000 runs, whose upper bound is well under 0.1%. These are statistical illustrations, not platform comparisons.
For rare events or a zero count, Hao recommends a Wilson score interval with z = 1.96; the article warns that the normal approximation collapses to a zero-width interval when no failures are observed. Publish the denominator and interval with each rate. Also state the workload, the as-of date, and whether the result is refreshed continuously or is a one-off measurement.
What the worked example does—and does not—show
Hao reports a ledger of 2,880 events over five hours in 2026. Four sends were refused, and the ledger recorded zero accepted-then-lost events. Under the stated formula, that is zero silent failures among 2,876 accepted events expected to produce output, with the four send refusals reported separately.
Best Value
This is an author-reported example, not an independently audited result or a platform-wide benchmark. It does not establish comparative reliability across vendors, and it should not be generalized beyond the measured workload and period.
Conformance levels describe implementation effort, not certification
The specification describes three self-declared levels for applying the method:
- L1: Calculate the rate from operational data and report it according to the stated rules. No test harness, paid plan, or experiment is required.
- L2: Add a controlled measurement with both endpoints under the operator’s control.
- L3: Add three edge probes: destination outage, success-wrapped failure, and sustained load.
The specification is described as free under CC BY 4.0 and requires no code installation. It is not audited, has no certifying body or registry, and its reference implementation is planned but unpublished. The levels are therefore self-declared conformance, not independent certification.
Recommended Free Tools
Quick Recap
Questions to answer before relying on a measurement
- Does every expected event get recorded before it is sent?
- Is the event identifier unique and preserved unchanged through every action and receipt?
- Can each action send a receipt to a destination you control?
- Can you distinguish platform acceptance from refusal, and retain the refusal reason?
- Does the workflow check application-level outcomes rather than transport status alone where needed?
- Can you produce all seven outcome counts, the rate denominator, and an uncertainty interval for the stated workload and date?
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.




