Arquitetura¶
O gitscribe é um pipeline: ler commits, classificá-los, agrupá-los, depois renderizar — de forma determinística ou via um LLM local. O agrupamento acontece antes do LLM, por isso o modelo reescreve uma lista limpa em vez de commits em bruto.
flowchart LR
G["git log"] --> PA["parseGitLog"]
PA --> CL["parseConventional<br/>(type · scope · breaking)"]
CL --> GR["groupCommits"]
GR --> DEC{"--model?"}
DEC -- não --> TPL["renderMarkdown<br/>(template)"]
DEC -- sim --> LLM["Ollama<br/>(buildPrompt → generate)"]
TPL --> OUT["release notes"]
LLM --> OUT
Mapa de módulos¶
| Módulo | Responsabilidade |
|---|---|
git.ts |
Ler commits via um git log delimitado; parseGitLog (puro) |
conventional.ts |
Parsear Conventional Commits e agrupar por tipo |
render.ts |
Changelog markdown determinístico (offline) |
llm.ts |
buildPrompt (puro) + OllamaClient |
generate.ts |
Escolher template vs LLM |
Princípios de design¶
- Offline por defeito — o modo template é determinístico e sem dependências (ideal para CI).
- LLM como polimento, não fonte — o modelo vê commits categorizados, por isso não inventa features.
- Núcleo testável — parsing, agrupamento e render são puros; git/Ollama são adaptadores finos.