mvanhorn/last30days-skill · error · ValueError
unknown audience register {name!r}; choose one of: {choices}
Error message
unknown audience register {name!r}; choose one of: {choices} What it means
ValueError from get_register rejecting any audience-register name not present in the _REGISTERS table (normalized by strip+lower; None defaults to 'default'). The error enumerates REGISTER_NAMES so callers know the closed set - free-form template names are deliberately unsupported.
Source
Thrown at skills/last30days/scripts/lib/registers.py:131
},
),
# ELI5 historically changed only the agent's prose. Keep the renderer
# descriptor identical to default and express its voice in SKILL.md.
"eli5": _preset("eli5"),
}
REGISTER_NAMES = tuple(_REGISTERS)
def get_register(name: str | None = None) -> AudienceRegister:
"""Return a named register, rejecting unsupported/free-form templates."""
normalized = (name or "default").strip().lower()
try:
return _REGISTERS[normalized]
except KeyError as exc:
choices = ", ".join(REGISTER_NAMES)
raise ValueError(
f"unknown audience register {name!r}; choose one of: {choices}"
) from exc
View on GitHub (pinned to c7460f6114)
Solutions
- Use one of the names listed in the error message / REGISTER_NAMES constant
- Validate user input against REGISTER_NAMES before calling get_register
- Normalize input with .strip().lower() first, since normalization happens inside but junk characters still fail
Example fix
# before
reg = get_register("hackernews") # ValueError
# after
from lib.registers import REGISTER_NAMES
name = input().strip().lower()
if name not in REGISTER_NAMES:
name = "default"
reg = get_register(name) Defensive patterns
Strategy: validation
Validate before calling
from lib.registers import REGISTER_NAMES
name = (user_input or "default").strip().lower()
if name not in REGISTER_NAMES:
name = "default" Type guard
def is_known_register(name: str | None) -> bool:
return (name or "default").strip().lower() in REGISTER_NAMES Try / catch
try:
reg = get_register(name)
except ValueError as e:
if "unknown audience register" in str(e):
reg = get_register("default") # explicit, logged fallback
raise Prevention
- Offer REGISTER_NAMES as the only choices in UIs (dropdown, not free text)
- Validate against the constant, not a hardcoded copy that can drift
- Normalize with strip().lower() before comparing
When it happens
Trigger: get_register(name) with a typo ('technical', 'eli5 '), an invented register ('pirate'), or the wrong casing handled but trailing junk not ('ELI5 ' is fine after normalization, 'eli-5' is not). The KeyError from the dict lookup is chained as __cause__.
Common situations: User-supplied register strings from CLI flags or harness prompts; config files written before a register was renamed/removed; scripts hardcoding register names that drifted across versions.
Related errors
- Polymarket item has no event id or slug
- Unknown search source in {flag_name}: {source}
- {flag_name} requires at least one source.
- Unsupported emit mode: {emit}
- [Competitors] --competitors-list is empty.\n
AI-assisted analysis of mvanhorn/last30days-skill@c7460f6114 (2026-08-15).
Data as JSON: /api/errors/b9dec28c6a604a63.
Report an issue: GitHub.