60a9d81e22
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Successful in 30s
Gate the success/license path in both installer scripts so a partial install can no longer report success. - Package script (pkg_mokosuitecross): add missingChildExtensions(), which reads the package manifest via getParent()->getManifest() and verifies each declared <file> child is registered in #__extensions (matching element+type, plus folder=group for plugins). If any are missing, enqueue an error and return before warnMissingLicenseKey(). Housekeeping (download-key restore, core-plugin enable, PerfectPublisher migration detection) still runs unconditionally. - Component script (com_mokosuitecross): postflight was empty. Add missingTables(), which parses the installed sql/install.mysql.sql for every CREATE TABLE and verifies each exists (prefix-substituted, case-insensitive). On any missing tables, enqueue an error and return before the success message; otherwise show install-success/license notice. Both checks fail open (try/catch returning []/true) so a glitch never turns a good install into a false failure. Extension names are htmlspecialchars'd. Claude-Session: https://claude.ai/code/session_01MrxXW9iyuDda5yDZrjZMbF