When a collection is catalogued with the projection and raster STAC extensions, the catalogue already says everything the VRT needs. from_stac() uses it directly and opens no file:
items may be a list of STAC item dicts (nested properties or flat stac-geoparquet rows; pystac.Item objects work too) or the path or URL of a stac-geoparquet file.
What it checks
The catalogue is trusted, but not blindly:
One grid. Items on different grids are refused (no resampling).
One item per time. Duplicate datetimes are refused.
One storage description per asset. If dtype, nodata, scale or offset change between items the asset is refused, because one array needs one decoding. A unit missing from some items is filled from the others; conflicting units warn and use the most common.
Missing assets are gaps. An item without an asset leaves nodata at its time position, so a variable that starts later than the others needs no special handling.
The template Dataset it builds uses zero-memory placeholders (numpy.broadcast_to), so a catalogue of thousands of full-resolution days costs nothing to describe. See the GHRSST MUR example for 8913 days of five variables.