**The brief.** The quote calculator has six **direct** dependency edges — each formula reads exactly two values. Write them down as `(value, dependsOn)` pairs. The workbench derives, from *your* edges, the **dirty set** of every input: everything that must be recomputed, directly or transitively, when that input changes. Six checks are waiting, and they know the graph. The battery ships **red** — the edge list is empty.
The formulas, once more:
subtotal = quantity × unitPrice
discount = subtotal ≥ 1000 ? discountPercent : 0
total = subtotal × (1 − discount / 100)
Read each formula and list what it reads — nothing more, nothing less. The transitive part is the machine's job (that's the point of the lesson: it should never have been yours).
Your workbench
All six green? Then say out loud what OnQuantityChanged must now do — and notice that the word discount appears nowhere in the subtotal formula it implements. That mismatch is Lesson 2.
Stuck on the third check? Reveal the solution — the six edges and why the threshold is a read like any other.