SideEffect is unmentioned: the accepted cel-go replay exposure has a cheaper mitigation than an activity, and no record weighs it
Nobody has claimed this yet.
- Dominant language
- Go
- Stars
- 9
- Forks
- 0
- Avg merge
- 3h 3m
- Merged PRs (30d)
- 509
Description
WorkflowVars' doc comment (pkg/flowstate/v1/engine/activities.go:15-54, at a790076) states plainly that CEL evaluated inline in workflow code — step conditions, items:, step vars:, and most task inputs — is exposed to cel-go implementation drift across replay, that this exposure is accepted rather than avoided, and that routing each evaluation through an activity "would be a round trip per condition." workflow.SideEffect is the substrate's designated third option: it records each result as a single history marker, with no round trip and no worker hop. The phrase appears nowhere in this repository (git grep finds zero hits), so the option was never weighed in writing.
The decision is genuinely not obvious in either direction, which is why it should be recorded rather than left implicit:
- A marker per condition reintroduces the history cost the
cel:task was retired for; a 200-item loop would emit 200 markers. - Decisively, a marker does not survive Continue-As-New, so SideEffect cannot solve the one case that motivated moving workflow
vars:into an activity in the first place. - On the other side, for the conditions that never cross a Continue-As-New boundary, a marker is strictly cheaper than the accepted drift exposure's remaining alternative, and Worker Versioning (the current mitigation) pins the interpreter rather than the evaluation.
Desired outcome: a recorded answer either way, in the same argue-it-and-write-it-down shape as #778's local-activity question — a row or refusal note in docs/ARCHITECTURE.md's "Leaning into Temporal" table. If the answer is no, the reason belongs in activities.go's doc comment beside the exposure it declines to fix, so the next reader finds a decision rather than an absence.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with docs/ARCHITECTURE.md’s “Leaning into Temporal” table, #778’s local-activity decision, and the WorkflowVars comment in pkg/flowstate/v1/engine/activities.go:15-54. Compare the stated SideEffect trade-offs, including history cost and Continue-As-New, without assuming a preferred answer. Done means recording an explicit decision in the table, and if declining the option, adding the rationale beside the exposure in activities.go.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- go
- Domain
- backend, documentation
- Issue type
- Documentation
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100