Releases: chouswei/MemNet
Releases · chouswei/MemNet
Release list
v0.2.32 — CRITICAL HOTFIX for 0.2.31 (unterminated docstring)
Critical hotfix — 0.2.31 was completely unusable
Fixed
memnet/serve_client.pyunterminated module docstring. The 0.2.31 client-API documentation update (#2) added closing paragraph text to the module docstring but omitted the closing""", which wrappedfrom __future__ import annotationsand the rest of the module inside the string literal. Everymemnetinvocation — includingmemnet --help— raised:Closes #9.SyntaxError: unterminated triple-quoted string literal
Added
tests/test_packaging_sanity.py—ast.parse's every.pyfile undersrc/, imports the top-levelmemnet/memnet_mcpmodules, and walks + imports every submodule ofmemnetviapkgutil.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 --helpbefore uploading, not justtwine 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.32v0.2.31 — 8 issues resolved (registry, client API, snapshot diagnostics, ingest rollback, exit_code, read_list, sliding TTL)
8 issues resolved — MemNet core reliability pass
All changes preserve public API compatibility. Core test suites pass.
Fixed
- #1 registry naming —
get/remove→get_entry/remove_entry(avoids builtin shadowing). - #2 client surface —
serve_client.dispatchis now the documented canonical entry point; low-level TCP helpers inserveare explicitly internal. - #3 remote snapshot diagnostics —
session_load/load_snapshotnow emitsnapshot_not_found|<path>|serve_cwd=<...>onFileNotFoundError, making cross-host path mismatches obvious. - #4 ingest rollback cost — replaced full-store
to_jsonl_rowssnapshot 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 theapp(...)return value fortyper.Exit, ensuringexit_codeis non-zero when any line is rejected (FIELD_COUNT, unknown_tag, etc.). - #7 enumeration path — added
read_listMCP tool (and documentedread list --tag) as the supported way to list rows by tag without prior IDs.query_walkdocstrings redirect to it. - #8 TTL expiry —
get_sessionimplements sliding TTL: every successful access extendsexpires_atby the originalttl_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.31v0.2.29
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 honoursupdate_lineswith auto satiety downgrade. beat_turn_finishwarm usesNOVEL_WARM_DEPTHso slot-6 library options validate correctly.- Opening beat: mobile sends
{ start: true };continuereserved for prose-stage resume.
Test plan
-
pytestnovel suite (59 tests) -
python scripts/run_beats_smoke.py 10 shenjia_caifa— 0 failures
v0.2.28 — beat progression & seed-driven prompts
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
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
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.pyfor play (MCP beat tools for SDK/tests only).
See CHANGELOG.md.
v0.2.24
[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; MCPread_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 innovel_mcpcore). - Warm enrich ??
warm_supplement.pystage-aware merge;presentationopening_scene /biz/scn_code;warm_indexBIZ/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; seedUSR69/USR70opening 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
--appbootstrap; optional catalog expand; removedbootstrap_shenjia.py/shenjia_bootstrap.py. - novel-shenjia-initial-state.md ??Engine/World split maintenance; opening scene domain wiring (
USR70,LAW-OLN01opening_scn); setup USRs 60??7; LAW budget ??0. - Tag map ??
@ART,@WUX,@MWUfor 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_messagesAPI for LLM expand. - test_beat_pipeline ??patch
play_context.run_memnetfor enrich isolation.
v0.2.23 — dual-loop SDK beat agents
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
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
Fixed
- tests/test_mem_store.py — remove
@LAWfrom user tag-map fixtures;LAWis a fixed tag. Restores linked-law scope, context walk, and all-law scope tests.
Full pytest suite (149 tests) green.