JuliusBrussee/caveman · error

native pack: %s conflicts with unknown skill %s

Error message

native pack: %s conflicts with unknown skill %s

What it means

Consistency guard in native-pack validation: a skill claims task types that map to an owner/activation rule referencing a skill id not present in the pack. The pack's skills' task-type ownership tables disagree with its skill set.

Source

Thrown at proxy/internal/nativepack/pack.go:112

	}
	if !pack.Core.Mandatory || pack.Core.Instructions == "" || pack.Core.EstimatedTokens > pack.Core.PromptTokenBudget {
		return errors.New("native pack: invalid Core budget or instructions")
	}
	owners := map[string][]Skill{}
	ids := map[string]bool{}
	for _, skill := range pack.Skills {
		if skill.ID == "" || ids[skill.ID] || skill.Activation != "classified" || skill.Instructions == "" || len(skill.Instructions) > skill.PromptByteBudget {
			return fmt.Errorf("native pack: invalid skill %q", skill.ID)
		}
		ids[skill.ID] = true
		for _, taskType := range skill.TaskTypes {
			owners[taskType] = append(owners[taskType], skill)
		}
	}
	for _, skill := range pack.Skills {
		for _, conflict := range skill.Conflicts {
			if !ids[conflict] {
				return fmt.Errorf("native pack: %s conflicts with unknown skill %s", skill.ID, conflict)
			}
		}
	}
	for taskType, candidates := range owners {
		for left := 0; left < len(candidates); left++ {
			for right := left + 1; right < len(candidates); right++ {
				a, b := candidates[left], candidates[right]
				if !contains(a.Conflicts, b.ID) || !contains(b.Conflicts, a.ID) || a.Precedence == b.Precedence {
					return fmt.Errorf("native pack: unresolved conflict for task type %q between %s and %s", taskType, a.ID, b.ID)
				}
			}
		}
	}
	return nil
}

func contains(values []string, target string) bool {
	for _, value := range values {

View on GitHub (pinned to 766dce6b13)

Solutions

  1. Add the referenced skill to the pack or fix the task_types list to name existing skill IDs
  2. Repack and revalidate the native pack
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at proxy/internal/nativepack/pack.go:112 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of JuliusBrussee/caveman@766dce6b13 (2026-08-18). Data as JSON: /api/errors/8de7537b749fefa5. Report an issue: GitHub.