1st issue: I guess you need revise your calculus knowledge, I’m not good enough to explain this, but I’ll try
a->b->c->d->loss
We start with loss.gradient = [1]. And back prop to d
lets say d.value = [1, 2, 3] and d.gradient = [4, 5, 6], you can backprop and can compute a.gradient =[x, y]
Lets say d.gradient = [7, 8, 9] now, is a.gradient still [x, y], or at least be figured quickly from [x, y] somehow? No, you have to backprop all over again
When computing Jacobian, I think you are computing a.gradient for all these cases:
d.gradient = [1, 0, 0]
d.gradient = [0, 1, 0]
d.gradient = [0, 0, 1]
Which can’t be figured from the original backprop when  d.gradient = [4, 5, 6]
2nd issues: I think the elves stole the rest