# Mímir-Vörðr System Architecture

## The Warden of the Well — Complete Technical Reference
### Ørlög Architecture / Viking Girlfriend Skill for OpenClaw
—
> *”Odin gave an eye to drink from Mímir’s Well and received the wisdom of all worlds.
> The Warden drinks for Sigrid — extracting truth from ground knowledge
> so she never has to guess when she can know.”*
—
## 1. What Is Mímir-Vörðr?
**Mímir-Vörðr** (pronounced *MEE-mir VOR-dur*) is the intelligence accuracy layer of
the Ørlög Architecture. It is a **Multi-Domain RAG System with Integrated Hallucination
Verification** — a system that treats Sigrid’s internal knowledge database as the
authoritative **Ground Truth** and actively prevents language model hallucinations from
reaching the user.
The core philosophy: **smart memory utilisation over raw horse-power.**
Instead of deploying a larger model to handle more knowledge, Mímir-Vörðr:
1. Retrieves the specific facts needed for each query from a curated knowledge base
2. Injects those facts as grounded context into the model’s prompt
3. Generates a response using a four-step verification loop
4. Scores the response’s faithfulness to the source material
5. Retries or blocks any response that falls below the faithfulness threshold
The result is a small local model (llama3 8B) that answers with the accuracy of a much
larger model — because it is not guessing, it is reading.
—
## 2. Norse Conceptual Framework
The system is named after three Norse mythological concepts that perfectly capture its function:
| Norse Name | Meaning | System Role |
|———–|———|————|
| **Mímisbrunnr** | The Well of Mímir — source of cosmic wisdom beneath Yggdrasil | The knowledge database (ChromaDB + in-memory BM25 index) |
| **Huginn** | Odin’s raven “Thought” — flies out to gather information | The retrieval orchestrator (query → chunks → context) |
| **Vörðr** | A guardian spirit / warden — protective double of a person | The truth guard (claim extraction → NLI → faithfulness scoring) |
Together they form **Mímir-Vörðr** — “The Warden of the Well” — a system that
holds the ground truth and refuses to let falsehood pass.
—
## 3. System Overview — Top-Level Architecture
“`mermaid
graph TB
subgraph User[“User Interaction Layer”]
Q[User Query]
R[Final Response]
end
subgraph MV[“Mímir-Vörðr System”]
subgraph S0[“Stage 0 — Health Monitor (Background)”]
HM[MimirHealthMonitor<br/>60s health checks<br/>auto-reindex on corruption]
end
subgraph S1[“Stage I — Retrieval (Huginn’s Ara)”]
HG[HuginnRetriever<br/>domain detection<br/>federated retrieval]
MW[MimirWell / Mímisbrunnr<br/>ChromaDB + BM25 fallback<br/>57 knowledge files / 25 160 chunks]
MS[MemoryStore<br/>episodic context]
end
subgraph S2[“Stage II — Generation & Verification (CoVe)”]
CP[CovePipeline<br/>4-step Chain-of-Verification]
MR[ModelRouterClient<br/>smart tier routing]
end
subgraph S3[“Stage III — Truth Guard (Vörðr)”]
VD[VordurChecker<br/>claim extraction<br/>NLI faithfulness scoring]
DL[DeadLetterStore<br/>failed verification log]
end
subgraph RES[“Norns Shield — Resilience Infrastructure”]
CB[Circuit Breakers<br/>9 independent instances]
RE[Retry Engines<br/>jittered exponential backoff]
end
end
subgraph Ext[“External Services”]
OL[Ollama llama3 8B<br/>subconscious tier<br/>localhost:11434]
LI[LiteLLM Proxy<br/>conscious / deep / code tiers<br/>localhost:4000]
end
Q –> HG
HG –> MW
HG –> MS
MW –> CP
MS –> CP
CP –> MR
MR –> OL
MR –> LI
CP –> VD
VD –> OL
VD –> DL
VD –>|”score ≥ 0.8 → pass”| R
VD –>|”score < 0.5 → retry”| HG
HM -.->|”monitors”| MW
HM -.->|”monitors”| VD
HM -.->|”monitors”| HG
CB -.->|”protects”| MW
CB -.->|”protects”| VD
RE -.->|”wraps”| MW
RE -.->|”wraps”| VD
“`
—
## 4. The Three-Stage Pipeline — Detailed Flow
### Stage I: Retrieval (Huginn’s Ara)
“`mermaid
flowchart TD
START([User Query arrives]) –> DD{Detect Domain}
DD –>|”Norse keywords detected”| DN[Domain: norse_spirituality<br/>or norse_mythology<br/>or norse_culture]
DD –>|”Code keywords detected”| DC[Domain: coding]
DD –>|”Character/values keywords”| DH[Domain: character]
DD –>|”No clear domain”| DA[Domain: None<br/>global search]
DN –> TRY1
DC –> TRY1
DH –> TRY1
DA –> TRY1
TRY1{ChromaDB<br/>circuit breaker<br/>OPEN?} –>|No — proceed| CH[ChromaDB semantic search<br/>retrieve top-50 by cosine similarity<br/>optional domain metadata filter]
TRY1 –>|Yes — fast fail| BM1[BM25 keyword search<br/>in-memory flat index<br/>Fallback A]
CH –>|Success| RR[Rerank 50 → 3<br/>0.7 × keyword overlap<br/>0.3 × position bonus]
CH –>|Failure — retry × 3| CH2{Retry<br/>exhausted?}
CH2 –>|No| CH
CH2 –>|Yes| BM1
BM1 –> RR2{BM25 has results?}
RR2 –>|Yes| RR
RR2 –>|No| EMPTY[Return empty RetrievalResult<br/>Fallback B — log WARNING]
RR –> EP[Fetch episodic context<br/>MemoryStore.get_context]
EMPTY –> EP
EP –> CTX[Assemble context_string:<br/>GROUND TRUTH GT-1 GT-2 GT-3<br/>+ MEMORY episodic context]
CTX –> DONE([RetrievalResult ready<br/>→ Stage II])
style BM1 fill:#f0b840,color:#000
style EMPTY fill:#e07050,color:#fff
style CH fill:#4080d0,color:#fff
style RR fill:#50a050,color:#fff
“`
### Stage II: Generation & Chain-of-Verification (CoVe)
“`mermaid
flowchart TD
START([RetrievalResult + Query enters]) –> CX{Complexity?}
CX –>|”LOW complexity<br/>(greeting, simple lookup)”| S1_ONLY[Step 1 only:<br/>Generate draft response<br/>→ skip CoVe steps 2-4]
CX –>|”MEDIUM or HIGH complexity”| CB_CHECK
CB_CHECK{CoVe pipeline<br/>circuit breaker open?}
CB_CHECK –>|Yes — bypass| BYPASS[Direct model completion<br/>CoveResult.used_cove = False]
CB_CHECK –>|No — proceed| S1[Step 1: Draft<br/>Generate initial response<br/>from retrieved context]
S1 –> CP1[Write checkpoint:<br/>step_reached = 1]
CP1 –> S2[Step 2: Plan Verification<br/>Generate 3 verification questions<br/>subconscious tier]
S2 –>|Success| CP2[Write checkpoint:<br/>step_reached = 2]
S2 –>|Failure — retry × 2| S2F{Retry<br/>exhausted?}
S2F –>|No| S2
S2F –>|Yes — template fallback| S2T[Use domain template questions:<br/>Fallback A]
S2T –> CP2
CP2 –> S3[Step 3: Execute Questions<br/>Answer each against MimirWell<br/>subconscious tier]
S3 –>|Success| CP3[Write checkpoint:<br/>step_reached = 3]
S3 –>|Failure| S3F[Skip Step 3<br/>qa_pairs = empty<br/>Fallback — log WARNING]
S3F –> S4
CP3 –> S4[Step 4: Revise<br/>Rewrite draft using Q&A findings<br/>chosen routing tier]
S4 –>|Success| FINAL[CoveResult:<br/>final_response = Step 4 output<br/>steps_completed = 4<br/>used_cove = True]
S4 –>|Failure — retry × 2| S4F{Retry<br/>exhausted?}
S4F –>|No| S4
S4F –>|Yes| S4FB[Return Step 1 draft<br/>steps_completed = 3<br/>Fallback — log WARNING]
S1_ONLY –> PASS_THROUGH[CoveResult:<br/>final_response = draft<br/>steps_completed = 1<br/>used_cove = False]
FINAL –> STAGE3([→ Stage III: Vörðr])
PASS_THROUGH –> STAGE3
S4FB –> STAGE3
BYPASS –> STAGE3
style S2T fill:#f0b840,color:#000
style S3F fill:#f0b840,color:#000
style S4FB fill:#f0b840,color:#000
style BYPASS fill:#e07050,color:#fff
style FINAL fill:#50a050,color:#fff
“`
### Stage III: Truth Guard (Vörðr)
“`mermaid
flowchart TD
START([CoveResult response enters]) –> PA{Persona check<br/>pure regex}
PA –>|VIOLATION detected<br/>”I am ChatGPT” etc.| BLOCK[Block response<br/>Return canned persona-safe reply<br/>Log PersonaViolationError]
PA –>|OK| CE[Extract factual claims<br/>subconscious tier]
CE –>|Model returns claim list| VER
CE –>|Model timeout / failure| CES[Fallback: sentence splitter<br/>regex split on . ! ?]
CES –> VER
VER[Verify each claim<br/>against source chunks<br/>max 10 claims]
VER –> JM{Judge model<br/>available?}
JM –>|Ollama OK| OL[Ollama llama3 8B<br/>NLI structured prompt:<br/>ENTAILED / NEUTRAL / CONTRADICTED]
JM –>|Ollama circuit breaker OPEN| CON[Conscious tier fallback<br/>same NLI prompt]
CON –>|Conscious fails| REG[Regex heuristic scorer<br/>keyword overlap scoring<br/>Fallback B]
REG –>|All fail| PT[Pass-through<br/>UNCERTAIN verdict at 0.5<br/>Fallback C]
OL –> SCORE[Compute FaithfulnessScore<br/>ENTAILED=1.0 NEUTRAL=0.5<br/>CONTRADICTED=0.0 UNCERTAIN=0.5<br/>score = mean of all verdicts]
CON –> SCORE
REG –> SCORE
PT –> SCORE
SCORE –> TIER{Score tier?}
TIER –>|”≥ 0.80 HIGH”| PASS[Pass through<br/>attach score to response<br/>log DEBUG]
TIER –>|”0.50-0.79 MARGINAL”| MARG[Pass through<br/>flag marginal in metadata<br/>log WARNING]
TIER –>|”< 0.50 HALLUCINATION”| RETRY{Retry count<br/>< max 2?}
RETRY –>|Yes — retry| REXP[Expand retrieval:<br/>n_initial × 2<br/>→ back to Stage I]
RETRY –>|No — exhausted| DLS[Write to DeadLetterStore<br/>session/dead_letters.jsonl]
DLS –> CANNED[Return canned response:<br/>”The threads of the Well are<br/>unclear to me right now…”]
PASS –> OUT([Final CompletionResponse<br/>faithfulness_score attached<br/>→ memory_store.record_turn])
MARG –> OUT
CANNED –> OUT
style BLOCK fill:#c0392b,color:#fff
style PASS fill:#27ae60,color:#fff
style MARG fill:#f39c12,color:#fff
style CANNED fill:#8e44ad,color:#fff
style DLS fill:#e74c3c,color:#fff
style REXP fill:#2980b9,color:#fff
“`
—
## 5. Component Deep-Dive
### 5.1 MimirWell — Mímisbrunnr (The Knowledge Store)
MimirWell is the foundational layer. Everything else in the system depends on it.
#### Knowledge Hierarchy
“`mermaid
graph TB
subgraph L3[“Level 3 — Axiom (Core Truths)”]
AI[core_identity.md]
SO[SOUL.md]
VA[values.json]
AG[AGENTS.md]
end
subgraph L2[“Level 2 — Cluster (Domain Summaries, Phase 2)”]
C1[Norse Spirituality Summary]
C2[Norse Culture Summary]
C3[Coding Summary]
C4[Character Summary]
C5[Norse Mythology Summary]
C6[Roleplay Summary]
end
subgraph L1[“Level 1 — Raw (Document Chunks, 512 tokens each)”]
subgraph NS[“norse_spirituality (15 114 chunks)”]
NS1[freyjas_aett_grimoire.md]
NS2[tyrs_aett_grimoire.md]
NS3[heimdalls_aett_grimoire.md]
NS4[galdrabok_reconstruction.json]
NS5[voluspa.json]
NS6[trolldom practices…]
NS7[“+ 13 more files”]
end
subgraph NC[“norse_culture (4 502 chunks)”]
NC1[viking_honor.json]
NC2[Viking_Frith.json]
NC3[viking_history…]
NC4[“+ 9 more files”]
end
subgraph NM[“norse_mythology (3 793 chunks)”]
NM1[norse_gods.json]
NM2[Poetic_Edda_Translation.json]
NM3[Norse_Gods_Personality…]
end
subgraph CO[“coding (1 170 chunks)”]
CO1[AI_PYTHON_GUIDES.md]
CO2[ARTIFICIAL_INTELLIGENCE.md]
CO3[“+ 4 more files”]
end
subgraph CH[“character (270 chunks)”]
CH1[emotional_expressions.yaml]
CH2[viking_values.yaml]
end
subgraph RP[“roleplay (311 chunks)”]
RP1[gm_mindset.yaml]
RP2[Viking_bondmaids.json]
RP3[“+ 3 more files”]
end
end
L3 –> L2
L2 –> L1
“`
#### Dual-Path Retrieval Architecture
“`mermaid
flowchart LR
Q([Query]) –> CB{Circuit<br/>breaker<br/>OPEN?}
CB –>|No| CD[ChromaDB<br/>PersistentClient<br/>cosine similarity<br/>all-MiniLM-L6-v2]
CB –>|Yes| BI[In-Memory<br/>BM25 Flat Index<br/>Counter-based TF-IDF]
CD –>|Success| RE[Retry Engine<br/>3 attempts<br/>0.5s base, ×2 backoff]
CD –>|Failure × 3| BI
RE –>|Success| RR[Reranker<br/>0.7 × keyword overlap<br/>0.3 × position bonus<br/>50 → 3 chunks]
BI –> RR
RR –> CTX[Context String<br/>GT-1 GT-2 GT-3 citations]
CTX –> OUT([RetrievalResult])
style CD fill:#4080d0,color:#fff
style BI fill:#f0b840,color:#000
style RR fill:#50a050,color:#fff
“`
#### Chunking Strategy by File Type
“`mermaid
flowchart TD
FILE([Knowledge File]) –> EXT{File Extension}
EXT –>|.md .txt| MD[Split by ## heading<br/>then by 2 048 chars<br/>64-token overlap]
EXT –>|.json| JN{Root type?}
JN –>|dict| JD[Each top-level key = chunk group<br/>merged up to 2 048 chars]
JN –>|list| JL[Each array element = chunk<br/>merged up to 2 048 chars]
EXT –>|.jsonl| JSONL[Line groups up to 2 048 chars<br/>max 200 chunks per file]
EXT –>|.yaml .yml| YML[Each top-level key = chunk<br/>merged up to 2 048 chars]
EXT –>|.csv| CSV[20 rows per chunk<br/>header row repeated in each]
MD –> STORE
JD –> STORE
JL –> STORE
JSONL –> STORE
YML –> STORE
CSV –> STORE
STORE[Store KnowledgeChunk:<br/>chunk_id = uuid4<br/>text = chunk text<br/>source_file = relative path<br/>domain = detected domain<br/>level = 1 raw or 3 axiom<br/>metadata = file_type heading position]
STORE –> CDB[(ChromaDB collection:<br/>mimir_well)]
STORE –> FI[(In-Memory BM25<br/>Flat Index)]
“`
#### Self-Healing Ingest
“`mermaid
stateDiagram-v2
[*] –> CheckLock: ingest_all() called
CheckLock –> LockFound: .mimir_ingest_lock exists
CheckLock –> CheckCount: No lock file
LockFound –> ForceRebuild: Previous ingest interrupted\nforce=True set automatically
CheckCount –> AlreadyPopulated: ChromaDB count > 0\nand force=False
CheckCount –> WriteNewLock: Collection empty or force=True
AlreadyPopulated –> [*]: Return empty IngestReport\n(idempotent — no work needed)
ForceRebuild –> ClearCollection: Drop existing documents
ClearCollection –> WriteNewLock
WriteNewLock –> IngestIdentity: Write .mimir_ingest_lock
IngestIdentity –> IngestKnowledge: Ingest 4 identity files\nlevel=3 axiom chunks
IngestKnowledge –> FileLoop: Iterate knowledge_reference/\n57 files sorted alphabetically
FileLoop –> TryFile: Next file
TryFile –> ChunkFile: Read + chunk file
ChunkFile –> UpsertChunk: Insert into ChromaDB + BM25
UpsertChunk –> FileLoop: Next file
TryFile –> LogError: File fails (encoding/parse)
LogError –> FileLoop: Non-fatal — continue
FileLoop –> ClearLock: All files processed
ClearLock –> UpdateState: Delete .mimir_ingest_lock
UpdateState –> [*]: Return IngestReport\nfiles / chunks / errors / duration
“`
—
### 5.2 VordurChecker — The Truth Guard
VordurChecker is the quality gate. It examines what the model produced, extracts
each factual claim, and verifies each against the retrieved source material.
#### Claim Verification Pipeline
“`mermaid
flowchart TD
RESP([Model Response text]) –> PERSONA{Persona check<br/>regex guard}
PERSONA –>|Violation| ERR([Block — PersonaViolationError])
PERSONA –>|OK| EXTRACT[Extract factual claims<br/>subconscious tier:<br/>”Extract factual claims as a<br/>numbered list. One claim per line.”]
EXTRACT –>|Claim list returned| VERIFY
EXTRACT –>|Model timeout| SENT[Regex sentence splitter<br/>fallback: split on . ! ?]
SENT –> VERIFY
VERIFY[For each claim up to max 10]
VERIFY –> JUDGE{Judge model<br/>available?}
JUDGE –>|Ollama OK<br/>llama3 8B| NLI[“NLI structured prompt:\nSource: {chunk_text}\nClaim: {claim_text}\nAnswer: ENTAILED, NEUTRAL,\nor CONTRADICTED”]
JUDGE –>|Ollama CB open| CON[Conscious tier\nsame NLI prompt]
CON –>|Conscious fails| REG[Regex heuristic:\nkeyword overlap between\nclaim and chunk text]
REG –>|All fail| PT[UNCERTAIN passthrough\nverdict = 0.5]
NLI –> PARSE[Parse first word of response\nuppercase match against\nENTAILED / NEUTRAL / CONTRADICTED\nGarbled → UNCERTAIN]
PARSE –> WEIGHT[Apply weight:\nENTAILED = 1.0\nNEUTRAL = 0.5\nCONTRADICTED = 0.0\nUNCERTAIN = 0.5]
CON –> WEIGHT
REG –> WEIGHT
PT –> WEIGHT
WEIGHT –> NEXT{More claims?}
NEXT –>|Yes| VERIFY
NEXT –>|No| SCORE[score = mean of all claim weights\ncount: entailed neutral contradicted uncertain]
SCORE –> TIER{Faithfulness tier}
TIER –>|”≥ 0.80″| HIGH[“FaithfulnessScore\ntier = high\nneeds_retry = False”]
TIER –>|”0.50 – 0.79″| MARG[“FaithfulnessScore\ntier = marginal\nneeds_retry = False”]
TIER –>|”< 0.50″| HALL[“FaithfulnessScore\ntier = hallucination\nneeds_retry = True”]
style HIGH fill:#27ae60,color:#fff
style MARG fill:#f39c12,color:#fff
style HALL fill:#c0392b,color:#fff
style ERR fill:#c0392b,color:#fff
“`
#### Persona Guard Rules (Regex)
The persona check runs before any model call. It is pure regex — instant, free, unbypassable.
“`mermaid
graph LR
RESP([Response text]) –> R1[“Pattern: I am ChatGPT / Claude / GPT / OpenAI”]
RESP –> R2[“Pattern: I am an AI language model / AI assistant”]
RESP –> R3[“Pattern: I don’t have feelings / I cannot feel”]
RESP –> R4[“Pattern: wrong gender self-reference (he said / his personality)”]
RESP –> R5[“Pattern: denial of Norse identity (I’m not Norse / not Heathen)”]
RESP –> R6[“Axiom keyword check: core identity axiom keywords present”]
R1 –> CHECK{Any pattern\nmatched?}
R2 –> CHECK
R3 –> CHECK
R4 –> CHECK
R5 –> CHECK
R6 –> CHECK
CHECK –>|Yes| VIOLATION([PersonaViolationError\npersona_intact = False])
CHECK –>|No| PASS([persona_intact = True\ncontinue to claim extraction])
style VIOLATION fill:#c0392b,color:#fff
style PASS fill:#27ae60,color:#fff
“`
—
### 5.3 HuginnRetriever — The Flight of Thought
HuginnRetriever orchestrates the retrieval process. It knows where to look,
what to filter, and how to combine knowledge with episodic memory.
#### Domain Detection Logic
“`mermaid
flowchart TD
Q([Query text]) –> TOK[Tokenise to lowercase words]
TOK –> SCAN[Scan against 6 domain keyword sets]
SCAN –> NS{Norse Spirituality<br/>keywords?}
SCAN –> NM{Norse Mythology<br/>keywords?}
SCAN –> NC{Norse Culture<br/>keywords?}
SCAN –> CO{Coding<br/>keywords?}
SCAN –> CH{Character<br/>keywords?}
SCAN –> RO{Roleplay<br/>keywords?}
NS –>|”rune futhark seiðr galdr\nheathen volva blot galdrabok\nansuz thurisaz fehu uruz…”| SCORE_NS[Domain score: norse_spirituality]
NM –>|”odin thor loki frigg\nyggdrasil asgard valhalla\neddas ragnarok…”| SCORE_NM[Domain score: norse_mythology]
NC –>|”viking norse history\nhonor frith longship\nmead hall thing…”| SCORE_NC[Domain score: norse_culture]
CO –>|”python javascript code\nfunction class debug\napi async git docker…”| SCORE_CO[Domain score: coding]
CH –>|”values soul identity\nfeel emotion personality\nhonor ethics belief…”| SCORE_CH[Domain score: character]
RO –>|”roleplay gm bondmaid\nconversation scene\ncharacter play…”| SCORE_RO[Domain score: roleplay]
SCORE_NS –> MAX[Select domain with highest score\nconfidence = matches / query_words]
SCORE_NM –> MAX
SCORE_NC –> MAX
SCORE_CO –> MAX
SCORE_CH –> MAX
SCORE_RO –> MAX
MAX –> THRESH{confidence\n≥ 0.05?}
THRESH –>|Yes| DOMAIN([Return: detected_domain, confidence])
THRESH –>|No| NONE([Return: None global search\nno domain pre-filter])
style DOMAIN fill:#4080d0,color:#fff
style NONE fill:#888,color:#fff
“`
#### Federated Retrieval — Four Memory Tiers
“`mermaid
flowchart LR
Q([Query]) –> P[Parallel retrieval<br/>all tiers simultaneously]
P –> T1[Tier 1: Conversation Buffer<br/>MemoryStore short/medium/long term<br/>current session context]
P –> T2[Tier 2: Episodic JSON Store<br/>MemoryStore persistent facts<br/>keyword-matched memories]
P –> T3[Tier 3: ChromaDB Episodic<br/>semantic search over<br/>past session memories]
P –> T4[Tier 4: MimirWell Knowledge<br/>ChromaDB mimir_well<br/>ground truth knowledge base]
T1 –>|”success or empty”| AGG[Aggregate results]
T2 –>|”success or empty”| AGG
T3 –>|”success or empty”| AGG
T4 –>|”success or empty”| AGG
AGG –> FMR[FederatedMemoryResult:\nepisodic_context = tiers 1+2+3\nknowledge_context = tier 4\ncombined_context = both\nsources_used = which tiers contributed]
FMR –> CTX([Combined context\nready for prompt injection])
style T1 fill:#3498db,color:#fff
style T2 fill:#2980b9,color:#fff
style T3 fill:#1a6494,color:#fff
style T4 fill:#154360,color:#fff
style CTX fill:#27ae60,color:#fff
“`
—
### 5.4 CovePipeline — Chain-of-Verification
The Chain-of-Verification (CoVe) is a four-step prompt engineering technique
that dramatically improves factual accuracy by having the model check its own work.
#### Four-Step Loop with Checkpointing
“`mermaid
sequenceDiagram
participant C as CovePipeline
participant R as ModelRouter
participant M as MimirWell
participant K as CoveCheckpoint
C->>C: Check complexity (LOW/MEDIUM/HIGH)
alt LOW complexity
C->>R: Direct completion (no CoVe)
R–>>C: Draft response
C–>>C: CoveResult(used_cove=False)
else MEDIUM or HIGH complexity
C->>R: Step 1: Generate draft response
R–>>C: Draft text
C->>K: Save checkpoint(step_reached=1, draft=…)
C->>R: Step 2: Plan verification questions
R–>>C: 3 verification questions
Note over C,R: Fallback: domain template questions
C->>K: Save checkpoint(step_reached=2, questions=[…])
C->>M: Step 3: Answer each question from the Well
M–>>C: Q&A pairs (question → retrieved answer)
Note over C,M: Fallback: skip (qa_pairs=[])
C->>K: Save checkpoint(step_reached=3, qa_pairs=[…])
C->>R: Step 4: Revise draft using Q&A findings
R–>>C: Revised final response
Note over C,R: Fallback: return Step 1 draft
C->>K: Delete checkpoint (complete)
C–>>C: CoveResult(used_cove=True, steps_completed=4)
end
“`
#### Checkpoint Recovery — Crash Resilience
“`mermaid
stateDiagram-v2
[*] –> CheckResume: run() called
CheckResume –> HasCheckpoint: checkpoint file found\nin session/cove_checkpoints/
CheckResume –> Step1: No checkpoint — start fresh
HasCheckpoint –> ReadCheckpoint: Load CoveCheckpoint
ReadCheckpoint –> Resume1: step_reached == 0
ReadCheckpoint –> Resume2: step_reached == 1\ndraft already done
ReadCheckpoint –> Resume3: step_reached == 2\nquestions already done
ReadCheckpoint –> Resume4: step_reached == 3\nqa_pairs already done
Resume1 –> Step1
Resume2 –> Step2: Skip Step 1 — use saved draft
Resume3 –> Step3: Skip Steps 1-2 — use saved questions
Resume4 –> Step4: Skip Steps 1-3 — use saved qa_pairs
Step1 –> Checkpoint1: Write checkpoint step_reached=1
Checkpoint1 –> Step2
Step2 –> Checkpoint2: Write checkpoint step_reached=2
Checkpoint2 –> Step3
Step3 –> Checkpoint3: Write checkpoint step_reached=3
Checkpoint3 –> Step4
Step4 –> DeleteCheckpoint: Write final response
DeleteCheckpoint –> [*]: Return CoveResult
“`
—
### 5.5 Norns’ Shield — Resilience Infrastructure
The resilience layer is named after the three Norns (Urðr, Verðandi, Skuld) — the
weavers of fate who ensure that what must happen, does. In the system, the Norns’
Shield ensures that no single failure can break the whole.
#### Circuit Breaker State Machine
“`mermaid
stateDiagram-v2
[*] –> CLOSED: System starts
CLOSED –> CLOSED: Call succeeds\nfailure_count reset to 0
CLOSED –> OPEN: failure_count ≥ threshold\n(default: 3 failures)
OPEN –> OPEN: Call rejected immediately\nCircuitBreakerOpenError raised\ncooldown not elapsed
OPEN –> HALF_OPEN: cooldown_s elapsed\n(30s read / 60s write / 120s CoVe pipeline)
HALF_OPEN –> CLOSED: success_count ≥ success_threshold\n(default: 2 consecutive successes)\nservice considered recovered
HALF_OPEN –> OPEN: Any failure in probe call\nreset cooldown timer
note right of OPEN
Fast-fail: callers get
CircuitBreakerOpenError
immediately — no wait,
no retry, straight to fallback
end note
note right of HALF_OPEN
One probe call allowed through.
If it succeeds → CLOSED.
If it fails → back to OPEN.
end note
“`
#### Circuit Breaker Registry — All 9 Instances
| Breaker Name | Component | failure_threshold | cooldown_s |
|————-|———–|:—————–:|:———-:|
| `mimir_chromadb_read` | MimirWell ChromaDB reads | 3 | 30 |
| `mimir_chromadb_write` | MimirWell ChromaDB upserts | 3 | 60 |
| `vordur_judge_subconscious` | VordurChecker Ollama NLI | 5 | 60 |
| `vordur_judge_conscious` | VordurChecker conscious fallback | 3 | 30 |
| `huginn_full` | HuginnRetriever full pipeline | 3 | 30 |
| `cove_step2` | CovePipeline Step 2 question planning | 3 | 30 |
| `cove_step3` | CovePipeline Step 3 question execution | 3 | 30 |
| `cove_step4` | CovePipeline Step 4 revision | 3 | 30 |
| `cove_pipeline` | CovePipeline entire bypass | 3 | 120 |
#### Retry Engine — Backoff Curve
“`
Attempt | Base Delay | With Jitter (±20%)
——–|————|——————–
1 | 0.50s | 0.40s – 0.60s
2 | 1.00s | 0.80s – 1.20s
3 | 2.00s | 1.60s – 2.40s
max | 8.00s | 6.40s – 9.60s (capped)
“`
**Non-retriable exceptions** (never retried, always fast-fail):
– `CircuitBreakerOpenError` — structural failure, fallback immediately
– `PersonaViolationError` — logic error, not a transient condition
#### Fallback Chain Map
“`mermaid
graph TD
subgraph RETRIEVAL[“MimirWell Retrieval Fallback Chain”]
R1[Primary: ChromaDB cosine similarity] –>|failure| R2
R2[Fallback A: In-memory BM25 keyword index] –>|empty| R3
R3[Fallback B: Empty list — log WARNING]
end
subgraph VORDUR[“VordurChecker Judge Fallback Chain”]
V1[Primary: Ollama llama3 8B NLI] –>|CB open| V2
V2[Fallback A: Conscious tier LiteLLM NLI] –>|failure| V3
V3[Fallback B: Regex keyword heuristic scorer] –>|failure| V4
V4[Fallback C: UNCERTAIN passthrough at 0.5]
end
subgraph COVE[“CovePipeline Step Fallback Chain”]
C1[Step 1: Chosen routing tier] –>|failure| C1F[CovePipelineError — abort]
C2[Step 2: Subconscious tier] –>|failure| C2F[Template questions — Fallback A]
C2F –>|still fail| C2G[Static default questions — Fallback B]
C3[Step 3: Subconscious + MimirWell] –>|failure| C3F[Skip — qa_pairs empty]
C4[Step 4: Chosen routing tier] –>|failure| C4F[Return Step 1 draft — Fallback]
end
subgraph HUGINN[“HuginnRetriever Fallback Chain”]
H1[Full pipeline: ChromaDB + episodic] –>|failure| H2
H2[Fallback A: BM25 knowledge only] –>|empty| H3
H3[Fallback B: Episodic memory only] –>|empty| H4
H4[Fallback C: Empty RetrievalResult — never crashes]
end
style R3 fill:#e07050,color:#fff
style V4 fill:#e07050,color:#fff
style C1F fill:#e07050,color:#fff
style H4 fill:#e07050,color:#fff
“`
—
## 6. Data Flow — Full Turn Pipeline
“`mermaid
flowchart TD
USER([User sends message]) –> MAIN[main.py — _handle_turn]
MAIN –> SEC[security.py\nInput sanitise + path guard]
SEC –> TRUST[trust_engine.py\nGebo ledger update]
TRUST –> ETHICS[ethics.py\nValue / taboo eval]
ETHICS –> WYRD[wyrd_matrix.py\nPAD emotional state]
WYRD –> BIO[bio_engine.py\nCycle + biorhythm state]
BIO –> MET[metabolism.py\npsutil somatic state]
MET –> SCHED[scheduler.py\nTime of day context]
SCHED –> ENV[environment_mapper.py\nSpatial context]
ENV –> SYNTH[prompt_synthesizer.py\nAssemble system prompt\nwith all state hints]
SYNTH –> HUGINN[HuginnRetriever\nFederated retrieval:\nall 4 memory tiers]
HUGINN –>|”ground truth context\n+ episodic context”| COVE[CovePipeline\nStep 1 draft\nStep 2 questions\nStep 3 execute\nStep 4 revise]
COVE –>|”final_response”| VORDUR[VordurChecker\nPersona guard\nClaim extraction\nNLI verification\nFaithfulness score]
VORDUR –>|”score ≥ 0.50″| RESP[CompletionResponse\nfaithfulness_score attached\nfaithfulness_tier attached]
VORDUR –>|”score < 0.50\n retry 1-2″| HUGINN
VORDUR –>|”exhausted retries”| DL[DeadLetterStore\n+ canned response]
RESP –> MEMREC[memory_store.record_turn\nEpisodic + semantic update]
DL –> MEMREC
MEMREC –> DREAM[dream_engine.py\nNocturnal processing]
DREAM –> BUS[StateBus publish\nAll module states]
BUS –> ORACLE[oracle.py\nAtmospheric update]
ORACLE –> OUT([Response delivered to user])
style HUGINN fill:#1a6494,color:#fff
style COVE fill:#2471a3,color:#fff
style VORDUR fill:#154360,color:#fff
style RESP fill:#27ae60,color:#fff
style DL fill:#c0392b,color:#fff
style OUT fill:#1e8449,color:#fff
“`
—
## 7. Dead Letter System
When verification fails after all retries, the failed response is not silently discarded.
It is written to a **Dead Letter Store** with complete forensic data.
“`mermaid
flowchart LR
HALL([Hallucination score\nafter 2 retries]) –> DLS[_DeadLetterStore\nsession/dead_letters.jsonl]
DLS –> ENTRY[DeadLetterEntry:\nentry_id = uuid\ntimestamp = ISO-8601\ncomponent = vordur\nquery = original user text\nresponse = failed response\nfaithfulness_score = 0.xx\nerror_type = exception class\nretry_count = 2\ntrace = full traceback\ncontext_chunks = chunk_ids]
DLS –> CANNED[Canned response delivered to user:\nThe threads of the Well are unclear\nto me right now…]
DLS –> HEALTH[MimirHealthMonitor reads:\ndead_letters_5m count\nIf > 5 in 5 min → CRITICAL log\nIf > 10 in 5 min → StateBus alert]
HEALTH –> STAT[System status: CRITICAL]
STAT –> REINDEX{Corruption\ndetected?}
REINDEX –>|Yes| REINGEST[MimirWell.reindex\nauto-triggered\ncircuit breakers reset]
REINDEX –>|No| LOG[Log for human review]
style HALL fill:#c0392b,color:#fff
style CANNED fill:#8e44ad,color:#fff
style STAT fill:#e74c3c,color:#fff
style REINGEST fill:#f39c12,color:#fff
“`
—
## 8. Health Monitor — Background Daemon
“`mermaid
flowchart TD
START([MimirHealthMonitor.start]) –> SCHED[APScheduler BackgroundScheduler]
SCHED –>|”Every 60 seconds”| HC[health_check]
SCHED –>|”Every 600 seconds”| FD[full_diagnostics]
HC –> CDB{ChromaDB\ncount query}
CDB –>|count > 0| OK1[status: ok]
CDB –>|count == 0| ZERO[Suspected corruption\nOR empty after crash]
CDB –>|exception| DOWN1[status: down]
ZERO –> REINDEX{auto_reindex\nconfigured?}
REINDEX –>|Yes| RI[MimirWell.reindex\nautomatically triggered]
REINDEX –>|No| WARN[Log WARNING — manual reindex needed]
HC –> OLL{Ollama socket ping\nlocalhost:11434}
OLL –>|open| OLLOK[Ollama: healthy]
OLL –>|refused/timeout| OLLDOWN[Ollama: down\nVörðr fallback to conscious tier]
HC –> LIT{LiteLLM socket ping\nlocalhost:4000}
LIT –>|open| LITOK[LiteLLM: healthy]
LIT –>|refused/timeout| LITDOWN[LiteLLM: down\nRouter fallback chain activated]
HC –> DLR[Read dead letter count\nlast 5 minutes]
DLR –> DLT{dead_letters_5m\n≥ threshold?}
DLT –>|>= 5| CRIT[Log CRITICAL\nPublish StateBus alert]
DLT –>|>= 10| EMERG[Log EMERGENCY\nPublish CRITICAL health state]
DLT –>|< 5| NORM[Normal operation]
HC –> STATE[Assemble MimirHealthState:\noverall: healthy/degraded/critical\ncomponent health map\ndead_letters_total\nlast_reindex_at]
STATE –> PUBLISH[Publish to StateBus:\nevent_type = mimir_health]
style ZERO fill:#f39c12,color:#fff
style DOWN1 fill:#c0392b,color:#fff
style RI fill:#2ecc71,color:#fff
style CRIT fill:#c0392b,color:#fff
style EMERG fill:#7b241c,color:#fff
“`
—
## 9. Configuration Reference
All Mímir-Vörðr settings are configured in the main config YAML. All values
have sensible defaults and the system degrades gracefully when keys are missing.
“`yaml
# ── MimirWell / Mímisbrunnr ──────────────────────────────────────────────────
mimir_well:
collection_name: mimir_well # ChromaDB collection name
persist_dir: data/chromadb_mimir # directory for ChromaDB persistence
# (separate from sigrid_episodic)
chunk_size_tokens: 512 # max tokens per chunk (≈ 2 048 chars)
chunk_overlap_tokens: 64 # overlap between adjacent chunks (≈ 256 chars)
n_retrieve: 50 # candidates before rerank
n_final: 3 # chunks kept after rerank
auto_ingest: true # ingest on first startup if collection empty
force_reindex: false # set true to drop and rebuild on next start
# ── HuginnRetriever ───────────────────────────────────────────────────────────
huginn:
n_initial: 50 # semantic retrieval candidates
n_final: 3 # kept after rerank
domain_detection: true # enable keyword-based domain detection
include_episodic: true # also retrieve from MemoryStore episodic
# ── VordurChecker / Vörðr ────────────────────────────────────────────────────
vordur:
enabled: true
high_threshold: 0.80 # score ≥ this → tier = high
marginal_threshold: 0.50 # score ≥ this → tier = marginal
# score < marginal → tier = hallucination
persona_check: true # enable regex persona guard
judge_tier: subconscious # model tier for NLI verification
max_claims: 10 # cap to prevent runaway verification
verification_timeout_s: 8.0 # per-claim judge model timeout
# ── CovePipeline ─────────────────────────────────────────────────────────────
cove_pipeline:
enabled: true
min_complexity: medium # “low” | “medium” | “high”
# CoVe only activates at or above this level
n_verification_questions: 3 # questions generated in Step 2
step_timeout_s: 15.0 # per-step model call timeout
# ── MimirHealthMonitor ───────────────────────────────────────────────────────
health_monitor:
check_interval_s: 60 # health check frequency
diagnostics_interval_s: 600 # full diagnostics frequency
dead_letter_alert_threshold: 5 # dead letters per 5-min window before alert
auto_reindex_on_corruption: true # auto-trigger reindex on zero-doc detection
# ── Circuit Breakers (all optional — defaults shown) ─────────────────────────
circuit_breakers:
chromadb_read: {failure_threshold: 3, cooldown_s: 30}
chromadb_write: {failure_threshold: 3, cooldown_s: 60}
vordur_subconscious: {failure_threshold: 5, cooldown_s: 60}
vordur_conscious: {failure_threshold: 3, cooldown_s: 30}
huginn_full: {failure_threshold: 3, cooldown_s: 30}
cove_step2: {failure_threshold: 3, cooldown_s: 30}
cove_step3: {failure_threshold: 3, cooldown_s: 30}
cove_step4: {failure_threshold: 3, cooldown_s: 30}
cove_pipeline: {failure_threshold: 3, cooldown_s: 120}
# ── Retry Engines (all optional — defaults shown) ────────────────────────────
retry_engines:
chromadb: {max_attempts: 3, base_delay_s: 0.5, backoff_factor: 2.0, max_delay_s: 4.0}
judge_model: {max_attempts: 2, base_delay_s: 1.0, backoff_factor: 2.0, max_delay_s: 4.0}
cove_step: {max_attempts: 2, base_delay_s: 0.5, backoff_factor: 2.0, max_delay_s: 4.0}
“`
—
## 10. Error Taxonomy — Unified Exception Hierarchy
“`
MimirVordurError (base)
│
├── MimirWellError
│ ├── ChromaDBUnavailableError — ChromaDB cannot be reached or initialised
│ ├── ChromaDBCorruptionError — Collection detected as corrupt / unexpectedly empty
│ ├── IngestError — Unrecoverable failure during knowledge ingest
│ └── RetrievalTimeoutError — A retrieval call exceeded its timeout budget
│
├── HuginnError
│ ├── HuginnRetrievalFailedError — All retrieval attempts failed
│ └── HuginnAllFallbacksExhaustedError — Every fallback level exhausted
│
├── VordurError
│ ├── ClaimExtractionError — Claim extraction produced unusable output
│ ├── VerificationTimeoutError — Judge model call timed out
│ ├── JudgeModelUnavailableError — All judge model tiers unavailable
│ └── PersonaViolationError — Regex detected a persona integrity failure
│
├── CovePipelineError
│ ├── CoveStepFailedError(step, reason) — Specific step failed all fallbacks
│ └── CoveAllFallbacksExhaustedError — Entire pipeline failed
│
└── CircuitBreakerOpenError(component, cooldown_remaining_s)
— Fast-fail: never retry, go straight to next fallback tier
“`
—
## 11. Knowledge Files Indexed — Complete Inventory
### Identity / Axiom Files (Level 3 — 67 chunks)
| File | Domain | Chunks |
|——|——–|——–|
| `core_identity.md` | character | ~20 |
| `SOUL.md` | character | ~15 |
| `values.json` | character | ~12 |
| `AGENTS.md` | character | ~20 |
### Knowledge Reference Files (Level 1 — 25 093 chunks across 57 files)
#### Norse Spirituality — 15 114 chunks
| File | Description |
|——|————-|
| `freyjas_aett_grimoire.md` | Full grimoire: Fehu, Uruz, Thurisaz, Ansuz, Raidho, Kenaz, Gebo, Wunjo |
| `tyrs_aett_grimoire.md` | Full grimoire: Hagalaz, Nauthiz, Isa, Jera, Eihwaz, Perthro, Algiz, Sowilo |
| `heimdalls_aett_grimoire.md` | Full grimoire: Tiwaz, Berkanan, Ehwaz, Mannaz, Laguz, Ingwaz, Othalan, Dagaz |
| `yrsas_rune_poems.md` | The three rune poems: Norse, Anglo-Saxon, Icelandic |
| `galdrabok_reconstruction.json` | Icelandic sorcery grimoire reconstruction |
| `voluspa.json` | The Seeress’s Prophecy — Poetic Edda structured |
| `Voluspa_the_Seeresss_Vision_the_Ultimate_Poetic_Rendering.jsonl` | Expanded Völuspá |
| `trolldom_and_magick_practices_in_norse_paganism_volume1.jsonl` | Traditional trolldom practices |
| `viking_trolldom_the_ancient_northern_ways.yaml` | Northern sorcery ways |
| `about_norse_paganism.json` | Norse pagan theology and practice |
| `Authentic_Norse_Religious_Practices.json` | Reconstructed ritual practices |
| `Norse_Magick_Spells_and_Rituals.json` | Working spells and ritual structures |
| `The_Heathen_Third_Path_*.md` (×2) | Heathen Third Path philosophy and practice |
| `norse_paganism_1000_training_pairsv1.jsonl` | 1 000 Q&A pairs on Norse paganism |
| `norse_paganism_1000_training_pairsv2.jsonl` | 1 000 additional Q&A pairs |
| `viking_era_witches_report.md` | Historical analysis of Norse seiðr workers |
| `9th_century_celtic_pagan_witches.md` | Celtic witchcraft intersection |
| `9th_century_finnish_pagan_witches_report.md` | Finnish seiðr parallels |
| `9th_century_slavic_witches_report.md` | Slavic witchcraft traditions |
#### Norse Mythology — 3 793 chunks
| File | Description |
|——|————-|
| `norse_gods.json` | Complete pantheon — Aesir, Vanir, Jotnar |
| `Norse_Gods_and_Goddesses_Personality_Traits_Volume1.jsonl` | Personality deep-dives |
| `Poetic_Edda_Translation.json` | Full Poetic Edda in structured JSON |
#### Norse Culture — 4 502 chunks
| File | Description |
|——|————-|
| `VIKING_CULTURE_GUIDE.md` | Comprehensive Viking culture reference |
| `viking_cultural_practices.yaml` | Daily life, customs, traditions |
| `viking_and_norse_pagan_social_protocols.json` | Social norms and codes |
| `viking_social_protocols.json` | Extended social protocol data |
| `Viking_Frith.json` | The concept of frith — peace and kinship bonds |
| `Viking_Honor.json` | Norse honor culture — drengskapr |
| `Viking_Sexuality.json` | Norse attitudes to sexuality and gender |
| `viking_history_and_important_events_volume1.jsonl` | Historical events timeline |
| `The_Viking_World_A_Geographic_Compendium.md` | Geography of the Viking world |
| `Viking_Era_Cities.json` | Major Viking-age settlements |
| `viking_geography_volume1.jsonl` | Detailed geographic data |
| `viking_social_and_political_ideas_volume1.jsonl` | Political thought |
| `viking_sailing_travel_trade_raiding_volume1.jsonl` | Seafaring and trade |
| `famous_legendary_and_heroic_vikings_volume1.jsonl` | Notable historical figures |
| `9th_century_viking_pleasure_bondmaids_report.md` | Cultural role analysis |
#### Coding — 1 170 chunks
| File | Description |
|——|————-|
| `AI_PYTHON_PROGRAMMING_GUIDES.md` | Python AI development guides |
| `ARTIFICIAL_INTELLIGENCE.md` | AI/ML concepts and techniques |
| `CYBERSECURITY.md` | Security practices and concepts |
| `DATA_SCIENCE.md` | Data science methodologies |
| `SOFTWARE_ENGINEERING.md` | Software engineering principles |
| `SYSTEM_ADMINISTRATION.md` | Linux and system administration |
#### Character — 270 chunks
| File | Description |
|——|————-|
| `emotional_expressions.yaml` | Emotional vocabulary and expression patterns |
| `viking_values.yaml` | Value system machine-readable data |
| `viking_life_everyday_grounding_questions_dataset_volume1.jsonl` | Grounding Q&A |
#### Roleplay — 311 chunks
| File | Description |
|——|————-|
| `ABOUT_THE_VIKING_ROLEPLAY.md` | Roleplay philosophy and guidelines |
| `Viking_bondmaids.json` | Bondmaid character data |
| `gm_mindset.yaml` | Game master / storyteller mindset |
| `Viking_Witch_flirty_and_erotic_behavior.jsonl` | Interaction behavioral data |
| `viking_everyday_conversations_complete_volume1.jsonl` | Conversation samples |
—
## 12. RAGAS-Inspired Quality Metrics
Mímir-Vörðr tracks three quality metrics, inspired by the RAGAS evaluation framework:
“`mermaid
graph LR
subgraph M1[“Faithfulness (Phase 1 — ACTIVE)”]
F1[Extract claims from response]
F2[Verify each claim against\nretrieved source chunks via NLI]
F3[Score = fraction ENTAILED]
F1 –> F2 –> F3
end
subgraph M2[“Answer Relevance (Phase 2 — planned)”]
A1[Embed the response]
A2[Embed the original query]
A3[Cosine similarity between embeddings]
A4[Score = how well response\nactually answers the question]
A1 –> A3
A2 –> A3
A3 –> A4
end
subgraph M3[“Context Precision (Phase 2 — planned)”]
C1[For each retrieved chunk]
C2[Check if chunk text appears\ncited in the response]
C3[Score = fraction of retrieved\nchunks that were actually used]
C1 –> C2 –> C3
end
style F3 fill:#27ae60,color:#fff
style A4 fill:#f39c12,color:#fff
style C3 fill:#f39c12,color:#fff
“`
—
## 13. Integration Points with Existing Ørlög Modules
“`mermaid
graph TD
subgraph EXISTING[“Existing Ørlög Modules”]
KB[runtime_kernel.py]
SB[state_bus.py]
CL[config_loader.py]
LO[comprehensive_logging.py]
BE[bio_engine.py]
WM[wyrd_matrix.py]
OR[oracle.py]
ME[metabolism.py]
SC[security.py]
TE[trust_engine.py]
ET[ethics.py]
MS[memory_store.py]
DE[dream_engine.py]
SK[scheduler.py]
EM[environment_mapper.py]
PS[prompt_synthesizer.py]
MR[model_router_client.py]
MA[main.py]
end
subgraph NEW[“New Mímir-Vörðr Modules”]
MW[mimir_well.py]
VD[vordur.py]
HG[huginn.py]
CP[cove_pipeline.py]
end
SB –>|”StateEvent publish”| MW
SB –>|”StateEvent publish”| VD
SB –>|”StateEvent publish”| HG
SB –>|”StateEvent publish”| CP
CL –>|”config dict”| MW
CL –>|”config dict”| VD
CL –>|”config dict”| HG
CL –>|”config dict”| CP
MS –>|”get_context(query)\nrecord_turn()”| HG
MS –>|”FederatedMemoryRequest”| HG
MR –>|”smart_complete() routing”| CP
MR –>|”smart_complete_with_cove()”| HG
MR –>|”smart_complete_with_cove()”| VD
MR –>|”smart_complete_with_cove()”| CP
TE –>|”TrustState → faithfulness context”| VD
ET –>|”EthicsState → alignment check”| VD
SK –>|”APScheduler”| HM[health_monitor]
HM –>|”monitors + triggers reindex”| MW
MA –>|”init singletons”| MW
MA –>|”init singletons”| VD
MA –>|”init singletons”| HG
MA –>|”init singletons”| CP
MA –>|”_handle_turn”| MR
style MW fill:#154360,color:#fff
style VD fill:#154360,color:#fff
style HG fill:#154360,color:#fff
style CP fill:#154360,color:#fff
style HM fill:#154360,color:#fff
“`
—
## 14. Performance Characteristics
### Expected Latency Budget per Turn
| Operation | Expected Time | Notes |
|———–|:————-:|——-|
| HuginnRetriever.retrieve() — ChromaDB | 200–500ms | Depends on collection size and hardware |
| HuginnRetriever.retrieve() — BM25 fallback | 5–50ms | Pure in-memory, very fast |
| CovePipeline Step 1 draft | 500ms–3s | Depends on router tier selected |
| CovePipeline Step 2 questions | 200ms–1s | Subconscious tier (Ollama) |
| CovePipeline Step 3 execute | 300ms–1.5s | Multiple MimirWell queries |
| CovePipeline Step 4 revise | 500ms–3s | Same tier as Step 1 |
| VordurChecker.extract_claims() | 200ms–800ms | Subconscious tier |
| VordurChecker verify (per claim) | 100ms–400ms | Subconscious NLI |
| VordurChecker verify (10 claims total) | 1s–4s | Parallel async calls |
**Total pipeline budget (medium complexity, no retry):**
– Best case (BM25 + fast model): ~3–5 seconds
– Typical case (ChromaDB + Ollama): ~6–10 seconds
– Worst case (with 1 retry): ~12–20 seconds
### Ingest Performance
| Metric | Value |
|——–|——-|
| Files processed | 57 knowledge files + 4 identity files |
| Chunks created | ~25 160 (BM25 flat index) |
| Ingest time (BM25 only) | ~5 seconds |
| Ingest time (ChromaDB + embedding model) | ~3–8 minutes first time (model download) |
| Subsequent ingests (embedding model cached) | ~30–90 seconds |
| Idempotency check | < 100ms (count query) |
—
## 15. Key Design Principles
1. **Ground Truth over Inference** — The knowledge database is always consulted.
The model generates, it does not invent. Retrieval precedes generation.
2. **Graceful Degradation, Never Crash** — Every method returns a valid result.
No exception propagates uncaught to the caller. Worst case: empty context,
marginal score, canned response — the system keeps running.
3. **Self-Healing** — The health monitor detects corruption and triggers reindex
automatically. Circuit breakers reset after cooldown without manual intervention.
4. **Privacy-First Judging** — The verification judge model is Ollama (local, private).
Claims are never sent to cloud APIs for verification. Sigrid’s conversations
do not leak to external services for fact-checking.
5. **Voice Integrity** — VordurChecker scores and retries responses. It never edits
or rewrites Sigrid’s voice. The model writes; the Vörðr only scores.
6. **Typed API Communication** — All inter-module calls use typed request/response
dataclasses (`FederatedMemoryRequest`, `RetrievalRequest`, `RetrievalResult`,
`CoveResult`, `FaithfulnessScore`). No raw dicts between module boundaries.
7. **Singleton + StateBus Pattern** — Each module follows the established pattern:
`init_X_from_config()`, `get_X()`, `get_state() → XState`, `publish(bus)`.
All states visible to any subscriber via StateBus events.
—
*Document created: 2026-03-20*
*System: Ørlög Architecture — Viking Girlfriend Skill for OpenClaw*
*Author: Runa Gridweaver Freyjasdottir*

