autonomy wal inspect

Print WAL entries with optional kind/time/bridge/outcome filters

Synopsis

Reads all entries from the WAL and prints them to stdout.

Filter flags (combinable):
  --since <duration>   only show entries written within this window
                       (e.g. 5m, 1h, 24h)
  --kind  <kind>       only show entries whose event kind matches
                       (e.g. autonomy.decision, ai.rollout)
  --outcome <value>    only show entries whose attrs.outcome equals value
                       (e.g. allow, deny). Typically paired with
                       --kind autonomy.decision. Replaces the
                       '--json | jq select(.event.attrs.outcome == "…")'
                       pipe with a first-class flag (#1149).
  --bridge-only        only show entries whose 'bridge_origin' attr
                       names a recognized bridge (today: the governed
                       ROS 2 bridge, value 'governed_ros2_bridge').
                       Direct-node POSTs and non-ROS 2 entries — which
                       don't carry the marker — are filtered out.
                       Closes the #939 4-E.a operator-UX gap: before
                       this flag the only way to see bridge-routed
                       decisions distinctly was to pipe --json through
                       jq with 'select(.event.attrs.bridge_origin == …)'.
                       This flag is the first-class equivalent.

Size cap:
  --limit N            cap output at N most-recent matching entries
                       AFTER --since/--kind/--outcome/--bridge-only filters apply.
                       Default 0 = no cap (preserves current behavior).
                       Matches the --limit shape used by 'audit query',
                       'logs', 'rollout history', and 'ha backup list'
                       so muscle memory carries across surfaces (#719).

Output modes:
  default   human-readable table (seq, time, kind, attrs summary)
  --json    JSONL — one JSON object per line
  --stream  tail the WAL and emit full JSON records (one per line) as
            new entries are appended. Starts at the current tail (no
            replay). Filters --kind / --outcome / --bridge-only compose.
            Exit with Ctrl-C. Mutually exclusive with --limit / --since
            (both are 'historical' concepts). Poll interval controlled
            by --stream-poll (default 250ms). #1149.

Recovery:
  --lenient downgrade SEQ_GAP hard-fail (#1149) to WARN-and-continue
            so an audit trail with gap-class corruption on disk
            becomes readable. Structural corruption (first_seq_not_one,
            invalid JSON, safe_seq invariant violations) still fails
            hard. Read-only paths only; the runtime always opens strict.
            See docs/operations/failure-modes.md § "Path 4 — Read-side
            rescue for SEQ_GAP" for the full runbook.

Usage

autonomy wal inspect [flags]

Options

      --bridge-only       only show entries whose event.attrs.bridge_origin names a recognized bridge (today the governed ROS 2 bridge, value 'governed_ros2_bridge'). Direct-node POSTs are excluded. First-class equivalent of --json | jq 'select(.event.attrs.bridge_origin != null)'. (#939 4-E.a)
      --dir string        WAL directory (default: XDG_CACHE_HOME/autonomyops/telemetry)
      --json              output as JSONL (one JSON object per line)
      --kind string       filter by event kind (e.g. autonomy.decision)
      --lenient           downgrade SEQ_GAP hard-fail (#1149) to WARN-and-continue so an audit trail with gap-class corruption on disk becomes readable. Structural corruption (first_seq_not_one, invalid JSON, safe_seq invariant violations) still fails hard. Read-only paths only; the runtime always opens strict.
      --limit int         cap output at N most-recent matching entries AFTER --since/--kind/--bridge-only filters (0 = no cap; matches the --limit shape used by 'audit query', 'logs', 'rollout history', 'ha backup list' so muscle memory carries across surfaces). #719
      --outcome string    filter by attrs.outcome (e.g. allow, deny). Typically paired with --kind autonomy.decision. Composes with every other filter. (#1149)
      --since string      show entries written within this duration (e.g. 5m, 1h)
      --stream            tail the WAL and emit full records as they are appended, one JSON object per line on stdout. Starts at the current tail (new events only). Filters --kind / --outcome / --bridge-only compose with streaming. Exit with Ctrl-C. Mutually exclusive with --limit / --since (both are 'historical' concepts). (#1149)
      --stream-poll int   stream mode: poll interval in milliseconds between checks for new appended entries (default 250, minimum 50). Lower = tighter latency, more IO; higher = looser latency, less IO. Ignored outside --stream. (#1149) (default 250)

Options inherited from parent commands

      --require-signed-manifest   Refuse to start if the SHA256SUMS release manifest or its cosign signature is missing/invalid (Tier 2 binary-integrity check; default: build-time compile-in via -ldflags -X, build-hardened artifacts=true, all others=false)

See also