0.99 s[grosiree-e2e] Validating consistency between /build/source/package-lock.json and /nix/store/xg9n2cx43bwcgqzw3a1nj3wjf6f8x10c-grosiree-e2e-0.0.1-npm-deps/package-lock.json
1.02 s[grosiree-e2e] Setting npm_config_cache to /nix/store/xg9n2cx43bwcgqzw3a1nj3wjf6f8x10c-grosiree-e2e-0.0.1-npm-deps
1.83 s[grosiree-e2e] patching script interpreter paths in node_modules
1.84 s[grosiree-e2e] node_modules/prettier/bin/prettier.cjs: interpreter directive changed from "#!/usr/bin/env node" to "/nix/store/lgggxsrdzisnbligi7irlh4qmqczs0xk-nodejs-24.11.1/bin/node"
1.85 s[grosiree-e2e] node_modules/eslint/bin/eslint.js: interpreter directive changed from "#!/usr/bin/env node" to "/nix/store/lgggxsrdzisnbligi7irlh4qmqczs0xk-nodejs-24.11.1/bin/node"
1.86 s[grosiree-e2e] node_modules/@playwright/test/cli.js: interpreter directive changed from "#!/usr/bin/env node" to "/nix/store/lgggxsrdzisnbligi7irlh4qmqczs0xk-nodejs-24.11.1/bin/node"
1.87 s[grosiree-e2e] node_modules/playwright/cli.js: interpreter directive changed from "#!/usr/bin/env node" to "/nix/store/lgggxsrdzisnbligi7irlh4qmqczs0xk-nodejs-24.11.1/bin/node"
1.88 s[grosiree-e2e] node_modules/js-yaml/bin/js-yaml.js: interpreter directive changed from "#!/usr/bin/env node" to "/nix/store/lgggxsrdzisnbligi7irlh4qmqczs0xk-nodejs-24.11.1/bin/node"
1.89 s[grosiree-e2e] node_modules/acorn/bin/acorn: interpreter directive changed from "#!/usr/bin/env node" to "/nix/store/lgggxsrdzisnbligi7irlh4qmqczs0xk-nodejs-24.11.1/bin/node"
1.90 s[grosiree-e2e] node_modules/playwright-core/bin/reinstall_msedge_beta_linux.sh: interpreter directive changed from "#!/usr/bin/env bash" to "/nix/store/rlq03x4cwf8zn73hxaxnx0zn5q9kifls-bash-5.3p3/bin/bash"
1.91 s[grosiree-e2e] node_modules/playwright-core/bin/reinstall_msedge_beta_mac.sh: interpreter directive changed from "#!/usr/bin/env bash" to "/nix/store/rlq03x4cwf8zn73hxaxnx0zn5q9kifls-bash-5.3p3/bin/bash"
1.92 s[grosiree-e2e] node_modules/playwright-core/bin/reinstall_chrome_beta_mac.sh: interpreter directive changed from "#!/usr/bin/env bash" to "/nix/store/rlq03x4cwf8zn73hxaxnx0zn5q9kifls-bash-5.3p3/bin/bash"
1.93 s[grosiree-e2e] node_modules/playwright-core/bin/reinstall_chrome_stable_mac.sh: interpreter directive changed from "#!/usr/bin/env bash" to "/nix/store/rlq03x4cwf8zn73hxaxnx0zn5q9kifls-bash-5.3p3/bin/bash"
1.94 s[grosiree-e2e] node_modules/playwright-core/bin/reinstall_msedge_stable_linux.sh: interpreter directive changed from "#!/usr/bin/env bash" to "/nix/store/rlq03x4cwf8zn73hxaxnx0zn5q9kifls-bash-5.3p3/bin/bash"
1.95 s[grosiree-e2e] node_modules/playwright-core/bin/reinstall_chrome_stable_linux.sh: interpreter directive changed from "#!/usr/bin/env bash" to "/nix/store/rlq03x4cwf8zn73hxaxnx0zn5q9kifls-bash-5.3p3/bin/bash"
1.96 s[grosiree-e2e] node_modules/playwright-core/bin/reinstall_chrome_beta_linux.sh: interpreter directive changed from "#!/usr/bin/env bash" to "/nix/store/rlq03x4cwf8zn73hxaxnx0zn5q9kifls-bash-5.3p3/bin/bash"
1.97 s[grosiree-e2e] node_modules/playwright-core/bin/reinstall_msedge_dev_linux.sh: interpreter directive changed from "#!/usr/bin/env bash" to "/nix/store/rlq03x4cwf8zn73hxaxnx0zn5q9kifls-bash-5.3p3/bin/bash"
1.98 s[grosiree-e2e] node_modules/playwright-core/bin/reinstall_msedge_stable_mac.sh: interpreter directive changed from "#!/usr/bin/env bash" to "/nix/store/rlq03x4cwf8zn73hxaxnx0zn5q9kifls-bash-5.3p3/bin/bash"
1.99 s[grosiree-e2e] node_modules/playwright-core/bin/reinstall_msedge_dev_mac.sh: interpreter directive changed from "#!/usr/bin/env bash" to "/nix/store/rlq03x4cwf8zn73hxaxnx0zn5q9kifls-bash-5.3p3/bin/bash"
2.00 s[grosiree-e2e] node_modules/playwright-core/cli.js: interpreter directive changed from "#!/usr/bin/env node" to "/nix/store/lgggxsrdzisnbligi7irlh4qmqczs0xk-nodejs-24.11.1/bin/node"
2.02 s[grosiree-e2e] node_modules/playwright-core/lib/utilsBundleImpl/xdg-open: interpreter directive changed from "#!/bin/sh" to "/nix/store/rlq03x4cwf8zn73hxaxnx0zn5q9kifls-bash-5.3p3/bin/sh"
2.02 s[grosiree-e2e] node_modules/ulid/bin/cli.js: interpreter directive changed from "#! /usr/bin/env node" to "/nix/store/lgggxsrdzisnbligi7irlh4qmqczs0xk-nodejs-24.11.1/bin/node"
2.04 s[grosiree-e2e] node_modules/which/bin/node-which: interpreter directive changed from "#!/usr/bin/env node" to "/nix/store/lgggxsrdzisnbligi7irlh4qmqczs0xk-nodejs-24.11.1/bin/node"
2.11 s[grosiree-e2e] npmwarnUnknown env config "nodedir". This will stop working in the next major version of npm.
2.11 s[grosiree-e2e] npmwarnUnknown env config "platform". This will stop working in the next major version of npm.
2.11 s[grosiree-e2e] npmwarnUnknown env config "arch". This will stop working in the next major version of npm.
4.27 s[grosiree-e2e] Running 4 tests using 1 worker
4.74 s[grosiree-e2e] Skipping host requirements validation logic because `PLAYWRIGHT_SKIP_VALIDATE_HOST_REQUIREMENTS` env variable is set.
4.83 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:10 codeberg.org/mtlynch/grosiree/handlers/db_dev.go:81: provisioning a new private database with token PdP8jmyfrNq2iwgeLRo8MeLj5NNidM
4.83 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:10 codeberg.org/mtlynch/grosiree/store/sqlite/sqlite.go:24: reading DB from :memory:
4.83 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:10 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /login 200 4498
4.84 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:10 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/third-party/bootstrap@5.2.2/css/bootstrap.min.css 200 194901
4.84 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:10 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/css/style.css 200 574
4.84 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:10 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/third-party/fontawesome@6.2.0/css/solid.min.css 200 572
4.84 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:10 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/third-party/fontawesome@6.2.0/css/fontawesome.min.css 200 80651
4.84 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:10 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/third-party/bootstrap@5.2.2/js/bootstrap.bundle.min.js 200 80496
4.84 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:10 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/third-party/htmx@2.0.4/htmx.min.js 200 50917
4.85 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:10 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/js/htmx-ext/clear-before-send.js 200 775
4.85 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:10 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/js/htmx-settings.js 200 813
4.85 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:10 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/third-party/htmx-ext-response-targets@2.0.0/response-targets.js 200 3722
4.85 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:10 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/js/confirm-dialog.js 200 3023
4.95 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:10 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: POST /login 303 0
4.96 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:10 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET / 200 22396
4.98 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:10 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /api/autocomplete/items 200 3
4.98 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:10 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /api/autocomplete/sections 200 3
5.00 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:10 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: POST /api/groceries 200 943
5.01 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:10 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: POST /api/groceries/clear 200 87
5.01 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:10 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET / 200 22408
5.04 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:10 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /api/autocomplete/items 200 36
5.04 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:10 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /api/autocomplete/sections 200 10
5.11 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:10 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: POST /api/groceries 200 943
5.13 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:10 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/third-party/fontawesome@6.2.0/webfonts/fa-solid-900.woff2 200 150472
5.13 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:10 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /api/autocomplete/items 200 36
5.13 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:10 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /api/autocomplete/sections 200 10
5.40 s[grosiree-e2e] ·[WebServer] 2026/06/15 13:48:10 codeberg.org/mtlynch/grosiree/handlers/db_dev.go:81: provisioning a new private database with token aOYT2q2o4LE0orYqC8qYyryJLRJkVu
5.48 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:10 codeberg.org/mtlynch/grosiree/store/sqlite/sqlite.go:24: reading DB from :memory:
5.48 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:11 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /login 200 4498
5.48 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:11 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/third-party/bootstrap@5.2.2/css/bootstrap.min.css 200 194901
5.48 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:11 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/third-party/fontawesome@6.2.0/css/fontawesome.min.css 200 80651
5.48 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:11 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/third-party/fontawesome@6.2.0/css/solid.min.css 200 572
5.48 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:11 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/css/style.css 200 574
5.48 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:11 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/third-party/bootstrap@5.2.2/js/bootstrap.bundle.min.js 200 80496
5.48 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:11 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/third-party/htmx-ext-response-targets@2.0.0/response-targets.js 200 3722
5.48 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:11 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/js/htmx-ext/clear-before-send.js 200 775
5.48 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:11 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/third-party/htmx@2.0.4/htmx.min.js 200 50917
5.48 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:11 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/js/htmx-settings.js 200 813
5.48 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:11 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/js/confirm-dialog.js 200 3023
5.52 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:11 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: POST /login 303 0
5.53 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:11 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET / 200 22408
5.56 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:11 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /api/autocomplete/items 200 3
5.56 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:11 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /api/autocomplete/sections 200 3
5.57 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:11 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET / 200 22396
5.59 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:11 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /api/autocomplete/items 200 3
5.59 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:11 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /api/autocomplete/sections 200 3
7.11 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:12 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: POST /api/groceries 200 952
7.13 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:12 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /api/autocomplete/items 200 34
7.13 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:12 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/third-party/fontawesome@6.2.0/webfonts/fa-solid-900.woff2 200 150472
7.13 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:12 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /api/autocomplete/sections 200 3
7.44 s[grosiree-e2e] ·[WebServer] 2026/06/15 13:48:13 codeberg.org/mtlynch/grosiree/handlers/db_dev.go:81: provisioning a new private database with token 0X3LzECu5edy6TQBvxZHJGd8fzLpqW
7.44 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:13 codeberg.org/mtlynch/grosiree/store/sqlite/sqlite.go:24: reading DB from :memory:
7.44 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:13 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /login 200 4498
7.45 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:13 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/third-party/bootstrap@5.2.2/css/bootstrap.min.css 200 194901
7.45 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:13 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/third-party/fontawesome@6.2.0/css/fontawesome.min.css 200 80651
7.45 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:13 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/third-party/fontawesome@6.2.0/css/solid.min.css 200 572
7.45 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:13 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/css/style.css 200 574
7.45 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:13 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/third-party/htmx@2.0.4/htmx.min.js 200 50917
7.45 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:13 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/third-party/bootstrap@5.2.2/js/bootstrap.bundle.min.js 200 80496
7.45 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:13 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/third-party/htmx-ext-response-targets@2.0.0/response-targets.js 200 3722
7.45 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:13 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/js/htmx-ext/clear-before-send.js 200 775
7.45 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:13 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/js/htmx-settings.js 200 813
7.46 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:13 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/js/confirm-dialog.js 200 3023
7.55 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:13 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: POST /login 303 0
7.56 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:13 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET / 200 22396
7.58 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:13 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /api/autocomplete/items 200 3
7.58 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:13 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /api/autocomplete/sections 200 3
7.59 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:13 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: POST /api/groceries 200 960
7.59 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:13 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /grocery-items 200 9060
7.62 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:13 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/third-party/fontawesome@6.2.0/webfonts/fa-solid-900.woff2 200 150472
8.78 s[grosiree-e2e] ·[WebServer] 2026/06/15 13:48:14 codeberg.org/mtlynch/grosiree/handlers/db_dev.go:81: provisioning a new private database with token ajLXzZdJXghC8gLXAWsmfWzKp1QnKw
8.78 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:14 codeberg.org/mtlynch/grosiree/store/sqlite/sqlite.go:24: reading DB from :memory:
8.78 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:14 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET / 303 33
8.78 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:14 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /login 200 4498
8.78 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:14 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/third-party/bootstrap@5.2.2/css/bootstrap.min.css 200 194901
8.79 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:14 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/third-party/fontawesome@6.2.0/css/fontawesome.min.css 200 80651
8.79 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:14 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/third-party/fontawesome@6.2.0/css/solid.min.css 200 572
8.79 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:14 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/css/style.css 200 574
8.79 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:14 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/third-party/bootstrap@5.2.2/js/bootstrap.bundle.min.js 200 80496
8.79 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:14 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/third-party/htmx-ext-response-targets@2.0.0/response-targets.js 200 3722
8.79 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:14 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/third-party/htmx@2.0.4/htmx.min.js 200 50917
8.79 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:14 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/js/htmx-settings.js 200 813
8.79 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:14 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/js/htmx-ext/clear-before-send.js 200 775
8.80 s[grosiree-e2e] [WebServer] 2026/06/15 13:48:14 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/js/confirm-dialog.js 200 3023