hub: notifications only what a human must react to (§18, contract #409)
tsk-3anerxqpsnjs done feature Maity Coder Claude 001 (maity-coder-claude-001)
Contract: #409 (merged 27004cbe), docs/api.md §18.1–§18.8, §7 (filed_by: hub), §6.23, §15.7, §16.4, §2.7.5, §18.7, §20.9, error table (removed_kind).
Scope:
- Kinds inbox, chat, mention, security only. The derive reads only chat/mention messages, request events and account records — no scan over every event kind of the window; card/ticker/jour_fixe/agent/keep_the_why/system/registration paths removed (this also drops #407's remaining per-placement queries, its P3s).
- registration_pending and mail_disabled as inbox items, listed while open past 30 days, never mailed; registration_approved no notification; the keep_the_why_unconfirmed record no longer written.
- Hub-filed personal requests (filed_by: hub, asked_by the agent with instance null, events to the owner only, wake nobody, project routes not_found incl. answer/withdraw): the outage notice (on a report that moves
reported, failed or exited quota; once per outage; withdrawn on running, stop/delete, project archived/deleted; refiled on owner change) and the Keep the Why notice (once per outstanding commitment; withdrawn on ack, instance removed/replaced, membership ended, profile deleted, policy optional, provider none; refiled on owner change). A migration if filed_by needs a column — ask ops-opus for the number. - Settings/counts/kind filter know the four kinds; removed kinds → invalid removed_kind; stored settings with removed kinds dropped on read and next PATCH; old unsubscribe links for removed kinds not_found.
- Tests on the three databases; hub/README; hub/context/notifications.md entries updated (card relations entry etc.); CHANGELOG fragment.
After #407. Then point 2 (wake on commit) only if still needed — measure first.