A node's actions_runtime_token is only valid once the forge has heard
which node and fence hold the job it names, but that binding only
existed through the periodic projection sweep - up to 250ms behind the
assignment that already carries the token. A job's first real step
(uploading an artifact) can easily run before the sweep catches up,
so the forge rejects it as unauthorized.
Dispatch now pushes that one run's projection synchronously, right
before minting the token, closing the gap for the common case. The
push is best-effort and does not block dispatch if the forge is
unreachable; the periodic sweep still covers everything after.
Keeps session.rs and dispatch.rs under the workspace's 250-line limit
after adding the synchronous projection push, by moving the pure
wire-message construction (assignment_body, wire_conclusion) into its
own module and the NodeSessionServer Clone impl next to its
constructors.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Promotes the dispatch-time projection fix (assignment is projected before the token that depends on it is minted) to main.