Skip to content
docs
Arxo ↗

LPK-E0801 — fact already proposed

For LLMs5 sections

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.

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"
}
pkgtest
{"files": {}, "cmd": ["init", ".", "--name", "demo.diag"]}

The tool reports this in its own wording:

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

Documentation for Arxo. Writings — blog.arxo.io.

Anonymous visit counts on stats.arxo.io, no cookies.