feat/254-with-dry-run
main
- withDryRun(opts) — only handles dry-run skip - onFail(opts) — only handles try/catch error wrapping - decorateRole(role, [...]) — composes decorators left-to-right - RoleDecorator<M> type for custom decorators Addresses review feedback on #255
Extracts repeated dry-run skip + try/catch error handling into a reusable wrapper. Includes tests. Closes #254