chore: renaming bundles/ to a single <tier>/<subject>.<verb>.<object> grammar
Umbrella: #69
Wave: WAVE_04 (since 2026-06-05)
Cross-repo: range42/range42#198, range42/range42-ansible_roles-debug-devkit#114, range42/range42-catalog#178
Why
bundles/ mixes three naming styles (deep path, flat hyphenated, dotted) plus a core/ catch-all, so picking the right bundle to wire into a scenario means guessing the style. This unifies everything under one predictable grammar and drops core/.
Grammar
bundles/<tier>/<subject>.<verb>.<object> - the verb is always the 2nd segment, _ never - for multi-word, the object never repeats the subject. Tiers replace core/: admin / proxmox / generic / student / ctf / decom.
Full rename map
admin/ (objects normalized - -> _)
admin/software.install.deployer-api-backend -> admin/software.install.deployer_api_backend
admin/software.install.deployer-ui -> admin/software.install.deployer_ui
admin/software.install.misp-standalone -> admin/software.install.misp_standalone
admin/software.install.wazuh-agent -> admin/software.install.wazuh_agent
admin/software.install.{gitea,kong,mattermost,nextcloud,rocketchat,wazuh} unchanged
proxmox/
core/proxmox/configure/vm-bootstrap -> proxmox/vm.bootstrap
core/proxmox/configure/templates/ubuntu_noble -> proxmox/template.build.ubuntu_noble
core/proxmox/configure/templates/alpine -> proxmox/template.build.alpine
core/proxmox/configure/templates/debian -> proxmox/template.build.debian
generic/
core/tailscale-on-group -> generic/software.install.tailscale
core/network-baseline-ssh -> generic/network.baseline.ssh
core/network-baseline-ssh-http -> generic/network.baseline.ssh_http
core/network-baseline-kong -> generic/network.baseline.kong
core/network-baseline-deployer-ui -> generic/network.baseline.deployer_ui
core/network-baseline-deployer-backend-api -> generic/network.baseline.deployer_backend_api
core/system-baseline-default -> generic/systems.baseline.default
core/system-baseline-docker-host -> generic/systems.baseline.docker_host
core/system-baseline-with-utils -> generic/systems.baseline.with_utils
core/gitclone -> generic/repo.clone
core/gitclone-kunai-repository -> generic/repo.clone.kunai_workshop
core/linux/ubuntu/install/docker -> generic/software.install.docker
core/linux/ubuntu/install/basic-packages -> generic/software.install.basic_packages
core/linux/ubuntu/install/dot-files -> generic/software.install.dotfiles
core/linux/ubuntu/install/docker-compose -> generic/software.install.docker_compose
core/linux/ubuntu/configure/add-user -> generic/credentials.create.user
core/software.install.kunai_official_workshop -> generic/software.install.kunai_official_workshop
core/software.install.warmup.dot_files -> generic/software.install.warmup_dotfiles
core/systems.configure.add_user -> generic/systems.configure.add_user
core/systems.configure.authorized_keys -> generic/systems.configure.authorized_keys
core/systems.configure.ssh_keypair -> generic/systems.configure.ssh_keypair
core/systems.configure.sudo -> generic/systems.configure.sudo
core/systems.configure.os_auto_updates -> generic/systems.configure.os_auto_updates
ping -> generic/systems.checks.ping
decom/ (dead)
core/proxmox/configure/default/vms/* (15 bundles) -> decom/
ctf/ unchanged
Shorter import prefix (RANGE42_BUNDLE_DIR)
Today every import repeats the long prefix {{ lookup('env','RANGE42_GITDIR__ROOT_DIR') }}/range42-playbooks/bundles/<...>/main.yml. A new RANGE42_BUNDLE_DIR env var (exported by range42-context, pointing straight at the bundles dir) shortens them to {{ lookup('env','RANGE42_BUNDLE_DIR') }}/<tier>/<subject>.<verb>.<object>/main.yml. import_playbook resolves at parse time, so a shortening prefix has to be an env var.)
Scenarios
The scenarios that compose these bundles are updated as part of the rename: every import_playbook reference (~165) is rewritten to the new path and switched to the RANGE42_BUNDLE_DIR prefix. git mv preserves history ; no behaviour change, only paths.
Impact
range42-playbooks for the renames + scenario refs ; range42 core for the one RANGE42_BUNDLE_DIR export. range42-backend-api and range42-deployer-ui reference a few of the moved bundles by runtime string and update on their side.
chore: renaming bundles/ to a single
<tier>/<subject>.<verb>.<object> grammarWhy
bundles/mixes three naming styles (deep path, flat hyphenated, dotted) plus acore/catch-all, so picking the right bundle to wire into a scenario means guessing the style. This unifies everything under one predictable grammar and dropscore/.Grammar
bundles/<tier>/<subject>.<verb>.<object>- the verb is always the 2nd segment,_never-for multi-word, the object never repeats the subject. Tiers replacecore/:admin/proxmox/generic/student/ctf/decom.Full rename map
Shorter import prefix (
RANGE42_BUNDLE_DIR)Today every import repeats the long prefix
{{ lookup('env','RANGE42_GITDIR__ROOT_DIR') }}/range42-playbooks/bundles/<...>/main.yml. A newRANGE42_BUNDLE_DIRenv var (exported by range42-context, pointing straight at the bundles dir) shortens them to{{ lookup('env','RANGE42_BUNDLE_DIR') }}/<tier>/<subject>.<verb>.<object>/main.yml.import_playbookresolves at parse time, so a shortening prefix has to be an env var.)Scenarios
The scenarios that compose these bundles are updated as part of the rename: every
import_playbookreference (~165) is rewritten to the new path and switched to theRANGE42_BUNDLE_DIRprefix.git mvpreserves history ; no behaviour change, only paths.Impact
range42-playbooks for the renames + scenario refs ; range42 core for the one
RANGE42_BUNDLE_DIRexport. range42-backend-api and range42-deployer-ui reference a few of the moved bundles by runtime string and update on their side.