Skip to main content
← Back to list
01Issue
BugIn ProgressSwamp CLIPublic
Assigneeszack

Relationships

#3806 When the vault behind a stored sensitive-field reference cannot be read, swamp reports 'Refusing to evaluate expression … arrived as data content' instead of the vault error

Opened by dmc · 10/23/2026

Description

When the vault that holds a stored sensitive-field value cannot be read, swamp does not report the vault failure. It reports that the stored ${{ vault.get(...) }} reference is untrusted text ("Refusing to evaluate expression … arrived as data content") and then fails with "Unresolved expression". The real cause is not logged, even at --log-level debug.

Steps to reproduce

swamp 20261022.161828.0-sha.3cef43ef, macOS (Apple silicon).

  1. A behavior with sensitive outputs stores them in a @swamp/1password vault. Here @keeb/proxmox/node auth (2026.07.18.1) with defaultVault: infra, so its data holds ticket: ${{ vault.get('infra', 'keeb-proxmox-node-…-auth-node-node-ticket') }} (tagged _swamp.sensitiveFields).
  2. Another behavior reads it in its global arguments, as written in the definition: ticket: ${{ data.latest("proxmox-node", "node").attributes.ticket }} (@keeb/proxmox/vm).
  3. Control: with op working, swamp behavior run swamp-serve-vm getConfig --input vmName=swamp-serve succeeds.
  4. Make the vault unreadable and run the same method:
    • remove op from PATH (it lives in /opt/homebrew/bin), or
    • let the 1Password desktop-app approval time out (the original incident).

Actual

[WRN] swamp·expressions: Refusing to evaluate expression at "globalArguments.ticket": it was not written in the definition or workflow source, so it arrived as data content. Left as literal text. Raw: "${{ vault.get('infra', 'keeb-proxmox-node-…-ticket') }}"
[WRN] swamp·expressions: Refusing to evaluate expression at "globalArguments.csrfToken": …
Error: Unresolved expression in globalArguments.ticket (contains a vault.get() or env reference that was not resolved — expression syntax arriving as data content is left as literal text and never evaluated; …)

With --log-level debug there is still no line about the infra vault, op, or the read failure.

Expected

The error names the failed vault read: the vault (infra), the key, and the provider's error (for example op not found, or 1Password authentication failed … authorization timeout). The "arrived as data content" warning should not fire for a reference swamp itself wrote as a sensitive-field value when the real problem is that the vault could not be read.

Impact

The message points at expression trust, so the real cause is hidden. We spent time on a wrong hypothesis (that references written by workflow steps were refused), and only isolated it by removing op from PATH.

Related: Lab #3805 (why the reference pointed at a 1Password vault in the first place).

02Bog Flow
✓OPEN✓TRIAGED◉IN PROGRESS○SHIPPED+ 1 MOREASSIGNED+ 5 MOREREVIEW+ 3 MOREVERIFICATION_STARTED

In Progress

10/23/2026, 12:51:41 AM

Click a lifecycle step above to view its details.

03Sludge Pulse
zack assigned zack10/23/2026, 12:40:04 AM

Sign in to post a ripple.