Marten#4466: Unskip Bug_4441_force_catch_up_with_outbox#4482
Merged
Conversation
JasperFx PR #285 ("Stop daemon-internal cancellations from leaking into CatchUpAsync") shipped in JasperFx.Events 2.0.0-alpha.11 and is consumed by Marten's current alpha.13 pin (#4475 Phase 2). The daemon-internal cancellation flake that motivated the re-skip in #4462/#4463 is gone — confirmed locally 5/5 on both net9.0 and net10.0. Test-only change. Closes #4466. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
jeremydmiller
added a commit
that referenced
this pull request
May 19, 2026
#4483) JasperFx PR #306 ("Wrap per-event in SG DetermineActionAsync overrides, closes #305") shipped in the new wave: - JasperFx 2.0.0-alpha.14 → 2.0.0-alpha.15 - JasperFx.Events 2.0.0-alpha.13 → 2.0.0-alpha.14 - JasperFx.Events.SourceGenerator 2.0.0-alpha.6 → 2.0.0-alpha.7 - JasperFx.RuntimeCompiler 5.0.0-alpha.2 → 5.0.0-alpha.3 - JasperFx.SourceGeneration 2.0.0-alpha.2 → 2.0.0-alpha.4 #305 was the regression I filed yesterday in #4482: PR #304's per-event ApplyEventException wrapping was correct inside JasperFxAggregationProjectionBase but the SG-emitted DetermineActionAsync overrides weren't covered, so raw InvalidOperationException still surfaced through the AggregateException AggregationRunner.BuildBatchAsync throws, and GroupedProjectionExecution.buildBatchWithSkipping's OfType<ApplyEventException>() filter emptied out. PR #306 wraps each per-event call inside the SG's DetermineActionAsync override emission, restoring the seam end-to-end. Verified locally with DISABLE_TEST_PARALLELIZATION=true (CI default): all 4 tests in rebuilds_with_serialization_or_poison_pill_events pass on both net9.0 and net10.0, including both Theory inline cases (*DEFAULT*, CustomTenant) of rebuild_the_projection_skip_failed_events. Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This was referenced May 19, 2026
Closed
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.
Summary
Closes #4466.
JasperFx PR #285 — "Stop daemon-internal cancellations from leaking into
CatchUpAsync" — shipped inJasperFx.Events 2.0.0-alpha.11and is consumed by Marten's currentalpha.13pin (landed in #4475 Phase 2). The daemon-internal cancellation flake that motivated the re-skip in #4462 / #4463 is gone.Removes the
Skip = "..."from the[Fact]attribute. No production code change.The companion second unskip from the chip —
rebuild_the_projection_skip_failed_events(#303 follow-up) — did not pass after unskipping despite PR #304 being in the currentalpha.13pin. The per-eventApplyEventExceptionwrapping is inJasperFxAggregationProjectionBase.cs's_buildAction(verified in the published assembly), but rawInvalidOperationExceptioninstances still surface through theAggregateExceptionthatAggregationRunner.BuildBatchAsyncthrows —GroupedProjectionExecution.buildBatchWithSkipping'sOfType<ApplyEventException>()filter empties out, no events get skipped, and the shard times out. Per chip rules (STOP and file upstream), keeping that test skipped and tracking via a JasperFx follow-up.Test plan
dotnet test src/EventSourcingTests/EventSourcingTests.csproj --filter "FullyQualifiedName~force_catch_up"— both tests in the file pass on net9.0 and net10.0🤖 Generated with Claude Code