When Qoffee talks

There are three rules. Together they decide every message you ever get.

  1. A run sends one message, or none.
  2. A run sends nothing unless something changed since the last time you were told.
  3. A failure keeps appearing in the message until nothing else in the batch is moving.

If you can hold those three, you can predict Qoffee exactly, which is the point of this page.

One message per run, not one per job

Every notification covers every tracked job at once, grouped by status. As jobs finish they drop out, so the message shrinks over the day.

If nothing is tagged qoffee at all, the run does no work and sends nothing. It does not send an empty message saying there is nothing to report.

Nothing changed means nothing sent

On each run, Qoffee compares each job's real status against the status it last told you about. Same, and it stays quiet. Different, and it sends the message and records the new status.

The consequence is the thing worth checking: a job that sits in the queue for six hours produces one message, not twenty-four. The twenty-three intermediate runs happen, find nothing new, and send nothing.

Where does Qoffee record what it last told you, given that it has no database? On the job, as a second tag. That is the two tags.

Failures are held until the batch goes quiet

This is the rule people do not guess, so it is worth being explicit.

StatusWhat happens after you are told
QUEUEDStays tracked. Reported again only if it changes.
RUNNINGStays tracked. Reported again only if it changes.
DONEReported once, then tracking stops immediately.
ERRORReported once, then held. Keeps appearing in every message until nothing else in the batch is active or finishing.
CANCELLEDSame as ERROR.

A successful job clears out the moment it is reported. A failed one does not. It stays visible for as long as anything else you tagged is still moving, then gets reported one final time on its own and released.

So the last message of a batch contains failures and nothing else. An empty inbox means everything worked. A message with two failures in it means those are the two jobs to resubmit, and you did not have to work that out from a list of thirty.

The reason a DONE job counts as still moving, rather than as settled, is that its success would otherwise land in the same message as the failures and dilute exactly the part you need to read. Holding one more run guarantees the final message is failures only.

When the batch never goes quiet

If you keep submitting new work, there may never be a run where nothing is moving, and a failure would be held forever. FAILURE_AUTOCLEAR_HOURS releases a held failure after a set number of hours regardless. It is off by default, and a release by that route is silent, because it is cleanup rather than news. See settings.

An unrecognised status is left alone

If IBM returns a status Qoffee does not have a mapping for, the job appears in the message under Unrecognized status with the raw text, and nothing is changed. Qoffee does not guess whether an unknown status is terminal. Guessing wrong in that direction would mean untagging a job that had not actually finished.

Nothing is untagged before delivery is confirmed

The order of every run is: read statuses, decide, send, and only after a confirmed send, update tags.

If Discord is down, or the webhook was deleted, or the network failed, then no tag is touched. The run goes red, and the same news is reported again on the next run. Nothing quietly disappears from tracking because the message failed to arrive.

The cost of that ordering is that if the run dies between a successful send and the tag write, you get the same message twice. That trade was made on purpose.

If you can now say how many messages a six hour queue that ends in a failure produces, this page has done its job. The answer is three: queued, running, and the failure.