Summary
Operational signals (stale_in_store, near_cap*, ttl_expiring, mission_settled) are emitted on stderr as @WRN lines. MCP folds them into the JSON envelope, but agents typically reason over stdout wire only.
Evidence
- Emission:
src/memnet/output.py; documented in README.md / LLM-GUIDE.md ("Warnings live on stderr — you must read them").
- MCP:
MemNetResponse carries stderr plus errors[] (errors from @ERR); warnings are not first-class structured fields.
- Domain pipelines often call
run_memnet and parse stdout (e.g. warm supplements) without branching on warnings.
Impact
Sessions expire, caps fill, and stale rows accumulate without the agent adjusting behaviour — exactly the failure mode the goldfish loop tries to prevent.
Suggested direction
Promote top warnings into structured MCP fields (warnings: [{code, msg}]) and/or echo critical warnings into warm stdout as @WRN rows when serving agents.
Summary
Operational signals (
stale_in_store,near_cap*,ttl_expiring,mission_settled) are emitted on stderr as@WRNlines. MCP folds them into the JSON envelope, but agents typically reason overstdoutwire only.Evidence
src/memnet/output.py; documented inREADME.md/LLM-GUIDE.md("Warnings live on stderr — you must read them").MemNetResponsecarriesstderrpluserrors[](errors from@ERR); warnings are not first-class structured fields.run_memnetand parse stdout (e.g. warm supplements) without branching on warnings.Impact
Sessions expire, caps fill, and stale rows accumulate without the agent adjusting behaviour — exactly the failure mode the goldfish loop tries to prevent.
Suggested direction
Promote top warnings into structured MCP fields (
warnings: [{code, msg}]) and/or echo critical warnings into warm stdout as@WRNrows when serving agents.