Skip to content

Six small backlog items - #314

Merged
AhmadRAbuhussein merged 1 commit into
releases/r10.0from
hamza/fix/backlog-small-items
Sep 20, 2026
Merged

AhmadRAbuhussein merged 1 commit into
releases/r10.0from
hamza/fix/backlog-small-items

Conversation

@hamzahalq

@hamzahalq hamzahalq commented Sep 20, 2026 •

Copy link
Copy Markdown
Contributor

Backlog cleanup — six unrelated small fixes, one per issue.

HAM-71 Document store reads/writes now log; the key-building helper no longer does. An exchanges page went from ~87 log lines to 12.
HAM-72 Stage cards read "Mapping"/"Handling" while in flight instead of claiming "Mapped"/"Handled".
HAM-75 Retry policy gets the + New that work group already had. CreateRetryPolicyDialog moved to components/config/.
HAM-76 Create dialogs replace the ?new=1 history entry, so Back no longer reopens the form. Hit global values, retry policies and notifiers.
HAM-81 Work group pickers and the list page show the queue name, so two groups sharing a name (and a bus message name) can be told apart.
HAM-83 A run's exchange column caps at 5 and links the rest to Exchanges.

The one piece worth review

HAM-83 needed a new ReceiveAttemptId search filter. Linking with ?ids=a,b,c meant a 1,433-character URL for 43 exchanges, and would have broken outright on a large run.

XchangeFilters.ResolveReceiveAttemptFilterAsync reads the run and rewrites the filter into the existing Id/Contains one, so the result set is identical to the long URL it replaces. It resolves before the query rather than as a subquery because ReceiveAttempt.ExchangeIds is persisted as a separator-delimited string, not an array, and the solution ships on three DB providers. A ReceiveAttemptId column on the exchange table was the alternative and would have needed a migration and backfill.

Called from both Xchanges/Search and BulkRetryPlanner.SelectionQuery (now async), so a "select all matching" over a run acts on exactly the rows the list showed. A missing run and a run that created nothing both refuse rather than silently widening to every exchange.

Tests

  • ReceiveAttemptFilterTests (3, new) — passing
  • journeyStages.test.ts (5, new) — covers the Processing case local data can't produce
  • ClientApp: 349 unit tests passing, build and lint clean

Integration suite — do not merge on my word yet

143 of 449 failed locally. They are concentrated in areas this branch does not touch — the database adapters (MySql, Oracle, SqlServer, PostgreSql), the bus gateways (Rabbit, SQS, external), resident/serverless adapters, and BusProviderSupervisorTests, which never brings an adapter up and burns a 45s timeout per test.

Two of them are confirmed pre-existing: run on a clean worktree of origin/releases/r10.0 with none of this branch's changes, A_superseded_lease_stops_the_adapter_before_anything_else and Reconciling_starts_the_adapter_for_an_active_data_source fail identically — same assertions, same line numbers, same timings.

The shape of the list strongly suggests a local environment problem rather than a regression, but I have not yet proven that for the other 141. A full run against the base branch is in progress; I will post the comparison here before this is merged.

HAM-71 log the document store reads and writes, not the key building
HAM-72 name a pipeline stage for its state, not always in the past tense
HAM-75 offer "+ New" for a retry policy where work group already does
HAM-76 stop Back reopening a create form that was just submitted
HAM-81 show a work group's queue, so two of the same name differ
HAM-83 cap a run's exchange column and link the rest to Exchanges,
       via a new ReceiveAttemptId search filter
@coderabbitai

coderabbitai Bot commented Sep 20, 2026 •

Copy link
Copy Markdown

Review Change StackReview Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository: simplify9/coderabbit/.coderabbit.yaml

Review profile: ASSERTIVE

Plan: Advanced

Run ID: 121858b1-4979-44b7-84c9-98a6ab18c9a4

📥 Commits

Reviewing files that changed from the base of the PR and between d6fe573 and ddcba23.

