• v1.1.0 0a744329e6

    feat: fix lowering, DSLRuntime wrapper, rigor oracle + rejection campaigns
    CI / publish (push) Successful in 10s
    CI / test (push) Successful in 13s

    Dvorak released this 2026-08-03 17:58:29 +00:00 | 14 commits to master since this release

    Lowering fixes (validate/lower/compile into known-correct core structures):

    • tuple_to_userset: structural classification by object-side predicate
      (owner(*g, doc) { member_of(user, g) } -> tuple_to_userset with direction
      'in'/'out'); the old heuristic routed every outer-wildcard to chain.
    • relational_comparator: operands now lower to real direct-rule configs
      (evaluateFrom derived from evidence param positions; expectedValue for
      literal args) instead of raw AST nodes the engine could not evaluate.
    • defeasible: multi-level bodies (NEVER/REQUIRES/ALWAYS/WHEN/UNLESS) merge
      into one five-level rule instead of ANDed level-only rules that always
      resolved 0; nested PatternMatches flatten to N-step chains; unary predicate
      calls mark _subjectAsObject (subject-as-object semantics).
    • validation: reject duplicate fact/evidence definitions.

    DSLRuntime (higher-order DSL+Core wrapper):

    • typed addNode/updateNodeData/addRelation/updateRelation against the DSL
      schema (known types, relation params, field types, value-carrying facts);
    • check() derives the evidence's injectable partial-graph requirements,
      retrieves missing facts through caller data callbacks, injects them, and
      delegates, returning requiredFacts/providedFacts/missingFacts.

    js-rigor campaigns:

    • generative oracle: generate legal DSL per construct and compare every
      verdict against an independent hand-computed oracle (8 constructs x P grid)
      plus an exhaustive deterministic sweep;
    • illegal mutations: one-flaw perturbations of a valid program must be
      reliably rejected (duplicate evidence/fact, arity/type mismatches, reserved
      built-ins, malformed syntax), with a control that must compile.

    Depends on @arbiter/core@^1.0.2 (reason codes + _subjectAsObject).

    Downloads