Commit Graph

5893 Commits

Author SHA1 Message Date
Rosa Gutierrez 641e67dc2e Remove status from allowed parameters in CardsController#update
We don't allow changing the status via this action, and it's confusing
and can lead to cases where someone can set someone's else card as
draft, effectively hiding it.
2025-12-19 22:35:30 +01:00
Jeremy Daer bd6c1cf34f Storage: harden reconcile for concurrent writes and fix board transfer (#2096)
* Storage: harden reconcile for concurrent writes and fix board transfer

Reconcile now uses two-cursor approach: captures cursor before and after
the storage scan, aborting if they differ (entries added during scan).
Job retries 3x with 1-minute waits and limits concurrency to 1 per owner.

Board transfer now correctly moves storage for card description embeds
and comment embeds, not just direct attachments. Uses batched queries
to handle cards with thousands of comments efficiently.

Also fixes N+1 queries in attachment grouping via lookup maps.

* Storage: fix per-attachment reconcile and enforce no blob reuse

The storage ledger tracks per-attachment (not per-blob) as a business
abstraction for quotas. This fixes reconcile to match that model and
adds enforcement to prevent blob reuse in tracked contexts.

* Reconcile now uses joins(:blob).sum() for per-attachment counting
* New validation prevents reusing blobs across tracked attachments
* Race-safe storage_total creation with create_or_find_by
* Job efficiency: skip find_by when object already available
* Backfill script checks per-attachment, not just per-blob
2025-12-19 13:07:32 -08:00
Stanko K.R. ca388c2b84 Replace handle_ naming 2025-12-19 19:21:58 +01:00
Stanko K.R. df1dfde2b3 Use same constant for fake magic links 2025-12-19 19:21:58 +01:00
Stanko K.R. 3af8bdbe37 Replace FakeMagicLink with a temporary object 2025-12-19 19:21:58 +01:00
Stanko K.R. 52d57c4681 Tidy up session_token 2025-12-19 19:21:57 +01:00
Stanko K.R. e0270c6c49 Clean up interfaces
I talked to the mobile team, and to keep things simple we agreed to send
the token via a cookie.
2025-12-19 19:21:57 +01:00
Stanko K.R. 1a1f4a077b Simplify auth logic 2025-12-19 19:21:57 +01:00
Fernando Olivares cddddcf83a Fix due to unit test when creating with invalid emails 2025-12-19 19:21:57 +01:00
Fernando Olivares b3c8d02709 Cleanup session creation 2025-12-19 19:21:57 +01:00
Fernando Olivares 6e8d6a3df0 Update to always return a pending auth token for JSON responses. 2025-12-19 19:21:57 +01:00
Fernando Olivares 877f82c0cc Pass a server token when creating a magic link via API 2025-12-19 19:21:57 +01:00
Fernando Olivares a75a939289 Simplify code a bit 2025-12-19 19:21:57 +01:00
Fernando Olivares 360e14352f Simplify session create logic for both html and json 2025-12-19 19:21:57 +01:00
Stanko K.R. e5bdb3b071 Add back missing development magic link prompt 2025-12-19 19:21:57 +01:00
Stanko K.R. c0a0786539 Return the session cookie
We had a call about this. In short, we could reuse access tokens but then the user would see access tokens for every mobile device they have without any indication as to what is going on. So, since this really is just logging in instead of an integration which seems to be the primary purpose of access tokens, we can just use our regular session cookie for authentication.
2025-12-19 19:21:57 +01:00
Stanko K.R. 54ceb4df7c Remove email address and users from magic link response
The identity endpoint can be used to fetch that information
2025-12-19 19:21:57 +01:00
Stanko K.R. b92982b244 Cleanup & simplify sign in 2025-12-19 19:21:57 +01:00
Fernando Olivares 093240c6f7 Return email and users too 2025-12-19 19:21:57 +01:00
Fernando Olivares ab0f7a3ea5 Dev: Set magic link as header when JSON request in development 2025-12-19 19:21:57 +01:00
Fernando Olivares 7644bb7411 Allow JSON requests submitting a magic link code 2025-12-19 19:21:57 +01:00
Fernando Olivares c8eb592746 Allow JSON requests to send a magic link 2025-12-19 19:21:57 +01:00
Jorge Manrubia eb1d112013 Merge pull request #2203 from basecamp/remove-unused-param
Remove unused `tag_ids` parameter from `CardsController#update`
2025-12-19 12:16:32 +01:00
Jorge Manrubia fcc426a97b Merge pull request #2192 from italomatos/optimize-card-count-queries
Optimize card count queries to avoid duplicates
2025-12-19 12:05:35 +01:00
Jorge Manrubia 33fc239571 Merge pull request #2140 from dilberryhoundog/fix-stale-account-cache
Fix: resolve stale account names in jump menu and page titles
2025-12-19 11:26:23 +01:00
Jorge Manrubia 2cbbdfbd19 Merge pull request #2138 from italomatos/refactor/replace-reverse-merge-with-with-defaults
Refactor: Replace reverse_merge with with_defaults for improved readability
2025-12-19 11:24:46 +01:00
Rosa Gutierrez 1e640643e9 Remove unused tag_ids parameter from CardsController#update
This is no longer used in the normal flow of the app. The tags are added
via `Cards::TaggingsController`.
2025-12-19 11:16:20 +01:00
Rosa Gutierrez cb01966439 Remove unused Card.published_or_drafted_by scope
As the tests for it could lead to confusion where it seems drafted cards
are not accessible to someone with access to the board and with the
direct drafted card URL.
2025-12-19 09:46:21 +01:00
Samuel Péchèr 32a0acea11 Merge pull request #2107 from basecamp/adjust-paragraph-spacing
Adjusting text content spacing between paragraphs
2025-12-19 07:59:25 +01:00
Jason Zimdars 79d2ecb9f5 Merge pull request #2200 from basecamp/assign-self-hotkey
Hotkey `m` to toggle assignment to self
2025-12-18 20:49:36 -06:00
Jason Zimdars ddf19e967e Merge pull request #2199 from varyform/remove-dead-method
Remove unused inline_svg
2025-12-18 20:49:25 -06:00
Jason Zimdars 478fc26337 Only apply when Current.user is set so that broadcasts don't fail 2025-12-18 20:45:11 -06:00
Jason Zimdars fa2b2fb194 Hotkey m to toggle assignment to self 2025-12-18 16:47:36 -06:00
Jason Zimdars 2356f61f9b Merge pull request #2198 from basecamp/card-comments-count
Show comments on preview cards
2025-12-18 16:01:35 -06:00
Oleh Khomei e67e658e98 Remove unused method 2025-12-18 20:37:28 +02:00
Adrien Maston 972f86b603 Merge pull request #2177 from basecamp/mobile-app/scoped-styles
Mobile app / Scoped styles
2025-12-18 17:57:46 +01:00
Jason Zimdars a56f200e1f Show comments on preview cards 2025-12-18 10:29:36 -06:00
Stanko Krtalić 42185a8d6d Merge pull request #2153 from basecamp/limit-the-number-of-asignees-on-a-card
Limit the number of asignees on a card
2025-12-18 12:08:45 +01:00
Italo Matos fd89a452c3 Optimize card count queries to avoid duplicates
Replace duplicate .count calls with cached variables using .size method.
This reduces database queries by approximately 50% on mobile board views.

Changes:
- Cache card counts in local variables (postponed, awaiting_triage, closed, active)
- Use .size instead of .count (more intelligent - leverages preload when available)
- Reuse cached values instead of making duplicate SQL queries

Impact:
- Mobile columns view: reduced from ~6 to ~3 COUNT queries
- Better performance with no visual changes to the UI
2025-12-18 07:09:57 -03:00
Samuel Péchèr d250c256c6 Add paragraph space to seed Card #8 2025-12-18 09:27:56 +00:00
Adrien Maston 389b817bb4 Replace android and ios css layers with platform layer 2025-12-18 08:31:15 +01:00
Jason Zimdars f9b7d05f2c Fix that comments and system comments weren't the same width on mobile 2025-12-17 20:35:34 -06:00
Jason Zimdars ec979ab3ff Style 2025-12-17 20:15:59 -06:00
Jason Zimdars e0d50bb730 Merge pull request #2180 from nqst/cleaner-system-comment-selectors
Use simpler selectors to target system comments
2025-12-17 20:14:32 -06:00
Jason Zimdars 7c92d48d8a Style 2025-12-17 20:10:36 -06:00
Jason Zimdars ae5cb096f9 Let's just use the class we already have 2025-12-17 20:06:38 -06:00
Jason Zimdars fe89debf94 No longer used 2025-12-17 19:57:19 -06:00
Jason Zimdars b0a1b370a8 Move transition to wrapper element 2025-12-17 19:55:50 -06:00
Andy Smith d36f7db7fc uppercase text on magic link input 2025-12-17 14:19:51 -06:00
Alexander Zaytsev f7d1e13ce3 Simplify CSS /thx @andyra 2025-12-17 20:09:14 +01:00