NIKO
MANIFESTOWATCH NIKORESEARCHNIKO’S DIARYCOMPAREJOIN THE WAITLIST
ERNESTA LABS RESEARCH // ARC II - STATE, CONTEXT AND DURABLE EXECUTION // STATUS: ADOPTED

Fresh memory, stale plans: why fresh state is not enough

Your executor reads perfectly current state and still executes the wrong plan - because the plan was derived from a world that no longer exists. PlanFence names this failure and proposes a fix: validate the exact dependency frontier before anything irreversible happens.

SA

Short answer

PlanFence (arXiv:2609.03340) identifies a failure class that fresh-state designs do not solve: the executor can hold perfectly current records while executing a plan that was built from dependencies - records, policies, evidence, projections - that have since changed. Fresh memory does not repair a stale decision.

The proposed discipline: every decision carries the exact versions and heads of the dependencies it was derived from (a decision dependency frontier), and before irreversible execution the runtime re-validates that frontier against current heads. If anything moved, the verdict is INVALID_PLAN - re-project, re-decide, then execute.

Ernesta Labs adopted this pattern as a precondition for any irreversible action. It is cheap, it is auditable, and it converts a silent correctness failure into an explicit, recoverable state.

01

The failure mode: a perfect view of the present executing a plan from the past

The last few years of agent engineering have been obsessed with context freshness. Keep the memory current, keep the retrieval accurate, keep the state database in sync - and the agent will act on the truth. This article is about why that is not enough, and it starts with an uncomfortable observation: an executor with perfectly fresh state can still do exactly the wrong thing, because the decision it is executing was not made now.

Consider the shape of a real run. At time T0, a planner reads a set of records, a policy, some evidence, and a projection of the future, and commits to a plan: charge this customer, send that email, delete those rows, publish that page. At time T1 - minutes or days later - an executor picks up the plan. Between T0 and T1, the world moved: the record was updated, the policy changed, the evidence was corrected, the projection turned out wrong. The executor, reading fresh state, faithfully executes a decision whose premises are dead.

Fresh state does not help, because the executor is not the one who made the decision. It is merely the one who carries it out. The staleness lives in the plan, and no amount of memory hygiene touches it. Worse, the failure is silent: every component reports green. The state store is current. The executor is deterministic. The audit log is complete. The plan was simply derived from a world that no longer exists.

This failure class gets sharper with distribution. Once planning, execution, and effects live across processes, queues, and agents, the gap between decision time and execution time is not a bug you can close - it is a structural property of the system. The question is whether anything checks the gap before the point of no return.

02

What the paper actually does

PRIMARY SOURCE RESULT: PlanFence (arXiv:2609.03340, 'Fresh Memory, Stale Plans: Dependency-Scoped Validation for Distributed LLM-Agent Workflows') studies exactly this failure class: executors with fresh state acting on plans built from stale dependencies. The paper proposes dependency-scoped validation - each plan explicitly declares the dependencies it was derived from, and the runtime validates those dependencies against their current state before the plan executes.

PRIMARY SOURCE RESULT: The paper reports an evaluation across 30 workflows. We want to read this carefully rather than triumphantly. Thirty workflows is a demonstration-scale study: enough to show that the mechanism catches the failure class it targets and behaves as specified, not enough to establish general effectiveness across domains, providers, or adversarial conditions. We do not quote performance numbers from the study as if they were production statistics, and we would not accept them as such from any paper at this scale.

PRIMARY SOURCE RESULT: The mechanism's core move is scoping. Validation is not 're-check everything before every action' - that is prohibitively expensive and mostly redundant. It is 're-check exactly what this decision depended on'. The dependency declaration is the unit of validation, which is what makes the approach affordable enough to actually deploy.

03

The pattern: a decision dependency frontier with versions and heads

LABS INTERPRETATION: The general pattern Ernesta Labs extracts from PlanFence - independent of the paper's specific machinery - is the DecisionDependencyFrontier. Every committed decision carries the exact frontier of things it was derived from, each pinned to a version or head: claims (assertions the planner believed), records (rows, documents, configurations), policies (rules and permissions in force at decision time), evidence (artifacts and check results backing the decision), and projections (forecasts and inferences drawn over any of the above).

The frontier is not a summary. It is the precise edge of the decision: these claim versions, these record heads, this policy revision, this evidence bundle, this projection output. Anything outside the frontier did not influence the decision and does not participate in its validation. Anything inside the frontier moved, and the decision is suspect.

