Skip to content

Make PyPI self doctor fail when Node or the selected CLI is unusable #188

Description

@AetherAI3

Problem

aether-agent self doctor can print an unusable Node runtime or an unverified CLI and still exit 0, so scripts and users receive a green readiness signal.

On main at 67cb640, _cmd_doctor prints too old, need 24+ for Node 20, but returns 0 whenever resolve_binary() finds a path. It likewise prints aether CLI unknown when the --version probe fails and returns 0.

The v0.3.2 tag has the same status path, so the issue also applies to the maintenance line.

Reproduction

Using the current launcher source with only subprocess discovery mocked:

  • Node major 20, CLI path present, CLI version 0.4.0 → doctor prints too old, need 24+; exit 0.
  • Node major 24, CLI path present, _installed_version returns None → doctor prints aether CLI unknown; exit 0.

The package declares Node >=24. These are diagnostic-status failures; no npm install or live service is needed to reproduce them.

Expected behavior

self doctor exits nonzero when a prerequisite for launching the selected CLI is missing or unsupported, or when it cannot verify that the selected CLI starts. Its human-readable and machine-readable status agree.

Acceptance criteria

  • Exit nonzero for missing/unsupported Node even when an aether path exists.
  • Exit nonzero when the selected CLI's version/startup probe fails or yields no usable version; keep the source path visible for troubleshooting.
  • Preserve exit 0 for a supported Node and a successful CLI probe, whether the binary comes from PATH or the launcher-managed prefix.
  • Add tests for Node missing, Node below 24, failed/blank CLI probe, and healthy runtime. Do not require an Aether account or network call.

Scope

This changes only the PyPI launcher's self doctor readiness result; it does not alter the CLI selection or npm latest policy.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions