Referência da CLI
Cada comando que a CLI do Orvienm expõe hoje, o que ele faz e o código de saída que retorna.
Invocação
A CLI é instalada como orvienm. Rode orvienm --help para a lista de comandos e orvienm <command> --help para um comando específico. orvienm --version imprime a versão do engine.
Comandos que recebem um argumento de arquivo opcional usam o primeiro dentre .orvienm.yaml, orvienm.yaml orvienm.yml encontrado no diretório de trabalho. validate, verify, status, doctor, fingerprint exigem o argumento explicitamente.
Comandos de ciclo de vida
orvienm validate <file> [--json]
Verifica uma especificação sem tocar no sistema de arquivos.
O argumento de arquivo é obrigatório. Todos os outros comandos validam antes de fazer qualquer coisa, então uma falha aqui bloqueia o resto do ciclo.
saída: 0 válido · 1 erro de validação · 4 arquivo ausente ou ilegível
orvienm plan [file]
Mostra a diferença entre a estrutura declarada e o que existe.
Imprime uma linha por diretório — create, keep ou undeclared — seguida de um resumo. Um caminho declarado é comparado junto com os diretórios que ele implica, de modo que uma entrada aninhada converge após o apply. Undeclared significa presente em disco mas ausente da especificação; o apply não o cria nem o remove.
saída: 0
orvienm apply [file] [--dry-run] [--json]
Cria a estrutura declarada.
Aditivo e conservador. Se a raiz não existe, cria a raiz e todos os diretórios declarados dentro dela, incluindo os intermediários implicados por entradas aninhadas. Se a raiz já existe, cria os diretórios declarados que estão faltando e deixa o resto intacto. Diretórios e arquivos não declarados nunca são removidos nem sobrescritos. Recusa-se a rodar quando a especificação divergiu de .orv.lock, a menos que --dry-run seja passado. Uma execução bem-sucedida registra a especificação em .orv.lock. Se um arquivo ocupa um caminho declarado como diretório, o apply o identifica, não cria nada e deixa o arquivo intacto.
saída: 0 criado, ampliado ou já conforme · 2 erro de sistema de arquivos ou um arquivo onde um diretório é declarado · 3 desvio detectado
orvienm verify <file>
Verifica se todos os diretórios declarados existem.
Imprime Status: VALID ou Status: INVALID, conferindo cada caminho declarado junto com os diretórios que ele implica. Não olha o lock file, o fingerprint nem os diretórios não declarados — use status ou doctor para isso.
saída: 0 completo · 2 um diretório declarado está faltando
Comandos de inspeção
orvienm status <file> [--json]
Resume raiz, estrutura, lock file e fingerprint em uma única visão.
Reporta FOUND/NOT FOUND para a raiz e para o lock file, COMPLIANT/INVALID para os diretórios declarados e MATCH/DRIFT_DETECTED para o fingerprint. O resultado geral só é CLEAN quando os quatro estão bons.
saída: 0 limpo · 2 qualquer outro caso
orvienm doctor <file> [--json] [--strict]
Diagnóstico completo, incluindo diretórios não declarados.
O único comando que reporta diretórios órfãos — presentes em disco mas ausentes da especificação — junto com diretórios faltantes e o estado do fingerprint. O diagnóstico é HEALTHY ou CRITICAL; qualquer diretório faltante, qualquer órfão ou um fingerprint divergente torna o diagnóstico CRITICAL. Por padrão apenas reporta: é o --strict que transforma um diagnóstico CRITICAL em falha. A detecção é idêntica nos dois casos, e a saída --json também.
saída: 0 · 2 com --strict quando o diagnóstico não é HEALTHY
orvienm fingerprint <file> [--json]
Imprime o fingerprint SHA-256 da especificação.
Calcula o hash de um manifesto canônico construído a partir de version, style, structure.name e da lista ordenada de diretórios. Reordenar diretórios não o altera; mudar style altera.
saída: 0
orvienm policy [file] [--strict]
Verifica as regras de policy declaradas contra a estrutura declarada.
Lê policy.forbid da especificação e reporta qualquer nome proibido encontrado dentro da estrutura declarada, em qualquer profundidade. Por padrão apenas reporta, de modo que adicionar um bloco policy não pode, por si só, tornar vermelho um pipeline que estava verde; é o --strict que faz uma violação quebrar o build. A varredura cobre a raiz da estrutura declarada, não o diretório de trabalho, então um nome proibido ao lado dessa raiz passa mesmo com --strict.
saída: 0 · 2 com --strict quando uma violação é encontrada
Comandos de scaffolding
orvienm new <name>
Cria um projeto de exemplo em um novo diretório.
Cria name/, escreve name/.orvienm.yaml e cria core, governance e products dentro dele. Rode os comandos de ciclo de vida a partir do diretório que contém name/, e não de dentro dele — structure.name é resolvido em relação ao diretório de trabalho, então aplicar de dentro criaria uma segunda raiz aninhada.
saída: 0 · 4 se o diretório já existir
orvienm init <name>
Declara uma estrutura no diretório atual.
Escreve .orvienm.yaml no diretório atual declarando name como a raiz gerenciada, com core, governance e products dentro dela. Não cria diretório algum — quem faz isso é o apply, como em todo o resto — então um plan logo após o init mostra a estrutura inteira como pendente. O name é obrigatório e é a raiz sendo declarada: rode o init no diretório sob o qual você quer que a estrutura viva. Ele não sobrescreve uma especificação existente.
saída: 0 · 2 erro de uso se nenhum nome for informado
Códigos de saída
Todo comando termina com um de seis códigos, e é isso que torna a CLI utilizável em CI.
0 sucesso 1 erro de validação 2 estrutura inválida 3 desvio detectado 4 erro de arquivo (ausente, vazio ou ilegível) 5 erro interno
verify, status e doctor --strict saem todos com 2 diante de um problema estrutural, então qualquer um deles pode servir de portão em um pipeline. policy por padrão apenas reporta e sai com 0 mesmo quando encontra uma violação; é o --strict que transforma o mesmo achado em saída 2. A detecção é idêntica nos dois casos — só o código de saída muda.
Flags
--json está disponível em validate, apply, fingerprint, status, doctor. --dry-run existe apenas em apply. --strict existe apenas em doctor, onde transforma qualquer diagnóstico não saudável em falha definitiva.
graph
orvienm graph [file] [--edges] imprime a estrutura declarada como hierarquia, expandindo entradas aninhadas na árvore que o engine de fato cria. Sai com 0.
--edges reporta que a especificação não declara relacionamentos. O formato não tem sintaxe de relacionamento neste Alpha — o validador rejeita qualquer chave desse tipo — então não há arestas a desenhar.