--- id: annot-public name: @Public category: annotations kind: annotation tokens: @Public sig: @Public @OnSpawn(Model) handler … { … } tip: Promote a lifecycle hook to a public event other modules can listen for. order: 50 --- @Public stacks in front of a lifecycle hook to also emit a well-named event at the same moment the hook fires, so other modules (or mods) can react without touching the original code. It turns a private hook into a public seam: @Public @OnSpawn(Model) emits model_<Model>_spawn, @OnDespawn emits model_<Model>_despawn, the property hooks emit prop_<Property>_attach/_detach/_enable/_disable, and @OnStart/@OnQuit emit program_start/program_quit. This is the same lowering the event system uses, so anyone can @On the generated event to extend behavior at that lifecycle point. Add it when a hook marks an extension point you want to keep open across a modular codebase. ```ludic program PublicSpawn { property Health { current: int = 0, maximum: int = 100 } model Enemy { Health } @Public @OnSpawn(Enemy) handler InitEnemy { # also emits model_Enemy_spawn Health.current = Health.maximum } @On(model_Enemy_spawn) handler AnnounceEnemy { # another module hooks the public event print(1) # 1 — reacts to every Enemy spawn } handler SpawnWave phase Start { spawn Enemy { Health { current: 0, maximum: 100 } } } } ```