Markdown for LLMs
Lifecycle boundaries
The source Markdown for this article. Copy it into your assistant or download it as a text file.
# Lifecycle boundaries What the construct does NOT do in 0.2: scope, reserved values, neighbouring constructs, and the selection rule. ## Does not - **Not produce `expired` on a duty.** The API value exists; the ladder never gives it: the post-window answer is the lifecycle outcomes. - **Not produce `available`/`exercised`/`validly_exercised` on a power.** Exercise validity is an event property, not a position status: an invalid attempt gives the `invalidly_exercised(position)` literal and issue `POWER_INVALID_EXERCISE`; a valid one silently materializes the effect. The listed values are reserved by syntax, but no implementation produces them (a test passes vacuously). - **Not thaw frozen transformations.** A refused power and an immunity-blocked effect create nothing; the power itself stays `ACTIVE` (the locks are on the effect). - **Not mix days.** With a date-moment, a status changing inside the day (activation, window expiry, lifting) gives refusal `AMBIGUOUS_AS_OF`, not an "end of day" answer: the case must name a moment. - **Not read `legal_time` for statuses.** The law axis selects editions; the decision axis is `decision_time`. Coinciding dates are a special case, not the rule. - **Not derive completeness from silence.** Neither a closed window nor an absent counterexample proves anything by itself: support, a certificate, closure, or a decision is needed. ## Reserved and closed - `NormativeStatus`: `UNDETERMINED`, `CONFLICTED`, `DEFEATED` — API values over status kinds; `CONFLICTED` requires `normative_status_supports`. - `DEFEATED` is not a lifecycle kind: it is absent from `statusHistory`, there is no transition into it — a position is created that way. - Suspension shifts the window end by the total length of the suspensions covering the window; `waived`/`terminated` outrank `satisfied`/`violated`/`expired`; `terminated` never becomes `expired`; a partial waiver (`violation`) excludes only the breach. ## Neighbours and the selection rule - The status ladder vs the std waiver/suspension/termination acts: the first is what became of the position; the second is what did it (who, when, in what scope). A status without an act is the engine's conclusion; an act without a status is silence until the ladder is recomputed. - `violated(P)` vs a subject-matter predicate (`*_violated(...)`): the first is the engine's fact about a position, the second is the author's fact about the world. Breach chains build from the first. - `DEFEATED` vs `CONFLICTED`: defeated ground (the position is gone) vs incompatible supports (the position stands, the law argues). - Condition activation vs event activation: "true now" vs "exactly when"; an event gives the addressee, a window from `e.time.start`, and an instance per addressee — before the first addressee there is no instance at all. - `positions()` vs `truth()` vs `why_not`: the norm's fate vs the world's fact vs the explanation of absence.