Pular para o conteúdo principal
Versão: 0.14.0

Fluxograma de Precedência de Descoberta

Este diagrama mostra como comandos são descobertos e como colisões de nomes de comando são tratadas entre fontes.

Fluxo de Descoberta​

Diagram: architecture/discovery-flow

Resolução de Conflitos​

Quando nomes colidem, o Invowk trata dois casos diferentes:

Diagram: architecture/discovery-conflict

Regras de Resolução​

CasoComportamento
Mesmo nome completo de comando descoberto em múltiplas fontesA primeira fonte descoberta vence (ordem de precedência)
Mesmo nome simples de comando em fontes diferentesMarca como ambíguo; o usuário deve desambiguar (@source / --ivk-from)

Ordem de precedência de descoberta:

  1. invowkfile do diretório atual (./invowkfile.cue)
  2. Módulos locais (./*.invowkmod)
  3. Includes configurados (caminhos de módulo em config.Includes)
  4. Diretório de comandos do usuário (~/.invowk/cmds/*.invowkmod, somente módulos, não recursivo)

Módulos vendorizados (invowk_modules/) são escaneados um nível abaixo de cada fonte de módulo descoberta.

Detalhes da Descoberta de Módulos​

Diagram: architecture/discovery-module-structure

Campos Obrigatórios do Módulo​

// invowkmod.cue
module: "com.example.mymodule" // RDNS naming convention
version: "1.0.0" // Semantic version

// Optional
description: "My useful module"
requires: [
{
git_url: "https://github.com/org/repo.git"
version: "^1.0.0"
}
]

Resolução de Dependências​

Diagram: architecture/discovery-deps

Visibilidade de Dependências Transitivas​

Esta checagem de visibilidade se aplica a dependências declaradas em depends_on.cmds durante validação estática. Ela não intercepta subprocessos arbitrários chamados em runtime.

DePode AcessarNão Pode Acessar
Módulo Acomandos de A, módulos globais instalados, comandos de Bcomandos de C (transitivo)
Módulo Bcomandos de B, módulos globais instalados, comandos de C-
invowkfile raizComandos descobertosRestrições de escopo não se aplicam; falhas são de descoberta ou resolução explícita de dependências

Por que esta restrição?

  • Previne acoplamento implícito a dependências transitivas
  • Torna dependências explícitas em cada módulo
  • Permite upgrades de dependências sem quebrar consumidores

Configuração de Includes​

Módulos adicionais são configurados no arquivo global de config resolvido:

includes: [
{path: "/opt/company-invowk-modules/tools.invowkmod"},
{path: "/home/shared/invowk/shared.invowkmod"},
]

Ordem de Processamento de Entradas​

Diagram: architecture/discovery-includes

Cache de Descoberta​

Diagram: architecture/discovery-cache

Problemas Comuns de Descoberta​

Problema: Comando Não Encontrado​

Diagram: architecture/discovery-not-found

Problema: Versão Errada do Comando​

Diagram: architecture/discovery-wrong-version

Comandos de Debug​

# Listar todos os comandos descobertos com fontes
invowk cmd --ivk-verbose

# Validar descoberta do workspace (reporta todos os diagnósticos)
invowk validate

# Validar um módulo específico
invowk validate ./mymodule.invowkmod

Diagramas Relacionados​