You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit a7d0cb1
Browse filesBrowse the repository at this point in the historyBrowse files
docs(service-automation): README states the value-slot envelope and current_user
The published README's Expressions section taught `{$User.Id}` /
`{$User.Email}` and single-brace field values as value bindings, all refused
in a value slot. It now states the dialect as this change leaves it: a value
slot computes with the CEL value envelope and reads a plain string as its
literal text; `current_user` is the run's user, `null` with no user;
`{$User.*}` is refused with its remedy; the date macros are still read until
CEL can write them. The changeset gains the lint patch and both kit lines.
Claude-Session: https://claude.ai/code/session_01VZqqwTj2wsihZEbfT6yyYN
Co-authored-by: Claude <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: .changeset/19939-flow-value-slot-run-user-refused.md
+3Lines changed: 3 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,6 +2,7 @@
2
2
'@objectstack/spec': major
3
3
'@objectstack/service-automation': major
4
4
'@objectstack/cli': patch
5
+
'@objectstack/lint': patch
5
6
---
6
7
7
8
A flow VALUE slot now refuses the run-user template token `{$User.<path>}` as well, and every CEL expression in a flow sees **`current_user`**, the run's user. `{$User.Id}` in a `create_record` / `update_record``fields` value or an `assignment` value is refused at `objectstack validate`, at `registerFlow` and by the executor, naming `current_user.id` and, for a flow that can run without a user, its guard; every other `$User` path is refused saying it never resolved.
@@ -40,3 +41,5 @@ Clause-②: no (narrowing)
40
41
-**The refusal.**`valueSlotTemplateRefusals` / `flowNodeValueTemplateRefusals` (`@objectstack/spec/automation`); the text-slot judge's run-user remedy (`textSlotTemplateRefusal`) now computes the id with the CEL envelope.
41
42
-**The ledger.** The step-18 D3 entries `flow-value-slot-template-dialect-refused` (amended to refuse the run-user paths), `flow-text-slot-single-brace-refused` and `flow-text-slot-unbound-dollar-root-refused` (their run-user remedy). No key is removed, so there is no tombstone, and there is no D2 conversion.
42
43
-**`@objectstack/cli`.**`os explain flow`'s example writes `current_user.id` and gates on `current_user != null`.
44
+
-**`@objectstack/lint`.**`flow-bare-dollar-reference`'s hint for a bare `$name.path` in a value slot names the CEL envelope the value-slot refusal writes for it — `current_user.id` and its guard for `$User.Id`, the variable the reference names for any other — where it named `{source.id}` and `{$User.Id}`, both refused there. A text slot's hint keeps the `{{ }}` hole, and every other position keeps the single brace.
45
+
-**`@objectstack/service-automation`'s README.** Its *Expressions* section states the value-slot envelope, `current_user`, and the date macros still read until CEL can write them.
Copy file name to clipboardExpand all lines: packages/services/service-automation/README.md
+22-7Lines changed: 22 additions & 7 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -180,24 +180,39 @@ This README deliberately does not keep a second copy of that per-node reference.
180
180
181
181
## Expressions
182
182
183
-
A flow mixes **two dialects**, and the rule is short: **every condition is CEL;
184
-
braces are for values.**
183
+
A flow's expressions follow its positions: **a condition is bare CEL, a value is
184
+
a CEL value envelope, and text is a `{{ }}` template.**
185
185
186
186
| Where | Dialect | Write it like |
187
187
|:---|:---|:---|
188
188
| Start-node `condition`| CEL — bare, no braces |`record.amount > 500`|
189
189
| Edge `condition`| CEL — bare, no braces |`record.status == 'open'`|
190
190
| Decision `conditions[].expression`| CEL — bare, no braces |`order_amount > 10000`|
191
-
|Field values in`create_record` / `update_record`| Interpolation — braces required |`'Follow up on {record.name}'`, `'{TODAY() + 7}'`|
191
+
|Value slots —`create_record` / `update_record``fields`, `assignment` values | CEL value envelope; a plain string is the literal text it spells |`{ dialect: 'cel', source: "'Follow up on ' + record.name" }`, `'open'`|
0 commit comments