Skip to main content
Version: Next

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.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, globally installed modules, B's commandsC's commands (transitive)
Module BB's commands, globally installed modules, C's commands-
Root invowkfileDiscoverable commandsScope restrictions are not applied; failures are discoverability or explicit dependency resolution issues

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