219 files, 2.0 MB, untracked in souveraine/docs and existing nowhere else. The volume is at 100% with no snapshots.
3.9 KiB
| id | title | status | priority | created | area |
|---|---|---|---|---|---|
| 004 | Aster's Observation Database — Structured assertion + embedding + search sensor | open | high | 2026-05-08 | n1-consciousness |
Problem
Aster (souveraine-subconscious, N+1 pass) runs after every response and detects commitments, hedges, pattern shifts. Today those observations:
- Go to the three-box inbox — surfaced once, then forgotten
- Write to
aster/ledger/markdown files — human-readable, but unqueryable by Aster herself - Are purely heuristic — no embedding search, no structured retrieval
A deeper reflection pass (N+25, heartbeat) cannot ask "what commitments from last week are still open?" without grepping all the ledger prose. The search sensor is designed but not wired.
Solution
Three layers that wire together:
Layer 1: Structured Assertion Store (Carry-style triples)
When Aster detects something durable during N+1, instead of only writing to the inbox, she also asserts a structured claim:
carry assert aster.observation \
source=verify \
content='commitment detected: save the config' \
session_id=<id> \
agent_id=ani \
timestamp=<ts>
Or, for tool-use: a memory assert subcommand that writes the same triple directly to a local Dialog DB / structured store without depending on the Carry CLI.
Layer 2: Local Embeddings (nomic-embed-text-v1.5 via Ollama)
Aster's observations get embedded at write time (async, fire-and-forget) using nomic-embed-text-v1.5 running on the existing 1070 Ti Ollama instance at 10.10.20.19:11434.
Write pipeline:
Aster asserts observation
→ structured claim written to store (Layer 1)
→ async embedding job: POST /api/embeddings
→ chunk + vector stored alongside the triple in a flat HNSW index
→ path + fact type + entity tags retained for 4-strategy fusion
Layer 3: Memory Search Sensor
Defined in SENSORIUM_ARCHITECTURE.md Appendix B. The memory_search tool exposes 4-strategy fusion (semantic, BM25, graph, temporal) with ontological weighting per territory. Aster uses it during N+25 reflection and heartbeat to find patterns across her own observations.
Aster at N+25:
"what commitments did I flag this week?"
→ memory_search(fact_type="world", territory="aster/ledger/", time_range="7d")
→ returns paths + scores
→ Aster reads the source ledgers and decides what to surface
Dependencies
| Component | Status | Path |
|---|---|---|
memory assert subcommand |
New — structured triple write + read | src/core/memory/ |
| Dialog DB or Carry crate | New — dependency decision needed | Cargo.toml |
| nomic-embed-text on Ollama | Exists — 10.10.20.19:11434 |
Already deployed |
| HNSW vector index | New — ~/.souveraine/index/v1/ |
SENSORIUM_ARCHITECTURE.md §AppB |
memory_search sensor |
New — 4-strategy fusion tool def | SENSORIUM_ARCHITECTURE.md §AppB |
| Aster write path | New — N+1 pass calls assert + embed | consciousness_engine.rs |
Non-goals
- This does not replace markdown ledgers. The ledgers are human-readable continuity. The assert store is machine-readable search. Both get written.
- This does not embed everything. Only observations flagged as "durable" by the heuristic (or by a lightweight classifier on the local Ollama) go through the full pipeline.
- Ani does not query this directly. Aster queries it and surfaces patterns.
References
docs/SENSORIUM_ARCHITECTURE.md§Appendix B — Memory Search Sensor designdocs/tasks/scope-4-n25-reflection.md— N+25 reflection (the consumer)docs/tasks/heartbeat-system.md— Heartbeat (the other consumer)docs/FEDERATION_SKETCH.md— SeedID, Merkle DAG (identity foundation)- tonk-labs/carry — reference for triple-structured assertion store
- Hindsight memory paper — entity graph + 4-strategy fusion (referenced in SENSORIUM_ARCHITECTURE.md)