package umari:effect@0.1.0;
interface effect {
use umari:common/types@0.1.0.{event-query, stored-event};
use umari:sqlite/types@0.1.0.{sqlite-error};
variant error {
sqlite(sqlite-error),
}
resource effect {
constructor();
/// Tags-based subscription - same as projector
query: func() -> event-query;
/// Extracts the partition key from an event for lane routing.
/// None means the event falls into the global sequential lane.
partition-key: func(event: stored-event) -> option<string>;
/// Handle a single event. Returning an error triggers runtime retry.
handle: func(event: stored-event);
}
}