Markdown for LLMs
nb-21 solutions — Positions live, files move, readings decide
The source Markdown for this article. Copy it into your assistant or download it as a text file.
# nb-21 solutions — Positions live, files move, readings decide *Checkable against `law test packs/examples/language-demo/lifecycle` (25 checked, 25 passed) and `law test packs/examples/language-demo/lifecycle_stages` (5 checked, 5 passed). Identifiers and code as written.* ## 1. Which single fact turns revocation to NEITHER **Answer: the sublet fact (`sublet-ann`); the `power without grounds does not operate` test already proves the outcome.** `StallRevocation` needs two things at once: the exercise event (`revocation_notice`) and the gate (`valid_when (stall_sublets(a))`). The notice alone only records an attempt. Remove `stall_sublets(ann)` and the gate fails, no constitutive step runs, and `stall_revoked(ann)` is NEITHER. The without-grounds test is exactly that configuration (open permit, office, notice, no sublet → NEITHER). ## 2. Why the gated sealing changes nothing **Answer: the token `terminate` in `effect terminate(...)`; the run records `NON_EXECUTABLE_RULE`; a second sealing order changes nothing observable.** `SealStall` passes its gate (`stall_sublets(a)` holds), so this is not an invalid exercise — it is a valid attempt with a non-executable effect form. The 0.1 subset executes only `create`: the engine warns `NON_EXECUTABLE_RULE` once per position–event pair, keeps the event, produces no `invalidly_exercised`, and leaves `stall_permit_open(ann)` TRUE_ONLY. A second `sealing_order` is the same pair again — the warning is not multiplied and still no effect is created, so both expects (`truth_status == TRUE_ONLY`, `issue(NON_EXECUTABLE_RULE)`) hold unchanged. ## 3. Why the open question is an issue, not NEITHER **Answer: the group selects `exactly_one`, so an unselected choice is a missing decision the engine must name — `INTERPRETATION_REQUIRED`; the main route is unaffected, proved by `main route needs no reading`.** NEITHER would mean "the rules ran and concluded nothing". Here the rules cannot run at all: neither `NarrowReading` nor `BroadReading` may fire without selection, and guessing one would invent law. So the engine reports the cause as an issue on the storage query. That the missing choice pollutes nothing is proved separately: `main route needs no reading` selects no interpretation and still derives `DecideStall` ACTIVE (with `NoSublet` ACTIVE beside it) — the duties never read `storage_covered`. ## 4. Who decides Bob's overnight right **Answer: the `SubletsLoseOvernight` rule decides — `overnight_right(bob)` is FALSE_ONLY — and `PNight` does not cover him because his defendant fact takes him out of the precedent's fact pattern.** Bob keeps his pitch (plaintiff fact, matching `PNight`) but also sublets it (defendant fact `sublets_pitch`). The precedent's outcome follows only where its plaintiff pattern holds alone — Ann's case (`precedent followed`, TRUE_ONLY). For Bob the distinguishing rule fires on the defendant fact and concludes `not overnight_right(bob)`, hence FALSE_ONLY. Following is for the same-sided case; distinguishing is for the case with the extra losing fact. ## 5. Adding a procedure to the stages package **Answer: it fails at the static check, `law engine check`, with `LDC-E4126` (`STAGE_PROCEDURE_UNSUPPORTED`).** A stage and a procedure in one program are refused before any test runs: the tour fold the stage needs is undefined alongside a procedure automaton. The committed probe `packs/examples/language-demo/lifecycle/evidence/snippets/stage-procedure.law.txt` (a stage plus a minimal two-state procedure) is refused with `error LDC-E4126`, exit 1. No `law test` line is reached — the program does not compile, so there is nothing to execute. This is an implementation-support fact about the verified profile (`law 0.1.0`, `law.core/0.2`), not a language-wide claim.