Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions .changeset/23338-flow-binding-d3-replacement-reads.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
---
'@objectstack/spec': patch
---

fix(spec): the two step-18 flow-binding D3 entries name only the reads a renamed variable has on protocol 18, a text-slot hole and a CEL expression

Clause-②: no

The `replacement` text of two ADR-0087 D3 semantic entries, `flow-binding-name-dollar-refused` and `flow-binding-variable-dollar-name-refused`, listed three ways a flow reads the old variable name, for the author to rename. Protocol 18 has only the first two. The protocol upgrade guide and `spec-changes.json` are generated from these entries, so they now say what the two entries' release notes already say.

| FROM | TO |
|:--|:--|
| Rename every read of the old name with it — a text-slot hole, a CEL expression, a single-brace token in a value position | Rename every read of the old name with it — a text-slot hole, a CEL expression |

No protocol-18 value position reads a flow variable through a single-brace `{…}` token. A value slot takes a CEL value envelope or a literal, and a `{…}` token there is refused. The one `{…}` string a value slot hands on is a CRUD `filter` operand's whole-string query placeholder (`{current_user_id}`, `{today}`): the query engine reads it, and it names no flow variable. A text slot reads `{{ }}` holes.

Text only. No schema, door, conversion or entry id changes, and each entry keeps its `fromVersion`, `toVersion` and every other field.
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ export const entry: SemanticMigration = {
'the same name without the dollar sign, read as a hole over that name: iteratorVariable: \'row\' read as '
+ '{{ row.name }}, idVariable: \'account_id\' read as {{ account_id }}, a declared variable or an assignment '
+ 'target named total read as {{ total }}. Rename every read of the old name with it — a text-slot hole, a '
+ 'CEL expression, a single-brace token in a value position',
+ 'CEL expression',
reason:
'The dollar-named variables are the flow engine\'s own: it binds $record, $runId, $flowName, $flowLabel and '
+ '$error, a flat-graph loop binds $loopItems and $loopIndex, and a resume signal may not write any dollar '
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ export const entry: SemanticMigration = {
'the same name without the dollar sign, read as a hole over that name: errorVariable: \'caught\' read as '
+ '{{ caught.message }}, outputVariable: \'lead\' read as {{ lead.name }}. A try_catch may instead drop '
+ 'errorVariable and read the engine\'s default, {{ $error.message }}. Rename every read of the old name '
+ 'with it — a text-slot hole, a CEL expression, a single-brace token in a value position',
+ 'with it — a text-slot hole, a CEL expression',
reason:
'The dollar-named variables are the flow engine\'s own: it binds $record, $runId, $flowName, $flowLabel and '
+ '$error, a flat-graph loop binds $loopItems and $loopIndex, and a resume signal may not write any dollar '
Expand Down
Loading