Skip to content

feat(#333): exact ReadProjectionProgressAsync(ShardName) overload + JasperFx 2.29.0#334

Merged
jeremydmiller merged 1 commit into
mainfrom
feature/333-read-projection-progress
Jul 17, 2026
Merged

feat(#333): exact ReadProjectionProgressAsync(ShardName) overload + JasperFx 2.29.0#334
jeremydmiller merged 1 commit into
mainfrom
feature/333-read-projection-progress

Conversation

@jeremydmiller

Copy link
Copy Markdown
Member

Implements the exact per-cell progression read from JasperFx/jasperfx#529 (JasperFx.Events 2.29.0) on PolecatDatabase.

What

ReadProjectionProgressAsync(ShardName name, CancellationToken) — a straight WHERE name = @name.Identity lookup against pc_event_progression, no version/shard collapsing (the caller supplies the full ShardName). A blue/green deploy's versions, a sliced projection's shard keys, and per-tenant partitions each address their own row; ShardKey == "All" is the projection's global cell. heartbeat/agent_status are read only under EnableExtendedProgressionTracking (else null), mirroring the existing overload.

Purely additive — the existing (projectionName, tenantId) overload is untouched, no public API changes. Bumps JasperFx 2.28.0 → 2.29.0 (RuntimeCompiler stays 5.0.0).

Tests

projection_progression_tests: the exact overload reads the exact row, returns null for an unknown identity, and targets the exact version/tenant (not the newest). Compile-verified locally against 2.29.0; the integration run relies on CI's SQL Server (the local Azure-SQL-Edge/ARM container was too slow on the pre-login handshake).

Note for reviewers

Polecat's existing (projectionName, tenantId) overload treats projectionName as the shard identity minus tenant ("Orders:All"), whereas Marten's treats it as the bare projection name ("Orders", collapsing across versions). This PR does not change that overload. The new ShardName overload is identical across both stores and is the recommended unambiguous path — see the divergence note on jasperfx#435.

Closes #333.

🤖 Generated with Claude Code

…asperFx 2.29.0

jasperfx#529 (JasperFx.Events 2.29.0) adds an exact per-cell progression read alongside the
existing (projectionName, tenantId) overload. Implement it on PolecatDatabase as a straight
`WHERE name = @name.Identity` lookup against pc_event_progression — no version/shard collapsing,
so a blue/green deploy's versions, a sliced projection's shard keys, and per-tenant partitions
each address their own row. A ShardKey of "All" is the projection's global cell. heartbeat +
agent_status are read only under EnableExtendedProgressionTracking (else null), mirroring the
existing overload.

Purely additive — the existing (projectionName, tenantId) overload is untouched, no public API
changes. Bumps the JasperFx packages 2.28.0 -> 2.29.0 (RuntimeCompiler stays 5.0.0).

Adds projection_progression_tests coverage for the exact overload: reads the exact row, returns
null for an unknown identity, and targets the exact version/tenant (not the newest).

Closes #333.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XKKBPsFJ83jd2o4hyGJnj6
@jeremydmiller
jeremydmiller merged commit cc3732e into main Jul 17, 2026
7 checks passed
@jeremydmiller
jeremydmiller deleted the feature/333-read-projection-progress branch July 17, 2026 23:00
jeremydmiller added a commit that referenced this pull request Jul 17, 2026
Ships #333/#334: the exact ReadProjectionProgressAsync(ShardName) overload on IEventDatabase
(jasperfx#529), on JasperFx.Events 2.29.0.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XKKBPsFJ83jd2o4hyGJnj6
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 IEventDatabase.ReadProjectionProgressAsync overloads (jasperfx#435 / #529)

1 participant