Jadpo is experimental and not ready for production. These docs follow the compiler's main branch as of 5 Nov 2026. What's built · Install 0.3.0
jadpo
ReferenceErrors

ErrorsBackground work · rule

subscriber.event_invalid

On this page

A subscriber's on: names something other than an event, such as an entity or a plain type.

Area 12, Background work; not declinable; the next step is usually the agent's.

Why Jadpo refuses it

A subscriber runs an action each time an event is committed, and only events are committed and delivered: an action announces one with emit, and it reaches each subscriber after the action's writes commit. An entity, or any type whose base isn't Event, is never delivered, so a subscriber listening for one would never run. Jadpo refuses it rather than leave a subscriber that silently does nothing.

What it looks like

main.jadpo:

example
type Note = Text {    max_length: 200}entity Reminder {    id: Uuid    note: Note    sent: Bool    policy: {        create: [Access.authenticated]        read: [Access.system]        update: [Access.system]    }}type ReminderDue = Event {    reminder_id: Reminder.id}action send_reminder(reminder_id: Reminder.id) fails ReminderNotFound -> Unit {    attempt Reminder.update(reminder_id) {        set: {            sent: true        }    }}subscriber send_due {    on: Reminder    run: send_reminder(event.reminder_id)}
jadpo checkcheck failed: 1 error, 1 file

error on: Reminder isn't an event

--> main.jadpo:30:9

   |30 |     on: Reminder   |         ^^^^^^^^ not an event
reason
A subscriber listens for one event, a type with the Event base that an action emits.
next
Name an event, declared as type <Name> = Event { ... } in a domain's events/ folder (agent)
rule
subscriber.event_invalid
help
https://jadpo.dev/docs/errors/subscriber.event_invalid

(agent) at the end of the next: line means your coding agent can make the fix itself.

How to fix it

If the event already exists, name it in on:. In main.jadpo:

example
subscriber send_due {    on: ReminderDue    ...}

send_due now runs send_reminder once for each ReminderDue an action emits, after that action commits. Inside run:, event is the ReminderDue, so event.reminder_id is the reminder it names.

When there is no event for what happened yet, declare one as a type whose base is Event, have the action where it happens emit it, and name it in on:. A subscriber can't listen for a record changing on its own: the action that changes it announces the change.

Markdown for agents: /docs/errors/subscriber.event_invalid.md.Built from Jadpo main at aee2e8f.