Skip to content

docs(outbox): align outbox docs and diagram with the Wolverine 6 code - #228

Merged
emeraldleaf merged 1 commit into
mainfrom
docs/align-outbox-docs-with-code
Aug 30, 2026
Merged

emeraldleaf merged 1 commit into
mainfrom
docs/align-outbox-docs-with-code

Conversation

@emeraldleaf

Copy link
Copy Markdown
Owner

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.

File Was Now
docs/performance-and-data-correctness.md "We don't have integration tests yet" + three proposed handler fallbacks; dead anchor to a removed open-issue section Record of what was open and how it closed (OrderSagaTests rollback test, PaymentRecoveryAtomicityTests, method-injected IMessageContext)
docs/how-it-works.md Step 5 showed a cascading HandlerResult with "no bus.PublishAsync needed"; Publishing paragraph and how-to table recommended bus.PublishAsync; handlers "live in *.Application/Handlers/" Matches PlaceOrder.cs: messageContext.PublishAsync then SaveChangesAsync; {Service}/Features/
docs/code-flows/orderservice.md "There's no Inbox pattern today" Durable inbox (#169) and the first-VPS-deploy DuplicateIncomingEnvelopeException it logged
CLAUDE.md Rule asked for a test asserting a row in wolverine.outgoing_envelopes Force-the-commit-to-fail-and-assert-no-dispatch, which is what the tests do and what the war story concluded
docs/project-decisions.md §12.3 Presents Azure Service Bus as the current transport Kept verbatim as the historical record, with a Superseded note pointing at #159
docs/transactional-outbox.{excalidraw,svg} Step 2 showed eventPublisher.PublishAsync → bus.PublishAsync messageContext.PublishAsync → staged in the outbox, not sent; SVG regenerated via rebuild-diagrams.sh

Why 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

IEventPublisher is 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
  • CLAUDE.md size budget: 333 lines
  • Every anchor introduced resolves to a heading; no dead anchors remain
  • Rebuilt SVG: new text fits its container (15 px / 21 px margins), no overlap

🤖 Generated with Claude Code

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>
@coderabbitai

coderabbitai Bot commented Aug 30, 2026

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 23296213-89ae-41a1-bf26-bc26e45e7241


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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@codecov

codecov Bot commented Aug 30, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@emeraldleaf
emeraldleaf merged commit 3ad2327 into main Aug 30, 2026
8 checks passed
@emeraldleaf

Copy link
Copy Markdown
Owner Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Aug 30, 2026 •

Copy link
Copy Markdown
⚠️ Action not completed

Pull request is closed.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@emeraldleaf

Copy link
Copy Markdown
Owner Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Aug 30, 2026 •

Copy link
Copy Markdown
⚠️ Action not completed

Pull request is closed.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

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.

1 participant