Collaboration: Tasks, Suggestions, Announcements & Feed
2.0 retires the thread-backed collaboration model. Tasks, suggestions, announcements and system activity each move out ofthread_entity into purpose-built entities with their own tables, APIs and
permissions. Human conversations remain on /v1/feed.

The Task redesign
Tasks are now a first-class entity backed bytask_entity, with a full CRUD and versioning surface at
/v1/tasks — 22 new endpoints:
The Task shape
id, name, category, type, status, createdBy.
Typed payload schemas ship for each task type:
glossaryApprovalPayload, descriptionUpdatePayload,
tagUpdatePayload, ownershipUpdatePayload, tierUpdatePayload, domainUpdatePayload,
suggestionPayload, reviewPayload, testCaseResolutionPayload, incidentResolutionPayload,
dataAccessRequestPayload and genericTaskPayload.
Migration
The migration converts everythread_entity row with type='Task' into a Task, computing about and
aboutFqnHash from the entity link. A task_migration_mapping table records
old_thread_id → new_task_id for traceability and redirects.
/v1/feed task creation is now restricted
/v1/feed still exposes GET /v1/feed/tasks/{id}, PUT /v1/feed/tasks/{id}/resolve and
PUT /v1/feed/tasks/{id}/close, but creating a task thread through POST /v1/feed now validates the
task type and rejects anything outside the supported legacy set — description, tag, approval and
test-case-failure-resolution tasks.
Additional validations on POST /v1/feed:
aboutis required and must be non-blank.taskDetailsis required forTaskthreads and forbidden on non-task threads.RequestApprovaltasks must target an entity, not a field or column.- Tag-task
oldValueandsuggestionmust be valid tag-label JSON.
New task permissions
Behavioural. Affects non-admin users and application bots.
CreateTask, EditTask, ResolveTask, CloseTask and
ReassignTask. The migration backfills them so existing tenants keep working:
Task authorization is also self-approval guarded — a task’s creator cannot approve their own task.
Suggestions become Tasks
Status mapping:
The suggestion field path moves from an entity link to
payload.fieldPath in dot notation
(columns.col_name.description).
Announcements are a standalone entity
/v1/feed now rejects announcements outright with:
threadType=Announcement), get-by-id, patch, create, delete, posts and
reactions — any request touching an announcement thread returns 400.
Migration shape
Announcements are full entities in 2.0 — versioned, soft-deletable and restorable — and the UI renders
them in the entity header rather than only in the feed widget.
The Activity Stream replaces system-generated feed threads
System-generated activity (field changes, entity created/updated) no longer lives inthread_entity.
It moves to a purpose-built, time-partitioned, retention-bounded activity_stream table with its own
API:
Activity is deleted after 30 days by default
activityStreamConfig is configurable globally or per domain:
Events carry
domains inherited from the source entity, enabling domain-scoped feed visibility.
oldValue and newValue are explicitly documented as “truncated for display, not for audit”.
thread_entity is renamed
Behavioural. Affects anyone querying the OpenMetadata database directly.
Task Form Schemas
Additive.
/v1/taskFormSchemas stores per-task-type form definitions, referenced from a Task via
taskFormSchemaId and taskFormSchemaVersion. This is what lets governance workflows render custom
task forms.
Change events for tasks and lineage
Additive. Affects webhook and event-subscription consumers.
changeEventType adds taskCreated, taskUpdated, entityLineageAdded, entityLineageDeleted and
entityLineageUpdated. changeEvent adds a recursive flag marking cascade deletes — a single event
is recorded for the deleted root, and cascaded descendants produce no individual events.
Alert and notification behaviour changes
Thread events are scoped by their parent entity
In 1.13, the entity-FQN filter returnedtrue unconditionally for thread change events — thread
activity bypassed the filter entirely. In 2.0 a thread event is matched against the fully qualified
name of the entity the thread is about.
An alert scoped to service.db.schema that previously fired for every conversation and task in the
system now fires only for threads about entities under that name. Alerts that looked noisy will go
quiet; alerts you relied on for global thread coverage will stop firing.
Filter matching is literal, not regular-expression
Alert filter functions now match fully qualified names literally. Descendant matching is handled explicitly. An alert whose filter used regular-expression metacharacters (., *, |) to match a
family of names no longer matches — enumerate the names or rely on descendant matching.
Other alert changes
Server-side feed and task time filters
Additive. Both the feed list and task list APIs accept
startTs and endTs for server-side
time-range filtering, replacing client-side windowing.