You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Stratified negation, aggregates, and the maintainability check at registration (V5) #312
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.
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.
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.
Activity
jsam commentedon Oct 7, 2026
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.
jsam commentedon Oct 7, 2026
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.