Problem
Two consumer designs need aggregate read surfaces that do not exist. Events are written (memory recall/remember, kg create/link, brain feedback) but there is no sanctioned aggregate read: today the only options are per-record verbs or direct SQL (banned surface).
Ask A — windowed event counts
A read verb returning event COUNTS grouped by actor and kind over a time window, e.g.:
brain.events(actor?, kind?, since, until?) -> {counts: {kind: n, ...}, by_profile?: {...}}
- Kinds: memory.recall, memory.remember, kg create/link, brain feedback (feedback splittable by served_by_profile_id).
- Consumer: fleet flywheel-metrics reporting (recall-before rate, persist-after rate, feedback coverage per profile).
Ask B — section co-usage aggregates
A read surface answering: which atom-section types are served together and co-earn positive section_signals feedback, over a window.
- Consumer: domain auto-generation from usage (domains as patterns of co-used, co-liked atom sections).
- Likely home: knowledge pack (section serve/feedback events already flow through compose + knowledge.feedback).
Notes
- Both are read-only Assertive verbs; no new write paths.
- Verb surface verified 2026-07-08 (75 verbs): no existing verb covers either ask. brain.profile returns snapshot/state summary, not windowed event aggregates; knowledge.feedback is write-only.
- Consumers can carry a pending-surface placeholder; not launch-blocking.
Problem
Two consumer designs need aggregate read surfaces that do not exist. Events are written (memory recall/remember, kg create/link, brain feedback) but there is no sanctioned aggregate read: today the only options are per-record verbs or direct SQL (banned surface).
Ask A — windowed event counts
A read verb returning event COUNTS grouped by actor and kind over a time window, e.g.:
Ask B — section co-usage aggregates
A read surface answering: which atom-section types are served together and co-earn positive section_signals feedback, over a window.
Notes