Absence, negation, and conflict
Task and place
Section titled “Task and place”A question can come back established, denied, conflicted, undecided, or refused, and each of those is a different fact about the case. This stage sits after scenarios run and before review signs off: every undecided or conflicted answer in the suite needs a verdict, and every verdict needs a reason a later reader can re-check.
Inputs
Section titled “Inputs”- A suite that runs: the fixture model with its fixture tests and fixture manifest.
- The boundary pair from the running example, with expectations fixed before the run: loss thirty qualifies, loss twenty-nine stays undecided.
- The EAI threshold decision, which records why the boundary reads inclusively.
Actions
Section titled “Actions”Read each answer through the table below. The first four rows are support states — combinations of support for and against. The last row is not an answer at all.
| What the run says | Status | Meaning | Example |
|---|---|---|---|
| established | TRUE_ONLY | support for, none against | a member is eligible; loss thirty has payout |
| explicit denial | FALSE_ONLY | support against | a barred applicant is not eligible |
| conflict | BOTH | support both ways, kept, never merged | member and barred together |
| unknown | NEITHER | no premise of the question’s rules is fed, so nothing could fire | a stranger with no records |
| guard unmet | NEITHER | some premises fed, but a body guard fails, so the rule stays silent | score twenty-nine; loss twenty-nine |
| refusal | tool diagnostic | the setup is broken; no verdict follows | a missing lock file, refused as LDC-E1104 |
Two rows share one status, so the status alone never closes the reading. Unknown and guard-unmet both report NEITHER; the diagnosis differs, and it comes from the states of the specific premises, never from the mere presence of facts somewhere in the case. For the unknown row, check that none of the question’s rules has a fed premise — a bystander fact about another person changes nothing. For the guard-unmet row, name the failed premise: in the fixture the guard points >= 30 with points fed at twenty-nine, in the running example the loss range from thirty through one hundred with loss fed at twenty-nine. Read the premise states to tell them apart; “facts present” alone proves neither row.
There is no denial by failure: silence never becomes denial on its own. A missing record yields NEITHER, and only three sources can write support against — a case fact, a rule head, or a declared completeness claim.
Decisions
Section titled “Decisions”- The completeness policy: the only way absence becomes denial is an explicit closure over one predicate, naming the domain it covers, the snapshot it reads, and the moment it holds as of. The running example closes nothing: a search over the package sources finds no closure declaration, so every silence stays undecided.
- Which conflicted answers are genuine disputes to keep and which are modeling errors to fix. The running example shows none; the fixture keeps one on purpose.
Artifact
Section titled “Artifact”The artifact is a verdict table plus a closure note. The table lists every NEITHER and BOTH in the suite with its verdict: expected silence, guard unmet, or genuine conflict. The closure note lists the closed predicates with their domains — or, as in the running example, states that the list is empty and silence is never denial there. The fixture verdicts read: stranger Dan, expected silence; score twenty-nine, guard unmet; member with barred flag, genuine conflict.
EAI example
Section titled “EAI example”The employee accident insurance package, version 0.1.0, language 0.2, zero dependencies, explicit local imports, pinned to edition EAI_EDITION with materialization PINNED_UNOFFICIAL_COPY — an Adilet API copy retrieved 2026-09-13, sha256 pinned, local copy kept in the package — shows the full spread. Loss thirty is established while loss twenty-nine stays undecided: the payout rule guard fails below thirty, so the rule stays silent rather than denying. The class twenty-two premium test derives 29600 KZT on an insured sum of one million at rate 0.0296, and the penalty test derives exactly 3000 KZT — both established, both unrounded per EAI-D3. No scenario in the suite reports denial or conflict, and with no closures declared, no silence in the package can be read as denial.
The fixture mirrors the payout guard in miniature. All three rules below are checked and run; the suite output follows in the verification section:
rule EligibleByMembership strict { for a: Applicant; when member(a); then eligible(a);}
rule BarredDeniesEligibility strict { for a: Applicant; when barred(a); then not eligible(a);}
rule EligibleByScore strict { for a: Applicant; for points: Integer; when score(a, points) and points >= 30; then eligible(a);}Pitfall
Section titled “Pitfall”Reading NEITHER as no. A downstream memo that turns “loss twenty-nine stays undecided” into “payout refused at twenty-nine” invents a denial the package never derived. The mirror mistake is adding a closure to force the denial without a completeness claim to back it — the closure then certifies what nobody checked.
Verification
Section titled “Verification”Both runs below were executed for this page with tool version law 0.1.0, semantics law.core/0.2:
$ law engine check docs/handbook/files/fixtures/boundariescheck OK: docs/handbook/files/fixtures/boundaries$ law test docs/handbook/files/fixtures/boundarieslaw test handbook.boundaries: мир handbook.boundaries ok [handbook.boundaries#scenarios] tests/boundaries.lawtest / MEMBER-ESTABLISHES-ELIGIBILITY ok [handbook.boundaries#scenarios] tests/boundaries.lawtest / BARRED-DENIES-ELIGIBILITY ok [handbook.boundaries#scenarios] tests/boundaries.lawtest / MEMBER-AND-BARRED-IS-CONFLICT ok [handbook.boundaries#scenarios] tests/boundaries.lawtest / SILENCE-IS-UNKNOWN ok [handbook.boundaries#scenarios] tests/boundaries.lawtest / SCORE-THIRTY-QUALIFIES ok [handbook.boundaries#scenarios] tests/boundaries.lawtest / SCORE-TWENTY-NINE-STAYS-SILENTитого: 6 проверено, 6 прошли, 0 не прошли, 0 не исполнены; код 0[translation] The header line names the tested world; the summary line reads: six checked, six passed, zero failed, zero skipped, exit code zero.
Criterion: all six pass, each of the four support states appears at least once, and the score pair straddles — thirty established, twenty-nine undecided. The refusal row was observed on the same fixture before its lock file was generated:
law test: ОТКАЗ LDC-E1104: [...] law.lock: No such file or directory (os error 2)[translation] [...] marks the elided working path; the line reads: refused, lock file missing. A refusal carries no verdict — fix the setup instead of reading one into it.
Limits
Section titled “Limits”Support states describe what the case holds for and against a statement, not how likely it is true or how reliable the records are. A closure claim ages with its snapshot: complete as of one date is not complete forever. And guard-unmet versus unknown always needs a premise reading — the status alone cannot tell them apart. The word “inapplicable” is reserved for the time page’s sense (a rule outside its window takes no part); a failed body guard is never called that here.
Next step
Section titled “Next step”Continue with Readings and judgment, which keeps a disputed norm disputed instead of settling it by modeling choice.
Sources
Section titled “Sources”- Four states of support
- Negation — where denial can come from and what it reads in a rule body.
- Defeat and priority — how conflicting rules resolve.
- Northbridge course — the missing-fact and register-silence drills.
- Language reference — syntax and semantics of every construct.
- Command line — the check and test commands used above.
- Recording decisions — the previous stage.
Documentation for Arxo. Writings — blog.arxo.io.
Anonymous visit counts on stats.arxo.io, no cookies.