The repo is in better shape than it was in the earlier review.
Notable improvements:
- pinned-message survival is now implemented by re-injecting pinned pre-boundary messages in
src/index.ts acm_searchwithrole: "tool-result"now checks for actualtool-resultparts- the README is clearer and now documents the ACM system reminder and
acm_info bun run typecheckpassesbun run buildpasses
- Medium:
acm_infocan misreport whether the system reminder is enabled.
The plugin correctly resolves reminder enablement from both the environment variable and plugin options in src/index.ts:48-51, but acm_info reports status from the environment variable alone in src/tools.ts:214-215. If the reminder is disabled through opencode.json with systemReminder: false, acm_info will still report Enabled: yes.
- Medium:
acm_repairadvertises backups but does not create them.
acm_repair exposes a create_backup argument in src/tools.ts:929-930, but no backup behavior is implemented in the function body. For a repair tool, that is a meaningful contract mismatch.
- Low:
acm_fetchdocumentation still says it fetches from active context, but the implementation searches full session history.
The description at src/tools.ts:662-664 says active context, but the implementation uses getMessages() in src/tools.ts:672. Given the newer intentional "wayback" behavior, this looks like a docs mismatch rather than a logic bug.
- Low:
acm_diagnose.verboseis declared but unused.
The argument exists in src/tools.ts:867-868, but the implementation does not branch on it.
- Low: the README's hook count is out of date.
README.md says ACM registers three hooks, but the plugin currently registers four: tool, experimental.chat.messages.transform, experimental.chat.system.transform, and event.
- Low: partial-ID matching is broader than the docs imply.
findMsg() in src/tools.ts:23-25 matches exact IDs, suffixes, and arbitrary substrings. Most docs frame this as full ID or trailing partial ID. The broader substring match is convenient, but it can produce ambiguous matches.
- Low: there are still no automated tests.
That is increasingly important now that ACM has stateful behavior across compaction, reminder injection, and surgical repair paths.
- The repo remains small and easy to reason about.
- The separation between
index.ts,tools.ts,store.ts, andclient.tsis still clean. - The system-reminder path is working and now documents the first-turn-after-restart limit nuance.
- The design is still heavily dependent on runtime/session behavior, which makes integration tests more important than unit tests alone.
-
Fix
acm_infofirst so it reports the effective system-reminder state, not just the env-var state. -
Either implement real backup creation in
acm_repairor remove thecreate_backupargument until it exists. -
Update
acm_fetchwording to match the intentional whole-session behavior. -
Update the README hook description so it reflects the current four-hook implementation.
-
Add focused integration tests for:
- pinned-message reinjection across
acm_compact - first-turn vs second-turn system-reminder limit resolution
- compaction marker round-trip behavior
acm_repairstuck-tool repair behavior