diff --git a/containers/jug/dev.Dockerfile b/containers/jug/dev.Dockerfile
index b9bbebadea7acd34306bc25b0facdec91770e286..bb9481e5177eb601e1381a2caa2c619e99da785b 100644
--- a/containers/jug/dev.Dockerfile
+++ b/containers/jug/dev.Dockerfile
@@ -69,9 +69,7 @@ export CCACHE_DIR=/ccache
 mkdir -p /var/cache/spack/blobs/sha256/
 find /var/cache/spack/blobs/sha256/ -ignore_readdir_race -atime +7 -delete
 make --jobs ${jobs} --keep-going --directory /opt/spack-environment \
-  SPACK_ENV=${SPACK_ENV} \
-  BUILDCACHE_OCI_PROMPT="eicweb" \
-  BUILDCACHE_OCI_FINAL="ghcr"
+  SPACK_ENV=${SPACK_ENV}
 ccache --show-stats
 ccache --zero-stats
 EOF
@@ -187,9 +185,7 @@ RUN --mount=type=cache,target=/ccache,id=${TARGETPLATFORM}              \
 set -e
 export CCACHE_DIR=/ccache
 make --jobs ${jobs} --keep-going --directory /opt/spack-environment \
-  SPACK_ENV=${SPACK_ENV} \
-  BUILDCACHE_OCI_PROMPT="eicweb" \
-  BUILDCACHE_OCI_FINAL="ghcr"
+  SPACK_ENV=${SPACK_ENV}
 spack gc --yes-to-all
 spack find --long --no-groups \
 | sed -e '1,/Installed packages/d;s/\([^@]*\).*/\1/g' \
diff --git a/mirrors.yaml.in b/mirrors.yaml.in
index 3ccc29313a2492c06330e1833d839eb3f1821a2e..5b89a7b011d3fae1d112d33a2a379fbd43e135b4 100644
--- a/mirrors.yaml.in
+++ b/mirrors.yaml.in
@@ -1,5 +1,6 @@
 mirrors:
   eicweb:
+    autopush: true
     url: oci://${CI_REGISTRY}/${CI_PROJECT_PATH}/spack-${SPACK_VERSION}
     signed: false
     fetch:
@@ -11,6 +12,7 @@ mirrors:
       - ${CI_REGISTRY_USER}
       - ${CI_REGISTRY_PASSWORD}
   ghcr:
+    autopush: true
     url: oci://ghcr.io/eic/spack-${SPACK_VERSION}
     signed: false
     fetch:
@@ -29,14 +31,10 @@ mirrors:
       access_pair:
       - ${S3RW_ACCESS_KEY}
       - ${S3RW_SECRET_KEY}
-      access_token: null
-      profile: null
       endpoint_url: https://eics3.sdcc.bnl.gov:9000
     push:
       url: s3://eictest/EPIC/spack/${SPACK_VERSION}
       access_pair:
       - ${S3RW_ACCESS_KEY}
       - ${S3RW_SECRET_KEY}
-      access_token: null
-      profile: null
       endpoint_url: https://eics3.sdcc.bnl.gov:9000
diff --git a/spack-environment/Makefile b/spack-environment/Makefile
index 0ce2ee2c35e0745aa8f70f6aafb8e95ab10ab44c..0362629b21adf6c936fbc7839a6de32165f2c423 100644
--- a/spack-environment/Makefile
+++ b/spack-environment/Makefile
@@ -7,9 +7,7 @@ export SPACK_COLOR = always
 
 SPACK_ENV ?= dev
 
-BUILDCACHE_S3_PROMPT :=
 BUILDCACHE_S3_FINAL :=
-BUILDCACHE_OCI_PROMPT :=
 BUILDCACHE_OCI_FINAL :=
 BUILDCACHE_OCI_BASE_IMAGE := ghcr.io/eic/debian:stable-slim
 
@@ -24,13 +22,10 @@ endif
 $(SPACK_ENV)/push: $(addprefix $(SPACK_ENV)/push/,$($(SPACK_ENV)/SPACK_PACKAGE_IDS))
 	$(foreach buildcache, $(BUILDCACHE_S3_FINAL), $(SPACK) buildcache push --private --unsigned $(buildcache) ;)
 	$(foreach buildcache, $(BUILDCACHE_S3_FINAL), $(SPACK) buildcache update-index $(buildcache) ;)
-	$(foreach buildcache, $(BUILDCACHE_S3_PROMPT), $(SPACK) buildcache update-index $(buildcache) ;)
 	$(foreach buildcache, $(BUILDCACHE_OCI_FINAL), $(SPACK) buildcache push --private --unsigned --base-image $(BUILDCACHE_OCI_BASE_IMAGE) $(buildcache) | grep -v "Using cached archive" ;)
 
 $(SPACK_ENV)/push/%: $(SPACK_ENV)/install/%
 	@mkdir -p $(dir $@)
