Skip to content

A parallel scope completes whoever accounts for its last iteration - #136

Merged
noha merged 1 commit into
mainfrom
loop-completes
Sep 10, 2026
Merged

noha merged 1 commit into
mainfrom
loop-completes

Conversation

@noha

@noha noha commented Sep 10, 2026

Copy link
Copy Markdown
Contributor

The loop is over once every iteration is accounted for - arrived at the scope join, filtered by a condition, or taken back (#atEnd). Only the scope join's own step used to close the scope; a withdrawal, a filtered last iteration or an empty input popped the executor and left the flow behind the loop unrun while the instance read #done.

FBParallelExecutor>>completeScope is now the one way the scope closes: from the join's step, from #continue after a withdrawal or a filtered iteration, and from the fork's behavior for an empty input. The scope join's activation carries one value per iteration - nil where none arrived - and goes on behind the join on a token of the fork's strand, in the fork's scope. The loop completes with nothing as well: an empty input, every iteration filtered or every iteration taken back leave the flow behind the loop to go on with an empty result - the loop is one activity of the flow, not a join of independent strands. A body whose every path ends at an end event has no join to go on from; the scope closes and the fork's strand is over, as before.

The loop is over once every iteration is accounted for - arrived at
the scope join, filtered by a condition, or taken back (#atEnd). Only
the scope join's own step used to close the scope; a withdrawal, a
filtered last iteration or an empty input popped the executor and
left the flow behind the loop unrun while the instance read #done.

FBParallelExecutor>>completeScope is now the one way the scope closes:
from the join's step, from #continue after a withdrawal or a filtered
iteration, and from the fork's behavior for an empty input. The scope
join's activation carries one value per iteration - nil where none
arrived - and goes on behind the join on a token of the fork's strand,
in the fork's scope. The loop completes with nothing as well: an empty
input, every iteration filtered or every iteration taken back leave
the flow behind the loop to go on with an empty result - the loop is
one activity of the flow, not a join of independent strands. A body
whose every path ends at an end event has no join to go on from; the
scope closes and the fork's strand is over, as before.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@noha
noha merged commit 7e2cfb8 into main Sep 10, 2026
4 checks passed
@noha
noha deleted the loop-completes branch September 10, 2026 12:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant