Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 41s
mod/triage-pipeline domain r reports actor composes domain-policy decision → explanation → AP activity → wire into one bundle. Integration test runs the whole federated path across 5 modules (decide → wire → peer → trust-gated apply), confirming the module-by-module subsystem composes end to end. +15 tests. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
113 lines
3.3 KiB
Plaintext
113 lines
3.3 KiB
Plaintext
;; lib/mod/tests/pipeline.sx — Ext 19: end-to-end triage orchestration.
|
|
|
|
(define mod-pp-count 0)
|
|
(define mod-pp-pass 0)
|
|
(define mod-pp-fail 0)
|
|
(define mod-pp-failures (list))
|
|
|
|
(define
|
|
mod-pp-test!
|
|
(fn
|
|
(name got expected)
|
|
(begin
|
|
(set! mod-pp-count (+ mod-pp-count 1))
|
|
(if
|
|
(= got expected)
|
|
(set! mod-pp-pass (+ mod-pp-pass 1))
|
|
(begin
|
|
(set! mod-pp-fail (+ mod-pp-fail 1))
|
|
(append!
|
|
mod-pp-failures
|
|
(str name "\n expected: " expected "\n got: " got)))))))
|
|
|
|
(mod/policies-reset!)
|
|
(mod/register-policy!
|
|
"market"
|
|
(mod/ruleset
|
|
(mod/defrule "market-spam-remove" :remove (list :classification "spam"))
|
|
(mod/defrule "default-keep" :keep)))
|
|
|
|
;; ── spam in the market domain: full bundle ──
|
|
|
|
(define mod-pp-spam (mod/mk-report "r1" "u" "bob" "this is spam"))
|
|
(define
|
|
mod-pp
|
|
(mod/triage-pipeline "market" mod-pp-spam (list mod-pp-spam) "inst.example"))
|
|
|
|
(mod-pp-test!
|
|
"pipeline action (market policy → remove)"
|
|
(mod/pipeline-action mod-pp)
|
|
"remove")
|
|
(mod-pp-test! "pipeline rule" (get mod-pp :rule) "market-spam-remove")
|
|
(mod-pp-test!
|
|
"pipeline explanation mentions the action"
|
|
(mod/str-contains? (get mod-pp :explanation) "remove")
|
|
true)
|
|
(mod-pp-test!
|
|
"pipeline activity is Delete (remove)"
|
|
(get (mod/pipeline-activity mod-pp) :type)
|
|
"Delete")
|
|
(mod-pp-test!
|
|
"pipeline activity object is the report"
|
|
(get (mod/pipeline-activity mod-pp) :object)
|
|
"r1")
|
|
(mod-pp-test!
|
|
"pipeline wire round-trips to the same action"
|
|
(get (mod/wire->decision (mod/pipeline-wire mod-pp)) :action)
|
|
"remove")
|
|
|
|
;; ── same report, blog domain (default) → hide, Flag ──
|
|
|
|
(define
|
|
mod-pp-blog
|
|
(mod/triage-pipeline "blog" mod-pp-spam (list mod-pp-spam) "inst.example"))
|
|
(mod-pp-test!
|
|
"blog default policy → hide"
|
|
(mod/pipeline-action mod-pp-blog)
|
|
"hide")
|
|
(mod-pp-test!
|
|
"blog activity is Flag"
|
|
(get (mod/pipeline-activity mod-pp-blog) :type)
|
|
"Flag")
|
|
|
|
;; ── clean report: keep, no activity, explanation says (none) ──
|
|
|
|
(define mod-pp-clean (mod/mk-report "r2" "u" "eve" "a fine post"))
|
|
(define
|
|
mod-pp-k
|
|
(mod/triage-pipeline
|
|
"market"
|
|
mod-pp-clean
|
|
(list mod-pp-clean)
|
|
"inst.example"))
|
|
(mod-pp-test! "clean → keep" (mod/pipeline-action mod-pp-k) "keep")
|
|
(mod-pp-test! "keep → no activity" (mod/pipeline-activity mod-pp-k) nil)
|
|
(mod-pp-test!
|
|
"keep explanation says no evidence"
|
|
(mod/str-contains? (get mod-pp-k :explanation) "Evidence: (none)")
|
|
true)
|
|
(mod-pp-test!
|
|
"keep wire still round-trips"
|
|
(get (mod/wire->decision (mod/pipeline-wire mod-pp-k)) :rule)
|
|
"default-keep")
|
|
|
|
;; ── federated handoff: market decision crosses to a peer, trust-gated ──
|
|
|
|
(mod/fed-reset!)
|
|
(define mod-pp-peer-dec (mod/wire->decision (mod/pipeline-wire mod-pp)))
|
|
(mod-pp-test!
|
|
"untrusted peer: market decision is advisory"
|
|
(get (mod/fed-receive-decision "peerX" mod-pp-peer-dec) :applied)
|
|
false)
|
|
(mod/grant-trust "peerY" :mod)
|
|
(mod-pp-test!
|
|
"trusted peer: market decision applies"
|
|
(get (mod/fed-receive-decision "peerY" mod-pp-peer-dec) :applied)
|
|
true)
|
|
(mod-pp-test!
|
|
"applied action is remove"
|
|
(get (mod/fed-applied-action "r1") :action)
|
|
"remove")
|
|
|
|
(define mod-pipeline-tests-run! (fn () {:failures mod-pp-failures :total mod-pp-count :passed mod-pp-pass :failed mod-pp-fail}))
|