Detection:
- Find() walks up from given directory looking for markers
- Primary marker: config/town.json
- Secondary marker: mayor/ directory
- Follows symlinks using filepath.EvalSymlinks
Functions:
- Find, FindOrError: from given directory
- FindFromCwd, FindFromCwdOrError: from current directory
- IsWorkspace: check if directory is workspace root
Closes gt-f9x.2
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>