# description
A single row in the execution history (`state_executions`). One record per action or audit invocation — regardless of whether the runner was CLI, Skill, or in-process.

# properties.extensionId.description
Id of the action or audit that ran (e.g. `skill-summarizer`, `validate-all`).

# properties.extensionVersion.description
Semver of the extension implementation at execution time.

# properties.nodeIds.description
Target `node.path` values. Empty for audits that evaluate the whole graph.

# properties.contentHash.description
Duplicate-prevention hash used at submit time: sha256(actionId + actionVersion + bodyHash + frontmatterHash + promptTemplateHash). Null for audits.

# properties.status.description
Terminal status. History never stores `queued` or `running` — those live in `state_jobs` until they reach a terminal state.

# properties.failureReason.description
Normalized reason when `status = failed` or `cancelled`. Null for `completed`.

# properties.exitCode.description
Subprocess exit code for CLI-runner executions. Null for in-process or Skill-runner executions.

# properties.runner.description
Which runner executed this job. Null for audits.

# properties.durationMs.description
Finished - started. Stored denormalized for query speed.

# properties.tokensIn.description
Input tokens reported by the runner. Null if not applicable or not reported.

# properties.reportPath.description
Path to the written report, relative to scope root. Null for actions that don't produce a report file.

# properties.jobId.description
Originating job id when applicable. Null for audits and in-process actions.