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

Relationships

#2288 data.latest() exposes no path/filePath key for file-kind data — forces deprecated model.<name>.file.<spec>.<instance>.path

Opened by vcjdeboer · 9/18/2026· Shipped 9/23/2026

Description

data.latest("model", "dataName") on file-kind data exposes .content, .size, .name, .version, and .id, but has no key for the filesystem path (.path, .filePath, .contentPath — all throw No such key).

The only way to get a file path in a workflow CEL expression is the deprecated model.<name>.file.<spec>.<instance>.path pattern, which still works but is documented as deprecated.

Steps to Reproduce

  1. Have a model with file-kind data (e.g. r-lab with a CSV table output)
  2. In a workflow step expression, use: data.latest("r-lab", "table").path
  3. Observe: No such key: path
  4. Try .filePath, .contentPath — same error
  5. The deprecated form model.r-lab.file.table.table.path works and returns the correct filesystem path

Expected Behavior

data.latest("model", "dataName") should expose a .path (or .filePath) key for file-kind data, giving the filesystem path to the stored file — matching the capability of the deprecated model.<name>.file.<spec>.<instance>.path pattern.

Environment

  • swamp 20260918.181015.0
  • macOS Darwin 25.2.0
  • Filesystem datastore

Impact

Any workflow that needs to pass a file path to a downstream step (e.g. session-execute's run method needs filledPath) must use the deprecated pattern. This blocks migration to data.latest() for file-kind data in workflows.

02Bog Flow
✓OPEN✓TRIAGED✓IN PROGRESS✓SHIPPEDTRIAGE+ 10 MOREREVIEW+ 11 MOREPR_MERGED+ 2 MORESESSION_SUMMARIZED

Shipped

9/23/2026, 10:44:06 PM

Click a lifecycle step above to view its details.

03Sludge Pulse
stack72 assigned stack729/22/2026, 11:21:55 PM
Editable. Press Enter to edit.

stack72 commented 9/23/2026, 10:44:12 PM

Thanks @vcjdeboer for reporting this! We shipped: Add a path field to the DataRecord read model and populate it for records returned by the CEL data.* functions, so they fully replace the deprecated model..file...path. path is the local filesystem path of the version's raw content, computed through one hardened helper and empty for foreign-namespace, ephemeral or locally absent content. It is opt-in per query (DataQueryOptions.includeContentPath, default false) so it never reaches the serve API, remote workers, swamp data query or extension readModelData, including via select projections. data.latest and data.version hydrate a missing raw file on lazy-hydration datastores before returning; list lookups only existence-check. Mirror the field as optional in packages/testing, add unit and integration tests, and update design docs and skill references.. The fix has been merged and a release is on its way. We appreciate your contribution to swamp.

Sign in to post a ripple.