Skip to content

feat(web): add error page#3261

Merged
dgdavid merged 8 commits intomasterfrom
errorboundary
Mar 10, 2026
Merged

feat(web): add error page#3261
dgdavid merged 8 commits intomasterfrom
errorboundary

Conversation

@dgdavid
Copy link
Copy Markdown
Contributor

@dgdavid dgdavid commented Mar 9, 2026

Problem

When Agama crashes due to an unexpected error, an ugly page with a cryptic error message is shown most of the time.

Solution

Render a more appealing ErrorPage with a better formatted error message, filtering out third-party references from the stack trace and pointing to the exact location where the error originated (or at least something more accurate than what was displayed until now).

Note about error location

The new ErrorPage introduces StackTracey as a dependency, which allows using withSources/withSourcesAsync to display the original source location instead of the compiled build location, by leveraging source maps.

The output is equivalent to using source-maps-cli as described at https://lists.opensuse.org/archives/list/yast-devel@lists.opensuse.org/thread/OHU6OJAMXTPD6SXXOGKC6Q2K6U7RBFDO/, though be aware the location might be approximate. Not entirely sure why, possibly because it is the original file without comment lines and other build optimizations. In any case, React.createElement line in the examples points exactly to the problem, at least in the manual testing done to validate these changes.

Note about the as-table dependency

This PR uses the .asTable() method, which pulls in the as-table dependency from the same author as StackTracey. Although as-table has not been updated in a long time, it only has one further dependency (also from the same author) and does not appear to be a problem. In any case, as documented in the code:

It can be dropped at any point if any problem is found, but for now it gives us better formatted error messages at almost no cost.

Tests

  • Added unit tests
  • Tested manually

Screenshots

Before After
Screenshot_2026-03-09_14-58-01 Screenshot_2026-03-09_19-34-25
Click to show/hide more screenshots

Waiting for error details

Screenshot_2026-03-09_19-34-32

A route error

localhost_8080_ (3)

A not standard Error

localhost_8080_ (5)

An error with only thirdParty frames

localhost_8080_ (6)

Follow-up

Among other crazy ideas improvements, maybe the download logs button could be added to such an error page if the server still alive. But out of the scope of this fast-track PR intended for both, making the error message more useful from the very beginning and provide a kind of nicer error page.

dgdavid and others added 4 commits March 9, 2026 15:47
With route and unexpected error handling. Uses StackTracey to display
source-mapped, first-party-only stack traces.
As "recommended" in the StackTracey README file.
@dgdavid dgdavid marked this pull request as ready for review March 9, 2026 19:43
@dgdavid dgdavid requested review from imobachgs and removed request for imobachgs March 9, 2026 19:47
@dgdavid dgdavid changed the title feat(ErrorBoundary): add error boundary feat(web): add error page Mar 9, 2026
- Extract ErrorTrace component to handle stack trace rendering and
  loading state for making code easier to read and maintain.
- Extract relevantTrace helper to encapsulate first-party frame
  filtering with fallback to full stack when all frames are third-party
- Use isError from radashi instead of instanceof Error
@dgdavid
Copy link
Copy Markdown
Contributor Author

dgdavid commented Mar 10, 2026

@jreidinger

PR updated. Please find the new screenshots attachments to see how these new changes looks now 😉 Note that when the trace is too long (normally because there is only thirdParty frames) the layout it is a bit ugly. Out of the scope of this PR to achieve better alignment, sorry.

@dgdavid dgdavid merged commit 43d5ba3 into master Mar 10, 2026
10 checks passed
@dgdavid dgdavid deleted the errorboundary branch March 10, 2026 10:13
@dgdavid
Copy link
Copy Markdown
Contributor Author

dgdavid commented Mar 17, 2026

Realized that it was in the backlog. For reference, https://trello.com/c/VsMKx0eX (protected link).

@imobachgs imobachgs mentioned this pull request Mar 17, 2026
imobachgs added a commit that referenced this pull request Mar 17, 2026
Prepare to release version 19.

