CSV migration always returns "id is defined as a source ID but has no value"
I already had the same error you've got; in fact it's a mistake :
Please double check that the delimiter set in the yml file is the same as in your source file (edit it with notepad++ to be sure). Sometimes Excel change delimiter when reopening csv file before resave it without settings file format.

Also, note the column_names key is not mandatory, as the plugin will automagically extract column from your file (see migrate_source_csv\src\Plugin\migrate\source\CSV.php line 110 ... 123). Here you can also print the $column_names array to check if it contains same number of items as your file columns.

BR