- store build metadata (version, commit, date)
- multi-binary build: `make build` builds all packages from ./cmd
- devcontainer adds ./bin to the PATH by default
README: slim to landing-page essentials; add "Design forces" section
explaining why pkg/result and pkg/logger exist (form over mechanism).
Remove stale API docs — those live in package comments.
CLAUDE.md: add "form over mechanism" design principle; update logging
rule to document NewCLI two-mode model; add v0.4.0 to recent work.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
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>