The exim4 config file is a bit annoying because it is hard to know what statements are assignments and what statements are conditions. Below, the debug_print, driver, and data statements (in the hub_user route) are assignments, while the domains and check_local_user statements are conditions. Note how the config file designer helpfully mixed them together.

hub_user:
  debug_print = "R: hub_user for $local_part@$domain"
  driver = redirect
  domains = +local_domains
  data = ${local_part}@DCreadhost
  check_local_user

hub_user_smarthost:
  debug_print = "R: hub_user_smarthost for $local_part@$domain"
  driver = manualroute
  domains = DCreadhost
  transport = remote_smtp_smarthost
  route_list = * DCsmarthost byname
  host_find_failed = defer
  same_domain_copy_routing = yes
  check_local_user
.endif

Anyway, to help with debugging exim4 routers, you can use the -bt option to exim4:

blueeyes:~# exim4 -bt bjb bjb@localhost bjb@blueeyes
R: system_aliases for bjb@linuxbutler.ca
R: userforward for bjb@linuxbutler.ca
R: procmail for bjb@linuxbutler.ca
bjb@linuxbutler.ca
  router = procmail, transport = procmail_pipe
R: system_aliases for bjb@localhost
R: userforward for bjb@localhost
R: procmail for bjb@localhost
bjb@localhost
  router = procmail, transport = procmail_pipe
R: system_aliases for bjb@blueeyes
R: userforward for bjb@blueeyes
R: procmail for bjb@blueeyes
bjb@blueeyes
  router = procmail, transport = procmail_pipe
blueeyes:~# 

Note to self: “satellite” mail type is for machines whose mail is forwarded to another machine. Use “smarthost” for machines on which I actually read mail.