8.0 KiB
Ecosystem Event Taxonomy
Status: Phase 1 baseline implemented Owner:
learning_ai_common_platPurpose: Define the canonical event vocabulary for cross-product activity, agent execution, approvals, artifacts, and downstream replay.
1. Why This Exists
The ecosystem cannot implement reliable cross-product automation, timelines, approvals, or ActionTrail replay without a shared event language.
Right now, each product can describe similar actions differently:
- LysnrAI may say "transcript created"
- NoteLett may say "note saved"
- Cowork may say "run completed"
- FlowMonk may say "plan executed"
- ActionTrail may say "action approved"
That fragmentation breaks:
- personal timeline aggregation
- cross-repo analytics
- approval policy evaluation
- replay/audit continuity
- artifact provenance
This document defines the common event naming and payload rules.
2. Design Principles
- Events must describe facts, not UI wording.
- Event names must be stable and implementation-neutral.
- Event envelopes must be consistent across products.
- Product-specific data belongs in typed payload sections, not in ad hoc top-level fields.
- Event consumers should be able to reason about provenance and replay from the envelope alone.
3. Canonical Event Envelope
Every ecosystem event should include:
type EcosystemEvent = {
eventId: string;
eventName: string;
eventVersion: number;
occurredAt: string;
productId: string;
sourceSurface: string;
userId?: string | null;
orgId?: string | null;
sessionId?: string | null;
runId?: string | null;
artifactId?: string | null;
actor: {
actorType: 'user' | 'agent' | 'system' | 'device';
actorId?: string | null;
};
trace: {
correlationId?: string | null;
causationId?: string | null;
parentEventId?: string | null;
};
payload: Record<string, unknown>;
};
Required rules:
eventNameis dot-separated, lowercase, verb-last only when neededeventVersionstarts at1payloadis event-specifictraceexists even if values are null
4. Event Naming Convention
Pattern:
<domain>.<entity>.<action>
Examples:
capture.transcript.createdartifact.note.updatedagent.run.startedagent.run.completedapproval.action.approvedtrust.device.degradedplan.routine.generated
Rules:
- Use nouns for domains and entities.
- Use past-tense-like state facts only when the event is the completed fact.
- Avoid UI terms like
button_clicked. - Avoid product names in event names. Product identity belongs in
productId.
5. Domain Groups
5.1 Capture events
capture.transcript.createdcapture.voice_note.createdcapture.browser_clip.createdcapture.document.ingestedcapture.image.ingested
5.2 Artifact events
artifact.createdartifact.updatedartifact.deletedartifact.linkedartifact.visibility_changedartifact.promoted
5.3 Memory and note events
memory.entry.createdmemory.entry.refinedmemory.entry.acceptednote.block.creatednote.block.updatednote.block.linked
5.4 Planning and routine events
plan.createdplan.updatedplan.task.generatedplan.routine.generatedplan.habit.generatedroutine.startedroutine.completed
Current implementation note:
- Phase 2 reuses canonical
artifact.createdandartifact.linkedwithartifactTypevaluesplan,routine, andhabit. - Product-specific planning event names remain reserved for later when the ecosystem needs finer-grained plan lifecycle telemetry beyond the artifact seam.
5.5 Agent runtime events
agent.session.createdagent.session.resumedagent.task.createdagent.todo.updatedagent.run.startedagent.run.pausedagent.run.completedagent.run.failedagent.dispatch.receivedagent.dispatch.accepted
5.6 Approval and trust events
approval.action.requestedapproval.action.approvedapproval.action.deniedapproval.action.expiredtrust.identity.level_changedtrust.device.level_changedtrust.device.degradedtrust.device.blocked
5.7 Audit and safety events
audit.action.loggedsafety.injection.detectedsafety.unattended_action.blockedsafety.policy.violation_detected
5.8 Billing and entitlement events
usage.meteredusage.limit_reachedentitlement.grantedentitlement.revoked
6. High-Priority Events For Phase 1
These should be implemented first because they unlock the initial cross-product flows:
capture.transcript.createdartifact.createdartifact.linkedmemory.entry.createdplan.createdplan.routine.generatedplan.habit.generatedagent.run.startedagent.run.completedapproval.action.requestedapproval.action.approvedtrust.device.level_changed
Commits:
41fa2cddrafted the event taxonomy76f1b47added canonical Phase 1 event schemas and example payloads78918fbextended canonical artifact payloads so Phase 2 can reuseartifact.createdandartifact.linkedforplan,routine, andhabite6b58b7extended canonical artifact payloads so Phase 3 can reuseartifact.createdfortrail-reportand preserve the audited note -> memory seam without introducing a second event family
7. Required Producer Responsibilities
Every producing repo must:
- emit canonical event names
- include the standard envelope fields
- include correlation/causation metadata when available
- preserve product-specific detail in
payload - avoid leaking secrets or raw sensitive material in event payloads
8. Required Consumer Responsibilities
Consumers such as ActionTrail, timeline services, approval engines, and analytics systems must:
- accept unknown future event names gracefully
- branch by
eventNameandeventVersion - preserve raw envelopes for replay and diagnostics
- avoid assuming one product source
9. Example Event
{
"eventId": "evt_01",
"eventName": "capture.transcript.created",
"eventVersion": 1,
"occurredAt": "2026-04-03T22:15:00.000Z",
"productId": "lysnrai",
"sourceSurface": "desktop",
"userId": "user_123",
"artifactId": "art_456",
"actor": {
"actorType": "user",
"actorId": "user_123"
},
"trace": {
"correlationId": "corr_abc",
"causationId": null,
"parentEventId": null
},
"payload": {
"durationMs": 42150,
"language": "en",
"transcriptSource": "microphone"
}
}
10. Open Decisions
- Should event storage be append-only everywhere or normalized into a shared event store?
- Which events should also create artifacts automatically?
- Which runtime events should be considered user-visible versus audit-only?
- What is the retention policy for high-volume low-risk events?
- Should local-only products emit a reduced event set when offline?
11. Acceptance Criteria
- The initial transcript -> note -> memory flow can be represented using canonical events.
- The initial plan -> routine -> habit flow can be represented using canonical events.
- Cowork execution and ActionTrail replay can share event names without repo-specific translation hacks.
- Approval policy evaluation can key off shared event names instead of product-local ones.
12. Implementation Checklist
- finalize the canonical envelope for Phase 1
- finalize the phase-1 event list for transcript -> note -> memory
- define versioning rules
- define payload examples for first adopters
- define storage and retention expectations
- define producer and consumer validation rules
Current implementation location:
Commits:
41fa2cddrafted the initial version76f1b47added Phase 1 event schemas and fixtures