eeb2d23b86
memory replace/remove target an entry by old_text but supply the replacement via content — an asymmetric pairing. Callers naturally reach for new_text to mirror old_text (it's exactly the patch tool's old_string/new_string shape), which left content empty and errored 'content is required'. The failure also rendered tersely, making the cause easy to miss and costing a retry. Accept new_text as an alias for content on both shapes: - single-op: coalesce content = content or new_text in memory_tool() + a new_text param wired through the registry handler. - batch ops: content = op.content or op.new_text (and in the approval-gate preview builder). - schema: document the alias on content and add a new_text property to the single-op params and batch item props so strict validators accept it. content wins if both are set. Tests: new_text alias on single add/replace, batch add/replace, and content-wins-over-new_text. 43/43 across memory tool + schema suites. Co-authored-by: Teknium <teknium1@users.noreply.github.com>