OptionaldevicesMICA-260: the devices the app appears on. See AppManifest.devices. Here for the
reason requires is; absent means the phone, which is what every catalog written
before the field existed says.
OptionaliconOptionalnetworkMICA-24: the exact origins the installed add-on's frame may fetch(). See AppManifest.networkHosts.
What this app discloses it reaches for — shown to a player before they install it.
OptionalrequiresServer capabilities the app cannot work without. See AppManifest.requires.
A catalog entry is the only thing installVerified builds a remote manifest from —
it never import()s the fetched bundle to ask what it claims to be — so a capability
absent here is a capability the app can never declare, however plainly its own source
says otherwise. Optional, and absent means "needs none", which is both the right
default and the only thing a catalog written before this field existed can say.
OptionalrequiresWhether the phone should block this app while signal is out. Defaults to false.
OptionalsdkMICA-196: the SDK contract version the bundle was compiled against. See
AppManifest.sdkContract.
Here rather than read out of the fetched bundle for the reason every other field is:
installVerified never runs the code to ask it what it is. Absent means "did not say"
and installs exactly as it did before.
OptionalservicesMICA-196: the server services this app owns. See AppManifest.services.
Here for the same reason requires is: installVerified builds the installed
manifest from this entry and nothing else, never by running the fetched bundle to ask
what it claims to be, so a field absent here is one the installed app can never
declare. Absent means "did not say", and the old prefix rule answers for it — which is
what every catalog written before this field existed says, and the right thing for it
to mean.
Lowercase hex SHA-256 of the exact bytes at bundleUrl. Required — installFromCatalog refuses to import a bundle without one.
One installable app as an operator's catalog server describes it — everything
installFromCatalogneeds to build the manifest itself, without ever running the bundle to ask it. Seeregistry.ts'sinstallVerified: the manifest is built from these fields, never fromimport()ing fetched code.