GoodJob's `.discarded` scope is defined as `finished.where.not(error: nil)`,
which matches any finished job with an error — including jobs with
`error_event: :retried` that already have a pending retry scheduled.
On every restart, the initializer was finding these already-retried jobs
and calling `retry_job` again. Thankfully good_job has us covered and
prevent a new retry job from being queued. This is visible with
`ActionForStateMismatchError` or `PG::UniqueViolation` errors on each
boot. Not harmful, but far from ideal.
Symptoms visible in the logs on every restart:
Failed to enqueue job for retry SomeJob (job id: b03926e2-...):
PG::UniqueViolation: ERROR: duplicate key value violates unique
constraint "good_jobs_pkey"
DETAIL: Key (id)=(a798492e-...) already exists.
Exclude jobs with `error_event: :retried` so only truly stuck jobs
(unhandled, retry_stopped, discarded) are re-queued.
We have a built-in bruteforce protection for built-in users. When users
are being created from LDAP on-the-fly, these limits cannot apply, as we
do not have a user object yet.
Instead, we can provide a more generous throttler to block attempts
* Add footer component for widget box
* Add footer component to the widget box as a slot
* Change projects widget to show the favorite projects
* Fix failing test
* Change the subitems widget
* Change the costs and budgets widgets
* Change the meeting widget
* Change the WPs widget in version
* Change memebers widget in project overview
* Change the favorite projects widget in my page
# Conflicts:
# frontend/src/app/shared/components/grids/widgets/project-favorites/widget-project-favorites.component.ts
* Add the widget box to the lookbook
* Add footer for members widget in dashboard
* Fix members widget capability check
* Add feature spec for favorites projects in my page
* Remove committed demo project gitlink
* Remove temporary body variables from the costs and budgets widget templates
* Remove the scroll for favorites widget
* Remove scrollbar for members and favorite projects widgets
* Change projects block to favorite projects
* Refine feature specs
* Fix the widget footer styles globally
* Rename the component name from project favorites to favorite projects
* Rename the test selector for project name
* Move widget content inside the body
* grid widgets stretch their content area so widget footers stay pinned to the bottom
* Ensure frontend-rendered grid widgets keep their turbo-loaded content in the widget flex layout so server-rendered footers stay pinned to the bottom
Removes deprecated `max_pages` and `client_max_limit` example options,
replaces with current `max_limit` equivalent. Bumps version comment
from 43.0.2 to 43.5.4.
- editing pages no longer needs the permission of viewing the history
- viewing past edits now is its own permission, still depending on
viewing the page itself
Registers the admin menu entry from OpenProject::Backlogs::Engine
and removes the duplicate initializer entry.
Adds an engine spec for the admin menu target.
Moves `BacklogsSettingsController` under the `Backlogs::` module as
`Backlogs::SettingsController`. Keeps the `admin_backlogs_settings`
route name so `redirect_to_backlogs_settings` callers keep working.
https://community.openproject.org/wp/73889
Make Backlogs use the sprint-based behavior unconditionally and
remove the old feature-flagged branches from controllers, routes,
representers, and supporting helpers.
Update the affected Backlogs specs and PDF export expectations to
match the permanent sprint model and keep list reordering stable when
moving work packages between backlog and sprint scopes.
https://community.openproject.org/wp/73798
https://community.openproject.org/wp/73986
The meta-tags gem truncates the page title to 70 characters by default,
which caused the browser title bar to show incomplete page titles.
Add initializer that disables that limit so the full title is always
displayed.