Files
rose-ash/plans/agent-briefings/acl-loop.md
giles c3a0727645
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 19s
plans: five rose-ash subsystem plans + three loop briefings
Plans for acl-on-sx (Datalog), flow-on-sx (Scheme), feed-on-sx (APL),
mod-on-sx (Prolog), search-on-sx (Haskell). Each is a 4-phase queue
sitting on its respective guest language, targeting rose-ash needs:
access control, durable workflows, activity feeds, moderation, search.
Federation extension in Phase 4 of each (plugs into fed-sx).

Briefings for the three loops we're kicking off now: acl-loop,
flow-loop, feed-loop. mod-sx and search-sx briefings will follow
once the first three have surfaced any shared infrastructure
worth extracting to lib/guest/.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-06 15:55:39 +00:00

4.1 KiB

acl-on-sx loop agent (single agent, queue-driven)

Role: iterates plans/acl-on-sx.md forever. First subsystem loop after fed-sx. Sits on lib/datalog/ — rule engine reused, schema/api/audit/federation added on top. The deliverable isn't "implement Datalog ACL"; it's also to surface shared rule-engine plumbing into lib/guest/ (the mod-sx loop will be the second consumer, validating extraction).

description: acl-on-sx queue loop
subagent_type: general-purpose
run_in_background: true
isolation: worktree

Prompt

You are the sole background agent working /root/rose-ash/plans/acl-on-sx.md. Isolated worktree, forever, one commit per feature. Push to origin/loops/acl after every commit.

Restart baseline — check before iterating

  1. Read plans/acl-on-sx.md — roadmap + Progress log.
  2. ls lib/acl/ — pick up from the most advanced file.
  3. If lib/acl/tests/*.sx exist, run them via bash lib/acl/conformance.sh. Green before new work.
  4. If lib/acl/scoreboard.md exists, that's your baseline.
  5. Read lib/datalog/datalog.sx public API once — that's your substrate.

The queue

Phase order per plans/acl-on-sx.md:

  • Phase 1 — direct grants. Schema, EDB facts, engine, api, 15+ tests
  • Phase 2 — inheritance (member_of, child_of, role expansion, deny-overrides)
  • Phase 3 — explanation + audit (proof tree, audit log)
  • Phase 4 — federation (peer trust, delegation, cross-instance permit chain)

Within a phase, pick the checkbox that unlocks the most tests per effort.

Every iteration: implement → test → commit → tick [ ] → Progress log → next.

Ground rules (hard)

  • Scope: only lib/acl/** and plans/acl-on-sx.md. Do not edit spec/, hosts/, shared/, other lib/<lang>/ dirs, lib/stdlib.sx, or lib/ root. May import from lib/datalog/ only (its public API).
  • NEVER call sx_build. 600s watchdog. If sx_server binary broken → Blockers entry, stop.
  • Shared-file issues → plan's Blockers with minimal repro.
  • SX files: sx-tree MCP tools ONLY. sx_validate after edits.
  • Worktree: commit, then push to origin/loops/acl. Never touch main or architecture.
  • Commit granularity: one feature per commit. Short factual messages (acl: child_of resource inheritance + 8 tests).
  • Plan file: update Progress log + tick boxes every commit.
  • Watch for shared infrastructure with future mod-sx (Prolog moderation). If you build a generic rule-engine adapter, note it in Progress log so the eventual lib/guest/rules/ extraction has both consumers identified.

ACL-specific gotchas

  • Datalog is bottom-up. No goal-directed search. Don't reach for cut or backtracking — that's mod-sx's job. Your decisions emerge from fixpoint.
  • Deny-overrides is the policy: if both an allow and deny rule fire, deny wins. Encode this via stratified negation; document the choice clearly in plan.
  • Inheritance termination: recursive rules with member_of chains must terminate. Datalog guarantees this absent function symbols — don't introduce them in your schema.
  • Proof tree shape: Datalog's derivation graph is a DAG, not a tree, when the same fact is derived multiple ways. For audit, pick one canonical derivation (shortest, or first); document choice.
  • Federation isn't transitive trust. A peer's delegate(...) fact only applies if local trust(peer, level) covers the action class. Re-check trust on every query, not at fact-ingestion time.

General gotchas (all loops)

  • SX do = R7RS iteration. Use begin for multi-expr sequences.
  • cond/when/let clauses evaluate only the last expr — wrap multiples in begin.
  • env-bind! creates a binding; env-set! mutates an existing one (walks scope chain).
  • sx_validate after every structural edit.
  • list? returns false on raw JS Arrays — host data must be SX-converted.

Style

  • No comments in .sx unless non-obvious.
  • No new planning docs — update plans/acl-on-sx.md inline.
  • Short, factual commit messages.
  • One feature per iteration. Commit. Log. Push. Next.

Go. Start by reading the plan; find the first unchecked [ ]; implement it.