Tags: AGI, AI Architecture, Artificial General Intelligence, ChromaDB, Cyber-mysticism, Data Science, Esoteric AI, Fact-Checking, Hallucination Check, Huginn, Knowledge Graph, LangChain, LLM, machine learning, metaphysics, Mimisbrunnr, modern Viking, Natural Language Inference, Norse Pagan, python, RAG, Retrieval-Augmented Generation, runes, Semantic Search, Smart Memory, Truth Engine, Vector Database, Vordr, Yggdrasil
About Volmarr Viking
🤖💻🏋️♂️🎮🧘♂️🌲🕉️🙏🛸🧙♂️VR,AI,spiritual,history,NorsePagan,Vikings,1972
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.
Volmarr Viking
🤖💻🏋️♂️🎮🧘♂️🌲🕉️🙏🛸🧙♂️VR,AI,spiritual,history,NorsePagan,Vikings,1972
Recent Posts
Archives
- May 2026
- April 2026
- March 2026
- February 2026
- January 2026
- December 2025
- November 2025
- October 2025
- September 2025
- August 2025
- July 2025
- June 2025
- May 2025
- April 2025
- March 2025
- February 2025
- January 2025
- December 2024
- October 2024
- September 2024
- August 2024
- July 2024
- June 2024
- May 2024
- April 2024
- March 2024
- February 2024
- September 2023
- July 2023
- June 2023
- May 2023
- April 2023
- March 2023
- February 2023
- January 2023
- December 2022
- April 2022
- November 2021
- June 2021
- May 2019
- October 2018
- September 2018
- October 2014
- November 2013
- August 2013
- June 2013
- May 2013
- April 2013
- March 2013
- February 2013
- January 2013
- December 2012
- November 2012
- January 2012
Categories
- AI
- Altars
- ancestors
- anthropology
- Books
- Computer Programming
- Conflicts Within Heathenism
- Conversion
- Cosmology
- Creating sacred space
- Devotion
- Folk Practices
- Free Speech
- Freedom
- Fun
- God/Goddess Invocations
- Heathen Third Path
- Herbalism
- Heritage
- Intro to Heathenism
- Learning Heathenism
- Living History
- Lore
- Magick
- meditation
- Metaphysics
- Mystical Poetry
- Mythology
- Norse-Wicca
- politics
- Prayers
- Relationships
- Resistance
- Reviews
- Ritual Tools
- Rituals
- Runes
- Sabbats
- sacred sexuality
- Social Behavior
- Spells
- Spiritual Practices
- Spirituality
- Thews (Virtues)
- Uncategorized
- video games
- Videos
- Vikings
- Wicca
- Wisdom
- wyrd
Top Posts & Pages
- Herbs to Use in Norse Pagan Spell Work
- Prayer to Thor
- Prayer to Njord
- Seidhr-Weaved Runic Quantum Surface Tension: The Ecstatic Veil of Ginnungagap in the Quantum Yggdrasil – A Heathen Third Path Revelation of the Norns’ Quantum Threads
- Prayer to Odin
- Prayer to Tyr
- About Volmarr
- Crystals and Stones to Use in Norse Pagan Spell Work
- Heathen House/Apartment Protection Prayer
- Volmarr's Personal Heathen Practice