Skip to content

Arch Forum 2026-01-22

Participants: Backend devs, Andy, Kyle, Victor

Agenda

  • Remember runsettings
  • Log files when running locally
  • Platform: Logging updates
  • Platform: Migrate to Minority.Platform namespace
  • Platform: System.Text.Json investigation
  • Deadletter UI
  • If time: What about rules/skills/agents.md files?

Summary

Remember runsettings

Regression tests should use a .runsettings file to override the ASPNETCORE_ENVIRONMENT setting to Staging. See for example the MPay Regression test .runsettings.

  • Credit & Transactions regression tests do not use this file and should be fixed.

Log files when running locally

Logs are written to c:\temp\logs\{hostingEnvironment.ApplicationName}.log or {SpecialFolder.UserProfile}\temp\logs\{hostingEnvironment.ApplicationName}.log. This is useful when debugging tests.

Platform: Logging updates

The goal is to have our backend services only log to the console when run in AKS, and have a third party (fluentbit) collect the logs and forward to Elastic.

  • New config setting to enable/disable console logs. Example in be-configuration. (The CommonExclusionFilterExpr filter is used to exclude health checks from the logs.)
  • Console logs when not in development will use the same format as our Elastic logs (each log becomes one serialized JSON string).
  • Do not write to console with Console.X methods!

Platform: Migrate to Minority.Platform namespace

Today there's a bit of a mix of namespaces in use in the backend. It would be good to consolidate.

Background

Today we have:
- Minority.AreaName.* for each area
- Majority.Platform.* for "modern" platform nugets
- Rebtel.Core.Infrastructure.* for old platform nugets
- Bank.Platform.* for be-bank-platform nugets
- MoneyFlow.*, MoneyIn.* and MoneyOut.* for Rate, MoneyFlow Ach, Psp and Remittance

Our goal should be to have everything under Minority.*.

  • Minority.AreaName.* is already good
  • Majority.Platform.* should be Minority.Platform.*
  • Rebtel.Core.Infrastructure.* should be Minority.Platform.*
  • Bank.Platform.* should also be Minority.Platform.*
  • MoneyFlow.*, MoneyIn.* and MoneyOut.* should ideally migrate as well

Victor has started to work on this, with these changes already done:

  • Moved Bank.Platform.Authentication from be-bank-platform to be-platform, and renamed it to Minority.Platform.Authentication
  • Moved Bank.Platform.Authentication.Contract from be-bank-platform to be-platform, and renamed it to Minority.Platform.Authentication.Contract
  • Moved Minority.Core.Shared.Contract from be-bank-platform to be-platform
  • Moved Bank.Platform.Hosting.Api from be-bank-platform to be-platform, and renamed it to Minority.Platform.Hosting.Api
  • Moved Bank.Platform.ObsoleteEndpointMonitoring from be-bank-platform to be-platform, and renamed it to Minority.Platform.ObsoleteEndpointMonitoring
  • Moved Bank.Platform.Testing from be-bank-platform to be-platform and renamed to Minority.Platform.Testing
  • Moved Bank.Platform.Testing.Contract from be-bank-platform to be-platform and renamed to Minority.Platform.Testing.Contract
  • Removed Bank.Platform.Testing.DataGenerators from be-bank-platform and put its content (RandomIdGenerator in Majority.Platform.Testing.DataGenerators with matching namespace)

Platform: System.Text.Json investigation

Using STJ was the #3 item for improvement in the last Arch Forum.

Copilot did an investigation here.
Short summary of Copilot's investigation:

Should be possible to do. A time estimate is around 2-3 weeks with AI assistance:
- Custom converters: 3-4 days
- Code migration: 4-5 days
- Testing: 2-3 days
- Deployment: 1-2 weeks staged rollout

Victor's comment: Not impossible to do, but still not high priority given the estimated benefits are not that big.

Deadletter UI

Improved RabbitMQ message admin tool was the #1 area for improvement voted in the last arch forum.

Slack thread to collect everyone's thoughts here.

Summary:
1. Direct Queue Publishing
- Send message(s) directly to a specific queue (bypass exchange/routing)
- Support bulk send operations
- Better message templating (maybe pull structure from DW event dump instead of Kibana)
2. DLQ Management
- Inspect individual messages
- Edit message payload before requeue
- Filter/search messages in DLQ
- Selective actions: requeue, ack, or delete individual messages
- Bulk operations on filtered results
3. Safety Features
- Preview which consumers would receive a message before publishing
- Flag/warn about non-idempotent consumers
- Audit trail for operations

MVP:
- Browse DLQ messages with filtering by message type, date, and content
- View JSON (maybe edit, but no contract validation)
- Requeue to original queue
- Publish new message directly to specific queue or exchange
- Bulk select + action

Victor has started with an MVP in Hydra and showed a mock UI. The consensus was that a UI in Hydra is a good idea; many like a visual interface like a web page, and since this requires an API in Hydra, it will still be possible to script if needed.

What about rules/skills/agents.md files?

Only a few have custom AI agent files:

  • Global cursor rules applied everywhere
  • be-ach has committed cursor files

Additional comments:

  • We should not be afraid to commit AI agent files.
  • Many times it's quick and easy to generate an AGENTS.md file (or similar) at the start of a coding session, and since it's easy there's no need to commit it. This also ensures it's up-to-date.

be-devtools shell scripts

Rasmus has converted many of the PowerShell scripts into zsh scripts for easier use on Mac. They are committed into be-devtools.

A good comment was raised by Andy:
When it takes an agent 5 minutes to write a script, the important part becomes recognizing that you need something automated, not the script code itself.

(At the same time, it's always good to commit to keep it around, and be-devtools is fast and easy to commit to.)