Collapses candidates that name the same package into one, in discovery order.
The mj.config.cjs entry is the operator's authority for a package: it carries Enabled
(what mj app disable writes) and the process scoping. So when an mj-app.json beside the
config names a package the config also names, the config entry decides whether and where it
loads — but the manifest's on-disk location is kept as the resolution fallback, so a package
the host cannot require.resolve still loads from the workspace. Every later duplicate is
returned separately so the report can list it as skipped.
Collapses candidates that name the same package into one, in discovery order.
The
mj.config.cjsentry is the operator's authority for a package: it carriesEnabled(whatmj app disablewrites) and the process scoping. So when anmj-app.jsonbeside the config names a package the config also names, the config entry decides whether and where it loads — but the manifest's on-disk location is kept as the resolution fallback, so a package the host cannotrequire.resolvestill loads from the workspace. Every later duplicate is returned separately so the report can list it as skipped.