Release 0.11.0 — Abstractions 0.18.1 adoption - #254
Merged
Conversation
0.10.1 is published to NuGet; make the ABI gate compare the next release against it rather than the now-superseded 0.10.0. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…ubles + contract base - FaultyExtractor/Loader/Transformer<T> gain SkipErrors(), HandleErrorsWith(policy), and CapturedErrors: an injected ThrowAt fault is routed through the base HandleItemError hook, counting the item as an error (CurrentErrorItemCount) and continuing on Skip, or re-throwing on Abort. No policy = fail-fast (unchanged). - New ErrorHandlingContractTests<TSut> + ErrorHandlingOutcome verify a stage's error-hook: Skip completes + counts the failure as an error kept distinct from the intentional-skip count; Abort re-throws and counts no error. - 39 tests (21 doubles + 18 contract, wired via the Faulty* doubles). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…antees Verifies a stage throws ObjectDisposedException after Dispose()/DisposeAsync() (0.17 use-after-dispose guard) and that double-dispose is a harmless no-op. Consumer self-reports via InvokeReportsObjectDisposedAsync (no SUT parameter, so no CA1062 in the override). Wired against TestExtractor/Loader/Transformer (15 tests), which inherit the guard from the Abstractions base. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
All six doubles' CreateProgressReport now echoes the base's StartedAt/Elapsed instrumentation into the Report, so ItemsPerSecond is computed for reported progress instead of the timing fields always being empty. No public API change. Adds DoubleReportTimingTests (TestExtractor as representative). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…18 error hook Adds two sample tests: Extract→Transform→Load wired with EtlPipeline.Create(). From().Through().To().RunAsync(), and a pipeline where a FaultyTransformer with SkipErrors() discards a bad item (counted as an error) while the run completes. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…sts (#248) Adds to ExtractorBaseContractTests, LoaderBaseContractTests, and TransformerBaseContractTests: CurrentItemCount/CurrentSkippedItemCount default-zero tests and a skip-count-reflects test, so every downstream library inherits skip-count coverage for free. +9 tests. Closes #248 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…al contract bases Adds README usage sections for SkipErrors()/HandleErrorsWith()/CapturedErrors on the Faulty* doubles, ErrorHandlingContractTests<TSut>, and DisposableStageContractTests<TSut>, plus Features-table rows. Docs only. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…ct-248 test(xunit): CurrentSkippedItemCount contract tests (#248)
The 0.10.0/0.10.1 release never moved these already-shipped entries out of Unshipped: TestLoader<T>.IsDryRun (core) and SupportsDryRunContractTests<TSut> (xunit). Promote them to Shipped so Unshipped holds only the unreleased 0.11 surface. No code change. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
… extractor doubles TestExtractor<T> and FaultyExtractor<T> now set TotalItemCount in CreateProgressReport when the source is a materialized ICollection<T>, so PercentComplete / EstimatedRemaining compute for reported progress. Enumerator- and factory-backed sources have no known total (TotalItemCount stays null). +2 tests. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…hipped chore: promote stranded 0.10.x public API to Shipped
feat: Report.TotalItemCount for collection-backed extractor doubles
docs(readme): 0.11 error hook + new contract bases
…contract tests - CurrentErrorItemCount_defaults_to_zero on all three base contract classes (the new 0.18 counter, parallel to the #248 skipped-count default-zero tests). - No-over-read contract tests (#49) on all three bases: a stage must stop pulling from its source once MaximumItemCount is reached (<= M+1 reads) or the run is cancelled, and a pre-cancelled token must read nothing. An internal PullCounter wraps the source. Extractors opt in via a new virtual CreateSutOverSource factory (no-op by default), wired for the TestExtractor doubles. - CHANGELOG: document the #248 counter tests and #49. +12 tests. Full multi-TFM build clean; 295 xunit tests pass on net10.0 and net48. Closes #49 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…ver-read test(xunit): CurrentErrorItemCount default + no-over-read (#49) contract tests
…gMethodException) The doubles surfaced Report.StartedAt/Elapsed/TotalItemCount via the object-initializer (init) form. On .NET 6/7 a consumer loads TestKit's netstandard2.0 assembly but resolves Abstractions' modern assembly at runtime, so the init-setter IsExternalInit modreq did not match -> MissingMethodException. Use the plain Report(int, DateTimeOffset?, TimeSpan, int?) constructor added in Abstractions 0.18.1, whose signature is identical across every TFM. Bump the Abstractions reference 0.18.0 -> 0.18.1. Verified: the previously-failing net6.0 tests pass against Abstractions 0.18.1. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…uctor (fixes net6/net7)
8 tasks
This was referenced Jul 29, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Release 0.11.0 (MINOR) — adopts the
Wolfgang.Etl.Abstractions0.18 error hook (built against 0.18.1) and closes the earlier-version contract-coverage gaps. New public API only; no breaking change. PackageValidation baseline stays 0.10.1.Highlights
0.18 — per-item error hook
FaultyExtractor<T>/FaultyLoader<T>/FaultyTransformer<T>gainSkipErrors(),HandleErrorsWith(policy),CapturedErrors— an injectedThrowAtfault routes through the baseHandleItemError(Skip → countsCurrentErrorItemCount, continues; Abort → rethrow; no policy → fail-fast, unchanged).ErrorHandlingContractTests<TSut>+ErrorHandlingOutcome— opt-in base verifying the hook.0.17 — disposability
DisposableStageContractTests<TSut>— verifiesObjectDisposedExceptionafterDispose()/DisposeAsync()and idempotent double-dispose.0.14 — progress timing
CreateProgressReport()surfacesStartedAt/Elapsed(→ItemsPerSecond); the extractor doubles setTotalItemCountfrom a knownICollection<T>source (→PercentComplete/EstimatedRemaining).0.16 — pipeline
EtlPipeline.Create().From().Through().To().RunAsync(), incl. aSkipErrors()error-hook pipeline.Contract-test completeness
CurrentItemCount/CurrentSkippedItemCount/CurrentErrorItemCountdefault-zero + skip-count-tracking tests on all three base classes (Add CurrentSkippedItemCount contract tests to TestKit.Xunit #248).MaximumItemCountis reached (≤ M+1 reads) or the run is cancelled; a pre-cancelled token reads nothing.PublicAPI.Unshipped→Shipped.Verification
Full multi-TFM Release build clean (net462→net10.0); all tests green on net10.0 and net48.
Closes #248
Closes #49