{"record":{"id":"7c574a833cf9fa5a","repo":"halo-dev/halo","slug":"provider-resource-does-not-exist-inside-its-root","errorCode":null,"errorMessage":"Provider resource does not exist inside its root: {value}","messagePattern":"Provider resource does not exist inside its root: (.+?)","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"application/src/main/java/run/halo/app/plugin/UiPluginBundleServiceImpl.java","lineNumber":240,"sourceCode":"                || !Set.of(\"format\", \"entry\", \"style\").containsAll(fields)) {\n            throw new IllegalArgumentException(\"Provider manifest must contain format, entry, and optional style only\");\n        }\n        if (!\"esm\".equals(manifest.path(\"format\").textValue())) {\n            throw new IllegalArgumentException(\"Provider manifest format must be esm\");\n        }\n        var entry = validateManifestResource(candidate, manifest.path(\"entry\"));\n        var style = manifest.has(\"style\") ? validateManifestResource(candidate, manifest.path(\"style\")) : null;\n        return new ProviderManifest(entry, style);\n    }\n\n    private String validateManifestResource(ProviderCandidate candidate, JsonNode value) {\n        if (!value.isTextual()) {\n            throw new IllegalArgumentException(\"Provider resource path must be a string\");\n        }\n        var resourcePath = normalizeResourcePath(value.textValue());\n        var resource = providerResource(candidate, resourcePath);\n        if (resource == null || !resource.isReadable()) {\n            throw new IllegalArgumentException(\n                    \"Provider resource does not exist inside its root: \" + value.textValue());\n        }\n        return resourcePath;\n    }\n\n    private static String normalizeResourcePath(String resourcePath) {\n        if (!StringUtils.hasText(resourcePath)) {\n            throw new IllegalArgumentException(\"Provider resource path must not be blank\");\n        }\n        var normalizedSlashes = resourcePath.replace('\\\\', '/');\n        if (normalizedSlashes.startsWith(\"/\")\n                || normalizedSlashes.startsWith(\"//\")\n                || normalizedSlashes.contains(\"?\")\n                || normalizedSlashes.contains(\"#\")\n                || normalizedSlashes.matches(\"^[a-zA-Z][a-zA-Z0-9+.-]*:.*\")) {\n            throw new IllegalArgumentException(\n                    \"Provider resource path must be provider-root-relative: \" + resourcePath);\n        }","sourceCodeStart":222,"sourceCodeEnd":258,"githubUrl":"https://github.com/halo-dev/halo/blob/d2f5165f9c8f055ffcb3fa9c3f4032821a7b68c8/application/src/main/java/run/halo/app/plugin/UiPluginBundleServiceImpl.java#L222-L258","documentation":"Error \"Provider resource does not exist inside its root: {value}\" thrown in halo-dev/halo.","triggerScenarios":"Thrown at application/src/main/java/run/halo/app/plugin/UiPluginBundleServiceImpl.java:240 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Verify the entry/style path declared in the provider manifest actually exists inside the plugin bundle's static resources.","Rebuild the plugin so the bundler emits the entry file at the path recorded in the manifest.","Check for case-sensitivity mismatches between the manifest path and the packaged file name."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"d2f5165f9c8f055ffcb3fa9c3f4032821a7b68c8","analyzedAt":"2026-08-14T00:18:38.915Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}