Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
57 commits
Select commit Hold shift + click to select a range
fc6213b
feat: add message transport foundation
ejsmith Jun 25, 2026
754e366
feat: add transport-backed message queue
ejsmith Jun 25, 2026
36e8016
feat: add transport-backed pubsub
ejsmith Jun 25, 2026
1d78bf4
feat: add in-memory job runtime
ejsmith Jun 25, 2026
2bfb3d5
feat: add durable job scheduler
ejsmith Jun 25, 2026
6ef25db
refactor: use channels in in-memory transport
ejsmith Jun 25, 2026
9effb46
fix: route delays through job runtime
ejsmith Jun 27, 2026
8362933
feat: align messaging and job APIs
ejsmith Jun 27, 2026
8827af1
feat: centralize message routing
ejsmith Jun 27, 2026
2c0a362
feat: add messaging topology declarations
ejsmith Jun 27, 2026
6e9abde
fix: address messaging/jobs design-review feedback
ejsmith Jun 28, 2026
8eada6a
refactor: hoist shared MessageQueue/PubSub behavior into MessageClien…
ejsmith Jun 28, 2026
f4c38a8
fix: address messaging/jobs design-review feedback (round 2)
ejsmith Jun 28, 2026
a921f67
feat: core-owned retry/dead-letter, Reject settlement, and per-source…
ejsmith Jun 29, 2026
99d06e1
feat: address messaging/jobs review feedback (pub/sub addressing, mul…
ejsmith Jun 29, 2026
84298b7
feat: add AWS SQS/SNS transport and make the conformance harness cros…
ejsmith Jun 29, 2026
fa77483
Add Redis IJobRuntimeStore provider + cross-store conformance harness
ejsmith Jun 29, 2026
4911b28
Add Redis end-to-end integration tests: delayed-send fallback + CRON
ejsmith Jun 29, 2026
5e8eba9
Add Redis Streams message transport (at-least-once, ack/retry/dead-le…
ejsmith Jun 30, 2026
6bf54f8
Fix review P0 #1 (redelivery loop) + jobs runtime cluster
ejsmith Jun 30, 2026
6fae268
Fix review #6: auto-register the job runtime pump with the store
ejsmith Jun 30, 2026
eb1674c
Fix review P0 #2: centralize subscription addressing, unbreak AWS
ejsmith Jun 30, 2026
e20d2eb
Fix review #5 (send error model) + #7 (shared header codec)
ejsmith Jun 30, 2026
7f7ad57
Fix review #9/#16/#17/#22/#23: pull-loop, capability enforcement, misc
ejsmith Jun 30, 2026
1bb4b9e
Fix review #11/#12: no-silent-skip conformance harness + coverage
ejsmith Jun 30, 2026
5ec8f3a
Add opt-out for the auto-registered job runtime pump
ejsmith Jun 30, 2026
09418c9
Verification follow-ups: single job pump regardless of order; test ha…
ejsmith Jul 1, 2026
4f8e8c8
Add Foundatio.MessagingSample: scaled messaging + jobs demo
ejsmith Jul 1, 2026
c704c93
MessagingSample: richer CRON demo (Global vs PerNode scope + schedules)
ejsmith Jul 1, 2026
3934595
samples: drop legacy HostingSample; AppHost runs only the redesign sa…
ejsmith Jul 1, 2026
bdddc0a
Isolate legacy message bus into Foundatio.Messaging.Legacy namespace
ejsmith Jul 1, 2026
d3c5e72
Isolate legacy job types into Foundatio.Jobs.Legacy namespace
ejsmith Jul 1, 2026
4a289b5
Isolate legacy hosting job infra into Foundatio.Extensions.Hosting.Jo…
ejsmith Jul 1, 2026
9916753
Drop new->legacy doc reference from IJobWithExecutionContext
ejsmith Jul 1, 2026
471c5d0
Merge IJobWithExecutionContext into a single context-based IJob
ejsmith Jul 1, 2026
0f3c9fe
Declarative message handlers + fluent provider/CRON registration; idi…
ejsmith Jul 1, 2026
05132ea
Address review findings on the jobs/messaging API changes
ejsmith Jul 1, 2026
321ae96
One IMessageBus: the caller's verb decides delivery, handlers are top…
ejsmith Jul 1, 2026
adf1e3e
IMessageBus is the one messaging abstraction: IQueue and IPubSub are …
ejsmith Jul 1, 2026
8e500bb
Rename IReceivedMessage to IMessageContext
ejsmith Jul 2, 2026
38421c6
Remove pull receive from IMessageBus; harden the pull loop against sy…
ejsmith Jul 2, 2026
4c0726e
Failure-path conventions: DeadLetterOn, proven retry defaults, DLQ fo…
ejsmith Jul 2, 2026
81efb18
Address review findings on the failure-path conventions
ejsmith Jul 2, 2026
4838494
Add Foundatio.Testing: a messaging test harness
ejsmith Jul 2, 2026
65ae704
Address review findings on the messaging test harness
ejsmith Jul 2, 2026
93214d0
Fix CI: tolerate all-skipped runs in the env-gated integration test p…
ejsmith Jul 7, 2026
64414cb
Remove aspirational send options: DeduplicationId and PartitionKey
ejsmith Jul 9, 2026
59319e0
Role-aware transport capabilities; fix silent delay drop on AWS delay…
ejsmith Jul 9, 2026
e9e2c0a
One canonical DestinationAddress across the whole transport contract
ejsmith Jul 9, 2026
12baa62
Handler delivery intent: subscriptions declare Sent, Published, or Both
ejsmith Jul 9, 2026
c982247
Explicit topology modes: Ensure, Validate, or None
ejsmith Jul 9, 2026
60a52ba
Extract IScheduledDispatchStore from IJobRuntimeStore
ejsmith Jul 9, 2026
1e77cb3
Typed durable-job payloads: EnqueueAsync<TJob, TArgs>(args)
ejsmith Jul 9, 2026
a20cf37
Job execution scopes, bounded worker concurrency, decoupled pump
ejsmith Jul 9, 2026
beebbad
Supervised lease renewal/cancellation loops; shared-Key policies comp…
ejsmith Jul 10, 2026
9ec7adc
Rewrite the redesign guide and Foundatio skill for the final API
ejsmith Jul 10, 2026
1901c30
CI-feed package publishing is best-effort
ejsmith Jul 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
323 changes: 148 additions & 175 deletions .agents/skills/foundatio/SKILL.md

Large diffs are not rendered by default.

9 changes: 7 additions & 2 deletions .github/workflows/build-workflow.yml
Original file line number Diff line number Diff line change
Expand Up @@ -122,18 +122,23 @@ jobs:
- name: Publish CI Packages
if: github.event_name != 'pull_request' && github.actor != 'dependabot[bot]'
run: |
# CI-feed publishing is best-effort: a feed rejecting one package (e.g. GitHub Packages returns 403 when the
# package name is linked to a different repo) must not fail a build whose compile and tests passed. Each
# failure surfaces as a warning annotation instead. Release publishing to NuGet (below) stays strict.
for package in $(find . -name "*.nupkg" | grep -v "minver" | grep -v "/EmptyFiles/"); do

# GitHub
if [ -n "${{ secrets.GITHUB_TOKEN }}" ]; then
echo "${0##*/}": Pushing $package to GitHub...
dotnet nuget push $package --source https://nuget.pkg.github.com/${{ inputs.org }}/index.json --api-key ${{ secrets.GITHUB_TOKEN }} --skip-duplicate
dotnet nuget push $package --source https://nuget.pkg.github.com/${{ inputs.org }}/index.json --api-key ${{ secrets.GITHUB_TOKEN }} --skip-duplicate \
|| echo "::warning::Failed to push ${package##*/} to GitHub Packages; continuing"
fi

# Feedz (remove once GitHub supports anonymous access)
if [ -n "${{ secrets.FEEDZ_KEY }}" ]; then
echo "${0##*/}": Pushing $package to Feedz...
dotnet nuget push $package --source https://f.feedz.io/foundatio/foundatio/nuget --api-key ${{ secrets.FEEDZ_KEY }} --skip-duplicate
dotnet nuget push $package --source https://f.feedz.io/foundatio/foundatio/nuget --api-key ${{ secrets.FEEDZ_KEY }} --skip-duplicate \
|| echo "::warning::Failed to push ${package##*/} to Feedz; continuing"
fi

done
Expand Down
5 changes: 4 additions & 1 deletion Foundatio.All.slnx
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
<Solution>
<Folder Name="/Samples/">
<Project Path="samples/Foundatio.AppHost/Foundatio.AppHost.csproj" />
<Project Path="samples/Foundatio.HostingSample/Foundatio.HostingSample.csproj" />
<Project Path="../Foundatio.AzureServiceBus/samples/Foundatio.AzureServiceBus.Dequeue/Foundatio.AzureServiceBus.Dequeue.csproj" />
<Project Path="../Foundatio.AzureServiceBus/samples/Foundatio.AzureServiceBus.Enqueue/Foundatio.AzureServiceBus.Enqueue.csproj" />
<Project Path="../Foundatio.AzureServiceBus/samples/Foundatio.AzureServiceBus.Publish/Foundatio.AzureServiceBus.Publish.csproj" />
Expand All @@ -17,6 +16,9 @@
<Project Path="../Foundatio.Repositories/samples/Foundatio.SampleApp/Client/Foundatio.SampleApp.Client.csproj" />
<Project Path="../Foundatio.Repositories/samples/Foundatio.SampleApp/Server/Foundatio.SampleApp.Server.csproj" />
<Project Path="../Foundatio.Repositories/samples/Foundatio.SampleApp/Shared/Foundatio.SampleApp.Shared.csproj" />
<Project Path="samples/Foundatio.MessagingSample/Foundatio.MessagingSample.csproj" />
<Project Path="src/Foundatio.Aws/Foundatio.Aws.csproj" />
<Project Path="src/Foundatio.Redis/Foundatio.Redis.csproj" />
</Folder>
<Folder Name="/Solution Items/">
<File Path=".editorconfig" />
Expand Down Expand Up @@ -69,6 +71,7 @@
<Project Path="src/Foundatio.Extensions.Hosting/Foundatio.Extensions.Hosting.csproj" />
<Project Path="src/Foundatio.JsonNet/Foundatio.JsonNet.csproj" />
<Project Path="src/Foundatio.MessagePack/Foundatio.MessagePack.csproj" />
<Project Path="src/Foundatio.Testing/Foundatio.Testing.csproj" />
<Project Path="src/Foundatio.Utf8Json/Foundatio.Utf8Json.csproj" />
<Project Path="src/Foundatio.Xunit/Foundatio.Xunit.csproj" />
<Project Path="src/Foundatio.Xunit.v3/Foundatio.Xunit.v3.csproj" />
Expand Down
9 changes: 8 additions & 1 deletion Foundatio.slnx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Solution>
<Folder Name="/Samples/">
<Project Path="samples/Foundatio.AppHost/Foundatio.AppHost.csproj" />
<Project Path="samples/Foundatio.HostingSample/Foundatio.HostingSample.csproj" />
<Project Path="samples/Foundatio.MessagingSample/Foundatio.MessagingSample.csproj" />
</Folder>
<Folder Name="/Solution Items/">
<File Path=".editorconfig" />
Expand All @@ -13,8 +13,14 @@
<File Path="src/Directory.Build.props" />
<File Path="tests/Directory.Build.props" />
</Folder>
<Folder Name="/src/">
<Project Path="src/Foundatio.Aws/Foundatio.Aws.csproj" />
<Project Path="src/Foundatio.Redis/Foundatio.Redis.csproj" />
</Folder>
<Folder Name="/Tests/">
<Project Path="src/Foundatio.TestHarness/Foundatio.TestHarness.csproj" />
<Project Path="tests/Foundatio.Aws.Tests/Foundatio.Aws.Tests.csproj" />
<Project Path="tests/Foundatio.Redis.Tests/Foundatio.Redis.Tests.csproj" />
<Project Path="tests/Foundatio.Tests/Foundatio.Tests.csproj" />
</Folder>
<Folder Name="/Benchmarks/">
Expand All @@ -24,6 +30,7 @@
<Project Path="src/Foundatio.Extensions.Hosting/Foundatio.Extensions.Hosting.csproj" />
<Project Path="src/Foundatio.JsonNet/Foundatio.JsonNet.csproj" />
<Project Path="src/Foundatio.MessagePack/Foundatio.MessagePack.csproj" />
<Project Path="src/Foundatio.Testing/Foundatio.Testing.csproj" />
<Project Path="src/Foundatio.Utf8Json/Foundatio.Utf8Json.csproj" />
<Project Path="src/Foundatio.Xunit.v3/Foundatio.Xunit.v3.csproj" />
<Project Path="src/Foundatio.Xunit/Foundatio.Xunit.csproj" />
Expand Down
Loading
Loading