notes for myself: cache `F::app()->wg` instead of just `F::app()`