Skip to content
docs
Arxo ↗

LDC-E8301 — Overlapping rows under hit unique

For LLMs5 sections

A decision table with a unique hit policy promises that at most one row fires for any input: the rows must be pairwise disjoint. When two rows can both match the same input, the promise is broken — the engine could not pick a single winner — so the compiler stops at the later row and names both rows involved.

Narrowing one of the guards until the two rows exclude each other is the fix. If overlapping rows are intended, a different hit policy that allows several rows to fire says so explicitly.

Arxo Law
language "law.core" version "0.2";
package demo.diag version "0.1.0";
namespace "urn:law:demo:diag";
decision Bad(x: Integer) -> Integer {
table hit unique { when x >= 0 => 1; when x >= 0 => 2; otherwise => 0; }
}
Arxo Law
language "law.core" version "0.2";
package demo.diag version "0.1.0";
namespace "urn:law:demo:diag";
decision Good(x: Integer) -> Integer {
table hit unique { when x < 10 => 1; when x >= 10 => 2; otherwise => 0; }
}

The engine reports this in its own wording:

Output
example.law:6:40: error LDC-E8301: decision "Bad": TABLE_OVERLAP between rows sha256:672c5325b6d7f7a721c9583945d1eca868ea3d2ffe288d2e4bf646227837365a and sha256:7e210bd11ae60986de842d6a4f28b753d46b7cce012b75f74407f2c4d244d2d4 under hit unique

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

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