Skip to content
docsv0.34.0

InstalledPackages

WHICH OF THE FRAMEWORK'S OWN PACKAGES THIS APP RUNS, AT WHICH VERSIONS — one reader, two callers. From `composer.lock`, which is the only place that says what is ACTUALLY installed: `composer.json` says what was asked for, and the two disagree the moment a range resolves. Absent lock, absent list — a house whose dependencies were never resolved has nothing to report, and inventing a row would be worse than an empty one. It is its own class because two surfaces need the same fact and neither owns it: the House section reports the stack it runs, and the sidebar's footer says which versions you are looking at right now. The reader used to be private to the House section's data source, so the shell would have had to ask a section for it — a shell that reaches into one section's data is a shell that breaks when that section is not installed (greenhouse decisions/0269). 🚨 IT ANSWERS ONE QUESTION AND NOT TWO. A `version(string $name)` accessor shipped here first and the unwired-piece census named it within the hour: nobody called it but its own test. That is the third accessor-nobody-asked-for in a single day of work, after `ProviderReach::declared()` and `ProviderReach::endpoint()` — a habit, not an accident. Both callers want the whole list; one of them then picks from it, which is the caller's business (greenhouse decisions/0213).

InstalledPackages::rows()

public static function rows(string $root): array

Every `milpa/*` package in the lock, name and resolved version, sorted by name.

Parameters

Parameters of rows()
NameTypeDescription
$rootstring