{"record":{"id":"ab541dd318d6b358","repo":"multica-ai/multica","slug":"validate-plugin-w","errorCode":null,"errorMessage":"validate Plugin: %w","messagePattern":"validate Plugin: %w","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"server/cmd/multica/cmd_plugin.go","lineNumber":183,"sourceCode":"\t\tManifestDigest: plugincontract.DigestBytes(artifact.CanonicalManifest), ArchiveDigest: artifact.ArchiveDigest,\n\t\tArtifactDigest: artifact.ArtifactDigest, SizeBytes: artifact.SizeBytes, FileCount: len(artifact.Files),\n\t}\n}\n\nfunc printPluginDigest(cmd *cobra.Command, result pluginDigestOutput, output string) error {\n\tif output == \"json\" {\n\t\treturn cli.PrintJSON(cmd.OutOrStdout(), result)\n\t}\n\tcli.PrintTable(cmd.OutOrStdout(), []string{\"PLUGIN\", \"VERSION\", \"MANIFEST\", \"ARCHIVE\", \"ARTIFACT\"}, [][]string{{\n\t\tresult.PluginKey, result.Version, result.ManifestDigest, result.ArchiveDigest, result.ArtifactDigest,\n\t}})\n\treturn nil\n}\n\nfunc runPluginValidate(cmd *cobra.Command, args []string) error {\n\t_, artifact, err := loadPluginSource(args[0])\n\tif err != nil {\n\t\treturn fmt.Errorf(\"validate Plugin: %w\", err)\n\t}\n\toutput, _ := cmd.Flags().GetString(\"output\")\n\treturn printPluginDigest(cmd, pluginDigestResult(artifact), output)\n}\n\nfunc runPluginPack(cmd *cobra.Command, args []string) error {\n\toutputPath, _ := cmd.Flags().GetString(\"output\")\n\tif outputPath == \"\" {\n\t\treturn fmt.Errorf(\"--output is required\")\n\t}\n\tarchive, artifact, err := plugincontract.PackDirectory(args[0])\n\tif err != nil {\n\t\treturn fmt.Errorf(\"pack Plugin: %w\", err)\n\t}\n\tif err := os.WriteFile(filepath.Clean(outputPath), archive, 0o644); err != nil {\n\t\treturn fmt.Errorf(\"write Plugin archive: %w\", err)\n\t}\n\tformat, _ := cmd.Flags().GetString(\"format\")","sourceCodeStart":165,"sourceCodeEnd":201,"githubUrl":"https://github.com/multica-ai/multica/blob/2c0912b6ec764b373d44eeea1e80f0d9f11ab417/server/cmd/multica/cmd_plugin.go#L165-L201","documentation":"Top-level wrap in runPluginValidate (cmd_plugin.go:183): `multica plugin validate <source>` failed in loadPluginSource — which covers stat errors, non-dir/non-regular sources (564), oversize archives (565), read failures, or plugincontract.ValidateArtifact rejecting the archive (bad zip, missing/invalid manifest, digest mismatch). The %w chain preserves which one.","triggerScenarios":"Validating a directory whose manifest fails contract validation; validating a corrupt or truncated zip; any of the loadPluginSource preconditions failing.","commonSituations":"Editing plugin.yaml by hand and breaking required fields; a zip transferred in text mode (corrupted); validating the folder before the scaffold finished writing files.","solutions":["Read the wrapped cause in the message — it identifies the exact sub-failure (not-empty-style checks are upstream; here it is stat/size/validate).","If ValidateArtifact failed, re-run `multica plugin init` and diff your manifest against the fresh scaffold to find missing/invalid fields.","Rebuild the zip cleanly (`zip -r` from the plugin root) and re-validate.","Verify integrity: `unzip -t plugin.zip`."],"exampleFix":"// before\nmultica plugin validate ./dist/plugin.zip   // validate Plugin: manifest: missing required field \"key\"\n\n// after: fix plugin.yaml\n# metadata.key: com.example.my-plugin\nmultica plugin validate ./dist/plugin.zip","handlingStrategy":"validation","validationCode":"if _, _, err := loadPluginSource(src); err != nil {\n    return fmt.Errorf(\"pre-flight failed, not invoking CLI: %w\", err)\n}","typeGuard":null,"tryCatchPattern":"err := runPluginValidate(cmd, args)\nif err != nil {\n    if strings.Contains(err.Error(), \"exceeds\") { /* shrink archive */ } else if strings.Contains(err.Error(), \"manifest\") { /* fix yaml */ }\n}","preventionTips":["Run validate in CI immediately after pack so failures surface at build time.","Keep a scaffolded reference manifest and diff yours against it.","Always unzip -t archives before trusting them."],"tags":["cli","plugin","validation","manifest","go"],"backgroundTag":null,"analyzedSha":"2c0912b6ec764b373d44eeea1e80f0d9f11ab417","analyzedAt":"2026-08-15T13:25:18.241Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}