Payment needs to be XRD | The proposal fee bucket is not $XRD. | Pay in $XRD. The vote call raises the same check under its own name, Vote fee needs to be XRD; the trigger is free, so it has no such check. |
Title too long (max 512 bytes) · Description too long (max 16384 bytes) · Option title too long (max 256 bytes) · Option description too long (max 4096 bytes) · Option extra too long (max 1024 bytes) | A text field over the limit the message names. The limits count bytes, not characters, so accented letters, other scripts and emoji reach them sooner than their length suggests. | Shorten the field the message names. |
Must have at least 1 DAO Token | The proof handed to create_proposal carries less of the caper's governance token than the message names. | Buy the caper's token first. |
Insufficient proposal fee | The payment is below the proposal fee for this slate. Options that move more value pay a larger fee, and a slate that moves nothing (DEBATE, UPGRADE, METADATA) pays the minimum. | Pay at least the amount the Proposal fee line on the create-proposal form shows. The contract takes the fee and returns any excess, so paying a margin over it costs nothing. The form marks the figure as an estimate when an option is paid in a caper's token, whose price can move before the transaction lands. |
Must have at least 2 options · Must have at most 5 options | A slate with too few or too many options. | Resize the slate. |
Options must include a no-op ("Do nothing") | No option is marked as the no-op. | Add the no-op; the Caper app appends one for you. Without it nobody could vote to reject. |
Options must include an answer other than "Do nothing" | Every option is a no-op. | Add an executable action or a debate position. |
Unknown action kind (VOTE actions are retired) | An option whose action kind the contract does not recognize. | The VOTE kind was retired, so a proposal built against the old interface aborts here. Rebuild it against the current kinds. |
DEBATE options carry no execution fields | A debate option carrying a currency, amount, recipient, target cashtag, target resource or candidate component. | Remove the execution fields. A debate is settled by the ballot and goes no further. |
Only the $CAPER caper may propose a platform upgrade | An UPGRADE option on any caper other than $CAPER. | Each caper governs its own treasury; the platform itself is governed by $CAPER. Take it there. |
new_main is not a CaperMain component (blueprint: {}) | An UPGRADE naming a candidate that is not a deployed CaperMain. | Name a deployed CaperMain. The message prints the blueprint it found instead. |
METADATA must target this caper's own token | A METADATA option pointed at another caper's token. | A caper may rewrite only its own token's metadata. |
Payout needs recipient · Payout needs currency · Payout needs amount | A PAYOUT option missing one of its three required fields. | Fill all three. Every argument is fixed at creation, so none can be added at execution. |
Invest amount below the 0.001 XRD buy minimum | An INVEST option smaller than the minimum buy. | Raise the amount. An INVEST executes as an ordinary buy and has the same minimum. |
Payout amount must be positive · Divest amount must be positive | A PAYOUT or DIVEST naming zero or less. | Name a positive amount. |
Invest needs target_resource · Invest needs amount · Divest needs target_resource · Divest needs amount | An INVEST or DIVEST option missing a required field. | Supply the token and the amount at creation, for the same reason as PAYOUT. |
UPGRADE action missing new_main · METADATA needs a MetadataUpdate blob in `extra` · METADATA must set at least one field | An UPGRADE with no candidate named, a METADATA whose extra field does not decode, or one that changes nothing. | Supply the missing part. The METADATA payload is checked at creation, so a malformed one fails while the proposal can still be fixed. |
Non-XRD amounts need target_cashtag to price the fee | A PAYOUT in a caper token with no cashtag naming which caper issues it. | Name the issuing cashtag: the proposal fee for a token amount is priced off that caper's market. A sibling check, target_cashtag does not issue this currency, fires if the named caper does not issue the token the payout moves. |
Proposal id already exists | The id handed to create_proposal is already taken on this caper. | Choose another. Ids are never reused, so a retried creation whose first attempt already landed fails here rather than overwriting it. |