While I don’t know the answer to the question, I can somewhat simplify your attempt at that specific layout.
Unsurprisingly, I believe this is bound to be a single-page layout:
#set page(flipped: true, margin: 0.5cm)
#set par(justify: true)
#set text(1.3em)
#let announcement(ann) = block(above: 1fr, ann)
#let n-day = {
let day = datetime.today().day()
let n-days = ("st", "nd", "rd").map(it => super(it))
str(day) + if calc.rem(day, 10) - 1 not in (0, 1, 2) { return }
else { n-days.at(calc.rem(day, 10) - 1) } + sym.space
}
#grid(
rows: (3em, 1fr),
columns: (2fr, 4fr, 4fr),
column-gutter: 0.5cm,
// stroke: black,
inset: 1em,
grid.cell(rowspan: 2)[ // Left
#set align(center)
#circle(width: 100%)
#set align(bottom)
#rotate(
reflow: true,
270deg,
text(2em, lorem(5))
)
],
grid.cell(
colspan: 2,
text(2em, n-day + datetime.today().display("[month repr:long], [year]")),
),
[ // Middle
= Meeting Roles
#lorem(10)
#announcement(lorem(15))
#announcement(lorem(30))
#announcement(lorem(20))
#announcement(lorem(40))
],
[ // Right
= Meeting Agenda
#lorem(100)
],
)
The question reminds me of these posts:

