Skip to content

May 8, 2026 — Backend

Release date: Friday, May 8, 2026

Summary

This week we delivered four backend improvements: building profile image support, a provider-based email foundation, welcome email sending after user creation, and audit context hardening for reliable actor attribution. We also updated tests and documentation to keep behavior consistent and easier to operate.

Shipped

  • Audit attribution hardening: Request context now initializes early and gets authenticated user identity at guard time, so audit rows for guarded routes resolve actorUserId consistently while preserving system/null attribution for non-user flows.
  • Email infrastructure: Configurable EmailService with SMTP and noop providers, runtime validation for send settings, docs/EMAIL.md, env/README hints, and a small local script to smoke-test sending.
  • User onboarding: After POST /users, a non-blocking welcome message (text + HTML, login URL from APP_LOGIN_URL, no-reply disclaimer); user creation still succeeds if SMTP errors.
  • Building profile image: Optional profile image on the building model (linked stored object), set and clear endpoints with type checks, response DTO fields, http/api.http examples, and audit logging for changes.

Engineering (commit recap)

Backend — week of May 4 – May 10, 2026

Window: 2026-05-01 < commit date < 2026-05-09 (git log --no-merges).

Summary

This release week includes four focused backend deliveries: building profile-image capabilities, provider-based email infrastructure, welcome-email trigger wiring in user creation, and audit-context improvements for correct authenticated actor attribution. Supporting test coverage and documentation were updated in the same cycle.

Themes

  • Stored-object image for buildings: New relation and migration, set/clear flows validating stored-object kind, controller specs, service specs, and audit action type for profile image updates.
  • Email as a capability: email.config, EmailModule, noop vs SMTP providers, test-email script, and documentation so environments can prove delivery before product features depend on it.
  • Welcome mail on user create: Uses APP_LOGIN_URL in content, logs or absorbs send failures so the API contract for user creation stays stable.
  • Audit context correctness: Request context mutation after authentication guard enables platform-level actor attribution without passing actor IDs at every call site.

Notable fixes or risks (if any)

  • Operators should align email env vars and choose noop where outbound mail is unwanted; misconfigured SMTP surfaces at validation or send time—see docs/EMAIL.md for setup and the smoke script.
  • Audit actor attribution now depends on guarded routes setting authenticated context; unguarded/system flows intentionally remain system-attributed (actorUserId = null).