Skip to content
docs
Arxo ↗

Interpretation pitfalls

For LLMs7 sections

Wrong forms, silent outcomes, diagnostics, typical formalizer mistakes, and how to detect them. “Confirmed by running” items were reproduced by running the examples.

1. include brought a rule without its generated nodes (fixed)

Section titled “1. include brought a rule without its generated nodes (fixed)”

Previously include R brought one root StableId, while R/alt/N, R/unless/N with priority edges, R/norm/*, and R/head/N stayed outside every reading: a generated unless defeater acted in all readings at once. Today the whole canonical expansion comes in. Detection: a defeater firing under a “foreign” reading.

2. A qualified include of another’s rule

Section titled “2. A qualified include of another’s rule”

include pkg::R is rejected: lowering computes from the declaration, and the consumer has no neighbour’s declaration — an import carries the interface, not nodes. Silently it would bring one root and leave the generated nodes outside the reading. Fix: the owner declares a pub interpretation and includes the rule there; the consumer names the reading in extends or in alternatives.

3. A nested rule with an unbound head (fixed)

Section titled “3. A nested rule with an unbound head (fixed)”

Previously the connectedness pass walked only the top level, and an unbound head inside a reading lived to runtime. Today a nested rule’s connectedness is checked by the same rules and sounds with the same LDC-E4101 code, and the diagnostic name is the one lowering gives (Reading/Rule). Detection: law engine check.

4. A status with no group: a “disputed” reading always applies

Section titled “4. A status with no group: a “disputed” reading always applies”

status disputed alone selects nothing: the selection policy is set by the jurisdiction profile. A fork with a choice is only an interpretation_group. The corpus pairs above (TR, IR, Yasa) honestly carry disputed TOGETHER with a group — the status describes, the group decides. The mistake is reading disputed as “switched off until the dispute resolves”.

5. Expecting an answer “under the first” with no choice (confirmed by running)

Section titled “5. Expecting an answer “under the first” with no choice (confirmed by running)”

With selection exactly_one and no interpretation …; line in the context a dependent query answers INTERPRETATION_REQUIRED, not the first alternative’s answer: the language has no “first/last” order. Reproduction: examples/unresolved-group/tests/01-dependent-blocked.lawtest (expect evaluation_status == INTERPRETATION_REQUIRED — passes).

6. An independent query extinguished with the document (fixed)

Section titled “6. An independent query extinguished with the document (fixed)”

Previously an unresolved exactly_one group extinguished the whole document. Today an independent truth query gets COMPUTED and its truthStatus; the INTERPRETATION_REQUIRED issue stays in the document regardless. Reproduction: examples/unresolved-group/tests/02-independent-computed.lawtest (TRUE_ONLY + COMPUTED with no choice). The mistake is demanding a choice from a query that needs no reading.

  • exclude without extends removes the wrong thing: exclude R removes the same expansion that include R brings, and stays local for the same reason. Excluding from another’s reading is written as extends with an explicit exclude visible in provenance (set composition, not mutation).
  • A cycle across two alternatives of one exactly_one group is statically unreported — it cannot realize; the same cycle inside one reading or through any_of is reported. Static silence here is the norm, not a gap.
  • Silent outcome: NEITHER under a selected “foreign” reading is not a package defect but a blocked alternative. Check the interpretation …; line in the case context first.
  • weak_permission and calendar operations keep the document status: no dependence defined for them — never build forks on them.

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

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