Skip to content
docs
Arxo ↗

Separate the date of the norm from the date of the relation

For LLMs7 sections

I want to apply a new duty only after the norm enters force and only to new issuances.

An entry-into-force date only in window creates a position before the norm appears:

Incorrect form
// у Report отсутствует effective
window [on, @2026-05-01];
Arxo Law
language "law.core" version "0.2";
package recipes.e.r04 version "0.1.0";
namespace "urn:recipe:e-time:04";
entity Person;
relation registered(p: Person);
relation received(p: Person, on: Date);
relation submitted(p: Person);
rule Report strict {
effective [@2026-04-01, infinity);
for p: Person; for on: Date;
when received(p, on) and on >= @2026-04-01;
then duty File {
bearer p;
goal achievement {
condition submitted(p);
window [on, @2026-05-01];
}
};
}
Facts / cutQuestionAnswer
legal_time 15.03, received 10.04application of Reportno
legal_time 15.04, received 01.03application of Reportno
legal_time 15.04, received 10.04FileACTIVE
without effective: legal_time 15.03, received 10.04FilePENDING
pre-enactment bars application
Arxo Law
test "pre-enactment bars application" {
given {
context {
legal_time @2026-03-15;
decision_time @2026-03-15T09:00:00+05:00;
knowledge_time @2027-12-31T09:00:00+05:00;
timezone "Asia/Almaty";
}
assert received(entity_ref("urn:recipe:e-time:04:a"), @2026-04-10);
}
evaluate positions();
expect not applied(Report);
}
old relation escapes new rule
Arxo Law
test "old relation escapes new rule" {
given {
context {
legal_time @2026-04-15;
decision_time @2026-04-15T09:00:00+05:00;
knowledge_time @2027-12-31T09:00:00+05:00;
timezone "Asia/Almaty";
}
assert received(entity_ref("urn:recipe:e-time:04:a"), @2026-03-01);
}
evaluate positions();
expect not applied(Report);
}
new relation activates duty
Arxo Law
test "new relation activates duty" {
given {
context {
legal_time @2026-04-15;
decision_time @2026-04-15T09:00:00+05:00;
knowledge_time @2027-12-31T09:00:00+05:00;
timezone "Asia/Almaty";
}
assert received(entity_ref("urn:recipe:e-time:04:a"), @2026-04-10);
}
evaluate positions();
expect position(File, ACTIVE);
}
early position stays pending
Arxo Law
test "early position stays pending" {
given {
context {
legal_time @2026-03-15;
decision_time @2026-03-15T09:00:00+05:00;
knowledge_time @2027-12-31T09:00:00+05:00;
timezone "Asia/Almaty";
}
assert received(entity_ref("urn:recipe:e-time:04:a"), @2026-04-10);
}
evaluate positions();
expect position(File, PENDING);
}

runs.without drops effective and shows a premature position. teaches duplicates effective: E1329. The condition on >= cutoff separately limits old events.

effective reads the date of the law; the comparison reads the date of the relation. Both are needed; the goal window names the performance term. The claim “effective for relations after a date” is wrong without this split.

Before entry into force the result was PENDING, then a retroactive violation followed. The fix is effective and a separate issuance-date guard. The as-of moment for statuses is the decision time (entry into force still reads the law date); every scene names its decision date explicitly.

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

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