I asked Eric on discord and he made this updated version (his work, not mine to be clear), which solved a problem I had with the first version of the negative space solution:
#show heading: it => {
let threshold = 50%
block(breakable: false, height: threshold)
v(-threshold, weak: true)
it
}
This works well in my template now, thank you!
(The observed problem in the previous one: a heading at the start of the page was pushed down. The new version also has the nice property that it seems to leave my document unchanged if the threshold is 0cm
which is reassuring.
I thought it was worth sharing the improvement in the same thread.)