knowledge-base/raw/other/2026-09-05_neoneye-agent-memory-atlas-plur1bus-711.md

5.3 KiB

type source_url retrieved title tags
other https://neoneye.github.io/agent-memory-atlas/systems/plur1bus/ 2026-09-05 Agent Memory Atlas: PLUR1BUS (7.11.0 Update)
plur1bus
openclaw
agent-memory
memory-atlas
lancedb
neo
acl
retrieval
safe-update
drift-gate
conflict
curation

Agent Memory Atlas: PLUR1BUS — 7.11.0 Update

Die Seite „PLUR1BUS" im Agent Memory Atlas wurde aktualisiert und analysiert nun den Release-Stand 7.11.0 (vorher: 7.4.0).

Neue Metriken gegenüber 7.4.0

  • 12.418 Zeilen in index.js (war ~10.900 bei 7.4.0)
  • 73.743 Zeilen über 254 Dateien in lib/ (war ~61.000)
  • 50 Konfigurationsgruppen in openclaw.plugin.json (war 47)
  • 361 Testdateien — „test suite is larger than the implementation it covers"

Neue Details gegenüber der 7.4.0-Dokumentation

Safe-Update und Drift-Gate

lib/safe-update.js (414 Zeilen) wird detaillierter beschrieben:

  • Content-Änderung wird verweigert, wenn Aufrufer keine Update-Quelle und kein Evidenzzitat liefert
  • Ersatzzeile wird geschrieben und durable gemacht, bevor die alte Zeile als superseded markiert wird
  • Ganzer Übergang wird an ein Reconsolidation-Event-Log mit Idempotency-Hash angehängt
  • Drift-Gate (safe-update.js:398): Kosinus-Distanz > 0,45 → Update wird abgelehnt. Der /correct-Aufruf an index.js:8995 setzt bewusst skipDriftGate: true — mit Begründung an der Aufrufstelle: das Gate wirft statt zu degradieren, eine große Korrektur ist genau was ein User bei /correct beabsichtigt, der Bestätigungsdialog zeigt alt und neu vollständig vor dem Schreiben. Gemessener Drift wird trotzdem im Reconsolidation-Event aufgezeichnet. „A gate that is off by argument is a different thing from a gate that is off by accident."

ACL und Scope

checkAccess (lib/acl-middleware.js:103):

  • Denies by default
  • Denies on missing owner
  • Denies on conflicting ownership tuple
  • Angewendet als Filter auf dem Read-Pfad an drei Stellen
  • Tests assert die Denials, nicht die Permissions

Conflict-Handling mit Messung

conflict bleibt eine Ranking-Penalty, kein Hard-Filter — mit einer konkreten Messung als Begründung:

  • Detector ist „an unvalidated LLM"
  • Live-Probe am 16. August 2026: 4.017 newest-revision Records mit conflict (2.505 auf einem einzigen Agent)
  • „No resolve path that clears the status"
  • 20-Row-Sample war nicht pairwise contradiction
  • „Hard-filtering on that signal would have withheld thousands of records on a flag the system cannot yet clear"
  • Distinktion: withhold on a state a person set, rank on a state a model guessed

Status-/Trust-Arithmetik

scoreNeoRecallItem returns -Infinity für pruned, tombstoned und demoted — drei States genuinely withheld. conflict bleibt in der Arithmetik:

const trustBoost = ({ curated: 0.3, validated: 0.25, user_asserted: 0.18,
 tool_observed: 0.18, assistant_asserted: -0.2, untrusted: -0.3 })[item.origin?.trustLevel] ?? 0;
// ...
const penalties = (item.origin?.role === "assistant" ? 0.2 : 0)
 + (item.status === "demoted" ? 0.35 : 0)
 + (item.status === "conflict" ? 0.3 : 0)
 + (item.stale === true ? 0.15 : 0);

Curation-Subcommands

  • /plur1bus curation resolve <id> keep|drop (lib/curation-resolve.js, dispatched at index.js:8065)
  • /plur1bus curation drop-injected (lib/drop-injected-conflicts.js, index.js:8082) — Bulk-Form, doppelt begrenzt: previewDropInjected zeigt Set vor Apply, Apply verweigert Records deren status !== "conflict" oder deren Text nicht isInjectedContextText erfüllt
  • Kein Auto-Resolve: ein conflict den nie jemand ansieht bleibt eine Penalty für immer — „the honest cost of leaving an unvalidated detector's output in the ranking rather than in a filter"

Epistemic Status — drei Read-Layer

invalidated wird an allen drei Read-Layern ausgeschlossen:

  • recall-pipeline.js:157
  • neo-arch.js:1464
  • SQL clause at db-adapter.js:562

LanceDB-Karten: Status-Filter

lib/recall-pipeline.js:153: jeder Eintrag mit gesetztem status der nicht active ist wird gedroppt — nicht ranked-down, sondern „gone from the read path".

Neo-Status-Aufteilung

Die Neo-Status trennen sich jetzt dreifach statt zweifach:

  1. Deletion-States + demoted → withhold (-Infinity)
  2. conflict + Trust-Ladder → rank (mit Penalties)
  3. Die Trennung folgt dem Verursacher: Person setzt → withhold; LLM rät → rank

Validitätsfenster und Tombstones (unverändert zu 7.4.0)

  • validFrom/validUntil getrennt von createdAt/updatedAt, abfragbar via validAt
  • /forget schreibt Content-Fingerprint in durable append-only Registry, wird als Schritt 0 jedes Capture geprüft

Zwei Stores

  • LanceDB: Memory-Karten, eine Tabelle pro Agent
  • Neo (JSONL): Turn-Journal, Kandidaten, Behavior-Cards, Graph-Kanten, Dream-Diary, Episoden — tragen die Epistemics

Einordnung

Das Atlas-Dokument ist die umfassendste externe Architektur-Analyse von PLUR1BUS. Der Sprung von 7.4.0 auf 7.11.0 bringt signifikant neue Details insbesondere zu Conflict-Handling (mit Live-Messung), Curation-Subcommands und der dreifachen Status-Aufteilung. Die Atlas-Seite ist unabhängig von den Release-Ankündigungen im OME und ergänzt sie um Code-Ebene-Details.