📒 Files selected for processing (19)
  • SW.Bitween.Api/Resources/Xchanges/BulkRetryPlanner.cs
  • SW.Bitween.Api/Resources/Xchanges/Search.cs
  • SW.Bitween.Api/Resources/Xchanges/XchangeFilters.cs
  • SW.Bitween.Api/Services/XchangeService.cs
  • SW.Bitween.IntegrationTests/Tests/ReceiveAttemptFilterTests.cs
  • SW.Bitween.Web/ClientApp/src/api/http/exchanges.ts
  • SW.Bitween.Web/ClientApp/src/api/types.ts
  • SW.Bitween.Web/ClientApp/src/components/config/RetryPolicyDialog.tsx
  • SW.Bitween.Web/ClientApp/src/lib/busMessageName.ts
  • SW.Bitween.Web/ClientApp/src/pages/bus-gateways/studio/Inspector.tsx
  • SW.Bitween.Web/ClientApp/src/pages/exchanges/ExchangesPage.tsx
  • SW.Bitween.Web/ClientApp/src/pages/exchanges/__tests__/journeyStages.test.ts
  • SW.Bitween.Web/ClientApp/src/pages/exchanges/shared.tsx
  • SW.Bitween.Web/ClientApp/src/pages/global-values/GlobalValueSetsPage.tsx
  • SW.Bitween.Web/ClientApp/src/pages/notifiers/NotifiersPage.tsx
  • SW.Bitween.Web/ClientApp/src/pages/retry-policies/RetryPoliciesPage.tsx
  • SW.Bitween.Web/ClientApp/src/pages/subscriptions/studio/LaneAndRetry.tsx
  • SW.Bitween.Web/ClientApp/src/pages/subscriptions/studio/ReceiveAttemptsPanel.tsx
  • SW.Bitween.Web/ClientApp/src/pages/work-groups/WorkGroupsPage.tsx

Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review.

📜 Recent review details
🔇 Additional comments (17)
SW.Bitween.Api/Services/XchangeService.cs (1)

397-412: LGTM!

Also applies to: 429-429, 434-434, 439-451

SW.Bitween.Web/ClientApp/src/pages/exchanges/shared.tsx (1)

39-49: LGTM!

Also applies to: 53-61, 64-76

SW.Bitween.Web/ClientApp/src/pages/exchanges/__tests__/journeyStages.test.ts (1)

1-65: LGTM!

SW.Bitween.Web/ClientApp/src/pages/subscriptions/studio/ReceiveAttemptsPanel.tsx (1)

4-4: LGTM!

Also applies to: 156-175, 186-197, 283-283

SW.Bitween.Web/ClientApp/src/pages/global-values/GlobalValueSetsPage.tsx (1)

28-30: LGTM!

SW.Bitween.Web/ClientApp/src/pages/notifiers/NotifiersPage.tsx (1)

26-28: LGTM!

SW.Bitween.Web/ClientApp/src/components/config/RetryPolicyDialog.tsx (1)

1-74: LGTM!

SW.Bitween.Web/ClientApp/src/pages/retry-policies/RetryPoliciesPage.tsx (1)

2-2: LGTM!

Also applies to: 7-7, 11-11, 123-123

SW.Bitween.Web/ClientApp/src/pages/subscriptions/studio/LaneAndRetry.tsx (1)

8-8: LGTM!

Also applies to: 10-10, 41-41, 49-49, 61-67, 102-120, 129-136

SW.Bitween.Web/ClientApp/src/lib/busMessageName.ts (1)

23-33: LGTM!

SW.Bitween.Web/ClientApp/src/pages/bus-gateways/studio/Inspector.tsx (1)

14-14: LGTM!

Also applies to: 285-291

SW.Bitween.Web/ClientApp/src/pages/work-groups/WorkGroupsPage.tsx (1)

15-15: LGTM!

Also applies to: 163-169

SW.Bitween.Api/Resources/Xchanges/XchangeFilters.cs (1)

69-69: 🎯 Functional Correctness

ValueStringArray initializes SearchyFilter.Value. The setter writes the shared backing field returned by Value, so this initializer does not cause a null dereference before the Contains branch.

SW.Bitween.Web/ClientApp/src/api/types.ts (1)

1129-1134: LGTM!

SW.Bitween.Web/ClientApp/src/api/http/exchanges.ts (1)

184-187: LGTM!

SW.Bitween.Web/ClientApp/src/pages/exchanges/ExchangesPage.tsx (1)

38-38: LGTM!

Also applies to: 46-46

SW.Bitween.IntegrationTests/Tests/ReceiveAttemptFilterTests.cs (1)

25-121: LGTM!


📝 Summary

Summary

  • Added server-side ReceiveAttemptId resolution for exchange search and bulk retry selection. Missing runs fail validation. Runs with no exchanges return no matches.
  • Added document-store error logging around reads and writes. Removed logging from key construction.
  • Updated journey-stage labels to use “Mapping” and “Handling” while processing.
  • Added inline retry-policy creation. Moved CreateRetryPolicyDialog to shared configuration components.
  • Replaced create-dialog history entries after successful creation for global values, retry policies, and notifiers.
  • Added work-group queue names to selectors and the work-group list.
  • Limited receive-attempt exchange links to five entries. Added a link to the Exchanges page for the remaining entries.

