Product - Auditability

Explain a decision using the policy that existed when it was made

Rules change. Exceptions expire. Precedence evolves. Knowledge preserves the normative state behind each decision so compliance and audit teams can reconstruct exactly what applied, what won, and why.

When compliance asks about a decision from 18 months ago

A customer was rejected 18 months ago. Compliance, internal audit or a regulator asks the question every organization eventually faces :

Why was this customer rejected ?

The decision log answers with what happened at the operational layer :

decision   = REJECTED
rule       = R-182
timestamp  = 2025-02-14T09:12:00Z

The natural next step is to look up rule R-182. But R-182 may have been modified several times since 2025-02-14. And overrides may have been in force at that moment that are no longer visible today, or overrides may be active now that were not in force at the time.

What the current view of R-182 shows is not necessarily what the decision was actually based on.

And R-182 may not even have been the winning rule. Several rules likely applied simultaneously :

R-182  →  ALLOW
R-431  →  REVIEW
R-817  →  BLOCK

precedence rule  →  R-817 wins

The real question is not what does R-182 say today ? It is :

Can you reconstruct the policy decision as it was actually made, not explain it using today's policy ?

The reconstruction problem

In many architectures, reconstructing a historical decision requires stitching together several sources :

decision logs           what was written to storage
+
rule versions           which rules existed at that instant
+
overrides               what exceptions were active
+
context                 what facts were available
+
approvals               what human decisions had been recorded
+
precedence config       how ties were broken
=
decision as it happened

Each of these lives in a different system, often with its own retention policy. The reconstruction is doable, but expensive, and fragile.

Knowledge treats reconstruction as a native property of each decision, not a downstream engineering effort.

What Knowledge preserves for each decision

Every /check and /resolve call that produces a verdict writes a Consultation row that freezes :

  • The context sent by the caller - all facts, their sources, their verification status
  • The applicable rule versions at that instant (immutable snapshots)
  • The dominating rule and the precedence trace that led to it
  • The overrides in force and how they neutralised or shaped the outcome
  • The scope schema in effect for that tenant
  • A normative hash - SHA-256 aggregate of the cited rule versions + active overrides + precedence configuration + universal-rule flags

Given a consultation_id, the decision can be reconstructed exactly. Not from log inference. From frozen state.

Replay a decision

Given a consultation ID, Knowledge returns the decision as it happened :

Decision                 :  BLOCKED
Consultation             :  cns-9a8b7c
Decided at               :  2025-02-14T09:12:00Z

Applicable rule versions :
  R-182 v4  (severity: informative)
  R-291 v7  (severity: hard_block)
  R-817 v2  (severity: absolute_ban)

Overrides in force       :
  none

Dominating rule          :  R-817 v2
Precedence tie-broken by :  severity (absolute_ban > hard_block > informative)

Context at decision      :
  jurisdiction    = FR
  client_type     = individual
  pep_match       = true                        (source: screening_vendor)
  risk_score      = 0.83                        (source: risk_engine)

Approval trail           :  none required
Normative hash           :  sha256:9f2a...

Everything the reconstruction needs is in one query, populated from state that was frozen at decision time. Rule R-817 is now on v4 in production ; the Consultation still returns v2 because that is what applied.

Explain both the policy and the decision

Two different questions carry very different answers. Knowledge separates them so each has a first-class surface.

QuestionWhere it livesWhat it explains
Why did the organization adopt this policy ?The Policy's governance_log - an ordered list of adoption, amendment, renewal and retirement acts, each with actor, date and rationale.The policy's own history : who changed it, when, why. Regulatory driver, internal decision, exception process. Never read by the engine. Rendered in the registry UI as an amber header above the rule list.
Why did this specific case get this outcome ?The Consultation - rule versions cited, precedence trace, overrides, context, approvals. Read by the engine at replay time.The decision's technical history : what rules applied, what won, why, on what context.

The governance log answers "why does this rule exist ?" The Consultation answers "why did this rule fire on this case ?" Compliance teams need both, from the same audit surface.

How replay stays deterministic across years

PropertyWhat it means for replay
Immutable versioning by designEvery change to a Rule creates a new RuleVersion. Prior versions are never rewritten. A Consultation that cited an earlier version keeps pointing to that exact version, forever. Same shape for OverrideVersion.
Precedence trace stored, not derivedThe full candidate list, neutralised rules, effective set, winning rule and tie-breaking field are stored on the Consultation itself. Rendered as structured JSON alongside the verdict, or as prose via /reason for human narration. Not recomputed at replay time.
Approvals and overrides as first-class objectsBoth are queryable, versioned, and tied to the Consultation they resolved. An Approval records the triggering rules, requester, decider, outcome, decision comment. An Override has its own version chain and applies within a declared scope for a declared time window.
Retention as a deployment choiceConsultations, rule versions and events are retained per the tenant's configured policy. As long as the Consultation is retained, the reconstruction reads the frozen state.

Cryptographic verification (when signed-verdict is enabled)

When the deployment has verdict signing configured, every audit-relevant field of the decision (action, actor, resource, parameters, outcome, cited rule versions, normative hash) is included in a JWS ES256 envelope signed by the tenant's private key. See Enforcement.

This adds to the audit story :

  • Tamper-evident. Any modification of the recorded decision fields invalidates the signature.
  • Independently verifiable. An auditor can verify a decision from cold storage, years later, against the tenant's JWKS, without any dependency on Knowledge being live.

Related

Read nextWhy
EnforcementSigned verdicts and the four-actor trust chain
Progressive contextHow the context side of the audit trail is populated
Overrides, approvals, pausesThe authorship, versioning and approval surface in depth
ProductThe decision loop for rule-governed AI agents