Commit Graph

1014 Commits

Author SHA1 Message Date
Tim Down
64da16f0d1 Merge pull request #28670 from overleaf/td-rename-validate-req
Rename validateReq to parseReq

GitOrigin-RevId: a935aaa3f89495e164ce5d10b0bd80436571440f
2026-01-15 09:05:09 +00:00
Mathias Jakobsen
6e5e53f4e6 Merge pull request #30717 from overleaf/mj-new-editor-fps-e2e
[server-ce] Add new E2E for full project search to redesigned editor

GitOrigin-RevId: 3487a9a85c57d17dea91d8e35f22355a24d55008
2026-01-14 10:18:16 +00:00
Miguel Serrano
74724d04be [CE/SP] Force rebuild of Base Image (#30723)
Forces a rebuild of the CE/SP base image, updating
OS dependencies and installing the latest version of node.

GitOrigin-RevId: a172b7cf1b19e303ea19d4392ee43f7043bb96ad
2026-01-14 10:18:11 +00:00
Mathias Jakobsen
b9acc4f586 Merge pull request #30715 from overleaf/msm-full-project-search-sp
[web] Enable Full Project Search in SP for new/old editor

GitOrigin-RevId: f569a45fff3b2c716db7acab3aae4ddbf80903c9
2026-01-14 10:18:07 +00:00
Mathias Jakobsen
19545b35d8 Merge pull request #30637 from overleaf/mj-ce-sp-new-editor
[web] Release editor redesign to Community Edition and Server Pro

GitOrigin-RevId: 062779fb418e44a4b245572fab1b4f365585a7f0
2026-01-14 10:18:02 +00:00
Mathias Jakobsen
c4fb6233ce Merge pull request #30308 from overleaf/mj-host-admin-async
[server-ce] Promisify host-admin.js

GitOrigin-RevId: 18adf72113bb26aaaa1dbf89e3ea6dd6c242239b
2025-12-18 09:05:42 +00:00
Daniel Kontšek
b79a723630 Merge pull request #30397 from overleaf/dn0-fix-jenkins-worker-build
Fix failing jenkins-worker builds

GitOrigin-RevId: 3fcd2a3f791c811c04c5e3861cf64e9adf7d5f91
2025-12-17 09:23:54 +00:00
Miguel Serrano
c12fe12b13 [CE/SP] Force rebuild of base image (#30400)
GitOrigin-RevId: 32e8b96e8ed74bf7f51e52058cd71ca7636d8f50
2025-12-17 09:23:48 +00:00
Miguel Serrano
a3ec5b2797 Merge pull request #30018 from overleaf/msm-fix-esm-import
[web] Fix ESM import

GitOrigin-RevId: 887f4927248241cb3d237e0bdad36b05928657ef
2025-12-03 09:05:32 +00:00
Gernot Schulz
381460936b Merge pull request #29866 from overleaf/gs-jenkins-e2e-issues
Create GitHub issues from failed E2E test pipelines

GitOrigin-RevId: cad29c2f2388e04922e51039297281dc22cfd869
2025-11-27 09:05:49 +00:00
Rebeka Dekany
b4bfff1b67 Improve Server Pro tests to use semantic selectors (#29790)
* Replace placeholders with labels

* Add 'Close dialog' label to modal close button to distinguish from footer Close button

* Add and translate heading on the not found page

* Update textarea to have id matching label's for attribute
Simplify test for template description textarea

* Label PDF zoom level dropdown button

* Improve test selectors to use semantic roles and accessible names

GitOrigin-RevId: d215ddca30ddf844cfffbcf0e528a601b134d772
2025-11-25 09:05:48 +00:00
Miguel Serrano
fb8d45d1f0 [CE/SP] Hotfix 5.5.7/6.0.1 (#29621)
Addresses docker configuration issues

Updates min mongo version checks in 6.0.1

GitOrigin-RevId: 7d799614520fb681f3641d47f2a6af3c2a09a1a8
2025-11-20 09:05:34 +00:00
Mathias Jakobsen
06a1fc32ec Merge pull request #29679 from overleaf/mj-references-server-pro
[server-pro] Stop running references in server pro

GitOrigin-RevId: 41a9c3ca025bb3b631c3007c88f0fea6efbbe4fb
2025-11-19 09:05:52 +00:00
Tim Down
41d120d8f1 Merge pull request #29038 from overleaf/td-eslint-e2e-tests
Enable ESLint for all end-to-end tests

GitOrigin-RevId: 5d085f52fabcc794b0457edbbb551500477d4110
2025-11-19 09:05:24 +00:00
Brian Gough
f3d0c6920f Merge pull request #29692 from overleaf/dependabot-npm_and_yarn-js-yaml-4.1.1
Bump js-yaml from 4.1.0 to 4.1.1

GitOrigin-RevId: eaa7b5b0a6ddcd111f280d3ef122b8cdf0072ae5
2025-11-18 09:04:51 +00:00
Malik Glossop
65419ad6f1 Merge pull request #29520 from overleaf/mag-tool-tip-casing
Update toolbar tooltips

GitOrigin-RevId: 80d3fa906776684275c856d1a74171d5b8a4f65a
2025-11-12 09:05:23 +00:00
Miguel Serrano
bfed1ac2ae [CE/SP] Rebuild base image (#29422)
GitOrigin-RevId: fa9ec39481a766ce3fa0f58c5f7db6267d23659c
2025-10-30 11:35:47 +00:00
Miguel Serrano
18fc51bfa4 Merge pull request #29361 from overleaf/msm-hotfix-5-5-6
[CE/SP] Hotfix 5.5.6

GitOrigin-RevId: f5390576b4ea0c9d7e5a2c145130b3f01a8bc431
2025-10-29 09:06:22 +00:00
Miguel Serrano
a0ad073785 Merge pull request #29265 from overleaf/msm-bump-dockerfilebase
[SP] Rebuild `Dockerfile-base`

GitOrigin-RevId: c7f320b3a842a5c72a8c81617e30f1c3deeddb8c
2025-10-23 08:05:34 +00:00
Jakob Ackermann
db1966b0aa [monorepo] switch from cypress-reports to reports (#29183)
* [monorepo] switch from cypress-reports to reports

* [saas-e2e] collect junit reports from new editor tests

* [saas-e2e] simplify setup for semaphore variable in Jenkins pipeline

We do not retry pipelines anymore.

* [saas-e2e] put new editor tests into their own namespace

GitOrigin-RevId: 1869310bf58f0b5b0081dcae2f16ec1a267caec6
2025-10-21 08:06:13 +00:00
Jakob Ackermann
72b8f9b9d2 [server-ce] test: align build Jenkins triggers with saas-e2e (#29198)
GitOrigin-RevId: 55e35ca7f45d2b732aefa04560d5df95d8e8c034
2025-10-20 08:05:54 +00:00
Jakob Ackermann
a4e29d5380 [monorepo] don't fight with prettier, do not run on json files (#29135)
I've tried a lots of variants for the ignore rule. It does not work.

GitOrigin-RevId: 08bf3df1d2629dcfc6eccc98df098ce094466d5b
2025-10-20 08:05:11 +00:00
Brian Gough
729e0f5ac9 move migrations to shared location (#28306)
* fix: correct typedef for Document in helpers.mjs

* add move-migrations codemod

* update migration paths to use shared migrations directory

* move migrations to shared location

* fix: update Dockerfile and docker-compose.ci.yml to include migrations directory

* feat: add migrations tool to workspaces in package.json

* [monorepo] Fix order of docker ignore rules

* [web] remove unused docker ignore file

* [monorepo] replace old references to migrations folder

* [server-ce] copy migrations from new place

* [migrations] Inline web scripts

Co-authored-by: Brian Gough <brian.gough@overleaf.com>

* [migrations] move three web scripts over

Co-authored-by: Brian Gough <brian.gough@overleaf.com>

* [migrations] add missing collection

Co-authored-by: Brian Gough <brian.gough@overleaf.com>

* [migrations] remove lodash dependency

Co-authored-by: Brian Gough <brian.gough@overleaf.com>

* [migrations] avoid mongodb-legacy dependency

Co-authored-by: Brian Gough <brian.gough@overleaf.com>

* [monorepo] run migrations from tools/migrations

Co-authored-by: Brian Gough <brian.gough@overleaf.com>

* [migrations] simplify migration for adding gitBridge feature to users

* [monorepo] run migrations from tests in all the services

* [migrations] add Jenkins pipeline for linting/formatting

* [monorepo] fixup running web migrations everywhere

* [monorepo] trigger Jenkins builds on changes to mongo migrations

* [migrations] add Jenkins pipeline for linting/formatting

* [monorepo] build scripts: update devDependencies before deps scanning

* [monorepo] build scripts: formerly depend on tools/migrations

* [monorepo] run eslint on .mjs files

* [migrations] enable more eslint rules and fix all the errors

* [rake] fix migrations:list task

---------

Co-authored-by: Jakob Ackermann <jakob.ackermann@overleaf.com>
GitOrigin-RevId: 14cf69cc1b9405bbc75adbb9a000e555500e0614
2025-10-16 08:07:37 +00:00
Antoine Clausse
584c23628c [web] Check adminPrivilegeAvailable to show "Project URL lookup" (#29020)
* Check `adminPrivilegeAvailable` to show "Project URL lookup"

This is the correct check as it's what used to decide if the AdminPanelRouter should be included:
ffa200d595/services/web/modules/admin-panel/index.mjs (L14-L15)

* Add "it displays expected admin menu items" to e2e tests

* Don't expect "Project URL lookup" in CE

* Revert "Don't expect "Project URL lookup" in CE"

This reverts commit 467cccbf6c0d538c386d459403c521e3f62cfee2.

* Make "Project URL Lookup" capitalization consistent

GitOrigin-RevId: ed5c219e9b5912a4c324cf9dce58061b58d911b0
2025-10-15 08:07:21 +00:00
Jakob Ackermann
15a6e8ba04 [monorepo] use content hash as docker image cache key (#29046)
* [monorepo] remove docker-repos flag from build scripts

* [monorepo] use content hash as docker image cache key

* [packer] jenkins-worker: populate build cache for all services

* [v1] adopt smarter docker caching

* [latexqc] adopt smarter docker caching

* [monorepo] refresh docker cache in Jenkins

* [packer] jenkins-worker: increase disk size

* [monorepo] run jenkins_docker_build_cache as Jenkins user for v1

* [monorepo] define MONOREPO at the top of all the Makefiles

* [monorepo] add --build-arg BUILDKIT_INLINE_CACHE=1 everywhere

GitOrigin-RevId: 8110c6e68727a52ea80f3ec71711d30e17d69499
2025-10-15 08:06:41 +00:00
Jakob Ackermann
ca498ed047 [server-ce] trigger Server Pro E2E tests for all web module changes (#29056)
The rake deploy:app task is expecting a build for all web changes.
Triggering a few extra Server Pro E2E test runs is cheaper than making
the rake task smarter.

GitOrigin-RevId: a8380417d4a323b3d2a008eeb6ee26bc0ad151d9
2025-10-15 08:06:10 +00:00
Jakob Ackermann
fd0d21fbbd [monorepo] migrate build scripts to Jenkins (#29019)
* [monorepo] migrate build scripts to Jenkins

* [fraud-dash] fix integration with monorepo

GitOrigin-RevId: 6a30ec5ea68a1eae9b663faf9ccdc741ec7f9cf8
2025-10-13 08:07:11 +00:00
Jakob Ackermann
2390823a30 [monorepo] run Jenkins cleanup in parallel (#29015)
GitOrigin-RevId: 5e0df1cec874950b91edf86a2ca40b358366a897
2025-10-13 08:06:58 +00:00
Jakob Ackermann
d7623b576f [monorepo] refactor retries in Jenkins to step level (#29008)
* [monorepo] refactor retries in Jenkins to step level

Change the junit reports to use step specific file names. The [hash]
template option was neat in getting unique file names, but results in
duplicate test reports on retry.

* [patches] add support for .cjs config files for mocha-multi-reporters

GitOrigin-RevId: 3a749441470b5ba633e71319589606cfbe860952
2025-10-13 08:06:37 +00:00
Tim Down
7aa66b260c Merge pull request #28541 from overleaf/td-notifications-app-ts
Change notifications app.js to TypeScript

GitOrigin-RevId: cb6195e2e8c8cd89e1a954bfcb1911929440d6ca
2025-10-13 08:05:36 +00:00
Miguel Serrano
d54efe78f7 [CE/SP] Fix default footer (#28947)
* [CE/SP] Fix default footer

Fixes the default `right_footer`. Only 'text' should be defined when it contains HTML code.

* Remove font-awesome github icon

* Added acceptance test

GitOrigin-RevId: 1a1ba04673f35affcec4bb17bc7cd860d589b13f
2025-10-13 08:05:28 +00:00
Jakob Ackermann
e03ca5a3a8 [server-ce] tests: migrate host-admin to ESM, zod and npm-workspaces (#28838)
* [server-ce] tests: migrate host-admin to ESM, zod and npm-workspaces

* [server-ce] test: use import.meta.dirname

Co-authored-by: Eric Mc Sween <eric.mcsween@overleaf.com>

* [server-ce] test: fix zod schema for docker compose endpoint

---------

Co-authored-by: Eric Mc Sween <eric.mcsween@overleaf.com>
GitOrigin-RevId: d490948693f341210c0ab5c2947db7c9a17775ef
2025-10-07 08:07:06 +00:00
Antoine Clausse
72c02bbd98 [e2e] Prevent slashes in generated project names (#28835)
* Prevent slashes in generated project names by using base64url encoding (replaces `+` and `/` by `-` and `_`)

* Keep base64 (Missing baseUrl in compilerOptions) and replace the slash manually

GitOrigin-RevId: 62217873de8d1e00e72927a5195338ad92c09769
2025-10-03 08:06:56 +00:00
Jakob Ackermann
5fe9d3d6e9 [monorepo] migrate monorepo checks to Jenkins (#28765)
GitOrigin-RevId: ebc3db95cebe99226f8de0f66c1830eb5d78e26c
2025-10-01 08:06:28 +00:00
Jakob Ackermann
e05ec0321b [server-pro] extend hotfix 5.5.5: avoid creating user_files directory (#28738)
* [WIP] restore 100_make_overleaf_data_dirs.sh

* [WIP] patch for hotfix 5.5.5

* Revert "[WIP] patch for hotfix 5.5.5"

This reverts commit cc83a526ecd86ed7b1a0e061b074d2fb15d4d672.

* Revert "[WIP] restore 100_make_overleaf_data_dirs.sh"

This reverts commit e9b0597fe8451e9ef1deaf7ed31790f7d7fc996e.

* [server-pro] extend hotfix 5.5.5: avoid creating user_files directory

* [server-ce] run binary files migration in CI

GitOrigin-RevId: ac5bb86df92b441201c69dfac6b302058b501d8e
2025-09-29 08:07:01 +00:00
Jakob Ackermann
a51ba7a7d5 [server-ce] tests: add junit integration for Jenkins (#28732)
GitOrigin-RevId: b4c96ad71a02bf57c184a8031f475e3d1548c58a
2025-09-29 08:06:46 +00:00
Jakob Ackermann
2db902bdd2 [monorepo] remove debug logging for mongo containers (#28716)
GitOrigin-RevId: 5034cadca5933c6c29c190aa171f52b71216ec6d
2025-09-29 08:06:37 +00:00
Miguel Serrano
dc1203e2bd [CE/SP] Rebuild base image (#28727)
Update epoch ENV to trigger a rebuild

GitOrigin-RevId: 5c46547cc1699e3ad916477107a7c035984ac423
2025-09-29 08:06:32 +00:00
Jakob Ackermann
3b232ca419 [server-pro] add caching to docker build (#27887)
GitOrigin-RevId: 26a5f8b66f710afec3aedb5e55d205095d6e0a7d
2025-09-29 08:05:41 +00:00
Rebeka Dekany
3b5ea89a1c Update loading spinner status (#28177)
* Update test for the loading spinner component

* Create a story for the loading spinner component

* Move role and use CSS for spacing instead

* Add a classname prop

* Reuse LoadingSpinner

* Use OLSpinner instead of Spinner

* Use data-testid since status role was moved

* Wait for journals to load

* Use `isLoading` prop instead and fix the button's height

* Use `isLoading` prop instead

* Use LoadingSpinner instead and remove spacing

* Update test for the loading spinner component

* Use `isLoading` prop instead

* Add aria-describedby to layout button for processing state

* Replace `spinner` to `ol-spinner`

* Scope status

* Remove redundant `div.loading`

---------

Co-authored-by: Antoine Clausse <antoine.clausse@overleaf.com>
GitOrigin-RevId: 8f43b991f8f458b2abd5a4661913ac9b972d892a
2025-09-26 08:05:46 +00:00
Rebeka Dekany
a8734e191e Update learn wiki e2e tests for current navigation structure (#28685)
GitOrigin-RevId: d7d87bf712e0ed399c5fe3a7108db5c47d641ce8
2025-09-25 08:05:49 +00:00
Jakob Ackermann
a6e9a5c7e9 [monorepo] run prettier on Jenkinsfiles (#28565)
* [monorepo] consolidate .editorconfig files at the root

* [monorepo] run prettier on Jenkinsfiles

* [saas-e2e] increase timeout for XeTeX compile

GitOrigin-RevId: 48aa82f7c81611899837753ae92c7732998d4ca5
2025-09-19 08:07:49 +00:00
Jakob Ackermann
66934586b1 [monorepo] reset Jenkins pipeline vars (#28573)
GitOrigin-RevId: 9523895a16262fc7d9b8eecc716e72cdb6cb5d1a
2025-09-19 08:07:44 +00:00
Jakob Ackermann
74746a096c [monorepo] rebuild lezer output as part of 'make install' (#28545)
* [monorepo] rebuild lezer output as part of 'make install'

* [monorepo] run 'make install' with high concurrency in Jenkins

* [monorepo] rebuild lezer parser output once

* [monorepo] headless npm run

* [web] update docs for lezer

GitOrigin-RevId: f385bb8a9cdab1a6bfc28a8843b5128ceec364ec
2025-09-18 08:06:02 +00:00
Miguel Serrano
f1dc6ec155 Upgrade aws-sdk to v3 (re-attempt) (#28410)
* Upgrade `aws-sdk` to v3

Also vendored nodemailer-ses-transport

* Moved default region to CE settings

* Ensure timeout is added to `requestHandler` and `region` is populated

* fix unsigned header in signed URL request

The x-amz-acl header is not needed when using the signed request,
as ACL are already defined when creating the signed URL in
PutObjectCommand constructor.

* Add default AWS region for latexqc service

* remove unnecessary region in compose files

* Use AWS_REGION=us-west-2 for history-v1

* prevent retries uploading streams with PutObjectCommand

* Remove AWS SDK JS message suppression

GitOrigin-RevId: 6fda6f02160023ffed76143397bbd965f86a9509
2025-09-18 08:05:22 +00:00
Jakob Ackermann
1fe750910e [monorepo] add 3 retries to all the Jenkins pipelines (#28516)
GitOrigin-RevId: d52cb329481586daddade00cecc91875e9ae0de6
2025-09-17 08:05:38 +00:00
Jakob Ackermann
a13fca15d3 [saas-e2e] harden recompiling (#28514)
* [saas-e2e] harden recompiling

* [server-ce] import changes from SaaS e2e tests

GitOrigin-RevId: 9b86ed864457b068b8dded94a7e12658a047aac2
2025-09-17 08:05:34 +00:00
Antoine Clausse
cfcfa6cb74 Remove outdated overrides (sha.js, form-data) (#28258)
* Update `isomorphic-git` and remove `sha.js` overrides

It was fixed in https://github.com/isomorphic-git/isomorphic-git/pull/2190

* `bin/npm update @cypress/request` and remove override

Bumps `form-data` to `~4.0.4` which is safe per https://github.com/overleaf/internal/security/dependabot/1533

Now it has the safe versions (2.5.5 and 4.0.4):
```
$ npm ls form-data

overleaf@ /Users/aclausse/Code/internal
├─┬ @overleaf/analytics@ -> ./services/analytics
│ └─┬ request@2.88.2 overridden
│   └── form-data@2.5.5 overridden
├─┬ @overleaf/fetch-utils@0.1.0 -> ./libraries/fetch-utils
│ └─┬ @types/node-fetch@2.6.11
│   └── form-data@4.0.4 overridden
├─┬ @overleaf/metrics@4.2.0 -> ./libraries/metrics
│ └─┬ @google-cloud/profiler@6.0.3
│   └─┬ @google-cloud/common@5.0.2
│     └─┬ retry-request@7.0.2 overridden
│       └─┬ @types/request@2.48.12 overridden
│         └── form-data@2.5.5 overridden
├─┬ @overleaf/saas-e2e@ -> ./tools/saas-e2e
│ └─┬ mailtrap@3.4.0
│   └─┬ axios@1.8.4
│     └── form-data@4.0.4 deduped
├─┬ @overleaf/tpdsworker@ -> ./services/tpdsworker
│ └─┬ chai-http@4.4.0
│   └─┬ superagent@8.1.2
│     └── form-data@4.0.4 deduped
├─┬ @overleaf/web@ -> ./services/web
│ └─┬ jsdom@19.0.0
│   └── form-data@4.0.4 deduped
├─┬ latexqc@0.0.1 -> ./services/latexqc
│ └─┬ vitest@3.1.2
│   └─┬ jsdom@20.0.3
│     └── form-data@4.0.4 deduped
└─┬ overleaf-editor@1.0.0 -> ./services/history-v1
  └─┬ swagger-tools@0.10.4 overridden
    ├─┬ json-refs@3.0.15
    │ └─┬ path-loader@1.0.12
    │   └─┬ superagent@7.1.6 overridden
    │     └── form-data@4.0.4 deduped
    └─┬ superagent@3.8.3 overridden
      └── form-data@2.5.5 overridden
```

* `bin/npm update @types/request` and remove override

Bumps `form-data` to `2.5.5` which is safe per https://github.com/overleaf/internal/security/dependabot/1537

* Remove `form-data` overrides that aren't necessary

```
$ npm ls form-data

overleaf@ /Users/aclausse/Code/internal
├─┬ @overleaf/analytics@ -> ./services/analytics
│ └─┬ request@2.88.2 overridden
│   └── form-data@2.5.5 invalid: "~2.3.2" from node_modules/request
├─┬ @overleaf/fetch-utils@0.1.0 -> ./libraries/fetch-utils
│ └─┬ @types/node-fetch@2.6.11
│   └── form-data@4.0.4
├─┬ @overleaf/metrics@4.2.0 -> ./libraries/metrics
│ └─┬ @google-cloud/profiler@6.0.3
│   └─┬ @google-cloud/common@5.0.2
│     └─┬ retry-request@7.0.2
│       └─┬ @types/request@2.48.13
│         └── form-data@2.5.5
├─┬ @overleaf/saas-e2e@ -> ./tools/saas-e2e
│ ├─┬ cypress@13.13.2
│ │ └─┬ @cypress/request@3.0.9
│ │   └── form-data@4.0.4 deduped
│ └─┬ mailtrap@3.4.0
│   └─┬ axios@1.8.4
│     └── form-data@4.0.4 deduped
├─┬ @overleaf/tpdsworker@ -> ./services/tpdsworker
│ └─┬ chai-http@4.4.0
│   └─┬ superagent@8.1.2
│     └── form-data@4.0.4 deduped
├─┬ @overleaf/web@ -> ./services/web
│ └─┬ jsdom@19.0.0
│   └── form-data@4.0.4 deduped
├─┬ latexqc@0.0.1 -> ./services/latexqc
│ └─┬ vitest@3.1.2
│   └─┬ jsdom@20.0.3
│     └── form-data@4.0.4 deduped
└─┬ overleaf-editor@1.0.0 -> ./services/history-v1
  └─┬ swagger-tools@0.10.4 overridden
    ├─┬ json-refs@3.0.15
    │ └─┬ path-loader@1.0.12
    │   └─┬ superagent@7.1.6
    │     └── form-data@4.0.4 deduped
    └─┬ superagent@3.8.3
      └── form-data@2.5.5
```

* Remove 2025-08-07-form-data-cypress.json

* Reapply the form-data override in request@2.88.2

GitOrigin-RevId: 89143de1a53226dc43fc474db443fc7d7698908a
2025-09-05 08:05:17 +00:00
Andrew Rumble
8f37ed1113 Merge pull request #27050 from overleaf/renovate-definitelytyped
[Platform] Update definitelyTyped

GitOrigin-RevId: 8ef840733942a909af6e6b1fee3e3fc01e0dc61d
2025-09-04 08:04:53 +00:00
Rebeka Dekany
97d8f73749 Update selectors to improve CE test stability (#28096)
* Update selectors to improve test stability

* Update selectors to improve test stability

* Use plain string matchers

* Fix test

* [monorepo] use plain string matchers everywhere

* [web] remove Kb/ prefix from title of learn wiki links

---------

Co-authored-by: Jakob Ackermann <jakob.ackermann@overleaf.com>
GitOrigin-RevId: 12e13c39822795338a3bee20236454f9948e6221
2025-09-02 08:04:56 +00:00