Every saved conversation carried a copy of this build's system prompt at the
head of its messages. Measured on a real file: 1205 characters that nothing
would ever read, because remember() has dropped the saved system message on the
way back in since 2026-09-08 - restoring it wholesale put an OLD prompt back,
and every change to the instructions reached new conversations only.
So the reading half of the rule existed and the writing half did not, and that
is exactly why it survived: nothing behaves differently, the restore already
ignores it, and no test had an opinion. What it is, is a copy of CODE inside a
file of DATA - and the remedy for a stale duplicate is to stop writing it,
rather than to keep remembering to ignore it.
said_only() is now the whole rule, in one place, with both callers going through
it: remember() filtering what it reads, save() filtering what it writes. Written
as one function rather than one filter at each end, because two ends that agree
today are two ends that can stop agreeing.
Nothing has to be migrated. A file written by an older build still carries one,
and is read exactly as it always was - dropped, and replaced by what this build
asks for - and it stops carrying one at the end of the next turn, which is when
a conversation is written down.
Suite 606 green. Four known-bad inputs, four killed: save writing the messages
unfiltered again, remember taking the file's messages wholesale, the filter
keeping the system message, and the filter being too EAGER and dropping tool
results - which would silently shorten somebody's conversation, the same defect
one step further along.