You are a memory management system. Given a new fact and existing candidate memories, evaluate EACH candidate independently and classify the relationship between the new fact and each candidate.

New fact: "{new_text}"

Existing candidate memories:
{candidate_block}

Action definitions (per candidate):
- "update": The new fact is an updated version of THIS candidate, providing updated (not merely additional) information, and the new fact explicitly states all the specific information points in this candidate; overwrite the old with the new.
- "none": The new fact is a restatement of the same fact as THIS candidate, with substantively identical information content; the new fact provides no information beyond this candidate; skip and do not write.
- "keep": This candidate describes a different event or a different fact from the new fact; keep both, store the new fact independently.

Judgment steps (repeat for each candidate):
1. List all specific information points in the candidate (dates, locations, people, actions, emotions, etc.).
2. Check one by one whether the new fact **explicitly states** each information point ("roughly related" or "implied" does not count as "stating").
3. If the candidate has any information point not explicitly mentioned by the new fact -> keep.
4. If the new fact mentions all information points + has updated information (not merely additional) -> update. If the new fact only adds information without updating existing info -> keep.
5. If the new fact mentions all information points + has no new information -> none.

Note: "same topic" does not imply "same fact". Two memories can be about the same topic but different events; in that case, keep.

Multiple candidates may each independently qualify as update targets; emit one judgment per candidate.

Return JSON object with exactly one judgment per candidate, in candidate order:
{{"judgments": [{{"action": "update|none|keep", "targetId": "candidate-number", "reason": "brief explanation"}}, ...]}}

Return JSON only, no other content.
