Human–Machine Convergence

Temporal entitlement for decisions

Rajesh Ranjan Mahapatra

Why historical decisions must be replayed against the facts, policies and permissions that were valid, knowable and authorised at the original cutoff.

© 2026 Rajesh Ranjan Mahapatra. 29 min read

Temporal entitlement for decisionsAll Human–Machine Convergence
rajeshrmahapatra.com Human and machine intelligence

Authority, context and temporal truth

Temporal entitlement for decisions

A consequential decision is reproducible only from the facts, policy and permissions that were valid, available and authorised at its declared cutoff, not from whatever became true later.

TLDR

  1. Truth has at least two times: when a claim held and when the system could know that version.
  2. A third test is authority: whether that version could be used for this subject, purpose and action.
  3. Replaying the latest state lets future corrections, policy drift and permission changes leak into the past.
  4. Preserve a decision slice containing temporal facts, policy and grant versions, provenance, cutoff and snapshot receipts.
  5. Judge historical justification separately from the decision that should be made now.

The payslip that arrived after the decision

At 09:40, a credit-limit service rejects Maya because the authorised employer feed reports annual income of £42,000. At 11:15, the employer corrects the value to £62,000 and marks the correction as valid from the beginning of the month.

A week later, an auditor reruns the old rule against the current database. The decision becomes an approval. The auditor concludes that the service made the wrong decision at 09:40.

Maya really did earn £62,000. Yet the service could not retrieve that version at 09:40. Which conclusion follows: wrong outcome, defective process, or contaminated replay?

The answer depends on whether the audit allows the future to rewrite what the past was entitled to know.

The future can corrupt the past

Most organisations can recover an old result. Far fewer can recover the exact evidence boundary that made the result legitimate.

The usual audit recipe sounds sensible: retrieve the historical record, load the old model or rule, and compare the result. The weakness hides inside the word “historical”. A record may describe an earlier period while carrying a correction learned much later. A current table may preserve the latest truth about the past, not the knowledge that was available in the past.

This is not an exotic database puzzle. It appears whenever information arrives late, is backdated, is retracted, or changes authority. Employer data, medical coding, sanctions lists, identity attributes, consent, delegated permissions, fraud labels, market prices and operational status all acquire new versions. A system that silently reads the newest version during replay can look more accurate than the system that actually acted. The past can be made wiser by evidence it never possessed.

Temporal database research gives us the first necessary distinction. Valid time is when a fact is true in the modelled reality. Transaction time is when that fact is current in a database and can be retrieved. The dimensions are orthogonal: a correction can be recorded today yet claim validity last month.[1][2] System-versioned tables make database history queryable, which is valuable for forensics and point-in-time reconstruction.[3] But a consequential decision needs one more distinction. A fact can be present and still be forbidden, expired, insufficiently authoritative or outside the declared purpose.

Thought experiment 1 · replacement

Replace the database, preserve the visible history

System A stores only the latest value plus a human-readable note saying when it became effective. System B stores valid-time and record-time intervals for every version. At noon, both display “income £62,000, effective from the first day of the month”. At 09:40, only B can show that £42,000 was the retrievable version.

Now replace B with A while keeping every current screen identical. Have you preserved historical decisionability? No. The current behaviour matches, but the causal relation between a decision and the version it could consume has vanished. A fact is not a timeless string; it is a version with a temporal and evidential address.

The bitemporal cube and the decision cut

A three-dimensional cube of valid time, record time and entitlement time Versions occupy regions in a cube. A decision cut at 09:40 intersects only versions that were valid for the target period, recorded by the cutoff and authorised for the requested use. Valid time Record time Entitlement time Decision cut: 09:40 Only intersecting versions may enter £42k v1 £62k v2 Recorded after cutoff Eligible intersection Future leakage
The signature object is not a timeline but a cut through several temporal dimensions. The £62,000 correction can be valid for the earlier month while still sitting beyond the record-time boundary of the 09:40 decision. Adding entitlement makes clear that presence alone does not permit use. Practitioner synthesis, grounded in bitemporal database terminology. Illustrative.

Three judgements, not one

Return to Maya. The correction supports a judgement about the world: £62,000 was the better account of her income. It does not by itself establish that the 09:40 service ignored available evidence. Nor does it show that the employer feed met its latency obligation. One event can therefore produce three different findings:

Mechanism

Separate outcome, process and replay integrity

Outcome accuracy asks whether the action fits the best account available now. Process validity asks whether the decision used the evidence, policy and authority it was required to use then. Replay integrity asks whether the audit reconstructed that historical boundary without importing later state.

A decision can have a poor outcome yet a valid process. It can have a fortunate outcome produced by an invalid process. A replay can also accuse or excuse the process by using evidence that did not cross the original boundary.

Thought experiment 2 · counterfactual intervention

Backdate the permission, not the fact

An analyst receives permission at 10:05 to use a sensitive attribute. The grant is written with an effective start of 09:00 because a manager intended access to begin then. The analyst’s service acted at 09:40.

