Validador de mensagens Conventional Commits
Este validador de mensagens Conventional Commits verifica se o cabeçalho de um commit segue a estrutura conhecida de tipo, escopo opcional e descrição, e devolve essas partes como dados estruturados estáveis.
Executar grátis
Ele reconhece os tipos comuns de build, manutenção, CI, documentação, recurso, correção, desempenho, refatoração, reversão, estilo e teste. Use-o para encontrar cabeçalhos malformados ou tipos desconhecidos antes que entrem no histórico compartilhado, no fluxo de lançamento ou no changelog automático. O resultado compacto fica pronto para scripts sem exigir outra análise de texto.
Verifique o cabeçalho e extraia campos úteis
Envie a mensagem de commit completa no campo de texto. O validador normaliza as quebras de linha e examina a primeira linha como cabeçalho de Conventional Commits; assim, a mensagem ainda pode conter abaixo uma linha vazia, parágrafos de corpo e rodapés. Um cabeçalho válido começa com um tipo reconhecido em letras minúsculas. Ele pode continuar com um escopo entre parênteses, receber um ponto de exclamação para indicar uma mudança incompatível e depois deve conter dois-pontos, exatamente um espaço separador e uma descrição não vazia. Por exemplo, <code>feat(parser): support escaped delimiters</code> devolve o tipo <code>feat</code>, o escopo <code>parser</code> e a descrição <code>support escaped delimiters</code>. O resultado normal também inclui <code>valid: true</code> e um campo booleano de incompatibilidade. Quando não há escopo, a propriedade é omitida em vez de receber um valor vazio ou nulo enganoso. Falhas de sintaxe e tipos desconhecidos produzem um erro de entrada inválida com explicação direta, permitindo que um hook do editor ou pipeline apresente uma correção útil sem interpretar um resultado analisado apenas em parte.
Entenda a convenção reconhecida
Conventional Commits define o formato do cabeçalho, mas permite que os projetos criem seu próprio vocabulário de tipos. Esta capacidade adota intencionalmente um conjunto fixo e prático para gerar resultados previsíveis entre repositórios: build, chore, ci, docs, feat, fix, perf, refactor, revert, style e test. Um cabeçalho com formato correto e outra palavra ainda falha, pois aceitar qualquer termo eliminaria a validação de tipo solicitada. Os tipos devem estar em minúsculas. Escopos são opcionais e podem conter letras minúsculas, dígitos, pontos, sublinhados, barras ou hífens; eles devem começar por letra ou dígito. Isso permite escopos comuns como <code>api</code>, <code>web-client</code> e <code>packages/core</code>, enquanto rejeita espaços ambíguos e parênteses sem correspondência. A descrição mantém pontuação e capitalização originais, mas não pode começar nem terminar com espaços. Um ponto de exclamação imediatamente antes dos dois-pontos indica mudança incompatível e é retornado separadamente. Um rodapé <code>BREAKING CHANGE</code> pode permanecer no corpo, porém o resultado atual obtém o booleano de incompatibilidade somente do marcador do cabeçalho e não interpreta a semântica dos rodapés.
Inclua validação determinística no desenvolvimento
Use o validador assim que uma mensagem proposta estiver disponível: em um hook do editor de commits, uma verificação de pull request, uma fila de merge ou um serviço que prepara metadados de lançamento. Um hook local oferece retorno mais rápido, enquanto a validação no servidor garante que commits criados por automação ou clientes alternativos sigam a mesma política. O analisador é determinístico e faz uma varredura limitada da string. Ele não acessa um provedor de repositório, inspeciona um objeto Git, deduz intenção a partir de um diff, reescreve a descrição fornecida nem contata serviços externos. Portanto, a mesma entrada gera os mesmos campos ou o mesmo erro no navegador e pela API. Trate tipo, escopo e descrição retornados como dados de classificação para agrupar changelogs, aplicar regras de lançamento ou alimentar painéis, mas mantenha separadas as verificações semânticas específicas do projeto. Por exemplo, o validador confirma que <code>fix(auth): reject expired tokens</code> é estruturalmente válido, mas não prova que a alteração corrige um defeito nem que <code>auth</code> seja um pacote permitido. Combine-o com a política do repositório quando precisar de listas de escopos ou referências a tickets mais rigorosas.
Casos de uso
Proteja um hook commit-msg
Rejeite cabeçalhos malformados imediatamente e mostre aos autores a estrutura Conventional Commits exata exigida pelo repositório.
Valide a automação de merges
Confira mensagens criadas por squash, fila de merge ou ferramentas de lançamento antes que entrem no histórico permanente.
Classifique entradas de lançamento
Extraia tipo, escopo, descrição e incompatibilidade estáveis para agrupar changelogs ou orientar decisões de lançamento.
Perguntas frequentes
Quanto custa uma validação?
Cada solicitação à API custa US$ 0,002. Você também pode executar a versão para navegador diretamente nesta página.
Quais tipos de commit são reconhecidos?
Os tipos reconhecidos são build, chore, ci, docs, feat, fix, perf, refactor, revert, style e test.
O escopo é obrigatório?
Não. Tanto feat: add export quanto feat(api): add export são válidos. Quando ausente, o escopo é omitido do resultado.
A mensagem pode ter corpo e rodapés?
Sim. A primeira linha é validada como cabeçalho; as linhas seguintes permanecem na entrada, mas não são analisadas como campos de saída.
Um ponto de exclamação identifica uma mudança incompatível?
Sim. Um ponto de exclamação logo antes dos dois-pontos define incompatibilidade como verdadeira. Declarações presentes apenas no rodapé não são interpretadas.
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
curl -X POST https://api.kit.forhosting.com/dev2/commit-message-lint \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"feat(parser): support escaped delimiters"}'const res = await fetch("https://api.kit.forhosting.com/dev2/commit-message-lint", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "feat(parser): support escaped delimiters"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev2/commit-message-lint",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "feat(parser): support escaped delimiters"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev2/commit-message-lint", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"feat(parser): support escaped delimiters"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"feat(parser): support escaped delimiters"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev2/commit-message-lint", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemplo de requisição
{
"text": "feat(parser): support escaped delimiters"
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev2.commit_message_lint",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Limites
max_chars | 100000 |
max_header_chars | 1000 |
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |