Commit Graph
5100 Commits
Author SHA1 Message Date
roo hutton ba589211ea Merge pull request #36314 from overleaf/revert-36194-rh-cio-split-tests
Revert "[web] send active split test assignments to customer.io"

GitOrigin-RevId: c3acb504be2ef003d6a103568ece3175f787e6d5
2026-09-17 11:50:08 +00:00
roo hutton 6b69ea7dc1 Merge pull request #36194 from overleaf/rh-cio-split-tests
[web] send active split test assignments to customer.io

GitOrigin-RevId: 3036d6442e8419326f4b641482d65bd5114fe3da
2026-09-17 11:49:59 +00:00
Brian Gough df7a9159c2 normalise image counts in compile-with-optimizable-pngs analytics events (#36308)
GitOrigin-RevId: 6049161196fab1b2e4c3d9aa811b97e3e529aca2
2026-09-17 11:49:54 +00:00
Antoine ClausseandMathias Jakobsen 87fd22cefc [web] Fix negative AI quota countdown after reset period elapses (#35690)
* Fix negative AI quota countdown after reset period elapses

Backend (`FeatureUsageRateLimiter`, `TokenUsageRateLimiter`): once the
24h period had lapsed, `remainingUsage`/`remainingTokens` reset to the
full allowance but `resetDate` kept pointing at the old `periodStart +
24h` (i.e. in the past). Advance to `now + 24h` in that case.

Frontend (`NewPlanPaywall`, `ErrorGetPremium`): the "wait X hours and Y
minutes" copy computed `restoreTime - now` without clamping, so a past
`restoreTime` produced negative hours/minutes (users saw "wait -118
hours and -35 minutes"). Clamp to 0.

* Address PR review on quota reset fix

- Keep `resetDate` tied to the stored `periodStart + PERIOD` rather
  than jumping to `now + PERIOD` when the period has lapsed. The
  moving-target variant unnecessarily reinterpreted a stable field
  (existing consumers such as `use-ai-access-gate` check whether the
  reset date is in the past).
- Clamp `remainingUsage` / `remainingTokens` at 0 so a concurrent
  over-usage never leaks a negative count.
- Align the boundary check with `_checkRateLimit` / `checkUsage`
  (inclusive `<=`).
- Cover the period boundary and the clamp in unit tests for both
  `FeatureUsageRateLimiter` and `WorkbenchRateLimiter`.

* Truncate test fixtures to whole seconds

`resetDate` is serialized with `Date.toString()`, which has second
resolution, so fixtures with a millisecond component failed the
boundary assertions.

* Revert code changes; keep tests that document the bug

The fixes masked the symptom (negative countdown) without addressing
the underlying issue, and it is not fully understood yet. Revert the
rate limiters and the writefull paywall components to their original
behaviour, and instead pin the current behaviour in tests:

- `it.fails` tests document that `remainingUsage`/`remainingTokens`
  go negative when usage exceeds the allowance — these flip red when
  the bug is fixed, at which point they should become plain `it`.
- The lapsed-period tests assert (with explanatory comments) that
  `resetDate` keeps pointing at the end of the lapsed period, which is
  the server-side ingredient of the negative-countdown support ticket.

* Reapply quota fixes

Restores the post-review state of the rate limiters (clamp remaining
counts at 0, inclusive period boundary, resetDate tied to periodStart)
and the writefull paywall components (clamp countdown at 0).

Tests intentionally untouched in this commit; the two `it.fails` tests
now need flipping to plain `it` in a follow-up.

* Flip bug-documenting tests to plain assertions

The clamp fixes are reapplied, so the `it.fails` tests now assert the
fixed behaviour directly. Trim the explanatory comments.

* Set resetDate to `Date.now() + PERIOD_IN_MILLISECONDS` instead of the expired/stale date.

Co-authored-by: Mathias Jakobsen <mathias.jakobsen@overleaf.com>

* Update lapsed-period tests for the fresh resetDate

`resetDate` is now `Date.now() + PERIOD` once the period has lapsed, so
assert an approximately-fresh date instead of the stale period end.

---------

Co-authored-by: Mathias Jakobsen <mathias.jakobsen@overleaf.com>
GitOrigin-RevId: ad39627ab9e5ceccb2a61443b2b7d39c68600594
2026-09-17 11:49:47 +00:00
Brian Gough 6b3d95cea4 add optimisable png count and compile stats to compile-with-optimizable-pngs event (#36279)
* add count of optimisable pngs to HistoryResourceWriter

* add optimisable png count and compile stats to compile-with-optimizable-pngs event

GitOrigin-RevId: 5c528d727473ec2d3082845d8d5b60844f3434f6
2026-09-17 11:49:41 +00:00
roo hutton b886c0b266 Merge pull request #35836 from overleaf/rh-prices-split
[web] Update monthly plan prices for new subscriptions with split test

GitOrigin-RevId: 42d0adaf68647adc93f4c05d5ddeefb356753db2
2026-09-17 11:49:04 +00:00
Jakob Ackermann 6ca58edf72 [web] add infrastructure level zod change (#36190)
* [web] add infrastructure level zod change

* [web] set req validation mode for tests to 'enforce'

GitOrigin-RevId: 6dbc8bff7ed9f89045c398df93d84bca589de4e9
2026-09-17 11:48:19 +00:00
Antoine Clausse 86bab9dc99 Merge pull request #35724 from overleaf/ac-wallet-payment-method-analytics
[web] Add Stripe wallet payments (Apple Pay / Google Pay) in analytics and remove conversion to "card"

GitOrigin-RevId: f6d404d35eb108d7ddaf8ca1b6c2164cb5100c9c
2026-09-17 11:48:15 +00:00
Jakob Ackermann 731ed50f78 [clsi] address zod violations (#36199)
* [editor-core] gracefully handle no-op TextOperation

* [web] avoid sending sync to pdf requests without a ?file

* [validation-tools] log deeper nested violations

* [editor-core] fix round trip of EditNoOperation

* [web] use custom error for sync to pdf w/o file, fix tests

* [validation-tools] include request params in log msg for violation

* Revert "[editor-core] gracefully handle no-op TextOperation"

This reverts commit c1d37261d5db72b37dbf39428c54edcfb5423f41.

* [web] gracefully handle rejected sync to pdf from context menu

GitOrigin-RevId: 21de7dc96b23575b0d67b6eb0c68ed9c2f86292b
2026-09-17 11:48:12 +00:00
Davinder Singh 98b79d9532 [WEB] Simplify "New project" dropdown (#34290)
* Simplify the new project dropdown

* Simplify the New project dropdown

* removing artefact of rebase

GitOrigin-RevId: e7e4dc48c10f2297abcd7c5b489ff2308bf9e18b
2026-09-17 11:47:56 +00:00
Jimmy Domagala-Tang 560b7a209a Transition optimized images to project-level toggle (#36093)
* feat: transitioning optimized images from a compile mode to a project level toggle. We still persist it for the proect and between users, and ensure that draft mode does not interact with it (silently disabled while draft mode is on)

* feat: cleaning up unused var, tests, and locales

* feat: updating copy

GitOrigin-RevId: 8010edfab164980f14125739e481d8b512f6b3df
2026-09-17 11:47:49 +00:00
Kristina f179e89c0c [web] add analytics for @mentions (#36144)
GitOrigin-RevId: 9fb1447166eb5ee82867466abc9af2207c886f8b
2026-09-17 11:47:22 +00:00
Kristina 20a4144cf9 [web] add events for out of sync modals (#36132)
GitOrigin-RevId: f9673defab0d06d8e814bf2d43cbb7e19eb249a7
2026-09-17 11:47:19 +00:00
Alf EatonandClaude Opus 4.8 f0b8e4af11 Add "Jump to command definition" to the editor context menu (#35116)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
GitOrigin-RevId: 5fcaef2004495a5e71bc083cf8fdc2bffce579d5
2026-09-17 11:47:09 +00:00
Miguel Serrano d20052bf3e [web] Read subscription.features on Group Management rendering (#36168)
* [web] Read subscription.features on Group Management rendering

Fixes 'ai-toggling' not properly read on Group Management rendering, causing the Feature Controls option not being displayed in certain scenarios.

GitOrigin-RevId: 4465fea15279d650d9d231e85072f1d85f2358be
2026-09-17 11:47:01 +00:00
Tom Wells e3a75e2396 Merge pull request #36125 from overleaf/tw-bibtex-project-drawer
Add side drawer to the project-level Visual BibTeX Editor

GitOrigin-RevId: b9792dd1162e459511f70e2ac325ccdfc7d5b26f
2026-09-17 11:46:46 +00:00
Tim Down 7895541382 Merge pull request #36141 from overleaf/oa-teardown-editor-upgrade-button-relocation
[web] Teardown `editor-upgrade-button-relocation`

GitOrigin-RevId: b6c53eef240ac2386907e0d0a942c674cfc9133b
2026-09-17 11:46:39 +00:00
Jakob Ackermann eb36edac6d [project-history] report a resync that is still pending after a flush (#36122)
GitOrigin-RevId: ccd4390048c09f732531d2e02a40336fce88a952
2026-09-17 11:45:55 +00:00
Mathias Jakobsen d1691345c5 Merge pull request #36074 from overleaf/mj-reload-after-failed-catch-up
[web] Reload after failed intermittent-connection catchup

GitOrigin-RevId: c9a6315ecb6ebe957ad85c05ebc84bb8165881ab
2026-09-17 11:44:33 +00:00
Jimmy Domagala-TangandBrian Gough 35ba44f22b Adding project PNG optimization check to compile analytics (#35925)
* feat: adding in check for if the project could have had a png optimized as part of the compile-result-backend event

* feat: updating using new compile metrics to filter for only eligible project compiles

* move projectHasUnconvertedPngs to stats

* add e2e test for projectHasUnconvertedPngs

* add unit tests for compile-with-optimizable-pngs analytics event

---------

Co-authored-by: Brian Gough <brian.gough@overleaf.com>
GitOrigin-RevId: 97e9d184420c34fc1d3e9f6cfe63f6b916f0202f
2026-09-17 11:44:29 +00:00
Kristina b53bfbe8a4 [web] analytics for flaky connections (#35916)
* emit connection-restored events
* emit post-offline sync success/failure events

GitOrigin-RevId: 3fce5f328d726aeb5edf39f14239ef6e5bda2f99
2026-09-17 11:44:19 +00:00
Copilot cb3fbaba84 [web] update notification settings copy for mentions (#35953)
GitOrigin-RevId: cc86f0931f6740f1d509118ee558719bc3559816
2026-09-17 11:43:53 +00:00
Malik Glossop 302b6f28d6 Merge pull request #35989 from overleaf/worktree-mg-ai-limit-countdown-sub-minute
Round AI usage limit countdown up so it never renders empty

GitOrigin-RevId: f277de79c4962f534603497201a8f4a43fb01125
2026-09-17 11:43:44 +00:00
Malik Glossop 6c63002cd1 Merge pull request #36041 from overleaf/mg-offline-focus-mode
Add offline indicator for focus mode

GitOrigin-RevId: 3764577500d67b139c31a356f4f5e82888c44209
2026-09-17 11:43:40 +00:00
Mathias Jakobsen 7a5b1da06d Merge pull request #36034 from overleaf/mj-free-user-intermittent
[web] differentiate free and paid users for intermittent connection timeouts

GitOrigin-RevId: 9c1847ff3dae7290b7c8d1093ef6dc05ae3b76aa
2026-09-17 11:43:34 +00:00
Mathias Jakobsen 0c5e55a8be Merge pull request #36002 from overleaf/mj-save-backup-early
[web] Start saving offline backups after 10 seconds

GitOrigin-RevId: 4101598f46b6f71dc8bf10a31cbec9110216ed7a
2026-09-17 11:43:27 +00:00
Davinder Singh 36d0a5c227 Merge pull request #35855 from overleaf/ds-unable-to-sync-modal-improved
[WEB] Adding improved version of the unable to sync modal

GitOrigin-RevId: 1cfe2b3a2e8417028339efddb18385a5224e50c3
2026-09-17 11:43:20 +00:00
Jessica Lawshe 6211c1c49c Merge pull request #35101 from overleaf/jel-cleanup-domain-captured-by-group-getUserEmailsDataWithDomainCaptureEnabled
[web] Remove rollout flag check in `getUserEmailsDataWithDomainCaptureEnabled`

GitOrigin-RevId: 0c58b5752217cea8233e95b22ba7b236fd9d25ab
2026-09-17 11:42:24 +00:00
Jessica Lawshe 16a5c45b5f Merge pull request #35861 from overleaf/jel-email-notifications-domain-capture
[web] Use name in greeting for email notifications for domain capture

GitOrigin-RevId: 56e46bc6de031656e4e8c0a9332f6b94aa517506
2026-09-17 11:42:20 +00:00
Jessica Lawshe a47fec5a38 Merge pull request #35068 from overleaf/jel-cleanup-domain-captured-by-group-getInstitutionViaDomain
[web] Remove `domain-captured-by-group` rollout flag for `getInstitutionViaDomain`

GitOrigin-RevId: 54e63f0e13ddda97e0554ff3e142bbf4502c3b61
2026-09-17 11:42:11 +00:00
Kate Crichton 281b5fe25c Merge pull request #34835 from overleaf/kc-email-member-limit-reached
[web] Email group admin when group reaches member limit

GitOrigin-RevId: 6b7b12a2c309e7d9b4314e8db51969d73864b7ed
2026-09-17 11:41:49 +00:00
David ea989a4788 Merge pull request #35906 from overleaf/dk-library-references-trashed
Soft-delete library references (move to trash)

GitOrigin-RevId: 908a4d41724300c70d56e850cdb519b7a274ad5a
2026-09-17 11:41:40 +00:00
Jakob Ackermann 03cbfbe90f [web] fix open redirect via utm tags (#36019)
GitOrigin-RevId: 1304c1578adf1d3248abcaa01902467422e8d8f6
2026-09-17 11:41:34 +00:00
David 0fe77a8068 Merge pull request #35964 from overleaf/dp-dark-library-autocomplete
Add dark theme support to the library auto-complete dropdown

GitOrigin-RevId: be975d7c379e689ed61706bf027e488b7177eb73
2026-09-17 11:41:28 +00:00
Kristina 20027166fb [web] recover tracked changes after going offline (#35961)
GitOrigin-RevId: 8d34eb879de91a3b348fc1230eb3ce4d532194e0
2026-09-17 11:41:17 +00:00
Kristina 1f97dbc789 [web] do not show the cannot sync modal if still offline (#35939)
GitOrigin-RevId: 20c6f138e05fb8459b27f8ea9b376c21c7820799
2026-09-17 11:41:13 +00:00
Jimmy Domagala-Tang ba76fda37b Cleanup AiErrorAssistant todos post plans changes (#35067)
* feat: cleaning up ai quota leftovers

fix: removing more straggler invos

* fix: featureUpdater still need analyticsId in the user projection

* feat: updating cypress tests to also check for fair usage text

GitOrigin-RevId: 09c1167106c144084c111beea56867f6aa4a0906
2026-09-17 11:41:10 +00:00
Jakob Ackermann 275d381656 [monorepo] remove some dead code (#35901)
* [history-v1] remove unused duplicate file from swagger migration

* [web] drop unused ?scribtex_path

* [github] update path to security middleware in history-v1

* [dependency-management] update .jenkinsIncludeFile

GitOrigin-RevId: 8c59d0d1e3e9108a8498e33e4768992ecd342f00
2026-09-17 11:41:07 +00:00
Simon Gardner c40952813c [web] fix: Always unlink group SSO when a linked user leaves a group (#35895)
GitOrigin-RevId: f3a9cc5fec2b8950826aef02bdfe7ed72607f56b
2026-09-17 11:41:03 +00:00
Jakob Ackermann be9ab57d18 [web] speed up CI: bin-pack module acceptance tests (#35965)
GitOrigin-RevId: 92a33b4531d541c676018b3152c7abf74edd2eec
2026-09-17 11:40:52 +00:00
Jakob Ackermann e947f3c4aa [web] improve logging for failed requests on MockApis (#35958)
- Prepare for zod usage in mocks
- Fix logging of the mock name

GitOrigin-RevId: 3c4d2981010992c293a9ece45935ce13cadd8dde
2026-09-17 11:40:09 +00:00
ilkin-overleaf f0b9ab322f Merge pull request #35915 from overleaf/ii-project-sharing-admin-page-hide
[web] Gate sharing permissions behind a new feature flag

GitOrigin-RevId: 8c6657aca11911e9c2ddcba000a501307184bcaf
2026-09-17 11:39:41 +00:00
Jakob Ackermann 8fa62d2864 [document-updater] drop support for tc in briefly (#35864)
GitOrigin-RevId: 00d04d911249b81abc5eb4f9d9dfde4c7f2316b3
2026-09-17 11:39:22 +00:00
Jakob Ackermann 00a2765d01 [document-updater] add track-changes support to setDoc (#35820)
GitOrigin-RevId: 5d39dd1945e710ec3f7068830fb2476e59f0f2a5
2026-09-17 11:39:12 +00:00
Kristina b624adf885 [web] trigger post-offline sync result treatments (#35854)
* trigger `UnableToSyncModal` on refresh
* trigger `UnableToSyncModal` without refresh
* show success toast when offline edits sync
* always show out of sync modal as the final backup

GitOrigin-RevId: 3ed300fef9e6d2ff81e17868309f80ffa40e0576
2026-09-17 11:39:03 +00:00
Brian Gough a46d987a51 Merge pull request #35695 from overleaf/copilot/close-graceful-shutdown-issue-35694
Handle graceful shutdown in project and user deletion batch expiry

GitOrigin-RevId: 43182850ad8e55b480ea0073c393222366d7e00a
2026-09-17 11:38:25 +00:00
Chris Dryden f81a7b2ff2 Merge pull request #35534 from overleaf/cd-share-sidenav-bar-with-library
[web] Share the dashboard sidebar with the library page

GitOrigin-RevId: 5595746fef6698bee6a35ee7fc8be15743e2c620
2026-09-17 11:37:57 +00:00
Kristina 6af1d79cd6 [web] reset all css variables impacting the comment field (#35681)
GitOrigin-RevId: b66f612e186434208a658d64ccc6346c37f23182
2026-09-17 11:37:54 +00:00
Tom Wells 4430252b77 Add reference preview/edit drawer to the library (#35763)
* Add reference preview/edit drawer to the library, with mobile bottom-sheet layout

* Fix stylelint comment spacing and update library Cypress spec for the drawer flow

* Fix desktop drawer focus/escape handling and autosave race in the library

Replace the desktop preview panel's hand-rolled Escape listener with the
shared FocusTrap component (already used for the mobile sheet), fixing
missing focus trap/restore and reusing existing infrastructure instead of
duplicating it. Track whether the kebab actions menu is open via a ref so
Escape closes just the menu first, not the whole panel.

Guard the autosave-on-blur form against redundant saves (skip when nothing
changed since the last save) and out-of-order responses (serialize saves
through a queue so a later edit can't be clobbered by a stale response).

Remove dead commented-out JSX for unimplemented tabs/actions.

* Reinstate library reference analytics events for the new preview drawer

* Surface an error notification when deleting a reference from the drawer fails

* Fix stuck kebab-menu state and blocked outside clicks in the reference drawer

* Share error-message extraction and add a test for the delete-failure path

* Fix formatting

* Fix the translation

GitOrigin-RevId: a0082377c6e3f6712fba80c485b9cde4d431c90f
2026-09-17 11:37:40 +00:00
Malik Glossop 7e69642c01 Merge pull request #35731 from overleaf/mg-historyot-delete-at-end
Fix History OT base length when a tracked delete is in the document

GitOrigin-RevId: 414349aedd498c2635bb3067388dcc7291e32ee6
2026-09-17 11:37:22 +00:00