Summary
Enterprise Slack workspace/channel IDs (e.g. T0APRHSB676, D0APL3DF66S, C0APL3DF66S) contain mixed uppercase letters and digits. The is_valid_instance_name() function in src/messaging/target.rs only rejects the classic format (uppercase letter + all-digits, like T012345), causing Enterprise IDs to be misidentified as named adapter instances.
Impact
All cron jobs created from Enterprise Slack workspaces fail delivery. The stored delivery target slack:T0APRHSB676:D0APL3DF66S is parsed as:
- Expected: adapter=
slack, target=D0APL3DF66S
- Actual: adapter=
slack:T0APRHSB676, target=D0APL3DF66S
This causes broadcast() to fail with no messaging adapter named 'slack:T0APRHSB676'.
Regular (non-cron) messages are unaffected because they use the adapter reference from the inbound message object, bypassing the delivery target parser.
Root Cause
is_valid_instance_name() at line 670:
// Only rejects: uppercase letter + ALL digits (T012345)
if name.len() > 6
&& name.starts_with(|c: char| c.is_ascii_uppercase())
&& name[1..].chars().all(|c| c.is_ascii_digit())
Enterprise IDs like T0APRHSB676 have mixed uppercase+digits in the tail, so they pass through as valid instance names.
Fix
Broaden the pattern to also reject uppercase letter + uppercase/digits when length >= 9:
if name.starts_with(|c: char| c.is_ascii_uppercase()) {
let tail = &name[1..];
if (name.len() > 6 && tail.chars().all(|c| c.is_ascii_digit()))
|| (name.len() >= 9 && tail.chars().all(|c| c.is_ascii_uppercase() || c.is_ascii_digit()))
{
return false;
}
}
Fix committed on branch fix/upgrade-slack-morphism with tests.
Summary
Enterprise Slack workspace/channel IDs (e.g.
T0APRHSB676,D0APL3DF66S,C0APL3DF66S) contain mixed uppercase letters and digits. Theis_valid_instance_name()function insrc/messaging/target.rsonly rejects the classic format (uppercase letter + all-digits, likeT012345), causing Enterprise IDs to be misidentified as named adapter instances.Impact
All cron jobs created from Enterprise Slack workspaces fail delivery. The stored delivery target
slack:T0APRHSB676:D0APL3DF66Sis parsed as:slack, target=D0APL3DF66Sslack:T0APRHSB676, target=D0APL3DF66SThis causes
broadcast()to fail withno messaging adapter named 'slack:T0APRHSB676'.Regular (non-cron) messages are unaffected because they use the adapter reference from the inbound message object, bypassing the delivery target parser.
Root Cause
is_valid_instance_name()at line 670:Enterprise IDs like
T0APRHSB676have mixed uppercase+digits in the tail, so they pass through as valid instance names.Fix
Broaden the pattern to also reject uppercase letter + uppercase/digits when length >= 9:
Fix committed on branch
fix/upgrade-slack-morphismwith tests.