Skip to content

Fix #4686 — implement IEventStoreInstrumentation on EventGraph#4690

Merged
jeremydmiller merged 1 commit into
masterfrom
feature/4686-event-store-instrumentation
Jun 8, 2026
Merged

Fix #4686 — implement IEventStoreInstrumentation on EventGraph#4690
jeremydmiller merged 1 commit into
masterfrom
feature/4686-event-store-instrumentation

Conversation

@jeremydmiller

Copy link
Copy Markdown
Member

Closes #4686. Companion to jasperfx#424, which shipped IEventStoreInstrumentation in JasperFx.Events 2.9.0 as a storage-agnostic surface for CritterWatch's monitoring toggles (starting with ExtendedProgressionEnabled).

What ships

EventGraph now implements IEventStoreInstrumentation. Both names refer to the same underlying field:

Surface Use
EnableExtendedProgressionTracking Legacy Marten-specific name. Continues to work unchanged, no [Obsolete] warning.
ExtendedProgressionEnabled Storage-agnostic name on IEventStoreInstrumentation. The recommended surface for new code -- lets Wolverine.CritterWatch.Marten (and similar satellite packages) flip the toggle via IConfigureMarten without referencing Marten's concrete EventGraph.

No schema changes. The six progression columns (heartbeat, agent_status, pause_reason, running_on_node, warning_behind_threshold, critical_behind_threshold) already exist in mt_event_progression and the daemon already writes them. Only the API surface changes.

Tests

5 new tests in CoreTests.Events.EventGraph_IEventStoreInstrumentation pin the contract:

  • implements_event_store_instrumentation — the cast succeeds
  • default_is_disabled — both names start false
  • enabling_via_legacy_name_flows_to_interface_property
  • enabling_via_interface_flows_to_legacy_name
  • disabling_via_either_surface_unwinds_the_other

Full CoreTests pass (432/432, 1 unrelated skip) on net9.0.

Docs

docs/events/projections/async-daemon.md gets a new "Extended Progression Tracking" section that documents both the legacy property and the new interface, recommends the interface for new code, and notes that the legacy name keeps working.

🤖 Generated with Claude Code

Companion to JasperFx 2.9.0 / #424, which introduced
IEventStoreInstrumentation as a storage-agnostic surface for CritterWatch's
monitoring toggles (starting with ExtendedProgressionEnabled). Marten's
EventGraph already had the equivalent EnableExtendedProgressionTracking
toggle, but only as a Marten-specific concrete property.

EventGraph now implements IEventStoreInstrumentation. Both names refer to
the same underlying field:

  * EnableExtendedProgressionTracking { get => ExtendedProgressionEnabled; set => ... }
  * ExtendedProgressionEnabled { get; set; }  — the IEventStoreInstrumentation surface

Existing callers that set EnableExtendedProgressionTracking continue to work
unchanged — no [Obsolete] warning, just an alias. New code (including
Wolverine.CritterWatch.Marten via IConfigureMarten) is encouraged to use the
interface property so it can compile against JasperFx.Events without
referencing Marten's concrete EventGraph.

No schema changes — the six progression columns (heartbeat, agent_status,
pause_reason, running_on_node, warning_behind_threshold,
critical_behind_threshold) already exist in mt_event_progression and the
daemon already writes them. Only the API surface changes.

Five unit tests in CoreTests.Events.EventGraph_IEventStoreInstrumentation
pin the contract: implements the interface, defaults disabled, both names
flow to the same field in both directions, disabling via either surface
unwinds the other. Full CoreTests pass (432/432, 1 unrelated skip).

docs/events/projections/async-daemon.md gets a new "Extended Progression
Tracking" section that documents both the legacy property and the new
interface surface, with the recommendation to prefer the interface for new
code.

Closes #4686.

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.

Implement IEventStoreInstrumentation (companion to jasperfx#424)

1 participant