private(set) doing the work a hook was written for

Three hooks reverted, and in every case asymmetric visibility was the whole answer.

// what I wrote in 2024
public array $lines {
    get => $this->lines;
}
private array $lines = [];

// what it should have been
public private(set) array $lines = [];

A get hook that returns a backing property unchanged is asymmetric visibility with extra syntax and a function call, which the benchmark confirms — the hook costs about what a method call costs and the visibility modifier is free. The three cases were all written in the same afternoon by somebody reaching for the new feature.