pub enum EmitError {
Unsupported {
form: &'static str,
},
MemoryIdAllocation {
name: String,
cause: BindError,
},
SemanticSupersessionConflict {
s: SymbolId,
p: SymbolId,
valid_at: ClockTime,
existing: SymbolId,
},
InferentialSupersessionConflict {
s: SymbolId,
p: SymbolId,
valid_at: ClockTime,
existing: SymbolId,
},
SupersessionDag(DagError),
ProceduralSupersessionConflict {
rule_id: SymbolId,
existing: SymbolId,
},
}Expand description
Errors produced by the Emit stage. An EmitError always means an
invariant should have been caught earlier or the form is not yet
supported at this milestone.
Variants§
Unsupported
A form shape is not yet wired to a canonical record. See the module-level scope notes for which forms emit records in this milestone.
MemoryIdAllocation
Allocating the synthesized __mem_{n} symbol failed. The only
realistic cause is a name collision with an agent-emitted symbol
that used the reserved __mem_ prefix, which would itself be a
prior bug; preserved as a typed variant for diagnosability.
SemanticSupersessionConflict
Two Semantic writes land at the same (s, p) with identical
valid_at. Per temporal-model.md § 5.1 two memories cannot
both be authoritative at the same conflict key and identical
validity start under the single-writer invariant — surface as
a deterministic emit-time error so the agent can correct the
valid_at or choose a different (s, p).
Fields
InferentialSupersessionConflict
Two Inferential writes land at the same (s, p) with identical
valid_at. Per temporal-model.md § 5.4 Inferential
supersession mirrors Semantic § 5.1 — equal valid_at against
the same (s, p) is a deterministic write conflict the agent
must resolve by choosing a distinct valid_at or re-keying.
Fields
SupersessionDag(DagError)
An auto-supersession edge failed the DAG’s acyclicity check. Cannot happen from auto-supersession alone (new memories have fresh IDs that cannot appear as ancestors), but the DAG’s contract surfaces any violation rather than silently accepting.
ProceduralSupersessionConflict
Two Procedural writes in the same batch land on overlapping
supersession keys (same rule_id or same (trigger, scope)).
They would share committed_at per § 9.2 monotonic-batch
semantics, producing a zero-duration Supersedes edge. Per the
Semantic analog at § 5.1 this is a deterministic write
conflict rather than a silent accept — the agent should split
the batch or choose distinct keys.
Trait Implementations§
Source§impl Error for EmitError
impl Error for EmitError
Source§fn source(&self) -> Option<&(dyn Error + 'static)>
fn source(&self) -> Option<&(dyn Error + 'static)>
1.0.0 · Source§fn description(&self) -> &str
fn description(&self) -> &str
use the Display impl or to_string()