Step 1 of 2 toward removing `apk add` from the zigbee2mqtt seed-data init container, which currently installs jq on every pod start. Owner directive: baking tools into a layered image is fine, adding them at runtime is not. This commit only adds the image and its build step; nothing consumes it yet, so it is inert on merge. The Deployment cannot be switched in the same commit because runtime images in this repo are pinned by DIGEST (as the secret-rotator CronJobs are), and the digest does not exist until this has built and pushed. The build therefore writes it out via kaniko's --image-name-with-digest-file and echoes it as "PIN THIS:", so the follow-up commit can copy the reference straight from the build log without a separate registry query. Why a real JSON parser rather than busybox sed/awk: "key" occurs 12 times in the actual backup — once per device with an APS link_key — and the FIRST occurrence is a device key, because "devices" sorts before "network_key". An extraction that is not correctly anchored yields a device link key, herdsman then forms a NEW network, and every device drops off. This was reproduced while prototyping the awk approach, which is what makes jq worth an image here rather than clever one-liners in the manifest. Follows the existing conventions: Containerfile alongside the other ci/images entries, base pinned by digest to the same alpine:3.21 the ci-k8s image uses, kaniko build gated on its own path so unrelated pushes do not rebuild it, and date + latest tags pushed as the other images do. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>