docs← Back to article

Markdown for LLMs

Prove maintenance compliance

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

Download this articlePlain text ↗
# Prove maintenance compliance

## Intention

I want to distinguish complete observation of the window from one positive fact.

Completeness must cover the duty-holder and the end of the window.

## Incorrect form and why it stays silent

```text title="Incorrect form"
// done(p) после окончания окна достаточно для SATISFIED.
```

The applicable closure must cover exactly this duty-holder and the whole window. Without a policy a positive fact leaves UNDETERMINED.

## Correct form

```law
language "law.core" version "0.2";
package recipes.zh.r07 version "0.1.0";
namespace "urn:recipe:zh-violation:07";

entity Person;
relation enrolled(p: Person);
relation done(p: Person);
relation monitored(p: Person);
rule Primary defeasible { for p: Person; when enrolled(p);
    then duty Main { bearer p; maintain done(p) during [@2026-09-01, @2026-09-10]; };
}
closure Monitoring { predicate done; domain monitored; snapshot MONITOR_2026;
    complete_as_of @2026-09-11T00:00:00+05:00;
    derive_explicit_negative true;
    effective [@2026-01-01, @2027-01-01);
}
```

## Frozen execution scene

| Facts and snapshot | Question | Answer |
|---|---|---|
| complete observation; 2026-09-13 | `positions()` | `position(Main, SATISFIED);` |
| without a policy; 2026-09-13 | `positions()` | `position(Main, UNDETERMINED);` |
| outside the domain; 2026-09-13 | `positions()` | `position(Main, UNDETERMINED);` |
| counterexample; 2026-09-13 | `positions()` | `position(Main, VIOLATED);` |

```law
test "complete monitoring satisfies" {
    given {
        context {
            legal_time @2026-09-13;
            decision_time @2026-09-13T09:00:00+05:00;
            knowledge_time @2026-09-30T09:00:00+05:00;
            timezone "Asia/Almaty";
        }
        assert enrolled(entity_ref("urn:recipe:zh-violation:07:p")); assert done(entity_ref("urn:recipe:zh-violation:07:p")); assert monitored(entity_ref("urn:recipe:zh-violation:07:p"));
    }
    evaluate positions();
    expect position(Main, SATISFIED);
    expect evaluation_status == COMPUTED;
}
```

```law
test "missing policy stays undetermined" {
    given {
        context {
            legal_time @2026-09-13;
            decision_time @2026-09-13T09:00:00+05:00;
            knowledge_time @2026-09-30T09:00:00+05:00;
            timezone "Asia/Almaty";
        }
        assert enrolled(entity_ref("urn:recipe:zh-violation:07:p")); assert done(entity_ref("urn:recipe:zh-violation:07:p")); assert monitored(entity_ref("urn:recipe:zh-violation:07:p"));
    }
    evaluate positions();
    expect position(Main, UNDETERMINED);
    expect evaluation_status == COMPUTED;
}
```

```law
test "out-of-domain stays undetermined" {
    given {
        context {
            legal_time @2026-09-13;
            decision_time @2026-09-13T09:00:00+05:00;
            knowledge_time @2026-09-30T09:00:00+05:00;
            timezone "Asia/Almaty";
        }
        assert enrolled(entity_ref("urn:recipe:zh-violation:07:p")); assert done(entity_ref("urn:recipe:zh-violation:07:p"));
    }
    evaluate positions();
    expect position(Main, UNDETERMINED);
    expect evaluation_status == COMPUTED;
}
```

```law
test "counterexample violates" {
    given {
        context {
            legal_time @2026-09-13;
            decision_time @2026-09-13T09:00:00+05:00;
            knowledge_time @2026-09-30T09:00:00+05:00;
            timezone "Asia/Almaty";
        }
        assert enrolled(entity_ref("urn:recipe:zh-violation:07:p")); assert monitored(entity_ref("urn:recipe:zh-violation:07:p")); assert not done(entity_ref("urn:recipe:zh-violation:07:p"));
    }
    evaluate positions();
    expect position(Main, VIOLATED);
    expect evaluation_status == COMPUTED;
}
```

Completeness is dated at noon of the last day of the window instead of the start of the next day: coverage of the whole window is not proven.

```law
test "narrowed completeness stays undetermined" {
    given {
        context {
            legal_time @2026-09-13;
            decision_time @2026-09-13T09:00:00+05:00;
            knowledge_time @2026-09-30T09:00:00+05:00;
            timezone "Asia/Almaty";
        }
        assert enrolled(entity_ref("urn:recipe:zh-violation:07:p")); assert done(entity_ref("urn:recipe:zh-violation:07:p")); assert monitored(entity_ref("urn:recipe:zh-violation:07:p"));
    }
    evaluate positions();
    expect position(Main, UNDETERMINED);
    expect evaluation_status == COMPUTED;
}
```

```python
>>> import runpy
>>> check = runpy.run_path("docs/recipes/zh-violation/resources/check.py")
>>> check["check_variant"](https://github.com/arxohq/law/blob/master/docs/recipes/zh-violation/7)
'Ж7: контрфактуал подтверждён; lawc = lawref'
```

## Counterfactual

Diagnostic mutation `snapshot MONITOR_2026;` → ``: LDC-E1307. Semantic differences are pinned as separate scenes.

## Boundary

The path of an applicable closure policy is shown. A monitoring certificate and binding adjudication are other grounds; an arbitrary certificate label does not become them. On the last day of the window a conservative snapshot needs a separate completeness justification.