tagpath 0.2.0

Tag Path — parse, lint, and search tag-based identifiers across languages
# tagpath

Tag Path — parse, lint, and search tag-based identifiers across languages.

## Architecture

```
src/
  main.rs          CLI entrypoint (clap)
  parser/mod.rs    Convention detection, tokenization, role/shape detection
  config/mod.rs    .naming.toml schema and loading
  lint/mod.rs      Lint engine (Phase 2)
lang/              Language presets (39 languages, TOML format)
presets/           Convention presets (immutable-tag.toml)
```

## Conventions

- **Rust edition 2024**
- **Dependencies:** clap (CLI), serde + toml (config), serde_json (output)
- **No async** — all operations are synchronous
- **Tabs for indentation** (match existing code)
- Run `cargo test` before committing
- Run `cargo clippy` for lint checks

## Module Responsibilities

- **parser** — Stateless functions. Input: string + optional convention. Output: `ParsedName` with tags, namespaces, role, shape. No I/O.
- **config** — .naming.toml schema types and deserialization. `load()` reads from disk. `generate_config()` produces TOML from presets.
- **lint** — (Phase 2) Validates identifiers against .naming.toml rules. Uses parser + config.
- **main** — CLI dispatch only. No business logic.

## Key Design Decisions

- Tags are always lowercase in output (normalization happens in `parse()`)
- Convention detection is heuristic: underscore → snake, dash → kebab, leading uppercase → Pascal, else → camel
- Mixed conventions (e.g., `createContext_auth`) split on underscores first, then apply camelCase splitting per segment
- `__` is the namespace separator; dimensions are extracted only for snake_case/UPPER_SNAKE_CASE

## Release Process

1. Bump version in `Cargo.toml`
2. `cargo test && cargo clippy`
3. `git tag v<version> && git push --tags`
4. `cargo publish`

## Phases

- **Phase 1** (current): Parse, detect, semantic equivalence, CLI
- **Phase 2**: tree-sitter integration, lint command, extract identifiers from source
- **Phase 3**: Graph building, search, alias generation, prose variant