# evm.execution_effect_summary

Exactly one row per execution, including invalid or zero-attempt executions. Counts include program-step attempts only; observation-call effects are excluded. Final dispositions include ancestor outcomes.

Canonical HTML: <https://determica.com/docs/tables/evm-execution-effect-summary>

- Kind: View
- Layer: execution_read_model
- Category: Simulation
- Tags: Program, Execution, Public, View

## Contract and lifecycle

**Grain:** Exactly one program-step-only effect summary per execution_id.

**Lifecycle:** run publishes this immutable row set atomically with its owning run. Statement failure or caller rollback publishes no durable prefix; direct DML is unsupported because it can corrupt the documented invariants.

**Status and NULLs:** Interpret nullable payloads only through their owning status fields. Defensive poisoned and engine_error outcomes mean the engine refused to claim a trustworthy normal result; broad view nullability also covers owner alternatives and left-joined evidence.

### Join guidance

- Join evm.executions on execution_id for candidate and run context.
- Use attempt_id to deduplicate physical facts expanded across contextual owners.
- For program owners use step_index; for observation-call owners use observation_index and observation_key.

### Effect semantics

- Access flags describe attempted EVM access, not committed state change.
- Effect facts retain attempted evidence and final committed, reverted, discarded, or poisoned disposition.
- execution_state_deltas contains committed checkpoint transitions only; observation-call effects are excluded from execution_effect_summary.

## Columns

### Identity and ownership

Contextual keys and reusable identities that establish row ownership.

- `execution_id` (UUID; nullable) — Contextual execution association identity; do not use it as reusable artifact identity.

### Status and disposition

Outcome vocabulary and NULL-controlling disposition fields.

- `summary_status` (VARCHAR; nullable) — complete when selected program facts are complete, otherwise incomplete.
- `fact_completeness` (VARCHAR; nullable) — Whether the selected fact relations are complete for the represented result.

### Effects

Attempted and final effect facts or aggregates.

- `program_attempt_count` (UBIGINT; nullable) — Distinct physical attempts owned by program steps; observation calls are excluded.
- `attempted_frame_count` (UBIGINT; nullable) — Number of program-attempt frames before final-disposition filtering.
- `committed_frame_count` (UBIGINT; nullable) — Number of frames with committed final disposition.
- `reverted_frame_count` (UBIGINT; nullable) — Number of frames with reverted final disposition.
- `discarded_frame_count` (UBIGINT; nullable) — Number of frames discarded by an ancestor outcome.
- `poisoned_frame_count` (UBIGINT; nullable) — Number of frames whose disposition is defensively poisoned.
- `attempted_log_count` (UBIGINT; nullable) — Number of program-attempt log facts before final-disposition filtering.
- `committed_log_count` (UBIGINT; nullable) — Number of log facts with committed final disposition.
- `reverted_log_count` (UBIGINT; nullable) — Number of log facts reverted by their frame outcome.
- `discarded_log_count` (UBIGINT; nullable) — Number of log facts discarded by an ancestor outcome.
- `poisoned_log_count` (UBIGINT; nullable) — Number of log facts whose disposition is defensively poisoned.
- `attempted_write_count` (UBIGINT; nullable) — Number of program-attempt state-write facts before disposition filtering.
- `committed_write_count` (UBIGINT; nullable) — Number of state-write facts with committed final disposition.
- `reverted_write_count` (UBIGINT; nullable) — Number of state-write facts reverted by their frame outcome.
- `discarded_write_count` (UBIGINT; nullable) — Number of state-write facts discarded by an ancestor outcome.
- `poisoned_write_count` (UBIGINT; nullable) — Number of state-write facts whose disposition is defensively poisoned.
- `attempted_create_count` (UBIGINT; nullable) — Number of CREATE or CREATE2 facts before final-disposition filtering.
- `committed_create_count` (UBIGINT; nullable) — Number of CREATE or CREATE2 facts with committed final disposition.
- `reverted_create_count` (UBIGINT; nullable) — Number of CREATE or CREATE2 facts reverted by their frame outcome.
- `discarded_create_count` (UBIGINT; nullable) — Number of CREATE or CREATE2 facts discarded by an ancestor outcome.
- `poisoned_create_count` (UBIGINT; nullable) — Number of CREATE or CREATE2 facts whose disposition is defensively poisoned.
- `attempted_selfdestruct_count` (UBIGINT; nullable) — Number of program-attempt SELFDESTRUCT facts before disposition filtering.
- `committed_selfdestruct_count` (UBIGINT; nullable) — Number of SELFDESTRUCT facts with committed final disposition.
- `reverted_selfdestruct_count` (UBIGINT; nullable) — Number of SELFDESTRUCT facts reverted by their frame outcome.
- `discarded_selfdestruct_count` (UBIGINT; nullable) — Number of SELFDESTRUCT facts discarded by an ancestor outcome.
- `poisoned_selfdestruct_count` (UBIGINT; nullable) — Number of SELFDESTRUCT facts whose disposition is defensively poisoned.

## Linked joins

- `execution_id` → [evm.executions](/docs/tables/evm-executions.md) (`execution_id`) — Contextual execution that exposes this public row.

## Related public objects

- [evm.executions](/docs/tables/evm-executions.md) — upstream

## Verified queries

### Confirm fixture coverage

Confirm that this object has rows owned by the stable seven-candidate public fixture.

```sql
SELECT 'evm.execution_effect_summary'::VARCHAR AS object_name, CASE WHEN count(*) > 0 THEN 'PASS' ELSE 'FAIL' END::VARCHAR AS status FROM evm."execution_effect_summary" o JOIN evm.executions e USING (execution_id) WHERE e.candidate_key IN ('complete-effects', 'later-revert', 'ordered-logs', 'create', 'selfdestruct', 'blockhash', 'transient-access');
```

### Check candidate ownership

Diagnose whether this object remains linked to at least one stable fixture candidate through public keys.

```sql
SELECT 'evm.execution_effect_summary'::VARCHAR AS object_name, CASE WHEN count(DISTINCT e.candidate_key) > 0 THEN 'PASS' ELSE 'FAIL' END::VARCHAR AS status FROM evm."execution_effect_summary" o JOIN evm.executions e USING (execution_id) WHERE e.candidate_key IN ('complete-effects', 'later-revert', 'ordered-logs', 'create', 'selfdestruct', 'blockhash', 'transient-access');
```
