Builtin Library
README.md
zeromind.convertInstalls
Bring an install that Source Control lists as thousands of changed files into one record.
An install an earlier engine landed holds one row of the world per file. zm status lists it as an install with its row count, and an install of the same asset is refused over it. This tool records the install as one entry at its root, lets this engine materialize the install from it, takes the rows out of the world and states the record again from the published version the rows hold (read by its checksum), so an install the old engine cut short holds every file of that version. The install is then one entry in Source Control, and a file the user changed since the install stays a row of the world. zeromind.update moves such an install to a newer version in one step, with no conversion first.
Nothing is committed. Rows that were committed leave as deletions in the next commit, which zm commit records as one change.
A file the user deleted from the install stays deleted: the record names it as removed. Rows that already left the world (an update or an earlier conversion took them out) are deletions the next commit carries, and the conversion leaves them as they are. Rows that stand beside an install record at the same root stay as they are too, so the record keeps its version: the call names both versions, and zeromind.update of the root brings the install to one record.
Each install converts whole or not at all. When the published version does not run as a record (the install gate finds a placed path not indexed as an asset, a reference site naming a version the world holds nowhere, or an asset that does not load as its type), the record the rows state takes its place if that record runs; when neither runs, the record is taken out and every row is written back, so the install stands as it did. Once every other install is converted, the call raises naming each install it left as it was and why.
The conversion never holds a frame: the files stay where they stand while their rows leave, and the call yields between its steps. A run that outlasts the execute budget continues as a task: watch its taskId for the result. Each entry of the result states files_added (the files the published version holds that the old rows did not) and, when the record stayed as the rows stated it, completion says why. { dryRun = true } lists what would be converted without writing anything. zeromind.installs lists the installs and the form each is stored in.