Markdown for LLMs
LPK-E0203 — lock does not cover the manifest, or an entry lacks registryId
The source Markdown for this article. Copy it into your assistant or download it as a text file.
# LPK-E0203 — lock does not cover the manifest, or an entry lacks registryId
## What it means
The manifest says what the project wants; the lock says exactly what it gets. Installing refuses to guess between the two: when a manifest dependency has no lock entry, or a lock entry names no source registry, the command stops and lists the gap. Nothing is created or changed by the refusal.
Re-pinning through the add or update commands brings the lock back in line with the manifest. Hand-editing the manifest means re-pinning afterwards, never installing over the gap.
## Example
```pkgtest
{
"files": {
"law.toml": "[package]\nname = \"demo.mini\"\nversion = \"0.1.0\"\nlanguage = \"0.2\"\nnamespace = \"urn:law:demo:mini\"\n\n[dependencies]\nfoo = \"1.0.0\"\n",
"law.lock": "{\n \"dependencyEdges\": [],\n \"languageSemantics\": \"law.core/0.2.0\",\n \"lockVersion\": \"0.1\",\n \"packages\": [],\n \"resolutionHash\": \"sha256:bb103be20ebfcb04bcffd538830d52d5eb66922a4402c79aeb1b3e47fed1887d\",\n \"root\": {\n \"contentHash\": \"sha256:7a9e86e96b3bd3f801a7efebf4db20bd7d59ddd4b256ee4c02fd31e6617cdd2b\",\n \"name\": \"demo.sk\",\n \"namespace\": \"urn:law:demo:sk\",\n \"version\": \"0.1.0\"\n }\n}\n"
},
"cmd": [
"install",
"--project",
"."
],
"expect": "LPK-E0203"
}
```
## Fix
```pkgtest
{"files": {}, "cmd": ["init", ".", "--name", "demo.diag"]}
```
## Engine message
The tool reports this in its own wording:
```text
law: REFUSAL LPK-E0203: law.lock does not cover the manifest:
```
## Related
- [Package, context, snapshots](/recipes/n-package/) — what a project directory holds.