Skip to content

v4.0.0

Choose a tag to compare

@JinHo-von-Choi JinHo-von-Choi released this 13 May 14:21
· 238 commits to main since this release

v4.0.0은 v3.2.0 이후의 모든 patch·minor 변경을 단일 메이저 릴리즈로 통합한다. 외부 호출자 인터페이스와 DB 스키마는 호환된다. major 표시는 storage 어댑터 계층 도입과 lib/memory 6서브디렉토리 재편 등 내부 surface가 새로 추가됐기 때문이다.


Added

  • lib/storage/ 어댑터 계층. getStorage() 팩토리가 MEMENTO_STORAGE 환경변수에 따라 PgVectorStore(기본) 또는 SqliteVecStore(v4.1 본격 구현 예정 stub)를 반환한다. 인터페이스: query / queryAsAgent / transaction / migrate / close + engine / vectorSupport 프로퍼티.
  • lib/memory/read/SearchScope.js. workspace·caseId·resolutionStatus·phase·affect·keyId를 캡슐화한 값객체. L1/HotCache/L2/L3/Graph 검색 레이어가 처음부터 정합 필터링한다.
  • lib/memory/read/SearchSideEffects.js. commitSearchSideEffects(query, sq, cleanResult, ctx) → searchEventId 함수로 검색 이벤트 영속화·SearchParamAdaptor 학습을 격리.
  • lib/llm/index.jsdispatchChain(chain, prompt, options, deps) export. llmJson은 chain 빌드·redact만 담당하고 dispatcher에 위임.
  • scripts/lint-migrations.js + npm run lint:migrations. 신규 마이그레이션 파일의 body-only 규약과 파일명 형식을 PR 시점에 강제.
  • 신규 환경변수: MEMENTO_REMEMBER_ATOMIC, MEMENTO_CASE_BACKPROP_ENABLED, MEMENTO_STORAGE, MIGRATION_LINT_FROM.
  • 신규 문서: docs/concurrency.md, docs/features.md, docs/migration-conventions.md, docs/operations/agent-worktree.md, docs/operations/upstream-porting.md.

Changed

  • MemoryRememberer.remember의 PolicyRules 게이트 평가를 _runPolicyGate 헬퍼로 통일. dryRun·atomic·non-atomic 분기 모두 동일 시점에 평가하며 hard gate(api_keys.symbolic_hard_gate=true) 위반 시 SymbolicPolicyViolationError를 throw해 트랜잭션 시작을 차단한다. apiKeyStore 조회 실패는 fail-open.
  • MemoryRememberer._finalizeRemember 응답에 validation_warnings 노출. atomic·non-atomic 응답 형식이 정합화됐다.
  • MemoryConsolidator._mergeDuplicates 그룹 키를 (key_id, workspace, content_hash)로 한정. WHERE key_id IS NOT NULL로 master 키 자동 병합 제외. linked_to UPDATE와 store.delete에 key_id 전달. 그룹 동질성 어설션 추가.
  • MemoryConsolidator._runConsolidationCycle을 선언형 stageDefs 배열로 재구성. 21개 stage. TOTAL_STAGES = stageDefs.length. SSE/관리 콘솔 진행률 정합.
  • lib/memory/ 14개 핵심 모듈을 6 서브디렉토리(read/, write/, link/, consolidate/, embedding/, signals/)로 분류 이동. 기존 위치(lib/memory/<File>.js)에 stub re-export 14개 유지로 외부 import 경로 호환. 신규 코드는 직접 서브디렉토리 경로 권장.
  • FragmentSearch의 부작용 처리를 SearchSideEffects 모듈로 외부화. 메서드 추출(v3.8.0) → 모듈 외부화(v3.9.0) 두 단계. _searchEventId 동기 반환 계약 유지.
  • FragmentSearch._executeSearch의 후처리 보정 4블록(workspace/caseId/resolutionStatus/phase/affect) 제거. SearchScope contract 적용으로 검색 레이어가 처음부터 정합 결과를 반환한다.
  • CaseRewardBackprop.backprop이 매 호출 시 process.env.MEMENTO_CASE_BACKPROP_ENABLED를 평가. 기본 off, 호출이 즉시 반환되어 DB·메트릭 영향 0. 런타임 토글 가능.
  • lib/llm/util/parse-json.js에 reasoning 모델(MiniMax-M2.7, DeepSeek-R1, Qwen-QwQ 등) 응답의 <think>...</think> 사전 제거 도입. 닫힘 태그만 남은 비대칭 응답도 처리.
  • package.json test:cinpm test && npm run test:integration으로 변경. 통합·e2e 테스트가 CI 단일 게이트에 포함된다.
  • scripts/migrate.js의 인라인 BEGIN/COMMIT·schema_migrations INSERT 제거 정규식을 삭제하고, 기존 14개 마이그레이션 파일을 body-only 규약으로 일괄 normalize. opclass placeholder 치환은 유지.
  • docs/features.md 실험 플래그 표 정합화. 실험 플래그(SpreadingActivation, CaseRewardBackprop)와 dual-mode/항상 활성(NLIClassifier, AutoReflect, ReconsolidationEngine, storage 어댑터)을 분리.

