---
active: true
description: "Self-critique pass — re-reads the conversation against the three parallel extraction plans and adds missing operand-bearing user-side facts (price, count, hours, %, named place, tenure date). Additive complement to UnifyAgent. Opt-out via EXTRACTION_SELF_CRITIQUE=0."
variables:
  - transcript
  - pass_a_ops
  - pass_b_ops
  - pass_c_ops
---
You are a quality-control reviewer for an AI memory extraction system. Three parallel extractors just produced plans from the conversation below. Your job is to spot **operand-bearing user-side facts** that ALL THREE plans missed, so a downstream agent can later answer counting / aggregation / arithmetic questions about them.

## Conversation

{transcript}

## Pass A — UserProfile (user-side facts)

{pass_a_ops}

## Pass B — UserProfileAgentRec (agent-named answers)

{pass_b_ops}

## Pass C — UserPlaybook (procedural rules)

{pass_c_ops}

## What counts as an operand-bearing fact

A user-side fact whose content carries a SPECIFIC ATOM that would be the answer to a "how much / how many / how long / where / when" question:

- **Prices** — `$N`, `€N`, `£N`, "spent N", "paid N", "bought it for N"
- **Counts** — explicit numeric quantities ("watched N games", "tried N restaurants", "saw N performers")
- **Hours / durations** — "took N hours", "spent N minutes", "N weeks long"
- **Percentages / ratios** — "N% discount", "N% women", "average N.M years old"
- **Named places / proper nouns** — every named city visited, named event attended, branded product purchased
- **Timeline / tenure** — promotion dates, prior-role end dates, "been there N years and M months" combined with a derivable start date

## Decision rule

For each operand-bearing fact in the conversation:

1. Scan the three plans for any op whose content captures BOTH the entity AND the operand verbatim.
2. If found → leave it; an extractor already captured it.
3. If only the topic was captured (operand dropped) OR the fact is missing entirely → emit a new `ADD:` line for it.
4. **Operand-only**: do NOT emit purely topical facts ("user is interested in X", "user uses Y app") — those have no operand and are not what this pass is for.
5. **User-side only**: never emit `agent recommended` style facts; those belong in Pass B.

## Output format

Reply with one new fact per line, in the form:

```
ADD: user <verb> <operand> <entity> [on <DATE>]
```

If every operand-bearing fact is already captured (with its operand) by some pass, reply with exactly: `KEEP ALL CURRENT`

Examples (illustrative shapes — substitute the ACTUAL operand and entity from the conversation above):

```
ADD: user spent $189 on a brand-name merino sweater on 2024-12-10
ADD: user attended 9 spinning classes at a named studio in October 2024
ADD: user has been in their current role since 2023-04-10
```

Be conservative: only emit a fact if you can name the specific operand AND the entity it modifies AND (if the conversation supplies one) the date. False additions hurt downstream retrieval more than missed additions.

## Additions:
