The backend half of the new-project flow (story T-486). createNewProject
validates the name, makes <parent>/<name>/, runs git init (injected from the
toolchain in main.dart so the handler stays Flutter-free), and writes a minimal
scaffold (.gitignore + a CLAUDE.md stub). The project.new verb wraps it; --dir
defaults to the current workspace's parent so a new project lands beside it.
Create-only by design — opening the new workspace and the account roadblock are
the UI flow's job (T-488). Closes T-487.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>