#1110415 aptitude: "aptitude why" should tell when a package is manually installed

Package:
aptitude
Source:
aptitude
Description:
terminal-based package manager
Submitter:
Vincent Lefevre
Date:
2025-08-05 11:01:02 UTC
Severity:
normal
#1110415#5
Date:
2025-08-04 23:51:05 UTC
From:
To:
The output of "aptitude why" is sometimes confusing and useless.
For instance:

cventin% aptitude why ncal
i   quilt        Depends bsdextrautils | bsdmainutils
p   bsdmainutils Depends ncal

while as output, bsdmainutils is not installed, so that this cannot
be the reason why ncal is installed.

cventin% aptitude why emacs-calfw
i   emacs-calfw      Suggests emacs-calfw-howm
p   emacs-calfw-howm Depends  emacs-calfw (= 1.6+git20180118-2)

This is a circular dependendy, so this is useless.

The reason in both cases is that the package is manually installed,
and aptitude should output such information.

#1110415#10
Date:
2025-08-05 06:42:38 UTC
From:
To:
That's a bit separate from aptitude why's goal. aptitude why doesn't
tell you why a package is installed, but the strongest reason why an
installed package could lead to the package being installed.

The second one I agree is useless, aptitude needs to reject circular
reasoning chains.

If you are looking for why a package is actually installed, you
may find more luck with `apt why` in experimental, which gives
you a reasoning trace from the solver [note it just says "X
is selected for install" for manual installs, it doesn't yet
include the word manual in there, I'm not sure it should and
we should pivot to "installed" and "installed as a dependency"
instead of "manually installed" and "automatically installed"]

Note that `apt why` on the flip side does not work for packages
not actually installed because well the solver had no reason to
install them :D

#1110415#15
Date:
2025-08-05 11:00:10 UTC
From:
To:
But I don't see how this makes sense in the case

Here, it is bsdextrautils that is installed; bsdmainutils is not
installed. So the dependency on ncal does not have to be satisfied.
And the strongest reason why ncal is installed is that it is
actually manually installed.

Note that "aptitude why" says whenever a package in the chain is
manually installed, *except* for the target package. Information
on whether the target package is automatically installed / manually
installed or not installed would be useful.

For instance:

cventin% aptitude why dracut-install
i   initramfs-tools      Depends initramfs-tools-core (= 0.148.3)
i A initramfs-tools-core Depends dracut-install

Here one knows that initramfs-tools is manually installed and that
initramfs-tools-core is automatically installed (because of the "A"),
but there is no such information for dracut-install. A third line
could have been useful, such as

i   initramfs-tools      Depends initramfs-tools-core (= 0.148.3)
i A initramfs-tools-core Depends dracut-install
i A dracut-install

I also get

cventin% aptitude why bsdmainutils
i   quilt Depends bsdextrautils | bsdmainutils

while here bsdmainutils is not installed. This is misleading:
if I remove quilt, then installed it again, it will not install
bsdmainutils, because bsdextrautils comes first.

So, what's the purpose of "aptitude why" in such a case?