Skip to main content
← Back to list
01Issue
BugShippedSwamp CLIPublic
Assigneesstack72

Relationships

#2397 Failing CEL expression in a method argument is silently passed through as literal text

Opened by stack72 · 9/23/2026· Shipped 9/23/2026

Description

When a CEL expression in a model method argument throws at evaluation time (for example a missing key such as data.latest('producer', 'log').path), the error is swallowed and the raw ${{ ... }} text is passed through to the method unchanged. For command/shell that means the literal expression reaches /bin/sh, which fails with an unrelated bad substitution error and no mention of the real CEL failure.

Found while triaging swamp-club#2288.

Steps to Reproduce

  1. command/shell model producer with run: echo hello, run it once.
  2. command/shell model consumer with method argument run: cat ${{ data.latest('producer', 'log').nope }}.
  3. swamp model method run consumer execute
  4. Output: /bin/sh: ${{ data.latest('producer', 'log').nope }}: bad substitution then Command exited with code 1. No No such key: nope error is surfaced.

Cause

ExpressionEvaluationService.evaluateDefinition (src/domain/expressions/expression_evaluation_service.ts, the try/catch around celEvaluator.evaluateAsync) catches every evaluation error and leaves the expression unresolved. The comment says a Proxy on globalArgs surfaces a clear error if the value is needed, but method arguments have no such guard, so the unresolved text is used verbatim.

Expected Behavior

An expression that fails for a reason other than an absent input (missing key on a resolved record, type error, etc.) should fail the method with the CEL error message, the same as it does in other evaluation paths.

Environment

  • swamp 20260923.112015.0
  • macOS
02Bog Flow
✓OPEN✓TRIAGED✓IN PROGRESS✓SHIPPED+ 1 MOREASSIGNED+ 5 MOREREVIEW+ 18 MOREPR_MERGED+ 2 MORESESSION_SUMMARIZED

Shipped

9/23/2026, 11:15:09 PM

Click a lifecycle step above to view its details.

03Sludge Pulse
stack72 assigned stack729/23/2026, 8:59:39 PM

Sign in to post a ripple.