diff --git a/docs/specification.md b/docs/specification.md
index f0803345d..b1de5b128 100644
--- a/docs/specification.md
+++ b/docs/specification.md
@@ -46039,7 +46039,10 @@ CleverAgents emits domain events for every significant state change. Events flow
# Resource events
RESOURCE_ACCESSED = "resource.accessed"
+ RESOURCE_CREATED = "resource.created"
RESOURCE_MODIFIED = "resource.modified"
+ RESOURCE_DELETED = "resource.deleted"
+ RESOURCE_MOVED = "resource.moved"
RESOURCE_INDEXED = "resource.indexed"
# Correction events
@@ -46136,6 +46139,37 @@ CleverAgents emits domain events for every significant state change. Events flow
return self._subject
+#### Resource Event Types and ResourceFileWatcher Behavior
+
+> **Clarification added in response to issue [#8018](https://git.cleverthis.com/cleveragents/cleveragents-core/issues/8018).**
+> Tracked for implementation in [#8025](https://git.cleverthis.com/cleveragents/cleveragents-core/issues/8025).
+
+The full set of resource `EventType` values is:
+
+| `EventType` member | String value | Description |
+|---|---|---|
+| `RESOURCE_ACCESSED` | `"resource.accessed"` | A resource was read or queried. |
+| `RESOURCE_CREATED` | `"resource.created"` | A new resource file was created on disk. |
+| `RESOURCE_MODIFIED` | `"resource.modified"` | An existing resource file was modified in place. |
+| `RESOURCE_DELETED` | `"resource.deleted"` | A resource file was removed from disk. |
+| `RESOURCE_MOVED` | `"resource.moved"` | A resource file was renamed or relocated. |
+| `RESOURCE_INDEXED` | `"resource.indexed"` | A resource was (re-)indexed into the context store. |
+
+**`ResourceFileWatcher` mapping (required behavior):**
+
+`ResourceFileWatcher` monitors the filesystem using a `FileChangeType` enumeration produced by the underlying watcher library. It **MUST** map each `FileChangeType` to a distinct `EventType` as follows:
+
+| `FileChangeType` | Required `EventType` emitted |
+|---|---|
+| `CREATED` | `RESOURCE_CREATED` |
+| `MODIFIED` | `RESOURCE_MODIFIED` |
+| `DELETED` | `RESOURCE_DELETED` |
+| `MOVED` | `RESOURCE_MOVED` |
+
+**Design rationale:** The `EventType` value alone MUST be sufficient for any subscriber to determine the nature of a filesystem change. Subscribers MUST NOT need to inspect `details["change_type"]` or any other payload field to distinguish between created, modified, deleted, or moved events. Encoding the change semantics in the event type (rather than a payload field) keeps subscriber logic simple and enables type-safe subscription via `EventBus.subscribe(EventType.RESOURCE_DELETED, handler)`.
+
+> **Historical note:** Prior to this clarification, `ResourceFileWatcher` emitted `RESOURCE_MODIFIED` for all filesystem change types (created, modified, deleted, moved) and included a `change_type` key in `details` so subscribers could distinguish them. This was a workaround for the missing enum variants and is **no longer the intended design**. New and updated implementations MUST use the distinct event types listed above.
+
#### LLM Call Tracing
Every LLM invocation is traced with full context for debugging and cost tracking: