Persist one memory record. Single atomic append.
Atomicity
- (a) Indivisible: one Need → one RST directive appended → filelocked
- (b) Input: type, title, body, tags, confidence, scope, links, source, id?. Output: created need (via backend.append_need) or ValueError on duplicate id
- (c) Objective reward:
backend.find_by_id(id) is not None AND need content matches input
- (d) Reusable: every capture flow invokes this once per memory
- (e) No interference: filelock serialises writes; no shared in-memory state