docs← Back to article

Markdown for LLMs

Move a rule onto the edition in force

The source Markdown for this article. Copy it into your assistant or download it as a text file.

Download this articlePlain text ↗
# Move a rule onto the edition in force

## Intent

I want to execute a norm from the edition in force.

## Wrong form and why it stays silent

A fragment with current text cannot be placed in a non-existent edition; the date is determined by its real owner.

```text title="Incorrect form"
fragment CurrentF in Missing
```

## Correct form

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

## Frozen execution scene

The scenes below compare CurrentF and OldF on 13 September; removing the current anchor from a node with two dating anchors leaves only the closed one.

```python
>>> import runpy
>>> checks = runpy.run_path("docs/recipes/i-sources/resources/check.py")
>>> checks["lifecycle"](https://github.com/arxohq/law/blob/master/docs/recipes/i-sources/7)
True
```


Scene 1; full program.

```lawtest
language "law.core" version "0.2";
package recipe.i07 version "1.0.0";
namespace "urn:recipe:i-sources:07";

test "two anchors establish on current date" {
    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;
}
```

Scene 2; `@source(CurrentF)` is removed.

```lawtest
language "law.core" version "0.2";
package recipe.i07 version "1.0.0";
namespace "urn:recipe:i-sources:07";

test "removed current anchor leaves neither" {
    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 == NEITHER;
    expect evaluation_status == COMPUTED;
}
```

Scene 3; `@source(OldF)` is removed.

```lawtest
language "law.core" version "0.2";
package recipe.i07 version "1.0.0";
namespace "urn:recipe:i-sources:07";

test "removed old anchor keeps truth" {
    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;
}
```

Scene 4; full program.

```lawtest
language "law.core" version "0.2";
package recipe.i07 version "1.0.0";
namespace "urn:recipe:i-sources:07";

test "old law date still establishes" {
    given {
        context { legal_time @2026-06-30; 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;
}
```

## Counterfactual

The `teaches` mutation reproduces `LDC-E5102`. Additional variants are checked by the shown adapter call.

## Boundary

Moving an anchor is allowed after checking the ground of the norm in the new edition; mechanical removal of an anchor hides the date.

## Pitfall

A normative node is excluded if all of its dating editions are inapplicable. This is not disappearance of a case fact.