Skip to content

Update exception message to include an error code and link. #336

Description

@flossypurse

Note

UPDATE 2026-07-08 — re-scoped against 0.7.x. The original failure mode below is gone: the SDK now raises typed errors (FunctionNotFoundError et al., src/resonate/error.py), and an unregistered function on an incoming task is logged and the task released — the worker no longer stops. What remains open is the original ask: no error class carries an error code or docs link. Proposal per @dfarr below and resonatehq/design#1: append http://rn8.io/e/{code} to ResonateError.__str__ with the code as the switch. Note the docs page moved to https://docs.resonatehq.io/debug/errors, and rn8.io/e/* forwarding is not yet live (still 404), so the holding condition from 2025 still applies.

I recently hit a "Function not registered" error. Example:

📦 Version:     0.6.3
🧵 Thread:      message-source
❌ Exception:   ValueError('function game not found in registry')
📄 Stacktrace:
─────────────────────────────────────────────────────────────────────
Traceback (most recent call last):
  File "/Users/flossypurse/code/darkforest/service/.venv/lib/python3.13/site-packages/resonate/utils.py", line 22, in wrapper
    return func(*args, **kwargs)
  File "/Users/flossypurse/code/darkforest/service/.venv/lib/python3.13/site-packages/resonate/bridge.py", line 307, in _process_msgs
    self._cq.put_nowait(_invoke(root))
                        ~~~~~~~^^^^^^
  File "/Users/flossypurse/code/darkforest/service/.venv/lib/python3.13/site-packages/resonate/bridge.py", line 282, in _invoke
    _, func, version = self._registry.get(data["func"], data["version"])
                       ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/flossypurse/code/darkforest/service/.venv/lib/python3.13/site-packages/resonate/registry.py", line 42, in get
    raise ValueError(msg)
ValueError: function game not found in registry

I believe this is equivalent to the FunctionNotRegisteredException (03) error in TS:
resonatehq/resonate-sdk-ts#158 (comment)

Let's add the equivalent error name, error code, and link to the code here: https://docs.resonatehq.io/operate/errors to the Python SDK.

Additionally, this error currently causes a process exit - so the node stops working.

We may want to revisit that, and consider logging by default for this specific error.

Metadata

Metadata

Assignees

Labels

help welcomeTeam work makes the dream work, feel free to help out!noteworthyAll acts of improvement are noteworthy here and everyone knows everyone must start somewhere.

Projects

Status
Thinking about it

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions