Reliability & Diagnostics
LabHit is built to be resilient by structure: every run is accounted for, build failures are easy to diagnose, and unreliable stages surface on their own. This page covers the three pieces.
Never lose a run
A pipeline run is recorded the moment it starts -- before any stage executes -- not only when it finishes. So if the engine restarts or crashes mid-run, the run is not lost.
On the next startup, any run still left in a non-terminal state is
reconciled to a terminal interrupted
state. interrupted is honest about what happened: the run
was cut short, so its true outcome is unknown. It is never reported as a
misleading pass or fail -- on a GitHub Check Run it maps to a neutral
conclusion.
The guarantee is simple: a run is always recoverable to a terminal state, even after an unclean shutdown. No configuration is required; this is on by default with persistent storage.
Diagnose a build failure
When a build fails, paste the log into the diagnoser at init.labhit.dev and get the likely cause and the fix in plain language.
- It matches your log against a curated library of common CI/CD failure patterns -- out-of-memory, dependency conflicts, missing secrets, timeouts, test failures, and more.
- It is read-only: it never runs or changes anything.
- Your log never leaves your browser -- the analysis is entirely client-side, so nothing is uploaded.
For each finding it shows the exact line it matched, why it happened, and how to fix it. When it is unsure, it says so.
Pipeline health
Once you have run history, the pipelineHealth GraphQL
query summarizes it:
- Success rate over the window
(
interruptedruns count against it; still-running runs do not). - Flaky stages -- stages that both passed and failed in the window.
- Slowest stages by average duration.
- Interrupted count -- a reliability signal: how many runs were cut short by a restart.
{
pipelineHealth(pipelineName: "ci", limit: 50) {
successRate
flakyStages
stages {
name
runs
failures
avgDurationSecs
flaky
}
}
}
See the API Reference for the full query and every field.