From 9b1b99ea21a558ab12c9fa42556be4b244c55ee9 Mon Sep 17 00:00:00 2001 From: dtzp555 Date: Mon, 16 Mar 2026 17:33:22 +1000 Subject: [PATCH] =?UTF-8?q?release:=20v2.3.0=20=E2=80=94=20first=20fully?= =?UTF-8?q?=20stable=20release?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bump version to 2.3.0 across package.json, openclaw.plugin.json. Add comprehensive CHANGELOG documenting all bugs found and fixed during the v2.x development cycle. Co-Authored-By: Claude Opus 4.6 --- CHANGELOG.md | 102 +++++++++++++++++++++---------------------- openclaw.plugin.json | 2 +- package.json | 2 +- 3 files changed, 52 insertions(+), 54 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 60a58f9..ae091c5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,75 +1,73 @@ # Changelog +## v2.3.0 — 2026-03-16 + +### Summary +First **fully stable** release. All previous versions had critical bugs causing silent failure on gateway deployments. + +### Fixed +- **Workspace resolution** (`_ctx.workspaceDir`) — Hooks now read workspace path from the hook context parameter instead of `api.runtime.workspaceDir` (which was always `undefined` in gateway mode). This was the root cause of the plugin silently doing nothing on all gateway/Telegram/Discord deployments. +- **Channel metadata stripping** — User messages from Telegram/Discord are cleaned of `Conversation info (untrusted metadata)` prefixes before saving, preventing garbage in the state file. +- **Recovery death spiral** — Short conversations (< 2 real user messages) no longer overwrite existing meaningful state. Previously: tell secret → `/new` → model ignores injected context → "I don't remember" → `agent_end` overwrites secret with failure → permanent data loss. +- **State staleness** — Removed "skip if existing state is meaningful" guard that prevented state from ever updating after the first write. + +### Debugging timeline +1. Hooks not firing → `api.runtime.workspaceDir` was `undefined` → fix: use `_ctx.workspaceDir` +2. State file full of Telegram metadata → fix: strip `Conversation info` / `Sender` prefixes +3. State never updating → "Existing state is meaningful, skipping" → fix: always update +4. Good state overwritten by bad → fix: require ≥ 2 real user messages to overwrite + +### Tested on +- macOS: GPT-5.4 (openai-codex) ✅ +- Oracle Cloud Linux: MiniMax M2.5 ✅ +- Multiple OpenClaw agents via Telegram ✅ + +### Known limitations +- State extraction uses last user/assistant message only (not full summary) +- Models that ignore `prependSystemContext` won't surface recovered state (state file is preserved, not overwritten). Adding recovery instructions to BOOTSTRAP.md helps. + +--- + +## v2.2.0 — 2026-03-16 + +### Added +- `package.json` with npm-style metadata and `openclaw.type: "plugin"` provenance +- `plugins.allow` auto-configuration in `post-install.sh` +- GitHub release with comparison table vs vector-DB plugins + +### Fixed +- "plugins.allow is empty" gateway warning +- "loaded without install/load-path provenance" gateway warning + +--- + ## v2.1.0 — 2026-03-16 -### Summary -Clean install experience: eliminates gateway provenance warnings for fresh installations. - ### Added -- `package.json` — proper npm-style metadata with `openclaw.type: "plugin"` provenance field -- `plugins.allow` auto-configuration in `post-install.sh` — registers plugin in OpenClaw trust list +- `openclaw.plugin.json` manifest with `configSchema` +- `scripts/post-install.sh` one-command installer ### Changed -- `post-install.sh` now copies `package.json` to extensions directory -- `openclaw.plugin.json` now includes `source` field pointing to GitHub repo -- README updated with `plugins.allow` documentation and install step - -### Fixed -- "plugins.allow is empty; discovered non-bundled plugins may auto-load" warning -- "loaded without install/load-path provenance; treat as untracked local code" warning +- README updated with "Why this plugin?" section --- ## v2.0.0 — 2026-03-15 ### Summary -Major architecture upgrade: from prompt-based skill to **lifecycle plugin**. -State injection and extraction now happen automatically via OpenClaw hooks, -making recovery model-agnostic and reliable across all providers. +Architecture upgrade: skill (prompt-based) → **plugin** (lifecycle hooks). ### Added -- `index.js` — plugin entry point with 5 lifecycle hooks -- `openclaw.plugin.json` — plugin manifest with configSchema -- Automated installer (`scripts/post-install.sh`) that handles copy + config + restart - -### Changed -- Architecture: skill (prompt-based) → plugin (hook-based) -- `before_agent_start` hook injects `CURRENT_STATE.md` into system context automatically -- `agent_end` hook auto-extracts working state from conversation -- `before_compaction` hook preserves state through context compression -- `before_reset` hook archives state before `/new` -- `session_end` hook ensures state file exists -- README fully rewritten for plugin architecture -- post-install.sh rewritten for plugin installation flow +- `index.js` with 5 lifecycle hooks: `before_agent_start`, `before_compaction`, `before_reset`, `agent_end`, `session_end` +- Automated state injection via `prependSystemContext` +- Auto-extraction of working state from conversation ### Removed - Dependency on model cooperation for state read/write -- Reliance on `skillsSnapshot` cache clearing - -### Validated -- Tested with MiniMax M2.5 and GPT-5.4 on OpenClaw 2026.3.12 -- `/new` recovery: agent correctly surfaces recovered state -- Multi-turn state: conversation context (secrets, scheduled events) persists across resets --- -## v0.3.0-probe — 2026-03-13 +## v1.0.0 — 2026-03-14 ### Summary -Transition from skill-only to dual-form package (skill + lifecycle plugin probe). - -### Added -- `plugin/lifecycle-prototype.ts` -- `references/phase2-hook-validation.md` - -### Changed -- Repository direction clarified: primary path is lifecycle plugin -- ContextEngine documented as future option, not v1 default - -### Validated -- Startup continuity injection on resident subagents -- Hook wiring confirmed without `read` tool dependency - -### Known limitation -- Skill-based approach unreliable: models can ignore recovery instructions -- This limitation is resolved in v2.0.0 by moving to hooks +Initial release as a skill (SKILL.md only). Required model to voluntarily read/write `CURRENT_STATE.md`. Did not work reliably with weaker models. diff --git a/openclaw.plugin.json b/openclaw.plugin.json index 06475d0..6387687 100644 --- a/openclaw.plugin.json +++ b/openclaw.plugin.json @@ -2,7 +2,7 @@ "id": "memory-continuity", "name": "Memory Continuity", "description": "Preserves working state across /new, reset, compaction, and gateway restarts via a simple markdown checkpoint file.", - "version": "2.2.0", + "version": "2.3.0", "source": "https://github.com/dtzp555-max/memory-continuity", "configSchema": { "type": "object", diff --git a/package.json b/package.json index f32fa8b..b76e02c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "memory-continuity", - "version": "2.2.0", + "version": "2.3.0", "description": "Zero-dependency memory continuity for OpenClaw — plain markdown, lifecycle hooks, no vector DB.", "main": "index.js", "type": "module",