first: run facets/endpoints to determine the new facet tree and any
actions (messages, spawns)
second: use new facet tree to determine assertions and subscriptions
This makes sure that all field updates are visible to
assertions/subscriptions.
Without this, if I edit, say, post-entry.html, then the actual rendered
post items disappear, because the UI protocol isn't sufficient to allow
replacement of a parent location with survival of a child. I am not sure
if this is a "fix" or a "workaround": it's workaroundish in that in
principle a child fragment could monitor its parent fragment and rebuild
itself when it detects a change. I suspect revision to the UI protocols
is indicated.
Actors in the upside down may communicate with each other, but not the outside
world. However, the outside world can see what actors in the upside-down are
saying. The intention is to use this facility for testing.
[1] (http://strangerthings.wikia.com/wiki/Upside_Down).
A recent change to Racket must have changed the way `for` expands,
because now in conjunction with `local-expand`, we see *effectively* a
`(begin (values) (void))`. This isn't a problem usually, but in
`#lang syndicate`'s `module-begin` context, we split apart `begin`s
and examine their constituents, leading to examination of something
that will ultimately yield 0 values.
The change accepts either 0 or 1 values when collecting actions for
the module's main boot actor to execute. More than 1 value yielded by
such an expression is still considered an error. Currently, it gives
unhelpful error location information; a future refinement might be to
make the error reporting for this (rare) situation more helpful.