19.23 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
19.25 s[grosiree-e2e] Setting npm_config_cache to /nix/store/xg9n2cx43bwcgqzw3a1nj3wjf6f8x10c-grosiree-e2e-0.0.1-npm-deps
19.94 s[grosiree-e2e] patching script interpreter paths in node_modules
19.95 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"
19.95 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"
19.96 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"
19.97 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"
19.98 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"
19.99 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"
20.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"
20.00 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"
20.01 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"
20.02 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"
20.03 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"
20.03 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"
20.04 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"
20.05 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"
20.06 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"
20.06 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"
20.07 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"
20.08 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"
20.09 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"
20.10 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"
20.16 s[grosiree-e2e] npmwarnUnknown env config "nodedir". This will stop working in the next major version of npm.
20.16 s[grosiree-e2e] npmwarnUnknown env config "platform". This will stop working in the next major version of npm.
20.16 s[grosiree-e2e] npmwarnUnknown env config "arch". This will stop working in the next major version of npm.
22.20 s[grosiree-e2e] Running 4 tests using 1 worker
22.66 s[grosiree-e2e] Skipping host requirements validation logic because `PLAYWRIGHT_SKIP_VALIDATE_HOST_REQUIREMENTS` env variable is set.
22.74 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:25 codeberg.org/mtlynch/grosiree/handlers/db_dev.go:81: provisioning a new private database with token 6Is1qPpifV31PqzB0uZqWOYRbcCVA5
22.74 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:25 codeberg.org/mtlynch/grosiree/store/sqlite/sqlite.go:24: reading DB from :memory:
22.74 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:25 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /login 200 4498
22.75 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:25 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/third-party/bootstrap@5.2.2/css/bootstrap.min.css 200 194901
22.75 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:25 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/third-party/fontawesome@6.2.0/css/solid.min.css 200 572
22.75 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:25 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/third-party/fontawesome@6.2.0/css/fontawesome.min.css 200 80651
22.75 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:25 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/css/style.css 200 574
22.75 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:25 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/third-party/bootstrap@5.2.2/js/bootstrap.bundle.min.js 200 80496
22.75 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:25 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/third-party/htmx@2.0.4/htmx.min.js 200 50917
22.76 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:25 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/third-party/htmx-ext-response-targets@2.0.0/response-targets.js 200 3722
22.76 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:25 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/js/htmx-ext/clear-before-send.js 200 775
22.76 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:25 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/js/htmx-settings.js 200 813
22.76 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:25 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/js/confirm-dialog.js 200 3023
22.87 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:25 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: POST /login 303 0
22.87 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:25 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET / 200 22396
22.90 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:25 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /api/autocomplete/items 200 3
22.90 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:25 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /api/autocomplete/sections 200 3
22.92 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:25 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: POST /api/groceries 200 943
22.93 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:25 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: POST /api/groceries/clear 200 87
22.93 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:25 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET / 200 22396
22.95 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:25 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /api/autocomplete/sections 200 10
22.95 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:25 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /api/autocomplete/items 200 36
23.03 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:26 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: POST /api/groceries 200 943
23.04 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:26 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /api/autocomplete/items 200 36
23.04 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:26 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/third-party/fontawesome@6.2.0/webfonts/fa-solid-900.woff2 200 150472
23.04 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:26 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /api/autocomplete/sections 200 10
23.32 s[grosiree-e2e] ·[WebServer] 2026/06/15 12:42:26 codeberg.org/mtlynch/grosiree/handlers/db_dev.go:81: provisioning a new private database with token BWKtxgRAfjI8N1KoyjtY7KxJp5zTPo
23.32 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:26 codeberg.org/mtlynch/grosiree/store/sqlite/sqlite.go:24: reading DB from :memory:
23.33 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:26 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /login 200 4498
23.33 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:26 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/third-party/bootstrap@5.2.2/css/bootstrap.min.css 200 194901
23.33 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:26 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/third-party/fontawesome@6.2.0/css/fontawesome.min.css 200 80651
23.33 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:26 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/third-party/fontawesome@6.2.0/css/solid.min.css 200 572
23.33 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:26 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/css/style.css 200 574
23.34 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:26 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/third-party/htmx@2.0.4/htmx.min.js 200 50917
23.34 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:26 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/third-party/bootstrap@5.2.2/js/bootstrap.bundle.min.js 200 80496
23.34 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:26 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/js/htmx-ext/clear-before-send.js 200 775
23.34 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:26 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/third-party/htmx-ext-response-targets@2.0.0/response-targets.js 200 3722
23.34 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:26 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/js/htmx-settings.js 200 813
23.34 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:26 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/js/confirm-dialog.js 200 3023
23.44 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:26 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: POST /login 303 0
23.44 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:26 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET / 200 22396
23.47 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:26 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /api/autocomplete/items 200 3
23.47 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:26 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /api/autocomplete/sections 200 3
23.48 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:26 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET / 200 22396
23.50 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:26 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /api/autocomplete/items 200 3
23.50 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:26 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /api/autocomplete/sections 200 3
25.01 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:28 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: POST /api/groceries 200 952
25.04 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:28 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /api/autocomplete/items 200 34
25.04 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:28 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/third-party/fontawesome@6.2.0/webfonts/fa-solid-900.woff2 200 150472
25.04 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:28 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /api/autocomplete/sections 200 3
25.31 s[grosiree-e2e] ·[WebServer] 2026/06/15 12:42:28 codeberg.org/mtlynch/grosiree/handlers/db_dev.go:81: provisioning a new private database with token ZNhK9rY6inFJYNvVdkFvJaEVPagJap
25.31 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:28 codeberg.org/mtlynch/grosiree/store/sqlite/sqlite.go:24: reading DB from :memory:
25.31 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:28 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /login 200 4498
25.32 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:28 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/third-party/bootstrap@5.2.2/css/bootstrap.min.css 200 194901
25.32 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:28 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/third-party/fontawesome@6.2.0/css/solid.min.css 200 572
25.32 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:28 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/third-party/fontawesome@6.2.0/css/fontawesome.min.css 200 80651
25.32 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:28 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/css/style.css 200 574
25.32 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:28 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/third-party/bootstrap@5.2.2/js/bootstrap.bundle.min.js 200 80496
25.32 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:28 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/third-party/htmx@2.0.4/htmx.min.js 200 50917
25.32 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:28 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/js/htmx-ext/clear-before-send.js 200 775
25.32 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:28 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/third-party/htmx-ext-response-targets@2.0.0/response-targets.js 200 3722
25.32 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:28 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/js/htmx-settings.js 200 813
25.33 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:28 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/js/confirm-dialog.js 200 3023
25.42 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:28 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: POST /login 303 0
25.42 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:28 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET / 200 22408
25.45 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:28 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /api/autocomplete/items 200 3
25.45 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:28 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /api/autocomplete/sections 200 3
25.46 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:28 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: POST /api/groceries 200 960
25.46 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:28 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /grocery-items 200 9060
25.49 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:28 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/third-party/fontawesome@6.2.0/webfonts/fa-solid-900.woff2 200 150472
26.60 s[grosiree-e2e] ·[WebServer] 2026/06/15 12:42:29 codeberg.org/mtlynch/grosiree/handlers/db_dev.go:81: provisioning a new private database with token BIvoi8CE9PorUT2vCyztCjT6Bfw6zT
26.60 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:29 codeberg.org/mtlynch/grosiree/store/sqlite/sqlite.go:24: reading DB from :memory:
26.60 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:29 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET / 303 33
26.60 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:29 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /login 200 4498
26.60 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:29 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/third-party/bootstrap@5.2.2/css/bootstrap.min.css 200 194901
26.60 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:29 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/third-party/fontawesome@6.2.0/css/solid.min.css 200 572
26.60 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:29 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/css/style.css 200 574
26.60 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:29 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/third-party/fontawesome@6.2.0/css/fontawesome.min.css 200 80651
26.60 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:29 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/third-party/bootstrap@5.2.2/js/bootstrap.bundle.min.js 200 80496
26.61 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:29 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/third-party/htmx@2.0.4/htmx.min.js 200 50917
26.61 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:29 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/third-party/htmx-ext-response-targets@2.0.0/response-targets.js 200 3722
26.61 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:29 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/js/htmx-ext/clear-before-send.js 200 775
26.61 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:29 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/js/htmx-settings.js 200 813
26.61 s[grosiree-e2e] [WebServer] 2026/06/15 12:42:29 codeberg.org/mtlynch/grosiree/handlers/middleware.go:13: GET /static/js/confirm-dialog.js 200 3023