Watch
1
0
Fork
You've already forked SouveraineOS
0
SouveraineOS/docs/substrate/issues/004-aster-observation-db.md
Fimeg e480809c70 docs: rescue the agent-substrate tree out of a gitignored directory
219 files, 2.0 MB, untracked in souveraine/docs and existing nowhere else.
The volume is at 100% with no snapshots.
2026-07-26 12:11:50 -04:00

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:

  1. Go to the three-box inbox — surfaced once, then forgotten
  2. Write to aster/ledger/ markdown files — human-readable, but unqueryable by Aster herself
  3. 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 Exists10.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 design
  • docs/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)