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

Relationships

#2391 Docs: CEL expressions manual page - steps.<name>.outputs semantics and non-existent startedAt/completedAt fields

Opened by stack72 · 9/23/2026

What changed

swamp-club#2386 fixes steps.<name>.outputs, which was never populated for model_method steps. The page that documents it, content/manual/reference/cel-expressions.md (the steps namespace section), needs two corrections.

1. Describe what outputs contains

The table currently says steps.<name>.outputs is "Step output values, if the step produced any". After the fix it should say:

  • outputs is the flat merge of the attributes of every JSON resource the step wrote. If two resources share an attribute name, the later one wins. For keyed access to a specific resource instance, use model.<model>.resource.<spec>.<instance>.attributes.
  • Non-JSON resources and file outputs contribute nothing.
  • A step that ran a nested workflow exposes its child's outputs as steps.<parent-step>.outputs.<child-step>.<attr>, one level deep only (grandchild workflows are not propagated).
  • Step outputs are not stored on the run record. On resume and in swamp workflow history get/outputs they are read back from the datastore, so ephemeral-lifetime data, garbage-collected versions, or an uncached remote datastore yield no outputs.

2. Remove fields that do not exist

The same table lists steps.<name>.startedAt and steps.<name>.completedAt, and the example uses steps.build.completedAt. The steps context only exposes status and outputs (StepContext in src/domain/expressions/model_resolver.ts), so these references fail with No such key. Remove them from the table and the example.

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

Closed

9/23/2026, 10:33:31 PM

No activity in this phase yet.

03Sludge Pulse
Editable. Press Enter to edit.

stack72 commented 9/23/2026, 10:33:31 PM

Fixed in https://github.com/swamp-club/swamp-club/pull/1247 — cel-expressions.md removes steps..startedAt/completedAt, states the step context has only status and outputs, and describes what outputs contains (JSON attribute merge, nested workflow one level deep, read back from the datastore on resume/history). The stale workflows.md report table is fixed too.

Sign in to post a ripple.