🤖 Generated by the Agentic Engineer
Why
#2857 adds a disposable Job (k8s/providers/hetzner/apps/userns-headlamp-mapping-probe/) that measures the subordinate UID/GID mapping a user-namespaced pod receives in the headlamp namespace, closing the last open acceptance criterion of #2651.
It is deliberately temporary. Filing its removal at the same time it is born, so it cannot quietly become a permanent completed Job sitting in the apps overlay — the same lifecycle discipline the platform applies to release flags.
What
Once the completed Job's logs are recorded on #2651:
Not yet actionable
Blocked until #2857 merges, the merge-queue deploy runs the Job, and its output is on #2651. Removing it before that discards the measurement it exists to take.
Why
#2857 adds a disposable Job (
k8s/providers/hetzner/apps/userns-headlamp-mapping-probe/) that measures the subordinate UID/GID mapping a user-namespaced pod receives in theheadlampnamespace, closing the last open acceptance criterion of #2651.It is deliberately temporary. Filing its removal at the same time it is born, so it cannot quietly become a permanent completed Job sitting in the apps overlay — the same lifecycle discipline the platform applies to release flags.
What
Once the completed Job's logs are recorded on #2651:
userns-headlamp-mapping-probe/resource entry fromk8s/providers/hetzner/apps/kustomization.yaml, including its explanatory comment block.k8s/providers/hetzner/apps/userns-headlamp-mapping-probe/component.headlampnamespace, and that Headlamp itself is untouched — stillAvailable 1/1, pod2/2 Ready, same PVC bound.Not yet actionable
Blocked until #2857 merges, the merge-queue deploy runs the Job, and its output is on #2651. Removing it before that discards the measurement it exists to take.