docs← Back to article

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.

Download this articlePlain text ↗
# 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.