Repository navigation
docs(outbox): align outbox docs and diagram with the Wolverine 6 code - #228
Conversation
Several docs still described the outbox as it was before the Wolverine 5 -> 6
fix, and two said things that are now false. Found while auditing the
emeraldleaf.dev Evidence page, which deep-links into these files.
- performance-and-data-correctness.md: "What still needs attention" said there
are no integration tests and proposed three handler-signature fallbacks. The
tests exist (OrderSagaTests rollback test, PaymentRecoveryAtomicityTests) and
the fix was a fourth option, the method-injected IMessageContext. Rewritten as
a record of what was open and how it closed. Also fixed a dead anchor to a
removed "open issue: the outbox is broken" section.
- how-it-works.md: Step 5 and the handler sketch showed a cascading
HandlerResult return with "no bus.PublishAsync needed"; the Publishing
paragraph and the how-to table recommended bus.PublishAsync. All now show
what PlaceOrder.cs does: publish through the method-injected IMessageContext,
then SaveChangesAsync. The handler-location convention said
*.Application/Handlers/; it is {Service}/Features/.
- code-flows/orderservice.md: "There's no Inbox pattern today" predates #169.
Now describes the durable inbox and the first-VPS-deploy rejection it logged.
- CLAUDE.md: the outbox-in-non-handler rule asked for a test that asserts a row
in wolverine.outgoing_envelopes; the actual pattern (and the war story's
finding) is force-the-commit-to-fail-and-assert-no-dispatch.
- project-decisions.md 12.3: kept as written, with a superseded note pointing
at the RabbitMQ swap (#159); the file is deliberately tombstone-allowlisted
as a historical record.
- transactional-outbox.excalidraw/.svg: step 2 still showed
eventPublisher.PublishAsync -> bus.PublishAsync, the pre-6 path. Source
edited, SVG regenerated with rebuild-diagrams.sh.
IEventPublisher is intentionally not described as removed: it remains for
fire-and-forget re-publishes with no entity write to bind to, and its own
summary documents the enlistment caveat.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
Important
This repository does not receive automatic reviews because it has fewer than 10 stars. ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Pro Plus Run ID: Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
|
@coderabbitai review |
|
|
@coderabbitai review |
|
What
Doc-only. Six files still described the transactional outbox as it was before the Wolverine 5 → 6 fix; two of them said things that are now false. No code changes.
docs/performance-and-data-correctness.mdIMessageContext)docs/how-it-works.mdHandlerResultwith "nobus.PublishAsyncneeded"; Publishing paragraph and how-to table recommendedbus.PublishAsync; handlers "live in*.Application/Handlers/"PlaceOrder.cs:messageContext.PublishAsyncthenSaveChangesAsync;{Service}/Features/docs/code-flows/orderservice.mdDuplicateIncomingEnvelopeExceptionit loggedCLAUDE.mdwolverine.outgoing_envelopesdocs/project-decisions.md§12.3docs/transactional-outbox.{excalidraw,svg}eventPublisher.PublishAsync → bus.PublishAsyncmessageContext.PublishAsync → staged in the outbox, not sent; SVG regenerated viarebuild-diagrams.shWhy now
Found while auditing the emeraldleaf.dev Evidence page, which deep-links into these files as receipts. A reader following the first-night inbox-rejection receipt lands ten lines above "we don't have integration tests yet."
Deliberately not changed
IEventPublisheris still described as present. It remains for fire-and-forget re-publishes with no entity write to bind to (ProcessPayment.RepublishTerminalEventAsync), and its own summary documents the enlistment caveat.Checks run locally
check-tombstones.sh: clean🤖 Generated with Claude Code