# Edge Cheatsheet — Behaviour Graph v0

**Scope:** Reference card for the 10 edge types in spec §3.2. Consult this before emitting any edge during extraction.
**Node-type definitions:** See `protocols/extraction.md` §2. This file covers edges only.

---

### triggers
- **Direction:** `user_state` → `loop`
- **Definition:** This state activates this loop; when Kai detects the user is in this state, the loop is available to fire.
- **Example:** `S-newbie-no-list` triggers `L-01-01` — a user with no prospect list activates the loop that opens that work. The state is the pre-condition; the loop is the behavioural response.
- **Don't confuse with:** `transitions_to` (which goes the other way, `loop` → `user_state`, on loop completion — direction is inverted).

---

### transitions_to
- **Direction:** `loop` → `user_state`
- **Definition:** Completing this loop moves the user to this state; the loop's successful outcome is captured as a new user_state.
- **Example:** `L-01-01` transitions_to `S-has-list` — once the user has worked through the list-building loop, they arrive at the state where a list exists. The loop produced the state.
- **Don't confuse with:** `precedes` — both originate from a `loop`, but `transitions_to` targets a `user_state` (the user lands somewhere new) while `precedes` targets another `loop` (the sequence continues). Ask: "after this loop, does the user's STATE change, or does the NEXT LOOP fire?" State change → `transitions_to`. Sequence → `precedes`.

---

### backed_by
- **Direction:** `loop` or `script` → `principle`
- **Definition:** This loop or script is grounded in this principle; the principle is the *why* (the explanatory backing), not the *what* (a step slot).
- **Example:** `L-02-01` backed_by `P-01-03` — the warm invitation loop is grounded in the abundance-posture principle. The principle explains the *why* behind the loop's design.
- **Don't confuse with:** `implements_step` (which goes `script` → `loop.step` and is about a script fulfilling a specific operational step inside a loop, not about the principle backing).

---

### corrects
- **Direction:** `principle` → `anti_pattern`
- **Definition:** This principle is the corrective for this anti-pattern; internalising the principle is what breaks the pattern.
- **Example:** `P-01-03` corrects `AP-01-03` — the abundance-posture principle is the antidote to neediness-signalling during outreach. The anti-pattern exists because the principle has not been internalised.
- **Don't confuse with:** `vulnerable_to` (which goes `user_state` → `anti_pattern` and shows which states make users susceptible to the anti-pattern — a different source node type and a different relationship).

---

### vulnerable_to
- **Direction:** `user_state` → `anti_pattern`
- **Definition:** Users in this state are tempted toward this anti-pattern; the state creates the conditions under which the wrong move feels natural.
- **Example:** `S-first-invite-sent` vulnerable_to `AP-01-03` — a user who has just sent their first invitation is anxious about the response and therefore prone to neediness signalling while waiting. The state sets up the temptation.
- **Don't confuse with:** `corrects` (which goes `principle` → `anti_pattern` and identifies the remedy, not the susceptibility — a different source node type and a different direction of logic).

---

### precedes
- **Direction:** `loop` → `loop`
- **Definition:** This loop typically precedes another loop in the journey; the first loop's completion is a natural on-ramp to the second.
- **Example:** `L-01-01` precedes `L-02-01` — a user who has just built their prospect list is sequentially ready to move into making warm invitations. The ordering is typical, not mandatory.
- **Don't confuse with:** `depends_on` (which goes `principle` → `principle` and is about conceptual prerequisite knowledge, not about the sequential ordering of behavioural loops).

---

### depends_on
- **Direction:** `principle` → `principle`
- **Definition:** This principle assumes another principle is already internalised; without the prerequisite principle, the dependent one will not land.
- **Example:** `P-02-01` depends_on `P-01-03` — the follow-up timing principle assumes the user has already internalised abundance posture; if they still operate from scarcity, the timing advice is misapplied regardless of how well they understand it.
- **Don't confuse with:** `precedes` (which goes `loop` → `loop` and is about the sequential order of behavioural loops, not about conceptual prerequisites between principles).

---

### implements_step
- **Direction:** `script` → `loop.step`
- **Definition:** This script implements a specific named step within a loop; the loop.step is the structural slot and the script is the language that fills it.
- **Example:** `Sc-02-04` implements_step `L-02-01.step-3-give-reason` — the warm invitation script implements the third step (stating a brief reason for reaching out) inside the warm-invite loop. The script is the voice realisation of a loop slot.
- **Don't confuse with:** `backed_by` (which goes `script` → `principle` and is about the explanatory principle the script embodies, not about which specific step of a loop the script fills).

---

### paraphrase_of
- **Direction:** `script_variant` → `script_canon`
- **Definition:** This script is a variant of the canonical script; same structural purpose and beats, but adapted for a different register, market, or language.
- **Example:** `Sc-02-04-warm` paraphrase_of `Sc-02-04` — the warm-market version of the invitation script is a register adaptation of the canonical invitation script. Both do the same structural job; only the tone and vocabulary shift.
- **Don't confuse with:** `implements_step` (which goes `script` → `loop.step` and is about which loop slot the script fills — unrelated to whether the script is a variant of another script).

---

### edifies
- **Direction:** `loop` or `script` → external actor
- **Definition:** This loop or script performs the network-marketing edification move — positioning an upline, a product, a speaker, or the system as credible and worth trusting — directed at an external actor outside the graph.
- **Example:** `L-03-04` edifies the user's sponsor — the edification loop coaches the user through the act of building their upline's credibility in the prospect's eyes. The sponsor is external to the graph; `edifies` makes this outward direction explicit.
- **Don't confuse with:** `backed_by` — which also originates from a `loop` or `script`, but its target is an internal `principle` node. `edifies` is the only edge whose target sits outside the graph (the upline, the product, the speaker, the system). If the target is a graph node, use `backed_by`; if it's an external actor, use `edifies`.

---

## Coverage-style sanity check

Before committing a chapter artifact, verify:

- Every `loop` should have at least one `triggers` edge in (from a `user_state`) and at least one `transitions_to` edge out (to a `user_state`). A loop with neither cannot fire and cannot land — it is floating.
- Every `script` should have at least one `backed_by` edge (to a `principle`) and at least one `implements_step` edge (to a `loop.step`). A script with no backing principle has no explanatory anchor; a script with no loop step is detached from the behavioural structure.
- Every `anti_pattern` should have at least one `corrects` edge in (from a `principle`) and at least one `vulnerable_to` edge in (from a `user_state`). An anti-pattern with no correcting principle has no remedy in the graph; an anti-pattern with no vulnerable state has no context in which it fires.
