* main: (30 commits)
Update useragent to recognize twitterbot/facebot
Add defensive styles for non-square avatar images
Update test for copy changes
Missed commit
AI: standardize on https://agents.md
Make it clear this is just notifications, not comprehensive activity
AI: configure MCP servers for Chrome, Grafana, and Sentry (#1727)
Allow requests from Google Image Proxy
Update to basecamp's useragent fork
Clean up a little bit the CSRF reporting code
Claude: production observability guidance (#1725)
Prevent autoscroll to the root columns container to prevent jump on page load
Include full name string so you can type your name to filter
Prioritize current user and assigned users in assignment dropdown
Check and report on Sec-Fetch-Site header for forgery protection
bundle update
Bump bootsnap from 1.18.6 to 1.19.0
Bump rails from `077c3ad` to `17f6e00`
Fix cards getting stuck in edit mode
Don't report ConcurrentMigrationError to Sentry
...
* main: (35 commits)
Replace the whole card on update
Include bottom inset on the modal and footer, too
Attempt to fix expanded search input
Lose the second close button
This seems to have caused the unwanted effect of not focusing the field in Mobile Safari
Always display the cancel button, `esc` isn't obvious
Nothing should cover the bar, trays or search results
Dark theme color isn't black
Add env constaints for mobile layout
Smaller on mobile
Reasonalbe max heights
Remove top orientation (it doesn't work well), make right and left classes exclusive
This is too fancy, remove it
Set reasonable maxes
Restore bubble to Maybe
Restore structured logging of `queenbee_id`
Add a kamal pre-build hook with some safety checks
Configure beta to use production blob store
Configure beta load balancer
Update beta deployment and secrets config
...
- redirect avatar image requests to the rails_blob_url, instead of
streaming them through the web app
- use a thumbnail variant for avatar images
- only put avatar initials behind the stale? check (not the image
redirect, which would result in browsers rendering broken images when
an avatar is changed, until max-age expires)
Add an account key field to improve search performance. This field
allows us to filter the records by account directly in the fulltext
index, so we only need to examine rows belonging to the relevant account.
The check-then-act pattern in `register_activity_spike` has been
replaced with `find_or_create_by!` to eliminate the race condition
that could lead to creating multiple activity spikes for a card. To
support this change, the `card_id` index on `cards_activity_spikes`
has been made unique.
ref: https://app.fizzy.do/5986089/cards/3063
We've seen some cases of deadlock when processing notifications, because
locks are gathered on the users in different orders. Let's try sticking
to a consistent order instead, which should cause the jobs to serialize
rather than deadlock.
We set the order in the dedicated column controllers and we don't want this in place when using composable filters.
Also, this raises an error with the MySQL move when combined with assignees. Because we inject a .distinct there,
that messes up with the query select, resulting in having to add a redundant select to the closed sorting scope, so that
the closure.created_at is not lost.
Primarily this is in tests (which were caught by temporarily
introducing acts_as_tenant and enabling safety checks), but notably
action cable connections were not working properly, and that's now
fixed.