Why does /usr/lib/update-notifier/apt-check not agree with apt-get upgrade

Solution 1:

/usr/lib/update-notifier/apt-check 

is actually equivalent to stats returned by

apt-get -s dist-upgrade | grep "^[[:digit:]]\+ upgraded"

and not

apt-get upgrade|grep "^[[:digit:]]\+ upgraded"

For Example

/usr/lib/update-notifier/apt-check --human-readable

returns

22 packages can be updated.
0 updates are security updates.

whereas

apt-get -s dist-upgrade | grep "^[[:digit:]]\+ upgraded"

returns

18 upgraded, 4 newly installed, 0 to remove and 0 not upgraded.

It actually 18+4 which amounts to 22.

From apt-get manual:

upgrade
       upgrade is used to install the newest versions of all packages
       currently installed on the system from the sources enumerated in
       /etc/apt/sources.list. Packages currently installed with new
       versions available are retrieved and upgraded; under no
       circumstances are currently installed packages removed, or packages
       not already installed retrieved and installed. New versions of
       currently installed packages that cannot be upgraded without
       changing the install status of another package will be left at
       their current version. An update must be performed first so that
       apt-get knows that new versions of packages are available.

   dist-upgrade
       dist-upgrade in addition to performing the function of upgrade,
       also intelligently handles changing dependencies with new versions
       of packages; apt-get has a "smart" conflict resolution system, and
       it will attempt to upgrade the most important packages at the
       expense of less important ones if necessary. So, dist-upgrade
       command may remove some packages. The /etc/apt/sources.list file
       contains a list of locations from which to retrieve desired package
       files. See also apt_preferences(5) for a mechanism for overriding
       the general settings for individual packages.

source