Skip to content

Stratified negation, aggregates, and the maintainability check at registration (V5) #312

Closed

Description

@jsam

Part of epic #305.

Problem. Negation is a side computation that collects right-hand keys into a HashSet, runs nested execute_directly for complex right sides, silently skips live-only relations and returns an empty set on panic (fails open) (src/code_generator/mod.rs:1951-2075); static prefilters assume complete input (static_input.rs:120-180); aggregates are DD reduce but only inside per-query dataflows (:2279-2521). Constructs that cannot be maintained (now()/time decay :2933,2964-2976, non-deterministic functions) are accepted in persistent rules today; vector predicates (hnsw_nearest resolved outside the dataflow, src/execution/hnsw_resolve.rs) are accepted and force full re-evaluation of the view on every commit.

Target. Negation via DD antijoin over the lower stratum's arrangement (unstratifiable programs already refused at registration, src/rule_catalog.rs:259-296); aggregates count/sum/min/max/avg via reduce, group by; a maintainability check at +rule registration refusing now(), time decay, non-deterministic functions and sort/limit annotations in persistent rules with an error naming the construct and the alternative (query or session rule) (captain D3). Vector predicates and functions (hnsw_nearest, within_radius, distance and LSH functions) are NOT refused: until VV4 and VV5 land, a rule using them is served by the recompute path behind the flag and marked views_pending{reason=vector}; the default flip (V20) waits for VV1-VV7. Rules loaded from disk that fail the check are reported at load and served by recompute until fixed (tracked in V20's fleet scan).

Acceptance. Oracle: negated insert/delete, recursive upstream settling, zero/multiple supports, float sums, min/max replacement, empty groups; no transient false rows observable at any revision; registration error messages tested; a catalog containing refused constructs loads with a warning and a views_unmaintainable{rule} metric.

Size L. Dependencies V4. Order slot 3. Supersedes #183, #184.

Activity

  1. jsam commented on Oct 7, 2026

    @jsam
    ContributorAuthor

    Landed in https://github.com/inputlayer/inputlayer-symbolic/pull/34: stratified negation and the aggregates count, sum, min, max and avg are maintained as views, with the maintainability check at registration; independently verified (0 divergences against recomputation). Still open: negation or aggregates inside or over a recursive group, and the measured bars.

  2. jsam commented on Oct 7, 2026

    @jsam
    ContributorAuthor

    Done: negation and aggregates are maintained inside and over recursive views (inputlayer/inputlayer-symbolic#34 and inputlayer/inputlayer-symbolic#138). Recursions that may never reach a fixpoint stay refused with their reason and are evaluated by reads.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions