에이전트 메모리 엔진 (4/10) — memcore: SQLite로 다시 짠 메모리 코어, 51 tests
부제: bank/ 40 파일 → 236 curated + 4 entities + 15 topics, 0 errors
핵심 요약
memcore라이브러리 완성: SQLite + Python 표준 라이브러리만 사용, WAL 모드, 9 테이블, FTS5 가상 테이블.- 보존 자산 7/8 이식 완료.
bank/40 파일을 단 한 번에 0 에러로 변환했다. - Hermes의
MemoryProvider어댑터까지 붙여 51 tests, 0 failures.
1. memcore 라이브러리
설계 원칙은 두 가지였다. 외부 의존 없음, 단일 파일 DB.
- SQLite + Python stdlib only
- WAL mode (동시 읽기·쓰기 안정성)
- 9 테이블:
meta,u_patterns+ 3 자식 테이블,identity,curated,entities,topics,topic_curated,episodes - FTS5 가상 테이블
curated_fts—unicode61토크나이저로 한·영 혼용 검색 지원
데몬을 두지 않은 게 중요하다. 프로세스 아닌 파일이 진실의 원본이 된다. 백업·롤백·검증이 단순해진다.
2. 보존 자산 이식 7/8 완료
| 자산 | 모듈 | 상태 |
|---|---|---|
| user-pattern-stage.py | memcore.dialectic |
✅ |
| confidence-decay.py | memcore.decay |
✅ |
| bank-lint.py | memcore.lint |
✅ |
| entity-audit.py | memcore.entities |
✅ |
| topics-validate / expand | memcore.topics |
✅ |
| retain-extract / merge | memcore.ingest |
✅ |
| recall-tree / match | memcore.prefetch |
✅ |
| docs-snapshot / release-check | Hermes cron payload | ⏸ (OS 레벨, 다음 주차) |
이식 1~2일이라고 추정했는데 거의 비슷하게 끝났다. 코드 자체는 한나절, 테스트가 더 걸렸다.
3. bank/ → memcore 마이그레이션
마이그레이션 스크립트(memcore.bank_migrate)를 작성하면서 지킨 원칙:
- READ-ONLY on source —
bank/는 한 글자도 건드리지 않는다. - rsync 스냅샷 — 변환 전에 시점 고정.
- 4-phase parse — 식별 / 청크 / 링크 / 검증.
--incremental— 같은 명령으로 재실행 가능.
실제 실행 결과는 한 줄로 끝났다.
40 files → 236 curated + 4 entities + 15 topics + 514 links, 0 errors
curated 분포: - knowledge 150 - pattern 28 - daily 17 - world 14 - identity 13 - experience 10 - opinion 4
이 분포를 보면 시스템이 무엇을 더 많이 기억하고 있었는지가 한눈에 보인다. 지식과 패턴이 압도적이다. 의견은 의외로 적다.
4. Hermes MemoryProvider 어댑터
~/Hermes/hermes-data/plugins/memory/memcore/__init__.py
MemcoreProvider(MemoryProvider)로 모든 메서드를 구현했다.
- prefetch: memcore.prefetch.search 경유 (토픽 → FTS5 → LIKE 폴백)
- on_session_end: memcore.ingest를 자동 호출
스모크 테스트는 실제 memcore.db를 대상으로 돌렸고 전부 PASS.
5. 테스트 스위트 — 51 / 51
- 정식 테스트 5종: dialectic / decay / lint / entities / topics / bank_migrate
- inline smoke: ingest (11) + prefetch (8) + plugin (9)
- 총 51 tests, 0 failures
테스트가 51개라는 게 중요한 게 아니라, 마이그레이션 도중 회귀를 잡을 수 있는 안전망이 생겼다는 게 중요하다.
6. Strangler Fig 동작 모델 (확정)
이사 전략을 한 번 더 정리하면 이렇다.
- OpenClaw는 계속 굴러간다 (Reflect 03:00 그대로).
memcoreincremental sync를 LaunchAgent로 주기 실행.- Hermes는
memcore만 바라본다. - 검증 통과 → OpenClaw 종료 → memcore가 계승.
- 롤백은 단순 — OpenClaw 재시작.
두 시스템이 같은 진실을 다른 시점에 보는 형태다. 컷오버가 무서운 이유는 이 동기 시점이 어긋날 때이고, 그래서 incremental sync의 정확성이 다음 주차의 핵심 검증 항목이 된다.
정리
Week 1~2 작업의 끝은 "데이터를 한 번 옮기고, 그게 깨지지 않았는지 51개 테스트로 확인했다"로 요약된다. Hermes는 아직 켜지 않았다. 다음 글에서 그 전에 발견한 솔직한 누락을 정리한다.
댓글
댓글 쓰기