Move CLI installation discovery out of `aspire doctor`
- Dominant language
- C#
- Stars
- 6.3k
- Forks
- 991
- Avg merge
- 2d 15h
- Merged PRs (30d)
- 196
Description
## Summary
Move Aspire CLI installation and hive discovery out of `aspire doctor` into a dedicated root-level information surface, currently designed as `aspire --info`.
`aspire doctor` should return to its cohesive purpose: reporting actionable environment health checks. Installation inventory is useful diagnostic information, but it is not itself a health result and currently adds unrelated work, output, JSON contract surface, peer probing, and failure/timeout behavior to every doctor invocation.
## History
- #17105 added a table of all Aspire CLI installations to `aspire doctor`, plus an `installations` array in JSON output and hidden `doctor --self` peer probing.
- During #17334, reviewers questioned why a health report always displayed an installation table and whether multiple installations are inherently a health problem:
- https://github.com/microsoft/aspire/pull/17334#discussion_r3279441562
- https://github.com/microsoft/aspire/pull/17334#discussion_r3279448306
- The original proposal was called out as a separate `info` command:
- https://github.com/microsoft/aspire/pull/17334#discussion_r3279542767
- The first follow-up direction was `aspire installs`:
- https://github.com/microsoft/aspire/pull/17334#discussion_r3295517929
- #17457 implemented that direction but closed unmerged.
- #17461 then evolved the design to root-level `aspire --info`. It remains an open draft and explicitly removes installation output and hidden peer probing from `doctor`.
- The release/13.4 port, #17582, was closed so the source work could receive more bake time and target 13.5:
- https://github.com/microsoft/aspire/pull/17582#issuecomment-4567174937
The older #10051 proposed a broader `aspire info` diagnostic command and was closed because `aspire doctor` existed. The installation-inventory discussion above is narrower: it separates machine/install identity from actionable environment health.
## Desired behavior
- `aspire doctor` reports environment checks only.
- `aspire doctor --format json` no longer includes installation inventory.
- Remove the hidden `doctor --self` peer-probe surface.
- Expose running CLI identity, discovered installs, PATH status, install source, and orphaned hives through `aspire --info` (or the final dedicated information command agreed during review).
- Move peer discovery to the new information surface with a documented machine-readable contract.
- Preserve an appropriate compatibility fallback for probing older CLI binaries.
- Keep discovery failures bounded and diagnostic; moving the operation must not reintroduce an unbounded command hang.
## Acceptance criteria
- Installation discovery is no longer executed by normal `aspire doctor` invocations.
- Human and JSON doctor output contain only environment-health results and their summary.
- The dedicated information surface provides both human-readable and JSON installation output.
- Cross-version peer probing works with older supported CLI versions.
- Existing unresolved feedback on #17461 is addressed, including CLI rendering, Windows paths, identity-channel API design, and test coverage.
- Output contracts and localization resources are updated.
Contributor guide
Assessment
This issue has not been assessed yet.