multica-ai/multica · error
write Plugin archive: %w
Error message
write Plugin archive: %w
What it means
Wrap in runPluginPack (cmd_plugin.go:199): the archive was built and validated successfully, but writing it to the cleaned --output path failed. This is a pure filesystem error at the final step — unwritable directory, path is a directory, disk full, or permission denied.
Source
Thrown at server/cmd/multica/cmd_plugin.go:199
_, artifact, err := loadPluginSource(args[0])
if err != nil {
return fmt.Errorf("validate Plugin: %w", err)
}
output, _ := cmd.Flags().GetString("output")
return printPluginDigest(cmd, pluginDigestResult(artifact), output)
}
func runPluginPack(cmd *cobra.Command, args []string) error {
outputPath, _ := cmd.Flags().GetString("output")
if outputPath == "" {
return fmt.Errorf("--output is required")
}
archive, artifact, err := plugincontract.PackDirectory(args[0])
if err != nil {
return fmt.Errorf("pack Plugin: %w", err)
}
if err := os.WriteFile(filepath.Clean(outputPath), archive, 0o644); err != nil {
return fmt.Errorf("write Plugin archive: %w", err)
}
format, _ := cmd.Flags().GetString("format")
return printPluginDigest(cmd, pluginDigestResult(artifact), format)
}
func pluginWorkspaceID(cmd *cobra.Command) (string, error) {
workspace, _ := cmd.Flags().GetString("workspace")
if workspace == "" {
return requireWorkspaceID(cmd)
}
ctx, cancel := cli.APIContext(context.Background())
defer cancel()
resolved, err := resolveWorkspaceRef(ctx, cmd, workspace)
if err != nil {
return "", err
}
return resolved.ID, nil
}View on GitHub (pinned to 2c0912b6ec)
Solutions
- Create the parent directory: `mkdir -p $(dirname <output>)`.
- Check the path is free: `ls -ld <output>` — remove it if it is an existing directory.
- Verify write permission and disk space (`df -h .`), then retry.
Example fix
// before multica plugin pack . --output ./dist/plugin.zip // dist/ absent -> write Plugin archive: no such file or directory // after mkdir -p dist && multica plugin pack . --output ./dist/plugin.zip
Defensive patterns
Strategy: validation
Validate before calling
if err := os.MkdirAll(filepath.Dir(outputPath), 0o755); err != nil { return err }
if fi, err := os.Stat(outputPath); err == nil && fi.IsDir() { return fmt.Errorf("output %s is a directory", outputPath) } Prevention
- mkdir -p the output directory in the same script step as pack.
- Use a fresh versioned filename per build (plugin-0.1.1.zip) to avoid clobbering/dir conflicts.
- Check df/permissions in CI before the build job.
When it happens
Trigger: --output points into a non-existent directory; output path is itself a directory; no write permission; ENOSPC; read-only filesystem.
Common situations: Forgetting `mkdir -p dist`; running as a user without write access to the target; CI container with a read-only mount at the output location.
Related errors
- inspect plugin directory: %w
- resolve profile %q: %w
- plugin directory %q is not empty
- plugin source %q is not a directory or regular ZIP
- pack Plugin: %w
AI-assisted analysis of multica-ai/multica@2c0912b6ec (2026-08-15).
Data as JSON: /api/errors/7a07b2843b877b0d.
Report an issue: GitHub.