CAST_AGE_KEY_FILE_<ENV> is unsettable for env names containing a hyphen #102
Labels
No labels
blocked
blocker:ci-red
blocker:conflict
blocker:drill-pending
blocker:unrequested
bug
claimed
documentation
enhancement
epic
merge-next
needs-triage
ready
release
scope:apply
scope:capture
scope:coolify-api
scope:fleet
scope:manifest
scope:secrets
stale
state:addressing
state:bots-reviewing
state:building
state:needs-human
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: heavy-duty/cast#102
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Found by the 2026-07-19 release drill (two live Coolify 4.1.2 instances, cast 0.1.0 installed from a rehearsal release asset).
What happened
With an environment named
drill-b, the attended-key path is advertised as:CAST_AGE_KEY_FILE_DRILL-Bcontains a hyphen — no POSIX shell can set that variable.src/secrets.ts:82derives it as:envName.toUpperCase()alone, no character mapping. Setting the natural guessCAST_AGE_KEY_FILE_DRILL_B(underscore) is not recognized. The standing-key fallback works (that's how the drill proceeded), but the per-invocation channel — the one the error message leads with, and the one that supports process substitution for never-on-disk keys — is unreachable for any hyphenated environment name.Environment names are operator-chosen and hyphens are common (
drill-b,us-east,pre-prod).Suggested fix
Map the env name to a settable variable name, e.g.
envName.toUpperCase().replace(/[^A-Z0-9]/g, "_"), accept it in the lookup, and print the mapped name in the refusal. (Worth a test with a hyphenated env name — the existing suite only uses single-word envs.)🤖 Filed from the release-drill session.