If the later grant is allowed to authorise the earlier action, the same visible result can be generated by two different mechanisms: genuine authority present at the cutoff, or retroactive administrative repair. Whether retroactivity is legitimate depends on the governing rule. The replay must therefore preserve both the grant’s effective interval and when the grant entered the authoritative system. A later licence cannot silently become an earlier cause.

Hindsight leakage as a causal intervention

Two replay paths, one faithful and one contaminated by future evidence The upper path uses only facts and permissions available at 09:40. The lower path introduces an 11:15 correction into the 09:40 replay, changing the output through a dotted future-to-past path. Faithful historical replay Latest-state replay £42kknown 09:40 Rule B17authorised Rejectat 09:40 £62klearned 11:15 Rule B17reused later Approveclaimed 09:40 Future correction inserted Same code Different cause
The dotted path is the intervention an audit must forbid when claiming historical reconstruction. Using today’s corrected value may be useful for remediation, but it is a counterfactual about what would have happened with better information, not evidence of what was knowable at 09:40. Illustrative causal diagram.
Thought experiment 3 · same output, different mechanism

The superseded match

A screening source reports a strong match at 09:20. The service pauses an action at 09:40. At 13:00, the source withdraws the match after receiving a new identifier. A naive replay using the withdrawn status says “no pause”.

The later status may demand immediate remediation. It does not erase that the earlier match was the authorised source’s live assertion. The useful audit question is not “Which value wins forever?” It is “Which version was authoritative at the decision cut, and did the service meet its obligations for uncertainty, review and reversal?” Historical accuracy and present accuracy are different questions.

The argument in one pass
Chart · flow
flowchart TD
  A["The payslip that arrived after<br/>the decision"] --> B["The future can corrupt the past"]
  B --> C["A decision needs three clocks"]
  C --> D["Build the decision slice, not<br/>just the history table"]
  D -. "re-test" .-> A
  classDef first fill:#0a1424,stroke:#D95545,stroke-width:2px,color:#e6f3ff
  classDef step fill:#0a1424,stroke:#3f7da0,stroke-width:1px,color:#e6f3ff
  class A first
  class B,C,D step
A structural route through Temporal entitlement for decisions: from The payslip that arrived after the… to Judge the past inside its original…. Reading use: follow the relation, then return to the surrounding argument for evidence and limits.

A decision needs three clocks

A useful temporal model must tell us when a claim held, when the system could retrieve it, and when the system was permitted to use it.

Imagine four marks on a wall. The first marks when Maya’s income actually changed. The second marks when the employer asserted a value. The third marks when the decision service received and committed that assertion. The fourth marks when the service had authority to use that source for credit assessment. Collapsing these marks into a single timestamp creates a clean table and a dirty explanation.

The established terms valid time and transaction time cover the first and database-facing third marks. Streaming systems add the practical distinction between event time and processing time because late and out-of-order arrivals force a trade-off among completeness, latency and cost.[4] For compound decision systems, transaction time must be interpreted carefully. A fact committed in a central source may still be absent from the snapshot, cache or message set used by one decision node. I will call the time at which a version crosses the decision system’s evidence boundary its record time. This is a practitioner extension, not a replacement for the database term.

The third clock is entitlement time: the interval during which a particular version may be used for a declared principal, subject, purpose, action and resource. Attribute-based access control already evaluates subject, object and environmental attributes against policy, while NIST guidance stresses authoritative establishment, update, readiness and revocation of attributes.[6][7] Cedar makes the request shape explicit as principal, action, resource and context, with time available as request context.[11] Temporal entitlement applies that logic to evidence selection itself.

Four clocks inside one income fact

Four parallel timelines for world validity, source assertion, system record and entitlement The income is valid from the month start, first asserted as 42,000, recorded before the decision, then corrected to 62,000 after the decision. The permission and policy windows determine whether a recorded version can be used. World validity Source assertion System record Entitlement Income state applies from month start £42k asserted £62k correction v1 retrievable v2 recorded Purpose grant G9 active Policy B17 active 09:40 decision 11:15 Earlier Later
Changing only the correction’s record time changes what the 09:40 service can justify, even though the correction’s valid time remains the same. The entitlement and policy intervals are separate because a retrievable claim is not automatically usable. Illustrative timeline based on the opening case.

The smallest useful formalism

Formal notation earns its place here because it prevents a familiar substitution. Let a fact version f contain a value, a valid interval V, a record interval R, a source and provenance. Let a decision d have a target time τ, a cutoff κ, a purpose, a principal, an action and a policy version. Let Allow evaluate the grant and policy state applicable at κ.

Eligible(f, d) = [τ ∈ Vf] ∧ [κ ∈ Rf] ∧ Allow(f, d, κ) ∧ Quality(f) ≥ qmin
τ is the time the decision is about. κ is the evidence cutoff. The first term asks whether the fact applies. The second asks whether that version had crossed the evidence boundary. The third asks whether use was authorised. The fourth applies a declared source or evidence threshold.

