chore(release): reflexio-ai v0.2.14#29
Conversation
…install - Add --force-extraction to session-end publish so extraction runs regardless of batch-interval throttling - Redirect publish output to ~/.reflexio/logs/stop-hook.log instead of silently discarding errors - Remove dead stop_hook_active guard (field not in Claude Code payload) - Auto-install Stop hook when expert mode is enabled via setup wizard - Update HOOK.md to reflect all changes
Add 5 high-signal patterns that trigger auto-publish without user input: - Self-recovered tool failures (error + recovery arc) - Retry chains (2+ failures on same operation) - Documentation/behavior gaps (docs say X, reality is Y) - Workarounds for limitations (used alternative approach) - Anomalous results (unexpected zeros, row-count mismatches) Also add end-of-session extraction nudge: suggest /reflexio-extract when session had any friction points.
- test_normal_mode_no_stop_hook: verifies Stop hook absent without --expert - test_expert_mode_installs_stop_hook: verifies Stop hook present with --expert, checks command points to handler.js - test_expert_mode_stop_hook_idempotent: verifies no duplication on repeated install - test_remove_from_dir_cleans_stop_hook: verifies uninstall removes the Stop hook
Stop fires once per turn (every assistant response), causing repeated publishes of the growing transcript and wasteful --force-extraction on every turn. SessionEnd fires once when the session exits — correct for full-session capture. - _merge_hook_config: Stop → SessionEnd - _remove_hook_config: add SessionEnd to removal list (keep Stop for backwards compat with old installs) - handler.js: update JSDoc comments - HOOK.md: update event name, installation example, frontmatter - tests: rename and update all SessionEnd assertions
Root cause: description led with "Search" which framed Reflexio as a search tool, causing Claude to route corrections to its built-in memory system instead of triggering the Reflexio publish flow. Changes: - Lead description with "Publish user corrections" (the missed trigger) - Add when_to_use field with concrete trigger phrases - Explain profile vs playbook: facts publish immediately, procedures publish after user confirmation (explicit or implicit) - Distinguish from Claude's built-in local memory - Add callout in skill body preventing memory/Reflexio conflation - Reorder trigger list: corrections first, search second
Root cause: skill tried to handle both when-to-trigger and how-to-publish, but Claude decides whether to invoke a skill before reading its content. Triggering guidance needs to be in rules (always loaded). Changes: - rules/reflexio.md: add "When to Publish to Reflexio" section with profile/playbook/procedure guidance and confirmation model; soften existing section titles from commanding to guiding tone - skill/SKILL-expert.md: simplify from 235 to 98 lines; keep only how-to (payload formats, correction patterns, end-of-session nudge) - skill/SKILL.md: update description to triggering conditions only per skill creation guidelines - skill/references/: new directory with proactive-patterns.md and server-management.md (heavy content moved out of main skill) - setup_cmd.py: copy references/ dir in expert mode - tests: add test_expert_mode_installs_references and test_normal_mode_no_references
delete_all_*, delete_*_by_ids, delete_*, update_*, and publish_*
methods now clear relevant cache entries so subsequent list/get
calls return fresh data instead of stale cached results.
Changes:
- cache.py: add clear() and invalidate(method_name) methods;
store method_name in each entry for prefix-based invalidation
- client.py: call cache.invalidate("get_profiles") on profile
mutations, cache.invalidate("get_agent_playbooks") on playbook
mutations, cache.clear() on nuclear deletes (delete_all_interactions,
delete_all_playbooks)
- tests: 7 new tests for clear, invalidate, and client integration
reflexio interactions list without --user-id failed with a Pydantic validation error because GetInteractionsRequest requires user_id. Now uses require_user_id() to fall back to REFLEXIO_USER_ID env var, matching the pattern used by other list commands.
- setup_cmd.py: shell-quote all hook paths with shlex.quote for paths with spaces; remove SessionEnd hook + expert artifacts (references/, reflexio-extract command) when re-installing in normal mode; extract _remove_reflexio_hook helper - handler.js: use positional args ($1..$5) instead of template literal interpolation in sh -c to prevent shell injection - HOOK.md: fix inaccurate docs — tool_use blocks ARE preserved as tools_used metadata, not skipped - server-management.md: add language identifier to code fence - tests: add test_normal_reinstall_removes_expert_artifacts
|
Caution Review failedPull request was closed or merged during review 📝 WalkthroughWalkthroughThis release adds version 0.2.14 with cache invalidation management, expert mode setup support for Claude Code hooks, SessionEnd event integration, and comprehensive documentation updates. Changes include cache clearing/invalidation methods, client-side cache management after mutations, enhanced CLI setup logic for expert configuration, and updated hook and skill documentation. Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
|
Version bump pushed directly to main in 9813a8a. PR no longer needed. |
Summary
Version bump: reflexio-ai 0.2.13 → 0.2.14
What's in 0.2.14
SessionEnd(once per session) instead ofStop(per-turn);--force-extraction; logging to~/.reflexio/logs/stop-hook.log; shell-safe positional argsrules/reflexio.md(always loaded); skill simplified from 235 → 98 lines; references extracted toreferences/clear()andinvalidate()methods; 12 mutation methods now invalidate stale cachereflexio interactions listfalls back toREFLEXIO_USER_IDenv varTest plan
reflexio --version→ 0.2.14pip install reflexio-ai==0.2.14→ OKSummary by CodeRabbit
New Features
Bug Fixes
Documentation