New features
* feat!: raise error for out-of-bounds axis in `ak.cartesian` by agoose77 in https://github.com/scikit-hep/awkward/pull/2411
* feat: make `ak.numba.GrowableBuffer` visible by ianna in https://github.com/scikit-hep/awkward/pull/2403
Bug-fixes and performance
* fix: unify C++ and Python `GrowableBuffer::extend` algorithm by ianna in https://github.com/scikit-hep/awkward/pull/2396
* fix: return empty list if broadcasting no arrays by agoose77 in https://github.com/scikit-hep/awkward/pull/2407
* fix: only convert NEP18 arguments to layouts if required by agoose77 in https://github.com/scikit-hep/awkward/pull/2409
* fix: partially fix string broadcasting by agoose77 in https://github.com/scikit-hep/awkward/pull/2410
* fix: correctly convert unknown scalar from kernel to a length by agoose77 in https://github.com/scikit-hep/awkward/pull/2417
* fix: support unknown lengths when broadcasting unions by agoose77 in https://github.com/scikit-hep/awkward/pull/2418
* fix: consistently set a `resize` default value to 8 - that is passed to GrowableBuffer by ianna in https://github.com/scikit-hep/awkward/pull/2421
* fix: `is_equal_to` bug in `UnionArray` by agoose77 in https://github.com/scikit-hep/awkward/pull/2426
* fix: handle reordered contents in `ak.almost_equal` by agoose77 in https://github.com/scikit-hep/awkward/pull/2424
* fix: typetracer `nplike.repeat` & `ak.with_field` by agoose77 in https://github.com/scikit-hep/awkward/pull/2429
Other
* ci: attach header-only artifact to release by agoose77 in https://github.com/scikit-hep/awkward/pull/2406
* chore: update pre-commit hooks by pre-commit-ci in https://github.com/scikit-hep/awkward/pull/2423
* chore(deps): bump pypa/cibuildwheel from 2.12.1 to 2.12.3 by dependabot in https://github.com/scikit-hep/awkward/pull/2415
* refactor: add custom axis error by agoose77 in https://github.com/scikit-hep/awkward/pull/2412
**Full Changelog**: https://github.com/scikit-hep/awkward/compare/v2.1.3...v2.1.4