* #1829
* #2508
* #2772
* #2818
* #2826
* #2848
* #2860
* #2863
* #2864
* #2866
* #2867
* #2869
* #2870
* #2871
* #2872
* #2873
* #2874
* #2875
* #2876
* #2877
* #2880
* #2881
* #2882
* #2884
* #2885
* #2886
* #2891
* #2892
* #2893
* #2894
* #2895
* #2896
* #2897
* #2898
* #2899
* #2900
* #2901
* #2902
* #2903
* #2904
* #2908
* #2909
* #2910
* #2912
* #2913
* #2914
* #2915
* #2916
* #2917
* #2918
* #2920
* #2921
* #2923
* #2924
* #2926
* #2928
* #2929
* #2930
* #2933
* #2934
* #2935
* #2936
* #2937
* #2938
* #2939
* #2942
* #2943
* #2944
* #2945
* #2946
* #2947
* #2948
* #2949
* #2950
* #2951
* #2952
* #2954
* #2955
* #2956
* #2957
* #2958
* #2959
* #2960
* #2961
* #2963
* #2964
* #2965
* #2967
* #2968
* #2969
* #2970
* #2971
* #2972
* #2974
* #2975
* #2977
* #2978
* #2980
* #2981
* #2982
* #2983
* #2984
* #2988
* #2989
* #2990
* #2991
* #2992
* #2993
* #2994
* #2995
* #2996
* #2997
* #2998
* #2999
* #3000
* #3001
* #3002
* #3004
* #3005
* #3006
* #3007
* #3008
* #3009
* #3011
* #3012
* #3013
* #3014
* #3015
* #3016
* #3018
* #3019
* #3020
* #3021
* #3022
* #3023
* #3024
* #3025
* #3026
* #3027
* #3028
* #3029
* #3030
* #3031
* #3033
* #3034
* #3035
* #3036
* #3037
* #3039
* #3040
* #3041
* #3042
* #3043
* #3044
* #3045
* #3046
* #3047
* #3048
* #3049
* #3050
* #3051
* #3052
* #3053
* #3054
* #3055
* #3056
* #3057
* #3058
* #3060
* #3061
* #3062
* #3063
* #3064
* #3065
* #3066
* #3067
* #3068
* #3069
* #3070
* #3071
* #3072
* #3073
* #3074
* #3075
* #3076
* #3077
* #3078
* #3079
* #3086
* #3087
* #3088
* #3089
* #3090
* #3091
* #3092
* #3093
* #3094
* #3095
* #3096
* #3097
* #3098
* #3099
* #3100
* #3101
* #3102
* #3103
* #3104
* #3105
* #3106
* #3107
* #3108
* #3109
* #3110
* #3112
* #3113
* #3114
* #3115
* #3116
* #3117
* #3118
* #3119
* #3120
* #3122
* #3123
* #3124
* #3127
* #3128
* #3129
* #3130
* #3131
* #3133
* #3134
* #3135
* #3136
* #3137
* #3138
* #3139
* #3140
* #3141
* #3142
* #3143
* #3144
* #3145
* #3146
* #3147
* #3148
* #3149
* #3150
* #3151
* #3152
* #3153
* #3154
* #3155
* #3157
* #3158
* #3159
* #3160
* #3161
* #3162
* #3163
* #3164
* #3165
* #3166
* #3167
* #3168
* #3169
* #3170
* #3174
* #3175
* #3176
* #3177
* #3178
* #3179
* #3181
* #3182
* #3184
* #3185
* #3186
* #3188
* #3189
* #3190
* #3191
* #3192
* #3194
* #3195
* #3196
* #3197
* #3198
* #3199
* #3200
* #3201
* #3202
* #3203
* #3205
* #3206
* #3208
* #3209
* #3210
* #3213
* #3214
* #3215
* #3216
* #3217
* #3218
* #3219
* #3220
* #3222
* #3223
* #3224
* #3225
* #3226
* #3227
* #3228
* #3229
* #3230
* #3231
* #3232
* #3233
* #3234
* #3235
* #3236
* #3237
* #3238
* #3239
* #3240
* #3241
* #3242
* #3243
* #3244
* #3246
* #3247
* #3248
* #3250
* #3251
* #3252
* #3253
* #3254
* #3255
* #3256
* #3257
* #3258
* #3259
* #3260
* #3261
* #3262
* #3263
* #3265
* #3266
* #3267
* #3268
* #3269
* #3270
* #3271
* #3272
* #3273
* #3274
* #3275
* #3276
* #3277
* #3278
* #3279
* #3280
* #3281
* #3282
* #3283
* #3284
* #3285
* #3286
* #3287
* #3288
* #3289
* #3290
* #3291
bmwiedemann pushed a commit to bmwiedemann/openSUSE that referenced this pull request Mar 18, 2026
https://build.opensuse.org/request/show/1340724
by user IGonzalezSosa + anag_factory
- Version 19

- Prevent bulk selection using stale data (gh#agama-project/agama#3289).

- Log actions failures (related to bsc#1259354).

- Change network web user interface to offer more control and
  interaction with connections (gh#agama-project/agama#3247).

- Prevent error when there is no zFCP config
  (gh#agama-project/agama#3287).

- Prevent error when displaying reused LVM VGs (related to
  gh#agama-project/agama#3210, jsc#PED-15104, bsc#1254718 and
  gh#agama-project/agama#3171).

- Sync system schema with the backend (related to the fix for
  bsc#1258486).

- Improve error page with filtered, source-mapped stack traces
  for better error reporting (gh#agama-project/agama#3261).
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