Skip to content

build(deps): bump ueberdb2 from 5.0.48 to 6.0.2#7734

Open
dependabot[bot] wants to merge 4 commits into
developfrom
dependabot/npm_and_yarn/ueberdb2-6.0.2
Open

build(deps): bump ueberdb2 from 5.0.48 to 6.0.2#7734
dependabot[bot] wants to merge 4 commits into
developfrom
dependabot/npm_and_yarn/ueberdb2-6.0.2

Conversation

@dependabot
Copy link
Copy Markdown
Contributor

@dependabot dependabot Bot commented on behalf of github May 11, 2026

Bumps ueberdb2 from 5.0.48 to 6.0.2.

Commits
  • da9a3d0 6.0.2
  • eea0844 feat: remove old vite import
  • ead691c 6.0.1
  • b852144 feat: use esm only (#951)
  • 3af918b build(deps-dev): bump @​types/node from 25.6.0 to 25.6.2 (#950)
  • d8a6108 build(deps): bump mongodb from 7.1.1 to 7.2.0 (#948)
  • bf10294 build(deps): bump cassandra-driver from 4.8.0 to 4.9.0 (#949)
  • 4cc6281 build(deps-dev): bump oxlint from 1.60.0 to 1.63.0 (#946)
  • 03af6bc build(deps): bump @​elastic/elasticsearch from 9.3.4 to 9.4.0 (#947)
  • bc4f1db build(deps-dev): bump rolldown from 1.0.0-rc.16 to 1.0.0 (#945)
  • Additional commits viewable in compare view

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

Bumps [ueberdb2](https://github.com/ether/ueberDB) from 5.0.48 to 6.0.2.
- [Changelog](https://github.com/ether/ueberDB/blob/main/CHANGELOG.md)
- [Commits](ether/ueberDB@v5.0.48...v6.0.2)

---
updated-dependencies:
- dependency-name: ueberdb2
  dependency-version: 6.0.2
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot Bot added dependencies Pull requests that update a dependency file javascript Pull requests that update Javascript code labels May 11, 2026
ueberdb2 v6 ships ESM-only with an "import"-only exports map, which
broke `require('ueberdb2')` from src/'s CJS modules (gen:api crashed
with ERR_PACKAGE_PATH_NOT_EXPORTED). v6 also tightened the public
types: get/getSub now return `Promise<unknown>` instead of `any`, and
remove() no longer accepts the deprecated callback argument.

- DB.ts, ImportEtherpad.ts: load Database via dynamic `import()` so
  CJS consumers can pull in the ESM-only package; keep type imports.
- Pad.ts: switch Database to `import type`, cast `unknown` results
  from db.get()/getSub() at the four use sites that compose against
  typed values, and drop the deprecated `null` second argument from
  the two db.remove() calls.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
ueberdb2 v6 moved its DB drivers from `dependencies` to optional
`peerDependencies`, so `dirty-ts` is no longer installed transitively.
The CI backend tests on Windows (and any new install using the
settings.json.template default `dbType: "dirty"`) need it.

The other 12 drivers from v5's transitive set are already direct deps
in src/package.json. This commit just covers the one that was missed.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
v6.0.3 ships ether/ueberDB#958 — unwrap the CJS `__esModule`/default
wrapping on `import Dirty from 'dirty-ts'`. Without it, every consumer
using `dbType: "dirty"` (the settings.json.template default) crashes
at init with `TypeError: Dirty is not a constructor`.

Bumped in src/package.json and bin/package.json; lockfile refreshed.
Backend test suite (1115 tests) passes locally against v6.0.3 with
`dbType: "dirty"`.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@qodo-free-for-open-source-projects
Copy link
Copy Markdown

CI Feedback 🧐

A test triggered by this PR failed. Here is an AI-generated analysis of the failure:

Action: Linux with Plugins (25)

Failed stage: Run the backend tests [❌]

Failed test name: /home/runner/work/etherpad/etherpad/src/tests/backend/specs/export.ts returns 500 on export error

Failure summary:

The action failed because the backend test suite (pnpm test, running Mocha) had multiple test
failures due to timeouts and a teardown crash.

Key failures shown in the log:
- 11 tests in src/tests/backend/specs/export.ts and
src/tests/backend/specs/import.ts timed out after the 120000ms Mocha timeout (lines ~5496–5560).
These are the DOC/DOCX/PDF export and import round-trip tests (related to #7538).
- The export tests
appear to hang because LibreOffice conversion is failing/misconfigured earlier in the run:
LibreOffice reports “Conversion failed” with Command exited with code 1 and the command being
executed is /bin/false --headless ... --convert-to odt ... (lines ~1134–1144). This indicates the
configured soffice/converter command is effectively /bin/false, so conversions cannot complete
successfully.
- After tests, the "after all" hook in "{root}" failed with TypeError: Cannot read
properties of null (reading 'metrics') at node/db/DB.ts:47:57, triggered during shutdown via
node/server.ts (lines ~5561–5571). This caused additional failure during teardown.
- The overall
test command exited non-zero with [ERR_PNPM_RECURSIVE_RUN_FIRST_FAIL] ... mocha ... Exit status 12,
so the GitHub Action step failed with exit code 12 (lines ~5577–5582).

Relevant error logs:
1:  ##[group]Runner Image Provisioner
2:  Hosted Compute Agent
...

179:  yarn: 1.22.22
180:  ##[endgroup]
181:  [command]/home/runner/setup-pnpm/node_modules/.bin/bin/pnpm store path --silent
182:  /home/runner/setup-pnpm/node_modules/.bin/store/v11
183:  Cache hit for: node-cache-Linux-x64-pnpm-4012d9aa2a6a4aa97595086c50011b51cd0f2d3f89e93cbc1d66f7839b48f6ff
184:  Received 175571534 of 175571534 (100.0%), 180.0 MBs/sec
185:  Cache Size: ~167 MB (175571534 B)
186:  [command]/usr/bin/tar -xf /home/runner/work/_temp/53c9b8c7-b199-467b-ac1c-de77ade7cfea/cache.tzst -P -C /home/runner/work/etherpad/etherpad --use-compress-program unzstd
187:  Cache restored successfully
188:  Cache restored from key: node-cache-Linux-x64-pnpm-4012d9aa2a6a4aa97595086c50011b51cd0f2d3f89e93cbc1d66f7839b48f6ff
189:  ##[group]Run awalsh128/cache-apt-pkgs-action@v1.6.0
190:  with:
191:  packages: libreoffice libreoffice-pdfimport
192:  version: 1
193:  execute_install_scripts: false
194:  empty_packages_behavior: error
195:  debug: false
...

202:  �[36;1m  "$VERSION" \�[0m
203:  �[36;1m  "$EXEC_INSTALL_SCRIPTS" \�[0m
204:  �[36;1m  "$DEBUG" \�[0m
205:  �[36;1m  "$ADD_REPOSITORY" \�[0m
206:  �[36;1m  "$PACKAGES"�[0m
207:  �[36;1mif [ -f ~/cache-apt-pkgs/cache_key.md5 ]; then�[0m
208:  �[36;1m  echo "CACHE_KEY=$(cat ~/cache-apt-pkgs/cache_key.md5)" >> $GITHUB_ENV�[0m
209:  �[36;1melse�[0m
210:  �[36;1m  echo "CACHE_KEY=" >> $GITHUB_ENV�[0m
211:  �[36;1mfi�[0m
212:  shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0}
213:  env:
214:  PNPM_HOME: /home/runner/setup-pnpm/node_modules/.bin
215:  VERSION: 1
216:  EXEC_INSTALL_SCRIPTS: false
217:  EMPTY_PACKAGES_BEHAVIOR: error
218:  DEBUG: false
...

565:  ✔ author already exists, no pads
566:  ✔ author already exists, on different pad
567:  ✔ author already exists, on same pad
568:  enforces consistent pad ID
569:  ✔ pad record has different pad ID
570:  ✔ globalAuthor record has different pad ID
571:  ✔ pad rev record has different pad ID
572:  order of records does not matter
573:  ✔ [0,1,2]
574:  ✔ [0,2,1]
575:  ✔ [1,0,2]
576:  ✔ [1,2,0]
577:  ✔ [2,0,1]
578:  ✔ [2,1,0]
579:  old .etherpad imports without author metadata
580:  ✔ imports without error when revision lacks meta.author
581:  ✔ getRevisionAuthor returns empty string for missing author
582:  exportEtherpadAdditionalContent
583:  ✔ imports from custom prefix
584:  ✔ rejects records for pad with similar ID
585:  /home/runner/work/etherpad/etherpad/src/tests/backend/specs/LinkInstaller.ts
586:  readFileSync with plain paths (bug fix)
587:  ✔ reads a plugin package.json using a plain file path and utf-8
588:  ✔ path.join produces a plain string path, not a URL object
589:  addSubDependency-style resolution
590:  ✔ recursively resolves nested dependencies from package.json files
591:  error handling when package.json is missing
592:  ✔ logs an error instead of crashing when package.json does not exist
593:  /home/runner/work/etherpad/etherpad/src/tests/backend/specs/Pad.ts
...

749:  ✔ does not start until needed
750:  ✔ fewer than buffer size
751:  ✔ exactly buffer size
752:  ✔ more than buffer size
753:  ✔ buffered Promise rejections are suppressed while iterating (101ms)
754:  ✔ buffered Promise rejections are unsuppressed when iteration completes (101ms)
755:  map
756:  ✔ empty
757:  ✔ does not start until needed
758:  ✔ works
759:  /home/runner/work/etherpad/etherpad/src/tests/backend/specs/anonymizeAuthor.ts
760:  ✔ zeroes the display identity on globalAuthor:<id>
761:  ✔ drops token2author and mapper2author mappings pointing at the author
762:  ✔ is idempotent — second call returns zero counters
763:  ✔ returns zero counters for an unknown authorID
764:  ✔ re-runs the sweep when a prior call errored before setting erased=true
765:  /home/runner/work/etherpad/etherpad/src/tests/backend/specs/anonymizeIp.ts
...

861:  textColorFromBackgroundColor — invariant
862:  ✔ always picks whichever of black/white gives the higher contrast
863:  /home/runner/work/etherpad/etherpad/src/tests/backend/specs/compactPad.ts
864:  API.compactPad()
865:  ✔ collapses all history when keepRevisions is omitted
866:  ✔ keeps only the last N revisions when keepRevisions is a number
867:  ✔ rejects negative keepRevisions
868:  ✔ rejects non-numeric keepRevisions
869:  ✔ rejects fractional keepRevisions
870:  ✔ refuses to run when cleanup.enabled is false
871:  HTTP API dispatch (1.3.1)
872:  ✔ passes keepRevisions from query string into compactPad
873:  ✔ collapses all history when keepRevisions is absent from URL
874:  runCompactAll (bin/compactAllPads loop)
875:  ✔ parses --keep / --dry-run / no args
876:  �[91m[2026-05-12T09:42:55.853] [ERROR] settings - �[39m--keep expects a non-negative integer; got abc
877:  �[91m[2026-05-12T09:42:55.853] [ERROR] settings - �[39m--keep expects a non-negative integer; got -1
878:  ✔ rejects --keep with non-integer / negative / unknown args
879:  ✔ compacts every pad and tallies before/after revisions
880:  ✔ honours --keep N by passing it through to compactPad
881:  ✔ --dry-run does not call compactPad
882:  ✔ keeps going when one pad fails to compact
883:  ✔ keeps going when one pad fails the pre-flight count
884:  ✔ reports listAllPads failure without iterating
885:  ✔ handles an empty instance
886:  ✔ end-to-end against the real HTTP handler (41ms)
887:  runCompactStale (bin/compactStalePads loop)
888:  ✔ parses --older-than / --keep / --dry-run
889:  �[91m[2026-05-12T09:42:55.898] [ERROR] settings - �[39m--older-than is required
890:  �[91m[2026-05-12T09:42:55.898] [ERROR] settings - �[39m--older-than is required
891:  �[91m[2026-05-12T09:42:55.898] [ERROR] settings - �[39m--older-than expects a non-negative integer; got abc
892:  �[91m[2026-05-12T09:42:55.898] [ERROR] settings - �[39m--older-than expects a non-negative integer; got -1
893:  ✔ rejects missing / invalid --older-than and unknown args
894:  ✔ only compacts pads older than the cutoff
895:  ✔ honours --keep N for stale pads
896:  ✔ --dry-run does not call compactPad on stale pads
897:  ✔ keeps going when one stale pad fails to compact
898:  ✔ counts a getLastEdited failure as a failure but keeps going
899:  ✔ reports listAllPads failure without iterating
900:  ✔ handles an empty instance
901:  ✔ handles an instance where every pad is fresh
902:  ✔ skips a pad that gets edited between selection and compaction
903:  ✔ counts a getLastEdited recheck failure as a failure
904:  ✔ --older-than 0 treats every pad as stale
...

932:  ✔ text matches
933:  ✔ alines match
934:  ✔ attributes are sorted in canonical order
935:  A single completely empty line break within an ol should reset count if OL is closed off..
936:  ✔ text matches
937:  ✔ alines match
938:  ✔ attributes are sorted in canonical order
939:  A single <p></p> should create a new line
940:  ✔ text matches
941:  ✔ alines match
942:  ✔ attributes are sorted in canonical order
943:  Tests if ols properly get line numbers when in a normal OL #2
944:  ✔ text matches
945:  ✔ alines match
946:  ✔ attributes are sorted in canonical order
947:  First item being an UL then subsequent being OL will fail
948:  - text matches
...

1120:  at Object.opAttributeValue (/home/runner/work/etherpad/etherpad/src/static/js/Changeset.ts:1187:12)
1121:  at Object.getLineHTMLForExport [as hook_fn] (/home/runner/work/etherpad/etherpad/src/plugin_packages/.versions/ep_plugin_helpers@0.5.2/attributes-server.js:18:28)
1122:  at <anonymous> (/home/runner/work/etherpad/etherpad/src/static/js/pluginfw/hooks.ts:273:18)
1123:  at new Promise (<anonymous>)
1124:  at callHookFnAsync (/home/runner/work/etherpad/etherpad/src/static/js/pluginfw/hooks.ts:236:16)
1125:  at <anonymous> (/home/runner/work/etherpad/etherpad/src/static/js/pluginfw/hooks.ts:351:54)
1126:  at Array.map (<anonymous>)
1127:  at Object.exports.aCallAll (/home/runner/work/etherpad/etherpad/src/static/js/pluginfw/hooks.ts:351:13)
1128:  at getHTMLFromAtext (/home/runner/work/etherpad/etherpad/src/node/utils/ExportHtml.ts:504:19)
1129:  at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
1130:  at async getPadHTML (/home/runner/work/etherpad/etherpad/src/node/utils/ExportHtml.ts:43:10)
1131:  at async Object.exports.getPadHTMLDocument (/home/runner/work/etherpad/etherpad/src/node/utils/ExportHtml.ts:522:14)
1132:  at async Object.exports.doExport (/home/runner/work/etherpad/etherpad/src/node/handler/ExportHandler.ts:80:16)
1133:  at async <anonymous> (/home/runner/work/etherpad/etherpad/src/node/hooks/express/importexport.ts:72:9)
1134:  �[32m[2026-05-12T09:42:56.435] [INFO] LibreOffice - �[39m[2924] Converting /tmp/etherpad_export_2366997106.html to odt in /tmp
1135:  �[91m[2026-05-12T09:42:56.436] [ERROR] LibreOffice - �[39m[2924] Conversion failed: Error: Command exited with code 1: /bin/false --headless --invisible --nologo --nolockcheck --writer --convert-to odt /tmp/etherpad_export_2366997106.html --outdir /tmp
1136:  at exports (/home/runner/work/etherpad/etherpad/src/node/utils/run_cmd.ts:124:48)
1137:  at doConvertTask (/home/runner/work/etherpad/etherpad/src/node/utils/LibreOffice.ts:38:13)
1138:  at /home/runner/work/etherpad/etherpad/node_modules/.pnpm/async@3.2.6/node_modules/async/dist/async.js:151:38
1139:  at /home/runner/work/etherpad/etherpad/node_modules/.pnpm/async@3.2.6/node_modules/async/dist/async.js:4017:13
1140:  at Object.process (/home/runner/work/etherpad/etherpad/node_modules/.pnpm/async@3.2.6/node_modules/async/dist/async.js:1680:21)
1141:  at /home/runner/work/etherpad/etherpad/node_modules/.pnpm/async@3.2.6/node_modules/async/dist/async.js:1532:23
1142:  at /home/runner/work/etherpad/etherpad/node_modules/.pnpm/async@3.2.6/node_modules/async/dist/async.js:74:45
1143:  �[91m[2026-05-12T09:42:56.438] [ERROR] settings - �[39mError: Command exited with code 1: /bin/false --headless --invisible --nologo --nolockcheck --writer --convert-to odt /tmp/etherpad_export_2366997106.html --outdir /tmp
1144:  at exports (/home/runner/work/etherpad/etherpad/src/node/utils/run_cmd.ts:124:48)
1145:  at doConvertTask (/home/runner/work/etherpad/etherpad/src/node/utils/LibreOffice.ts:38:13)
1146:  at /home/runner/work/etherpad/etherpad/node_modules/.pnpm/async@3.2.6/node_modules/async/dist/async.js:151:38
1147:  at /home/runner/work/etherpad/etherpad/node_modules/.pnpm/async@3.2.6/node_modules/async/dist/async.js:4017:13
1148:  at Object.process (/home/runner/work/etherpad/etherpad/node_modules/.pnpm/async@3.2.6/node_modules/async/dist/async.js:1680:21)
1149:  at /home/runner/work/etherpad/etherpad/node_modules/.pnpm/async@3.2.6/node_modules/async/dist/async.js:1532:23
1150:  at /home/runner/work/etherpad/etherpad/node_modules/.pnpm/async@3.2.6/node_modules/async/dist/async.js:74:45
1151:  ✔ returns 500 on export error
1152:  native DOCX export (#7538)
1153:  �[32m[2026-05-12T09:42:56.442] [INFO] settings - �[39mExporting pad "testExportPad" in docx format
1154:  �[32m[2026-05-12T09:42:56.443] [INFO] settings - �[39mFound  null  for  testExportPad
1155:  ✔ returns a valid DOCX archive (PK zip signature) (202ms)
1156:  �[32m[2026-05-12T09:42:56.645] [INFO] settings - �[39mExporting pad "testExportPad" in docx format
1157:  �[32m[2026-05-12T09:42:56.645] [INFO] settings - �[39mFound  null  for  testExportPad
1158:  ✔ sends the Word-processing-ml content-type
1159:  native PDF export (#7538)
1160:  �[32m[2026-05-12T09:42:56.682] [INFO] settings - �[39mExporting pad "testExportPad" in pdf format
1161:  �[32m[2026-05-12T09:42:56.682] [INFO] settings - �[39mFound  null  for  testExportPad
1162:  ✔ returns a valid %PDF- document (117ms)
1163:  �[32m[2026-05-12T09:42:56.799] [INFO] settings - �[39mExporting pad "testExportPad" in pdf format
1164:  �[32m[2026-05-12T09:42:56.799] [INFO] settings - �[39mFound  null  for  testExportPad
1165:  ✔ sends application/pdf content-type
1166:  odt without soffice (#7538)
1167:  �[91m[2026-05-12T09:42:56.808] [ERROR] settings - �[39mImpossible to export pad "testExportPad" in odt format. There is no converter configured
1168:  ✔ returns the "not enabled" message for odt
...

2089:  ✔ defer call cb(unrejectedPromise) then defer call to cb(resolvedPromise) (diff. outcomes) -> log+throw
2090:  ✔ defer call cb(unrejectedPromise) then defer call to cb(rejectedPromise) (diff. outcomes) -> log+throw
2091:  ✔ defer call cb(unrejectedPromise) then defer call to cb(rejectedPromise) (same outcome) -> only log
2092:  ✔ defer call cb(unrejectedPromise) then defer call to cb(unresolvedPromise) (diff. outcomes) -> log+throw
2093:  ✔ defer call cb(unrejectedPromise) then defer call cb(unrejectedPromise) (diff. outcomes) -> log+throw
2094:  ✔ defer call cb(unrejectedPromise) then defer call cb(unrejectedPromise) (same outcome) -> only log
2095:  hooks.aCallAll
2096:  basic behavior
2097:  ✔ calls all asynchronously, returns values in order
2098:  ✔ passes hook name
2099:  ✔ undefined context -> {}
2100:  ✔ null context -> {}
2101:  ✔ context unmodified
2102:  aCallAll callback
2103:  ✔ exception in callback rejects
2104:  ✔ propagates error on exception
2105:  ✔ propagages null error on success
2106:  ✔ propagages results on success
...

2219:  ✔ keeps old pads accessible
2220:  �[32m[2026-05-12T09:42:57.918] [INFO] access - �[39m[LEAVE] pad:alreadyexistingpad socket:1gydGttb3H-f8VyTAAAR IP:ANONYMOUS authorID:a.Ekq5iadiF8Q9WOR9
2221:  �[32m[2026-05-12T09:42:57.918] [INFO] access - �[39m[LEAVE] pad:ALREADYexistingPad socket:4VvalfT60O-HQjBUAAAP IP:ANONYMOUS authorID:a.XW77e5BUX1piEPqN
2222:  �[32m[2026-05-12T09:42:57.935] [INFO] access - �[39m[CREATE] pad:maliciousattempt socket:2cbTx0pjZrBVFuHQAAAT IP:ANONYMOUS authorID:a.DF1N5Qq55uybbwGV
2223:  ✔ disallow creation of different case pad-name via socket connection
2224:  �[32m[2026-05-12T09:42:57.938] [INFO] access - �[39m[LEAVE] pad:maliciousattempt socket:2cbTx0pjZrBVFuHQAAAT IP:ANONYMOUS authorID:a.DF1N5Qq55uybbwGV
2225:  /home/runner/work/etherpad/etherpad/src/tests/backend/specs/messages.ts
2226:  CHANGESET_REQ
2227:  �[32m[2026-05-12T09:42:57.963] [INFO] access - �[39m[ENTER] pad:fKdjPqf91F socket:miyfh18YnHhHmWyUAAAV IP:ANONYMOUS authorID:a.eI83WcEdP4Xs1b1y
2228:  �[32m[2026-05-12T09:42:57.975] [INFO] access - �[39m[ENTER] pad:fKdjPqf91F socket:KGs4ih_XI3r6zAklAAAX IP:ANONYMOUS authorID:a.72MrIjv2tqwBYOoi
2229:  ✔ users are unable to read changesets from other pads
2230:  �[32m[2026-05-12T09:42:58.985] [INFO] access - �[39m[LEAVE] pad:fKdjPqf91F socket:miyfh18YnHhHmWyUAAAV IP:ANONYMOUS authorID:a.eI83WcEdP4Xs1b1y
2231:  �[32m[2026-05-12T09:42:58.986] [INFO] access - �[39m[LEAVE] pad:fKdjPqf91F socket:KGs4ih_XI3r6zAklAAAX IP:ANONYMOUS authorID:a.72MrIjv2tqwBYOoi
2232:  �[32m[2026-05-12T09:42:59.002] [INFO] access - �[39m[ENTER] pad:69YbbE7ATL socket:nR33Yn-M_szK-1ylAAAZ IP:ANONYMOUS authorID:a.r6ewXRTL7MXdLWpL
2233:  �[32m[2026-05-12T09:42:59.018] [INFO] access - �[39m[ENTER] pad:69YbbE7ATL socket:Lw04_rWUT_7pZz-WAAAb IP:ANONYMOUS authorID:a.vv5do2ZCWTH1e1WF
2234:  �[91m[2026-05-12T09:43:00.023] [ERROR] socket.io - �[39mError handling pad message from Lw04_rWUT_7pZz-WAAAb: Error: CHANGESET_REQ: rev is not a number
2235:  at Object.exports.handleMessage (/home/runner/work/etherpad/etherpad/src/node/handler/PadMessageHandler.ts:563:11)
...

2244:  �[32m[2026-05-12T09:43:01.064] [INFO] access - �[39m[LEAVE] pad:l1SrTN8baY socket:nRebULX0FgBm4cOpAAAd IP:ANONYMOUS authorID:a.x4tiCP3wwLLEonN5
2245:  �[32m[2026-05-12T09:43:01.065] [INFO] access - �[39m[LEAVE] pad:l1SrTN8baY socket:bbqi4MrmA9tosGUCAAAf IP:ANONYMOUS authorID:a.wT0DELVgSPcCe09s
2246:  �[32m[2026-05-12T09:43:01.081] [INFO] access - �[39m[ENTER] pad:eoBYIrku5K socket:6Z3yqCqvV6-n_bHGAAAh IP:ANONYMOUS authorID:a.O3AbC6jW0QmUB8Df
2247:  �[32m[2026-05-12T09:43:01.096] [INFO] access - �[39m[ENTER] pad:eoBYIrku5K socket:vMIestxWXCzPDIEVAAAj IP:ANONYMOUS authorID:a.108Rj2x7Un392HkG
2248:  ✔ CHANGESET_REQ: revNum 2 is converted to head rev 1 (regression)
2249:  �[32m[2026-05-12T09:43:02.104] [INFO] access - �[39m[LEAVE] pad:eoBYIrku5K socket:6Z3yqCqvV6-n_bHGAAAh IP:ANONYMOUS authorID:a.O3AbC6jW0QmUB8Df
2250:  �[32m[2026-05-12T09:43:02.105] [INFO] access - �[39m[LEAVE] pad:eoBYIrku5K socket:vMIestxWXCzPDIEVAAAj IP:ANONYMOUS authorID:a.108Rj2x7Un392HkG
2251:  USER_CHANGES
2252:  �[32m[2026-05-12T09:43:02.120] [INFO] access - �[39m[ENTER] pad:aRPpcjZZ1m socket:PPtUtD-FLfAqpbKcAAAl IP:ANONYMOUS authorID:a.EJj5dYII8OTBp1Fh
2253:  �[32m[2026-05-12T09:43:02.133] [INFO] access - �[39m[ENTER] pad:aRPpcjZZ1m socket:7If8h3aOnAzKdQHTAAAn IP:ANONYMOUS authorID:a.T0sDW7uVnM7BoN9P
2254:  ✔ changes are applied
2255:  �[32m[2026-05-12T09:43:03.143] [INFO] access - �[39m[LEAVE] pad:aRPpcjZZ1m socket:PPtUtD-FLfAqpbKcAAAl IP:ANONYMOUS authorID:a.EJj5dYII8OTBp1Fh
2256:  �[32m[2026-05-12T09:43:03.143] [INFO] access - �[39m[LEAVE] pad:aRPpcjZZ1m socket:7If8h3aOnAzKdQHTAAAn IP:ANONYMOUS authorID:a.T0sDW7uVnM7BoN9P
2257:  �[32m[2026-05-12T09:43:03.159] [INFO] access - �[39m[ENTER] pad:5THWj0bIdy socket:97PAp3J4JoJFLWUbAAAp IP:ANONYMOUS authorID:a.eXeEJ0yyfirRr2RG
2258:  �[32m[2026-05-12T09:43:03.172] [INFO] access - �[39m[ENTER] pad:5THWj0bIdy socket:ls4og_IsvK7G78tyAAAr IP:ANONYMOUS authorID:a.l8KbTIMNL3xxrSHC
2259:  �[33m[2026-05-12T09:43:04.174] [WARN] message - �[39mFailed to apply USER_CHANGES from author a.eXeEJ0yyfirRr2RG (socket 97PAp3J4JoJFLWUbAAAp) on pad 5THWj0bIdy: Error: Not a changeset: this is not a valid changeset
2260:  at error (/home/runner/work/etherpad/etherpad/src/static/js/Changeset.ts:64:13)
2261:  at unpack (/home/runner/work/etherpad/etherpad/src/static/js/Changeset.ts:363:44)
...

2270:  ✔ retransmission is accepted, has no effect
2271:  �[32m[2026-05-12T09:43:05.214] [INFO] access - �[39m[LEAVE] pad:cLjPK1UEmq socket:6PPjqeLxnCT8yfwbAAAt IP:ANONYMOUS authorID:a.rmvrq57rhnQGJ2L2
2272:  �[32m[2026-05-12T09:43:05.214] [INFO] access - �[39m[LEAVE] pad:cLjPK1UEmq socket:gRXBJtWSUflPUcZWAAAv IP:ANONYMOUS authorID:a.iJJJQLSSKYTIuC4U
2273:  �[32m[2026-05-12T09:43:05.229] [INFO] access - �[39m[ENTER] pad:kcGdHlRIsF socket:-FDk2cQHVfEzjw75AAAx IP:ANONYMOUS authorID:a.cfeP34W9wujE9BSP
2274:  �[32m[2026-05-12T09:43:05.243] [INFO] access - �[39m[ENTER] pad:kcGdHlRIsF socket:KuUPbRyDQKQ1TXz3AAAz IP:ANONYMOUS authorID:a.7tiDGQBG9bdfa512
2275:  ✔ identity changeset is accepted, has no effect
2276:  �[32m[2026-05-12T09:43:06.250] [INFO] access - �[39m[LEAVE] pad:kcGdHlRIsF socket:-FDk2cQHVfEzjw75AAAx IP:ANONYMOUS authorID:a.cfeP34W9wujE9BSP
2277:  �[32m[2026-05-12T09:43:06.251] [INFO] access - �[39m[LEAVE] pad:kcGdHlRIsF socket:KuUPbRyDQKQ1TXz3AAAz IP:ANONYMOUS authorID:a.7tiDGQBG9bdfa512
2278:  �[32m[2026-05-12T09:43:06.268] [INFO] access - �[39m[ENTER] pad:oSGsU1wzni socket:pIgcAVH9vJC18btbAAA1 IP:ANONYMOUS authorID:a.YF9UgQM7lm6kuqJJ
2279:  �[32m[2026-05-12T09:43:06.282] [INFO] access - �[39m[ENTER] pad:oSGsU1wzni socket:9zKrxhmWKhnA0mc8AAA3 IP:ANONYMOUS authorID:a.xkjlA160pqAGzTJw
2280:  ✔ non-identity changeset with no net change is accepted, has no effect
2281:  �[32m[2026-05-12T09:43:07.289] [INFO] access - �[39m[LEAVE] pad:oSGsU1wzni socket:pIgcAVH9vJC18btbAAA1 IP:ANONYMOUS authorID:a.YF9UgQM7lm6kuqJJ
2282:  �[32m[2026-05-12T09:43:07.290] [INFO] access - �[39m[LEAVE] pad:oSGsU1wzni socket:9zKrxhmWKhnA0mc8AAA3 IP:ANONYMOUS authorID:a.xkjlA160pqAGzTJw
2283:  �[32m[2026-05-12T09:43:07.304] [INFO] access - �[39m[ENTER] pad:7PKTmUJGgS socket:arNu9BW0C3_g2cyRAAA5 IP:ANONYMOUS authorID:a.wBGUJnkOcnlLu6Dg
2284:  �[32m[2026-05-12T09:43:07.318] [INFO] access - �[39m[ENTER] pad:7PKTmUJGgS socket:7EC04PnLEhd6rhvEAAA7 IP:ANONYMOUS authorID:a.EVyyPbCMHN9lnXG2
2285:  �[91m[2026-05-12T09:43:08.320] [ERROR] socket.io - �[39mError handling pad message from 7EC04PnLEhd6rhvEAAA7: Error: COLLABROOM: write attempt on read-only pad
2286:  at Object.exports.handleMessage (/home/runner/work/etherpad/etherpad/src/node/handler/PadMessageHandler.ts:563:11)
2287:  at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
2288:  at async <anonymous> (/home/runner/work/etherpad/etherpad/src/node/handler/SocketIORouter.ts:85:14)
2289:  �[91m[2026-05-12T09:43:08.323] [ERROR] socket.io - �[39mError handling pad message from 7EC04PnLEhd6rhvEAAA7: Error: COLLABROOM: write attempt on read-only pad
2290:  at Object.exports.handleMessage (/home/runner/work/etherpad/etherpad/src/node/handler/PadMessageHandler.ts:563:11)
...

2517:  �[32m[2026-05-12T09:43:09.333] [INFO] access - �[39m[CREATE] pad:pad socket:d8nNI7neNSDxobdmAABJ IP:ANONYMOUS authorID:a.BqGTbvU4WP8IdHz7 username:user
2518:  �[32m[2026-05-12T09:43:09.335] [INFO] access - �[39m[LEAVE] pad:pad socket:d8nNI7neNSDxobdmAABJ IP:ANONYMOUS authorID:a.BqGTbvU4WP8IdHz7 username:user
2519:  �[32m[2026-05-12T09:43:09.336] [INFO] http - �[39mSuccessful authentication from IP ANONYMOUS for user user
2520:  �[32m[2026-05-12T09:43:09.350] [INFO] access - �[39m[CREATE] pad:pad socket:pUtrrPFhy2ANOJEbAABL IP:ANONYMOUS authorID:a.bGzzFFSRJVCHNnlg username:user
2521:  ✔ authn user read-only /p/pad -> 200, ok
2522:  �[32m[2026-05-12T09:43:09.353] [INFO] access - �[39m[LEAVE] pad:pad socket:pUtrrPFhy2ANOJEbAABL IP:ANONYMOUS authorID:a.bGzzFFSRJVCHNnlg username:user
2523:  �[32m[2026-05-12T09:43:09.355] [INFO] http - �[39mSuccessful authentication from IP ANONYMOUS for user user
2524:  �[32m[2026-05-12T09:43:09.368] [INFO] access - �[39m[CREATE] pad:pad socket:J_IPVUewpcFj89ehAABN IP:ANONYMOUS authorID:a.6TbUmLT1rZibWi1f username:user
2525:  ✔ authz user /p/pad -> 200, ok
2526:  �[32m[2026-05-12T09:43:09.372] [INFO] access - �[39m[LEAVE] pad:pad socket:J_IPVUewpcFj89ehAABN IP:ANONYMOUS authorID:a.6TbUmLT1rZibWi1f username:user
2527:  �[32m[2026-05-12T09:43:09.374] [INFO] http - �[39mSuccessful authentication from IP ANONYMOUS for user user
2528:  �[32m[2026-05-12T09:43:09.387] [INFO] access - �[39m[CREATE] pad:päd socket:nQx_B3yAK4Jb0rH3AABP IP:ANONYMOUS authorID:a.t0oEH5Gj6O0AcAyw username:user
2529:  ✔ supports pad names with characters that must be percent-encoded
2530:  �[32m[2026-05-12T09:43:09.390] [INFO] access - �[39m[LEAVE] pad:päd socket:nQx_B3yAK4Jb0rH3AABP IP:ANONYMOUS authorID:a.t0oEH5Gj6O0AcAyw username:user
2531:  Abnormal access attempts
2532:  �[32m[2026-05-12T09:43:09.392] [INFO] http - �[39mFailed authentication from IP ANONYMOUS
2533:  �[33m[2026-05-12T09:43:09.401] [WARN] message - �[39mclient sent author token via CLIENT_READY message; cookie migration will take effect on next HTTP response. See docs/superpowers/specs/2026-04-19-gdpr-pr3-anon-identity-design.md
2534:  �[91m[2026-05-12T09:43:09.402] [ERROR] socket.io - �[39mError handling pad message from tLDWQ7kMRBAaSWtYAABR: Error: access denied
2535:  at Object.exports.handleMessage (/home/runner/work/etherpad/etherpad/src/node/handler/PadMessageHandler.ts:459:11)
2536:  at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
2537:  at async <anonymous> (/home/runner/work/etherpad/etherpad/src/node/handler/SocketIORouter.ts:85:14)
2538:  ✔ authn anonymous /p/pad -> 401, error
2539:  �[32m[2026-05-12T09:43:09.404] [INFO] http - �[39mSuccessful authentication from IP ANONYMOUS for user user
2540:  �[32m[2026-05-12T09:43:09.415] [INFO] access - �[39m[CREATE] pad:pad socket:ZcP0eR028RfHJd6fAABT IP:ANONYMOUS authorID:a.vLIO91Z3SI2O6tLr username:user
2541:  �[32m[2026-05-12T09:43:09.417] [INFO] access - �[39m[LEAVE] pad:pad socket:ZcP0eR028RfHJd6fAABT IP:ANONYMOUS authorID:a.vLIO91Z3SI2O6tLr username:user
2542:  �[32m[2026-05-12T09:43:09.418] [INFO] http - �[39mFailed authentication from IP ANONYMOUS
2543:  �[33m[2026-05-12T09:43:09.425] [WARN] message - �[39mclient sent author token via CLIENT_READY message; cookie migration will take effect on next HTTP response. See docs/superpowers/specs/2026-04-19-gdpr-pr3-anon-identity-design.md
2544:  �[91m[2026-05-12T09:43:09.426] [ERROR] socket.io - �[39mError handling pad message from Dd6ptUa5LdM9J8Z4AABV: Error: access denied
2545:  at Object.exports.handleMessage (/home/runner/work/etherpad/etherpad/src/node/handler/PadMessageHandler.ts:459:11)
2546:  at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
2547:  at async <anonymous> (/home/runner/work/etherpad/etherpad/src/node/handler/SocketIORouter.ts:85:14)
2548:  ✔ authn anonymous read-only /p/pad -> 401, error
2549:  �[33m[2026-05-12T09:43:09.435] [WARN] message - �[39mclient sent author token via CLIENT_READY message; cookie migration will take effect on next HTTP response. See docs/superpowers/specs/2026-04-19-gdpr-pr3-anon-identity-design.md
2550:  �[91m[2026-05-12T09:43:09.436] [ERROR] socket.io - �[39mError handling pad message from YhqVubvzKXCTCDc2AABX: Error: access denied
2551:  at Object.exports.handleMessage (/home/runner/work/etherpad/etherpad/src/node/handler/PadMessageHandler.ts:459:11)
2552:  at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
2553:  at async <anonymous> (/home/runner/work/etherpad/etherpad/src/node/handler/SocketIORouter.ts:85:14)
2554:  ✔ authn !cookie -> error
2555:  �[32m[2026-05-12T09:43:09.438] [INFO] http - �[39mSuccessful authentication from IP ANONYMOUS for user user
2556:  �[91m[2026-05-12T09:43:09.450] [ERROR] socket.io - �[39mError handling pad message from 3UhdvRtKf8msbrIJAABZ: Error: access denied
2557:  at Object.exports.handleMessage (/home/runner/work/etherpad/etherpad/src/node/handler/PadMessageHandler.ts:459:11)
2558:  at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
2559:  at async <anonymous> (/home/runner/work/etherpad/etherpad/src/node/handler/SocketIORouter.ts:85:14)
2560:  ✔ authorization bypass attempt -> error
2561:  Authorization levels via authorize hook
2562:  �[32m[2026-05-12T09:43:09.453] [INFO] http - �[39mSuccessful authentication from IP ANONYMOUS for user user
2563:  �[32m[2026-05-12T09:43:09.470] [INFO] access - �[39m[CREATE] pad:pad socket:ZMyCLnyDzQZoJ4jHAABb IP:ANONYMOUS authorID:a.U3Luu1zMM4tYmWnE username:user
2564:  ✔ level='create' -> can create
2565:  �[32m[2026-05-12T09:43:09.472] [INFO] access - �[39m[LEAVE] pad:pad socket:ZMyCLnyDzQZoJ4jHAABb IP:ANONYMOUS authorID:a.U3Luu1zMM4tYmWnE username:user
2566:  �[32m[2026-05-12T09:43:09.474] [INFO] http - �[39mSuccessful authentication from IP ANONYMOUS for user user
2567:  �[32m[2026-05-12T09:43:09.488] [INFO] access - �[39m[CREATE] pad:pad socket:US6HIx1h2IMCixLaAABd IP:ANONYMOUS authorID:a.t1Oi2a8jDp8DltGW username:user
2568:  ✔ level=true -> can create
2569:  �[32m[2026-05-12T09:43:09.491] [INFO] access - �[39m[LEAVE] pad:pad socket:US6HIx1h2IMCixLaAABd IP:ANONYMOUS authorID:a.t1Oi2a8jDp8DltGW username:user
2570:  �[32m[2026-05-12T09:43:09.493] [INFO] http - �[39mSuccessful authentication from IP ANONYMOUS for user user
2571:  �[32m[2026-05-12T09:43:09.505] [INFO] access - �[39m[CREATE] pad:pad socket:DgO200nBP93_TGYkAABf IP:ANONYMOUS authorID:a.zRYA91WZLTZlS4hv username:user
2572:  ✔ level='modify' -> can modify
2573:  �[32m[2026-05-12T09:43:09.508] [INFO] access - �[39m[LEAVE] pad:pad socket:DgO200nBP93_TGYkAABf IP:ANONYMOUS authorID:a.zRYA91WZLTZlS4hv username:user
2574:  �[32m[2026-05-12T09:43:09.510] [INFO] http - �[39mSuccessful authentication from IP ANONYMOUS for user user
2575:  �[91m[2026-05-12T09:43:09.522] [ERROR] socket.io - �[39mError handling pad message from XghSeEQxNQ-jRJZ9AABh: Error: access denied
2576:  at Object.exports.handleMessage (/home/runner/work/etherpad/etherpad/src/node/handler/PadMessageHandler.ts:459:11)
2577:  at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
2578:  at async <anonymous> (/home/runner/work/etherpad/etherpad/src/node/handler/SocketIORouter.ts:85:14)
2579:  ✔ level='create' settings.editOnly=true -> unable to create
2580:  �[32m[2026-05-12T09:43:09.524] [INFO] http - �[39mSuccessful authentication from IP ANONYMOUS for user user
2581:  �[91m[2026-05-12T09:43:09.535] [ERROR] socket.io - �[39mError handling pad message from tXPFxXU-c2XbsyuPAABj: Error: access denied
2582:  at Object.exports.handleMessage (/home/runner/work/etherpad/etherpad/src/node/handler/PadMessageHandler.ts:459:11)
2583:  at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
2584:  at async <anonymous> (/home/runner/work/etherpad/etherpad/src/node/handler/SocketIORouter.ts:85:14)
2585:  ✔ level='modify' settings.editOnly=false -> unable to create
2586:  �[32m[2026-05-12T09:43:09.537] [INFO] http - �[39mSuccessful authentication from IP ANONYMOUS for user user
2587:  �[91m[2026-05-12T09:43:09.548] [ERROR] socket.io - �[39mError handling pad message from 0eFqaRmz7YueBGioAABl: Error: access denied
2588:  at Object.exports.handleMessage (/home/runner/work/etherpad/etherpad/src/node/handler/PadMessageHandler.ts:459:11)
2589:  at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
2590:  at async <anonymous> (/home/runner/work/etherpad/etherpad/src/node/handler/SocketIORouter.ts:85:14)
2591:  ✔ level='readOnly' -> unable to create
2592:  �[32m[2026-05-12T09:43:09.551] [INFO] http - �[39mSuccessful authentication from IP ANONYMOUS for user user
2593:  �[32m[2026-05-12T09:43:09.562] [INFO] access - �[39m[CREATE] pad:pad socket:dm4a4OzFeS7LrKD5AABn IP:ANONYMOUS authorID:a.1sHlxGcgFNNihCvH username:user
2594:  ✔ level='readOnly' -> unable to modify
2595:  �[32m[2026-05-12T09:43:09.567] [INFO] access - �[39m[LEAVE] pad:pad socket:dm4a4OzFeS7LrKD5AABn IP:ANONYMOUS authorID:a.1sHlxGcgFNNihCvH username:user
2596:  Authorization levels via user settings
2597:  �[32m[2026-05-12T09:43:09.568] [INFO] http - �[39mSuccessful authentication from IP ANONYMOUS for user user
2598:  �[32m[2026-05-12T09:43:09.584] [INFO] access - �[39m[CREATE] pad:pad socket:Yzd9ZWXvXd78eaGuAABp IP:ANONYMOUS authorID:a.q9VffAxfY9bnORWM username:user
2599:  ✔ user.canCreate = true -> can create and modify
2600:  �[32m[2026-05-12T09:43:09.586] [INFO] access - �[39m[LEAVE] pad:pad socket:Yzd9ZWXvXd78eaGuAABp IP:ANONYMOUS authorID:a.q9VffAxfY9bnORWM username:user
2601:  �[32m[2026-05-12T09:43:09.588] [INFO] http - �[39mSuccessful authentication from IP ANONYMOUS for user user
2602:  �[91m[2026-05-12T09:43:09.600] [ERROR] socket.io - �[39mError handling pad message from Rv2npQE8ctHzHr_AAABr: Error: access denied
2603:  at Object.exports.handleMessage (/home/runner/work/etherpad/etherpad/src/node/handler/PadMessageHandler.ts:459:11)
2604:  at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
2605:  at async <anonymous> (/home/runner/work/etherpad/etherpad/src/node/handler/SocketIORouter.ts:85:14)
2606:  ✔ user.canCreate = false -> unable to create
2607:  �[32m[2026-05-12T09:43:09.603] [INFO] http - �[39mSuccessful authentication from IP ANONYMOUS for user user
2608:  �[91m[2026-05-12T09:43:09.614] [ERROR] socket.io - �[39mError handling pad message from I6_SM2PH2rN8OxVkAABt: Error: access denied
2609:  at Object.exports.handleMessage (/home/runner/work/etherpad/etherpad/src/node/handler/PadMessageHandler.ts:459:11)
2610:  at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
2611:  at async <anonymous> (/home/runner/work/etherpad/etherpad/src/node/handler/SocketIORouter.ts:85:14)
2612:  ✔ user.readOnly = true -> unable to create
2613:  �[32m[2026-05-12T09:43:09.617] [INFO] http - �[39mSuccessful authentication from IP ANONYMOUS for user user
2614:  �[32m[2026-05-12T09:43:09.628] [INFO] access - �[39m[CREATE] pad:pad socket:jnPMfytx_GzvDVZRAABv IP:ANONYMOUS authorID:a.OdpBO8HwuQpqQNI5 username:user
2615:  ✔ user.readOnly = true -> unable to modify
2616:  �[32m[2026-05-12T09:43:09.631] [INFO] access - �[39m[LEAVE] pad:pad socket:jnPMfytx_GzvDVZRAABv IP:ANONYMOUS authorID:a.OdpBO8HwuQpqQNI5 username:user
2617:  �[32m[2026-05-12T09:43:09.633] [INFO] http - �[39mSuccessful authentication from IP ANONYMOUS for user user
2618:  �[32m[2026-05-12T09:43:09.649] [INFO] access - �[39m[CREATE] pad:pad socket:Und8OE_haFk5-xmpAABx IP:ANONYMOUS authorID:a.DvEozaF8lBi8SfqW username:user
2619:  ✔ user.readOnly = false -> can create and modify
2620:  �[32m[2026-05-12T09:43:09.652] [INFO] access - �[39m[LEAVE] pad:pad socket:Und8OE_haFk5-xmpAABx IP:ANONYMOUS authorID:a.DvEozaF8lBi8SfqW username:user
2621:  �[32m[2026-05-12T09:43:09.654] [INFO] http - �[39mSuccessful authentication from IP ANONYMOUS for user user
2622:  �[91m[2026-05-12T09:43:09.665] [ERROR] socket.io - �[39mError handling pad message from ESTszBOp8qJvG89PAABz: Error: access denied
2623:  at Object.exports.handleMessage (/home/runner/work/etherpad/etherpad/src/node/handler/PadMessageHandler.ts:459:11)
2624:  at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
2625:  at async <anonymous> (/home/runner/work/etherpad/etherpad/src/node/handler/SocketIORouter.ts:85:14)
2626:  ✔ user.readOnly = true, user.canCreate = true -> unable to create
2627:  Authorization level interaction between authorize hook and user settings
2628:  �[32m[2026-05-12T09:43:09.669] [INFO] http - �[39mSuccessful authentication from IP ANONYMOUS for user user
2629:  �[91m[2026-05-12T09:43:09.680] [ERROR] socket.io - �[39mError handling pad message from iZcARWHdgoeNxpumAAB1: Error: access denied
2630:  at Object.exports.handleMessage (/home/runner/work/etherpad/etherpad/src/node/handler/PadMessageHandler.ts:459:11)
2631:  at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
2632:  at async <anonymous> (/home/runner/work/etherpad/etherpad/src/node/handler/SocketIORouter.ts:85:14)
2633:  ✔ authorize hook does not elevate level from user settings
2634:  �[32m[2026-05-12T09:43:09.683] [INFO] http - �[39mSuccessful authentication from IP ANONYMOUS for user user
2635:  �[91m[2026-05-12T09:43:09.694] [ERROR] socket.io - �[39mError handling pad message from 7-JHhXBdP18PvjKkAAB3: Error: access denied
2636:  at Object.exports.handleMessage (/home/runner/work/etherpad/etherpad/src/node/handler/PadMessageHandler.ts:459:11)
...

2663:  �[32m[2026-05-12T09:43:10.828] [INFO] access - �[39m[CREATE] pad:foo socket:k-aT3gvwFPBB2wmlAACJ IP:ANONYMOUS authorID:a.XFb8xmX6T8FzBdaW
2664:  �[32m[2026-05-12T09:43:10.841] [INFO] access - �[39m[CREATE] pad:foo socket:8SVKDXo8IYbji_ZxAACL IP:ANONYMOUS authorID:a.MQu9fQMpGVjXs2WJ
2665:  ✔ different browsers (separate cookie jars): only the creator gets canEditPadSettings
2666:  �[32m[2026-05-12T09:43:10.845] [INFO] access - �[39m[LEAVE] pad:foo socket:k-aT3gvwFPBB2wmlAACJ IP:ANONYMOUS authorID:a.XFb8xmX6T8FzBdaW
2667:  �[32m[2026-05-12T09:43:10.845] [INFO] access - �[39m[LEAVE] pad:foo socket:8SVKDXo8IYbji_ZxAACL IP:ANONYMOUS authorID:a.MQu9fQMpGVjXs2WJ
2668:  �[32m[2026-05-12T09:43:10.863] [INFO] access - �[39m[CREATE] pad:foo socket:l9UY-Vp3tw9DRE5bAACN IP:ANONYMOUS authorID:a.0tRVuH3535ll1DSO
2669:  �[32m[2026-05-12T09:43:10.871] [INFO] access - �[39m[CREATE] pad:foo socket:Qu492Y0pM3fLLKlJAACP IP:ANONYMOUS authorID:a.0tRVuH3535ll1DSO
2670:  ✔ same browser two tabs (shared cookie jar): BOTH get canEditPadSettings=true
2671:  �[32m[2026-05-12T09:43:10.874] [INFO] access - �[39m[LEAVE] pad:foo socket:Qu492Y0pM3fLLKlJAACP IP:ANONYMOUS authorID:a.0tRVuH3535ll1DSO
2672:  SocketIORouter.js
2673:  ✔ setSocketIO
2674:  ✔ handleConnect
2675:  ✔ handleDisconnect
2676:  ✔ handleMessage (success)
2677:  ✔ handleMessage with ack (success)
2678:  �[91m[2026-05-12T09:43:10.912] [ERROR] socket.io - �[39mError handling /home/runner/work/etherpad/etherpad/src/tests/backend/specs/socketio.ts SocketIORouter.js handleMessage with ack (error) message from GzGFs4zW5GiG5I97AACZ: InjectedError: injected test error
2679:  at Module.handleMessage (/home/runner/work/etherpad/etherpad/src/tests/backend/specs/socketio.ts:597:52)
2680:  at <anonymous> (/home/runner/work/etherpad/etherpad/src/node/handler/SocketIORouter.ts:85:50)
2681:  at Socket.<anonymous> (/home/runner/work/etherpad/etherpad/src/node/handler/SocketIORouter.ts:86:5)
2682:  at Socket.emit (node:events:509:20)
2683:  at Socket.emitUntyped (/home/runner/work/etherpad/etherpad/node_modules/.pnpm/socket.io@4.8.3/node_modules/socket.io/dist/typed-events.js:69:22)
2684:  at /home/runner/work/etherpad/etherpad/node_modules/.pnpm/socket.io@4.8.3/node_modules/socket.io/dist/socket.js:697:39
2685:  at process.processTicksAndRejections (node:internal/process/task_queues:85:11)
2686:  ✔ handleMessage with ack (error)
2687:  /home/runner/work/etherpad/etherpad/src/tests/backend/specs/specialpages.ts
...

2705:  /home/runner/work/etherpad/etherpad/src/tests/backend/specs/undo_clear_authorship.ts
2706:  undo of clear authorship colors (bug #2802)
2707:  �[32m[2026-05-12T09:43:10.960] [INFO] access - �[39m[CREATE] pad:rYtYA8VljS socket:1i8Mjs9fXxIcyhW4AACb IP:ANONYMOUS authorID:a.NzPW3ERkaTM7qLuq
2708:  �[32m[2026-05-12T09:43:10.975] [INFO] access - �[39m[ENTER] pad:rYtYA8VljS socket:OVVncnL1Szwo6-z9AACd IP:ANONYMOUS authorID:a.dAfolUIFEt724H8J
2709:  ✔ should not disconnect when undoing clear authorship with multiple authors
2710:  �[32m[2026-05-12T09:43:10.984] [INFO] access - �[39m[LEAVE] pad:rYtYA8VljS socket:1i8Mjs9fXxIcyhW4AACb IP:ANONYMOUS authorID:a.NzPW3ERkaTM7qLuq
2711:  �[32m[2026-05-12T09:43:10.985] [INFO] access - �[39m[LEAVE] pad:rYtYA8VljS socket:OVVncnL1Szwo6-z9AACd IP:ANONYMOUS authorID:a.dAfolUIFEt724H8J
2712:  �[32m[2026-05-12T09:43:10.999] [INFO] access - �[39m[CREATE] pad:qt2XMZ1LxQ socket:LjxJ9fbLLs2JtP7kAACf IP:ANONYMOUS authorID:a.52mgQhD90nSsv2GP
2713:  ✔ should allow clear authorship changeset with empty author from any user
2714:  �[32m[2026-05-12T09:43:11.006] [INFO] access - �[39m[LEAVE] pad:qt2XMZ1LxQ socket:LjxJ9fbLLs2JtP7kAACf IP:ANONYMOUS authorID:a.52mgQhD90nSsv2GP
2715:  �[32m[2026-05-12T09:43:11.017] [INFO] access - �[39m[CREATE] pad:GwAxiTszJP socket:VDiAFI2YchhAuyB3AACh IP:ANONYMOUS authorID:a.ooGMsRckatPHCl8O
2716:  ✔ changeset restoring own author after clear should be accepted
2717:  �[32m[2026-05-12T09:43:11.026] [INFO] access - �[39m[LEAVE] pad:GwAxiTszJP socket:VDiAFI2YchhAuyB3AACh IP:ANONYMOUS authorID:a.ooGMsRckatPHCl8O
2718:  �[32m[2026-05-12T09:43:11.039] [INFO] access - �[39m[CREATE] pad:NWxy2FEv52 socket:LlF8_BEyZSdL3vz4AACj IP:ANONYMOUS authorID:a.o7hyQOw1Ee2uDNJv
2719:  �[32m[2026-05-12T09:43:11.052] [INFO] access - �[39m[CREATE] pad:NWxy2FEv52 socket:gtkiwMy6-g06KRcOAACl IP:ANONYMOUS authorID:a.3KYqQlX5SKO2y7GE
2720:  �[33m[2026-05-12T09:43:11.054] [WARN] message - �[39mFailed to apply USER_CHANGES from author a.3KYqQlX5SKO2y7GE (socket gtkiwMy6-g06KRcOAACl) on pad NWxy2FEv52: Error: Author a.3KYqQlX5SKO2y7GE tried to submit changes as author a.o7hyQOw1Ee2uDNJv in changeset Z:1>5*0+5$hello
2721:  at handleUserChanges (/home/runner/work/etherpad/etherpad/src/node/handler/PadMessageHandler.ts:816:17)
2722:  at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
2723:  ✔ changeset impersonating another author for new text should still be rejected
2724:  �[32m[2026-05-12T09:43:11.056] [INFO] access - �[39m[LEAVE] pad:NWxy2FEv52 socket:LlF8_BEyZSdL3vz4AACj IP:ANONYMOUS authorID:a.o7hyQOw1Ee2uDNJv
2725:  �[32m[2026-05-12T09:43:11.056] [INFO] access - �[39m[LEAVE] pad:NWxy2FEv52 socket:gtkiwMy6-g06KRcOAACl IP:ANONYMOUS authorID:a.3KYqQlX5SKO2y7GE
2726:  �[32m[2026-05-12T09:43:11.069] [INFO] access - �[39m[CREATE] pad:ZxtLHYnEEt socket:_WpF2s4YePk7c5QzAACn IP:ANONYMOUS authorID:a.l57uhgZB2LXgIeuo
2727:  �[33m[2026-05-12T09:43:11.072] [WARN] message - �[39mFailed to apply USER_CHANGES from author a.l57uhgZB2LXgIeuo (socket _WpF2s4YePk7c5QzAACn) on pad ZxtLHYnEEt: Error: Author a.l57uhgZB2LXgIeuo tried to set unknown author a.fabricatedAuthorId on existing text in changeset Z:6>0*0=5$
2728:  at handleUserChanges (/home/runner/work/etherpad/etherpad/src/node/handler/PadMessageHandler.ts:807:19)
2729:  at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
2730:  ✔ should reject = op with fabricated author who never contributed to the pad
2731:  �[32m[2026-05-12T09:43:11.077] [INFO] access - �[39m[LEAVE] pad:ZxtLHYnEEt socket:_WpF2s4YePk7c5QzAACn IP:ANONYMOUS authorID:a.l57uhgZB2LXgIeuo
2732:  �[32m[2026-05-12T09:43:11.089] [INFO] access - �[39m[CREATE] pad:zWrk32LxGz socket:Xm9f20jqaVKJZFKyAACp IP:ANONYMOUS authorID:a.caqI86ZmMs4obH2g
2733:  �[33m[2026-05-12T09:43:11.093] [WARN] message - �[39mFailed to apply USER_CHANGES from author a.caqI86ZmMs4obH2g (socket Xm9f20jqaVKJZFKyAACp) on pad zWrk32LxGz: Error: Author a.caqI86ZmMs4obH2g tried to submit changes as author a.fabricatedAuthorId in changeset Z:6<1*0-1$
2734:  at handleUserChanges (/home/runner/work/etherpad/etherpad/src/node/handler/PadMessageHandler.ts:816:17)
...

2739:  POST /admin/update/apply
2740:  ✔ rejects unauthenticated
2741:  �[32m[2026-05-12T09:43:11.101] [INFO] http - �[39mSuccessful authentication from IP ANONYMOUS for user <no username>
2742:  ✔ returns 409 with no-known-latest when state has no latest release
2743:  ✔ returns 404 when tier is "notify" (action endpoints disabled)
2744:  �[32m[2026-05-12T09:43:11.110] [INFO] http - �[39mSuccessful authentication from IP ANONYMOUS for user <no username>
2745:  ✔ rejects when execution is already in flight (409)
2746:  POST /admin/update/cancel
2747:  ✔ rejects unauthenticated
2748:  �[32m[2026-05-12T09:43:11.114] [INFO] http - �[39mSuccessful authentication from IP ANONYMOUS for user <no username>
2749:  ✔ returns 409 when nothing is in flight
2750:  POST /admin/update/acknowledge
2751:  ✔ rejects unauthenticated
2752:  �[32m[2026-05-12T09:43:11.119] [INFO] http - �[39mSuccessful authentication from IP ANONYMOUS for user <no username>
2753:  �[32m[2026-05-12T09:43:11.122] [INFO] http - �[39mSuccessful authentication from IP ANONYMOUS for user <no username>
2754:  ✔ clears a terminal rollback-failed state to idle
2755:  �[32m[2026-05-12T09:43:11.125] [INFO] http - �[39mSuccessful authentication from IP ANONYMOUS for user <no username>
2756:  ✔ clears a preflight-failed state to idle
2757:  �[32m[2026-05-12T09:43:11.128] [INFO] http - �[39mSuccessful authentication from IP ANONYMOUS for user <no username>
...

2776:  ✔ admits authenticated admin sessions
2777:  admin auth (without requireAdminForStatus)
2778:  �[32m[2026-05-12T09:43:11.154] [INFO] http - �[39mSuccessful authentication from IP ANONYMOUS for user <no username>
2779:  ✔ returns full diagnostic payload to authed admin sessions
2780:  /home/runner/work/etherpad/etherpad/src/tests/backend/specs/updater-integration.ts
2781:  �[33m[2026-05-12T09:43:11.295] [WARN] updater - �[39m[git fetch --tags origin] From /tmp/updater-it-0HZCPg
2782:  * [new branch]      main       -> origin/main
2783:  �[33m[2026-05-12T09:43:11.305] [WARN] updater - �[39m[git checkout refs/tags/v0.0.2] Previous HEAD position was cdc2c9d initial
2784:  �[33m[2026-05-12T09:43:11.305] [WARN] updater - �[39m[git checkout refs/tags/v0.0.2] HEAD is now at 0c33e19 bump
2785:  �[32m[2026-05-12T09:43:11.306] [INFO] updater - �[39mupdate executed: cdc2c9d76d42cbd8a5eeeae1ba1682937a5419e7 -> v0.0.2; exiting 75 for supervisor restart
2786:  ✔ happy path: executes against tmp repo, lands on pending-verification, exits 75 (170ms)
2787:  �[33m[2026-05-12T09:43:11.460] [WARN] updater - �[39m[git fetch --tags origin] From /tmp/updater-it-bpNOTB
2788:  * [new branch]      main       -> origin/main
2789:  �[33m[2026-05-12T09:43:11.471] [WARN] updater - �[39m[git checkout refs/tags/v0.0.2] Previous HEAD position was cdc2c9d initial
2790:  �[33m[2026-05-12T09:43:11.471] [WARN] updater - �[39m[git checkout refs/tags/v0.0.2] HEAD is now at 0c33e19 bump
2791:  �[91m[2026-05-12T09:43:11.472] [ERROR] updater - �[39mupdate step failed (failed-install): pnpm install exit 1: 
2792:  �[33m[2026-05-12T09:43:11.479] [WARN] updater - �[39m[rollback git checkout -f cdc2c9d76d42cbd8a5eeeae1ba1682937a5419e7] Previous HEAD position was 0c33e19 bump
2793:  �[33m[2026-05-12T09:43:11.479] [WARN] updater - �[39m[rollback git checkout -f cdc2c9d76d42cbd8a5eeeae1ba1682937a5419e7] HEAD is now at cdc2c9d initial
2794:  �[33m[2026-05-12T09:43:11.481] [WARN] updater - �[39mrolled back to cdc2c9d76d42cbd8a5eeeae1ba1682937a5419e7 (reason: pnpm install exit 1: )
2795:  ✔ install failure rolls back to original SHA + lockfile (165ms)
2796:  �[33m[2026-05-12T09:43:11.620] [WARN] updater - �[39m[git fetch --tags origin] From /tmp/updater-it-7ThAbA
2797:  * [new branch]      main       -> origin/main
2798:  �[33m[2026-05-12T09:43:11.631] [WARN] updater - �[39m[git checkout refs/tags/v0.0.2] Previous HEAD position was cdc2c9d initial
2799:  �[33m[2026-05-12T09:43:11.631] [WARN] updater - �[39m[git checkout refs/tags/v0.0.2] HEAD is now at 0c33e19 bump
2800:  �[91m[2026-05-12T09:43:11.632] [ERROR] updater - �[39mupdate step failed (failed-build): pnpm run build:ui exit 1: 
2801:  �[33m[2026-05-12T09:43:11.639] [WARN] updater - �[39m[rollback git checkout -f cdc2c9d76d42cbd8a5eeeae1ba1682937a5419e7] Previous HEAD position was 0c33e19 bump
2802:  �[33m[2026-05-12T09:43:11.639] [WARN] updater - �[39m[rollback git checkout -f cdc2c9d76d42cbd8a5eeeae1ba1682937a5419e7] HEAD is now at cdc2c9d initial
2803:  �[33m[2026-05-12T09:43:11.641] [WARN] updater - �[39mrolled back to cdc2c9d76d42cbd8a5eeeae1ba1682937a5419e7 (reason: pnpm run build:ui exit 1: )
2804:  ✔ build failure rolls back to original SHA (161ms)
2805:  �[33m[2026-05-12T09:43:11.777] [WARN] updater - �[39m[rollback git checkout -f cdc2c9d76d42cbd8a5eeeae1ba1682937a5419e7] Previous HEAD position was 0c33e19 bump
2806:  �[33m[2026-05-12T09:43:11.777] [WARN] updater - �[39m[rollback git checkout -f cdc2c9d76d42cbd8a5eeeae1ba1682937a5419e7] HEAD is now at cdc2c9d initial
2807:  �[33m[2026-05-12T09:43:11.779] [WARN] updater - �[39mrolled back to cdc2c9d76d42cbd8a5eeeae1ba1682937a5419e7 (reason: health-check-failed-or-crash-loop)
2808:  ✔ crash-loop guard: bootCount=3 forces immediate rollback (159ms)
2809:  �[33m[2026-05-12T09:43:11.930] [WARN] updater - �[39m[rollback git checkout -f 0000000000000000000000000000000000000000] fatal: unable to read tree (0000000000000000000000000000000000000000)
2810:  �[91m[2026-05-12T09:43:11.931] [ERROR] updater - �[39mrollback FAILED: git checkout -f 0000000000000000000000000000000000000000 exit 128; manual intervention required (POST /admin/update/acknowledge after fixing)
2811:  ✔ rollback failure (target SHA does not exist) lands on terminal rollback-failed (123ms)
2812:  /home/runner/work/etherpad/etherpad/src/tests/backend/specs/webaccess.ts
2813:  webaccess: without plugins
2814:  ✔ !authn !authz anonymous / -> 200
2815:  �[32m[2026-05-12T09:43:11.943] [INFO] http - �[39mFailed authentication from IP ANONYMOUS
2816:  ✔ !authn !authz anonymous /admin-auth// -> 401
2817:  �[32m[2026-05-12T09:43:11.947] [INFO] http - �[39mFailed authentication from IP ANONYMOUS
2818:  ✔ authn !authz anonymous / -> 401
...

2821:  �[32m[2026-05-12T09:43:11.952] [INFO] http - �[39mSuccessful authentication from IP ANONYMOUS for user user
2822:  ✔ authn !authz user //admin-auth// -> 403
2823:  �[32m[2026-05-12T09:43:11.954] [INFO] http - �[39mSuccessful authentication from IP ANONYMOUS for user admin
2824:  ✔ authn !authz admin / -> 200
2825:  �[32m[2026-05-12T09:43:11.958] [INFO] http - �[39mSuccessful authentication from IP ANONYMOUS for user admin
2826:  ✔ authn !authz admin /admin-auth/ -> 200
2827:  ✔ authn authz anonymous /robots.txt -> 200
2828:  �[32m[2026-05-12T09:43:11.962] [INFO] http - �[39mSuccessful authentication from IP ANONYMOUS for user user
2829:  ✔ authn authz user / -> 403
2830:  �[32m[2026-05-12T09:43:11.964] [INFO] http - �[39mSuccessful authentication from IP ANONYMOUS for user user
2831:  ✔ authn authz user //admin-auth// -> 403
2832:  �[32m[2026-05-12T09:43:11.967] [INFO] http - �[39mSuccessful authentication from IP ANONYMOUS for user admin
2833:  ✔ authn authz admin / -> 200
2834:  �[32m[2026-05-12T09:43:11.970] [INFO] http - �[39mSuccessful authentication from IP ANONYMOUS for user admin
2835:  ✔ authn authz admin /admin-auth/ -> 200
2836:  login fails if password is nullish
2837:  �[32m[2026-05-12T09:43:11.972] [INFO] http - �[39mFailed authentication from IP ANONYMOUS
2838:  ✔ admin password: undefined credentials: admin
2839:  �[32m[2026-05-12T09:43:11.975] [INFO] http - �[39mFailed authentication from IP ANONYMOUS
2840:  ✔ admin password: undefined credentials: admin:
2841:  �[32m[2026-05-12T09:43:11.977] [INFO] http - �[39mFailed authentication from IP ANONYMOUS
2842:  ✔ admin password: null credentials: admin
2843:  �[32m[2026-05-12T09:43:11.980] [INFO] http - �[39mFailed authentication from IP ANONYMOUS
2844:  ✔ admin password: null credentials: admin:
2845:  webaccess: preAuthorize, authenticate, and authorize hooks
2846:  preAuthorize
2847:  ✔ defers if it returns []
2848:  ✔ bypasses authenticate and authorize hooks when true is returned
2849:  ✔ bypasses authenticate and authorize hooks when false is returned
2850:  ✔ bypasses authenticate and authorize hooks when next is called
2851:  ✔ static content (expressPreSession) bypasses all auth checks
2852:  �[32m[2026-05-12T09:43:11.993] [INFO] http - �[39mFailed authentication from IP ANONYMOUS
2853:  ✔ cannot grant access to /admin
2854:  ✔ can deny access to /admin-auth/
2855:  ✔ runs preAuthzFailure hook when access is denied
2856:  �[91m[2026-05-12T09:43:11.999] [ERROR] http - �[39mError in preAuthorize hook: Error: exception test
2857:  at Handler.handlers.preAuthorize.<computed>.innerHandle (/home/runner/work/etherpad/etherpad/src/tests/backend/specs/webaccess.ts:267:62)
...

2907:  at trimPrefix (/home/runner/work/etherpad/etherpad/node_modules/.pnpm/router@2.2.0/node_modules/router/index.js:342:13)
2908:  at /home/runner/work/etherpad/etherpad/node_modules/.pnpm/router@2.2.0/node_modules/router/index.js:297:9
2909:  at processParams (/home/runner/work/etherpad/etherpad/node_modules/.pnpm/router@2.2.0/node_modules/router/index.js:582:12)
2910:  at next (/home/runner/work/etherpad/etherpad/node_modules/.pnpm/router@2.2.0/node_modules/router/index.js:291:5)
2911:  at router.handle (/home/runner/work/etherpad/etherpad/node_modules/.pnpm/router@2.2.0/node_modules/router/index.js:186:3)
2912:  at app.handle (/home/runner/work/etherpad/etherpad/node_modules/.pnpm/express@5.2.1/node_modules/express/lib/application.js:177:15)
2913:  at Server.app (/home/runner/work/etherpad/etherpad/node_modules/.pnpm/express@5.2.1/node_modules/express/lib/express.js:38:9)
2914:  at Server.<anonymous> (/home/runner/work/etherpad/etherpad/node_modules/.pnpm/engine.io@6.6.5/node_modules/engine.io/build/server.js:648:34)
2915:  at Server.<anonymous> (/home/runner/work/etherpad/etherpad/node_modules/.pnpm/socket.io@4.8.3/node_modules/socket.io/dist/index.js:330:28)
2916:  at Server.emit (node:events:509:20)
2917:  at parserOnIncoming (node:_http_server:1216:12)
2918:  at HTTPParser.parserOnHeadersComplete (node:_http_common:125:17)
2919:  ✔ returns 500 if an exception is thrown
2920:  authenticate
2921:  ✔ is not called if !requireAuthentication and not /admin-auth/*
2922:  �[32m[2026-05-12T09:43:12.004] [INFO] http - �[39mFailed authentication from IP ANONYMOUS
2923:  ✔ is called if !requireAuthentication and /admin-auth//*
2924:  �[32m[2026-05-12T09:43:12.007] [INFO] http - �[39mFailed authentication from IP ANONYMOUS
2925:  ✔ defers if empty list returned
2926:  �[32m[2026-05-12T09:43:12.010] [INFO] http - �[39mSuccessful authentication from IP ANONYMOUS for user <no username>
2927:  ✔ does not defer if return [true], 200
2928:  �[32m[2026-05-12T09:43:12.013] [INFO] http - �[39mFailed authentication from IP ANONYMOUS
2929:  ✔ does not defer if return [false], 401
2930:  �[32m[2026-05-12T09:43:12.015] [INFO] http - �[39mSuccessful authentication from IP ANONYMOUS for user user
2931:  ✔ falls back to HTTP basic auth
2932:  �[32m[2026-05-12T09:43:12.018] [INFO] http - �[39mFailed authentication from IP ANONYMOUS
2933:  ✔ passes settings.users in context
2934:  �[32m[2026-05-12T09:43:12.021] [INFO] http - �[39mSuccessful authentication from IP ANONYMOUS for user user
2935:  ✔ passes user, password in context if provided
2936:  �[32m[2026-05-12T09:43:12.023] [INFO] http - �[39mFailed authentication from IP ANONYMOUS
2937:  ✔ does not pass user, password in context if not provided
2938:  �[91m[2026-05-12T09:43:12.026] [ERROR] http - �[39mauthenticate hook failed to add user settings to session
2939:  ✔ errors if req.session.user is not created
2940:  �[91m[2026-05-12T09:43:12.028] [ERROR] settings - �[39mError: exception test
2941:  at Handler.handlers.authenticate.<computed>.innerHandle (/home/runner/work/etherpad/etherpad/src/tests/backend/specs/webaccess.ts:374:62)
...

2954:  ✔ returns 500 if an exception is thrown
2955:  authorize
2956:  �[32m[2026-05-12T09:43:12.029] [INFO] http - �[39mSuccessful authentication from IP ANONYMOUS for user user
2957:  ✔ is not called if !requireAuthorization (non-/admin)
2958:  �[32m[2026-05-12T09:43:12.031] [INFO] http - �[39mSuccessful authentication from IP ANONYMOUS for user admin
2959:  ✔ is not called if !requireAuthorization (/admin)
2960:  �[32m[2026-05-12T09:43:12.033] [INFO] http - �[39mSuccessful authentication from IP ANONYMOUS for user user
2961:  ✔ defers if empty list returned
2962:  �[32m[2026-05-12T09:43:12.035] [INFO] http - �[39mSuccessful authentication from IP ANONYMOUS for user user
2963:  ✔ does not defer if return [true], 200
2964:  �[32m[2026-05-12T09:43:12.038] [INFO] http - �[39mSuccessful authentication from IP ANONYMOUS for user user
2965:  ✔ does not defer if return [false], 403
2966:  �[32m[2026-05-12T09:43:12.040] [INFO] http - �[39mSuccessful authentication from IP ANONYMOUS for user user
2967:  ✔ passes req.path in context
2968:  �[32m[2026-05-12T09:43:12.042] [INFO] http - �[39mSuccessful authentication from IP ANONYMOUS for user user
2969:  �[91m[2026-05-12T09:43:12.042] [ERROR] settings - �[39mError: exception test
2970:  at Handler.handlers.authorize.<computed>.innerHandle (/home/runner/work/etherpad/etherpad/src/tests/backend/specs/webaccess.ts:452:59)
2971:  at Handler.handle (/home/runner/work/etherpad/etherpad/src/tests/backend/specs/webaccess.ts:166:24)
2972:  at <anonymous> (/home/runner/work/etherpad/etherpad/src/static/js/pluginfw/hooks.ts:273:18)
2973:  at new Promise (<anonymous>)
2974:  at callHookFnAsync (/home/runner/work/etherpad/etherpad/src/static/js/pluginfw/hooks.ts:236:16)
2975:  at Object.exports.aCallFirst (/home/runner/work/etherpad/etherpad/src/static/js/pluginfw/hooks.ts:411:38)
2976:  at Object.exports.aCallFirst (/home/runner/work/etherpad/etherpad/src/static/js/pluginfw/hooks.ts:405:41)
2977:  at <anonymous> (/home/runner/work/etherpad/etherpad/src/node/hooks/express/webaccess.ts:18:9)
2978:  at new Promise (<anonymous>)
2979:  at aCallFirst (/home/runner/work/etherpad/etherpad/src/node/hooks/express/webaccess.ts:17:68)
2980:  at aCallFirst0 (/home/runner/work/etherpad/etherpad/src/node/hooks/express/webaccess.ts:23:66)
2981:  at authorize (/home/runner/work/etherpad/etherpad/src/node/hooks/express/webaccess.ts:135:30)
2982:  at checkAccess (/home/runner/work/etherpad/etherpad/src/node/hooks/express/webaccess.ts:220:22)
2983:  at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
2984:  ✔ returns 500 if an exception is thrown
2985:  webaccess: authnFailure, authzFailure, authFailure hooks
2986:  �[32m[2026-05-12T09:43:12.044] [INFO] http - �[39mFailed authentication from IP ANONYMOUS
2987:  �[33m[2026-05-12T09:43:12.044] [WARN] settings - �[39mauthFailure hook used by the fake_plugin plugin (fake_plugin/authFailure) is deprecated: use the authnFailure and authzFailure hooks instead
2988:  ✔ authn fail, no hooks handle -> 401
2989:  �[32m[2026-05-12T09:43:12.047] [INFO] http - �[39mFailed authentication from IP ANONYMOUS
2990:  ✔ authn fail, authnFailure handles
2991:  �[32m[2026-05-12T09:43:12.048] [INFO] http - �[39mFailed authentication from IP ANONYMOUS
2992:  ✔ authn fail, authFailure handles
2993:  �[32m[2026-05-12T09:43:12.050] [INFO] http - �[39mFailed authentication from IP ANONYMOUS
2994:  ✔ authnFailure trumps authFailure
2995:  �[32m[2026-05-12T09:43:12.051] [INFO] http - �[39mSuccessful authentication from IP ANONYMOUS for user user
2996:  ✔ authz fail, no hooks handle -> 403
2997:  �[32m[2026-05-12T09:43:12.053] [INFO] http - �[39mSuccessful authentication from IP ANONYMOUS for user user
2998:  ✔ authz fail, authzFailure handles
2999:  �[32m[2026-05-12T09:43:12.055] [INFO] http - �[39mSuccessful authentication from IP ANONYMOUS for user user
3000:  ✔ authz fail, authFailure handles
3001:  �[32m[2026-05-12T09:43:12.057] [INFO] http - �[39mSuccessful authentication from IP ANONYMOUS for user user
...

3130:  ✔ author already exists, no pads
3131:  ✔ author already exists, on different pad
3132:  ✔ author already exists, on same pad
3133:  enforces consistent pad ID
3134:  ✔ pad record has different pad ID
3135:  ✔ globalAuthor record has different pad ID
3136:  ✔ pad rev record has different pad ID
3137:  order of records does not matter
3138:  ✔ [0,1,2]
3139:  ✔ [0,2,1]
3140:  ✔ [1,0,2]
3141:  ✔ [1,2,0]
3142:  ✔ [2,0,1]
3143:  ✔ [2,1,0]
3144:  old .etherpad imports without author metadata
3145:  ✔ imports without error when revision lacks meta.author
3146:  ✔ getRevisionAuthor returns empty string for missing author
3147:  exportEtherpadAdditionalContent
3148:  ✔ imports from custom prefix
3149:  ✔ rejects records for pad with similar ID
3150:  /home/runner/work/etherpad/etherpad/src/tests/backend/specs/LinkInstaller.ts
3151:  readFileSync with plain paths (bug fix)
3152:  ✔ reads a plugin package.json using a plain file path and utf-8
3153:  ✔ path.join produces a plain string path, not a URL object
3154:  addSubDependency-style resolution
3155:  ✔ recursively resolves nested dependencies from package.json files
3156:  error handling when package.json is missing
3157:  ✔ logs an error instead of crashing when package.json does not exist
3158:  /home/runner/work/etherpad/etherpad/src/tests/backend/specs/Pad.ts
...

3314:  ✔ does not start until needed
3315:  ✔ fewer than buffer size
3316:  ✔ exactly buffer size
3317:  ✔ more than buffer size
3318:  ✔ buffered Promise rejections are suppressed while iterating (99ms)
3319:  ✔ buffered Promise rejections are unsuppressed when iteration completes (100ms)
3320:  map
3321:  ✔ empty
3322:  ✔ does not start until needed
3323:  ✔ works
3324:  /home/runner/work/etherpad/etherpad/src/tests/backend/specs/anonymizeAuthor.ts
3325:  ✔ zeroes the display identity on globalAuthor:<id>
3326:  ✔ drops token2author and mapper2author mappings pointing at the author
3327:  ✔ is idempotent — second call returns zero counters
3328:  ✔ returns zero counters for an unknown authorID
3329:  ✔ re-runs the sweep when a prior call errored before setting erased=true
3330:  /home/runner/work/etherpad/etherpad/src/tests/backend/specs/anonymizeIp.ts
...

3426:  textColorFromBackgroundColor — invariant
3427:  ✔ always picks whichever of black/white gives the higher contrast
3428:  /home/runner/work/etherpad/etherpad/src/tests/backend/specs/compactPad.ts
3429:  API.compactPad()
3430:  ✔ collapses all history when keepRevisions is omitted
3431:  ✔ keeps only the last N revisions when keepRevisions is a number
3432:  ✔ rejects negative keepRevisions
3433:  ✔ rejects non-numeric keepRevisions
3434:  ✔ rejects fractional keepRevisions
3435:  ✔ refuses to run when cleanup.enabled is false
3436:  HTTP API dispatch (1.3.1)
3437:  ✔ passes keepRevisions from query string into compactPad (39ms)
3438:  ✔ collapses all history when keepRevisions is absent from URL
3439:  runCompactAll (bin/compactAllPads loop)
3440:  ✔ parses --keep / --dry-run / no args
3441:  �[91m[2026-05-12T09:43:24.943] [ERROR] settings - �[39m--keep expects a non-negative integer; got abc
3442:  �[91m[2026-05-12T09:43:24.943] [ERROR] settings - �[39m--keep expects a non-negative integer; got -1
3443:  ✔ rejects --keep with non-integer / negative / unknown args
3444:  ✔ compacts every pad and tallies before/after revisions
3445:  ✔ honours --keep N by passing it through to compactPad
3446:  ✔ --dry-run does not call compactPad
3447:  ✔ keeps going when one pad fails to compact
3448:  ✔ keeps going when one pad fails the pre-flight count
3449:  ✔ reports listAllPads failure without iterating
3450:  ✔ handles an empty instance
3451:  ✔ end-to-end against the real HTTP handler (39ms)
3452:  runCompactStale (bin/compactStalePads loop)
3453:  ✔ parses --older-than / --keep / --dry-run
3454:  �[91m[2026-05-12T09:43:24.986] [ERROR] settings - �[39m--older-than is required
3455:  �[91m[2026-05-12T09:43:24.986] [ERROR] settings - �[39m--older-than is required
3456:  �[91m[2026-05-12T09:43:24.986] [ERROR] settings - �[39m--older-than expects a non-negative integer; got abc
3457:  �[91m[2026-05-12T09:43:24.986] [ERROR] settings - �[39m--older-than expects a non-negative integer; got -1
3458:  ✔ rejects missing / invalid --older-than and unknown args
3459:  ✔ only compacts pads older than the cutoff
3460:  ✔ honours --keep N for stale pads
3461:  ✔ --dry-run does not call compactPad on stale pads
3462:  ✔ keeps going when one stale pad fails to compact
3463:  ✔ counts a getLastEdited failure as a failure but keeps going
3464:  ✔ reports listAllPads failure without iterating
3465:  ✔ handles an empty instance
3466:  ✔ handles an instance where every pad is fresh
3467:  ✔ skips a pad that gets edited between selection and compaction
3468:  ✔ counts a getLastEdited recheck failure as a failure
3469:  ✔ --older-than 0 treats every pad as stale
...

3497:  ✔ text matches
3498:  ✔ alines match
3499:  ✔ attributes are sorted in canonical order
3500:  A single completely empty line break within an ol should reset count if OL is closed off..
3501:  ✔ text matches
3502:  ✔ alines match
3503:  ✔ attributes are sorted in canonical order
3504:  A single <p></p> should create a new line
3505:  ✔ text matches
3506:  ✔ alines match
3507:  ✔ attributes are sorted in canonical order
3508:  Tests if ols properly get line numbers when in a normal OL #2
3509:  ✔ text matches
3510:  ✔ alines match
3511:  ✔ attributes are sorted in canonical order
3512:  First item being an UL then subsequent being OL will fail
3513:  - text matches
...

3621:  ✔ text matches
3622:  ✔ alines match
3623:  ✔ attributes are sorted in canonical order
3624:  nbsp preserved across span boundary
3625:  ✔ text matches
3626:  ✔ alines match
3627:  ✔ attributes are sorted in canonical order
3628:  /home/runner/work/etherpad/etherpad/src/tests/backend/specs/ensureAuthorTokenCookie.ts
3629:  ✔ mints a fresh t.* token when the cookie is absent
3630:  ✔ reuses the cookie value and does not emit Set-Cookie when already set
3631:  ✔ sets Secure when the request is HTTPS
3632:  ✔ uses SameSite=None when embedded cross-site (Sec-Fetch-Site: cross-site)
3633:  ✔ ignores an invalid existing cookie and mi...

@dependabot @github
Copy link
Copy Markdown
Contributor Author

dependabot Bot commented on behalf of github May 12, 2026

A newer version of ueberdb2 exists, but since this PR has been edited by someone other than Dependabot I haven't updated it. You'll get a PR for the updated version as normal once this PR is merged.

@JohnMcLear
Copy link
Copy Markdown
Member

I think rustydb might have a bug so going to let this one simmer for a few weeks and see if someone isolates it, if not I'll have to debug. For now, leave it to simmer :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file javascript Pull requests that update Javascript code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant