Markdown for LLMs
LDC-E8705 — Boundary does not match granularity
The source Markdown for this article. Copy it into your assistant or download it as a text file.
# LDC-E8705 — Boundary does not match granularity
## What it means
A parameter dataset reads time through one granularity: dates or
instants. Every boundary — the coverage edges and each row edge — must
sit on that grid: a date boundary is a calendar day, an instant boundary
is a timestamped instant. A boundary written in the other shape cuts a
grid cell in half, so the compiler stops at the first boundary that
misses the grid.
Snap the boundary to the dataset granularity: days for a date dataset,
full timestamps for an instant one.
## Example
```run
{"argv": ["check", "$ROOT"], "files": {"law.toml": "[package]\nname = \"demo.diagnostics\"\nversion = \"0.1.0\"\nlanguage = \"0.2\"\nnamespace = \"urn:demo:diagnostics\"\n", "main.law": "language \"law.core\" version \"0.2\";\npackage demo.diagnostics version \"0.1.0\";\nnamespace \"urn:demo:diagnostics\";\n\nentity Person;\n", "mrp.lawparam.json": "{\"schemaVersion\": \"law.params/0.1\", \"kind\": \"parameter-dataset\", \"id\": \"urn:demo:diagnostics#mrp\", \"parameter\": \"urn:demo:diagnostics#MRP\", \"valueType\": {\"name\": \"urn:law:std#Money\"}, \"timeAxis\": \"legal_time\", \"granularity\": \"instant\", \"coverage\": {\"start\": \"2025-01-01\", \"endExclusive\": null}, \"values\": [{\"id\": \"urn:demo:diagnostics#mrp#2025\", \"valid\": {\"start\": \"2025-01-01\", \"endExclusive\": \"2026-01-01\"}, \"value\": {\"kind\": \"value\", \"type\": {\"name\": \"urn:law:std#Money\"}, \"value\": \"3932\", \"currency\": \"KZT\"}, \"anchors\": [\"urn:demo:diagnostics#law#article-9\"]}, {\"id\": \"urn:demo:diagnostics#mrp#2026\", \"valid\": {\"start\": \"2026-01-01\", \"endExclusive\": null}, \"value\": {\"kind\": \"value\", \"type\": {\"name\": \"urn:law:std#Money\"}, \"value\": \"4325\", \"currency\": \"KZT\"}, \"anchors\": [\"urn:demo:diagnostics#law#article-9\"]}]}", "law.lock": "{\"lockVersion\": \"0.2\", \"resources\": [{\"capability\": \"compile_time\", \"contentHash\": \"sha256:611213f399942bb722634176727f846f80dc58ba7572818293fe7beb63a41cb3\", \"id\": \"urn:demo:diagnostics#mrp\", \"kind\": \"parameter-dataset\", \"path\": \"mrp.lawparam.json\"}]}"}, "expect": "LDC-E8705"}
```
## Fix
```run
{"argv": ["check", "$ROOT"], "files": {"law.toml": "[package]\nname = \"demo.diagnostics\"\nversion = \"0.1.0\"\nlanguage = \"0.2\"\nnamespace = \"urn:demo:diagnostics\"\n", "main.law": "language \"law.core\" version \"0.2\";\npackage demo.diagnostics version \"0.1.0\";\nnamespace \"urn:demo:diagnostics\";\n\nentity Person;\n", "mrp.lawparam.json": "{\"schemaVersion\": \"law.params/0.1\", \"kind\": \"parameter-dataset\", \"id\": \"urn:demo:diagnostics#mrp\", \"parameter\": \"urn:demo:diagnostics#MRP\", \"valueType\": {\"name\": \"urn:law:std#Money\"}, \"timeAxis\": \"legal_time\", \"granularity\": \"date\", \"coverage\": {\"start\": \"2025-01-01\", \"endExclusive\": null}, \"values\": [{\"id\": \"urn:demo:diagnostics#mrp#2025\", \"valid\": {\"start\": \"2025-01-01\", \"endExclusive\": \"2026-01-01\"}, \"value\": {\"kind\": \"value\", \"type\": {\"name\": \"urn:law:std#Money\"}, \"value\": \"3932\", \"currency\": \"KZT\"}, \"anchors\": [\"urn:demo:diagnostics#law#article-9\"]}, {\"id\": \"urn:demo:diagnostics#mrp#2026\", \"valid\": {\"start\": \"2026-01-01\", \"endExclusive\": null}, \"value\": {\"kind\": \"value\", \"type\": {\"name\": \"urn:law:std#Money\"}, \"value\": \"4325\", \"currency\": \"KZT\"}, \"anchors\": [\"urn:demo:diagnostics#law#article-9\"]}]}", "law.lock": "{\"lockVersion\": \"0.2\", \"resources\": [{\"capability\": \"compile_time\", \"contentHash\": \"sha256:4e67c8dd00f9f81714dac9ebb458546f98ab9a868cda961b9f181d474bdcb33d\", \"id\": \"urn:demo:diagnostics#mrp\", \"kind\": \"parameter-dataset\", \"path\": \"mrp.lawparam.json\"}]}"}, "expect": null}
```
## Engine message
The parameter checker reports this in its own wording:
```text
LDC-E8705: coverage boundary does not match granularity
```
## Related
- [LDC-E8703](/diagnostics/LDC-E8703/) — the neighbouring parameter refusal.