# Dependencies and partial reruns Each step declares a `ProcessStepDependencies` contract containing: - external `source_refs`; - `processing_reads`; and - `processing_writes`. Many contracts are derived from `ProcessStepDescriber.arguments` dependency roles. Steps override the contract only for relationships the schema cannot express. Wildcards are conservative fallbacks, not substitutes for dependencies that can be known exactly. ## Full execution A full run executes every graph node in topological order. Use it for the first run, after pipeline configuration changes, or whenever the changed input scope is uncertain. ## Selected execution The local runner can execute selected step identifiers against caller-supplied `ProcessingData`. The caller is responsible for providing valid prerequisites. This is mainly useful for testing and controlled interactive work. ## Partial execution The runtime service can reuse a previous result: 1. Identify steps that read a changed source or processing path. 2. Expand the dirty set to all downstream descendants. 3. Copy the previous `ProcessingData` snapshot. 4. Execute only the dirty subgraph. `auto` mode attempts this path and falls back to a full run when partial execution fails. A dry run previews the selected steps without mutating session state. Exact contracts matter: an undeclared read can incorrectly reuse stale data, while an overly broad wildcard discards valid reuse. Extension authors should assert all three dependency sets in focused tests.