Потому что минимальное значение для детей в flex&grid берется по контенту.
Т.е. что бы не вылазило, переопределяем минимальное значение, в данном случае - высоту. .parent > * { min-height: 0; }
Далее аналогично для внутреников правой... .parent .item-2 div { min-height: 0; }