I see product memory as a product model, maintained separately from implementation. In my experience, that works better than letting the coding agent curate its own product memory. The model is a graph of small, connected specs: requirements capturing intent, UI specs, API operations and data entities. A person initiates a change with an intent or feature request. An analyst agent sees both model and code, but its editing scope is the model. Agents then help with three steps: update the model, bring the code into line with it, and verify the implementation against the model. We've built this separation into Reqode. The coding agent reads the model through MCP and can report inconsistencies or other issues as Findings through the same interface, without editing the specifications.