Skip to content

Platforms and Events

ChatEvent currently treats four platforms as the explicit support scope. push / pull no longer carry product semantics; they may only appear as legacy coarse acquisition modes. Event meaning is expressed by source + action/kind + target; target is a carrier chain, not just a label.

Support matrix

Platform Official capability Primary acquisition Common action kinds
Zulip Official REST API and event queue event_queue, api_cursor message.created, message.updated, reaction.added, reaction.removed, mention.created, topic.updated
Discourse Official REST API and webhooks webhook, api_cursor topic.created, post.created, reply.created, post.edited, post.deleted, mention.created, reaction.added
Gitea Official REST API and repository/org webhooks webhook, api_cursor push, commit.pushed, issue.opened, issue.closed, issue.commented, pull_request.opened, pull_request.updated, pull_request.merged, release.published
GitHub Official REST/GraphQL API and webhooks webhook, api_cursor push, commit.pushed, issue.opened, issue.closed, issue.commented, pull_request.opened, pull_request.synchronize, pull_request.closed, pull_request.merged, workflow_run.requested, workflow_run.in_progress, workflow_run.completed, release.published

Field semantics

Field Meaning
source Platform id such as discourse.
target Compatibility/display subscription scope such as category:agent-runs, stream:chatevent-practice/topic:real-loop, or repo:ChatArch/ChatEvent.
scope Structured subscription carrier target with type, key, display, url, parent, and metadata, e.g. repo, PR, or topic.
actions Structured action selectors derived from event_kinds by default; can store kind, object_type, verb, and metadata.
kind Platform action such as reply.created.
capture_mode Acquisition mechanism such as webhook, event_queue, or api_cursor.
tags / labels Filtering, grouping, or routing hints; they do not define the platform action.

Discourse first posts and replies

Discourse official webhooks may send post_created for both the first topic post and later replies. ChatEvent normalizes them with post.post_number:

  • post_number == 1post.created
  • post_number > 1reply.created

The official webhook event name comes from the X-Discourse-Event header; the ChatEvent endpoint reads that header before normalization.

Actions and carrier target chains

A platform action can attach to different hierarchy levels. ChatEvent keeps target types and actor roles open-ended: each platform action catalog declares suggested target types, and each stored event records the actual target chain plus an optional initiator role.

Platform Subscription scope example Event target chain example
Zulip stream:team/topic:release zulip_stream:team → zulip_topic:team/release → message:123
Discourse category:agent-runs or topic:22 discourse_topic:22 → discourse_post:35
GitHub/Gitea repo:ChatArch/ChatEvent repo:ChatArch/ChatEvent → pull_request:ChatArch/ChatEvent#4 → issue_comment:1234

The Observatory Platform actions panel shows action kind → target types; opening an Event Stream detail shows the concrete Action target and Target chain.