pub struct MemCreateParams {
pub name: String,
pub location: PathBuf,
pub schema_ref: SchemaRef,
pub vcs: Option<VcsConfig>,
pub note: Option<String>,
pub operator_mode: bool,
pub recovery: Option<RecoveryAction>,
pub write_guidance: HashMap<String, Value>,
pub storage: Option<StorageKind>,
pub actor: Actor,
pub client: Option<ClientId>,
}Expand description
Parameters for create_mem. Mirrors the memstead_mem_create
MCP tool’s wire shape 1:1.
Hierarchical paths are first-class mem identifiers — there is no
separate path field; name carries the full path
(e.g. "team/sub-mem") directly, validated via
memstead_base::entity::id::validate_mem_name_grammar. The
branch ref composes as refs/heads/<name> and the __MEMSTEAD
config blob as __MEMSTEAD:mems/<name>/config.json with no extra
composition step.
Fields§
§name: StringName of the new mem — the full hierarchical identifier
(e.g. "sub-mem" for flat layouts or "team/sub-mem"
for hierarchical layouts). Must be unique across every
visible mem in the current snapshot, match the basename of
location (folder backend identity invariant on the
trailing path segment), and satisfy the mem-name grammar
([a-z0-9-]+(/[a-z0-9-]+)*).
location: PathBufTarget location. Absolute or workspace-relative. Canonicalized inside the orchestrator before the allowlist check.
schema_ref: SchemaRefSchema pin for the new mem (name@x.y.z).
vcs: Option<VcsConfig>Optional vcs config override (signing keys, identity hints).
Persisted into the per-mem config blob alongside schema
and name. Most callers pass None — defaults come from
the workspace’s .memstead/workspace.toml. Mirrors full’s
memstead_git_branch::MemCreateParams.vcs.
note: Option<String>Agent-authored provenance note (≤NOTE_MAX_LEN chars).
operator_mode: boolProcess-scoped operator-mode posture. When true, the
orchestrator skips the [[mem_management.create]] allowlist
gate and the matched-rule schema gate it derives — every other
check (input validation, schema canonicalisation, basename
invariant, name collision, backend instantiation) runs
identically. Set only by transports that established operator
intent at boot (memstead-mcp --operator-mode); never accepted as
a wire-shape input from agents. Defaults to false —
agent-mode.
recovery: Option<RecoveryAction>Explicit recovery action for
the case where the storage already carries residue for the
composed branch path. None is the default — the engine
then routes by tombstone presence: residue with an
unregistered_at tombstone (deliberate operator state from
memstead mem unregister) defaults to [RecoveryAction::Reattach],
residue without a tombstone refuses with
MEM_STORAGE_RESIDUE_DETECTED. Setting an explicit value
overrides the tombstone-driven default. A bare mem init
against a name with no residue at all ignores this field
(the happy path is unchanged).
write_guidance: HashMap<String, Value>Optional opaque per-instance writing guidance, persisted
verbatim into the new mem’s config (writeGuidance) in the
seed commit. The engine never inspects the map’s contents
(schema-strictness D8 — writeGuidance is client-owned
vocabulary); a client that read a schema package’s
mem-template.json fills the instance keys and passes them
here. Empty map (the default) seeds no guidance, identical to
pre-parameter behaviour.
storage: Option<StorageKind>Explicit storage-backend override. None (default) keeps the
workspace-shape heuristic — git-branch when
<workspace_root>/mem-repo/.git/ exists, folder otherwise.
Some(StorageKind::Folder) forces a folder mount even in a
mem-repo workspace: the mem’s markdown files live at
location, visible in the outer tree.
Some(StorageKind::GitBranch) in a workspace WITHOUT
mem-repo/.git/ refuses with EngineError::InvalidInput —
there is no gitdir to host the branch.
actor: ActorCaller category for the seed commit’s provenance trailer.
Transports pass their own: MCP Actor::Agent, the CLI
Actor::Cli, application embedders (UniFFI, HTTP) Actor::App.
Pre-parameter behaviour hardcoded Agent for every transport —
the macOS app’s mem creations were misattributed as agent
writes.
client: Option<ClientId>Client identity paired with actor — renders name@version
in the seed commit’s Client: trailer and derives its author,
exactly as entity mutations do.
Trait Implementations§
Source§impl Clone for MemCreateParams
impl Clone for MemCreateParams
Source§fn clone(&self) -> MemCreateParams
fn clone(&self) -> MemCreateParams
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl Freeze for MemCreateParams
impl RefUnwindSafe for MemCreateParams
impl Send for MemCreateParams
impl Sync for MemCreateParams
impl Unpin for MemCreateParams
impl UnsafeUnpin for MemCreateParams
impl UnwindSafe for MemCreateParams
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,
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
impl<T> Fruit for T
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