{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":397624808,"defaultBranch":"main","name":"delayed","ownerLogin":"Betterment","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2021-08-18T14:13:01.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/871554?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1714525334.0","currentOid":""},"activityList":{"items":[{"before":"9a328c6e0518bbd141980653140379a12d6f8c98","after":"24b75f56c43e470ecdec2d3afdcc11bb21a6e2e3","ref":"refs/heads/main","pushedAt":"2024-04-29T17:16:29.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"smudge","name":"Nathan Griffith","path":"/smudge","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/83998?s=80&v=4"},"commit":{"message":"Allow configuring default priority value at midpoint of range (#39)\n\n### Summary\r\nThis PR Adds a configuration value (`.assign_at_midpoint`) to `Delayed::Priority` \r\n\r\nThe intent is to allow users to change the default priority of a job (i.e. when using a named priority) to be the middle of the configured priority ranges -- derived from the default or custom priority names -- as opposed to the starting value of the range.\r\n\r\nBy allowing a default value that is in the middle of the range, users will be able to bump the priority of some jobs such that they remain in their assigned queue but take priority over jobs of the same named priority.\r\n\r\n**Note**: since the last priority uses a range that is infinite, it's not possible to derive the midpoint. So, for now, I've defaulted to adding 5, since that matches our defaulted priority values.","shortMessageHtmlLink":"Allow configuring default priority value at midpoint of range (#39)"}},{"before":"77b97e9f540f0cce849de4c9665f9963d3a15c47","after":"9a328c6e0518bbd141980653140379a12d6f8c98","ref":"refs/heads/main","pushedAt":"2024-04-29T17:15:40.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"smudge","name":"Nathan Griffith","path":"/smudge","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/83998?s=80&v=4"},"commit":{"message":"Prepare for Rails 7.2 support (and disable enqueue_after_transaction_commit) (#40)\n\nThis anticipates the release of a new feature in Rails 7.2 introduced here: https://github.com/rails/rails/pull/51426\r\n\r\nIn Rails 7.2, ActiveJob will default `enqueue_after_transaction_commit` to `true`, and we would like to explicitly set this to `false` (retaining transactional enqueues, since `delayed` is DB-backed).\r\n\r\nThis PR goes a step further and also raises a `UnsafeEnqueueError` if, during enqueue, it encounters any job type that has overridden `enqueue_after_transaction_commit` to `true`. Worth noting that this exception may still be raised _after transaction commit_ (based on the way the lifecycle hooks are handled), so it is intended first and foremost as a guard during development & testing.\r\n\r\nAs part of this change I also:\r\n- Added a new Appraisal for the latest Rails main build on GitHub.\r\n- Re-generated the rubocop todo file. There are changes we can pull out & autocorrect, but we can do them in separate PRs.","shortMessageHtmlLink":"Prepare for Rails 7.2 support (and disable enqueue_after_transaction_…"}},{"before":"f2e5edc5d3f9481a9636d967d5cbe7ac191995eb","after":"77b97e9f540f0cce849de4c9665f9963d3a15c47","ref":"refs/heads/main","pushedAt":"2024-01-31T03:45:34.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"smudge","name":"Nathan Griffith","path":"/smudge","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/83998?s=80&v=4"},"commit":{"message":"Fix the lockfile / linter build step (#38)\n\nWe commit the lockfiles now, so version changes need a re-bundle. (I\r\nmissed this in the last PR.) Once this is in I can cut a new release.","shortMessageHtmlLink":"Fix the lockfile / linter build step (#38)"}},{"before":"869c08a893b97d8fad51b2cc5c08e8e151c74b1b","after":"f2e5edc5d3f9481a9636d967d5cbe7ac191995eb","ref":"refs/heads/main","pushedAt":"2024-01-31T03:38:12.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"smudge","name":"Nathan Griffith","path":"/smudge","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/83998?s=80&v=4"},"commit":{"message":"Optimize JobWrapper queueing ActiveJobs (#35)\n\nThis PR introduces a change to avoid calling `ActiveJob::Base#deserialize` during queueing the job whilst maintaining existing functionality.\r\n\r\nThe change is in `JobWrapper`, which previously only took in a hash of `job_data` and knew how to deserialize it into a job object so we can interrogate it for `queue_name` or `max_attempts`, etc. To avoid the roundtrip through serialization, we change `JobWrapper#initialize` to take in either the job object directly, or a hash as it did previously. When it's a hash (needed when running the job in the worker), it still deserializes it into a job object. When it's a job object just assign it to `@job` directly and continue.\r\n\r\nWe discovered this through having a second-order effect in `#deserialize` using it to trigger some logic as the job comes off the queue, but we were then seeing the logic run multiple times for one job execution. Tracked it back to the `JobClass.perform_later` calling `#deserialize` and being majorly confused why it was deserialising in the web process.\r\n\r\nThis will make enqueueing jobs faster too, because we don't need a roundtrip through `#serialize`, `#deserialize` as well as allocating less objects. In practice this is likely a small effect, but we get it for free avoiding the behaviour above.\r\n\r\nLooking at all the built-in adapters in ActiveJob, as well as good_job and solid_queue, they all avoid calling `job.serialize` during the enqueuing, even those adapters that support invoking methods on the Job class instance like delayed does.\r\n\r\nFrom one angle it's an optimization, from another angle it's a bugfix (:","shortMessageHtmlLink":"Optimize JobWrapper queueing ActiveJobs (#35)"}},{"before":"737f2fd4eaa149758bce30da299e07a09489c680","after":"869c08a893b97d8fad51b2cc5c08e8e151c74b1b","ref":"refs/heads/main","pushedAt":"2024-01-08T18:23:41.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"smudge","name":"Nathan Griffith","path":"/smudge","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/83998?s=80&v=4"},"commit":{"message":"Address dependabot alerts (#34)\n\nCommitting the lockfile triggered a bunch of dependabot errors, and I\r\nrealized that the versions committed were very out of date, so this\r\nupdates the lockfile with newer versions.\r\n\r\n/no-platform","shortMessageHtmlLink":"Address dependabot alerts (#34)"}},{"before":"9beeec5daa761f675d7d8fcc037675129b4e0b4a","after":null,"ref":"refs/heads/icaro/lockfiles_commit","pushedAt":"2024-01-08T17:58:07.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"smudge","name":"Nathan Griffith","path":"/smudge","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/83998?s=80&v=4"}},{"before":"342acb982a575ecfbd5693bddbb1feab96b56589","after":"737f2fd4eaa149758bce30da299e07a09489c680","ref":"refs/heads/main","pushedAt":"2024-01-08T17:58:06.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"smudge","name":"Nathan Griffith","path":"/smudge","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/83998?s=80&v=4"},"commit":{"message":"Add lockfile (#32)\n\n**Summary of changes:**\r\nCommit lockfile previously ignored (see\r\nhttps://bundler.io/guides/faq.html#using-gemfiles-inside-gems).\r\n\r\n/task https://app.asana.com/0/0/1206244989881229/f\r\n\r\n---------\r\n\r\nCo-authored-by: Irving Caro <112433591+betterment-coding-agent@users.noreply.github.com>","shortMessageHtmlLink":"Add lockfile (#32)"}},{"before":"520f83389e25bda0e9dedb50526a8907a26faee7","after":"9beeec5daa761f675d7d8fcc037675129b4e0b4a","ref":"refs/heads/icaro/lockfiles_commit","pushedAt":"2024-01-05T23:31:22.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"Irving-Betterment","name":"Irving Caro","path":"/Irving-Betterment","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/112433591?s=80&v=4"},"commit":{"message":"Remove previously committed appraisal lockfiles","shortMessageHtmlLink":"Remove previously committed appraisal lockfiles"}},{"before":"38d6ffcad2922099e7d27028267c9b6c29b33b0e","after":"520f83389e25bda0e9dedb50526a8907a26faee7","ref":"refs/heads/icaro/lockfiles_commit","pushedAt":"2024-01-05T23:07:52.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"Irving-Betterment","name":"Irving Caro","path":"/Irving-Betterment","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/112433591?s=80&v=4"},"commit":{"message":"Remove previously committed appraisal lockfiles","shortMessageHtmlLink":"Remove previously committed appraisal lockfiles"}},{"before":"9e4efb5d8665b69aaf3ecfe6875efdc3de8be70c","after":"38d6ffcad2922099e7d27028267c9b6c29b33b0e","ref":"refs/heads/icaro/lockfiles_commit","pushedAt":"2024-01-05T22:48:54.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"Irving-Betterment","name":"Irving Caro","path":"/Irving-Betterment","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/112433591?s=80&v=4"},"commit":{"message":"Add lockfiles","shortMessageHtmlLink":"Add lockfiles"}},{"before":"26b42748a89b6537e1f55906f1e298b7e5b738bd","after":"9e4efb5d8665b69aaf3ecfe6875efdc3de8be70c","ref":"refs/heads/icaro/lockfiles_commit","pushedAt":"2024-01-05T22:39:27.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"Irving-Betterment","name":"Irving Caro","path":"/Irving-Betterment","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/112433591?s=80&v=4"},"commit":{"message":"Add lockfiles","shortMessageHtmlLink":"Add lockfiles"}},{"before":"9c16b46f12ded76dc57222c7c6c2c2cecda1446c","after":"26b42748a89b6537e1f55906f1e298b7e5b738bd","ref":"refs/heads/icaro/lockfiles_commit","pushedAt":"2024-01-05T22:13:02.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"Irving-Betterment","name":"Irving Caro","path":"/Irving-Betterment","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/112433591?s=80&v=4"},"commit":{"message":"Add lockfiles","shortMessageHtmlLink":"Add lockfiles"}},{"before":"a01e7a9dd4b8cba0f86ff5d99a146d3263ea5dfb","after":"9c16b46f12ded76dc57222c7c6c2c2cecda1446c","ref":"refs/heads/icaro/lockfiles_commit","pushedAt":"2024-01-05T22:11:27.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"Irving-Betterment","name":"Irving Caro","path":"/Irving-Betterment","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/112433591?s=80&v=4"},"commit":{"message":"Add lockfiles","shortMessageHtmlLink":"Add lockfiles"}},{"before":"dd44af72a6a1ad45b32343ffc1138930a4b4fb07","after":"a01e7a9dd4b8cba0f86ff5d99a146d3263ea5dfb","ref":"refs/heads/icaro/lockfiles_commit","pushedAt":"2024-01-05T22:00:30.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"Irving-Betterment","name":"Irving Caro","path":"/Irving-Betterment","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/112433591?s=80&v=4"},"commit":{"message":"Add lockfiles","shortMessageHtmlLink":"Add lockfiles"}},{"before":"4a8285b35d934ba502845ed28d58111c3c667c3c","after":"dd44af72a6a1ad45b32343ffc1138930a4b4fb07","ref":"refs/heads/icaro/lockfiles_commit","pushedAt":"2024-01-05T21:59:43.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"Irving-Betterment","name":"Irving Caro","path":"/Irving-Betterment","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/112433591?s=80&v=4"},"commit":{"message":"Add lockfiles","shortMessageHtmlLink":"Add lockfiles"}},{"before":"a7ecf5c4504825a2468cc6a78fe2fef796e31477","after":"4a8285b35d934ba502845ed28d58111c3c667c3c","ref":"refs/heads/icaro/lockfiles_commit","pushedAt":"2024-01-05T21:40:51.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"Irving-Betterment","name":"Irving Caro","path":"/Irving-Betterment","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/112433591?s=80&v=4"},"commit":{"message":"Add lockfile(s)","shortMessageHtmlLink":"Add lockfile(s)"}},{"before":"97e5bde613b80b5726122972a591f71a5f47dd71","after":"a7ecf5c4504825a2468cc6a78fe2fef796e31477","ref":"refs/heads/icaro/lockfiles_commit","pushedAt":"2024-01-05T21:25:18.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"Irving-Betterment","name":"Irving Caro","path":"/Irving-Betterment","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/112433591?s=80&v=4"},"commit":{"message":"Add lockfile(s)","shortMessageHtmlLink":"Add lockfile(s)"}},{"before":"03edca9e2b95bfe0370b5a29c0b1e6c667f99578","after":"83860f86cd4559d247f23181ec6a069b75f54ff0","ref":"refs/heads/icaro/ruby-rails-eol-support-drop","pushedAt":"2024-01-04T21:46:51.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"Irving-Betterment","name":"Irving Caro","path":"/Irving-Betterment","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/112433591?s=80&v=4"},"commit":{"message":"Restore support Ruby 3 case where both positional and keyword arguments are present","shortMessageHtmlLink":"Restore support Ruby 3 case where both positional and keyword argumen…"}},{"before":"ca827c12633d8707b8f856112d63a6bbe3005207","after":"03edca9e2b95bfe0370b5a29c0b1e6c667f99578","ref":"refs/heads/icaro/ruby-rails-eol-support-drop","pushedAt":"2023-12-28T21:30:43.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"Irving-Betterment","name":"Irving Caro","path":"/Irving-Betterment","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/112433591?s=80&v=4"},"commit":{"message":"rubocop --only Performance/StringIdentifierArgument -a","shortMessageHtmlLink":"rubocop --only Performance/StringIdentifierArgument -a"}},{"before":"5e04c9c1d93b74e49d79ac24270b3703cc33b8f8","after":"ca827c12633d8707b8f856112d63a6bbe3005207","ref":"refs/heads/icaro/ruby-rails-eol-support-drop","pushedAt":"2023-12-28T21:26:29.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"Irving-Betterment","name":"Irving Caro","path":"/Irving-Betterment","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/112433591?s=80&v=4"},"commit":{"message":"Remove Ruby 2.7 guards","shortMessageHtmlLink":"Remove Ruby 2.7 guards"}},{"before":"b16a2edd0d4f14a94afc1feca43772fbba0ecdea","after":"5e04c9c1d93b74e49d79ac24270b3703cc33b8f8","ref":"refs/heads/icaro/ruby-rails-eol-support-drop","pushedAt":"2023-12-28T21:22:32.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"Irving-Betterment","name":"Irving Caro","path":"/Irving-Betterment","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/112433591?s=80&v=4"},"commit":{"message":"Remove Ruby 2.7 guards","shortMessageHtmlLink":"Remove Ruby 2.7 guards"}},{"before":"0c3d6592f3a62780b7dcf0d4403d2b99876d8fc7","after":"b16a2edd0d4f14a94afc1feca43772fbba0ecdea","ref":"refs/heads/icaro/ruby-rails-eol-support-drop","pushedAt":"2023-12-28T21:14:03.000Z","pushType":"push","commitsCount":3,"pusher":{"login":"Irving-Betterment","name":"Irving Caro","path":"/Irving-Betterment","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/112433591?s=80&v=4"},"commit":{"message":"rubocop --only Performance/StringIdentifierArgument -a","shortMessageHtmlLink":"rubocop --only Performance/StringIdentifierArgument -a"}},{"before":"a30aa1d72a63fe7e4960bee21e3f581bcc22ca3e","after":"0c3d6592f3a62780b7dcf0d4403d2b99876d8fc7","ref":"refs/heads/icaro/ruby-rails-eol-support-drop","pushedAt":"2023-12-28T21:09:35.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"Irving-Betterment","name":"Irving Caro","path":"/Irving-Betterment","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/112433591?s=80&v=4"},"commit":{"message":"Bump linter ruby version","shortMessageHtmlLink":"Bump linter ruby version"}},{"before":null,"after":"a30aa1d72a63fe7e4960bee21e3f581bcc22ca3e","ref":"refs/heads/icaro/ruby-rails-eol-support-drop","pushedAt":"2023-12-28T21:06:39.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"Irving-Betterment","name":"Irving Caro","path":"/Irving-Betterment","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/112433591?s=80&v=4"},"commit":{"message":"Drop EOL Ruby and Rails versions support","shortMessageHtmlLink":"Drop EOL Ruby and Rails versions support"}},{"before":"24ffa5adca565639c4593267be2606c108d78000","after":"97e5bde613b80b5726122972a591f71a5f47dd71","ref":"refs/heads/icaro/lockfiles_commit","pushedAt":"2023-12-27T22:54:05.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"Irving-Betterment","name":"Irving Caro","path":"/Irving-Betterment","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/112433591?s=80&v=4"},"commit":{"message":"Add lockfile(s)","shortMessageHtmlLink":"Add lockfile(s)"}},{"before":"a21bc8051835b10a05aafdbbc3a1da144fcdd1c6","after":"24ffa5adca565639c4593267be2606c108d78000","ref":"refs/heads/icaro/lockfiles_commit","pushedAt":"2023-12-27T22:35:01.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"Irving-Betterment","name":"Irving Caro","path":"/Irving-Betterment","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/112433591?s=80&v=4"},"commit":{"message":"Add lockfile(s)","shortMessageHtmlLink":"Add lockfile(s)"}},{"before":null,"after":"a21bc8051835b10a05aafdbbc3a1da144fcdd1c6","ref":"refs/heads/icaro/lockfiles_commit","pushedAt":"2023-12-27T22:33:05.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"Irving-Betterment","name":"Irving Caro","path":"/Irving-Betterment","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/112433591?s=80&v=4"},"commit":{"message":"Add lockfile(s)","shortMessageHtmlLink":"Add lockfile(s)"}},{"before":"429e20f0baddb1205d5ee7be7082e2a4afcd1f0e","after":"342acb982a575ecfbd5693bddbb1feab96b56589","ref":"refs/heads/main","pushedAt":"2023-10-19T18:26:00.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"smudge","name":"Nathan Griffith","path":"/smudge","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/83998?s=80&v=4"},"commit":{"message":"Fix Rails 7.1 regression: Delayed::JobWrapper not defined (#30)\n\nThis fixes #29, which can be reproduced on new Rails 7.1.1 apps in\r\ndevelopment.\r\n\r\nThe issue stems from the fact that Rails no longer loads ActiveJob at\r\nall until the first `ActiveJob::Base` class is referenced, but we\r\ndefined our `Delayed::JobWrapper` class in a file that only loads\r\n_after_ ActiveJob loads. This means that you can enqueue an ActiveJob,\r\nbut the first time `delayed:work` tries to deserialize the handler, it\r\nencounters the `Delayed::JobWrapper` constant before it encounters its\r\nfirst `ActiveJob::Base` class.\r\n\r\nThe fix is to pull `Delayed::JobWrapper` out into its own file in `lib/`\r\nand load it when `lib/delayed.rb` loads. The class itself has no\r\ndependencies outside of `activesupport` (`delegate_missing_to`) so this\r\nis safe enough to do.","shortMessageHtmlLink":"Fix Rails 7.1 regression: Delayed::JobWrapper not defined (#30)"}},{"before":"66125d123cff8742e729503dfdd1cc2dac7bb34a","after":"429e20f0baddb1205d5ee7be7082e2a4afcd1f0e","ref":"refs/heads/main","pushedAt":"2023-10-11T16:10:02.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"smudge","name":"Nathan Griffith","path":"/smudge","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/83998?s=80&v=4"},"commit":{"message":"Rails 7.1, Ruby 3.1, and Ruby 3.2 (#28)\n\nThis adds Rails 7.1, Ruby 3.1, and Ruby 3.2 to the build matrix.\r\n\r\nThe gem already works with these versions, but now they are formally\r\ntested. (As such, I bumped the gem by a patch version, to signify that\r\nthis is the first verified-compatible release.)","shortMessageHtmlLink":"Rails 7.1, Ruby 3.1, and Ruby 3.2 (#28)"}}],"hasNextPage":false,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAEPTfjewA","startCursor":null,"endCursor":null}},"title":"Activity · Betterment/delayed"}