Skip to main content
Version: 0.13.0

Discovery Precedence Flowchart

This diagram shows how commands are discovered and how command name collisions are handled across sources.

Discovery Flow

Diagram: architecture/discovery-flow

Conflict Resolution

When names collide, Invowk handles two different cases:

Diagram: architecture/discovery-conflict

Resolution Rules

CaseBehavior
Same full command name discovered in multiple sourcesFirst discovered source wins (precedence order)
Same simple command name across different sourcesMark ambiguous; user must disambiguate (@source / --ivk-from)

Discovery precedence order:

  1. Current directory invowkfile (./invowkfile.cue)
  2. Local modules (./*.invowkmod)
  3. Configured includes (module paths from config.Includes)
  4. User commands directory (~/.invowk/cmds/*.invowkmod, modules only, non-recursive)

Vendored modules (invowk_modules/) are scanned one level deep for each discovered module source.

Module Discovery Details

Diagram: architecture/discovery-module-structure

Required Module Fields

// 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.invowkmod.git"
version: "^1.0.0"
}
]

Dependency Resolution

Diagram: architecture/discovery-deps

Transitive Dependency Visibility

This visibility check applies to declared depends_on.cmds dependencies during static validation. It does not intercept arbitrary subprocess calls made at runtime.

FromCan AccessCannot Access
Module AA's commands, B's commandsC's commands (transitive)
Module BB's commands, C's commands-
Root invowkfileOwn commands, direct depsTransitive deps

Why this restriction?

  • Prevents implicit coupling to transitive dependencies
  • Makes dependencies explicit in each module
  • Enables dependency upgrades without breaking consumers

Includes Configuration

Additional modules are configured in the resolved global config file:

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

Entry Processing Order

Diagram: architecture/discovery-includes

Discovery Caching

Diagram: architecture/discovery-cache

Common Discovery Issues

Problem: Command Not Found

Diagram: architecture/discovery-not-found

Problem: Wrong Command Version

Diagram: architecture/discovery-wrong-version

Debug Commands

# List all discovered commands with sources
invowk cmd --ivk-verbose

# Validate workspace discovery (reports all diagnostics)
invowk validate

# Validate a specific module
invowk validate ./mymodule.invowkmod