Read package manifest via $adapter->getParent()->getManifest() to discover
children dynamically instead of maintaining a hardcoded EXPECTED_EXTENSIONS
array. Fail-open pattern wraps verification in try/catch. Only the success
path (plugin enables, license warning) is gated; unconditional housekeeping
(DLID restore) runs regardless.
Claude-Session: https://claude.ai/code/session_01CwLGvFJPjoPTp9BEnSjtJf
Checks that all expected component and plugins registered in
#__extensions after install. Disables the package entry and shows
an error if any sub-extension failed to install.
Claude-Session: https://claude.ai/code/session_01CwLGvFJPjoPTp9BEnSjtJf