pub struct RevalidateSlot {
pub routes: Vec<String>,
pub mirror_key_env: Option<String>,
pub publish_config: Option<PathBuf>,
pub feeds: Vec<String>,
pub feed_interval_secs: Option<u64>,
pub feed_bins: BTreeMap<String, PathBuf>,
pub feed_runtime: Option<String>,
}Expand description
Parsed [providers.bundle.revalidate] sub-slot — declares the almanac
revalidate receiver to fork alongside the static bundle server (R330-F12).
[providers.bundle.revalidate]
routes = ["/releases"] # allowlist (empty = all routes)
mirror_key_env = "YAH_MARKETING_MIRROR_KEY" # env var holding the bearer
publish_config = "mesofact.config.toml" # default
feeds = ["releases"] # .yah/almanac/<name>.toml to keep fresh
feed_interval_secs = 300 # default
feed_runtime = "almanac-feed/0.8.22" # vanilla: node resolves the fetcher
# …or, for a self-contained bundle, stage it in and name the built paths:
# feed_bins = { x86_64-unknown-linux-musl = "target/…/almanac-feed" }Fields§
§routes: Vec<String>Routes the receiver accepts pokes for (allowlist). Empty → all routes in the workload manifest.
Enforced on the node since R752-B7: kamaji renders this list as one
--allow-route per entry on the receiver’s argv, mesofact serve
refuses an explicit poke outside it (403) and narrows a whole-site poke
to it. Before that it was parsed here, shipped over the wire, and read
by nobody — declaring it bought exactly nothing. Scoping only: who may poke is mirror_key_env, and the two are independent.
mirror_key_env: Option<String>Env var name holding the tenant bearer secret. Deploy resolves it
and sets MESOFACT_MIRROR_KEY on the receiver process.
None → open receiver (no bearer check).
publish_config: Option<PathBuf>Path to mesofact.config.toml with the [publish] block, relative
to the workload directory. None → default "mesofact.config.toml".
feeds: Vec<String>Almanac feed names (.yah/almanac/<name>.toml) the on-node fetch tier
keeps fresh (R330-F31). Empty → no fetcher, and the receiver re-renders
whatever data the bundle was built with.
feed_interval_secs: Option<u64>Seconds between feed-fetch ticks. None → the spec default.
feed_bins: BTreeMap<String, PathBuf>Per-triple path to the almanac-feed binary staged into the bundle as a
sidecar. The self-contained shape’s answer to “how does the fetcher
reach the node”.
Mutually exclusive with feed_runtime, for the
same reason serve_bins and serve_build are: the mirror declares
which shape it is, and a use-whichever-exists fallback would make the
deployed binary a function of the syncing machine’s disk.
feed_runtime: Option<String>Runtime ref the fetcher resolves from the node’s shared runtime-asset
cache — feed_runtime = "almanac-feed/0.8.22" (R746-T3).
This is the vanilla shape’s answer, and it is what makes a vanilla
bundle with a feed tier possible at all: feed_bins is a path someone
must have cross-built, so a bundle that carries no serve binary but
still needs a sidecar path has only moved the toolchain requirement,
not removed it.
Implementations§
Source§impl RevalidateSlot
impl RevalidateSlot
Sourcepub fn to_workload_payload(
&self,
env: BTreeMap<String, String>,
feeds: Vec<AlmanacFeed>,
feed_project_prefix: Option<String>,
secrets: Vec<SecretMount>,
) -> MesofactRevalidateReceiver
pub fn to_workload_payload( &self, env: BTreeMap<String, String>, feeds: Vec<AlmanacFeed>, feed_project_prefix: Option<String>, secrets: Vec<SecretMount>, ) -> MesofactRevalidateReceiver
Build the MesofactRevalidateReceiver payload for the workload spec,
given the env vars resolved at deploy time and the feed definitions read
from the camp’s .yah/almanac/ tree.
Feed definitions travel by value: reading them is the deploy side’s job (it is the only participant that has the camp checkout), and the node gets a self-contained payload.
Trait Implementations§
Source§impl Clone for RevalidateSlot
impl Clone for RevalidateSlot
Source§fn clone(&self) -> RevalidateSlot
fn clone(&self) -> RevalidateSlot
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for RevalidateSlot
impl Debug for RevalidateSlot
impl Eq for RevalidateSlot
Source§impl PartialEq for RevalidateSlot
impl PartialEq for RevalidateSlot
impl StructuralPartialEq for RevalidateSlot
Auto Trait Implementations§
impl Freeze for RevalidateSlot
impl RefUnwindSafe for RevalidateSlot
impl Send for RevalidateSlot
impl Sync for RevalidateSlot
impl Unpin for RevalidateSlot
impl UnsafeUnpin for RevalidateSlot
impl UnwindSafe for RevalidateSlot
Blanket Implementations§
impl<T> Allocation for T
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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>. Box<dyn Any> can
then be further downcast into Box<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>. Rc<Any> 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> 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<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
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<K, Q> Equivalent<Q> for K
impl<K, Q> Equivalent<Q> for K
Source§fn equivalent(&self, key: &Q) -> bool
fn equivalent(&self, key: &Q) -> bool
key and return true if they are equal.impl<T> ErasedDestructor for Twhere
T: 'static,
impl<T> Fruit for T
impl<A, B, T> HttpServerConnExec<A, B> for Twhere
B: Body,
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> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more