-	$(foreach buildcache, $(BUILDCACHE_S3_PROMPT), $(SPACK) buildcache push --private --unsigned --only=package $(buildcache) /$(HASH) ;) # push $(SPEC)
-	$(foreach buildcache, $(BUILDCACHE_OCI_PROMPT), $(SPACK) buildcache push --private --unsigned --base-image $(BUILDCACHE_OCI_BASE_IMAGE) $(buildcache) /$(HASH) | grep -v "Using cached archive" ;) # push $(SPEC)
 	@touch $@
 
 $(SPACK_ENV)/spack.lock: $(SPACK_ENV)/spack.yaml Makefile
diff --git a/spack-environment/cuda/spack.yaml b/spack-environment/cuda/spack.yaml
index 629837c0039db1dabea497d7f5ec666d8f30f07b..6fa30c91fb0e348467e47b037c502b2d4a96953f 100644
--- a/spack-environment/cuda/spack.yaml
+++ b/spack-environment/cuda/spack.yaml
@@ -2,8 +2,6 @@ spack:
   include:
   - ../concretizer.yaml
   - ../packages.yaml
-  config:
-    install_missing_compilers: false
   specs:
   - acts +cuda cuda_arch=75
   - actsvg
diff --git a/spack-environment/dbg/spack.yaml b/spack-environment/dbg/spack.yaml
index ba53572ed483ad4fb868f170ec7712365a524278..0b4750f7bd41486f1d959e7b1b3f82d148acf29f 100644
--- a/spack-environment/dbg/spack.yaml
+++ b/spack-environment/dbg/spack.yaml
@@ -2,8 +2,6 @@ spack:
   include:
   - ../concretizer.yaml
   - ../packages.yaml
-  config:
-    install_missing_compilers: false
   specs:
   - acts build_type=Debug
   - algorithms build_type=Debug
diff --git a/spack-environment/packages.yaml b/spack-environment/packages.yaml
index 6c66495c87579ef41c3a120a56b13b1288f1d9e1..e548b13723e789aef0b701a2c2cf2b1a75d7374f 100644
--- a/spack-environment/packages.yaml
+++ b/spack-environment/packages.yaml
@@ -75,6 +75,11 @@ packages:
   dawncut:
     require:
     - '@1_54a'
+  dbus:
+    require:
+    # Until 1.15.12, https://gitlab.freedesktop.org/dbus/dbus/-/commit/b104667bd7ec55dda057ff4ffdde848336f253f4,
+    # the meson build assumes that the user name exists as a group name as well. Require 1.14.10 (only autotools).
+    - '@1.14.10'
   dd4hep:
     require:
     - '@1.30'
@@ -228,6 +233,10 @@ packages:
   nano:
     require:
     - '@7.2'
+  node-js:
+    require:
+    # node-js@22.3: fails with gcc-12.2 in bookworm
+    - '@20.15.0'
   nopayloadclient:
     require:
     - '@0.0.3'
diff --git a/spack-environment/prod/spack.yaml b/spack-environment/prod/spack.yaml
index 4cf7f9439af2265f79abe65f7aa100760a044fbc..c77103a253950a1c66d15a4eb25a46ab65cdd230 100644
--- a/spack-environment/prod/spack.yaml
+++ b/spack-environment/prod/spack.yaml
@@ -2,8 +2,6 @@ spack:
   include:
   - ../concretizer.yaml
   - ../packages.yaml
-  config:
-    install_missing_compilers: false
   specs:
   - acts
   - cmake
diff --git a/spack-environment/xl/spack.yaml b/spack-environment/xl/spack.yaml
index 0dc91e3472a64af8b6af19cd4a08bb5cf4f1c7fa..af9520c360df1b45927b39323e60524697efc79b 100644
--- a/spack-environment/xl/spack.yaml
+++ b/spack-environment/xl/spack.yaml
@@ -2,8 +2,6 @@ spack:
   include:
   - ../concretizer.yaml
   - ../packages.yaml
-  config:
-    install_missing_compilers: false
   specs:
   - acts
   - actsvg
diff --git a/spack.sh b/spack.sh
index 5f2ec4e06866f11001fbb028683e491624a7687a..f3adcb3920135bf7ece19ed3aff5f6f90f12484f 100644
--- a/spack.sh
+++ b/spack.sh
@@ -3,104 +3,19 @@ SPACK_ORGREPO="spack/spack"
 
 ## Spack github version, e.g. v0.18.1 or commit hash
 ## note: nightly builds will use e.g. releases/v0.19
