DocsCore conceptsThe decision trail

The decision trail

The trail is what you follow backwards when somebody asks "why did this happen?", six months later, in front of an auditor, about an action taken by an agent nobody remembers configuring.

Each link is deliberate.

action  →  audit event  →  policy that matched  →  policy version

                            recorded decision  →  source event  →  the URL

Every request appends exactly one event. Not zero for allowed actions, not two for approved ones. One.

It records who (the agent, and the org if set), what (action, target, environment), the decision, the risk level, every policy that matched, the advisory signals that fired, and the session.

bash
memnox audit
memnox audit --project acme-checkout

The console shows the same record on its Activity screen.

The event names the rules by id, so a verdict is never explained as "blocked by policy". It is explained as "blocked by no-recursive-delete-in-payments, which says: Recursive delete is not an agent action here."

The reason string in your YAML is what the human eventually reads. Write it for that person.

Every event records policyVersion, the content hash of the rule set in force at that instant.

This is the link people skip and later need. Rules change. Without the version, a verdict from March cannot be explained by the file as it stands today, and "the rules were different then" is an assertion rather than a fact.

bash
memnox policy version

The console keeps the same history, and can roll back to any version in it.

Where a verdict was escalated by decision memory, the trail continues into the organizational graph: the decision node, its approver, and the evidenced_by edge to the source event.

The source event carries the permalink. The trail ends where it started: a Slack message, a pull request, a minute of a recording.

That is the property that makes the rest of it worth anything. Nothing in the chain is Memnox's word for it.

Replaying

Because nothing in the decision path is random, model-derived, or read from a wall clock inside the engine, a recorded decision can be recomputed:

bash
memnox replay <sessionId>          # every decision in one agent session
memnox explain <eventId>           # why this event got this verdict

And a candidate rule set can be tested against real history before it ships:

bash
memnox policy simulate -f candidate.yaml

It reports every decision that would differ, and warns loudly where an action becomes more permissive. That warning is the point of the command.

Tamper evidence

Each event stores prevHash, and hash = sha256(canonical event + prevHash), computed at append time. Editing or deleting a record breaks the chain from that point onward.

bash
memnox audit verify
# Audit chain intact — 128401 events verified.
# …or: Audit chain BROKEN at event #91 (0f3a…): content-mismatch
Console → Audit, with one event expanded showing matched policies, signals and policyVersion

Console → Audit, with one event expanded showing matched policies, signals and policyVersion

screenshot slot, save as public/screens/…png and set  src

Reading an event top to bottom answers who, what, under which rule, and under which version of that rule.