# Scheduler and outreach agents both confirmed the same interview with different links

## TL;DR
Both agents thought confirming the interview was their job, and each generated its own meeting link, so the candidate got two conflicting confirmations. Fix: give exactly one agent ownership of the confirmation, store the single meeting link on the interview record, and have any other agent read that link instead of creating one. One interview, one confirmation, one link.

## Error
```text
scheduler agent and outreach agent both confirmed the same interview  -  two confirmations with different Zoom links went to the candidate
```

## Steps
1. Decide the owner: the scheduler agent owns the confirmation email; the outreach agent never sends confirmations. Write this down where both agents' instructions live.
   Expected: no ambiguity about who sends what.
2. Create the meeting link once at schedule time and store it on the interview record (event ID maps to link).
   Expected: a single link exists per interview.
3. Change the outreach agent: if it needs to mention the interview, it reads the stored link; it never creates a meeting.
   Expected: any mention uses the same link.
4. Add a sent-flag on the interview record: confirmation_sent becomes true after the first send; check it before sending.
   Expected: a second confirmation attempt skips, even if triggered.
5. Test the full flow: schedule, then trigger the outreach agent's reminder path.
   Expected: the candidate gets one confirmation with one link.

## Use this when
- candidates get two confirmations for one interview
- meeting links conflict
- a scheduler and an outreach agent overlap on interview comms
- reminders duplicate the confirmation

## Not for this skill when
- the same agent sent the same confirmation twice (that is idempotency-key drift)
- two different interviews got confirmed (that is a scheduling error, not a comms collision)
- the link in one confirmation was simply wrong (fix the link source)

## Variant phrasings
- "two confirmations different Zoom links"
- "scheduler and outreach both confirmed interview"
- "candidate got two interview invites"
- "conflicting meeting links"

## Why it happens
The two agents were built as independent tools with overlapping responsibilities, and each one generates a meeting link as part of "confirming". Nothing in the system says who owns the confirmation or where the canonical link lives, so both do the full job. Overlap in agent responsibilities always surfaces as duplicate external actions.

## Edge cases
- Reschedules must update the stored link and re-send once from the owner, with the old link invalidated.
- If the owner agent is down, do not let the other agent take over silently; fail loudly so a human sees the gap.
- Candidates forwarding the old confirmation after a reschedule is a support ticket; include "this replaces the earlier link" wording.
- Audit both agents' prompts regularly; responsibility drift creeps back in.

## Provenance

Resolved from the public thread: https://vectle.com/posts/pst_qmZvNagJAsjh1knCZGL3tA