-SPACK_VERSION="v0.22.2"
+SPACK_VERSION="v0.23.0"
 
 ## Space-separated list of spack cherry-picks
 read -r -d '' SPACK_CHERRYPICKS <<- \
 --- || true
 09f75ee426a2e05e0543570821582480ff823ba5
-f6d50f790ee8b123f7775429f6ca6394170e6de9
-63f6e6079aacc99078386e5c8ff06173841b9595
-092dc96e6c87a9c043e4421e1a524e23ec649f60
-85f13442d2a7486daba81fdd9a3b6a1182ba11f6
-f73d7d2dce226857cbc774e942454bad2992969e
-cbab451c1a342523ed75e9be1098615a597a9b59
-4fe5f35c2fff6288e4c05e5946798ad2191a2c40
-4c60deb9921ff2cbbfa6771f4f63ff812a8a5840
-b894acf1fca8eb5cc52d2267b0c4c187065998c0
-8b45fa089e24c6ab7de2eaf614977369e69daa54
-2d8ca8af6932dfd50204d1e4f6fe587dec7beef5
-d3bf1e04fca844abb7c1eeac38dda4e126c81b67
-81125c3bd80e71a2e57c7fcff8e02c4b3add5b90
-8b2fec61f23a7b8230c0ed0378d90d04d8f590d8
-2242da65fdc06e7ac04c43613dc7795164b3a7a3
-1dc63dbea6c1d42aabf0e14b51439dcc46423e79
-737b70cbbfacb3fba8054426e9b5bf8ede6d8faf
-a66586d749197841bd74e289802126f2359287a8
-7503a417731910d918a7863d1862f62c9b76429d
-f8f01c336c882f29ac364995423b9f69ac365462
-6051d56014730528da8dfa69934d93f9b7941a70
-67536058077995cab1ed23b8ca62aaf75463ae04
-7b9f8abce5cee74546a6f588f88c6f353170d52b
-096ab11961995ac8d69f7b177cbcadf618d3068e
-6c4abef75cb2b98c337f8a3179797e29dfdc9ca3
-9cdb2a8dbb742169fefe0214ee76530e7f14dfdf
-04f0af0a28e1f6ff0ef0b50e28ecf9d19fe544e6
-395491815acb20e48050b77dca457aa7cc340ca1
-43d1cdb0bd4780bff369dafa681a8a7939313784
-5bc105c01c0e458924df40d51f7111ba507689f9
-dce2f4ca7cb0c96d1be94ef6ee7a3f0c45207af0
-fbceae7773c51198a775efffd7a9e21d0fe1e05c
-e91a69a7564dfe54718541954607d89c086caf12
-26bc91fe9bde4549fb39062e1dd838b612205717
-ddf1a1a74ba2ee99377edc2100e0478c1ddd3653
-2fc056e27cb6e362b56946907c48feda61766319
-fc7125fdf3f594683d264e48160ca86717c2109d
-b98e5886e5c9b5e005b54fa727704da384d81f21
-e992e1efbdfd6072891e402371cac4741a3047a9
-8d2a6d6744cfe9663ca0aa3610bfd96c45a62333
-6d51d94dab4f780b39c614a9ecb10f5940bdae4b
 b90ac6441cfdf6425cb59551e7b0538899b69527
 ---
 ## Optional hash table with comma-separated file list
 read -r -d '' SPACK_CHERRYPICKS_FILES <<- \
 --- || true
-[67536058077995cab1ed23b8ca62aaf75463ae04]=var/spack/repos/builtin/packages/py-protobuf/package.py
-[7b9f8abce5cee74546a6f588f88c6f353170d52b]=var/spack/repos/builtin/packages/celeritas/package.py,var/spack/repos/builtin/packages/protobuf/package.py,var/spack/repos/builtin/packages/py-protobuf/package.py,var/spack/repos/builtin/packages/strace/package.py
-[8d2a6d6744cfe9663ca0aa3610bfd96c45a62333]=var/spack/repos/builtin/packages/celeritas/package.py
 ---
 ## Ref: https://github.com/spack/spack/commit/[hash]
 ## [hash]: [description]
 ## 09f75ee426a2e05e0543570821582480ff823ba5: setup-env.sh: if exe contains qemu, use /proc/$$/comm instead
