Interpretation pitfalls
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.
7. Traps for automated authors
Section titled “7. Traps for automated authors”excludewithoutextendsremoves the wrong thing:exclude Rremoves the same expansion thatinclude Rbrings, and stays local for the same reason. Excluding from another’s reading is written asextendswith an explicitexcludevisible in provenance (set composition, not mutation).- A cycle across two alternatives of one
exactly_onegroup is statically unreported — it cannot realize; the same cycle inside one reading or throughany_ofis reported. Static silence here is the norm, not a gap. - Silent outcome:
NEITHERunder a selected “foreign” reading is not a package defect but a blocked alternative. Check theinterpretation …;line in the case context first. weak_permissionand 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.