Troubleshooting
Most publisher errors fall into one of three groups:
- the command cannot find an operator config or manifest source
- the local machine is missing a publishing prerequisite
- the scratch output path already exists
- Hugging Face accepted the publish but rejected the collection update
skulk-weights.yaml not found
The built-in Foxlight catalog does not need a config file. You only need
--config PATH when you are adding operator catalog sources. If you pass
--config, make sure the path exists:
uv run skulk-weights --config skulk-weights.yaml catalog validate
models.yaml not found
This error comes from legacy single-manifest mode or from an operator source
listed in skulk-weights.yaml. Run commands from the repository root, fix the
source path, or pass --manifest PATH when you intentionally want legacy mode.
missing command: larql
Install LARQL and make sure it is on PATH. This is required only for real
publication, not for normal validation or dry-runs.
Run the safe command first:
uv run skulk-weights publish --model foxlight/gemma-3-4b-full-q4-k --dry-run
Then run the publishing preflight on the runner:
uv run skulk-weights doctor --publish
HF_TOKEN is not set
Real publication needs a Hugging Face token with write access to the target repository and collection.
In GitHub Actions, configure HF_TOKEN as a repository secret. On a manual
runner shell, export it before publishing:
export HF_TOKEN=...
failed to add ... to collection ...
The LARQL publish finished, but the Hugging Face collection update failed.
Confirm that the collection slug exists and that HF_TOKEN has permission to
modify it. The built-in Foxlight entries target:
FoxlightAI/vindexes-6a124406dd5fb439c431b051
output path already exists
The publisher refuses to overwrite local extraction output by default. Remove
the directory manually, choose another scratch root, or rerun with --force
when replacement is intentional.
This check matters because extraction output can be large and may correspond to a specific runtime role. Accidentally reusing a path can leave operators unsure which vindex should be placed on GPU inference nodes or CPU/high-memory LARQL servers.
Use a different scratch root when you want to keep the old output:
uv run skulk-weights publish \
--model foxlight/gemma-3-4b-full-q4-k \
--scratch /fast/scratch/skulk-weights-2
no MTP sidecar configured for ...
This error occurs during real (non-dry-run) publishing. You ran --artifact mtp
on an entry that does not have mtp_source_repo and mtp_sidecar_repo set in
the catalog. In dry-run mode the publisher instead prints
mtp step: not configured for this entry and exits cleanly.
Either add those fields to the entry or use --artifact vindex to publish only
the vindex.
See the MTP sidecar guide for the required catalog fields and how to structure the entry.
no mtp.* keys found in ...
SWP downloaded the source checkpoint but found no tensors matching mtp.*. This
means either:
- the
mtp_source_repopoints to a quantized checkpoint rather than the original BF16 weights — MTP tensors are stripped by quantization pipelines, somtp_source_repomust always point to the BF16 source, not a derivative. - the model was not trained with native MTP heads at all.
Confirm that the source repo contains the original checkpoint (usually the
upstream model card on Hugging Face will say so) and update mtp_source_repo
accordingly.
no vision sidecar configured for ...
This error occurs during real (non-dry-run) publishing. You ran
--artifact vision on an entry that does not have both vision_source_repo and
vision_sidecar_repo set in the catalog. The two fields are both-or-none.
Either add those fields to the entry or use --artifact vindex to publish only
the vindex. See the Vision sidecar guide for the
required catalog fields and how to structure the entry.
no .safetensors weights found in ...
SWP resolved the vision_source_repo but found no .safetensors files to
mirror. A vision sidecar mirrors the encoder weights byte-for-byte, so the
source repo must actually contain .safetensors weights. Confirm that
vision_source_repo points at the repository that holds the vision-encoder
weights (often a third-party repo, not the mlx-community quant that omits them).