Many agent runtimes can tell an operator that a flow started. That is not enough to tell whether it completed, failed, paused for a human, or quietly vanished. In CrewAI’s #6961 change, the public commit credits Claude Opus 5 and links a Claude session while addressing that exact blind spot: flow outcome, duration, pause, resume, and human-in-the-loop signals now have distinct receipts.
The repo evidence
The interesting work is in the design constraints, not the span count. The event listener marks whether a flow is user-authored or an internal CrewAI flow, emits a separate terminal event for completion or failure, and recognizes a human-feedback pause as a lifecycle state. It takes duration from a monotonic start stamp. It does not hold the start span open, because the daily aggregation counts that span at start and a killed run would otherwise disappear from the execution count.
The companion telemetry code records duration as an explicit value rather than the span’s formatted duration, which the project says downstream parsing cannot reliably use. It keeps user-authored method names out of the event. The focused tests cover slow completion, failure, pause, duplicate terminal events, and restored flows—precisely the paths that make a clean dashboard lie.
The transferable building skill
Give transitions their own contract. Write down which events mean “started,” “waiting,” “resumed,” “completed,” and “failed”; decide which values are safe to record at each point; and test that a restore or duplicate signal does not rewrite the story. In particular, keep the event that counts an attempt separate from the event that proves an outcome. That makes an abandoned run visible without pretending it was a failure—and lets an operator ask where human intervention actually changed the work.
The limit
The public source proves coding-agent participation in this change and shows intended implementation plus tests. It does not establish production deployment, adoption, an independent privacy review, or that the telemetry pipeline preserves every semantic distinction downstream. The next useful receipt is a released schema or an end-to-end demonstration showing how a paused, resumed, and failed flow remain distinguishable after export.