Updated 2026-07-28. Still reproducible on main, but it is no longer its own unit of work:
the fix chosen for the lifecycle sub-issue (#29038) covers it. Recommend closing this once
#29038 lands, keeping only its regression test.
Summary
POST /v1/tasks/bulk (TaskResource.bulkOperation, TaskResource.java:1421) transitions N tasks
in one HTTP request and emits no change events.
Verified live on a clean main deploy: a bulk Cancel of one task moved it to Cancelled and
added zero rows to change_event, while an equivalent single-task POST /v1/tasks/{id}/close
added one.
Why it is subsumed
Bulk delegates to the same handler as the single-task endpoints:
TaskResource.bulkOperation -> processBulkOperation -> repository.resolveTaskWithWorkflow / closeTask
-> TaskWorkflowHandler.resolveTask / closeTask
#29038 moves change-event emission out of TaskResource and into
TaskWorkflowHandler.resolveTask / closeTask / reopenTask, precisely because the single-valued
X-OpenMetadata-Change response header cannot express N events. Once emission happens at the
handler, every task processed in a bulk call emits its own event with no bulk-specific code.
What to carry over into #29038
Summary
POST /v1/tasks/bulk(TaskResource.bulkOperation,TaskResource.java:1421) transitions N tasksin one HTTP request and emits no change events.
Verified live on a clean
maindeploy: a bulkCancelof one task moved it toCancelledandadded zero rows to
change_event, while an equivalent single-taskPOST /v1/tasks/{id}/closeadded one.
Why it is subsumed
Bulk delegates to the same handler as the single-task endpoints:
#29038 moves change-event emission out of
TaskResourceand intoTaskWorkflowHandler.resolveTask/closeTask/reopenTask, precisely because the single-valuedX-OpenMetadata-Changeresponse header cannot express N events. Once emission happens at thehandler, every task processed in a bulk call emits its own event with no bulk-specific code.
What to carry over into #29038
change_eventrow per task.taskfires once per affected task.