Skip to content

v0.2.31 — 8 issues resolved (registry, client API, snapshot diagnostics, ingest rollback, exit_code, read_list, sliding TTL)

Choose a tag to compare

@chouswei chouswei released this 07 Jul 09:45

8 issues resolved — MemNet core reliability pass

All changes preserve public API compatibility. Core test suites pass.

Fixed

  • #1 registry namingget/removeget_entry/remove_entry (avoids builtin shadowing).
  • #2 client surfaceserve_client.dispatch is now the documented canonical entry point; low-level TCP helpers in serve are explicitly internal.
  • #3 remote snapshot diagnosticssession_load / load_snapshot now emit snapshot_not_found|<path>|serve_cwd=<...> on FileNotFoundError, making cross-host path mismatches obvious.
  • #4 ingest rollback cost — replaced full-store to_jsonl_rows snapshot with O(batch) incremental journal (added ids + replaced Records). Rollback is now proportional to batch size, not store size (estimated 50–500× win on large stores).
  • #5 exit_code on per-line errors — both inline (_run_inline) and TCP serve (_handle_request) paths now capture the app(...) return value for typer.Exit, ensuring exit_code is non-zero when any line is rejected (FIELD_COUNT, unknown_tag, etc.).
  • #7 enumeration path — added read_list MCP tool (and documented read list --tag) as the supported way to list rows by tag without prior IDs. query_walk docstrings redirect to it.
  • #8 TTL expiryget_session implements sliding TTL: every successful access extends expires_at by the original ttl_minutes. Long-lived sessions (novel-rpg world state) no longer expire silently.

Changed (by design)

  • #6 TagMap immutability — confirmed: schema is fixed at session open. Runtime mutation is unsupported and dangerous (desync risk with parser/emitter, snapshot ambiguity). Closed with rationale; the hand-edit workaround remains unsupported.

Install

pip install -U memnet-llm==0.2.31

PyPI: https://pypi.org/project/memnet-llm/0.2.31/