Skip to content

audit: phase 1 round 03 quality assumptions#519

Closed
samtrion wants to merge 1 commit into
mainfrom
audit/phase1-r03-quality
Closed

audit: phase 1 round 03 quality assumptions#519
samtrion wants to merge 1 commit into
mainfrom
audit/phase1-r03-quality

Conversation

@samtrion
Copy link
Copy Markdown
Contributor

Summary

Round 03 of the Phase 1 NetEvolve.Pulse audit — 16 new falsifiable quality assumptions (Q33–Q48), zero overlap with Q01–Q32 from prior rounds.

Coverage pushes into new territory:

  • Outbox write path: EF SaveChangesAsync flushing mid-business-tx (Q33), fresh DI scope per Publish breaks atomicity (Q34), OutboxEventHandler open-generic double-dispatch (Q35), NullMessageTransport silent discard (Q36).
  • Naming / discovery: DefaultTopicNameResolver generic-arity collisions (Q37), EventType column length not pre-validated (Q48).
  • Retry math: ComputeNextRetryAt produces past timestamps for negative MaxRetryDelay (Q38).
  • Transport semantics: Default IMessageTransport.SendBatchAsync non-atomic + processor treats failure as all-failed → duplicate delivery (Q39).
  • Serialization / tracing: STJ polymorphic payloads lost on round-trip (Q40); no W3C traceparent propagation across outbox (Q41).
  • Idempotency: No 500-char key validation → handler runs, store fails, retry duplicates (Q42).
  • Source generator: Closed generics emitted without checking generic constraints → CS0311 at downstream compile (Q43).
  • DI extension hygiene: AddEntityFrameworkOutbox<TContext> last-wins (Q44).
  • Concurrency: EF outbox fetch lacks FOR UPDATE SKIP LOCKED (Q45).
  • AspNetCore: MapCommand/MapQuery don't differentiate client-abort from server error (Q46).
  • Dispatcher inconsistency: RateLimitedEventDispatcher swallows post-cancel handler exceptions while PrioritizedEventDispatcher doesn't (Q47).

Each assumption includes file:line evidence, why-it-matters context, and a falsifiable test idea. Read-only audit; no fixes proposed.

Test plan

  • Validate Q33 by tracking entity, publishing event, asserting premature flush.
  • Validate Q34 by comparing DbContext identity between user scope and outbox scope.
  • Validate Q39 by injecting a transport that succeeds 2 of 3 and observing retry attempts.
  • Validate Q41 with ActivityListener capturing publisher vs processor activity parent IDs.
  • Validate Q45 by running two EntityFrameworkOutboxRepository instances concurrently and asserting overlapping fetch sets.
  • Validate Q44 by registering two TContexts and asserting only the last one is wired.

Branch: audit/phase1-r03-quality
Report: audit/assumptions/round-03-quality.md

Add Q33-Q48 documenting 16 new falsifiable quality assumptions
covering: outbox + EF SaveChangesAsync atomicity, scope mismatch in
PublishAsync, OutboxEventHandler double-dispatch, NullMessageTransport
silent discard, DefaultTopicNameResolver collisions, ComputeNextRetryAt
negative MaxRetryDelay loop, default SendBatchAsync non-atomic
double-delivery, STJ polymorphism gap, missing W3C traceparent on
outbox boundary, idempotency key length validation, source generator
constraint check gap, AddEntityFrameworkOutbox last-wins, EF outbox
fetch lacks row locks, MapCommand/MapQuery client-cancel handling,
RateLimited vs Prioritized dispatcher exception inconsistency, and
EventType column length validation.
@samtrion samtrion requested a review from a team as a code owner May 26, 2026 08:59
@samtrion samtrion requested a review from Spacemonkay May 26, 2026 08:59
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 26, 2026

Important

Review skipped

Auto reviews are limited based on label configuration.

🏷️ Required labels (at least one) (1)
  • state:ready for merge

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 9363bc78-8f70-4f01-a81f-59eb8edb22e2

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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 and usage tips.

@samtrion samtrion closed this May 26, 2026
@samtrion samtrion deleted the audit/phase1-r03-quality branch May 26, 2026 09:13
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