{"record":{"id":"ffe60475a69b639d","repo":"apple/pkl","slug":"sourcemodules-contains-multiple-modules-named-d","errorCode":null,"errorMessage":"`sourceModules` contains multiple modules named `docsite-info.pkl`:\n${docsiteInfoModuleUris.joinToString(\"\\n\")}","messagePattern":"`sourceModules` contains multiple modules named `docsite-info\\.pkl`:\n(.+?)","errorType":"exception","errorClass":"CliException","httpStatus":null,"severity":"error","filePath":"pkl-doc/src/main/kotlin/org/pkl/doc/CliDocGenerator.kt","lineNumber":190,"sourceCode":"          docsiteInfoModuleUris.add(moduleUri)\n        moduleUri.path?.endsWith(\"/doc-package-info.pkl\", ignoreCase = true) ?: false ->\n          packageInfoModuleUris.add(moduleUri)\n        moduleUri.scheme == \"package\" -> {\n          if (moduleUri.fragment != null) {\n            throw CliException(\"Cannot generate documentation for just one module within a package\")\n          }\n          try {\n            packageUris.add(PackageUri(moduleUri))\n          } catch (e: URISyntaxException) {\n            throw CliException(e.message!!)\n          }\n        }\n        else -> regularModuleUris.add(moduleUri)\n      }\n    }\n\n    if (docsiteInfoModuleUris.size > 1) {\n      throw CliException(\n        \"`sourceModules` contains multiple modules named `docsite-info.pkl`:\\n\" +\n          docsiteInfoModuleUris.joinToString(\"\\n\")\n      )\n    }\n\n    if (packageInfoModuleUris.isEmpty() && packageUris.isEmpty()) {\n      throw CliException(\n        \"`sourceModules` must contain at least one module named `doc-package-info.pkl`, or an argument must be a package URI.\"\n      )\n    }\n\n    if (regularModuleUris.isEmpty() && packageUris.isEmpty()) {\n      throw CliException(\n        \"`sourceModules` must contain at least one module to generate documentation for.\"\n      )\n    }\n\n    val builder = evaluatorBuilder()","sourceCodeStart":172,"sourceCodeEnd":208,"githubUrl":"https://github.com/apple/pkl/blob/f3efcbfc9b60d30053b0536d664948d7aa1b8673/pkl-doc/src/main/kotlin/org/pkl/doc/CliDocGenerator.kt#L172-L208","documentation":"The pkl-doc CLI refuses to run when the `sourceModules` list contains more than one module named `docsite-info.pkl`. Each docsite can have exactly one docsite-info module defining its metadata, so duplicates are ambiguous. The error lists every URI found so the duplicate can be located.","triggerScenarios":"Running `pkl-doc` with multiple module arguments whose file name is `docsite-info.pkl`, e.g. passing docsite-info modules from two different directories or resolved via different paths to the same file.","commonSituations":"Accidentally passing both a local docsite-info.pkl and one from a dependency; listing the same directory twice with different path spellings; copy-pasting example commands that already include a docsite-info module.","solutions":["Remove all but one `docsite-info.pkl` module from the `sourceModules` arguments","Check the URI list printed in the error to see which duplicate paths are being passed","Deduplicate the argument list in your script/CI config"],"exampleFix":"// before\npkl-doc docsite-info.pkl ./site/docsite-info.pkl pkg1.pkl\n// after\npkl-doc docsite-info.pkl pkg1.pkl","handlingStrategy":"validation","validationCode":"val dupes = sourceModules.filter { it.fileName == \"docsite-info.pkl\" }\nrequire(dupes.size <= 1) { \"Multiple docsite-info.pkl passed: ${dupes.joinToString()}\" }","typeGuard":null,"tryCatchPattern":"try { pklDoc(args) } catch (e: CliException) { if (e.message?.startsWith(\"`sourceModules` contains multiple modules named\") == true) { /* dedupe args and retry */ } else throw e }","preventionTips":["Keep a single canonical docsite-info.pkl and reference it once","Lint CI scripts for repeated module arguments","Deduplicate the argument list programmatically before invoking"],"tags":["cli","duplicate-argument","validation"],"backgroundTag":"invalid-cli-argument","analyzedSha":"f3efcbfc9b60d30053b0536d664948d7aa1b8673","analyzedAt":"2026-09-08T13:10:45.570Z","contentChangedAt":"2026-09-08T13:10:45.570Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}