mod: Ext 1 — negation-as-failure conditions (:not / :attr), 146/146
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 44s
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 44s
Report attributes (:attrs) project to attr(Id, name) facts; policy gains (:attr x) and (:not <cond>) conditions. The Prolog substrate exposes negation as a functor not(Goal) (the prefix \+ operator doesn't parse here). Closed-world example: hide spam unless author verified. Default policy untouched — feature proven via custom rule sets, so all 132 base tests stay green. +14 extension tests. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -16,7 +16,7 @@ federation extension.
|
||||
|
||||
## Status (rolling)
|
||||
|
||||
`bash lib/mod/conformance.sh` → **132/132** (Phases 1–4 complete — roadmap done)
|
||||
`bash lib/mod/conformance.sh` → **146/146** (roadmap done + extensions in progress)
|
||||
|
||||
## Ground rules
|
||||
|
||||
@@ -129,8 +129,25 @@ lib/mod/fed.sx
|
||||
ingest + origin, outbox sharing, advisory-vs-trusted apply, revocation +
|
||||
invalidation (exoneration flips hide→keep → revoked)
|
||||
|
||||
## Extensions (post-roadmap)
|
||||
|
||||
- [x] **Ext 1 — negation-as-failure** (`lib/mod/tests/extensions.sx`, +14). Report
|
||||
`:attrs`; policy conditions `(:attr "x")` → `attr(Id, x)` and `(:not <cond>)` →
|
||||
`not(<cond>)` (the Prolog supports `not/1` and `\+/1` as *functors*, not the
|
||||
prefix `\+` operator). Closed-world example: "hide spam UNLESS author verified".
|
||||
Default policy untouched — demonstrated via custom rule sets, so all 132 base
|
||||
tests stay green.
|
||||
- [ ] Ext 2 — weighted/aggregate evidence scoring + threshold rules
|
||||
- [ ] Ext 3 — human-readable proof explanation (render a decision's `:goals`)
|
||||
- [ ] Ext 4 — report linking / dedup (relations between reports about one subject)
|
||||
|
||||
## Progress log
|
||||
|
||||
- **Ext 1 — negation-as-failure, 146/146** (+14). `:attr` and `:not` conditions
|
||||
give the policy closed-world reasoning. The substrate's negation is a functor
|
||||
(`not(Goal)`), not the ISO prefix `\+` operator (that doesn't parse here) —
|
||||
noted for any future negation work. Kept the default rule set and its 132 tests
|
||||
untouched by proving the feature through custom rule sets instead.
|
||||
- **Phase 4 complete — 132/132** (+26 fed). **Full roadmap done.** Federation:
|
||||
cross-instance reports, decision sharing, advisory-by-default trust, revocation.
|
||||
fed-sx is mocked behind `mod/fed-send!` (in-memory outbox) — the only seam a real
|
||||
|
||||
Reference in New Issue
Block a user