# X_CONTRACT_EXERCISE_UNDECLARED

## Means

.contract() on a non-public action names no exercise

## Typical cause

a contract suite for an action or query whose policy refuses an anonymous caller states neither the actor to exercise its handler as nor a reason to skip it, or states a blank reason

## Fix

`defineExercise({ <name>: { actor } }) in apps/web/exercise.ts, then <name>.contract({ exercise }) with that file's export — or { off: '<why this handler cannot run in a test>' } there`

[Actions](/error-codes#actions)