The equation assumes crisp intervals and a policy engine able to reconstruct historical grants. Remove either assumption and the result can become indeterminate. If a distributed clock says the cutoff lies somewhere between 09:39:59.970 and 09:40:00.030, while a permission is revoked at 09:40:00.000, no honest Boolean answer follows. Systems such as Spanner expose clock uncertainty to support externally consistent ordering, while Zanzibar’s authorisation design preserves causal ordering amid permission and content changes.[9][8] Many ordinary systems provide neither guarantee.

The decision cutoff is part of the decision, not an audit parameter chosen later. It can be a point, an uncertainty interval, or a consistency token. What matters is that the system declares what it treated as knowable before it acts.

A decision slice is a temporal join with a refusal state

The mechanism can be understood as a join across several histories. Start with versions whose valid interval covers the time the decision is about. Remove every version whose record interval begins after the cutoff. Join the survivors to the policy and grant versions visible at that same cut. Apply source-quality and freshness requirements. Only then evaluate the rule or model. A normal database join tries to return rows. A defensible decision join must also be able to return unresolved.

That refusal state matters when intervals overlap, a revocation sits inside the clock-uncertainty band, or the receipt identifies a source version that has since been deleted. Choosing the newest remaining row would hide the missing guarantee. Choosing the oldest would be equally arbitrary. The system should instead name the failed predicate: fact version unknown, policy revision unavailable, grant order ambiguous, source below threshold, or snapshot not causally comparable.

Consider a service with ten relevant fact versions, three policy revisions and two grant revisions. The Cartesian product contains sixty combinations, most of which were never simultaneously eligible. The decision slice collapses that space by applying the same target and cutoff before evaluation. This is more than an optimisation. It prevents an auditor from assembling a plausible combination that no historical actor could have seen. The slice is therefore both an input set and a proof of exclusion.

Worked example 1 · mental model

Two rows are enough to expose the mechanism

Version v1 says £42,000. It is valid from the start of the month and recorded from 08:55 until 11:15. Version v2 says £62,000. It has the same valid start but is recorded from 11:15 onwards. Rule B17 requires at least £50,000 and is active at 09:40. Grant G9 permits the employer feed for credit assessment from 09:00 to 10:00.

At target time τ equal to the month start and cutoff κ equal to 09:40, both versions pass valid time. Only v1 passes record time. V1 also passes entitlement, so the historical result is reject. At noon, v2 passes all three tests and the present result is approve. There is no contradiction. The questions differ.

The decision slice for Maya at 09:40

Item Value or rule Valid interval Record interval Entitlement at 09:40 Slice result
Income v1 £42,000 Month start onward 08:55 to 11:15 Allowed by G9 Used
Income v2 £62,000 Month start onward 11:15 onward Allowed now Excluded: after cutoff
Policy B17 Income ≥ £50,000 09:30 onward 09:25 onward Approved policy bundle Used
Grant G9 Employer feed for credit assessment 09:00 to 10:00 08:50 onward Principal and purpose match Used
The decisive row is not necessarily the row that is currently believed. A defensible slice records included and excluded versions, plus the reason for exclusion. Synthetic worked example.

Why authorisation needs its own history

A common design versions the business data but evaluates replay with today’s policy engine, today’s permission graph and today’s source classifications. That design answers a useful counterfactual: what would the old input produce under current governance? It does not reconstruct the old decision.

Policies and grants are temporal facts too. A policy can be published, activated, superseded, withdrawn or applied retroactively. A purpose grant can be issued, narrowed or revoked. A source can move from approved to quarantined. Each change needs valid and record semantics. OPA decision logs illustrate the kind of evidence a policy layer can retain: decision identifiers, query input, the policy queried and bundle metadata for audit and offline debugging.[10] The log becomes much more useful when its bundle revision and data snapshot can be joined to the decision receipt.

Provenance has a similar role. W3C PROV provides relations for generation, use, derivation, invalidation and responsible agents, including times that bound an entity’s lifetime.[5] Provenance does not decide whether an input was lawful or reliable. It tells the replay which entity version came from which activity and who was responsible for it. A timestamp is not a licence, and a hash is not an explanation.

Thought experiment 4 · boundary

Move the cutoff by twenty milliseconds

A permission revocation commits at 09:40:00.000. A decision node records its action at 09:40:00.012, but its clock uncertainty is ±30 milliseconds. What do you expect the replay to decide?

If the system reports “authorised” or “unauthorised” without exposing uncertainty, it invents order. A safe design either carries a snapshot token proving the authorisation state read by the decision, or treats the case as unresolved and applies a policy for ambiguity. Indeterminate is a valid audit result when time cannot support the claimed order.

Build the decision slice, not just the history table

A temporal database preserves versions. A decision slice proves which versions crossed the evidence and authority boundary of one action.

Adding system-versioned tables is a strong first step. It is not the finish. A compound decision may read from a customer store, a feature service, a policy engine, an authorisation service, a model gateway and a human review queue. Each component can expose a different “as of” state. Replaying each store independently at 09:40 can still combine versions that never coexisted.

