Warden 1.0.0 — capability / authority enforcement for sigilOS
=============================================================

Warden is sigilOS's security monitor: it consumes the kernel capability-audit
stream, evaluates signed policy, enforces rate limits, runs an LDAP/AD-
compatible directory, and owns the kill switch.

Contents
--------
  warden.blob           the security monitor — policy engine, rate limiter,
                        audit ring, alert path, kill switch, ed25519 policy
                        verification                                (82 432 B)
  warden-panel.blob     the Lumen Scene GUI, composited by the WM  (43 760 B)
  warden-ldap.blob      LDAP / Active Directory directory service  (26 160 B)
  warden.policy.json    JSON-as-policy: the single source of truth for rules
                        (tier/verb/match/effect), config (poll interval, audit
                        ring cap, edition, kill switch), and rate limits

All flat-v1 arm-el0, built with the mac-native cc0mac. Deterministic: same
sources + same cc0_mac produce a byte-identical image.

What's live in 1.0.0
--------------------
The panel now renders warden's ACTUAL runtime state. Through 0.1.0 every figure
on it was a string literal — "1,284" events, "3 WARN", "kills: 1 · denials: 12"
and four hand-written rate-limit rows — so it displayed the same numbers no
matter what warden was doing. It now reads, via warden's own accessors:

  * rate-limit rules      per rule: event, threshold, window, hits, action,
                          breach count — and "(no rules loaded)" when empty,
                          rather than four invented rows
  * audit ring            the real alerts, newest first (severity / event /
                          cap), "(no alerts)" when none have been raised
  * counters              issue + derive + revoke events, anomalies, polls,
                          kills, denials
  * alert tallies         WARN / CRIT computed over the live 32-entry ring
  * edition               from wd_is_enterprise(), not a fixed chip
  * kill switch           reflects the real kill count
  * directory             warden-ldap's live entry and bind counts

Install
-------
Place the blobs in the /apps volume and the policy at /etc/warden.policy.json:

  /apps/warden          <- warden.blob
  /apps/warden-panel    <- warden-panel.blob
  /apps/warden-ldap     <- warden-ldap.blob

Each is loaded at 0x100000 (SP_EL0 0x1F0000, heap 0x200000). The panel presents
its Scene over the app wire at 0x3100000 via syscall 52. Warden's runtime state
lives at fixed addresses, which is how the panel — a separate process — reads
the same counters the monitor is writing.

These are sigilOS binaries. They do not run on macOS, Linux, or Windows.

Not in this release, and why
----------------------------
  * The CLI half (wpolicy / wconfig / waudit / wldap / wdemo / wldemo) is
    written and works, but each command is a handler taking (Mmio, out) and
    there is no OS-side terminal command-registration ABI to bind them to yet.
    That seam belongs to the OS, not to Warden, so the handlers ship in source
    rather than as a blob that cannot be invoked.
  * authority.sg (per-app held-capability listing) needs a kernel per-process
    capability enumeration syscall that does not exist. Genuinely blocked, not
    deferred.

Source: github.com/grioghar/sigil-warden (private). Sigil only, zero Python,
zero C.
