Two modes for interactive CLI use — driven by debugFile presence:
- Normal (debugFile=""): human text on screen, INFO and above.
- Debug (debugFile set): same screen + full JSON trace to file.
Auto-detects TTY; falls back to 12-factor JSON when piped/redirected.
IsInteractive() exposes TTY detection for call sites that need it.
Terminal format: INFO has no prefix (program's normal voice);
WARN prints "warning: …"; ERROR prints "error: …"; DEBUG "debug: …".
Breaking: NewDevelopment removed.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- fix `make help` printing "Makefile" instead of target names — caused by
`include tools.versions` adding to MAKEFILE_LIST; grep now targets Makefile directly
- `make release` now creates annotated tags: pre-populates the message
with commits since the previous tag and opens $EDITOR for review
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>