Repository navigation
Conversation
PR CI runs Lexbox in Development, where only the developer exception page handled errors, so the production exception handler (status mapping, ProblemDetails) was only exercised at release, against staging. - ErrorHandling:UseProductionExceptionHandler picks the handler; it defaults to today's behaviour (on everywhere except Development) and the gha cluster turns it on. - Turn analytics off explicitly in the gha cluster; local-dev turns it on. - Drop deployment/gha/app-config.yaml, which only repeated base's environment-name. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AM78WDo2i51h7253MJHFy9
|
No actionable comments were generated in the recent review.
|
PR CI never ran Lexbox's production exception handler. The CI cluster (
deployment/gha) builds on local-dev, so Lexbox runs as Development, andProgram.csonly addsUseExceptionHandleroutside Development. Every PR's integration tests therefore saw the developer exception page. The production path (theStatusCodeSelectorstatus mapping andCustomizeProblemDetails) was only exercised at release, when the integration suite runs against staging.ErrorHandling:UseProductionExceptionHandlernow decides whetherUseExceptionHandleris added. It defaults to!IsDevelopment(), so local dev, develop (Staging), staging and production behave exactly as before. In DevelopmentWebApplicationstill adds the developer exception page, but as the outermost middleware, so an explicitly added exception handler catches exceptions first.deployment/gha/lexbox.patch.yaml), so PR integration tests see production-shaped errors.deployment/gha/app-config.yaml. It only repeated base'senvironment-name: "Development"; local-dev's app-config patch doesn't change that key.Why not run CI as Staging? Without Development the throwaway cluster has no JWT secret (it comes from
appsettings.Development.json), no OAuth signing keys (local-dev deletes the cert-manager resources) and no plain-http OAuth. Those should stay tied to Development. Test-user seeding works in Staging too, and the testing endpoints depend on#if DEBUG, not the environment.#2884 (FwHeadless status mapping) is the first change whose production error path this covers.
Test plan
ProjectBlockingTests404/423 assertions still hold under the production handler once Report FwHeadless failures with one exception and one status mapping #2884 is inGenerated by Claude Code