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.
Problem
aether-agent self doctorcan print an unusable Node runtime or an unverified CLI and still exit0, so scripts and users receive a green readiness signal.On
mainat67cb640,_cmd_doctorprintstoo old, need 24+for Node 20, but returns0wheneverresolve_binary()finds a path. It likewise printsaether CLI unknownwhen the--versionprobe fails and returns0.The
v0.3.2tag 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:
20, CLI path present, CLI version0.4.0→ doctor printstoo old, need 24+; exit0.24, CLI path present,_installed_versionreturnsNone→ doctor printsaether CLI unknown; exit0.The package declares Node
>=24. These are diagnostic-status failures; no npm install or live service is needed to reproduce them.Expected behavior
self doctorexits 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
aetherpath exists.0for a supported Node and a successful CLI probe, whether the binary comes fromPATHor the launcher-managed prefix.Scope
This changes only the PyPI launcher's
self doctorreadiness result; it does not alter the CLI selection or npmlatestpolicy.