The injected integrity/entitlement check no longer sits on GuardWrapper::fopen, which runs on
every file open in the whole cloud: when the app was unlicensed or tampered, every file download
in Nextcloud failed with a 500. The check is now on the upload/restriction path
(checkWritten/checkIncoming), which only runs when the rules are actually enforced (licensed).
Unlicensed now simply does not enforce restrictions and never touches core file reads.
Removing the licence module (lib/Licensing) or tampering with the build no longer breaks the
rest of Nextcloud. The Policy service, the filetypes:test command and the admin settings used
to take licence classes as constructor arguments, so a missing module made dependency injection
throw (cron.php aborted, settings 500). They now resolve the licence guard lazily.
The Licence settings section shows an "app files were changed" state (en+ro) when integrity fails,
instead of still reporting the licence as active.