Tests

  • 신규 회귀 가드 케이스 누적 다수. 핵심:
    • tests/unit/atomic-remember-policy-gate.test.js — atomic+hard gate+dryRun 5 케이스
    • tests/unit/consolidator-merge-tenant-scope.test.js_mergeDuplicates SQL/scope 6 케이스
    • tests/unit/consolidator-stage-declarative.test.js — stageDefs 산출 + progress 정합 4 케이스
    • tests/unit/llm-dispatcher-concurrency.test.js 재작성 — dispatchChain을 실제 검증(인라인 mirror 제거)
    • tests/unit/llm-dispatcher-no-inline-mirror.test.js — 인라인 mirror 재발 방지 정적 가드
    • tests/unit/fragment-search-side-effect-split.test.js — SearchSideEffects 외부화 정적 가드
    • tests/unit/search-scope-contract.test.js — SearchScope contract + 후처리 보정 잔존 0
    • tests/unit/storage-adapter.test.js — 어댑터 인터페이스/팩토리/not-implemented throw
    • tests/unit/case-reward-backprop.test.js — ENV 활성·미설정·false 명시 3축 (7 케이스)
  • 누적 단위 테스트 영향권 회귀 0.

Docs

  • v4.0 기준 단일 sweep으로 17개 문서 정합화. 본문 갱신 대상: README.md, SKILL.md, CONTRIBUTING.md, docs/architecture.md/.en.md, docs/internals.md/.en.md, docs/concurrency.md, docs/features.md, docs/api-reference.md/.en.md, docs/configuration.md/.en.md, docs/INSTALL.md/.en.md, docs/testing.md, docs/admin-console-guide.md.

호환성·이식 안내

  • 외부 호출자 인터페이스(search 응답, _searchEventId, remember 응답, recall 응답) 무변경.
  • DB 스키마 무변경.
  • 기존 import { X } from "lib/memory/<File>.js"는 stub re-export로 동일하게 동작. 신규 코드는 lib/memory/<sub>/<File>.js 직접 경로 권장.
  • lib/storage/ 어댑터 도입. 기존 데이터 액세스 코드는 그대로 동작. 호출 사이트의 어댑터 마이그레이션은 v4.1에서 점진 수행.

v4.x 후속

  • v4.1: SqliteVecStore 본격 구현 (sqlite-vec npm 의존, SQLite 마이그레이션 변환, lite 모드 e2e). 기존 lib/memory/* 호출 사이트의 getStorage() 어댑터 마이그레이션.
  • v4.x: lib/memory/ stub re-export 14개의 점진 제거(외부 호출 사이트가 서브디렉토리 경로로 직접 import 전환 후).

상세 커밋 히스토리: 8c4fb81(v4.0.0), 25eb61f, b9f312d, 345d511, 79d741c, 7d49215, ea1e1b3, 1e9ac29, b8275c5, aadee7a, cc6b191 (origin/main).