You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
chore(deploy): retire the pre-#15610 dist/ compatibility path once every node serves via current #15648
#15610 moved the SLM frontend's served path from dist/ — a directory that was renamed on every publish — to current, a symlink flipped by a single rename(2). Two compatibility affordances were added so a node mid-migration is never left serving nothing, and both are transitional:
services/frontend_bundle_health.py — bundle_dir() falls back to _LEGACY_BUNDLE_DIR when current is absent, so a not-yet-migrated node keeps being probed instead of silently reporting not_applicable.
The leftover dist/ directory itself, which the publish deliberately does not remove: removing it would 403 any host whose nginx config still names it.
The same publish also carries the equivalent seed in services/slm_frontend_build.py (_seed_current_from_legacy_dist) and _LEGACY_DIR.
Why it cannot be done yet
Removing any of them before every node has published under the new layout turns a stale-but-serving host into a 403. The retirement is gated on evidence, not on time.
Acceptance criteria
Evidence gathered that every node in the fleet serves via current (the site config names it AND current resolves on that host)
The seed task and _seed_current_from_legacy_dist are removed together with _LEGACY_DIR
bundle_dir()'s legacy fallback and _LEGACY_BUNDLE_DIR are removed, and the probe reports on current alone
The leftover dist/ directory is removed from each node by the publish path, not by hand
#15654 adds a fourth item to the retirement list: roles/slm_manager/templates/slm-admin-ui.service.j2 now probes current/index.html, but that unit is rendered only by a full slm_manager run — update-all-nodes.yml includes service_units.yml, which renders the backend unit alone. A node updated by the self-update path therefore keeps a probe naming the pre-#15610 directory until it is next provisioned. It stays green there (the legacy directory is still on disk and the curl half is the real signal), so this is convergence debt rather than a fault — and it converges on the same event this issue is gated on.
Found while implementing #15610.
What
#15610 moved the SLM frontend's served path from
dist/— a directory that was renamed on every publish — tocurrent, a symlink flipped by a singlerename(2). Two compatibility affordances were added so a node mid-migration is never left serving nothing, and both are transitional:roles/_shared/tasks/build_publish_slm_frontend.yml— the task "Frontend: makecurrentresolve before publishing", which adopts a pre-bug(deploy): the SLM frontend promotion is two renames, so the served directory briefly does not exist #15610dist/as the firstcurrentwhen nocurrentexists yet.services/frontend_bundle_health.py—bundle_dir()falls back to_LEGACY_BUNDLE_DIRwhencurrentis absent, so a not-yet-migrated node keeps being probed instead of silently reportingnot_applicable.dist/directory itself, which the publish deliberately does not remove: removing it would 403 any host whose nginx config still names it.The same publish also carries the equivalent seed in
services/slm_frontend_build.py(_seed_current_from_legacy_dist) and_LEGACY_DIR.Why it cannot be done yet
Removing any of them before every node has published under the new layout turns a stale-but-serving host into a 403. The retirement is gated on evidence, not on time.
Acceptance criteria
current(the site config names it ANDcurrentresolves on that host)_seed_current_from_legacy_distare removed together with_LEGACY_DIRbundle_dir()'s legacy fallback and_LEGACY_BUNDLE_DIRare removed, and the probe reports oncurrentalonedist/directory is removed from each node by the publish path, not by hand