99 lines
No EOL
5.3 KiB
Markdown
99 lines
No EOL
5.3 KiB
Markdown
---
|
|
type: other
|
|
source_url: https://neoneye.github.io/agent-memory-atlas/systems/plur1bus/
|
|
retrieved: 2026-09-05
|
|
title: "Agent Memory Atlas: PLUR1BUS (7.11.0 Update)"
|
|
tags: [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](https://neoneye.github.io/agent-memory-atlas/systems/plur1bus/) 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:
|
|
|
|
```javascript
|
|
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. |