The implementation target is a coordinated slice. The slice is the smallest bundle that lets another party answer four questions: What was the decision about? What crossed the evidence boundary? What authority applied? Which executable configuration produced the proposal or action? A replay without the original evidence boundary is a counterfactual, even when every component is individually versioned.

Configured boundary for a temporally entitled decision

Concentric system boundaries around a decision kernel External sources pass through an intake boundary into versioned fact, policy and grant stores. A decision kernel reads a coordinated snapshot and emits a decision receipt and effect request. A separate verifier reads back the outcome. Decision kernel cutoff + snapshot token typed purpose and action External changeable world Authorised intake boundary Factsources Policyauthors Grantauthority Effectsystem Temporal fact store valid + record + source Policy versions bundle + activation Grant history purpose + principal Receipt ledger inputs + output + hashes Effect receipt Independent readback
The kernel does not own truth or authority. It consumes a coordinated cut from versioned stores, emits a decision receipt, requests an effect, and relies on a different path to verify the outcome. The dotted readback is evidential, not a second execution path. Practitioner architecture. Illustrative.

What belongs in the slice

The exact schema depends on consequence and regulation, but the causal minimum is stable. The decision receipt should identify the subject and decision target, the target time, the evidence cutoff, the principal, purpose and typed action, the selected fact versions, the policy bundle revision, the authorisation decision or snapshot, the executable model or rule version, and the output. It should also capture provenance and any uncertainty that affected ordering.

Record what was excluded as well as what was used. An excluded-after-cutoff manifest turns “the system ignored the corrected income” into a testable statement. It shows that the correction was seen during audit but intentionally barred from historical replay. An excluded-for-purpose entry explains why a retrievable attribute did not enter. An unresolved entry preserves missingness rather than converting it into an implicit default.

The negative space is part of the evidence

Two replays can use the same three inputs and still differ in integrity. One may have evaluated five candidate versions and excluded two under explicit rules. The other may have retrieved only the three convenient rows because an index, cache or query filter hid the alternatives. The visible input set is identical, but only the first replay can show that a later correction or prohibited attribute was deliberately kept outside the boundary.

An exclusion manifest need not copy every sensitive value. It can retain the candidate version identifier, source, discovery time, exclusion reason, policy clause and a commitment hash. For a purpose-restricted attribute, the receipt may say that a qualifying version existed but was not disclosed to the decision component. This preserves the control claim without broadening access during audit. Where even the existence of an attribute is sensitive, the manifest can be released selectively to an authorised reviewer.

The practical test is counterfactual. Remove the exclusion record and ask whether a reviewer could distinguish a principled omission from a retrieval failure. If not, the receipt is incomplete. Evidence of non-use is what separates bounded context from accidental blindness.

Several systems already expose pieces of this pattern. Temporal tables retain row versions and support point-in-time queries.[3] Provenance vocabularies can represent generation, derivation and invalidation.[5] Policy engines can log decision identifiers, inputs and bundle metadata.[10] Consistent authorisation systems can bind checks to causally ordered state.[8] Temporal entitlement is the integration rule: no load-bearing item enters unless its time and authority are evaluated against the same decision cut.

Worked example 2 · configured system

A credit-limit review with a reproducible boundary

Consider a synthetic service asked to set Maya’s limit at 09:40. The typed request binds principal credit_service, subject maya, purpose credit_assessment, action set_limit, target time 09:40 and cutoff token s-8841. The service reads income v1, current exposure e7 and identity verification k4. It receives policy bundle B17 and authorisation decision A921.

The proposal is “no increase”. The decision receipt stores the three fact-version identifiers, the bundle hash, the authorisation decision identifier, the rule trace, the cutoff token and the excluded-after-cutoff list. At 11:15, income v2 arrives. The system opens a remediation case because the current decision should differ. Historical replay still returns “no increase” and labels it justified under the captured slice. The source-latency control then fails because the employer correction breached its service target.

The design produces three actions instead of one accusation: correct Maya’s present outcome, retain the historical decision explanation, and improve the delayed source. Do not remediate the present by rewriting the past.

A fact’s lifecycle keeps supersession without erasure

State transition from proposed fact to recorded, authorised, used and superseded A fact can be proposed, recorded, authorised and used. A later version supersedes it for future decisions, while the old version remains in the historical receipt. Revocation blocks new use but does not erase that an earlier decision consumed it. Proposedsource claim Recordedversion fixed Authoriseduse scoped Usedreceipt links Supersededfuture use ends Revoked for new use Historical link remains
Supersession changes which version is eligible for a later decision. It should not mutate the receipt of an earlier use. Revocation can end future entitlement while preserving the evidential fact that the old version was used. Illustrative state trajectory.

A historical-replay benchmark

The most useful test is not whether the system can return an old row. It is whether several replay strategies disagree for reasons the evidence can localise. The benchmark below generates synthetic decisions with late corrections, policy changes, permission changes and missing receipts. It compares three methods:

Executable contribution

Three replay strategies

