docs← Back to article

Markdown for LLMs

LPK-E0801 — fact already proposed

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

Download this articlePlain text ↗
# LPK-E0801 — fact already proposed

## What it means

Proposing records a fact for the case exactly once: each proposal gets an identifier, and proposing the same fact again returns the existing identifier instead of duplicating the record. The refusal is the lookup succeeding — it names the proposal that already carries the fact. Nothing is created or changed by the refusal.

Using the named proposal identifier downstream, or replacing the fact explicitly when it changed, is the whole fix.

## Example

```pkgtest
{
  "files": {
    "law.toml": "[package]\nname = \"demo.case\"\nversion = \"0.1.0\"\nlanguage = \"0.2\"\nnamespace = \"urn:law:demo:case\"\n\n[[cases]]\nname = \"Main\"\npath = \"main.lawcase\"\n",
    "main.lawcase": "language \"law.core\" version \"0.2\";\npackage demo.case version \"0.1.0\";\nnamespace \"urn:law:demo:case\";\n\ncase Main {\n}\n",
    "facts.json": "[{\"predicate\": \"enrolled\", \"args\": [\"Ada\"]}, {\"predicate\": \"enrolled\", \"args\": [\"Ada\"]}]"
  },
  "cmd": [
    "case",
    "facts",
    "propose",
    "--from",
    "facts.json",
    "--by",
    "urn:law:registrar",
    "--at",
    "2026-01-01T00:00:00Z",
    "--project",
    "."
  ],
  "expect": "LPK-E0801"
}
```

## Fix

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

## Engine message

The tool reports this in its own wording:

```text
law: REFUSAL LPK-E0801: fact already proposed p-0001 (§168.4)
```

## Related

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