Skip to main content

Collaboration: Tasks, Suggestions, Announcements & Feed

2.0 retires the thread-backed collaboration model. Tasks, suggestions, announcements and system activity each move out of thread_entity into purpose-built entities with their own tables, APIs and permissions. Human conversations remain on /v1/feed. OpenMetadata 2.0 entity page showing the redesigned header and the Activity Feeds and Tasks tab

The Task redesign

Breaking. Affects API clients, bots and workflow integrations reading /v1/feed/tasks/*.
Tasks are now a first-class entity backed by task_entity, with a full CRUD and versioning surface at /v1/tasks — 22 new endpoints:

The Task shape

Required fields: 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 every thread_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

Breaking.
/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:
  • about is required and must be non-blank.
  • taskDetails is required for Task threads and forbidden on non-task threads.
  • RequestApproval tasks must target an entity, not a field or column.
  • Tag-task oldValue and suggestion must be valid tag-label JSON.
Move task creation to POST /v1/tasks. If you must stay on /v1/feed, restrict yourself to the four supported legacy task types and supply well-formed taskDetails.

New task permissions

Behavioural. Affects non-admin users and application bots.
Five new policy operations exist in 2.0: CreateTask, EditTask, ResolveTask, CloseTask and ReassignTask. The migration backfills them so existing tenants keep working:
Custom policies are not backfilled. Seed policies are create-if-not-exists, so if you replaced DataConsumerPolicy or ApplicationBotPolicy with your own definition, add the task operations yourself or non-admin users will get 403 when filing or patching tasks.
Task authorization is also self-approval guarded — a task’s creator cannot approve their own task.

Suggestions become Tasks

Breaking. Affects AI and automation bots and SDK users.
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

Breaking. Affects anything reading or writing announcements through the feed API.
/v1/feed now rejects announcements outright with:
The guard fires on list (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

Breaking. Affects anything treating the feed as an audit trail.
System-generated activity (field changes, entity created/updated) no longer lives in thread_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

Behavioural — data loss on old activity.
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”.
Do not use the activity stream as an audit trail. For compliance history use entity version history (/v1/{entityType}/{id}/versions) and the audit log (/v1/audit/logs, which gains a searchable search_text column and an export endpoint in 2.0). Activity events are ephemeral by design.

thread_entity is renamed

Behavioural. Affects anyone querying the OpenMetadata database directly.
The feed repository resolves the legacy table dynamically, so migrated threads stay readable.
Update any BI dashboards, retention jobs or support scripts that query thread_entity 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.
Consumers that previously counted per-child delete events must read recursive instead.

Alert and notification behaviour changes

Behavioural. Affects existing alert subscriptions.

Thread events are scoped by their parent entity

In 1.13, the entity-FQN filter returned true 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

Audit every alert with an entity name filter after upgrading, and test with POST /v1/events/subscriptions/testDestination.

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.