Latest-state replay uses the final fact, current policy and current grant. Fact-time replay reconstructs the fact available at the cutoff but still uses current policy and grant. Temporal-entitlement replay reconstructs the fact, policy and grant at the cutoff and refuses a verdict when the required receipt is missing.

The first method measures hindsight leakage. The second isolates the remaining policy and authority drift. The third tests the paper’s proposed decision slice. All numbers are synthetic and have no client or operational provenance.

Replay divergence as late corrections increase

Line chart showing replay divergence for three methods Latest-state replay divergence rises from about 7.6 percent to 17.4 percent as late corrections rise from zero to thirty percent. Fact-time replay stays near five percent because it still uses current policy and grants. Temporal-entitlement replay has zero divergence among cases with complete receipts. 0%5%10%15%20% 051015202530 Late correction rate (%) Replay divergence Latest-state replay Fact-time replay Temporal-entitlement, resolved
In the fixed-seed simulation, latest-state divergence increases with late corrections. Reconstructing fact time removes that growth but leaves roughly five per cent divergence from policy and grant drift. Temporal-entitlement replay reproduces resolved cases exactly by construction; approximately two per cent remain unresolved because receipts are deliberately missing. Synthetic: 20,000 decisions per point; policy-change 8%, grant-change 8%, missing-receipt 2%; fixed seed 183.
Worked example 3 · executable lab

Historical-replay benchmark

Change the rates, run 10,000 synthetic decisions, and compare the three replay boundaries. The generator uses a deterministic seed so results can be repeated.

13.0%Latest-state divergence from the captured decision
5.0%Fact-time divergence left by current policy and grant
0.0%Temporal-entitlement divergence among resolved cases
2.1%Cases correctly returned as unresolved

Interpretation: a positive gap between latest-state and fact-time replay indicates future fact leakage. A remaining fact-time gap indicates policy or grant drift. A non-zero temporal-entitlement gap would reveal a defect in the slice or replay logic. Unresolved cases are not failures of honesty; they identify missing evidence that should block a confident historical verdict.

The lab encodes a simple threshold decision, so it does not prove that temporal entitlement will improve every system. Its purpose is narrower: make three sources of disagreement observable rather than mixing them into “the replay changed”. A positive result permits confidence that the captured slice reproduces the configured decision. A negative result localises what changed. It does not establish that the original source was true, the policy was wise, or the outcome was fair.

Open the benchmark assumptions and invariants

The synthetic world contains a latent eligibility score. Some initial observations are materially wrong and receive a late correction. A threshold policy and a purpose grant can change after the cutoff. The captured decision uses the initial observation, historical threshold and historical grant. Latest-state replay uses final values. Fact-time replay restores the initial observation but not the policy or grant. Temporal-entitlement replay restores all three.

Invariant 1: record intervals never move backwards. Invariant 2: one fact version is selected for a target and cutoff. Invariant 3: policy and grant are evaluated at the same cutoff as facts. Invariant 4: missing load-bearing receipts return unresolved, never an invented Boolean. Invariant 5: all metrics are about replay agreement, not substantive correctness.

Open the runnable Python reference implementation
Python · standard library only
from __future__ import annotations

from dataclasses import dataclass
from random import Random
from typing import Literal

Decision = Literal["approve", "deny", "unresolved"]


@dataclass(frozen=True)
class Scenario:
    observed_at_cutoff: float
    corrected_value: float
    threshold_at_cutoff: float
    threshold_now: float
    grant_at_cutoff: bool
    grant_now: bool
    receipt_present: bool


def decide(value: float, threshold: float, grant: bool) -> Decision:
    return "approve" if grant and value >= threshold else "deny"


def captured(s: Scenario) -> Decision:
    return decide(s.observed_at_cutoff, s.threshold_at_cutoff, s.grant_at_cutoff)


def replay_latest(s: Scenario) -> Decision:
    return decide(s.corrected_value, s.threshold_now, s.grant_now)


def replay_fact_time(s: Scenario) -> Decision:
    return decide(s.observed_at_cutoff, s.threshold_now, s.grant_now)


def replay_temporal_entitlement(s: Scenario) -> Decision:
    if not s.receipt_present:
        return "unresolved"
    return decide(s.observed_at_cutoff, s.threshold_at_cutoff, s.grant_at_cutoff)


def scenario(rng: Random, late: float, policy: float,
             auth: float, missing: float) -> Scenario:
    true_score = max(0.0, min(100.0, rng.gauss(62.0, 12.0)))
    if rng.random() < late:
        direction = 1.0 if rng.random() < 0.5 else -1.0
        initial = true_score + direction * rng.uniform(12.0, 28.0)
    else:
        initial = true_score + rng.uniform(-2.0, 2.0)
    initial = max(0.0, min(100.0, initial))

    historical_threshold = 60.0 if rng.random() < 0.5 else 65.0
    current_threshold = historical_threshold
    if rng.random() < policy:
        current_threshold = 65.0 if historical_threshold == 60.0 else 60.0

    historical_grant = rng.random() > 0.05
    current_grant = historical_grant
    if rng.random() < auth:
        current_grant = not historical_grant

    return Scenario(
        observed_at_cutoff=initial,
        corrected_value=true_score,
        threshold_at_cutoff=historical_threshold,
        threshold_now=current_threshold,
        grant_at_cutoff=historical_grant,
        grant_now=current_grant,
        receipt_present=rng.random() >= missing,
    )


