multica-ai/multica · error · errSkillBundleUnavailable
%w: skill %q (id=%s, %d bytes) after %s: %w
Error message
%w: skill %q (id=%s, %d bytes) after %s: %w
What it means
Error "%w: skill %q (id=%s, %d bytes) after %s: %w" thrown in multica-ai/multica.
Source
Thrown at server/internal/daemon/daemon.go:5896
// Resolve each missing bundle in its own request, caching it the moment it
// arrives. The download is the slow part on jittery links, so fetching the
// whole set in one atomic body read meant a single timeout discarded all
// progress and the cache never converged — every dispatch re-downloaded
// everything and timed out again. Per-skill, each download fits its own
// size-scaled deadline and is persisted independently, so even a dispatch
// that ultimately fails leaves the skills it did fetch cached for the next
// one. (GitHub #4505 / MUL-3650)
for _, ref := range misses {
started := time.Now()
bundle, err := d.resolveSkillBundle(ctx, task, ref)
if err != nil {
// Name the skill, its declared size, and how long we actually
// waited. The bare "resolve skill bundles: context deadline
// exceeded" this replaced was indistinguishable from a generic
// network fault, and cost a community thread three hours of
// guesswork (MUL-5370): size + elapsed separate "this bundle is
// too big for the link" from "the link is dead".
return fmt.Errorf("%w: skill %q (id=%s, %d bytes) after %s: %w",
errSkillBundleUnavailable, ref.Name, ref.ID, ref.SizeBytes,
time.Since(started).Round(time.Millisecond), err)
}
resolved[skillRefKey(bundle.Source, bundle.ID)] = bundle
}
skills := make([]SkillData, 0, len(task.Agent.SkillRefs))
for _, ref := range task.Agent.SkillRefs {
bundle, ok := resolved[skillRefKey(ref.Source, ref.ID)]
if !ok {
return fmt.Errorf("skill bundle missing after resolve: skill_id=%s source=%s hash=%s", ref.ID, ref.Source, ref.Hash)
}
skills = append(skills, bundle)
}
task.Agent.Skills = skills
return nil
}
View on GitHub (pinned to 2c0912b6ec)
Solutions
- Clear the skill bundle cache for the affected skill and retry.
When it happens
Trigger: Thrown at server/internal/daemon/daemon.go:5896 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of multica-ai/multica@2c0912b6ec (2026-08-15).
Data as JSON: /api/errors/77a32fc30f7f8f45.
Report an issue: GitHub.