# Notification overrides — per-run and per-project

outcome: per-project and per-run notification settings override the globals; Telegram channel per project keeps coming from botmaster's existing config.
status: IDLE — queued by owner 2026-08-15 ("write the plans now and queue them... do it later"). Do NOT start until `2026-08-15-notifications-layer.md` is DONE.
source request: owner 2026-08-15 /brainstorm: "Adding per-run and per-project notification settings that will override the globals. add the seams to that, but do it later. And configuration of the telegram channel per project we already have at botmaster, it should use the same data not dupe it."
design spec: seams pre-built in docs/specs/2026-08-15-notifications-layer-design.md (`notification_rules.scope` accepts 'project:<name>' and 'run:<id>' from day one; engine ignores them until this run).

## Scope when started

- O1 engine resolution order: run > project > global; absence at a scope falls through (no shadow-copying of rules). Evidence: a project rule silences an event globally enabled; a run rule overrides both.
- O2 UI: scope switcher on the Settings → Notifications page (Global / per-project tabs; per-run settings editable from the run's own surface, e.g. the /factory run view or the request drawer's routing panel — reuse, don't invent a new page). Owner language; a cell shows WHERE its effective value comes from (inherited vs overridden).
- O3 per-run plumbing: dispatch surfaces (factory CLI, board Dispatch button) accept a notification override set carried on the run id.
- O4 Telegram channel per project: rules reference the project only; botmaster resolves the channel from its existing store. NEVER copy channel config into collector tables — if a project has no botmaster channel, the journal says so and the rule is inert, visible in the UI.

constraints: same doctrine as the base layer (edge-triggered, fail-open, defaults protect crash notices). No schema migration expected — scope column shipped in the base run.

current receipt: plan queued 2026-08-15, not started.
next executable action: verify base layer DONE, then O1.