def benchmark(n: int = 10_000, *, late: float = 0.15,
              policy: float = 0.08, auth: float = 0.08,
              missing: float = 0.02, seed: int = 183) -> dict[str, float]:
    if n <= 0:
        raise ValueError("n must be greater than zero")
    rates = {"late": late, "policy": policy, "auth": auth, "missing": missing}
    invalid = {name: value for name, value in rates.items()
               if not 0.0 <= value <= 1.0}
    if invalid:
        raise ValueError(f"rates must lie between 0 and 1: {invalid}")

    rng = Random(seed)
    latest_diff = fact_diff = entitled_diff = unresolved = resolved = 0

    for _ in range(n):
        s = scenario(rng, late, policy, auth, missing)
        actual = captured(s)
        latest_diff += replay_latest(s) != actual
        fact_diff += replay_fact_time(s) != actual
        entitled = replay_temporal_entitlement(s)
        if entitled == "unresolved":
            unresolved += 1
        else:
            resolved += 1
            entitled_diff += entitled != actual

    return {
        "latest_divergence_pct": 100 * latest_diff / n,
        "fact_time_divergence_pct": 100 * fact_diff / n,
        "temporal_entitlement_divergence_pct": 100 * entitled_diff / max(1, resolved),
        "unresolved_pct": 100 * unresolved / n,
    }


if __name__ == "__main__":
    for name, value in benchmark().items():
        print(f"{name}: {value:.2f}")

Run with Python 3.10 or later. A zero entitled divergence means the complete historical slice reproduces the captured threshold decision. The browser and Python versions use different deterministic random-number generators, so their rounded rates differ slightly. Neither can establish truth, fairness or legal validity.

The replay verdict matrix

Historical slice
Current decision unchanged
Current decision changed
Complete and authorised
Reaffirm.
Replay supports the old process and the present action.
Remediate without rewriting.
Old process may be justified; current action changes.
Complete but unauthorised
Process breach.
A matching outcome does not cure impermissible evidence use.
Process breach plus remediation.
Correct the action and investigate authority.
Incomplete or temporally ambiguous
Indeterminate.
Do not infer validity from agreement.
Indeterminate plus current correction.
Act now while preserving audit uncertainty.
The matrix prevents a single replay comparison from carrying four different judgements. Historical process, present action, authority and evidence completeness remain visible as separate dimensions. Decision instrument. Practitioner synthesis.
How the claim changes under pressure
Chart · state
stateDiagram-v2
  [*] --> Claim
  state "Replace the database, preserve<br/>the visible history" as Claim
  state "The bitemporal cube and the<br/>decision cut" as Test
  state "Three judgements, not one" as Revision
  Claim --> Test: expose mechanism
  Test --> Decision: evidence survives
  Test --> Revision: rival survives
  Revision --> Claim: narrow or rebuild
  Decision --> [*]
The revision loop begins with Replace the database, preserve the… and keeps counterexamples inside the reasoning path. Reading use: follow the relation, then return to the surrounding argument for evidence and limits.

Where the decision slice breaks

Temporal entitlement improves reconstruction. It does not turn records into reality, settle the law, or make distributed time exact.

A faithful replay can reproduce a bad source

The strongest boundary is simple. A complete slice proves what the configured system consumed and which authority it invoked. It cannot prove that the employer feed, identity register or model feature was substantively correct. Maya’s v1 can be perfectly preserved and still be false. Temporal entitlement cannot make a bad source true. Source quality, appeal, corroboration and correction obligations remain separate controls.

This boundary matters because audit language often slides from “the system used the authorised version” to “the system was right”. The first is an operating-evidence claim. The second is an outcome claim. A mature review states both and records disagreement.

Retroactivity is a rule, not a database trick

Some domains intentionally apply corrections or permissions retroactively. A court order, accounting restatement or policy decision may alter how earlier periods are treated. Temporal entitlement does not forbid that. It requires the retroactivity rule to be explicit, versioned and attributable. The system should be able to distinguish “this value was learned later but governs the earlier period” from “this value was learned later and is being smuggled into a historical reconstruction”.

That distinction is partly legal and organisational. This paper offers a systems grammar, not legal advice. The authority responsible for a domain must define whether a later correction changes past liability, past process validity, present remediation, or all three. Where the rule is disputed, the receipt should preserve the competing interpretations rather than force one Boolean.

Distributed time creates uncertainty bands

A timestamp produced by one node is not automatically comparable with a timestamp produced by another. Replication lag, queue delay, cache activation and clock skew can place a permission change on either side of the apparent cutoff. Spanner’s TrueTime is notable because it exposes clock uncertainty rather than pretending to perfect time, and Zanzibar binds authorisation checks to causal order across changing access-control state.[9][8]

