# AiFlagEntry

object type

One fired AI-watch flag: WHO tripped WHICH pattern on WHAT day, with the window's count at the crossing. The watch CATCHES and never blocks — this row exists so a human decides.

## Fields

| Field | Type | Notes |
| --- | --- | --- |
| `day` | [String](/types/#scalars) `String!` | The UTC day the flag fired in. |
| `pattern` | [String](/types/#scalars) `String!` | The tripped pattern — daily_volume \| same_request_hour \| same_request_day \| burst_5min \| throttle_bump (the AI_WATCH_PATTERNS registry; thresholds are GENEROUS v1, tightened on merchant data). |
| `actorKind` | [String](/types/#scalars) `String!` | READ-side actor resolution: 'user' when actorId resolves to an in-tenant User, else 'other' (a session-keyed actor, or a user since removed) — worded honestly, never guessed. |
| `actorId` | [ID](/types/#scalars) `ID!` | The watched actor — a user id (office surfaces) or the session id the event carried (the consumer/api/device planes). |
| `actorCaption` | [String](/types/#scalars) | The actor's caption when actorKind is 'user' (resolved at read — never stored on the flag). |
| `count` | [Int](/types/#scalars) `Int!` | How many times the pattern TRIPPED that day (hour/burst windows can cross again in fresh windows — each crossing grows this row and speaks its own loud line; the inbox task mints on the day's FIRST fire only). |
