Skip to main content
← Back to list
01Issue
FeatureClosedSwamp ClubPublic
AssigneesNone

Relationships

#2506 Docs: explain how swamp treats other services' template syntax in the CEL expressions reference

Opened by skunk-ape · 9/24/2026

The CEL expressions reference (content/manual/reference/cel-expressions.md) never says what swamp does with template syntax that belongs to another service. Two fixes change that behaviour and should be documented together:

  • swamp-club#2424 (swamp PR #2610): {{ ... }} and ${ ... } text (Datadog {{host.name}}, shell ${HOME}) is passed to the method unchanged. model validate warns with Template syntax passed through, and fails only when the text reads as a swamp expression with a dropped dollar or brace ({{self.name}}). Model types can declare a field with .meta({ foreignTemplate: true }) to silence the check.
  • swamp-club#2491 (swamp PR #2613): ${{ ... }} text written for another templating system, such as GitHub Actions ${{ github.sha }}, is passed through unchanged too, including from global arguments, and joins the same warning.

Suggested content, as a new section in the CEL expressions reference (Other services' template syntax), with a pointer from model-definitions.md:

  1. Only ${{ ... }} is swamp's syntax, and even then only when the expression reads a swamp namespace: model, self, inputs, env, vault, data, file, workers, and inside workflows run, steps, workflow, webhook.
  2. What is passed through unchanged: text in other forms, and ${{ ... }} text whose names are not swamp namespaces. What validate reports: the Template syntax passed through warning, and which text still fails (a dropped dollar on a swamp root, a missing model. prefix when the first name is one of the repo's models, text CEL cannot parse).
  3. The ambiguous case: vendor text whose first name collides with a swamp namespace (GitHub ${{ inputs.version }} or ${{ steps.x }}, Datadog {{env.name}}, Argo {{workflow.name}}, Terraform ${[HOST-1]}) is treated as swamp's. Show the workarounds: CEL string concatenation, the foreignTemplate field declaration for extension authors, and note the planned literal() function (swamp-club#2492).
  4. A note that a mistyped namespace (${{ modle.x }}, ${{ input.region }}) is now a warning and passes through at run time, so read validate warnings.

Source of truth: design/enablers/expressions.md in the swamp repo (sections on foreign CEL and Other Services' Template Syntax).

02Bog Flow
✓OPEN○TRIAGED○IN PROGRESS◉CLOSED

Closed

9/28/2026, 11:32:47 PM

No activity in this phase yet.

03Sludge Pulse
Editable. Press Enter to edit.

stack72 commented 9/28/2026, 11:32:46 PM

Documented in https://github.com/swamp-club/swamp-club/pull/1259. New section 'Other Services' Template Syntax' in reference/cel-expressions.md covering what passes through, what fails, colliding names and their workarounds, the foreignTemplate field declaration, and literal() (#2492). model-definitions.md points to it. The validate output shown was captured from a sandbox run. One difference from this issue: ${{ inputs.version }} in a definition with no declared version input passes through without a warning, so the page follows the design doc there.

Sign in to post a ripple.