설정 저장을 차단해야 할 검증 리스너가 core.plugin_settings.before_save 를
구독하면서 sync 를 선언하지 않았다. Action 훅의 기본값은 큐 디스패치이고
실환경 큐 드라이버는 database 이므로, ValidationException 이 워커 안에서 죽고
PluginSettingsService::save 는 doAction 직후 저장을 그대로 진행했다.
결과적으로 범위 밖 가상계좌 유효시간, 허용값 밖 에스크로 설정, 빈 CBT 라이브
필수값이 아무 저항 없이 저장됐다. 리스너 docblock 이 스스로 약속한 422 응답도
나가지 않았다.
두 리스너에 sync 를 선언해 저장 트랜잭션 안에서 동기 실행되도록 했다.
회귀 가드는 훅 디스패치 경로를 실제로 통과시킨다. phpunit.xml 이 큐 드라이버를
sync 로 강제해 큐 경로도 즉시 실행되므로, Queue::fake 로 운영과 같은 비동기
상황을 만들어야 결함이 드러난다 — 리스너 메서드를 직접 호출하는 기존 테스트는
이 결함을 구조적으로 잡지 못한다.