memory-bridge: remember.sh hung silently instead of reporting a down core - #2279
Merged
Conversation
…down core
The memory tool stored NOTHING and said NOTHING, which is the worst possible
combination for a system whose job is preserving corrections.
Two defects in one line:
if "$CONTINUUM" memory/remember ... 2>/dev/null | grep -q '"appended"...'
1. NO TIMEOUT. `memory/remember` dispatches to a core; with none answering, the
CLI cold-STARTS one (a full Rust build via start-server.sh), so this blocked
for minutes. Measured 2026-08-13: an agent's `remember` sat 300s and was
killed by the caller (exit 143). Nothing stored, nothing reported.
2. `2>/dev/null` DISCARDED THE CAUSE. The fallback could only GUESS ("is the
server up?"), throwing away the CLI's own stderr — the one diagnostic that
would have named it — on every failure.
Together they made the engram path look permanently broken, and it was never
investigated because the failure had no voice. An agent believes its correction
is durable, drops it from context, and re-learns the same lesson next session.
That is precisely the failure this plugin exists to prevent, in the plugin.
Now: bounded call (REMEMBER_TIMEOUT, default 20s), stderr captured and REPORTED,
and the distinct outcomes named — a timeout says the core did not answer and
NOTHING WAS STORED; a non-zero exit prints the CLI's actual error. Both say
"nothing was stored" explicitly, because silence is what let this persist.
Not a fix for the underlying cause: `continuum start` shells to a build script,
so a cold core is minutes away and callers cannot tell that from a hang. That
belongs with the core lifecycle work (an install-registered supervisor + a
`start` that launches the INSTALLED server binary rather than compiling).
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q4NU4VNiELPQfBpCacDZGc
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The memory tool stored nothing and said nothing — the worst combination for a system whose job is preserving corrections.
Two defects in one line:
memory/rememberdispatches to a core; with none answering the CLI cold-starts one (a full Rust build viastart-server.sh), so this blocked for minutes. Measured: aremembersat 300s and was killed by the caller (exit 143).2>/dev/nulldiscarded the cause. The fallback could only guess ("is the server up?"), throwing away the CLI's own stderr — the one diagnostic that would have named it.Together they made the engram path look permanently broken, and it was never investigated because the failure had no voice. An agent believes its correction is durable, drops it from context, and re-learns the same lesson next session — precisely what this plugin exists to prevent, happening inside the plugin.
Now
Bounded call (
REMEMBER_TIMEOUT, default 20s), stderr captured and reported, and the outcomes named distinctly — a timeout says the core did not answer and NOTHING WAS STORED; a non-zero exit prints the CLI's real error. Both state "nothing was stored" explicitly, because silence is what let this survive.Not the underlying cause
continuum startshells to a build script, so a cold core is minutes away and callers can't distinguish that from a hang. That belongs with core lifecycle work — an install-registered supervisor, and astartthat launches the installed server binary instead of compiling.bash -nclean.