docs← Back to article

Markdown for LLMs

LDC-E8204 — Predicate template placeholder is not a name

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

Download this articlePlain text ↗
# LDC-E8204 — Predicate template placeholder is not a name

## What it means

A relation label can carry one predicate template: a sentence with
placeholders for the relation parameters, so that readers see the same
phrase the rule uses. A placeholder is always a bare parameter name in
braces, such as `{amount}`. Anything else in braces — a number, a form
with a colon, or an expression — is not a placeholder the engine can
fill, so the compiler stops at the template and asks for plain names.

Repetition is fine and extra text around the placeholders is fine; only
the inside of each brace pair must be exactly one parameter name.

## Example

```law
language "law.core" version "0.2";
package demo.diag version "0.1.0";
namespace "urn:law:demo:diag";

entity C { label ru-KZ official "C"; }
relation r(a: C, b: C) kind empirical {
    label ru-KZ official "r" { template "{1} {a} {b}"; }
}
```

## Fix

```law
language "law.core" version "0.2";
package demo.diag version "0.1.0";
namespace "urn:law:demo:diag";

entity C { label ru-KZ official "C"; }
relation r(a: C, b: C) kind empirical {
    label ru-KZ official "r" { template "{a} and {b}"; }
}
```

## Engine message

The engine reports this in its own wording:

```text
example.law:7:32: error LDC-E8204: placeholder {1} is not a parameter name: positional references, forms and expressions are not supported in the predicate template (§218.2)
```

## Related

- [Vocabulary](/constructs/vocabulary/) — how names are declared and which positions take them.