Skip to content

feat: add ISupportDryRun interface (#259) - #260

Merged
Chris-Wolfgang merged 1 commit into
vNextfrom
feature/support-dry-run
Jun 28, 2026
Merged

feat: add ISupportDryRun interface (#259)#260
Chris-Wolfgang merged 1 commit into
vNextfrom
feature/support-dry-run

Conversation

@Chris-Wolfgang

Copy link
Copy Markdown
Owner

Summary

Implements #259 — adds the ISupportDryRun interface to Wolfgang.Etl.Abstractions.

public interface ISupportDryRun
{
    bool IsDryRun { get; set; }
}

Opt-in marker honoured by side-effect-bearing stages: when IsDryRun is true the
full pipeline runs (enumeration, skip/max counts, progress counters, timer callback,
logging) but the external side effect that mutates a destination/source is skipped.

Design decisions (recorded on #259)

  • Stage-agnostic, not loader-only — also covers extractors that mutate their source as they read (queue ack/commit, delete-on-receipt, move processed file). Pure transformers won't implement it.
  • No base-class implementation — the side effect lives inside the derived stage's worker method, which the base class cannot see or skip. Implementing on a base would advertise a guarantee it can't keep. Mirrors the existing IncrementCurrentItemCount philosophy.
  • Honour-system enforcement lives in a TestKit contract-test base (Add ISupportDryRun contract-test base (verify stages honor IsDryRun) ETL-Test-Kit#195, depends on this shipping).

Changes

  • ISupportDryRun.cs with full XML docs
  • PublicAPI.Unshipped.txt updated
  • CHANGELOG Unreleased / Added entry
  • Version 0.14.10.15.0 (additive public surface = MINOR)

Verification

  • dotnet build -c Release — 0 warnings, 0 errors
  • dotnet test -c Release -f net8.0250 passed (no behavioural code added; a bare marker interface has no executable lines)

Stack

Base: vNext. First PR of the 0.15.0 cycle.

Closes #259

🤖 Generated with Claude Code

Opt-in interface exposing `bool IsDryRun { get; set; }` for ETL stages
that support a dry run — the full pipeline is exercised but the external
side effect that mutates a destination or source is skipped.

Stage-agnostic and honour-system by design: only a stage that genuinely
gates its side effect on IsDryRun implements it. The base classes do not
implement it (the side effect lives inside the derived stage).

- ISupportDryRun.cs with full XML docs
- PublicAPI.Unshipped.txt updated
- CHANGELOG Unreleased/Added entry
- Version 0.14.1 -> 0.15.0 (additive surface, MINOR)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@Chris-Wolfgang
Chris-Wolfgang merged commit 097d54b into vNext Jun 28, 2026
1 check passed
@Chris-Wolfgang
Chris-Wolfgang deleted the feature/support-dry-run branch June 28, 2026 16:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant