Skip to content
docs
Arxo ↗

Anchor a rule to an article

For LLMs7 sections

I want to see from which article a rule was derived.

A fragment cannot be anchored to a made-up edition.

Incorrect form
fragment F in Missing
Arxo Law
language "law.core" version "0.2";
package recipe.i02 version "1.0.0";
namespace "urn:recipe:i-sources:02";
source Act { kind policy; }
edition E of Act { language ru; officiality unofficial; materialization_status ABSTRACT_ONLY; in_force [@2026-01-01, infinity); }
fragment F in E { kind article; locator "article/1"; text ru unofficial """Заявление принимается."""; }
entity Person;
relation filed(p: Person);
relation accepted(p: Person);
@source(F)
rule Accept strict { for p: Person; when filed(p); then accepted(p); }

Below is a minimal reproducible scene.

FactsQuestionAnswer
filedacceptedTRUE_ONLY
only the article textacceptedNEITHER
filed, @source removedacceptedTRUE_ONLY
Python
>>> import runpy
>>> checks = runpy.run_path("docs/recipes/i-sources/resources/check.py")
>>> checks["anchors"](https://github.com/arxohq/law/blob/master/docs/recipes/i-sources/2)
True

A separate scene shows language 0.1 withdrawn from support: new 0.1 sources are refused, with no execution. The adapter pins exactly this refusal.

withdrawn 0.1 refuses to lower
lawtest
language "law.core" version "0.1";
package recipe.i02 version "1.0.0";
namespace "urn:recipe:i-sources:02";
test "withdrawn 0.1 refuses to lower" {
given {
context { legal_time @2026-09-13; decision_time @2026-09-13T09:00:00Z; knowledge_time @2026-09-13T09:00:00Z; timezone "UTC"; }
assert filed(entity_ref("urn:recipe:i-sources:person"));
}
evaluate truth(accepted(entity_ref("urn:recipe:i-sources:person")));
expect truth_status == TRUE_ONLY;
expect evaluation_status == COMPUTED;
}
Python
>>> import runpy
>>> checks = runpy.run_path("docs/recipes/i-sources/resources/check.py")
>>> checks["legacy"](https://github.com/arxohq/law/blob/master/docs/recipes/i-sources/2)
True

The teaches mutation reproduces LDC-E5102. Counterfactual outcomes are also listed in the table and the sidecar.

An anchor does not prove correctness of the interpretation. A bare anchor carries only the positional StableId. Named attributes materialize an anchor node carrying the norm locus: relation and coverage with defaults, plus an exact quote. A bare name not declared by the package source model warns instead of tracing silently; an attribute value outside the closed dictionary is an error. The page uses a bare @source(F) and promises no dictionary checks beyond the named refusals.

Here a minimal checkable witness is left.

Relation/coverage were once accepted as plain strings, and an unknown local anchor lost the trace. Re-measured: the strings are gone, the anchor node is emitted, a bare name warns, a wrong value is refused. A green check alone must not be declared a verified link.

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

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