datalog: stratifier rejects recursion through aggregation (165/165)
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 53s
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 53s
Bug: dl-check-stratifiable iterated body literals looking only for explicit :neg literals, missing aggregate cycles. Now also walks aggregates via dl-aggregate-dep-edge — q(N) :- count(N, X, q(X)) correctly errors out at saturation time. 3 new tests cover: - recursion-through-aggregation rejected - negation + aggregation coexist when in different strata - min over empty derived relation produces no result
This commit is contained in:
@@ -273,6 +273,16 @@ large graphs.
|
||||
|
||||
_Newest first._
|
||||
|
||||
- 2026-05-08 — Bug fix: `dl-check-stratifiable` now rejects recursion
|
||||
through aggregation (e.g., `q(N) :- count(N, X, q(X))`). The
|
||||
stratifier was already adding negation-like edges for aggregates,
|
||||
but the cycle scan only looked at explicit `:neg` literals. Added
|
||||
the matching aggregate branch to the body iteration. Also adds
|
||||
doc-only `lib/datalog/datalog.sx` with the public-API surface
|
||||
(since `load` is an epoch command and can't recurse from within an
|
||||
`.sx` file). 3 new aggregate tests cover recursion-rejection,
|
||||
negation-and-aggregation coexistence, and min-over-empty-derived.
|
||||
|
||||
- 2026-05-08 — Phase 10 demo + canonical query. Added the "cooking
|
||||
posts by people I follow (transitively)" example from the plan:
|
||||
`dl-demo-cooking-rules` defines `reach` over the follow graph
|
||||
|
||||
Reference in New Issue
Block a user