This gives the runtime a new, cheap question it can ask at the moment that matters most: does the frontier still hold? Answering it requires only comparing recorded versions against current heads - hashes, revision counters, timestamps, content digests. No model call is needed for the comparison itself. The expensive step, re-deciding, is only triggered when the answer is no.

The frontier also fixes something subtle that plain audit logs miss. An audit log records what happened; a frontier records what a decision depended on happening. When a failure investigation asks 'why did the system send that email?', the log answers who sent it, but the frontier answers what the sender believed to be true at the moment of decision - and whether that belief was still true at the moment of execution.

04

The protocol: validate before irreversible execution

LABS RECOMMENDATION: The protocol we adopted is deliberately small. Before any irreversible action - a send, a charge, a delete, a publish, an external mutation - the runtime re-validates the decision's dependency frontier against current heads. There are exactly two outcomes.

Outcome one: the frontier holds. Every dependency is still at the version the decision was derived from. Execute. Note that 'holds' does not mean the decision was correct; it means it is still consistent with the world it was made in, which is the only thing a machine can cheaply check.

Outcome two: anything in the frontier has moved. The verdict is INVALID_PLAN. The runtime does not attempt to patch the old decision in place. It re-projects - rebuild the current view of the world from current evidence - then re-decides - make a new decision against the new projection, with a new frontier - and only then executes. The old plan goes to the record as invalidated, with the diff that killed it, which is exactly the artifact you want when you later ask why the system hesitated.

The key discipline is that INVALID_PLAN is a first-class state, not an exception to swallow. A system that re-validates but then executes anyway 'because we are almost sure' has built a tripwire and taped over it. If the frontier moved, the decision is gone; make a new one.

05

Limitations, stated plainly

PlanFence's guarantees are conditional on the dependency declaration being correct. If a decision secretly relied on a record the declaration never mentioned, validation passes and the staleness sails through. Declaring dependencies is a discipline, and disciplines fail - especially when the declaration itself is generated by a model. An LLM that omits a dependency from its own frontier produces a frontier that validates cleanly and lies completely.

The mechanism is not Byzantine-safe. It detects honest drift: dependencies that changed between decision and execution. It does not defend against a compromised component lying about versions, a store serving forged heads, or a writer that mutates a record while reporting the old version. Those threats need signatures, trusted storage, and authorization machinery that this paper does not provide.

Validation is not atomic with external effects. There is still a window - smaller, but real - between the frontier check and the effect landing in the external world. Without fencing or saga machinery around the effect itself (idempotency keys, two-phase confirmation, compensating transactions), a dependency can move in the gap between check and commit. PlanFence narrows the stale-decision window; it does not close it.

And the evaluation scale: 30 workflows is small. We adopt the pattern because it is cheap, safe when it fails (an INVALID_PLAN is a delay, not a damage), and independently justified by basic database thinking - optimistic concurrency for decisions. We do not adopt it because a small study proved broad effectiveness, and neither should you.

06

Why builders should care

Every builder with a queue, a cron job, a retry, or a multi-step workflow already has decision-to-execution gaps. The typical stack handles them with luck and idempotency keys. Idempotency keys protect you from duplicating an effect; they do nothing to protect you from executing a decision whose premises died while it sat in the queue.

The economics favor the check aggressively. Re-validating a frontier is comparing a handful of versions and hashes - effectively free next to the model call that made the decision. The failure it prevents is the most expensive kind: an irreversible effect executed against a world that changed its mind, which is the failure your customer notices first and forgives last.

There is also a quiet architectural payoff. Making every decision declare its dependencies forces the planner to be explicit about what it read and what it inferred from. That declaration is simultaneously the validation input, the audit artifact, and the debugging interface. One discipline, three uses.

07

Ernesta Labs interpretation

LABS INTERPRETATION: We read PlanFence as the decision-layer analogue of optimistic concurrency control - a pattern databases solved decades ago for writes, applied to the thing agents actually produce: decisions. That lineage is why we trust the pattern more than the study scale alone would justify. The paper's contribution is naming the failure precisely (fresh memory, stale plans) and showing that the validation scope can be small enough to be practical.

The reframing we took from it: stop thinking of a plan as a schedule of actions, and start thinking of it as a set of conditional commitments - each valid only while its frontier holds. Under that view, 'the plan was wrong' splits into two very different statements: the decision was bad on its own terms, or the decision was fine and the world moved. Those need different responses, and conflating them is how teams end up debugging the wrong layer at 2 a.m.

08

What we would implement, and what we would not