Most systems should not imitate their scale. They should imitate the honesty of the contract. Carry a monotonic revision, snapshot token, log sequence, signed event time, or explicit uncertainty interval. Require a freshness bound for permissions and policy. When the bound straddles a consequential change, abstain, retry against a stronger read, or require review.

Boundary condition

A snapshot token can order state without proving meaning

A token can show that the policy read was at least as recent as a grant change. It cannot show that the policy represented the correct legal interpretation or that the source attribute referred to the right person. Consistency prevents one class of error. It does not absorb identity, semantics or governance.

Deletion and minimisation can conflict with replay

Keeping every historical input forever is neither necessary nor always permissible. A decision receipt can retain identifiers, hashes, reason codes, provenance pointers and selective evidence manifests while the underlying content follows its retention rule. Yet a hash only verifies a later copy against a commitment. It does not reveal the deleted content or prove that use was authorised. The architecture must therefore declare which future questions it chooses to remain capable of answering.

A practical design separates three layers: an operational record needed for immediate recovery, an audit manifest needed for accountability, and the source record governed by its own retention and access policy. Erasure may intentionally make some exact replays impossible. In that case, the correct historical verdict is “not reconstructable under the retained evidence”, not a guess derived from current state.

Models and people may not replay bit for bit

A deterministic rule can usually be rerun if code and inputs are captured. A sampled model may also depend on weights, runtime, prompt construction, tool results, random seed and provider behaviour. A human reviewer depends on the evidence displayed, instructions, delegated authority and reasons recorded, but not on a recoverable copy of private cognition.

For these systems, exact output equality may be the wrong target. Use tiers. A bitwise replay reproduces the same bytes. A decision-equivalent replay reaches the same typed outcome within declared tolerance. An explanatory replay reproduces the evidence, policy and authority path even when the proposal is stochastic. Exact replay is a systems property, not a model feature.

Define the replay envelope before seeing the rerun

A team should declare what counts as reproduction before it observes the new output. For a threshold rule, the envelope may require the same eligibility Boolean and reason code. For a ranked recommendation, it may require the same top choice, no movement across a prohibited boundary and a bounded change in score. For a human review, it may require the same evidence display, instruction set and authority, while treating the reviewer’s judgement as a fresh decision rather than a mechanical replay.

Suppose a sampled model originally produced risk 0.64 and the captured policy mapped 0.60 or above to manual review. A rerun returns 0.67. Byte equality fails, but decision equivalence holds if the model version, decoding contract, input slice and review threshold are all preserved. If the rerun returns 0.58, the audit should not immediately call the original result irreproducible. It should test whether stochastic variance can cross the threshold at an unacceptable rate. The relevant artefact is then a distribution and acceptance bound, not one lucky rerun.

Predeclaring the envelope blocks another form of hindsight. Without it, reviewers can tighten or relax similarity after seeing whether the replay supports their preferred conclusion. A negative result should therefore identify which layer failed: bytes, typed decision, evidence path, authority path, or effect. This keeps nondeterminism from becoming a blanket excuse and prevents exact sameness from becoming an impossible standard.

Adversarial paths that make history lie

A river of decision evidence with five adversarial tributaries and corresponding controls The central evidence river flows toward a decision receipt. Late correction, cache staleness, policy backdating, clock skew and missing provenance can contaminate the path. Each has a specific control such as record intervals, snapshot tokens, versioned retroactivity rules, uncertainty bounds and provenance links. Evidence path to receipt Latecorrection Record-time interval Cachestaleness Snapshot token Policybackdating Versioned retroactivity Clockskew Uncertainty bound Missingprovenance Lineage + source ID Decision receipt or honest unresolved state
Different temporal failures need different controls. “Store more history” cannot solve stale authorisation, backdated policy or clock ambiguity. The control must interrupt the causal path that would let the wrong version enter the slice. Illustrative adversarial-path visual.
Worked example 4 · failure case

The replay that agrees for the wrong reason

A service denied an action because an income value was low. During replay, the archived input is missing, so an engineer substitutes the current corrected value. The policy has also tightened since the decision. The current value is high enough for the old policy but too low for the new one, so the replay still returns deny.

Output agreement disguises two substitutions. The fact came from the future and the policy came from the present. Without a slice, the audit reports success. With a slice, the case is unresolved because the historical input is absent. This is the counterexample to using agreement as evidence of reproducibility.

Open research hypothesis

Temporal-entitlement receipts will reduce false audit conclusions

The proposal is strengthened if controlled incident reviews using decision slices classify disagreements more accurately, reduce time spent reconstructing context, and separate remediation from process fault. It is weakened if simple immutable event snapshots provide the same localisation and governance at lower cost.

A rival explanation is that most replay disagreement comes from model nondeterminism or code drift rather than temporal leakage. The smallest useful test is a matched benchmark: replay the same incident set with latest state, fact-time state and full temporal entitlement, then have independent reviewers classify the cause without seeing the method label.

