docs← Back to article

Markdown for LLMs

LPK-E0202 — no law.toml

The source Markdown for this article. Copy it into your assistant or download it as a text file.

Download this articlePlain text ↗
# LPK-E0202 — no law.toml

## What it means

Installing never picks versions: it restores exactly what the lock pins, no more and no less. When the directory holds a manifest but no lock, there is nothing exact to restore, so the command refuses before doing anything. Nothing is created or changed by the refusal.

A fresh project gets its lock by adding its first dependency; a norms package writes one with the lock command. Either way, the lock comes first and the install second.

## Example

```pkgtest
{"files": {"law.toml": "[package]\nname = \"demo.mini\"\nversion = \"0.1.0\"\nlanguage = \"0.2\"\nnamespace = \"urn:law:demo:mini\"\n"}, "cmd": ["install", "--project", "."], "expect": "LPK-E0202"}
```

## Fix

```pkgtest
{"files": {}, "cmd": ["init", ".", "--name", "demo.diag"]}
```

## Engine message

The tool reports this in its own wording:

```text
law: REFUSAL LPK-E0202: .: no law.lock
```

## Related

- [Package, context, snapshots](/recipes/n-package/) — what a project directory holds.