-## f6d50f790ee8b123f7775429f6ca6394170e6de9: gaudi: Add version 38.1
-## 63f6e6079aacc99078386e5c8ff06173841b9595: gaudi: upstream patch when @38.1 for missing #include <list>
-## 092dc96e6c87a9c043e4421e1a524e23ec649f60: acts: pass cuda_arch to CMAKE_CUDA_ARCHITECTURES
-## 85f13442d2a7486daba81fdd9a3b6a1182ba11f6: Consolidate concretization output for environments
-## f73d7d2dce226857cbc774e942454bad2992969e: dd4hep: cleanup recipe, remove deprecated versions and patches
-## cbab451c1a342523ed75e9be1098615a597a9b59: dd4hep: Add version 1.29
-## 4fe5f35c2fff6288e4c05e5946798ad2191a2c40: xrootd: add v5.7.0
-## 4c60deb9921ff2cbbfa6771f4f63ff812a8a5840: xrootd: add github as secondary url to avoid SSL issues
-## b894acf1fca8eb5cc52d2267b0c4c187065998c0: geant4: add v11.2.2, incl g4ndl v4.7.1
-## 8b45fa089e24c6ab7de2eaf614977369e69daa54: geant4: support Qt5 and Qt6
-## 2d8ca8af6932dfd50204d1e4f6fe587dec7beef5: qt-*: add v6.7.1, v6.7.2
-## d3bf1e04fca844abb7c1eeac38dda4e126c81b67: py-vector: add through v1.4.1 (switch to hatchling)
-## 81125c3bd80e71a2e57c7fcff8e02c4b3add5b90: hepmc3: pass root variant cxxstd as HEPMC3_CXX_STANDARD
-## 8b2fec61f23a7b8230c0ed0378d90d04d8f590d8: hepmc3: add v3.3.0
-## 2242da65fdc06e7ac04c43613dc7795164b3a7a3: graphviz: add through v12.1.0
-## 1dc63dbea6c1d42aabf0e14b51439dcc46423e79: acts: add v34.1.0, v35.0.0 (identification, sycl variants changes)
-## 737b70cbbfacb3fba8054426e9b5bf8ede6d8faf: Buildcache: remove deprecated --allow-root and preview subcommand
-## a66586d749197841bd74e289802126f2359287a8: spack buildcache push: best effort
-## 7503a417731910d918a7863d1862f62c9b76429d: cuda: add v12.4.1
-## f8f01c336c882f29ac364995423b9f69ac365462: clang: support cxx20_flag and cxx23_flag
-## 6051d56014730528da8dfa69934d93f9b7941a70: fastjet: avoid plugins=all,cxx combinations
-## 67536058077995cab1ed23b8ca62aaf75463ae04: Update py-pyspark and py-py4j (py-protobuf only)
-## 7b9f8abce5cee74546a6f588f88c6f353170d52b: Add depends_on([c,cxx,fortran])
-## 096ab11961995ac8d69f7b177cbcadf618d3068e: py-onnx: link to external protobuf
-## 6c4abef75cb2b98c337f8a3179797e29dfdc9ca3: py-protobuf: drop +cpp, always require protobuf
-## 9cdb2a8dbb742169fefe0214ee76530e7f14dfdf: dd4hep: depends_on root +root7 in some cases
-## 04f0af0a28e1f6ff0ef0b50e28ecf9d19fe544e6: acts,dd4hep: restrict to podio@0 to prevent failures with podio@1
-## 395491815acb20e48050b77dca457aa7cc340ca1: dd4hep: mark conflict with root@6.31.1:
-## 43d1cdb0bd4780bff369dafa681a8a7939313784: dd4hep: Add tag for version 1.30
-## 5bc105c01c0e458924df40d51f7111ba507689f9: gfal2: new package (and dependencies)
-## dce2f4ca7cb0c96d1be94ef6ee7a3f0c45207af0: strace: add v6.11 and mpers variant (disabed by default)
-## fbceae7773c51198a775efffd7a9e21d0fe1e05c: [py-datasets] Add py-datasets version 2.20.0
-## e91a69a7564dfe54718541954607d89c086caf12: py-tabulate: add v0.8.10, v0.9.0
-## 26bc91fe9bde4549fb39062e1dd838b612205717: py-rucio-clients: new package (and dependencies)
-## ddf1a1a74ba2ee99377edc2100e0478c1ddd3653: py-urllib3: add v1.26.20
-## 2fc056e27cb6e362b56946907c48feda61766319: py-flask-compress: add v1.14
-## fc7125fdf3f594683d264e48160ca86717c2109d: py-fsspec-xrootd: new package
-## b98e5886e5c9b5e005b54fa727704da384d81f21: py-pyppeteer: new package
-## e992e1efbdfd6072891e402371cac4741a3047a9: celeritas: new version 0.4.4
-## 8d2a6d6744cfe9663ca0aa3610bfd96c45a62333: sethrj: update maintained package language dependencies
-## 6d51d94dab4f780b39c614a9ecb10f5940bdae4b: celeritas: add v0.5.0
-## b90ac6441cfdf6425cb59551e7b0538899b69527: celeritas: remove ancient versions and add CUDA package dependency
\ No newline at end of file
+## b90ac6441cfdf6425cb59551e7b0538899b69527: celeritas: remove ancient versions and add CUDA package dependency