Derived, not stored: B is stacked on A when B targets A's source branch, both open, same repo. mr create reports it, mr show carries stacked_on and stacked, mr list rows carry stacked_on, the page shows both directions.
Merging A retargets everything stacked on it onto A's target with a system comment and reviews kept. Squash or rebase under a stack is refused, naming the stack.
e2e: a three-deep stack merged bottom-up, with an approval surviving the retarget, the squash refusal, and both page directions. Parity row added, pushed with the merge.
Closes #87