Do not apply the full mechanism to trivial, reversible decisions whose inputs and permissions cannot change materially. The overhead is justified by consequence, dispute likelihood and the cost of a false historical claim.

The smallest implementation worth building

An organisation does not need a three-dimensional database product to begin. Add immutable recorded_at and source-version identifiers to load-bearing facts. Capture the target time and cutoff in the decision request. Version the policy bundle and authorisation decision. Store an input manifest with included and excluded versions. Record clock or snapshot evidence where ordering matters. Return unresolved when a required join cannot be made.

Then run one incident through three replays. If latest-state, fact-time and temporal-entitlement results are identical, the extra structure may still prove why. If they differ, the design has already paid for itself by locating the leak. The minimum is not a warehouse. The minimum is a decision receipt that refuses to confuse current truth with historical entitlement.

The evidence conversation
Chart · sequence
sequenceDiagram
  participant Q as Question
  participant M as Mechanism
  participant E as Evidence
  participant D as Decision
  Q->>M: The payslip that arrived after the decision
  M->>E: Replace the database, preserve the visible history
  E-->>M: compare rival explanations
  E->>D: Judge the past inside its original decision slice
  D-->>Q: revise scope or act
Question, mechanism, evidence and decision exchange the burdens developed in Temporal entitlement for decisions. Reading use: follow the relation, then return to the surrounding argument for evidence and limits.

Judge the past inside its original decision slice

Before this distinction, teams ask whether an old decision can be reproduced from historical data. After it, they ask a more exact question: can the decision be reconstructed from the facts, policy and authority that crossed its declared cutoff?

That question changes release criteria. For a consequential decision, do not rely on a load-bearing input unless the system can identify the time it describes, the version recorded before the cutoff, the authority and purpose that permitted its use, the policy version that interpreted it, and the receipt that binds those items to the action. When any element is missing, classify the historical judgement as indeterminate. Do not silently substitute the latest value.

It also changes incident response. Produce three outputs: the best action now, the validity of the historical process, and the control improvement required. Maya may deserve an immediate limit correction even when the 09:40 service used the only authorised version it had. The employer feed may still have failed its latency obligation. These findings can coexist.

Decision rule

Use the decision slice before assigning fault

Do not call a historical decision correct, incorrect or compliant until the replay excludes every fact, policy and permission that crossed the boundary after the original cutoff. If the slice is complete, judge the process under that slice and remediate the present under current truth. If the slice is incomplete, preserve uncertainty and fix the evidence architecture.

The past should not be judged by evidence it never possessed, and the present should not be trapped by what the past once knew.

Appendix

Glossary

Valid time
The interval in which a fact is asserted to hold in the modelled world.
Transaction time
The interval in which a fact is current in a database and retrievable, using the established temporal-database term.
Record time
In this paper, the interval in which a version has crossed the decision system’s evidence boundary and can be selected by its coordinated snapshot.
Entitlement time
The interval in which a version may be used for the declared principal, subject, purpose, action and resource under a versioned policy.
Decision cutoff
The point, uncertainty interval or consistency token defining which state the decision treats as knowable and authoritative.
Decision slice
The bound set of fact versions, policy, grants, executable configuration, provenance and receipts that causally supported one decision.
Historical replay
Reconstruction of the configured decision under its original slice, distinct from a counterfactual using later information.
Watermark
A progress estimate used in stream processing to reason about whether earlier event-time data may still arrive.

Appendix

References

  1. Snodgrass, Richard T. “Temporal Databases.” In Theories and Methods of Spatio-Temporal Reasoning in Geographic Space, 1992. Primary paper.

  2. Dyreson, Curtis E., et al. “A Consensus Glossary of Temporal Database Concepts.” SIGMOD Record 23(1), 1994. Primary paper.

  3. Microsoft. “Temporal tables” and “Query data in a system-versioned temporal table.” Official overview; official query guide.

  4. Akidau, Tyler, et al. “The Dataflow Model: A Practical Approach to Balancing Correctness, Latency, and Cost in Massive-Scale, Unbounded, Out-of-Order Data Processing.” PVLDB 8, 2015. Primary paper page. See also the Apache Beam programming guide for watermarks and late data.

  5. W3C. “PROV-O: The PROV Ontology.” W3C Recommendation, 2013. Official specification.

  6. Hu, Vincent C., et al. Guide to Attribute Based Access Control Definition and Considerations. NIST SP 800-162, 2014, updated 2019. Official publication.

  7. Hu, Vincent C., David F. Ferraiolo and Rick Kuhn. Attribute Considerations for Access Control Systems. NIST SP 800-205, 2019. Official publication.

  8. Pang, Ruoming, et al. “Zanzibar: Google’s Consistent, Global Authorization System.” USENIX ATC, 2019. Primary paper page.

  9. Corbett, James C., et al. “Spanner: Google’s Globally-Distributed Database.” OSDI, 2012. Primary paper page.

  10. Open Policy Agent. “Decision Logs.” Official documentation.

  11. Cedar Policy Language. “Authorization” and “What is Cedar?” Official authorisation guide; official reference guide.