pub enum ExecMode {
Dev,
Prod,
}Expand description
The runtime types that appear in bevy-brink’s own public signatures,
re-exported so consumers can name them without depending on brink-runtime:
FlowInstance, Program,
Choice, Step’s
return, RuntimeError’s error,
FallbackHandler for the “no bindings” advance path, the scoped
story-state types a host needs to build a policy and a per-step routing
view (see docs/scoped-flow-state-spec.md): WorldPolicy, Scope,
PolicyError, and ContextView (usually built via
flow_context_view instead of by hand) — and the per-entity durability
types produced/consumed by BrinkGlobals::save_state/load_state and
save_flow_state/load_flow_state (F6.3, see the globals module’s
“Save/load” docs): SaveState and LoadReport.
World is deliberately absent here — it collides with bevy::prelude::World
under a glob import, so it is re-exported under the alias BrinkWorld.
The dev/prod execution mode (NS-A4, docs/stdlib-spec.md §4b, ruled
2026-07-18): the knob that decides WHERE execution stops on an unordered
comparand — never WHAT values are fabricated.
The split is fenced to placement: it exists only where the prod
behavior is defined, total, and fabricates no data. Ordering contexts
qualify (sort/sorted/min/max; A7 adds heap_push): every element
is preserved, the order is deterministic, saves/replay are safe.
Fabrication never qualifies — int("potato"), OOB indexing stay
always-fault in both modes. Effect rows are mode-independent (the checker
doesn’t know modes exist).
Dev(the default — the Rust dev-profile analogy, like debug-build overflow checks): a float NaN comparand in an ordering context is a turn-terminatingRuntimeError::UnorderedComparandfault, surfacing the upstream bug at its first ordering consumption.Prod: the pinned non-fabricating total order applies — ordinary IEEE order with-0 == +0as a tie, NaN greater than everything, NaN-vs-NaN ties (deliberately NOT IEEEtotalOrder, whose-0 < +0would split ordering from==on clean data). Execution keeps moving.
On NaN-free data the modes agree exactly and cohere with </==.
The knob’s home is project config (brink.toml profile) with a
host-API override (ruled 2026-07-19; tooling wires the config side).
This runtime mechanism is the host-API leg: set it via
[Story::set_exec_mode] / [FlowInstance::set_exec_mode]. The mode is
a host/build knob, not story state — it is never embedded in .inkb
(mirroring dialect/types) and never persisted in saves.
Variants§
Dev
Fault on unordered comparands (NaN) in ordering contexts.
Prod
Keep moving: place NaN by the pinned non-fabricating total order.
Trait Implementations§
impl Copy for ExecMode
impl Eq for ExecMode
impl StructuralPartialEq for ExecMode
Auto Trait Implementations§
impl Freeze for ExecMode
impl RefUnwindSafe for ExecMode
impl Send for ExecMode
impl Sync for ExecMode
impl Unpin for ExecMode
impl UnsafeUnpin for ExecMode
impl UnwindSafe for ExecMode
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> ConditionalSend for Twhere
T: Send,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<T> FromTemplate for T
impl<T> FromTemplate for T
Source§impl<T> FromWorld for Twhere
T: Default,
impl<T> FromWorld for Twhere
T: Default,
Source§fn from_world(_world: &mut World) -> T
fn from_world(_world: &mut World) -> T
Creates Self using default().
Source§impl<T, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
impl<T, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
Source§impl<T> Identity for Twhere
T: ?Sized,
impl<T> Identity for Twhere
T: ?Sized,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoResult<T> for T
impl<T> IntoResult<T> for T
Source§fn into_result(self) -> Result<T, RunSystemError>
fn into_result(self) -> Result<T, RunSystemError>
impl<T> Settings for T
Source§impl<T> Template for T
impl<T> Template for T
Source§fn build_template(
&self,
_context: &mut TemplateContext<'_, '_>,
) -> Result<<T as Template>::Output, BevyError>
fn build_template( &self, _context: &mut TemplateContext<'_, '_>, ) -> Result<<T as Template>::Output, BevyError>
entity context to produce a Template::Output.Source§fn clone_template(&self) -> T
fn clone_template(&self) -> T
Clone.