---
title: "Effect Discipline · concept · Agentic Atlas"
description: "Effect Discipline: which recovery moves an agent run's side effects still allow: discard, retry, or compensate."
canonical: "https://agentic-atlas.dev/nodes/effect-discipline"
last-updated: "2026-09-23"
---

1. [Agentic Atlas](https://agentic-atlas.dev/)
2. [Patterns in the Agentic Atlas](https://agentic-atlas.dev/atlas)
3. [Foundations](https://agentic-atlas.dev/nodes/foundations)
4. Effect Discipline

Seen working in [The Unsent Thunderstorm](https://agentic-atlas.dev/nodes/unsent-thunderstorm).

1. concept
   # Effect Discipline
   **When is it safe to discard an agent’s result and retry?**
   Discarding a run is free when it is pure or isolated, and retrying is free when it is idempotent.
   Hook
   which recovery moves an agent run's side effects still allow: discard, retry, or compensate
   Laws & fences
   - An idempotent write inside an isolated sandbox is fully free, so both discard and retry stay legal.
   - Idempotence makes retry free but not discard, since the effect stays in the world.
   - An effect that is reversible at a cost must be compensated before the run is re-dispatched.
   - Irreversible effects allow no recovery afterward, so they need a confirmation before the effect happens.
   - The cost of compensating for an effect depends on how contained it is, not on its type.
   - Intended deliverables get no exemption and must stay discardable, because discarding a run discards its work.
   - Entries to a file that many runs append to should be validated before they land.
   When to reach
   - Reach for this before dispatching a run that might write files, call APIs, send messages, or commit.
   - Reach for this when many runs append to one shared file, such as a memory file or decision log.
   - Look elsewhere for storage mechanics like git or worktrees, which are only instances of a guarantee.
   Provenance
   [effect-discipline/model-and-claims](https://agentic-atlas.dev/nodes/effect-discipline#model-and-claims) · v1.0.11
   Addresses
   atlas_cards effect-discipline
2. [The Contract](https://agentic-atlas.dev/nodes/contract-documentation)
3. [The Contract Keystone](https://agentic-atlas.dev/nodes/the-contract-keystone)
4. [Foundations](https://agentic-atlas.dev/nodes/foundations)
5. [Statelessness](https://agentic-atlas.dev/nodes/statelessness)
6. [The Unsent Thunderstorm](https://agentic-atlas.dev/nodes/unsent-thunderstorm)
7. field notes
   - “effects reach the world only through a validated promotion step — sandbox-then-merge / describe-then-execute (plan-then-apply)”
   - “validate at the return seam; re-dispatch over repair; bounded autonomy — the contract keystone, applied”
   - “a contracted human decision seam (clarification / approval / escalation)”
   - “episodic skills with persisted, context-specific behavior — incl. the *free idempotent setup* optimization”
   - “accumulated memory, a **separate concern from config**”

+3 more unfold the map fold the map

The card, in place · its connections drawn edges from atlas_links effect-discipline

On this plate

[definition](https://agentic-atlas.dev/nodes/effect-discipline#definition) [why-it-matters-the-precondition-under-the-keystone](https://agentic-atlas.dev/nodes/effect-discipline#why-it-matters-the-precondition-under-the-keystone) [model-and-claims](https://agentic-atlas.dev/nodes/effect-discipline#model-and-claims) [scope-and-boundaries](https://agentic-atlas.dev/nodes/effect-discipline#scope-and-boundaries) [implications-the-consequence-map](https://agentic-atlas.dev/nodes/effect-discipline#implications-the-consequence-map) [evidence](https://agentic-atlas.dev/nodes/effect-discipline#evidence) [relationships](https://agentic-atlas.dev/nodes/effect-discipline#relationships) [lineage](https://agentic-atlas.dev/nodes/effect-discipline#lineage) [relationships-ledger](https://agentic-atlas.dev/nodes/effect-discipline#relationships-ledger)

Every section is addressable on its own. Read only the ground you need.

## Definition

[Permalink to Definition section](https://agentic-atlas.dev/nodes/effect-discipline#definition)

**Effect discipline** is the classification of every dispatch by **which recovery moves its effects leave legal**. Two things fix the reading: the guarantees you *build into* the dispatch, and — where an effect lands raw — what path back the world offers. The moves being licensed are discard, retry, and compensate; the classes below are the vocabulary for saying which of them a given dispatch still has.

## Why it matters — the precondition under the keystone

[Permalink to Why it matters — the precondition under the keystone section](https://agentic-atlas.dev/nodes/effect-discipline#why-it-matters-the-precondition-under-the-keystone)

Re-dispatch (*validate at the return seam; re-dispatch over repair; bounded autonomy — the contract keystone, applied*) treats discarding a bad run as free. That is only true if the run had **no external side effects**. If the dispatched actor wrote files, called an API, sent a message, or committed something before producing its off-spec return, the world already changed — you cannot discard the run, only the text it returned. The keystone's most novel claim silently requires a discipline of its own.

## Model and claims

[Permalink to Model and claims section](https://agentic-atlas.dev/nodes/effect-discipline#model-and-claims)

### The classes — properties that license moves

Classify every dispatch by **which recovery moves its effects leave legal**. The classes are **properties that license moves**:

**Engineered guarantees** — properties you *build into* the dispatch:

- **Pure / read-only** — the dispatch observes and reports. Discard is free; nothing landed. (An effectful *job* can still yield a pure *dispatch* — the describe-then-execute route of *effects reach the world only through a validated promotion step — sandbox-then-merge / describe-then-execute (plan-then-apply)*.)
- **Idempotent** — re-running converges to the same world state (provision-if-absent; the guard rides the load). **Retry** is free — note this protects the retry, not the discard: the effect stays in the world.
- **Isolated** — effects land in a staging surface and merge only after validation. **Discard** is free — the world never learns the run happened. Strategy node: *effects reach the world only through a validated promotion step — sandbox-then-merge / describe-then-execute (plan-then-apply)*.

The guarantees **compose**: an idempotent write inside an isolated sandbox is fully free — both discard and retry legal.

**What the world offers** — when an effect lands raw, with no engineered guarantee, the question becomes what path back exists:

- **Reversible-at-a-cost** — a compensating action exists: delete the stray file, revert the commit, send the correction. Stays on the **re-dispatch side**: discard is still legal, it just carries the compensation's price tag.
- **Irreversible** — no path back at all. The class that cannot be disciplined away; it gets a **[gate](https://agentic-atlas.dev/glossary/gate)** (*a contracted human decision seam (clarification / approval / escalation)*) *before* the effect, not validation after.

### The licensing table

| Property | Recovery move it licenses |
| --- | --- |
| Pure / read-only | Discard free — nothing landed |
| Idempotent | Retry free — the effect stays; discard doesn't erase |
| Isolated | Discard free — staged, never promoted |
| Reversible-at-a-cost | Compensate, then re-dispatch clean |
| Irreversible | None after the fact — confirm *before* (the gate) |

### The seam prices the discard

Reversible-at-a-cost is really **reversible at the [seam](https://agentic-atlas.dev/glossary/seam)**. The compensation's cost is not a property of the effect's *type* (file write vs. API call) but of **how contained its footprint is**. A part that fails to integrate does not force unwinding the whole world: repair the mount point, re-dispatch the part. Discard is not all-or-nothing — its unit is the seam. The chain back to the keystone: the [contract](https://agentic-atlas.dev/glossary/contract) defines the seam → the seam bounds the blast radius → the blast radius prices the discard. Effects that land *at* a contracted seam are cheaply compensable almost by construction.

### The discard law

**Discarding a run means discarding its work — including the declared deliverable.** If you throw away an agent, you throw away their work: you do not build on a foundation laid by a run you rejected. So *intended* effects (the artifact that was the whole point — the [config](https://agentic-atlas.dev/glossary/config), the release artifact, the [context envelope](https://agentic-atlas.dev/glossary/context-envelope)) get **no exemption** from the discipline: they must still be staged or overwritable so that throwing them away stays possible. Declaration at the seam tells you *where* the effect landed; the discipline keeps *walking away from it* legal. The economics underneath: the cost of repair usually exceeds the cost of production — unwinding-instead-of-discarding is a losing default, and "be tactical in how you dispatch" is the designer's lever.

### Shared accumulating state

The hard case: [state](https://agentic-atlas.dev/glossary/state) many runs append to (a memory file, a decision log). A discarded run's entry is interleaved with entries you keep; overwrite destroys others' work, and unwinding a common file is messy — this class drifts toward irreversible (version control is a compensator, not a solution). The discipline's answer is to move validation **before** the landing: a discardable dispatch proposes the entry; the validated side promotes it. Same shape as the isolated class, same shape as the gate — for shared state, effect-first-validate-later is simply the wrong order.

## Scope and boundaries

[Permalink to Scope and boundaries section](https://agentic-atlas.dev/nodes/effect-discipline#scope-and-boundaries)

The classes are **not a ladder** (there is no single ordering axis) and **not a partition** (a dispatch can hold several at once). They are read for the move they license, never for rank.

The model does not price the compensation, either. Reversible-at-a-cost is **one bucket; no finer gradations of cost inside it** — the only fine structure it carries is the seam's, not the effect type's.

Nor does the discipline claim every effect can be made recoverable. Irreversible is the class that cannot be disciplined away, which is why its answer is a confirmation placed *before* the effect rather than any move licensed after it.

And the jurisdiction is *classes, seams, and recovery moves* — not mechanics. Git, worktrees, and staging layouts are instances of a guarantee, not the guarantee; the strategy for achieving isolation is owned by *effects reach the world only through a validated promotion step — sandbox-then-merge / describe-then-execute (plan-then-apply)*.

## Implications — the consequence map

[Permalink to Implications — the consequence map section](https://agentic-atlas.dev/nodes/effect-discipline#implications-the-consequence-map)

Adopting the classes moves one decision earlier: **which recovery move you are counting on is picked before the dispatch, not after the return.** That is also where the discipline is cheap — you mostly need to know which move you're counting on *before* you dispatch, and the guarantee that move demands (staging, idempotence, a gate) has to be in place before the effect lands.

The trade: staging infrastructure and the discipline of classifying effects at all — in exchange for keeping discard-and-re-run legal, which is what makes probabilistic components cheap to recover.

## Evidence

[Permalink to Evidence section](https://agentic-atlas.dev/nodes/effect-discipline#evidence)

The classification was being applied before it was named. **Already used unnamed:** config-as-bootstrap's *free idempotent setup* (*episodic skills with persisted, context-specific behavior — incl. the *free idempotent setup* optimization*) is the idempotent class in disguise — a pattern that reached for the property, and drew its cheapness from it, with no word for what it had. The second checkable item is the mapping onto *effects reach the world only through a validated promotion step — sandbox-then-merge / describe-then-execute (plan-then-apply)*'s two routes *(class mapping ruled 2026-07-11)*: each engineered class names the route that produces it.

[The Unsent Thunderstorm](https://agentic-atlas.dev/nodes/unsent-thunderstorm) carries one invalid bulletin payload through all five classes. Its baseline and five single-decision shifts keep discard, retry, compensation, and a pre-effect gate distinct in an executable fixture; the revised explanation passed clarity review on 2026-08-07.

## Relationships

[Permalink to Relationships section](https://agentic-atlas.dev/nodes/effect-discipline#relationships)

- **Precondition of** [The Contract Keystone](https://agentic-atlas.dev/nodes/the-contract-keystone) (third premise: the contract makes checking possible, the asymmetry makes it affordable, effect discipline makes the recovery move legal) and of *validate at the return seam; re-dispatch over repair; bounded autonomy — the contract keystone, applied*.
- **Operationalized by** *effects reach the world only through a validated promotion step — sandbox-then-merge / describe-then-execute (plan-then-apply)* — one strategy, two routes *(class mapping ruled 2026-07-11)*: sandbox-then-merge engineers the isolated class; describe-then-execute engineers the pure class for an effectful job.
- The irreversible class is what the **human-in-the-loop gate** (*a contracted human decision seam (clarification / approval / escalation)*) guards; the plan leg of staged-effects is what the gate inspects.
- **Durable state** (*accumulated memory, a **separate concern from config***): a state file is a *declared* deliverable — and per the discard law it still owes the discipline; the shared-accumulating-state rule above is the interaction.
- Supplies the **cost-of-error** input to the contract census's verification-weight reading ([The Contract](https://agentic-atlas.dev/nodes/contract-documentation)).

## Lineage

[Permalink to Lineage section](https://agentic-atlas.dev/nodes/effect-discipline#lineage)

Idempotence and transaction classification, with the Saga (Garcia-Molina & Salem, 1987) behind "compensate": an effect reversible only at a cost is a compensating transaction, not a rollback.

The relationships ledger

Evidence-bearing references

## Relationships

Every connection keeps the section where it was found. The map above orients; this ledger carries the evidence.

### Outbound references 14

1. undisclosed · occurrence 1
   Undisclosed relationship
   validate at the return seam; re-dispatch over repair; bounded autonomy — the contract keystone, applied
   Evidence: [Why it matters](https://agentic-atlas.dev/nodes/effect-discipline#why-it-matters-the-precondition-under-the-keystone) · occurrence 1
2. undisclosed · occurrence 1
   Undisclosed relationship
   effects reach the world only through a validated promotion step — sandbox-then-merge / describe-then-execute (plan-then-apply)
   Evidence: [Model and claims](https://agentic-atlas.dev/nodes/effect-discipline#model-and-claims) · occurrence 1
3. undisclosed · occurrence 2
   Undisclosed relationship
   effects reach the world only through a validated promotion step — sandbox-then-merge / describe-then-execute (plan-then-apply)
   Evidence: [Model and claims](https://agentic-atlas.dev/nodes/effect-discipline#model-and-claims) · occurrence 2
4. undisclosed · occurrence 3
   Undisclosed relationship
   a contracted human decision seam (clarification / approval / escalation)
   Evidence: [Model and claims](https://agentic-atlas.dev/nodes/effect-discipline#model-and-claims) · occurrence 3
5. undisclosed · occurrence 1
   Undisclosed relationship
   effects reach the world only through a validated promotion step — sandbox-then-merge / describe-then-execute (plan-then-apply)
   Evidence: [Scope and boundaries](https://agentic-atlas.dev/nodes/effect-discipline#scope-and-boundaries) · occurrence 1
6. undisclosed · occurrence 1
   Undisclosed relationship
   episodic skills with persisted, context-specific behavior — incl. the *free idempotent setup* optimization
   Evidence: [Evidence](https://agentic-atlas.dev/nodes/effect-discipline#evidence) · occurrence 1
7. undisclosed · occurrence 2
   Undisclosed relationship
   effects reach the world only through a validated promotion step — sandbox-then-merge / describe-then-execute (plan-then-apply)
   Evidence: [Evidence](https://agentic-atlas.dev/nodes/effect-discipline#evidence) · occurrence 2
8. in-slice · occurrence 3
   [The Unsent Thunderstorm](https://agentic-atlas.dev/nodes/unsent-thunderstorm)
   one rejected weather bulletin shows when to discard, retry, undo, or stop before acting
   Evidence: [Evidence](https://agentic-atlas.dev/nodes/effect-discipline#evidence) · occurrence 3
9. in-slice · occurrence 1
   [The Contract Keystone](https://agentic-atlas.dev/nodes/the-contract-keystone)
   how contracts, cheap checks, and safe discards together make agent handoffs safe
   Evidence: [Relationships](https://agentic-atlas.dev/nodes/effect-discipline#relationships) · occurrence 1
10. undisclosed · occurrence 2
    Undisclosed relationship
    validate at the return seam; re-dispatch over repair; bounded autonomy — the contract keystone, applied
    Evidence: [Relationships](https://agentic-atlas.dev/nodes/effect-discipline#relationships) · occurrence 2
11. undisclosed · occurrence 3
    Undisclosed relationship
    effects reach the world only through a validated promotion step — sandbox-then-merge / describe-then-execute (plan-then-apply)
    Evidence: [Relationships](https://agentic-atlas.dev/nodes/effect-discipline#relationships) · occurrence 3
12. undisclosed · occurrence 4
    Undisclosed relationship
    a contracted human decision seam (clarification / approval / escalation)
    Evidence: [Relationships](https://agentic-atlas.dev/nodes/effect-discipline#relationships) · occurrence 4
13. undisclosed · occurrence 5
    Undisclosed relationship
    accumulated memory, a **separate concern from config**
    Evidence: [Relationships](https://agentic-atlas.dev/nodes/effect-discipline#relationships) · occurrence 5
14. in-slice · occurrence 6
    [The Contract](https://agentic-atlas.dev/nodes/contract-documentation)
    the agreement on an artifact's shape and use whenever one component hands it to another
    Evidence: [Relationships](https://agentic-atlas.dev/nodes/effect-discipline#relationships) · occurrence 6

### Inbound references 7

1. in-slice · occurrence 3
   [The Contract](https://agentic-atlas.dev/nodes/contract-documentation#model-and-claims)
   which recovery moves an agent run's side effects still allow: discard, retry, or compensate
   Evidence: [Model and claims](https://agentic-atlas.dev/nodes/contract-documentation#model-and-claims) · occurrence 3
2. in-slice · occurrence 5
   [The Contract](https://agentic-atlas.dev/nodes/contract-documentation#relationships)
   which recovery moves an agent run's side effects still allow: discard, retry, or compensate
   Evidence: [Relationships](https://agentic-atlas.dev/nodes/contract-documentation#relationships) · occurrence 5
3. in-slice · occurrence 8
   [Foundations](https://agentic-atlas.dev/nodes/foundations#model-and-claims)
   which recovery moves an agent run's side effects still allow: discard, retry, or compensate
   Evidence: [Model and claims](https://agentic-atlas.dev/nodes/foundations#model-and-claims) · occurrence 8
4. in-slice · occurrence 6
   [Foundations](https://agentic-atlas.dev/nodes/foundations#relationships)
   which recovery moves an agent run's side effects still allow: discard, retry, or compensate
   Evidence: [Relationships](https://agentic-atlas.dev/nodes/foundations#relationships) · occurrence 6
5. in-slice · occurrence 6
   [Statelessness](https://agentic-atlas.dev/nodes/statelessness#implications-the-consequence-map)
   which recovery moves an agent run's side effects still allow: discard, retry, or compensate
   Evidence: [Implications](https://agentic-atlas.dev/nodes/statelessness#implications-the-consequence-map) · occurrence 6
6. in-slice · occurrence 1
   [Statelessness](https://agentic-atlas.dev/nodes/statelessness#relationships)
   which recovery moves an agent run's side effects still allow: discard, retry, or compensate
   Evidence: [Relationships](https://agentic-atlas.dev/nodes/statelessness#relationships) · occurrence 1
7. in-slice · occurrence 2
   [The Contract Keystone](https://agentic-atlas.dev/nodes/the-contract-keystone#model-and-claims-one-move-three-names)
   which recovery moves an agent run's side effects still allow: discard, retry, or compensate
   Evidence: [Model and claims](https://agentic-atlas.dev/nodes/the-contract-keystone#model-and-claims-one-move-three-names) · occurrence 2

[↑ back to the top](https://agentic-atlas.dev/nodes/effect-discipline#content) [← the survey](https://agentic-atlas.dev/atlas)

Node effect-discipline · corpus 78c0e17 · Catalog revision e0cb75881244b1a82193ca738b82a0d508dd62e822524ae82873ec79d51dbb61