{"record":{"id":"ff32b942149b9499","repo":"denoland/deno","slug":"prefix-linter-plugin-must-be-an-object","errorCode":null,"errorMessage":"${prefix}Linter plugin must be an object","messagePattern":"(.+?)Linter plugin must be an object","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"cli/js/40_lint.js","lineNumber":483,"sourceCode":"    }\n  }\n\n  return plugins.map((plugin, i) => installPlugin(plugin, specifiers?.[i]));\n}\n\n/**\n * @param {Deno.lint.Plugin} plugin\n * @param {string} [specifier] The specifier the plugin was loaded from, if any.\n */\nfunction installPlugin(plugin, specifier) {\n  // When the plugin was loaded from a specifier (i.e. `lint.plugins` in the\n  // config), prefix validation errors with it so the user knows which plugin\n  // is misbehaving instead of getting an anonymous error.\n  const prefix = typeof specifier === \"string\"\n    ? `Failed to load lint plugin '${specifier}': `\n    : \"\";\n  if (typeof plugin !== \"object\") {\n    throw new Error(`${prefix}Linter plugin must be an object`);\n  }\n  if (typeof plugin.name !== \"string\") {\n    throw new Error(`${prefix}Linter plugin name must be a string`);\n  }\n  if (!/^[a-z-]+$/.test(plugin.name)) {\n    throw new Error(\n      `${prefix}Linter plugin name must only contain lowercase letters (a-z) or hyphens (-).`,\n    );\n  }\n  if (plugin.name.startsWith(\"-\") || plugin.name.endsWith(\"-\")) {\n    throw new Error(\n      `${prefix}Linter plugin name must start and end with a lowercase letter.`,\n    );\n  }\n  if (plugin.name.includes(\"--\")) {\n    throw new Error(\n      `${prefix}Linter plugin name must not have consequtive hyphens.`,\n    );","sourceCodeStart":465,"sourceCodeEnd":501,"githubUrl":"https://github.com/denoland/deno/blob/89f33cbef296a2b287f323d42de54c871fa69c77/cli/js/40_lint.js#L465-L501","documentation":"Internal invariant: the resolved LAUFEY backend binary path has no parent directory — i.e. it is a filesystem root such as `/` — so the containing directory used for support files cannot be derived.","triggerScenarios":"Effectively unreachable in normal use; would require the binary locator to return a root path, indicating an internal path-handling bug.","commonSituations":"None realistic; report it if seen.","solutions":["Re-run once to rule out a transient filesystem oddity","Clear the laufey cache so the backend is re-resolved from scratch","Report a bug against `deno desktop` with backend, target, and cache location if it persists"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"if (binaryPath === '/' || dirname(binaryPath) === binaryPath) {\n  throw new Error('internal: backend binary resolved to filesystem root — clearing cache and retrying');\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Treat as an internal bug: capture backend, target, and cache path for the report","Clear the laufey cache to force re-resolution"],"tags":["desktop","internal","filesystem","invariant","laufey"],"backgroundTag":null,"analyzedSha":"89f33cbef296a2b287f323d42de54c871fa69c77","analyzedAt":"2026-08-16T07:54:21.310Z","schemaVersion":2},"datasetVersion":"2026-08-16T08:17:34.114Z"}