v0.2.9

KalyanKS-NLP/llm-engineer-toolkitv0.2.9Jul 22, 2026by het0814

AI Summary

A critical bug-fix release addressing memory-integrity issues, including content being silently wiped by false-positive 'Tags:' matches, phantom session summaries, and timestamp/TTL violations. It also introduces OKF support in the Web UI.

Key Highlights

  • Fixed false-positive 'Tags:' match causing content to be silently wiped
  • Fixed phantom session summaries logged for failed writes
  • Fixed temporal filter fail-open behavior
  • Added OKF (Open Knowledge Format) import support in the Web UI
  • Enabled streaming uploads for both TypeScript SDK and Claude Code integration

New Features

  • OKF import support in the Web UI
  • Streaming uploads for TypeScript SDK and Claude Code integration

Full Release Notes

# Release Notes for v0.2.9

This release fixes a batch of **memory-integrity bugs** - content silently wiped by a false-positive "Tags:" match, phantom session summaries logged for writes that actually failed, timestamp/TTL invariant violations, and temporal-filter fail-open behavior — plus **tags/metadata/provenance preservation** across recall, LangGraph, MCP, and Hermes, streamed uploads for both the TypeScript SDK and the Claude Code integration's transcript parser, and OKF support surfaced in the Web UI.

## New Features

- **OKF in the Web UI** (`memanto/app/ui/static/index.html`, `memanto/app/ui/routes/ui_router.py`)
  - The Migrate tab now supports importing an OKF bundle directly from the
    dashboard, alongside Mem0/Letta/Supermemory.

## Bug Fixes

- **Content silently wiped by false-positive "Tags:" match** (`memanto/app/services/memory_read_service.py`)
  - The wire-format parser split stored memory text on every blank-line-separated
    chunk and dropped any chunk starting with `"Tags: "` — so content that
    legitimately began a paragraph with the literal text `"Tags: "` was silently
    deleted on read. Parsing now partitions strictly into title/content, and
    only strips a trailing tags block when the record actually has tags *and*
    the last blank-line-delimited segment starts with `"Tags: "`.

- **Temporal filter fail-open** (`memanto/app/services/memory_read_service.py`)
  - A silent-fail path in temporal filtering could fall through to returning
    unfiltered results instead of the intended filtered set; fixed to fail
    closed.

- **Phantom session summaries from failed writes** (`memanto/app/routes/memory.py`,
  `memanto/app/utils/validation.py`)
  - `remember`/`batch-remember` logged a memory to the local session Markdown
    summary regardless of whether the underlying Moorcheh write actually
    succeeded. New shared `is_successful_write_result()` helper gates summary
    logging (and batch per-item reporting) on a real success status
    (`queued`/`success`/`ok`), so a failed write no longer produces a phantom
    entry in the session log.

- **Batch upload status now fails closed on unrecognized values** (`memanto/app/services/memory_write_service.py`)
  - Previously any non-empty status from Moorcheh was treated as ambiguous;
    now only `queued`/`success`/`ok` count as successful and anything else is
    explicitly marked `"failed"` with the returned status recorded as the error.

- **Timestamp / TTL invariant violations** (`memanto/app/core.py`,
  `memanto/app/services/memory_write_service.py`)
  - `created_at`/`updated_at` are now normalized to UTC-aware (`as_utc_aware`),
    clamped to "now" if a caller-supplied value is in the future, and
    `created_at` is forced to never exceed `updated_at` — closing a set of
    cases where a bad/aware timestamp from an import or manual edit could
    produce a memory that looks "created after it was updated" or timestamped
    in the future.
  - `expires_at` is now always serialized as an ISO string on the outgoing
    document instead of relying on the object's default `str()`.
  - Pagination offset and aware-datetime comparison bugs in session listing
    (`memanto/app/models/session.py`, `memanto/app/services/session_service.py`)
    fixed as part of the same batch.

- **Tags, metadata, and provenance preservation** (`memanto/app/services/memory_read_service.py`,
  `memanto/cli/commands/memory.py`, `integrations/{langgraph,mcp,hermes-agents}/`)
  - Consolidates four related fixes: Hermes agents no longer strip tags on
    read; `memanto recall` CLI display now shows tags/provenance correctly;
    LangGraph's `MemantoStore` normalizes tags consistently (including a fix
    for comma-containing tag keys and preserving wildcard tag filters); and a
    trailing-"Tags:" suffix leak in read formatting is fixed.
  - MCP `batch_remember` tool now normalizes tags before sending.

- **Streaming uploads** (`sdks/typescript/src/index.ts`, `integrations/claudecode/hooks/_common.py`)
  - TypeScript SDK file uploads are now streamed via a multipart
    `Readable` generator instead of buffering the whole file in memory.
  - The Claude Code integration's transcript reader now streams the JSONL
    transcript line-by-line (bounded `deque` tail) instead of requiring
    `readlines()` to materialize the entire file — matters for long-running
    Claude Code sessions with large transcripts.
  - Read failures during transcript parsing are now logged instead of
    silently swallowed.

- **Export limit validation** (`memanto/cli/client/{direct_client,sdk_client}.py`)
  - `limit_per_type` for `memanto memory export` is now validated (integer,
    1–100) before querying every memory type, instead of failing deep inside
    the export loop on a bad value.

- **UI date formatting** (`memanto/app/ui/static/index.html`)
  - Fixed a date-format bug in the Memory Explorer.

## Tests

- New `tests/test_memory_format.py` covering the tags/content parsing fixes.
- New `tests/test_memory_read_confidence.py` additions, expanded
  `tests/test_api.py`, `tests/test_cli.py`, `tests/test_unit.py` for
  timestamp/TTL invariants, export-limit validation, and write-status gating.
- New/expanded test coverage in `integrations/{langgraph,mcp,hermes-agents,claudecode}/tests/`.

## Full Changelog

Full Changelog: https://github.com/moorcheh-ai/memanto/compare/v0.2.8...v0.2.9