fix(commands): unpin /reset from Slack priority aliases — registry hit the 50-cap

CI tests the PR merged with current main, where the new /memory canonical
command filled Slack's 50-slash cap: with btw/bg/reset all pinned ahead of
canonicals, the last canonical (/debug) got clamped and the Telegram-parity
test failed. Canonical commands must win slots over alias spellings — /new
keeps its native slot and 'reset' stays reachable via /hermes reset.

Also updates test_includes_aliases_as_first_class_slashes to assert the
pinned-alias contract (_SLACK_PRIORITY_ALIASES survive) instead of a
specific unpinned alias's survival, which was the same change-detector
pattern the docstring already warned about.
This commit is contained in:
Teknium 2026-06-10 05:40:35 -07:00
parent e8b757845d
commit 3c489fda81
2 changed files with 12 additions and 6 deletions

View file

@ -1037,7 +1037,11 @@ _SLACK_RESERVED_COMMANDS = frozenset({
# unrelated command landed. These claim their slots right after /hermes,
# ahead of both canonical names and the rest of the aliases. Anything not
# listed here still degrades gracefully (reachable via /hermes <command>).
_SLACK_PRIORITY_ALIASES = ("btw", "bg", "reset")
# Keep this list TIGHT: every pinned alias takes a slot a canonical command
# would otherwise get, and the Telegram-parity test fails when a canonical
# gets clamped ("reset" was unpinned for exactly that — /new keeps its
# native slot, the alias spelling stays reachable via /hermes reset).
_SLACK_PRIORITY_ALIASES = ("btw", "bg")
def _sanitize_slack_name(raw: str) -> str:

View file

@ -336,20 +336,22 @@ class TestSlackNativeSlashes:
)
def test_includes_aliases_as_first_class_slashes(self):
"""Aliases (/btw, /bg, /reset, …) must be registered as standalone
"""Aliases (/btw, /bg, …) must be registered as standalone
slashes this is the whole point of native-slashes parity.
Asserts the contract (aliases are surfaced as first-class slashes),
not a specific alias's survival of Slack's 50-slash clamp which alias
lands last shifts whenever a canonical command is added, so pinning one
name (previously ``q``) made this a change-detector.
lands last shifts whenever a canonical command is added. Only the
explicitly pinned ``_SLACK_PRIORITY_ALIASES`` are guaranteed slots;
every other alias (e.g. ``reset``) may be clamped once the registry
fills the cap canonical commands win the contest, and clamped
aliases stay reachable via ``/hermes <alias>``.
"""
slashes = slack_native_slashes()
names = {n for n, _d, _h in slashes}
# Aliases that sort early in the registry always fit under the cap.
# The pinned priority aliases are guaranteed to survive the clamp.
assert "btw" in names
assert "bg" in names
assert "reset" in names
# And at least one alias is surfaced as an alias entry (description
# carries the "Alias for /…" marker), proving the alias pass ran.
assert any(d.startswith("Alias for /") for _n, d, _h in slashes)