shareAI-lab/learn-claude-code · error · WorkflowInputError
meta requires `name` and `description`
Error message
meta requires `name` and `description`
What it means
validate_meta requires both 'name' and 'description' to be present and truthy in the meta dict. A missing key, empty string, or None for either raises WorkflowInputError before the workflow starts. This is the mandatory-field gate that runs ahead of the finer name/description format checks.
Source
Thrown at s16_workflow_runtime/code.py:125
finally:
if handle is not None:
try:
fcntl.flock(handle.fileno(), fcntl.LOCK_UN)
finally:
handle.close()
local_lock.release()
with _run_locks_guard:
if not local_lock.locked() and _run_locks.get(run_id) is local_lock:
_run_locks.pop(run_id, None)
# -- Metadata Validation --
def validate_meta(meta):
"""Validate name, description, and optional phases before launch."""
if not isinstance(meta, dict):
raise WorkflowInputError("meta must be an object literal")
if not meta.get("name") or not meta.get("description"):
raise WorkflowInputError("meta requires `name` and `description`")
if not isinstance(meta["name"], str) or not WORKFLOW_NAME_RE.fullmatch(meta["name"]):
raise WorkflowInputError(
"meta.name must be a 1-64 character slug using letters, numbers, '.', '_', or '-'"
)
if not isinstance(meta["description"], str):
raise WorkflowInputError("meta.description must be a string")
if "phases" in meta:
if not isinstance(meta["phases"], list) or not all(
isinstance(phase, str) and phase for phase in meta["phases"]
):
raise WorkflowInputError("meta.phases must be a list of non-empty strings")
return meta
def check_permission(meta, settings=None):
"""Apply the s03 allow/deny gate before launching a workflow."""
settings = settings or {}
if meta["name"] in settings.get("deny", []):View on GitHub (pinned to 985456f4ad)
Solutions
- Set both fields to non-empty strings: a one-line summary is enough for description
- If generating meta programmatically, assert both keys before launch
- Keep a lint/test that validates every workflow fixture through validate_meta
Example fix
# before
meta = {"name": "ingest"}
# after
meta = {"name": "ingest", "description": "Ingest nightly feeds into the warehouse"} Defensive patterns
Strategy: validation
Validate before calling
def has_required_meta_fields(meta: dict) -> bool:
return bool(meta.get("name")) and bool(meta.get("description"))
assert has_required_meta_fields(meta), "meta requires non-empty name and description" Type guard
def meta_has_name_and_description(meta) -> bool:
return isinstance(meta, dict) and bool(meta.get("name")) and bool(meta.get("description")) Try / catch
try:
validate_meta(meta)
except WorkflowInputError as exc:
if "requires `name` and `description`" in str(exc):
meta.setdefault("description", "(no description provided)")
validate_meta(meta)
else:
raise Prevention
- Fill both fields in every workflow template
- Validate fixtures through validate_meta in tests
- Treat description as mandatory, unlike some other engines
When it happens
Trigger: run(meta={"name": "ingest", "description": ""}) — empty description is falsy. Forgetting the description key entirely. Conditionally building meta and skipping description for 'internal' workflows.
Common situations: Templates or snippets copied without filling all fields. Optional-description assumptions carried over from other workflow engines where description is optional.
Related errors
- meta must be an object literal
- meta.name must be a 1-64 character slug using letters, numbe
- meta.description must be a string
- meta.phases must be a list of non-empty strings
- invalid workflow runId
AI-assisted analysis of shareAI-lab/learn-claude-code@985456f4ad (2026-08-14).
Data as JSON: /api/errors/5b2458782c0283b9.
Report an issue: GitHub.