{"record":{"id":"513b01b02ded95a1","repo":"pentaho/pentaho-kettle","slug":"module-with-id-id-provides-no-specification","errorCode":null,"errorMessage":"Module with id '{id}' provides no specification.","messagePattern":"Module with id '(.+?)' provides no specification\\.","errorType":"validation","errorClass":"ArgumentInvalidError","httpStatus":null,"severity":"error","filePath":"plugins/core-ui/src/main/resources/app/pentaho/_core/module/MetaService.js","lineNumber":92,"sourceCode":"\n        preparedModuleIdList.forEach(function(id) {\n          moduleResolver(id);\n        });\n\n        return this;\n\n        // ---\n\n        // 1. Perform basic validation and index by id and alias.\n        function prepareModule(moduleSpec, id) {\n          if(!id) {\n            throw new ArgumentInvalidError(\n              \"moduleSpecMap\",\n              \"Module map contains an empty module identifier.\");\n          }\n\n          if(!moduleSpec) {\n            throw new ArgumentInvalidError(\n              \"moduleSpecMap\",\n              \"Module with id '\" + id + \"' provides no specification.\");\n          }\n\n          // ---\n\n          var module = this.__get(id);\n          if(module !== null) {\n            module.__configure(moduleSpec);\n          } else {\n\n            if(O.hasOwn(preparedModuleSpecMap, id)) {\n              throw new ArgumentInvalidError(\n                \"moduleSpecMap\",\n                \"A module with the id or alias '\" + id + \"' is already being defined.\");\n            }\n\n            moduleSpec = Object.create(moduleSpec);","sourceCodeStart":74,"sourceCodeEnd":110,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/plugins/core-ui/src/main/resources/app/pentaho/_core/module/MetaService.js#L74-L110","documentation":"pentaho.lang.ArgumentInvalidError thrown by prepareModule when a moduleSpecMap entry exists under a valid id but its specification value is falsy (null, undefined, empty). Each module id must map to a non-empty specification object.","triggerScenarios":"Passing {\"my/module\": null} or {\"my/module\": undefined} in a moduleSpecMap to MetaService configuration.","commonSituations":"Config file where a module entry was left empty; a variable holding the spec was undefined; YAML/JSON config converted with null values for placeholder entries.","solutions":["Provide a non-empty specification object for every module id in the map.","Remove entries whose specs are not yet defined.","Validate the spec map before passing it to configuration."],"exampleFix":"// before\n{\"pentaho/visual/impl/bar\": null}\n// after\n{\"pentaho/visual/impl/bar\": {\"type\": \"pentaho/type/complex\"}}","handlingStrategy":"validation","validationCode":"Object.keys(moduleSpecMap).forEach(function(k) {\n  if(!moduleSpecMap[k]) throw new Error(\"module '\" + k + \"' has empty spec\");\n});","typeGuard":"function allSpecsPresent(map) { return Object.keys(map).every(function(k) { return !!map[k]; }); }","tryCatchPattern":"try { metaService.__configure(map); } catch(e) { if(/provides no specification/.test(e.message)) { console.error(\"missing spec entry\", e.message); } else { throw e; } }","preventionTips":["Remove placeholder null entries from config","Use schema validation on module config files before load"],"tags":["invalid-argument","module-configuration","missing-spec"],"backgroundTag":"invalid-config-value","analyzedSha":"f3058517a153da500bf4551f46d79b91bf8ec552","analyzedAt":"2026-09-13T14:04:16.340Z","contentChangedAt":"2026-09-13T14:04:16.340Z","schemaVersion":2},"datasetVersion":"2026-09-20T23:17:15.980Z"}