Chain — append-only pamięć#
Chain to fundamentalna struktura pamięci Memphis. Łańcuch bloków, każdy blok podpisany SHA-256, każdy blok zawiera hash poprzedniego. Żadnego cichego edytowania historii — zmiana jakiegokolwiek bloku niszczy wszystkie kolejne hasze.
Typy chainów#
Memphis rozróżnia kilka równoległych strumieni:
| Chain | Co zapisuje | Retention |
|---|---|---|
| journal | pamięć długoterminowa, decyzje, reflections | bez limitu |
| soul | stan tożsamości agenta, głos, styl | bez limitu |
| system | events runtime, healthchecks, service lifecycle | rolujący |
| heartbeat | puls agenta (raz na cykl) | rolujący |
| ops | operacje ryzykowne (self-mod, vault writes, tool invokes) | bez limitu |
Każdy chain jest odrębnym plikiem append-only. Nigdy nie kasujemy, nigdy nie nadpisujemy.
Anatomia bloku#
┌─────────────────────────────────────────────┐
│ block_n │
├─────────────────────────────────────────────┤
│ prev_hash : SHA-256 bloku n-1 │
│ timestamp : ISO 8601 UTC │
│ agent_id : ed25519 public key │
│ event_type : str │
│ payload : JSON (może być zaszyfrowany) │
│ signature : ed25519 nad wszystkim powyżej │
│ block_hash : SHA-256 całego bloku │
└─────────────────────────────────────────────┘
Weryfikacja integralności#
memphis chain verify # weryfikacja wszystkich chainów
memphis chain verify --type journal # jeden strumień
memphis chain verify --since 7d # tylko ostatni tydzień
W razie wykrycia rozjazdu — Memphis wstrzymuje write'y do danego chaina i flaguje event chain.integrity.breach w system chain. Decyzja co dalej (quarantine, repair, accept) należy do operatora.
Co z GDPR / "prawo do bycia zapomnianym"?#
Append-only nie oznacza "plaintext forever". Dla danych PII:
- Encrypt-at-rest przez vault — klucz obieralny per-domain.
- Shredding przez key-rotation — zniszczenie klucza unieważnia odczyt starych bloków bez łamania integralności łańcucha.
- Retention policy per chain — rolujące chainy (system, heartbeat) mają default TTL.
Dlaczego nie zwykłe logi?#
Bo logi kłamią. rm -rf albo sed -i zmienia historię bez śladu. Chain z prev_hash + signature wymaga ujawnienia każdej modyfikacji jako break — widoczny dla memphis chain verify.