Commit Graph

48 Commits

Author SHA1 Message Date
Mike Dalessio 473703df3d Invalidate the bubble cache when the bucket name changes
by including the bucket name as part of the bubble cache key.

ref: https://37s.fizzy.37signals.com/buckets/693169850/bubbles/999008709

Co-authored-by: Kevin McConnell <kevin@37signals.com>
2025-03-20 12:46:23 -04:00
Jason Zimdars 836e6fab5e Avoid touch when setting initial stage 2025-03-18 08:26:16 -05:00
Jason Zimdars 28a569c49b Tickets 2025-03-17 21:24:08 -05:00
Kevin McConnell 16a80ff3a6 More dynamic activity scores
This introduces a more dynamic system of activity scoring, to improve
the way bubbles "bubble up" due to their activity. There are a few
different parts we can tune here, and it's likely we'll need to make
adjustments once we get a feel for how this works in practice.

The basic idea here is:

- We assign points for certain types of event that happen on a bubble. A
  boost gets 1 point, a comment gets 10 points, and so on.
- These points decay over time, at a rate of 50% per day. So old
  activity is worth much less than new activity. Bubbles should rise up
  quickly when acted upon, bit will float back down if left idle.
- Some comments can score higher than others: the first comment from
  each person on a bubble is worth more (20) because it signals that
  more people are getting involved; and comments that follow a comment
  by a different author are also worth more (15) because that signals
  there's ongoing conversation between people, not just a series of
  notes being left by one individual.

In terms of implementation, we persist the score on the bubble
whenever it changes, but we handle the decay on the client side. That
allows us to cache the bubble representation without having to
continually change it while its activity decays.

We also keep a separate `activity_score_order` attribute on the model.
This can be used to sort the bubbles in order of "most active", without
having to think about the decay.
2025-03-05 17:16:31 +00:00
Kevin McConnell 59144ad17a Add Watches to track notification preferences 2025-02-26 10:53:03 +00:00
Kevin McConnell 6832ba8f37 It's not just about drafts now 2025-02-11 14:34:39 +00:00
Kevin McConnell 81197bfb49 Don't set a default title 2025-02-11 14:34:39 +00:00
Jason Zimdars affa4cae7a Track changes to the bubble's name 2025-02-04 16:14:29 -06:00
Jason Zimdars d1ddb8d299 Track events on due dates 2025-02-04 15:49:34 -06:00
Kevin McConnell cd1e6378d0 Add drafted and published states 2025-01-15 10:58:00 +00:00
Kevin McConnell c62e800b08 Notifications are all related to a Bubble 2025-01-13 14:21:47 +00:00
Kevin McConnell 8a51597408 Add direct linking to comments 2025-01-13 14:21:47 +00:00
Kevin McConnell af5ac65116 Make notification target polymorphic 2025-01-13 14:21:47 +00:00
Kevin McConnell d0ae5b4bdc Add notification model 2025-01-13 14:21:47 +00:00
Jose Farias e117f4e5af boost_count -> boosts_count
This aligns better with counter_cache conventions, in case we turn boosts into a model later
2024-11-19 14:22:51 -06:00
Jose Farias 2a9be42c4e Use count cache instead of counting comments in calculating score 2024-11-19 13:26:25 -06:00
Jose Farias f17b060906 Move rescoring concerns to bubble 2024-11-15 19:48:53 -06:00
Jose Farias b4e8adca47 Pre-calculate comment counts and activity scores 2024-11-15 18:17:42 -06:00
Jose Farias f2706d0f74 Unnest bubble filters 2024-11-05 13:04:05 -06:00
Jose Farias cf9b07711a Document left_joins_messageable smell 2024-10-28 10:27:50 -06:00
Jose Farias 5cdf83163c Document with_status name smell 2024-10-28 10:25:56 -06:00
Jose Farias 8b062b4432 Pull out Bubble#activity_count 2024-10-28 10:07:12 -06:00
Jose Farias 46d1ce4702 Make it clear where the boost_count is coming from 2024-10-27 19:53:37 -06:00
Jose Farias 2fb6ed76b3 Fix comments-dependent scopes 2024-10-27 19:50:06 -06:00
Jose Farias 0727414017 Lean into delegated types APIs 2024-10-27 17:39:30 -06:00
Jose Farias 993870c10c Messageable concerns aren't actually dependent on Messages 2024-10-27 12:23:47 -06:00
Jose Farias f9712ea53f Messageables don't belong to bubble directly 2024-10-27 11:57:33 -06:00
Jose Farias 85d47a35ab threadables -> messageables 2024-10-25 15:03:31 -06:00
Jose Farias cf22fb454a not_popped -> active 2024-10-23 18:32:27 -06:00
Jose Farias b0565fbf20 Spike workflows 2024-10-21 15:33:30 -06:00
Jose Farias 6dc01479b7 Fix search form 2024-10-17 21:34:48 -06:00
Jose Farias e754b5bf92 Move all of Bubble's searchable concerns into Searchable 2024-10-17 17:38:33 -06:00
Jose Farias f4b5210ca1 Spike persisted filters 2024-10-16 16:41:11 -06:00
Jose Farias ec7fc75054 Spike events system 2024-10-11 20:14:09 -05:00
Jeffrey Hardy 462032155c Always set a default Bubble title 2024-10-03 15:40:51 -04:00
Kevin McConnell b7feddf6b7 Temporarily wire up filtering on the form 2024-10-03 16:11:29 +01:00
Kevin McConnell e50144d97f Add modelling for "popped" bubbles 2024-10-03 12:54:13 +01:00
Jeffrey Hardy 889dfdd06a Introduce a Bubble.tagged_with scope to simplify controller finding 2024-10-02 15:49:36 -04:00
Jeffrey Hardy 044117f9c1 Extract Bucket::Assignable and rename Assignment#user to #assignee 2024-10-02 12:29:59 -04:00
Jeffrey Hardy 49a3e569c2 Use chained scopes 2024-10-02 09:09:12 -04:00
Kevin McConnell 518828883c Make bubbles and comments searchable 2024-10-02 13:51:12 +01:00
Jeffrey Hardy 4e579e5a34 Rename Project to Bucket 2024-09-24 15:32:44 -04:00
Jeffrey Hardy 1d8d10ce63 Replace Bubble#color enum with a standard attribute with a default 2024-09-18 16:00:29 -04:00
Jeffrey Hardy c09a02fa98 Introduce projects and accesses 2024-09-18 13:06:30 -04:00
Jason Zimdars 56c7fe4abb Add assignees to a bubble WIP
- Still needs UI to display multiple assignees
- Still needs UI for changing/removing assignees
2024-09-17 17:10:23 -05:00
Jason Zimdars 362f373378 Inline color picker 2024-09-16 17:41:14 -05:00
Jeffrey Hardy 40863453e0 Recast categories as tags 2024-09-05 17:36:48 -04:00
Jeffrey Hardy 5aae70298b Rename Splat to Bubble 2024-09-04 14:54:11 -04:00