Skip to content

Marten#4466: Unskip Bug_4441_force_catch_up_with_outbox#4482

Merged
jeremydmiller merged 1 commit into
masterfrom
fix/4466-unskip-bug-4441
May 19, 2026
Merged

Marten#4466: Unskip Bug_4441_force_catch_up_with_outbox#4482
jeremydmiller merged 1 commit into
masterfrom
fix/4466-unskip-bug-4441

Conversation

@jeremydmiller

Copy link
Copy Markdown
Member

Summary

Closes #4466.

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 (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 current alpha.13 pin. The per-event ApplyEventException wrapping is in JasperFxAggregationProjectionBase.cs's _buildAction (verified in the published assembly), but raw InvalidOperationException instances still surface through the AggregateException that AggregationRunner.BuildBatchAsync throws — GroupedProjectionExecution.buildBatchWithSkipping's OfType<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
  • Bug_4441 unskipped test alone passes 5/5 on both frameworks

🤖 Generated with Claude Code

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 jeremydmiller merged commit 7fbfed6 into master May 19, 2026
6 checks passed
@jeremydmiller jeremydmiller deleted the fix/4466-unskip-bug-4441 branch May 19, 2026 11:18
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>
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.

Unskip Bug_4441_force_catch_up_with_outbox once JasperFx.Events ships the daemon-internal cancellation fix

1 participant