- Fix promptCustomContentSource() to use resolveCustomContentPaths()
instead of reading module.yaml from root (would crash on parent dirs
since validation was loosened but consumer was not updated)
- Simplify resolveCustomContentPaths() to only check file existence,
not parse YAML (eliminates double read — callers already handle
parsing and validation)
- Add edge case tests: module.yaml without code field, malformed YAML
in subdirs, mixed direct + parent path resolution
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
When --custom-content points to a parent directory (no module.yaml at
root), scan immediate subdirectories (1 level) for module.yaml files.
Previously the path was silently rejected and the installer fell back to
cached modules, reporting "updated" without actually copying new files.
Adds resolveCustomContentPaths() method and applies it to all three
custom content processing flows (quick-update, update, fresh install).
Closes#2040
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>