{ "_comment": "Generated freeze of module-rust's engagement contract (docs/modules/rust/PLAN.md §25). Regenerate with `npm run engagement:manifest` in server/. A renamed variable, a changed type or a widened ceiling breaks stored templates and rules, so the diff here is the review signal.", "coreApi": "^1.10.0", "triggers": [ { "id": "rust.base.destroyed", "label": "Your base was raided", "description": "Part of a base you are authorised on was destroyed by another player: a wall, a door, an external wall or gate, or the tool cupboard.", "kind": "event", "subjectKey": "building", "audience": "owner", "ceiling": "owner", "version": 1, "variables": [ { "name": "serverId", "type": "string", "required": true, "example": "main", "description": "The server the event happened on, as configured in Admin -> Rust. Also the cooldown subject for broadcasts." }, { "name": "server", "type": "string", "required": true, "example": "Runic Gateway | Main", "description": "The server's display name." }, { "name": "serverUrl", "type": "url", "required": false, "example": "/rust/servers/main", "description": "Site-relative path to the server's page." }, { "name": "building", "type": "string", "required": true, "example": "8113", "description": "The base, as the id of its tool cupboard. The cooldown subject." }, { "name": "structure", "type": "string", "required": true, "example": "door", "description": "What was destroyed: \"building block\", \"door\", \"external wall\" or \"tool cupboard\"." }, { "name": "grid", "type": "string", "required": false, "example": "H7", "description": "The map grid square. Absent when the server could not work one out." }, { "name": "atGrid", "type": "string", "required": false, "example": " in H7", "description": "Sentence fragment: \" in H7\" with its own leading space, or nothing when the grid is unknown." }, { "name": "ownerOnline", "type": "boolean", "required": true, "example": false, "description": "Whether YOU were online when it happened. The seeded rule alerts only when this is false." } ] }, { "id": "rust.clan.disbanded", "label": "Your clan was disbanded", "description": "A clan you were in was disbanded.", "kind": "event", "subjectKey": "clanKey", "audience": "members", "ceiling": "members", "version": 1, "variables": [ { "name": "clanKey", "type": "string", "required": true, "example": "main:12:1790142840000", "description": "The clan's stable identity. The cooldown subject; not meant for display." }, { "name": "clan", "type": "string", "required": true, "example": "The Rust Belt", "description": "The clan's name." }, { "name": "clanUrl", "type": "url", "required": false, "example": "/rust/clans/main%3A12%3A1790142840000", "description": "Site-relative path to the clan's page." }, { "name": "serverId", "type": "string", "required": true, "example": "main", "description": "The server the event happened on, as configured in Admin -> Rust. Also the cooldown subject for broadcasts." }, { "name": "server", "type": "string", "required": true, "example": "Runic Gateway | Main", "description": "The server's display name." }, { "name": "serverUrl", "type": "url", "required": false, "example": "/rust/servers/main", "description": "Site-relative path to the server's page." }, { "name": "by", "type": "string", "required": false, "example": "Marisol", "description": "Who disbanded it." } ] }, { "id": "rust.clan.member.kicked", "label": "Someone was removed from your clan", "description": "A member was removed from a clan you are in — or you were.", "kind": "event", "subjectKey": "clanKey", "audience": "members", "ceiling": "members", "version": 1, "variables": [ { "name": "clanKey", "type": "string", "required": true, "example": "main:12:1790142840000", "description": "The clan's stable identity. The cooldown subject; not meant for display." }, { "name": "clan", "type": "string", "required": true, "example": "The Rust Belt", "description": "The clan's name." }, { "name": "clanUrl", "type": "url", "required": false, "example": "/rust/clans/main%3A12%3A1790142840000", "description": "Site-relative path to the clan's page." }, { "name": "serverId", "type": "string", "required": true, "example": "main", "description": "The server the event happened on, as configured in Admin -> Rust. Also the cooldown subject for broadcasts." }, { "name": "server", "type": "string", "required": true, "example": "Runic Gateway | Main", "description": "The server's display name." }, { "name": "serverUrl", "type": "url", "required": false, "example": "/rust/servers/main", "description": "Site-relative path to the server's page." }, { "name": "member", "type": "string", "required": false, "example": "Darrow", "description": "Who was removed." }, { "name": "by", "type": "string", "required": false, "example": "Marisol", "description": "Who removed them." } ] }, { "id": "rust.clan.member.left", "label": "Someone left your clan", "description": "A member left a clan you are in.", "kind": "event", "subjectKey": "clanKey", "audience": "members", "ceiling": "members", "version": 1, "variables": [ { "name": "clanKey", "type": "string", "required": true, "example": "main:12:1790142840000", "description": "The clan's stable identity. The cooldown subject; not meant for display." }, { "name": "clan", "type": "string", "required": true, "example": "The Rust Belt", "description": "The clan's name." }, { "name": "clanUrl", "type": "url", "required": false, "example": "/rust/clans/main%3A12%3A1790142840000", "description": "Site-relative path to the clan's page." }, { "name": "serverId", "type": "string", "required": true, "example": "main", "description": "The server the event happened on, as configured in Admin -> Rust. Also the cooldown subject for broadcasts." }, { "name": "server", "type": "string", "required": true, "example": "Runic Gateway | Main", "description": "The server's display name." }, { "name": "serverUrl", "type": "url", "required": false, "example": "/rust/servers/main", "description": "Site-relative path to the server's page." }, { "name": "member", "type": "string", "required": false, "example": "Darrow", "description": "Who left." } ] }, { "id": "rust.leaderboard.topped", "label": "A new kills leader", "description": "Somebody new leads the current wipe's kills on a server.", "kind": "event", "subjectKey": "serverId", "audience": "subscribers", "ceiling": "everyone", "version": 1, "variables": [ { "name": "serverId", "type": "string", "required": true, "example": "main", "description": "The server the event happened on, as configured in Admin -> Rust. Also the cooldown subject for broadcasts." }, { "name": "server", "type": "string", "required": true, "example": "Runic Gateway | Main", "description": "The server's display name." }, { "name": "serverUrl", "type": "url", "required": false, "example": "/rust/servers/main", "description": "Site-relative path to the server's page." }, { "name": "leader", "type": "string", "required": true, "example": "Marisol", "description": "The new leader's in-game name." }, { "name": "kills", "type": "int", "required": true, "example": 42, "description": "Their kills this wipe." }, { "name": "leaderboardUrl", "type": "url", "required": false, "example": "/rust/servers/main?tab=leaderboard", "description": "Site-relative path to the server's leaderboard." } ] }, { "id": "rust.login.denied", "label": "A login was not approved", "description": "Somebody tried to join a server and was not let in within a minute: a ban, a failed authentication, or a player who gave up while connecting.", "kind": "event", "subjectKey": "steamId", "audience": "staff", "ceiling": "staff", "version": 1, "variables": [ { "name": "serverId", "type": "string", "required": true, "example": "main", "description": "The server the event happened on, as configured in Admin -> Rust. Also the cooldown subject for broadcasts." }, { "name": "server", "type": "string", "required": true, "example": "Runic Gateway | Main", "description": "The server's display name." }, { "name": "serverUrl", "type": "url", "required": false, "example": "/rust/servers/main", "description": "Site-relative path to the server's page." }, { "name": "steamId", "type": "string", "required": true, "example": "76561198000000002", "description": "The Steam id that tried to connect. The cooldown subject." }, { "name": "player", "type": "string", "required": false, "example": "Darrow", "description": "The name it connected with." }, { "name": "attemptedAt", "type": "datetime", "required": true, "example": "2026-09-23T03:10:00Z", "description": "When the attempt was made." } ] }, { "id": "rust.player.banned", "label": "A player was banned", "description": "A player was banned on a server.", "kind": "event", "subjectKey": "steamId", "audience": "staff", "ceiling": "staff", "version": 1, "variables": [ { "name": "serverId", "type": "string", "required": true, "example": "main", "description": "The server the event happened on, as configured in Admin -> Rust. Also the cooldown subject for broadcasts." }, { "name": "server", "type": "string", "required": true, "example": "Runic Gateway | Main", "description": "The server's display name." }, { "name": "serverUrl", "type": "url", "required": false, "example": "/rust/servers/main", "description": "Site-relative path to the server's page." }, { "name": "steamId", "type": "string", "required": true, "example": "76561198000000002", "description": "The banned player's Steam id. The cooldown subject." }, { "name": "player", "type": "string", "required": false, "example": "Darrow", "description": "The banned player's name." }, { "name": "reason", "type": "string", "required": false, "example": "Cheating", "description": "The reason given." } ] }, { "id": "rust.player.linked", "label": "A Steam account was linked", "description": "A Steam account was linked to your website account with an in-game code.", "kind": "event", "subjectKey": "steamId", "audience": "owner", "ceiling": "owner", "version": 1, "variables": [ { "name": "steamId", "type": "string", "required": true, "example": "76561198000000001", "description": "The Steam account that was linked. Also the cooldown subject." }, { "name": "player", "type": "string", "required": false, "example": "Marisol", "description": "The in-game name the game reported when it was linked." }, { "name": "accountUrl", "type": "url", "required": false, "example": "/player/rust", "description": "Site-relative path to your Rust account page." } ] }, { "id": "rust.player.reported", "label": "A player was reported", "description": "A player filed an in-game report against another.", "kind": "event", "subjectKey": "steamId", "audience": "staff", "ceiling": "staff", "version": 1, "variables": [ { "name": "serverId", "type": "string", "required": true, "example": "main", "description": "The server the event happened on, as configured in Admin -> Rust. Also the cooldown subject for broadcasts." }, { "name": "server", "type": "string", "required": true, "example": "Runic Gateway | Main", "description": "The server's display name." }, { "name": "serverUrl", "type": "url", "required": false, "example": "/rust/servers/main", "description": "Site-relative path to the server's page." }, { "name": "steamId", "type": "string", "required": true, "example": "76561198000000002", "description": "The reported player's Steam id. The cooldown subject." }, { "name": "player", "type": "string", "required": false, "example": "Darrow", "description": "The reported player's name." }, { "name": "reporter", "type": "string", "required": false, "example": "Marisol", "description": "Who filed the report." }, { "name": "reportType", "type": "string", "required": false, "example": "cheat", "description": "The category the reporter chose." }, { "name": "topic", "type": "string", "required": false, "example": "Aimbot at the dome", "description": "The report's subject line." }, { "name": "message", "type": "string", "required": false, "example": "Headshots through two walls.", "description": "The report's text." } ] }, { "id": "rust.player.unbanned", "label": "A player was unbanned", "description": "A ban on a server was lifted.", "kind": "event", "subjectKey": "steamId", "audience": "staff", "ceiling": "staff", "version": 1, "variables": [ { "name": "serverId", "type": "string", "required": true, "example": "main", "description": "The server the event happened on, as configured in Admin -> Rust. Also the cooldown subject for broadcasts." }, { "name": "server", "type": "string", "required": true, "example": "Runic Gateway | Main", "description": "The server's display name." }, { "name": "serverUrl", "type": "url", "required": false, "example": "/rust/servers/main", "description": "Site-relative path to the server's page." }, { "name": "steamId", "type": "string", "required": true, "example": "76561198000000002", "description": "The player's Steam id. The cooldown subject." }, { "name": "player", "type": "string", "required": false, "example": "Darrow", "description": "The player's name." } ] }, { "id": "rust.server.offline", "label": "A server went offline", "description": "A server's game stopped, crashed, or stopped talking to the website.", "kind": "event", "subjectKey": "serverId", "audience": "subscribers", "ceiling": "everyone", "version": 1, "variables": [ { "name": "serverId", "type": "string", "required": true, "example": "main", "description": "The server the event happened on, as configured in Admin -> Rust. Also the cooldown subject for broadcasts." }, { "name": "server", "type": "string", "required": true, "example": "Runic Gateway | Main", "description": "The server's display name." }, { "name": "serverUrl", "type": "url", "required": false, "example": "/rust/servers/main", "description": "Site-relative path to the server's page." } ] }, { "id": "rust.server.online", "label": "A server came online", "description": "A server's game started, or came back after being unreachable.", "kind": "event", "subjectKey": "serverId", "audience": "subscribers", "ceiling": "everyone", "version": 1, "variables": [ { "name": "serverId", "type": "string", "required": true, "example": "main", "description": "The server the event happened on, as configured in Admin -> Rust. Also the cooldown subject for broadcasts." }, { "name": "server", "type": "string", "required": true, "example": "Runic Gateway | Main", "description": "The server's display name." }, { "name": "serverUrl", "type": "url", "required": false, "example": "/rust/servers/main", "description": "Site-relative path to the server's page." } ] }, { "id": "rust.wipe.started", "label": "A server wiped", "description": "A server started a new wipe: a fresh map, and everything built on the old one gone.", "kind": "event", "subjectKey": "serverId", "audience": "subscribers", "ceiling": "everyone", "version": 1, "variables": [ { "name": "serverId", "type": "string", "required": true, "example": "main", "description": "The server the event happened on, as configured in Admin -> Rust. Also the cooldown subject for broadcasts." }, { "name": "server", "type": "string", "required": true, "example": "Runic Gateway | Main", "description": "The server's display name." }, { "name": "serverUrl", "type": "url", "required": false, "example": "/rust/servers/main", "description": "Site-relative path to the server's page." }, { "name": "wipeId", "type": "string", "required": true, "example": "1790142840-3000-1234", "description": "The new wipe's identity." } ] } ], "streams": [ { "id": "rust.base.destroyed", "label": "Your base was raided", "personal": true, "requiresLinkedAccount": true }, { "id": "rust.server.offline", "label": "A server went offline", "personal": false, "requiresLinkedAccount": false }, { "id": "rust.server.online", "label": "A server came online", "personal": false, "requiresLinkedAccount": false }, { "id": "rust.wipe.started", "label": "A server wiped", "personal": false, "requiresLinkedAccount": false } ], "audiences": [ { "id": "rust.clan.members", "label": "Members of a clan", "params": [ { "id": "clan", "type": "string", "required": true } ], "ceiling": "members" }, { "id": "rust.server.players", "label": "Everyone who has played on a server", "params": [ { "id": "serverId", "type": "string", "required": true } ], "ceiling": "authenticated" }, { "id": "rust.wipe.participants", "label": "Everyone playing a server's current wipe", "params": [ { "id": "serverId", "type": "string", "required": true } ], "ceiling": "authenticated" } ], "ruleGroups": [ { "key": "raid-v1", "rules": [ { "trigger_id": "rust.base.destroyed", "audience": "owner", "channels": [ "email", "inapp", "push" ], "template_keys": { "email": "rust.base.destroyed", "inapp": "rust.base.destroyed-inapp", "digest": "notify.digest" }, "conditions": { "variable": "ownerOnline", "cmp": "eq", "value": false }, "cooldown_seconds": 1800, "delay_seconds": 0, "cancel_on": [] } ] }, { "key": "wipe-v1", "rules": [ { "trigger_id": "rust.wipe.started", "audience": "subscribers", "channels": [ "email", "inapp", "push" ], "template_keys": { "email": "rust.wipe.started", "inapp": "rust.wipe.started-inapp", "digest": "notify.digest" }, "conditions": null, "cooldown_seconds": 21600, "delay_seconds": 0, "cancel_on": [] } ] }, { "key": "server-v1", "rules": [ { "trigger_id": "rust.server.online", "audience": "subscribers", "channels": [ "inapp", "push" ], "template_keys": { "inapp": "inapp.event" }, "conditions": null, "cooldown_seconds": 3600, "delay_seconds": 0, "cancel_on": [] }, { "trigger_id": "rust.server.offline", "audience": "subscribers", "channels": [ "inapp", "push" ], "template_keys": { "inapp": "inapp.event" }, "conditions": null, "cooldown_seconds": 3600, "delay_seconds": 300, "cancel_on": [ "rust.server.online" ] } ] }, { "key": "leaderboard-v1", "rules": [ { "trigger_id": "rust.leaderboard.topped", "audience": "subscribers", "channels": [ "inapp" ], "template_keys": { "inapp": "inapp.event" }, "conditions": null, "cooldown_seconds": 3600, "delay_seconds": 0, "cancel_on": [] } ] }, { "key": "account-v1", "rules": [ { "trigger_id": "rust.player.linked", "audience": "owner", "channels": [ "email", "inapp" ], "template_keys": { "email": "notify.event", "inapp": "inapp.event", "digest": "notify.digest" }, "conditions": null, "cooldown_seconds": 0, "delay_seconds": 0, "cancel_on": [] } ] }, { "key": "clans-v1", "rules": [ { "trigger_id": "rust.clan.member.left", "audience": "members", "channels": [ "inapp" ], "template_keys": { "inapp": "inapp.event" }, "conditions": null, "cooldown_seconds": 0, "delay_seconds": 0, "cancel_on": [] }, { "trigger_id": "rust.clan.member.kicked", "audience": "members", "channels": [ "inapp" ], "template_keys": { "inapp": "inapp.event" }, "conditions": null, "cooldown_seconds": 0, "delay_seconds": 0, "cancel_on": [] }, { "trigger_id": "rust.clan.disbanded", "audience": "members", "channels": [ "email", "inapp" ], "template_keys": { "email": "notify.event", "inapp": "inapp.event", "digest": "notify.digest" }, "conditions": null, "cooldown_seconds": 0, "delay_seconds": 0, "cancel_on": [] } ] }, { "key": "moderation-v1", "rules": [ { "trigger_id": "rust.player.reported", "audience": "staff", "channels": [ "email", "inapp" ], "template_keys": { "email": "notify.event", "inapp": "inapp.event", "digest": "notify.digest" }, "conditions": null, "cooldown_seconds": 3600, "delay_seconds": 0, "cancel_on": [] }, { "trigger_id": "rust.player.banned", "audience": "staff", "channels": [ "inapp" ], "template_keys": { "inapp": "inapp.event" }, "conditions": null, "cooldown_seconds": 0, "delay_seconds": 0, "cancel_on": [] }, { "trigger_id": "rust.player.unbanned", "audience": "staff", "channels": [ "inapp" ], "template_keys": { "inapp": "inapp.event" }, "conditions": null, "cooldown_seconds": 0, "delay_seconds": 0, "cancel_on": [] }, { "trigger_id": "rust.login.denied", "audience": "staff", "channels": [ "inapp" ], "template_keys": { "inapp": "inapp.event" }, "conditions": null, "cooldown_seconds": 3600, "delay_seconds": 0, "cancel_on": [] } ] } ], "templates": [ { "key": "rust.base.destroyed", "channel": "email", "triggerId": "rust.base.destroyed", "seedVersion": 1 }, { "key": "rust.base.destroyed-inapp", "channel": "inapp", "triggerId": "rust.base.destroyed", "seedVersion": 1 }, { "key": "rust.wipe.started", "channel": "email", "triggerId": "rust.wipe.started", "seedVersion": 1 }, { "key": "rust.wipe.started-inapp", "channel": "inapp", "triggerId": "rust.wipe.started", "seedVersion": 1 } ] }