Risk: risk:medium

Security-sensitive areas touched

  • Document-store read and write error paths now log storage keys. Review log access and key sensitivity.
  • Exchange search and bulk retry filtering changed. Verify that ReceiveAttemptId cannot bypass existing authorization or selection constraints.

Test coverage impact

  • Added three receive-attempt filter integration tests.
  • Added five journey-stage tests.
  • Client tests, build, and lint passed.
  • Five pre-existing BusProviderSupervisorTests failures remained during integration testing.

Operational concerns

  • No database migration is indicated.
  • The filter resolution adds database reads before exchange queries and bulk retry selection.
  • Bulk retry and exchange search behavior should be monitored after deployment.
  • Rollback requires reverting the application changes. No data rollback is indicated.

Walkthrough

Changes

Receive-attempt filtering

Layer / File(s) Summary
Resolve receive-attempt filters
SW.Bitween.Api/Resources/Xchanges/*
The API resolves receive-attempt conditions to exchange ID filters and validates invalid or missing attempts for search and bulk retry queries.
Expose and validate receive-attempt searches
SW.Bitween.Web/ClientApp/src/api/*, SW.Bitween.Web/ClientApp/src/pages/exchanges/ExchangesPage.tsx, SW.Bitween.IntegrationTests/Tests/ReceiveAttemptFilterTests.cs
The client carries receive-attempt IDs through exchange URLs. Integration tests cover isolated, empty, and missing attempts.

File operation logging

Layer / File(s) Summary
Log file operation failures
SW.Bitween.Api/Services/XchangeService.cs
Cloud file reads and writes now log failures with the resolved key and rethrow exceptions. Key construction no longer logs informational messages.

Web configuration workflows

Layer / File(s) Summary
Create retry policies from configuration flows
SW.Bitween.Web/ClientApp/src/components/config/RetryPolicyDialog.tsx, SW.Bitween.Web/ClientApp/src/pages/retry-policies/RetryPoliciesPage.tsx, SW.Bitween.Web/ClientApp/src/pages/subscriptions/studio/LaneAndRetry.tsx
Retry-policy creation is shared and can run inline from the subscription form. The created policy is selected after creation.
Disambiguate work-group queues
SW.Bitween.Web/ClientApp/src/lib/busMessageName.ts, SW.Bitween.Web/ClientApp/src/pages/bus-gateways/studio/Inspector.tsx, SW.Bitween.Web/ClientApp/src/pages/subscriptions/studio/LaneAndRetry.tsx, SW.Bitween.Web/ClientApp/src/pages/work-groups/WorkGroupsPage.tsx
Queue names now combine work-group IDs with bus message names in selectors and the work-groups table.

Exchange presentation and navigation

Layer / File(s) Summary
Derive exchange journey labels
SW.Bitween.Web/ClientApp/src/pages/exchanges/shared.tsx, SW.Bitween.Web/ClientApp/src/pages/exchanges/__tests__/journeyStages.test.ts
Journey labels now reflect stage state. Tests cover processing, success, failure, skipped mapping, and bad responses.
Limit exchange links and replace creation history
SW.Bitween.Web/ClientApp/src/pages/subscriptions/studio/ReceiveAttemptsPanel.tsx, SW.Bitween.Web/ClientApp/src/pages/global-values/GlobalValueSetsPage.tsx, SW.Bitween.Web/ClientApp/src/pages/notifiers/NotifiersPage.tsx
Receive-attempt panels show five exchanges and link to the filtered list for additional exchanges. Creation navigation replaces the dialog history entry.

Priority: ⬇️ Low

Estimated code review effort: 4 (Complex) | ~45 minutes

Change: Bug fix

Suggested labels: database, risk:high

Suggested reviewers: mmalkhatib

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 36.67% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 30 functions across 19 files. Write docstrings for the functions missing them to satisfy the coverage threshold.
Title check ❓ Inconclusive The title identifies the work as six backlog items but does not describe any of the actual changes. Use a specific title such as "Add receive-attempt exchange filtering and complete backlog UI fixes".
✅ Passed checks (3 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description check ✅ Passed The description clearly relates to the changes and identifies all six backlog items, implementation details, and test results.
  • Fix all pre-merge checks with AI

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.

@AhmadRAbuhussein
AhmadRAbuhussein merged commit b660a96 into releases/r10.0 Sep 20, 2026
5 checks passed
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.

2 participants