Commit Graph

9255 Commits

Author SHA1 Message Date
Stanko K.R. 36ee253a1a Stack notifications everywhere
We had client-side notification stacking in the tray since launch, but now we want to stack notifications in the notifications page, in API responses and in email bundles.
2026-02-12 10:29:50 +01:00
Stanko Krtalić 680a718379 Merge pull request #2527 from basecamp/pre-notification-stacking-migrations
Add card_id and unread_count to notifications
2026-02-12 08:10:56 +01:00
Stanko K.R. c84d783b2a Add card_id and unread_count to notifications 2026-02-12 08:07:51 +01:00
Stanko K.R. 37d7f5c569 Give more detail about why the import failed 2026-02-11 13:47:21 +01:00
Alp Keser 03ed6df109 Merge pull request #2455 from basecamp/expose-has-attachment-for-card
Add json.has_attachments for the card
2026-02-10 11:36:30 +03:00
Andy Smith 4db715ca5f Merge pull request #2515 from basecamp/card-column-refresh
Only disable the current column if it's open
2026-02-09 16:09:40 -06:00
Andy Smith b3951564bc Only disable the current column if it's open 2026-02-09 16:02:02 -06:00
Andy Smith e1a70a330d Merge pull request #2513 from basecamp/truncate-account-menu
Truncate long account names in the menu
2026-02-09 10:51:02 -06:00
Mike Dalessio 8c5b47d774 Group notification emails by board (#2506)
* Group notification emails by board

Notification bundle emails now group items by board instead of
showing the board name redundantly for each card. Each board
section has a linked header and an <hr> separator.

* Adjust board title styles and remove rem units

* Sort board groups alphabetically

Sort notification email board sections alphabetically by name
(case-insensitive).

Also, rewrite mailer tests to use Nokogiri::HTML5 for precise DOM
assertions instead of regex matching.

---------

Co-authored-by: Andy Smith <andy@37signals.com>
2026-02-09 11:29:11 -05:00
Andy Smith 4127eaeacf Truncate long account names in the menu 2026-02-09 10:22:58 -06:00
Rosa Gutierrez 692fd73512 Run only Solid Queue's maintenance tasks in staging
And not all production tasks, because that causes unexpected side
effects such as cards being auto-postponed and firing webhooks
configured to trigger on that event.
2026-02-09 13:19:12 +01:00
dependabot[bot] 9622e5dad4 Bump actions/attest-build-provenance from 3.1.0 to 3.2.0 (#2499)
Bumps [actions/attest-build-provenance](https://github.com/actions/attest-build-provenance) from 3.1.0 to 3.2.0.
- [Release notes](https://github.com/actions/attest-build-provenance/releases)
- [Changelog](https://github.com/actions/attest-build-provenance/blob/main/RELEASE.md)
- [Commits](https://github.com/actions/attest-build-provenance/compare/v3.1.0...v3.2.0)

---
updated-dependencies:
- dependency-name: actions/attest-build-provenance
  dependency-version: 3.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-08 10:35:19 -08:00
dependabot[bot] 52ec23ff21 Bump docker/login-action from 3.6.0 to 3.7.0 (#2500)
Bumps [docker/login-action](https://github.com/docker/login-action) from 3.6.0 to 3.7.0.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](https://github.com/docker/login-action/compare/v3.6.0...v3.7.0)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-version: 3.7.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-08 10:35:11 -08:00
Mike Dalessio bd1ef1f650 dep: bump console1984 to 746cd443 (#2495)
to pick up the session incineration fix

ref: https://3.basecamp.com/2914079/buckets/27/card_tables/cards/9552285400
2026-02-06 10:24:04 -05:00
Adrien Maston a8676ada4c Merge pull request #2490 from basecamp/fix-hidden-filters-in-firefox
Fix hidden filters in Firefox
2026-02-06 11:01:54 +01:00
Andy Smith 90cf405391 Merge pull request #2492 from basecamp/accounts-page-overflow
Content overflow scrolling for users list
2026-02-05 13:23:22 -06:00
Andy Smith 8e93f9d45e Content overflow scrolling for users list 2026-02-05 13:20:01 -06:00
Adrien Maston 9c7afcbee8 Merge pull request #2484 from basecamp/mobile/fix-board-scroll-position
Mobile / Fix expanded column not being scrolled into view
2026-02-05 17:47:38 +01:00
Adrien Maston cf6cd7d7c5 Merge pull request #2491 from basecamp/mobile/bridge-back-to-board-button
Mobile / Bridge back to board button
2026-02-05 17:43:12 +01:00
Adrien Maston 4072688974 Use a dedicated link to bridge a "go to" board button 2026-02-05 17:36:48 +01:00
Adrien Maston fe555f751e Move "Edit" action to ellipsis menu 2026-02-05 17:33:29 +01:00
Adrien Maston 626b8aa8a6 Revert "Show "Go to" board button in card perma"
This reverts commit d689f560b4.
2026-02-05 17:31:37 +01:00
Adrien Maston 186d759672 Instant scrolling on restore, animated on user action 2026-02-05 17:17:49 +01:00
Adrien Maston d689f560b4 Show "Go to" board button in card perma 2026-02-05 17:04:03 +01:00
Stanko Krtalić 421525e725 Merge pull request #2480 from basecamp/move-import-button-to-signup-screen
Move import button to sign up screen
2026-02-05 12:33:11 +01:00
Adrien Maston 9d4655d35e Make filters "open" by default then hide in mobile apps 2026-02-05 11:12:50 +01:00
Mike Dalessio 14aa95d982 Add migration script to fix misplaced comment events (#2487)
Finds comment events that are on the wrong board (after a card move)
and updates them to the correct board.
2026-02-04 15:27:33 -05:00
Mike Dalessio d611b2cc6c Move comment events when card moves to a new board (#2486)
When a card moves between boards, comment events were staying on the
old board. Now they move with the card.
2026-02-04 15:04:28 -05:00
Denis Svara d032f88c59 Merge pull request #2476 from basecamp/mobile/associated-domains
Add `apple-app-site-association` file to support iOS Universal Links
2026-02-04 20:32:35 +01:00
Adrien Maston 171b8caa45 Switch non-animated scrolling in the mobile apps 2026-02-04 18:35:12 +01:00
Mike Dalessio 1e4a411cf2 Merge pull request #2482 from basecamp/omit-inactive-users-from-mentions
Omit inactive users from board mention picker
2026-02-03 18:45:19 -05:00
Mike Dalessio e311d8f521 Omit inactive users from board mention picker
The board-scoped mention prompt was returning all users with board access,
including those marked as inactive. This adds the `.active` scope to match
the behavior of the account-wide mention prompt.

Fixes https://app.fizzy.do/5986089/cards/3861
2026-02-03 18:42:15 -05:00
Mike Dalessio 8074bfd43e Merge pull request #2481 from basecamp/import-associations-check
Validate ActionText associations during import check phase
2026-02-03 17:47:10 -05:00
Mike Dalessio 7f473eda66 Validate ActionText associations during import check phase
ActionTextRichTextRecordSet now calls check_associations_dont_exist to
ensure imported ActionText records only reference records within the
same import, matching the behavior of the parent RecordSet class.
2026-02-03 13:46:28 -05:00
Stanko K.R. 02e6c15e32 Move import button to sign up screen 2026-02-03 18:02:58 +01:00
Adrien Maston 1c6c77d356 Merge pull request #2475 from basecamp/mobile/fix-board-default-scroll-position 2026-02-03 17:59:50 +01:00
Mike Dalessio df037e21fb Merge pull request #2478 from basecamp/bg-image-boost
Fix boost button appearing prematurely on draft cards
2026-02-03 10:59:22 -05:00
Mike Dalessio 015bc3420e Fix boost button appearing prematurely on draft cards
When updating a draft card (e.g., adding a background image), the turbo
stream response was using the published card container partial, which
includes the reactions/boost button. Draft cards should use the draft
container partial which intentionally omits reactions.

Fixes https://app.fizzy.do/5986089/cards/3970
2026-02-03 09:28:08 -05:00
Stanko Krtalić 636b109dba Merge pull request #2477 from basecamp/fix-crash-during-export
Fix crash during export
2026-02-03 15:04:27 +01:00
Stanko K.R. 1c1a73c57c Check if the file exists before adding it
ZipKit creates a placeholder record when add_file is called, this record is then filled with the content that's passxed to write. But if the blob's file doesn't exist then an error is rased and the placeholder is never filled. This results in a ZIP that has a place in its catalog for the blob, but no contant for it, which makes it invalid.
2026-02-03 15:01:10 +01:00
Stanko K.R. ffce51a42f Ignore faulty ZIP files 2026-02-03 14:04:54 +01:00
Stanko K.R. a4bec6e407 Ignore missing attachments 2026-02-03 13:51:22 +01:00
Adrien Maston aa3103de3c Rename handleDesktop method 2026-02-03 12:52:54 +01:00
Denis Švara 3f44ff286e Add apple-app-site-association file to support associated domains. 2026-02-03 12:48:30 +01:00
Adrien Maston 43d12b27ed Expand maybe column is no expanded column is found in localStorage
... to trigger scrolling into view
2026-02-03 12:12:20 +01:00
Adrien Maston 45f65bd1c3 Merge pull request #2466 from basecamp/mobile/hide-sections-from-apps
Mobile / Hide sections from apps
2026-02-03 11:29:08 +01:00
Adrien Maston 2ab9dd8a30 Remove no-longer wanted margin
... after getting the newer stuff from main
2026-02-03 11:25:35 +01:00
Adrien Maston a6a20fa56e Merge branch 'main' into mobile/hide-sections-from-apps
* main: (65 commits)
  Fix crash due to missing ActiveStorage URL options
  Capture backtrace of nested errors
  Remove debug code
  Add more debug info
  Pass all service options
  Prevent duplicate files in user data export
  Write in binmode
  Replace custom IO object with a transport manager IO
  Explain imports & exports
  Add missing method to IO object
  Rename jobs
  Finishing touches
  Delete accounts for failed imports
  Check that associations don't exist
  Bust the cache after import
  Explicitly use the default storage service
  Fix ActiveStorage writing to disk
  Fix crash on successful import email
  Fix orphaned attachments when deleting the whole account
  Add size to remote io
  ...
2026-02-03 10:49:16 +01:00
Stanko Krtalić 0f1850c674 Merge pull request #2474 from basecamp/fix-crash-during-export
Fix crash due to missing ActiveStorage URL options
2026-02-02 21:51:49 +01:00
Stanko K.R. b497aa07e9 Fix crash due to missing ActiveStorage URL options 2026-02-02 21:49:06 +01:00