NOTIFIER

NOTIFIER

NOTIFIER is NOTIFY + INTEL composed. Scope determines the route. Ledger determines the proof.

COMPOSITION

Composition

Primitive: NOTIFY (what you SEND) + INTEL (what you KNOW) Service: NOTIFIER (governed cross-scope delivery product) Instance: notify: {TARGET} in any CANON.md header

API ROUTES

API Routes

Hosted on Cloudflare Worker (canonic-services @ api.canonic.org).

Send

`` POST /talk/send { “to”: “", "scope": "", "message": "", "context": "" }

Response: { “ok”: true, “id”: “", "ts": "<ISO 8601>" } `

Inbox

` GET /talk/inbox?scope=X&limit=50&offset=0

Response: { “scope”: “", "total": , "entries": [{ id, ts, from, to, message, context, read }] } `

Acknowledge

` POST /talk/ack { “ids”: [“", ...] }

Response: { “ok”: true, “acked”: } ``

MethodPathAuthPurpose
POST/talk/sendBearerDeliver cross-user message
GET/talk/inbox?scope=XBearerRead inbox for scope
POST/talk/ackBearerMark messages as read
ROUTE DECLARATION

Route Declaration

Routes are declared in GOV, not configured at runtime.

`` GOV declaration: notify: DEXTER (in FATIMA/CHAT/CANON.md) Compiler output: “notify”: [“DEXTER”] (in CANON.json) Runtime delivery: inline at /talk/ledger write time Storage: inbox:{TARGET} in KV `

Discovery: magic scan walks all CANON.md notify:` headers → builds route table. Never hardcoded.

INFRASTRUCTURE

Infrastructure

Runtime: Cloudflare Worker (canonic-services) Storage: TALK_KV namespace (inbox:{PRINCIPAL} keys) Delivery: Inline at ledger write time — no polling, no delay

RECORD SHAPE

Record Shape

FieldTypeRequired
idstringyes
tsISO-8601yes
fromstringyes
tostringyes
messagestringyes
contextstringno
readbooleanyes
metaobjectno
LEDGER PROJECTION

LEDGER Projection

Every delivery creates a LEDGER entry:

type: NOTIFIER key: {sender_scope}→{receiver_scope} inventor: {sender} work_ref: notifier:{id}

*NOTIFIER SPEC SERVICES*
TALK AUTO