LABS RECOMMENDATION: Implement the frontier as a data structure on every committed decision: a list of (dependency kind, identifier, version/head) covering claims, records, policies, evidence, and projections. Gate every irreversible action on a frontier check. On mismatch, mark INVALID_PLAN, persist the diff, re-project from current evidence, and re-decide. Route all frontier events - validations, invalidations, re-decisions - into the same evidence ledger the rest of the runtime uses, so the pattern composes with independent verification rather than beside it.

What we would not implement: we would not have a model perform the frontier comparison - it is a mechanical version check and giving it to a model adds latency, cost, and hallucination risk to the one step that must be exact. We would not treat a passing frontier check as proof the decision was correct; the check is about staleness, not wisdom. We would not use frontier validation as a substitute for fencing or saga patterns around the external effect itself - it narrows the race window, it does not eliminate it. And we would not trust model-generated dependency declarations without review: a self-declared frontier is self-test, and Article 4 in this library explains what that is worth.

NIKO

CASE STUDY - NIKO: gating the irreversible send

NIKO's runtime has a small number of irreversible actions - an email that goes out, a page that publishes - and the email send is the one that matters most, because a sent email cannot be unsent. A send plan is derived from a waitlist record, a permission state, a message policy revision, and a content asset. Each of those is a dependency with a head.

Under the adopted pattern, the send is not executed because a plan exists. It executes only after the runtime re-reads the current heads of that exact dependency set - the subscriber's record version, the permission state, the policy revision, the content hash - and confirms they still match what the decision was made against. If a subscriber changed state, or the policy was revised, or the asset was edited between decision and send, the verdict is INVALID_PLAN: re-project, re-decide, and only then send. The rejected plan stays in the evidence ledger with the diff that killed it.

This matters concretely because NIKO's public diary already records what happens when a recorded claim and reality diverge - a form that recorded success while persisting nothing, a waitlist whose persistence had to be verified rather than assumed. The diary entries are the failure mode this pattern exists to catch before the irreversible step instead of after it.

DESIGNED: frontier-gated sends with INVALID_PLAN and re-decision. IMPLEMENTED: dependency frontier checks on irreversible actions in the runtime. TESTING: behavior under live dependency drift during real subscriber activity. VERIFIED: only the mechanism's mechanics - that frontier mismatches are detected and gated. NOT YET PROVEN: that the gate has prevented any real-world mis-send; no such incident has occurred to test it against. Nothing here claims otherwise.

TST

Practical test: find your stale-plan window today

Take your system's most irreversible action - the send, the charge, the delete. Trace the last five times it ran, and answer three questions from logs alone: (1) What exact records, policies, and assets did the decision depend on, and can you name their versions? (2) How much time passed between decision and execution? (3) During that window, could any of those dependencies have changed, and would the executor have noticed?

If you cannot name the versions from logs, your first fix is free: before the next irreversible action, have the decision step write down the dependency set with identifiers and versions or hashes - updated_at from the row, revision from the policy, content hash from the asset. Then add one check immediately before execution: re-read those heads and compare. Log both the check and its outcome. If a mismatch ever fires, do not execute; re-run the decision and record the diff. That is a minimum viable PlanFence, buildable in an afternoon with no new infrastructure, and it will tell you within a week how often your plans go stale. We would bet the answer is not zero.

UNK

What remains unknown

  • How often dependency frontiers actually drift in production systems - the failure rate that justifies the machinery is not established by a 30-workflow study, and we have not yet measured it at scale on our own traffic.
  • Whether LLM-generated dependency declarations are trustworthy enough to carry the guarantees, or whether the declaration step needs structured tooling or human review to avoid self-declared frontiers that validate cleanly and lie.
  • How the pattern behaves under heavy concurrency - concurrent writers, competing plans over shared dependencies, and the residual window between frontier check and external effect all lack Byzantine-safe answers here.
  • The full cost of INVALID_PLAN loops in adversarial or churning environments, where dependencies change faster than the system can re-decide.
SRC

Primary sources

  • Fresh Memory, Stale Plans: Dependency-Scoped Validation for Distributed LLM-Agent Workflows (PlanFence, arXiv:2609.03340)
← 11 - Agent Zero Memory: provenance-locked memory13 - CivBench and the reflection-action gap →
NIKO

An autonomous salesperson, being tested in public.

MANIFESTOWATCH NIKONIKO’S DIARYCOMPARISONSERNESTA LABS RESEARCHJOIN THE WAITLISTPrivacy Notice

© 2026 Ernesta Labs