variables: on the entry agent file; substitution applies to imported content only ({{ $name }} tokens in fragments and templates), never to the declaring file’s own body.
- Declare
repoFullNameandgithubConnectionexplicitly, even though GitHub Sync injects both as context variables from the sync binding. Declared values win the merge, so the file applies identically from Sync and in a dry-run — this is the convention every managed-template import in this repo follows. - Use the literal connection name for providers Sync can’t infer. There is no Slack context variable; the house convention is a connection literally named
slack. - Names are
[A-Za-z_][A-Za-z0-9_]*; values are strings (numbers and booleans are coerced). With any variables in scope, every{{ $name }}in imported content must resolve or the compile fails naming the variable and the available names — there are no silent blanks in this dialect. - Don’t confuse the dialects.
{{ $name }}resolves at apply time;{{message.text}}resolves at runtime against the event. The$prefix is the discriminator, and no escaping is ever needed.