Skip to content

Releases: chouswei/MemNet

v0.2.32 — CRITICAL HOTFIX for 0.2.31 (unterminated docstring)

Choose a tag to compare

@chouswei chouswei released this 07 Jul 10:27

Critical hotfix — 0.2.31 was completely unusable

Fixed

  • memnet/serve_client.py unterminated module docstring. The 0.2.31 client-API documentation update (#2) added closing paragraph text to the module docstring but omitted the closing """, which wrapped from __future__ import annotations and the rest of the module inside the string literal. Every memnet invocation — including memnet --help — raised:
    SyntaxError: unterminated triple-quoted string literal
    
    Closes #9.

Added

  • tests/test_packaging_sanity.pyast.parse's every .py file under src/, imports the top-level memnet/memnet_mcp modules, and walks + imports every submodule of memnet via pkgutil.walk_packages. This class of bug (valid-looking edit, broken at actual import time, never exercised by unit tests that only test individual functions) can no longer ship silently.
  • Pre-publish verification: this release was smoke-tested by installing the built wheel into a clean virtualenv and running import memnet + memnet --help before uploading, not just twine check (which does not execute code).

Action required

If you installed memnet-llm==0.2.31, upgrade immediately:

pip install -U memnet-llm==0.2.32

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

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/

v0.2.29

Choose a tag to compare

@chouswei chouswei released this 29 Jun 09:51

Summary

  • 10-beat live smoke passed on session mn_1d2a37a6 (script+prose full pipeline).
  • Beat errors propagate to UI/CLI instead of silent None.
  • HUD built after successful beat_turn_finish; VIT01 honours update_lines with auto satiety downgrade.
  • beat_turn_finish warm uses NOVEL_WARM_DEPTH so slot-6 library options validate correctly.
  • Opening beat: mobile sends { start: true }; continue reserved for prose-stage resume.

Test plan

  • pytest novel suite (59 tests)
  • python scripts/run_beats_smoke.py 10 shenjia_caifa — 0 failures

v0.2.28 — beat progression & seed-driven prompts

Choose a tag to compare

@chouswei chouswei released this 29 Jun 09:00

Summary

  • Fix beat chapter落盤:world 路徑同步、缺 chapter 硬失敗、continuation anchor 優先世界目錄
  • Seed-driven HUD(body_state)與飽食/正文衝突檢查
  • beat_prompt 不再 hardcode 魂穿/圖書館/文風;改由 presentation.contracts 注入
  • 種子補 @chp tag map(修復 bootstrap 整批 seed 載入失敗)
  • 武學 catalog 全名驗證與邊界列更名

See CHANGELOG.md for full details.

v0.2.27 — EDG acquaintance & multi-world mobile

Choose a tag to compare

@chouswei chouswei released this 29 Jun 07:42

Added

  • entity_knowledge@edg SSOT for holder acquaintance; depth-gated POV name masking
  • party_sheet — roster panel with EDG-gated NPC names
  • novel-mobile multi-world — world registry/slot, optional auth, E2E script

Changed

  • knowledge_graph — EDG-based view (@knh deprecated)
  • presentation / beat_prompt — acquaintance masking; prose POV (旁白「你」、內心才「我」)
  • novel_mobile — per-world sessions, beat jobs, mobile UX fixes

See CHANGELOG.md for full notes.

v0.2.25

Choose a tag to compare

@chouswei chouswei released this 28 Jun 07:26

Added

  • NOVEL_WARM_MAX_ROWS (150) — warm reads no longer truncate USR21 prose advisory at 55 rows.

Changed

  • novel-mcp / beat pipeline defaults use 150; operator docs require cursor_beat.py for play (MCP beat tools for SDK/tests only).

See CHANGELOG.md.

v0.2.24

Choose a tag to compare

@chouswei chouswei released this 27 Jun 17:27

[0.2.24] ??2026-06-27

Added

  • novel-seed-spec.md ??normative SEED planning principles (禮2 layering, three EDG planes, opening scene contract, god-realm vs play).
  • Player setup pipeline ??player_profile.py, player_setup.py, setup_graph.py, setup_constants.py, opening_loadout.py; MCP read_player_setup, commit_player_profile, commit_opening_pick.
  • Generic catalog schema ??catalog_schema.py, martial_catalog_expand.py, applications/novel_cursor/catalog_specs/; instance-driven genre validation (no Jin Yong hardcoding in novel_mcp core).
  • Warm enrich ??warm_supplement.py stage-aware merge; presentation opening_scene / biz / scn_code; warm_index BIZ/SCN rows.
  • cursor_beat ??--setup, --name, --gender, --arts; beat_orchestrator.py, catalog_expand.py, chat_thread.py, llm_client.py, wire_parse.py.
  • Shenjia martial catalog ??application-notes/novel-shenjia-martial-catalog.md; seed USR69/USR70 opening contract.
  • Tests ??opening loadout, player profile, setup guidance, warm supplement, seed LAW budget, martial catalog expand, wire parse, chat thread, edg_time.

Changed

  • scripts/novel_bootstrap.py ??generic --app bootstrap; optional catalog expand; removed bootstrap_shenjia.py / shenjia_bootstrap.py.
  • novel-shenjia-initial-state.md ??Engine/World split maintenance; opening scene domain wiring (USR70, LAW-OLN01 opening_scn); setup USRs 60??7; LAW budget ??0.
  • Tag map ??@ART, @WUX, @MWU for martial loadout.
  • beat_pipeline ??setup gate integration; prose-stage SCR enrich from read list.

Fixed

  • Setup wire ??USR/PLR 4-field shape; PLR without extra recycle field; EDG add vs update on bootstrap.
  • catalog_expand ??complete_messages API for LLM expand.
  • test_beat_pipeline ??patch play_context.run_memnet for enrich isolation.

v0.2.23 — dual-loop SDK beat agents

Choose a tag to compare

@chouswei chouswei released this 27 Jun 11:15

Added

  • Dual-loop Cursor SDK beat agents — separate persistent script (編劇) and prose (作者) agents; ids under novel-output/<slug>/agents/
  • agent_session.py — create+primer or Agent.resume, stale-id recovery
  • play_context.py — script_beat_prepare / prose_beat_prepare (USR23 handoff gate)
  • MCP tools — script_beat_prepare, prose_beat_prepare
  • chapter_io — last_committed_paragraph for continuation_anchor
  • tests — test_play_context, test_agent_session_paths, test_beat_prompts

Changed

  • cursor_beat.py — dual-phase orchestrator; --script-only, --prose-only, --reset-agents, --continue
  • beat_prompt.py — split script/prose primers and turns
  • llm-novel-cursor-sdk.md — dual-loop operator SSOT

Full notes: CHANGELOG.md

v0.2.22

Choose a tag to compare

@chouswei chouswei released this 27 Jun 10:14

Added

  • applications/novel_cursor/ — generic Cursor SDK beat runner; \NOVEL_BEAT_RESULT\ contract; paths from seed USR14/USR15
  • application-notes/llm-novel-cursor-sdk.md — operator guide
  • tests/test_novel_cursor_config.py

Fixed

  • novel_mcp.beat_pipeline — USR23 beat_stage persist (_usr_beat_stage_row)

Changed

  • Generic novel-writer chat rule; shenjia_caifa thin shim

Full notes: CHANGELOG.md

v0.2.21 — fix mem_store test fixtures

Choose a tag to compare

@chouswei chouswei released this 27 Jun 07:50

Fixed

  • tests/test_mem_store.py — remove @LAW from user tag-map fixtures; LAW is a fixed tag. Restores linked-law scope, context walk, and all-law scope tests.

Full pytest suite (149 tests) green.