Using it · page 11 of 13
When things go wrong
The failures you will actually meet, what each one means, and what to do. Every one of these has happened on Constat's own record.
The release was refused: the branch does not merge
The work is accepted and its seal stands. What failed is only the merge: another attempt reached the default branch first, and this branch no longer applies to it cleanly.
Pressing Release again will not help. A release merges the branch the attempt was judged on, and that branch is exactly the one that no longer merges, so it is refused for the same reason every time.
The requirement page says the work is judged and not on the default branch, and offers Send it round again. That rebuilds the accepted work on today's default branch. Nothing is re-judged and the seal keeps its number. If the rebuild comes back green and merges cleanly, Constat releases it itself.
Two attempts that touched the same file will do this to each other, and the one that lands second is the one that has to go round. It is ordinary, not a fault.
"An attempt is holding the ground", or "a release is holding the ground"
Nothing is wrong. A release merges a branch into your default branch, and an attempt in flight has already rebased onto that branch and is building against it — merged underneath, the ground it stands on moves and its evidence would describe a base that was never a state of your project. So the two never overlap. Whichever is refused says how many are in flight and that pressing again once they finish goes through unchanged. Nothing is lost by waiting and nothing about the record changes in the meantime.
A refusal in Constat always leads with what you can do and when. If you meet one that only explains itself, that is a defect in the words, not in your project.
The agent's account has run out
An attempt that ends within seconds having spent nothing, with the agent's own words about a limit, is not your code failing — the account that runs the agent has no allowance left until the time it names. Constat records that as work that never started rather than as a failed attempt, so it never becomes the attempt a door opens on, and it holds the queue until the allowance returns.
The attempt ended with nothing
What you see. The run is failed, with no branch and no commit, and a sentence saying what the tool said as it ended — including its last words.
What it usually is. The agent's account hit a limit, or the process died. Constat writes down whatever the tool said about its own ending rather than inventing a reason, because a usage limit, a refusal and a cut connection otherwise read the same.
What to do. Dispatch again. Nothing is lost, because nothing was made.
The attempt was halted
What you see. halted, with the reason: a spending cap, a time cap, you stopping it, or the runner never reported back.
Caps. If it finished and then crossed the cap, the record says so — its last commit and its report were already in place, and it is judgeable.
The runner never reported back means the builder died silently on the machine. Constat waited past the cap, heard nothing, and recorded it rather than leaving it running for ever.
What to do. If the requirement was too large for its envelope, split it. That is more often the cause than a slow machine.
Every criterion is green and the run is red
What it means. Something failed that no criterion claims — often a check in another part of the suite that your change broke, or a check somebody left broken earlier.
Where to look. The beyond the criteria section names it with its error line.
What to do. If it is this attempt's doing, refuse and say which check. If it belongs to older work, say that in your reason so the next attempt does not go chasing it.
A check timed out instead of failing
What you see. A check that ran for its whole limit and then stopped, with no assertion.
What it means. A screen that never rendered, an app that never answered, or a check that is genuinely just slow. A timeout does not distinguish them, which is why it is worth fixing rather than re-running.
What to do. Treat it as the machine's until shown otherwise, and press the checks again. Twice at the same commit is the code's.
CI could not be read at all
What you see. The project's health line carries the reason, in the words the other side gave.
Common causes. The witness is not installed on that repository. Its permissions changed and have not been accepted. Your CI is blocked by billing. Each of those says which it is.
An attempt is queued and never starts
What it means. Nothing is listening. Either the project asks for a runner label no registered runner carries, or the repository has no runner workflow at all.
What to do. Check the project's where attempts run setting against the runners registered on that repository.
A release merged but is not live
What you see. The release stays at merged, not live.
What it means. Constat watches the address you gave for the application answering at that commit. Live is observed, never assumed, so this is telling you something real: your deploy has not finished, or it did not deploy that commit.
The agent says it did something CI did not see
What you see. A claim beside evidence that disagrees with it.
What it means. Exactly what it looks like. The claim stays on the record in the agent's words, and the evidence stays beside it. That is not an error state; it is the product working.