Thanks; yes, that was a typo. Responding from an ipad on a shaky surface... bit surprised that was the only one.
$ ltree /etc/facter/facts.d
drwxr-xr-x. 2 root root 4096 May 28 08:07 /etc/facter/facts.d
drwxr-xr-x. 3 root root 4096 May 28 08:06 /etc/facter
drwxr-xr-x. 122 root root 12288 May 28 08:06 /etc
A cleaned up root debug facter run shows that root is hitting all three directories:
sudo facter --debug env 2>&1
2016-05-28 08:11:41.053089 INFO puppetlabs.facter - executed with command line: --debug env.
[[snip]]
2016-05-28 08:11:41.079647 INFO puppetlabs.facter - requested queries: env.
2016-05-28 08:11:41.079776 DEBUG puppetlabs.facter - fact "facterversion" has resolved to "3.2.0".
2016-05-28 08:11:41.080092 DEBUG puppetlabs.facter - searching "/opt/puppetlabs/facter/facts.d" for external facts.
[[snip]]
2016-05-28 08:11:41.091406 DEBUG | - env=tst
2016-05-28 08:11:41.091561 DEBUG puppetlabs.facter - fact "env" has resolved to "tst".
2016-05-28 08:11:41.091700 DEBUG leatherman.execution:555 - process exited with status code 0.
2016-05-28 08:11:41.091785 DEBUG puppetlabs.facter - completed resolving facts from executable file "/opt/puppetlabs/facter/facts.d/hosts".
2016-05-28 08:11:41.091933 DEBUG puppetlabs.facter - searching "/etc/facter/facts.d" for external facts.
[[snip]]
2016-05-28 08:11:41.103835 DEBUG | - env=tst
2016-05-28 08:11:41.103998 DEBUG puppetlabs.facter - fact "env" has changed from "tst" to "tst".
2016-05-28 08:11:41.104163 DEBUG leatherman.execution:555 - process exited with status code 0.
2016-05-28 08:11:41.104294 DEBUG puppetlabs.facter - completed resolving facts from executable file "/etc/facter/facts.d/hosts".
2016-05-28 08:11:41.104428 DEBUG puppetlabs.facter - searching "/etc/puppetlabs/facter/facts.d" for external facts.
[[snip]]
2016-05-28 08:11:41.116165 DEBUG | - env=tst
2016-05-28 08:11:41.116332 DEBUG puppetlabs.facter - fact "env" has changed from "tst" to "tst".
2016-05-28 08:11:41.116493 DEBUG leatherman.execution:555 - process exited with status code 0.
Does emphasize the point that I should have those in one and only one of those directories...
Following is the same debug run (with nothing snipped) from a non-root user showing that it's not hitting any of those directories:
$ facter --debug env
2016-05-28 08:16:03.979516 INFO puppetlabs.facter - executed with command line: --debug env.
2016-05-28 08:16:03.980478 INFO leatherman.ruby:133 - ruby loaded from "/opt/puppetlabs/puppet/lib/libruby.so.2.1.0".
2016-05-28 08:16:04.006387 INFO leatherman.ruby:182 - using ruby version 2.1.9
2016-05-28 08:16:04.006507 INFO puppetlabs.facter - requested queries: env.
2016-05-28 08:16:04.006616 DEBUG puppetlabs.facter - fact "facterversion" has resolved to "3.2.0".
2016-05-28 08:16:04.006961 DEBUG puppetlabs.facter - skipping external facts for "/home/doug.oleary/.puppetlabs/opt/facter/facts.d": No such file or directory
2016-05-28 08:16:04.007032 DEBUG puppetlabs.facter - skipping external facts for "/home/doug.oleary/.facter/facts.d": No such file or directory
2016-05-28 08:16:04.007065 DEBUG puppetlabs.facter - no external facts were found.
2016-05-28 08:16:04.007681 DEBUG puppetlabs.facter - loading all custom facts.
2016-05-28 08:16:04.007756 DEBUG puppetlabs.facter - fact "env" does not exist.
It looks like facter, run as a non-root user, is limited to personal home directories. So, rephrasing the original question: is there some way to tell non-root facter runs to use the standard directories without having to add '--external-dir' everytime?
Thanks for the responses.