docs← Back to article

Markdown for LLMs

LDC-E1355 — Case-package root outside its composition

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

Download this articlePlain text ↗
# LDC-E1355 — Case-package root outside its composition

## What it means

A case package keeps a closed composition at its root: policies,
calendars, and the cases themselves. Norms, relations, and facts live
in a separate pinned package that the root depends on — never beside
the cases. A relation or rule declared at the root breaks the split
the whole resolution machinery assumes, so the engine stops at the
root before linking any world.

The repair is to move the declarations into the pinned model package
and depend on it, leaving the root to cases and policies. The root
asks questions; it never declares what they are about.

## Example

```run
{"argv": ["ask", "$ROOT", "--query-id", "Q", "--query", "evaluate truth(sunny());"], "files": {"law.toml": "[package]\nname = \"demo.diagnostics\"\nversion = \"0.1.0\"\nlanguage = \"0.2\"\nnamespace = \"urn:law:demo:diagnostics\"\n\n[[cases]]\nname = \"Solo\"\npath = \"solo.lawcase\"\n", "package.law": "language \"law.core\" version \"0.2\";\npackage demo.diagnostics version \"0.1.0\";\nnamespace \"urn:law:demo:diagnostics\";\n\nrelation sunny() kind institutional;\n", "solo.lawcase": "language \"law.core\" version \"0.2\";\npackage demo.diagnostics version \"0.1.0\";\nnamespace \"urn:law:demo:diagnostics\";\n\nrelation sunny() kind institutional;\n\ncase Solo {\n    context {\n        legal_time @2026-08-26;\n    }\n}\n", "law.lock": "{\n  \"dependencyEdges\": [],\n  \"languageSemantics\": \"law.core/0.2.0\",\n  \"lockVersion\": \"0.1\",\n  \"packages\": [],\n  \"resolutionHash\": \"sha256:be03238a8c67b8f0879522d90b0750732ba05663f96df91cea6118d0a84076b1\",\n  \"root\": {\n    \"contentHash\": \"sha256:f6ee452b5a1b1ea60601c67b78a639066f8bda6b184f379b80749633c387331f\",\n    \"name\": \"demo.diagnostics\",\n    \"namespace\": \"urn:law:demo:diagnostics\",\n    \"version\": \"0.1.0\"\n  }\n}\n"}, "expect": "LDC-E1355"}
```

## Fix

```run
{"argv": ["ask", "$ROOT", "--query-id", "Q", "--query", "evaluate truth(sunny());"], "files": {"law.toml": "[package]\nname = \"demo.diagnostics\"\nversion = \"0.1.0\"\nlanguage = \"0.2\"\nnamespace = \"urn:law:demo:diagnostics\"\n\n[[cases]]\nname = \"Solo\"\npath = \"solo.lawcase\"\n", "package.law": "language \"law.core\" version \"0.2\";\npackage demo.diagnostics version \"0.1.0\";\nnamespace \"urn:law:demo:diagnostics\";\n", "solo.lawcase": "language \"law.core\" version \"0.2\";\npackage demo.diagnostics version \"0.1.0\";\nnamespace \"urn:law:demo:diagnostics\";\n\nrelation sunny() kind institutional;\n\ncase Solo {\n    context {\n        legal_time @2026-08-26;\n    }\n}\n", "law.lock": "{\n  \"dependencyEdges\": [],\n  \"languageSemantics\": \"law.core/0.2.0\",\n  \"lockVersion\": \"0.1\",\n  \"packages\": [],\n  \"resolutionHash\": \"sha256:be03238a8c67b8f0879522d90b0750732ba05663f96df91cea6118d0a84076b1\",\n  \"root\": {\n    \"contentHash\": \"sha256:f6ee452b5a1b1ea60601c67b78a639066f8bda6b184f379b80749633c387331f\",\n    \"name\": \"demo.diagnostics\",\n    \"namespace\": \"urn:law:demo:diagnostics\",\n    \"version\": \"0.1.0\"\n  }\n}\n"}, "expect": null}
```

## Engine message

The engine reports this in its own wording:

```text
{"error":{"code":"LDC-E1355","message":"the case-package root contains declarations outside the closed composition: symbol_decl — norms and facts live in a separate pinned package (§168.4)"}}
```

## Related

- [LDC-E1354](/diagnostics/LDC-E1354/) — a question with no registered case.